1 #include "artdaq/ArtModules/RootDAQOutput/detail/KeptProvenance.h"
2 #include "art/Framework/Principal/Principal.h"
3 #include "canvas/Persistency/Provenance/Parentage.h"
7 detail::KeptProvenance::KeptProvenance(DropMetaData
const dropMetaData,
8 bool const dropMetaDataForDroppedData,
9 std::set<BranchID>& branchesWithStoredHistory)
10 : dropMetaData_{dropMetaData}
11 , dropMetaDataForDroppedData_{dropMetaDataForDroppedData}
12 , branchesWithStoredHistory_{branchesWithStoredHistory}
15 ProductProvenance
const&
16 detail::KeptProvenance::insert(ProductProvenance
const& pp)
18 return *provenance_.insert(pp).first;
21 ProductProvenance
const&
22 detail::KeptProvenance::emplace(BranchID
const bid, ProductStatus
const status)
24 return *provenance_.emplace(bid, status).first;
29 detail::KeptProvenance::insertAncestors(ProductProvenance
const& iGetParents,
30 Principal
const& principal)
32 if (dropMetaData_ == DropMetaData::DropAll) {
35 if (dropMetaDataForDroppedData_) {
38 auto const& parentBids = iGetParents.parentage().parents();
39 for (
auto const bid : parentBids) {
40 branchesWithStoredHistory_.insert(bid);
41 auto info = principal.branchMapper().branchToProductProvenance(bid);
42 if (!info || dropMetaData_ != DropMetaData::DropNone) {
45 auto const* bd = principal.getForOutput(info->branchID(),
false).desc();
46 if (bd && bd->produced() && provenance_.insert(*info).second) {
48 insertAncestors(*info, principal);
54 detail::KeptProvenance::setStatus(ProductProvenance
const& key,
55 ProductStatus
const status)
57 if (provenance_.erase(key) != 1ull)
58 throw Exception(errors::LogicError,
"detail::KeptProvenance::setStatus")
59 <<
"Attempt to set product status for product whose provenance is not being recorded.\n";
60 provenance_.emplace(key.branchID(), status);