CMS 3D CMS Logo

ProductProvenanceRetriever.h
Go to the documentation of this file.
1 #ifndef DataFormats_Provenance_BranchMapper_h
2 #define DataFormats_Provenance_BranchMapper_h
3 
4 /*----------------------------------------------------------------------
5 
6 ProductProvenanceRetriever: Manages the per event/lumi/run per product provenance.
7 
8 ----------------------------------------------------------------------*/
13 
14 #include "tbb/concurrent_unordered_set.h"
15 #include <memory>
16 #include <set>
17 #include <atomic>
18 
19 /*
20  ProductProvenanceRetriever
21 */
22 
23 namespace edm {
24  class ProvenanceReaderBase;
25  class WaitingTask;
26  class ModuleCallingContext;
27 
29  size_t operator()(ProductProvenance const& tid) const { return tid.branchID().id(); }
30  };
31 
33  //The default operator== for ProductProvenance does not work for this case
34  // Since (a<b)==false and (a>b)==false does not mean a==b for the operators
35  // defined for ProductProvenance
36  bool operator()(ProductProvenance const& iLHS, ProductProvenance const iRHS) const {
37  return iLHS.branchID().id() == iRHS.branchID().id();
38  }
39  };
40 
42  public:
44  virtual ~ProvenanceReaderBase();
45  virtual std::set<ProductProvenance> readProvenance(unsigned int transitionIndex) const = 0;
46  virtual void readProvenanceAsync(WaitingTask* task,
47  ModuleCallingContext const* moduleCallingContext,
48  unsigned int transitionIndex,
49  std::atomic<const std::set<ProductProvenance>*>& writeTo) const = 0;
50  };
51 
53  public:
54  explicit ProductProvenanceRetriever(unsigned int iTransitionIndex);
55  explicit ProductProvenanceRetriever(std::unique_ptr<ProvenanceReaderBase> reader);
56 
57  ProductProvenanceRetriever& operator=(ProductProvenanceRetriever const&) = delete;
58 
60 
61  ProductProvenance const* branchIDToProvenance(BranchID const& bid) const;
62 
63  ProductProvenance const* branchIDToProvenanceForProducedOnly(BranchID const& bid) const;
64 
65  void insertIntoSet(ProductProvenance provenanceProduct) const;
66 
67  void mergeProvenanceRetrievers(std::shared_ptr<ProductProvenanceRetriever> other);
68 
69  void mergeParentProcessRetriever(ProductProvenanceRetriever const& provRetriever);
70 
71  void deepCopy(ProductProvenanceRetriever const&);
72 
73  void reset();
74 
75  void readProvenanceAsync(WaitingTask* task, ModuleCallingContext const* moduleCallingContext) const;
76 
77  private:
78  void readProvenance() const;
79  void setTransitionIndex(unsigned int transitionIndex) { transitionIndex_ = transitionIndex; }
80 
81  mutable tbb::concurrent_unordered_set<ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual>
83  mutable std::atomic<const std::set<ProductProvenance>*> readEntryInfoSet_;
86  std::shared_ptr<const ProvenanceReaderBase> provenanceReader_;
87  unsigned int transitionIndex_;
88  };
89 
90 } // namespace edm
91 #endif
BranchID const & branchID() const
tbb::concurrent_unordered_set< ProductProvenance, ProductProvenanceHasher, ProductProvenanceEqual > entryInfoSet_
reader
Definition: DQM.py:105
unsigned int id() const
Definition: BranchID.h:21
size_t operator()(ProductProvenance const &tid) const
std::shared_ptr< const ProvenanceReaderBase > provenanceReader_
edm::propagate_const< ProductProvenanceRetriever const * > parentProcessRetriever_
bool operator()(ProductProvenance const &iLHS, ProductProvenance const iRHS) const
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
HLT enums.
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > nextRetriever_
void setTransitionIndex(unsigned int transitionIndex)
void reset(double vett[256])
Definition: TPedValues.cc:11