CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Event.cc
Go to the documentation of this file.
2 
12 
13 namespace edm {
14 
16  provRecorder_(ep, md),
17  aux_(ep.aux()),
18  luminosityBlock_(ep.luminosityBlockPrincipalPtrValid() ? new LuminosityBlock(ep.luminosityBlockPrincipal(), md) : 0),
19  gotBranchIDs_(),
20  gotViews_() {
21  }
22 
24  // anything left here must be the result of a failure
25  // let's record them as failed attempts in the event principal
27  }
28 
31  return dynamic_cast<EventPrincipal&>(provRecorder_.principal());
32  }
33 
34  EventPrincipal const&
36  return dynamic_cast<EventPrincipal const&>(provRecorder_.principal());
37  }
38 
39  ProductID
42  }
43 
44  Run const&
45  Event::getRun() const {
46  return getLuminosityBlock().getRun();
47  }
48 
52  }
53 
54  ProcessHistoryID const&
57  }
58 
60  Event::getProvenance(BranchID const& bid) const {
62  }
63 
66  return eventPrincipal().getProvenance(pid);
67  }
68 
69  void
70  Event::getAllProvenance(std::vector<Provenance const*>& provenances) const {
72  }
73 
74  bool
75  Event::getProcessParameterSet(std::string const& processName,
76  ParameterSet& ps) const {
77  // Get the ProcessHistory for this event.
79  ProcessHistory ph;
80  if(!phr->getMapped(processHistoryID(), ph)) {
82  << "ProcessHistoryID " << processHistoryID()
83  << " is claimed to describe " << id()
84  << "\nbut is not found in the ProcessHistoryRegistry.\n"
85  << "This file is malformed.\n";
86  }
87 
89  bool process_found = ph.getConfigurationForProcess(processName, config);
90  if(process_found) {
92  assert(!ps.empty());
93  }
94  return process_found;
95  }
96 
98  Event::getByProductID_(ProductID const& oid) const {
99  return eventPrincipal().getByProductID(oid);
100  }
101 
102  void
103  Event::commit_(std::vector<BranchID>* previousParentage, ParentageID* previousParentageId) {
104  commit_aux(putProducts(), true, previousParentage, previousParentageId);
106  }
107 
108  void
110  std::vector<BranchID>* previousParentage, ParentageID* previousParentageId) {
111  // fill in guts of provenance here
113 
114  ProductPtrVec::iterator pit(products.begin());
115  ProductPtrVec::iterator pie(products.end());
116 
117  std::vector<BranchID> gotBranchIDVector;
118 
119  // Note that gotBranchIDVector will remain empty if
120  // record_parents is false (and may be empty if record_parents is
121  // true).
122 
123  //Check that previousParentageId is still good by seeing if previousParentage matches gotBranchIDs_
124  bool sameAsPrevious = ((0 != previousParentage) && (previousParentage->size() == gotBranchIDs_.size()));
125  if(record_parents && !gotBranchIDs_.empty()) {
126  gotBranchIDVector.reserve(gotBranchIDs_.size());
127  std::vector<BranchID>::const_iterator itPrevious;
128  if(previousParentage) {
129  itPrevious = previousParentage->begin();
130  }
131  for(BranchIDSet::const_iterator it = gotBranchIDs_.begin(), itEnd = gotBranchIDs_.end();
132  it != itEnd; ++it) {
133  gotBranchIDVector.push_back(*it);
134  if(sameAsPrevious) {
135  if(*it != *itPrevious) {
136  sameAsPrevious = false;
137  } else {
138  ++itPrevious;
139  }
140  }
141  }
142  if(!sameAsPrevious && 0 != previousParentage) {
143  previousParentage->assign(gotBranchIDVector.begin(), gotBranchIDVector.end());
144  }
145  }
146 
147  //If we don't have a valid previousParentage then we want to use a temp value in order to
148  // avoid constantly recalculating the ParentageID which is a time consuming operation
150  if(!previousParentage) {
151  assert(!sameAsPrevious);
152  previousParentageId = &temp;
153  }
154  while(pit != pie) {
155  // set provenance
156  if(!sameAsPrevious) {
157  ProductProvenance prov(pit->second->branchID(), gotBranchIDVector);
158  *previousParentageId = prov.parentageID();
159  ep.put(*pit->second, pit->first, prov);
160  sameAsPrevious = true;
161  } else {
162  ProductProvenance prov(pit->second->branchID(), *previousParentageId);
163  ep.put(*pit->second, pit->first, prov);
164  }
165  // Ownership has passed, so clear the pointer.
166  pit->first.reset();
167  ++pit;
168  }
169 
170  // the cleanup is all or none
171  products.clear();
172  }
173 
174  void
176  gotBranchIDs_.insert(prov.branchID());
177  }
178 
179  ProcessHistory const&
181  return provRecorder_.processHistory();
182  }
183 
184  size_t
185  Event::size() const {
186  return putProducts().size() + provRecorder_.principal().size() + putProductsWithoutParents().size();
187  }
188 
190  Event::getByLabelImpl(std::type_info const&, std::type_info const& iProductType, const InputTag& iTag) const {
191  BasicHandle h = provRecorder_.getByLabel_(TypeID(iProductType), iTag);
192  if(h.isValid()) {
194  }
195  return h;
196  }
197 
198  TriggerNames const&
200  edm::TriggerNames const* names = triggerNames_(triggerResults);
201  if(names != 0) return *names;
202 
203  throw cms::Exception("TriggerNamesNotFound")
204  << "TriggerNames not found in ParameterSet registry";
205  return *names;
206  }
207 
209  Event::triggerResultsByName(std::string const& process) const {
210 
211  Handle<TriggerResults> hTriggerResults;
212  InputTag tag(std::string("TriggerResults"),
213  std::string(""),
214  process);
215 
216  getByLabel(tag, hTriggerResults);
217  if(!hTriggerResults.isValid()) {
218  return TriggerResultsByName(0, 0);
219  }
220  edm::TriggerNames const* names = triggerNames_(*hTriggerResults);
221  return TriggerResultsByName(hTriggerResults.product(), names);
222  }
223 }
ProcessHistory const & processHistory() const
bool getProcessParameterSet(std::string const &processName, ParameterSet &ps) const
Definition: Event.cc:75
virtual ~Event()
Definition: Event.cc:23
void commit_aux(ProductPtrVec &products, bool record_parents, std::vector< BranchID > *previousParentage=0, ParentageID *previousParentageId=0)
Definition: Event.cc:109
bool empty() const
Definition: ParameterSet.h:219
virtual TriggerResultsByName triggerResultsByName(std::string const &process) const
Definition: Event.cc:209
void getAllProvenance(std::vector< Provenance const * > &provenances) const
Definition: Event.cc:70
size_t size() const
Definition: Principal.cc:146
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:199
EventSelectionIDVector const & eventSelectionIDs() const
static const HistoName names[]
size_t size() const
Definition: Event.cc:185
BasicHandle getByProductID(ProductID const &oid) const
Definition: Hash.h:41
BranchIDSet gotBranchIDs_
Definition: Event.h:231
void getAllProvenance(std::vector< Provenance const * > &provenances) const
Definition: Principal.cc:699
static ThreadSafeRegistry * instance()
Run const & getRun() const
Definition: Event.cc:45
void put(ConstBranchDescription const &bd, WrapperOwningHolder const &edp, ProductProvenance const &productProvenance)
ProductID branchIDToProductID(BranchID const &bid) const
std::vector< EventSelectionID > EventSelectionIDVector
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
bool getConfigurationForProcess(std::string const &name, ProcessConfiguration &config) const
Provenance const * provenance() const
Definition: BasicHandle.h:110
ParameterSetID const & parameterSetID() const
bool getMapped(key_type const &k, value_type &result) const
PrincipalGetAdapter provRecorder_
Definition: Event.h:214
ESProducts< T, S > products(const T &i1, const S &i2)
Definition: ESProducts.h:189
ProcessHistoryID const & processHistoryID() const
Definition: Principal.h:126
BranchID const & branchID() const
LuminosityBlock const & getLuminosityBlock() const
Definition: Event.h:59
ProductPtrVec putProducts_
Definition: Event.h:220
void addToGotBranchIDs(Provenance const &prov) const
Definition: Event.cc:175
bool isValid() const
Definition: HandleBase.h:76
BranchID const & branchID() const
Definition: Provenance.h:59
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
ProductPtrVec & putProductsWithoutParents()
Definition: Event.h:211
virtual ProcessHistory const & processHistory() const
Definition: Event.cc:180
virtual BasicHandle getByLabelImpl(std::type_info const &iWrapperType, std::type_info const &iProductType, InputTag const &iTag) const
Definition: Event.cc:190
static TriggerNames const * triggerNames_(edm::TriggerResults const &triggerResults)
Definition: EventBase.cc:42
ProductID makeProductID(ConstBranchDescription const &desc) const
Definition: Event.cc:40
Provenance getProvenance(ProductID const &pid) const
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
string const
Definition: compareJSON.py:14
ProcessHistoryID const & processHistoryID() const
Definition: Event.cc:55
Event(EventPrincipal &ep, ModuleDescription const &md)
Definition: Event.cc:15
T const * product() const
Definition: Handle.h:74
ProductPtrVec & putProducts()
Definition: Event.h:208
BasicHandle getByLabel_(TypeID const &tid, std::string const &label, std::string const &productInstanceName, std::string const &processName) const
bool isValid() const
Definition: BasicHandle.h:90
EventSelectionIDVector const & eventSelectionIDs() const
Definition: Event.cc:50
void commit_(std::vector< BranchID > *previousParentage=0, ParentageID *previousParentageId=0)
Definition: Event.cc:103
edm::EventID id() const
Definition: EventBase.h:56
BasicHandle getByProductID_(ProductID const &oid) const
Definition: Event.cc:98
tuple process
Definition: LaserDQM_cfg.py:3
Provenance getProvenance(BranchID const &theID) const
Definition: Event.cc:60
EventPrincipal const & eventPrincipal() const
Definition: Event.cc:35
Provenance getProvenance(BranchID const &bid) const
Definition: Principal.cc:677
std::vector< std::pair< WrapperOwningHolder, ConstBranchDescription const * > > ProductPtrVec
Definition: Event.h:176
Definition: Run.h:33
Run const & getRun() const