CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
edm::ProductProvenanceRetriever Class Reference

#include <ProductProvenanceRetriever.h>

Classes

class  ProducedProvenanceInfo
 

Public Member Functions

ProductProvenance const * branchIDToProvenance (BranchID const &bid) const
 
ProductProvenance const * branchIDToProvenanceForProducedOnly (BranchID const &bid) const
 
void deepCopy (ProductProvenanceRetriever const &)
 
void insertIntoSet (ProductProvenance provenanceProduct) const
 
void mergeParentProcessRetriever (ProductProvenanceRetriever const &provRetriever)
 
void mergeProvenanceRetrievers (std::shared_ptr< ProductProvenanceRetriever > other)
 
ProductProvenanceRetrieveroperator= (ProductProvenanceRetriever const &)=delete
 
 ProductProvenanceRetriever (std::unique_ptr< ProvenanceReaderBase > reader)
 
 ProductProvenanceRetriever (unsigned int iTransitionIndex)
 
 ProductProvenanceRetriever (unsigned int iTransitionIndex, edm::ProductRegistry const &)
 
void readProvenanceAsync (WaitingTaskHolder task, ModuleCallingContext const *moduleCallingContext) const
 
void reset ()
 
void update (edm::ProductRegistry const &)
 
 ~ProductProvenanceRetriever ()
 

Private Member Functions

void readProvenance () const
 
void setTransitionIndex (unsigned int transitionIndex)
 
void setupEntryInfoSet (edm::ProductRegistry const &)
 

Private Attributes

std::vector< ProducedProvenanceInfoentryInfoSet_
 
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
 
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
 
std::shared_ptr< const ProvenanceReaderBaseprovenanceReader_
 
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
 
unsigned int transitionIndex_
 

Detailed Description

Definition at line 56 of file ProductProvenanceRetriever.h.

Constructor & Destructor Documentation

◆ ProductProvenanceRetriever() [1/3]

edm::ProductProvenanceRetriever::ProductProvenanceRetriever ( unsigned int  iTransitionIndex)
explicit

Definition at line 14 of file ProductProvenanceRetriever.cc.

15  : entryInfoSet_(),
18  parentProcessRetriever_(nullptr),
20  transitionIndex_(iTransitionIndex) {}

◆ ProductProvenanceRetriever() [2/3]

edm::ProductProvenanceRetriever::ProductProvenanceRetriever ( unsigned int  iTransitionIndex,
edm::ProductRegistry const &  iReg 
)

Definition at line 22 of file ProductProvenanceRetriever.cc.

24  : entryInfoSet_(),
27  parentProcessRetriever_(nullptr),
29  transitionIndex_(iTransitionIndex) {
30  setupEntryInfoSet(iReg);
31  }

References setupEntryInfoSet().

◆ ProductProvenanceRetriever() [3/3]

edm::ProductProvenanceRetriever::ProductProvenanceRetriever ( std::unique_ptr< ProvenanceReaderBase reader)
explicit

◆ ~ProductProvenanceRetriever()

edm::ProductProvenanceRetriever::~ProductProvenanceRetriever ( )

Definition at line 43 of file ProductProvenanceRetriever.cc.

43 { delete readEntryInfoSet_.load(); }

References readEntryInfoSet_.

Member Function Documentation

◆ branchIDToProvenance()

ProductProvenance const * edm::ProductProvenanceRetriever::branchIDToProvenance ( BranchID const &  bid) const

Definition at line 146 of file ProductProvenanceRetriever.cc.

