CMS 3D CMS Logo

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

#include <ProductProvenanceRetriever.h>

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 (unsigned int iTransitionIndex)
 
 ProductProvenanceRetriever (std::unique_ptr< ProvenanceReaderBase > reader)
 
void readProvenanceAsync (WaitingTask *task, ModuleCallingContext const *moduleCallingContext) const
 
void reset ()
 
 ~ProductProvenanceRetriever ()
 

Private Member Functions

void readProvenance () const
 
void setTransitionIndex (unsigned int transitionIndex)
 

Private Attributes

tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqualentryInfoSet_
 
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 52 of file ProductProvenanceRetriever.h.

Constructor & Destructor Documentation

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

Definition at line 13 of file ProductProvenanceRetriever.cc.

14  : entryInfoSet_(),
17  parentProcessRetriever_(nullptr),
19  transitionIndex_(iTransitionIndex) {}
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
edm::ProductProvenanceRetriever::ProductProvenanceRetriever ( std::unique_ptr< ProvenanceReaderBase reader)
explicit

Definition at line 21 of file ProductProvenanceRetriever.cc.

References provenanceReader_.

22  : entryInfoSet_(),
25  parentProcessRetriever_(nullptr),
26  provenanceReader_(reader.release()),
28  assert(provenanceReader_);
29  }
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
reader
Definition: DQM.py:105
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
edm::ProductProvenanceRetriever::~ProductProvenanceRetriever ( )

Definition at line 31 of file ProductProvenanceRetriever.cc.

References readEntryInfoSet_.

31 { delete readEntryInfoSet_.load(); }
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_

Member Function Documentation

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

Definition at line 103 of file ProductProvenanceRetriever.cc.

References DataFormats::L1THGCal::ei, entryInfoSet_, nextRetriever_, parentProcessRetriever_, readEntryInfoSet_, and readProvenance().

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

103  {
104  ProductProvenance ei(bid);
105  auto it = entryInfoSet_.find(ei);
106  if (it == entryInfoSet_.end()) {
108  return parentProcessRetriever_->branchIDToProvenance(bid);
109  }
110  //check in source
111  readProvenance();
112  auto ptr = readEntryInfoSet_.load();
113  if (ptr) {
114  auto itRead = ptr->find(ei);
115  if (itRead != ptr->end()) {
116  return &*itRead;
117  }
118  }
119  if (nextRetriever_) {
120  return nextRetriever_->branchIDToProvenance(bid);
121  }
122  return nullptr;
123  }
124  return &*it;
125  }
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
std::map< l1t::HGCalMulticluster::EnergyInterpretation, double > ei
Definition: classes.h:67
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
ProductProvenance const * edm::ProductProvenanceRetriever::branchIDToProvenanceForProducedOnly ( BranchID const &  bid) const

Definition at line 127 of file ProductProvenanceRetriever.cc.

References DataFormats::L1THGCal::ei, entryInfoSet_, nextRetriever_, and parentProcessRetriever_.

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

127  {
128  ProductProvenance ei(bid);
129  auto it = entryInfoSet_.find(ei);
130  if (it == entryInfoSet_.end()) {
132  return parentProcessRetriever_->branchIDToProvenanceForProducedOnly(bid);
133  }
134  if (nextRetriever_) {
135  return nextRetriever_->branchIDToProvenanceForProducedOnly(bid);
136  }
137  return nullptr;
138  }
139  return &*it;
140  }
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
std::map< l1t::HGCalMulticluster::EnergyInterpretation, double > ei
Definition: classes.h:67
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
void edm::ProductProvenanceRetriever::deepCopy ( ProductProvenanceRetriever const &  iFrom)

Definition at line 54 of file ProductProvenanceRetriever.cc.

References entryInfoSet_, nextRetriever_, provenanceReader_, readEntryInfoSet_, and transitionIndex_.

54  {
55  if (iFrom.readEntryInfoSet_) {
56  if (readEntryInfoSet_) {
57  delete readEntryInfoSet_.exchange(nullptr);
58  }
59  readEntryInfoSet_ = new std::set<ProductProvenance>(*iFrom.readEntryInfoSet_);
60  } else {
61  if (readEntryInfoSet_) {
62  delete readEntryInfoSet_.load();
63  readEntryInfoSet_ = nullptr;
64  }
65  }
66  entryInfoSet_ = iFrom.entryInfoSet_;
67  provenanceReader_ = iFrom.provenanceReader_;
68 
69  if (iFrom.nextRetriever_) {
70  if (not nextRetriever_) {
71  nextRetriever_ = std::make_shared<ProductProvenanceRetriever>(transitionIndex_);
72  }
73  nextRetriever_->deepCopy(*(iFrom.nextRetriever_));
74  }
75  }
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
void edm::ProductProvenanceRetriever::insertIntoSet ( ProductProvenance  provenanceProduct) const

