CMS 3D CMS Logo

EventPrincipal.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_EventPrincipal_h
2 #define FWCore_Framework_EventPrincipal_h
3 
4 /*----------------------------------------------------------------------
5 
6 EventPrincipal: This is the class responsible for management of
7 per event EDProducts. It is not seen by reconstruction code;
8 such code sees the Event class, which is a proxy for EventPrincipal.
9 
10 The major internal component of the EventPrincipal
11 is the DataBlock.
12 
13 ----------------------------------------------------------------------*/
14 
24 
25 #include <map>
26 #include <memory>
27 #include <string>
28 #include <vector>
29 
30 namespace edm {
31  class BranchID;
32  class BranchIDListHelper;
33  class ProductProvenanceRetriever;
34  class DelayedReader;
35  class EventID;
36  class HistoryAppender;
37  class LuminosityBlockPrincipal;
38  class ModuleCallingContext;
39  class ProductID;
40  class StreamContext;
41  class ThinnedAssociation;
42  class ThinnedAssociationsHelper;
43  class ProcessHistoryRegistry;
44  class RunPrincipal;
45 
46  class EventPrincipal : public Principal {
47  public:
49  typedef Principal Base;
50 
55  std::shared_ptr<ProductRegistry const> reg,
56  std::shared_ptr<BranchIDListHelper const> branchIDListHelper,
57  std::shared_ptr<ThinnedAssociationsHelper const> thinnedAssociationsHelper,
58  ProcessConfiguration const& pc,
59  HistoryAppender* historyAppender,
60  unsigned int streamIndex = 0,
61  bool isForPrimaryProcess = true);
62  ~EventPrincipal() override {}
63 
65  ProcessHistoryRegistry const& processHistoryRegistry,
66  DelayedReader* reader = nullptr);
67  void fillEventPrincipal(EventAuxiliary const& aux,
68  ProcessHistoryRegistry const& processHistoryRegistry,
71  //provRetriever is changed via a call to ProductProvenanceRetriever::deepSwap
72  void fillEventPrincipal(EventAuxiliary const& aux,
73  ProcessHistoryRegistry const& processHistoryRegistry,
76  ProductProvenanceRetriever const& provRetriever,
77  DelayedReader* reader = nullptr,
78  bool deepCopyRetriever = true);
79 
80 
81  void clearEventPrincipal();
82 
85  }
86 
89  }
90 
92  return luminosityBlockPrincipal_ != nullptr;
93  }
94 
95  //does not share ownership
97 
99 
100  EventID const& id() const {
101  return aux().id();
102  }
103 
104  Timestamp const& time() const {
105  return aux().time();
106  }
107 
108  bool isReal() const {
109  return aux().isRealData();
110  }
111 
113  return aux().experimentType();
114  }
115 
116  int bunchCrossing() const {
117  return aux().bunchCrossing();
118  }
119 
120  int storeNumber() const {
121  return aux().storeNumber();
122  }
123 
124  EventAuxiliary const& aux() const {
125  return aux_;
126  }
127 
128  StreamID streamID() const { return streamID_;}
129 
131  return id().luminosityBlock();
132  }
133 
134  RunNumber_t run() const {
135  return id().run();
136  }
137 
138  RunPrincipal const& runPrincipal() const;
139 
141 
143 
144  BranchListIndexes const& branchListIndexes() const;
145 
146  Provenance
147  getProvenance(ProductID const& pid, ModuleCallingContext const* mcc) const;
148 
150  getByProductID(ProductID const& oid) const;
151 
152  void put(
153  BranchDescription const& bd,
154  std::unique_ptr<WrapperBase> edp,
155  ProductProvenance const& productProvenance) const;
156 
158  std::unique_ptr<WrapperBase> edp,
159  ParentageID productProvenance) const;
160 
161  void putOnRead(
162  BranchDescription const& bd,
163  std::unique_ptr<WrapperBase> edp,
164  ProductProvenance const* productProvenance) const;
165 
166  WrapperBase const* getIt(ProductID const& pid) const override;
167  WrapperBase const* getThinnedProduct(ProductID const& pid, unsigned int& key) const override;
168  void getThinnedProducts(ProductID const& pid,
169  std::vector<WrapperBase const*>& foundContainers,
170  std::vector<unsigned int>& keys) const override;
171 
172  ProductID branchIDToProductID(BranchID const& bid) const;
173 
175  provRetrieverPtr_->mergeProvenanceRetrievers(other.provRetrieverPtr());
176  }
177 
178  using Base::getProvenance;
179 
180  private:
181 
182  BranchID pidToBid(ProductID const& pid) const;
183 
184  edm::ThinnedAssociation const* getThinnedAssociation(edm::BranchID const& branchID) const;
185 
186  unsigned int transitionIndex_() const override;
187 
188  std::shared_ptr<ProductProvenanceRetriever const> provRetrieverPtr() const {return get_underlying_safe(provRetrieverPtr_);}
189  std::shared_ptr<ProductProvenanceRetriever>& provRetrieverPtr() {return get_underlying_safe(provRetrieverPtr_);}
190 
191  private:
192 
194 
196 
197  // Pointer to the 'retriever' that will get provenance information from the persistent store.
199 
201 
202  std::shared_ptr<BranchIDListHelper const> branchIDListHelper_;
203  std::shared_ptr<ThinnedAssociationsHelper const> thinnedAssociationsHelper_;
204 
206 
207  std::map<BranchListIndex, ProcessIndex> branchListIndexToProcessIndex_;
208 
210 
211  };
212 
213  inline
214  bool
216  return isSameEvent(a.aux(), b.aux());
217  }
218 }
219 #endif
220 
RunNumber_t run() const
Definition: EventID.h:39
int storeNumber() const
std::shared_ptr< ThinnedAssociationsHelper const > thinnedAssociationsHelper_
void setLuminosityBlockPrincipal(LuminosityBlockPrincipal *lbp)
bool isRealData() const
bool isSameEvent(EventAuxiliary const &a, EventAuxiliary const &b)
EventSelectionIDVector const & eventSelectionIDs() const
WrapperBase const * getThinnedProduct(ProductID const &pid, unsigned int &key) const override
unsigned int ProductResolverIndex
int bunchCrossing() const
RunNumber_t run() const
std::shared_ptr< ProductProvenanceRetriever > & provRetrieverPtr()
EventAuxiliary::ExperimentType ExperimentType() const
BasicHandle getByProductID(ProductID const &oid) const
EventSelectionIDVector eventSelectionIDs_
BranchID pidToBid(ProductID const &pid) const
static int const invalidBunchXing
BranchListIndexes branchListIndexes_
edm::ThinnedAssociation const * getThinnedAssociation(edm::BranchID const &branchID) const
EventPrincipal(std::shared_ptr< ProductRegistry const > reg, std::shared_ptr< BranchIDListHelper const > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper const > thinnedAssociationsHelper, ProcessConfiguration const &pc, HistoryAppender *historyAppender, unsigned int streamIndex=0, bool isForPrimaryProcess=true)
EventID const & id() const
Provenance getProvenance(ProductID const &pid, ModuleCallingContext const *mcc) const
Timestamp const & time() const
std::map< BranchListIndex, ProcessIndex > branchListIndexToProcessIndex_
Provenance getProvenance(BranchID const &bid, ModuleCallingContext const *mcc) const
Definition: Principal.cc:797
edm::propagate_const< LuminosityBlockPrincipal * > luminosityBlockPrincipal_
std::shared_ptr< BranchIDListHelper const > branchIDListHelper_
LuminosityBlockNumber_t luminosityBlock() const
LuminosityBlockPrincipal & luminosityBlockPrincipal()
EventAuxiliary aux_
edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > provRetrieverPtr_
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:40
BranchListIndexes const & branchListIndexes() const
unsigned int LuminosityBlockNumber_t
int bunchCrossing() const
ProductID branchIDToProductID(BranchID const &bid) const
RunPrincipal const & runPrincipal() const
std::vector< EventSelectionID > EventSelectionIDVector
void getThinnedProducts(ProductID const &pid, std::vector< WrapperBase const * > &foundContainers, std::vector< unsigned int > &keys) const override
ExperimentType experimentType() const
Timestamp const & time() const
void mergeProvenanceRetrievers(EventPrincipal &other)
std::vector< BranchListIndex > BranchListIndexes
static int const invalidBunchXing
int storeNumber() const
LuminosityBlockPrincipal const & luminosityBlockPrincipal() const
Base::ConstProductResolverPtr ConstProductResolverPtr
EventAuxiliary Auxiliary
StreamID streamID() const
~EventPrincipal() override
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
void put(BranchDescription const &bd, std::unique_ptr< WrapperBase > edp, ProductProvenance const &productProvenance) const
ProductProvenanceRetriever const * productProvenanceRetrieverPtr() const
DelayedReader * reader() const
Definition: Principal.h:182
static int const invalidStoreNumber
bool isReal() const
void putOnRead(BranchDescription const &bd, std::unique_ptr< WrapperBase > edp, ProductProvenance const *productProvenance) const
double b
Definition: hdecay.h:120
ProductResolverBase const * ConstProductResolverPtr
Definition: Principal.h:63
EventID const & id() const
void fillEventPrincipal(EventAuxiliary const &aux, ProcessHistoryRegistry const &processHistoryRegistry, DelayedReader *reader=0)
static int const invalidStoreNumber
HLT enums.
double a
Definition: hdecay.h:121
unsigned int transitionIndex_() const override
bool luminosityBlockPrincipalPtrValid() const
unsigned int RunNumber_t
void setRunAndLumiNumber(RunNumber_t run, LuminosityBlockNumber_t lumi)
EventAuxiliary const & aux() const
std::shared_ptr< ProductProvenanceRetriever const > provRetrieverPtr() const
WrapperBase const * getIt(ProductID const &pid) const override