146  {
147  auto itFound = std::lower_bound(
148  entryInfoSet_.begin(), entryInfoSet_.end(), bid, [](auto const& iEntry, edm::BranchID const& iValue) {
149  return iEntry.branchID() < iValue;
150  });
151  if (itFound != entryInfoSet_.end() and itFound->branchID() == bid) {
152  if (auto p = itFound->productProvenance()) {
153  return p;
154  }
155  }
157  return parentProcessRetriever_->branchIDToProvenance(bid);
158  }
159  //check in source
160  readProvenance();
161  auto ptr = readEntryInfoSet_.load();
162  if (ptr) {
163  ProductProvenance ei(bid);
164  auto itRead = ptr->find(ei);
165  if (itRead != ptr->end()) {
166  return &*itRead;
167  }
168  }
169  if (nextRetriever_) {
170  return nextRetriever_->branchIDToProvenance(bid);
171  }
172  return nullptr;
173  }

References entryInfoSet_, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, nextRetriever_, AlCaHLTBitMon_ParallelJobs::p, parentProcessRetriever_, readEntryInfoSet_, and readProvenance().

Referenced by edm::RootOutputFile::fillBranches(), edm::RootOutputFile::insertAncestors(), edm::Provenance::productProvenance(), and edm::ParentProcessProductResolver::productProvenancePtr_().

◆ branchIDToProvenanceForProducedOnly()

ProductProvenance const * edm::ProductProvenanceRetriever::branchIDToProvenanceForProducedOnly ( BranchID const &  bid) const

Definition at line 175 of file ProductProvenanceRetriever.cc.

175  {
176  auto itFound = std::lower_bound(
177  entryInfoSet_.begin(), entryInfoSet_.end(), bid, [](auto const& iEntry, edm::BranchID const& iValue) {
178  return iEntry.branchID() < iValue;
179  });
180  if (itFound != entryInfoSet_.end() and itFound->branchID() == bid) {
181  if (auto p = itFound->productProvenance()) {
182  return p;
183  }
184  }
186  return parentProcessRetriever_->branchIDToProvenanceForProducedOnly(bid);
187  }
188  if (nextRetriever_) {
189  return nextRetriever_->branchIDToProvenanceForProducedOnly(bid);
190  }
191  return nullptr;
192  }

References entryInfoSet_, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, nextRetriever_, AlCaHLTBitMon_ParallelJobs::p, and parentProcessRetriever_.

Referenced by edm::PoolOutputModule::updateBranchParentsForOneBranch().

◆ deepCopy()

void edm::ProductProvenanceRetriever::deepCopy ( ProductProvenanceRetriever const &  iFrom)

Definition at line 86 of file ProductProvenanceRetriever.cc.

86  {
87  if (iFrom.readEntryInfoSet_) {
88  if (readEntryInfoSet_) {
89  delete readEntryInfoSet_.exchange(nullptr);
90  }
91  readEntryInfoSet_ = new std::set<ProductProvenance>(*iFrom.readEntryInfoSet_);
92  } else {
93  if (readEntryInfoSet_) {
94  delete readEntryInfoSet_.load();
95  readEntryInfoSet_ = nullptr;
96  }
97  }
98  assert(iFrom.entryInfoSet_.empty());
99  provenanceReader_ = iFrom.provenanceReader_;
100 
101  if (iFrom.nextRetriever_) {
102  if (not nextRetriever_) {
103  nextRetriever_ = std::make_shared<ProductProvenanceRetriever>(transitionIndex_);
104  }
105  nextRetriever_->deepCopy(*(iFrom.nextRetriever_));
106  }
107  }

References cms::cuda::assert(), entryInfoSet_, nextRetriever_, provenanceReader_, readEntryInfoSet_, and transitionIndex_.

◆ insertIntoSet()

void edm::ProductProvenanceRetriever::insertIntoSet ( ProductProvenance  provenanceProduct) const

Definition at line 121 of file ProductProvenanceRetriever.cc.

121  {
122  //NOTE:do not read provenance here because we only need the full
123  // provenance when someone tries to access it not when doing the insert
124  // doing the delay saves 20% of time when doing an analysis job
125  //readProvenance();
126  auto itFound =
128  entryInfoSet_.end(),
129  entryInfo.branchID(),
130  [](auto const& iEntry, edm::BranchID const& iValue) { return iEntry.branchID() < iValue; });
131  if UNLIKELY (itFound == entryInfoSet_.end() or itFound->branchID() != entryInfo.branchID()) {
132  throw edm::Exception(edm::errors::LogicError) << "ProductProvenanceRetriever::insertIntoSet passed a BranchID "
133  << entryInfo.branchID().id() << " that has not been pre-registered";
134  }
135  itFound->threadsafe_set(entryInfo.moveParentageID());
136  }