Definition at line 87 of file ProductProvenanceRetriever.cc.

References entryInfoSet_, and eostools::move().

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

87  {
88  //NOTE:do not read provenance here because we only need the full
89  // provenance when someone tries to access it not when doing the insert
90  // doing the delay saves 20% of time when doing an analysis job
91  //readProvenance();
92  entryInfoSet_.insert(std::move(entryInfo));
93  }
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
def move(src, dest)
Definition: eostools.py:511
void edm::ProductProvenanceRetriever::mergeParentProcessRetriever ( ProductProvenanceRetriever const &  provRetriever)

Definition at line 99 of file ProductProvenanceRetriever.cc.

References parentProcessRetriever_.

99  {
100  parentProcessRetriever_ = &provRetriever;
101  }
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
void edm::ProductProvenanceRetriever::mergeProvenanceRetrievers ( std::shared_ptr< ProductProvenanceRetriever other)

Definition at line 95 of file ProductProvenanceRetriever.cc.

References nextRetriever_, and trackingPlots::other.

95  {
97  }
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
ProductProvenanceRetriever& edm::ProductProvenanceRetriever::operator= ( ProductProvenanceRetriever const &  )
delete
void edm::ProductProvenanceRetriever::readProvenance ( ) const
private

Definition at line 33 of file ProductProvenanceRetriever.cc.

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

Referenced by branchIDToProvenance().

33  {
34  if (nullptr == readEntryInfoSet_.load() && provenanceReader_) {
35  auto temp =
36  std::make_unique<std::set<ProductProvenance> const>(provenanceReader_->readProvenance(transitionIndex_));
37  std::set<ProductProvenance> const* expected = nullptr;
38  if (readEntryInfoSet_.compare_exchange_strong(expected, temp.get())) {
39  temp.release();
40  }
41  }
42  }
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
void edm::ProductProvenanceRetriever::readProvenanceAsync ( WaitingTask task,
ModuleCallingContext const *  moduleCallingContext 
) const

Definition at line 44 of file ProductProvenanceRetriever.cc.

References nextRetriever_, provenanceReader_, readEntryInfoSet_, and transitionIndex_.

45  {
46  if (provenanceReader_ and nullptr == readEntryInfoSet_.load()) {
47  provenanceReader_->readProvenanceAsync(task, moduleCallingContext, transitionIndex_, readEntryInfoSet_);
48  }
49  if (nextRetriever_) {
50  nextRetriever_->readProvenanceAsync(task, moduleCallingContext);
51  }
52  }
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
void edm::ProductProvenanceRetriever::reset ( void  )

Definition at line 77 of file ProductProvenanceRetriever.cc.

References entryInfoSet_, nextRetriever_, parentProcessRetriever_, and readEntryInfoSet_.

77  {
78  delete readEntryInfoSet_.load();
79  readEntryInfoSet_ = nullptr;
80  entryInfoSet_.clear();
81  if (nextRetriever_) {
82  nextRetriever_->reset();
83  }
84  parentProcessRetriever_ = nullptr;
85  }
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
void edm::ProductProvenanceRetriever::setTransitionIndex ( unsigned int  transitionIndex)
inlineprivate

Definition at line 79 of file ProductProvenanceRetriever.h.

79 { transitionIndex_ = transitionIndex; }

Member Data Documentation

tbb::concurrent_unordered_set<ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual> edm::ProductProvenanceRetriever::entryInfoSet_
mutableprivate
edm::propagate_const<std::shared_ptr<ProductProvenanceRetriever> > edm::ProductProvenanceRetriever::nextRetriever_
private
edm::propagate_const<ProductProvenanceRetriever const*> edm::ProductProvenanceRetriever::parentProcessRetriever_
private
std::shared_ptr<const ProvenanceReaderBase> edm::ProductProvenanceRetriever::provenanceReader_
private
std::atomic<const std::set<ProductProvenance>*> edm::ProductProvenanceRetriever::readEntryInfoSet_
mutableprivate
unsigned int edm::ProductProvenanceRetriever::transitionIndex_
private

Definition at line 87 of file ProductProvenanceRetriever.h.

Referenced by deepCopy(), readProvenance(), and readProvenanceAsync().