References edm::ProductProvenance::branchID(), entryInfoSet_, Exception, edm::BranchID::id(), edm::errors::LogicError, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, edm::ProductProvenance::moveParentageID(), or, and UNLIKELY.

Referenced by edm::EventPrincipal::put(), edm::EventPrincipal::putOnRead(), and edm::SwitchBaseProductResolver::unsafe_setWrapperAndProvenance().

◆ mergeParentProcessRetriever()

void edm::ProductProvenanceRetriever::mergeParentProcessRetriever ( ProductProvenanceRetriever const &  provRetriever)

Definition at line 142 of file ProductProvenanceRetriever.cc.

142  {
143  parentProcessRetriever_ = &provRetriever;
144  }

References parentProcessRetriever_.

◆ mergeProvenanceRetrievers()

void edm::ProductProvenanceRetriever::mergeProvenanceRetrievers ( std::shared_ptr< ProductProvenanceRetriever other)

Definition at line 138 of file ProductProvenanceRetriever.cc.

138  {
140  }

References nextRetriever_, and trackingPlots::other.

◆ operator=()

ProductProvenanceRetriever& edm::ProductProvenanceRetriever::operator= ( ProductProvenanceRetriever const &  )
delete

◆ readProvenance()

void edm::ProductProvenanceRetriever::readProvenance ( ) const
private

Definition at line 45 of file ProductProvenanceRetriever.cc.

45  {
46  if (nullptr == readEntryInfoSet_.load() && provenanceReader_) {
47  auto temp =
48  std::make_unique<std::set<ProductProvenance> const>(provenanceReader_->readProvenance(transitionIndex_));
49  std::set<ProductProvenance> const* expected = nullptr;
50  if (readEntryInfoSet_.compare_exchange_strong(expected, temp.get())) {
51  temp.release();
52  }
53  }
54  }

References provenanceReader_, readEntryInfoSet_, groupFilesInBlocks::temp, and transitionIndex_.

Referenced by branchIDToProvenance().

◆ readProvenanceAsync()

void edm::ProductProvenanceRetriever::readProvenanceAsync ( WaitingTaskHolder  task,
ModuleCallingContext const *  moduleCallingContext 
) const

Definition at line 76 of file ProductProvenanceRetriever.cc.

77  {
78  if (provenanceReader_ and nullptr == readEntryInfoSet_.load()) {
79  provenanceReader_->readProvenanceAsync(task, moduleCallingContext, transitionIndex_, readEntryInfoSet_);
80  }
81  if (nextRetriever_) {
82  nextRetriever_->readProvenanceAsync(task, moduleCallingContext);
83  }
84  }

References nextRetriever_, provenanceReader_, readEntryInfoSet_, TrackValidation_cff::task, and transitionIndex_.

◆ reset()

void edm::ProductProvenanceRetriever::reset ( void  )

Definition at line 109 of file ProductProvenanceRetriever.cc.

109  {
110  delete readEntryInfoSet_.load();
111  readEntryInfoSet_ = nullptr;
112  for (auto& e : entryInfoSet_) {
113  e.resetParentage();
114  }
115  if (nextRetriever_) {
116  nextRetriever_->reset();
117  }
118  parentProcessRetriever_ = nullptr;
119  }

References MillePedeFileConverter_cfg::e, entryInfoSet_, nextRetriever_, parentProcessRetriever_, and readEntryInfoSet_.

◆ setTransitionIndex()

void edm::ProductProvenanceRetriever::setTransitionIndex ( unsigned int  transitionIndex)
inlineprivate

Definition at line 138 of file ProductProvenanceRetriever.h.

138 { transitionIndex_ = transitionIndex; }

References transitionIndex_.

◆ setupEntryInfoSet()

void edm::ProductProvenanceRetriever::setupEntryInfoSet ( edm::ProductRegistry const &  iReg)
private

Definition at line 56 of file ProductProvenanceRetriever.cc.

56  {
57  std::set<BranchID> ids;
58  for (auto const& p : iReg.productList()) {
59  if (p.second.branchType() == edm::InEvent) {
60  if (p.second.produced() or p.second.isProvenanceSetOnRead()) {
61  ids.insert(p.second.branchID());
62  }
63  }
64  }
65  entryInfoSet_.reserve(ids.size());
66  for (auto const& b : ids) {
67  entryInfoSet_.emplace_back(b);
68  }
69  }

References b, entryInfoSet_, edm::InEvent, or, AlCaHLTBitMon_ParallelJobs::p, and edm::ProductRegistry::productList().

Referenced by ProductProvenanceRetriever(), and update().

◆ update()

void edm::ProductProvenanceRetriever::update ( edm::ProductRegistry const &  iReg)

Member Data Documentation

◆ entryInfoSet_

std::vector<ProducedProvenanceInfo> edm::ProductProvenanceRetriever::entryInfoSet_
private

◆ nextRetriever_

edm::propagate_const<std::shared_ptr<ProductProvenanceRetriever> > edm::ProductProvenanceRetriever::nextRetriever_
private

◆ parentProcessRetriever_

edm::propagate_const<ProductProvenanceRetriever const*> edm::ProductProvenanceRetriever::parentProcessRetriever_
private

◆ provenanceReader_

std::shared_ptr<const ProvenanceReaderBase> edm::ProductProvenanceRetriever::provenanceReader_
private

◆ readEntryInfoSet_

std::atomic<const std::set<ProductProvenance>*> edm::ProductProvenanceRetriever::readEntryInfoSet_
mutableprivate

◆ transitionIndex_

unsigned int edm::ProductProvenanceRetriever::transitionIndex_
private
edm::errors::LogicError
Definition: EDMException.h:37
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
edm::ProductProvenanceRetriever::readEntryInfoSet_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
Definition: ProductProvenanceRetriever.h:142
cms::cuda::assert
assert(be >=bs)
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
UNLIKELY
#define UNLIKELY(x)
Definition: Likely.h:21
DQM.reader
reader
Definition: DQM.py:105
edm::BranchID
Definition: BranchID.h:14
TrackValidation_cff.task
task
Definition: TrackValidation_cff.py:252
trackingPlots.other
other
Definition: trackingPlots.py:1460
edm::InEvent
Definition: BranchType.h:11
edm::ProductProvenanceRetriever::entryInfoSet_
std::vector< ProducedProvenanceInfo > entryInfoSet_
Definition: ProductProvenanceRetriever.h:141
b
double b
Definition: hdecay.h:118
pfDeepBoostedJetPreprocessParams_cfi.lower_bound
lower_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:15
edm::ProductProvenanceRetriever::readProvenance
void readProvenance() const
Definition: ProductProvenanceRetriever.cc:45
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
edm::ProductProvenanceRetriever::setupEntryInfoSet
void setupEntryInfoSet(edm::ProductRegistry const &)
Definition: ProductProvenanceRetriever.cc:56
edm::ProductProvenanceRetriever::nextRetriever_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
Definition: ProductProvenanceRetriever.h:143
Exception
Definition: hltDiff.cc:245
edm::ProductProvenanceRetriever::transitionIndex_
unsigned int transitionIndex_
Definition: ProductProvenanceRetriever.h:146
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
edm::ProductProvenanceRetriever::provenanceReader_
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
Definition: ProductProvenanceRetriever.h:145
edm::ProductProvenanceRetriever::parentProcessRetriever_
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
Definition: ProductProvenanceRetriever.h:144
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37