CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EventWithHistory.cc
Go to the documentation of this file.
1 #include <map>
7 
9 
11 
12 EventWithHistory::EventWithHistory(const edm::EventNumber_t event, const int orbit, const int bx):
13  TinyEvent(event,orbit,bx), _prevse() { }
14 
15 EventWithHistory::EventWithHistory(const edm::EventNumber_t event, const unsigned int orbit, const int bx):
16  TinyEvent(event,orbit,bx), _prevse() { }
17 
19  TinyEvent(event), _prevse() { }
20 
21 EventWithHistory::EventWithHistory(const std::vector<edm::EventAuxiliary>& veaux):
22  TinyEvent((veaux.size()>0) ? veaux[veaux.size()-1]: TinyEvent()), _prevse()
23 {
24  for(std::vector<edm::EventAuxiliary>::const_reverse_iterator eaux=veaux.rbegin();eaux!=veaux.rend();eaux++) {
25  if(eaux!=veaux.rbegin()) {
26  _prevse.push_back(*eaux);
27  }
28  }
29 }
30 
32  const long long orbitoffset, const int bxoffset):
33  TinyEvent(), _prevse()
34 {
35 
36  std::map<int,TinyEvent> tmpmap;
37 
38  for(L1AcceptBunchCrossingCollection::const_iterator l1abc=l1abcc.begin();l1abc!=l1abcc.end();++l1abc) {
39  if(event.id().event() > (edm::EventNumber_t)(-1*l1abc->l1AcceptOffset()) ) {
40  edm::EventNumber_t evnumb = event.id().event()+l1abc->l1AcceptOffset();
41  if(orbitoffset < (long long)l1abc->orbitNumber()) {
42  unsigned int neworbit = l1abc->orbitNumber() - orbitoffset;
43  int newbx = l1abc->bunchCrossing() - bxoffset;
44 
45  while(newbx > 3563) {
46  ++neworbit;
47  newbx -= 3564;
48  }
49  while(newbx < 0) {
50  --neworbit;
51  newbx += 3564;
52  }
53 
54  if(l1abc->eventType()!=0) {
55  TinyEvent tmpse(evnumb,neworbit,newbx);
56  tmpmap[l1abc->l1AcceptOffset()]=tmpse;
57  }
58  else {
59  edm::LogWarning("L1AcceptBunchCrossingNoType") << "L1AcceptBunchCrossing with no type found: ";
60  for(L1AcceptBunchCrossingCollection::const_iterator debu=l1abcc.begin();debu!=l1abcc.end();++debu) {
61  edm::LogPrint("L1AcceptBunchCrossingNoType") << *debu;
62  }
63  }
64  }
65  else {
66  edm::LogError("L1AcceptBunchCrossingOffsetTooLarge") << " Too large orbit offset "
67  << orbitoffset << " "
68  << l1abc->orbitNumber();
69  }
70  }
71  else {
72  edm::LogInfo("L1AcceptBunchCrossingNegativeEvent") << "L1AcceptBunchCrossing with negative event: ";
73  for(L1AcceptBunchCrossingCollection::const_iterator debu=l1abcc.begin();debu!=l1abcc.end();++debu) {
74  edm::LogVerbatim("L1AcceptBunchCrossingNegativeEvent") << *debu;
75  }
76  }
77  }
78  // look for the event itself
79  if(tmpmap.find(0)!=tmpmap.end()) {
80 
81  TinyEvent::operator=(tmpmap[0]);
82 
83  // loop on the rest of the map and stop when it is missing
84  // check that the events are in the right order and break if not
85 
86  int counter=-1;
87  while(tmpmap.find(counter)!=tmpmap.end()) {
88 
89  if(tmpmap[counter+1].deltaBX(tmpmap[counter]) > 0) {
90  _prevse.push_back(tmpmap[counter]);
91  --counter;
92  }
93  else {
94  edm::LogWarning("L1AcceptBunchCrossingNotInOrder") << "L1AcceptBunchCrossing not in order: orbit "
95  << event.orbitNumber() << " BX " << event.bunchCrossing()
96  << " orbit offset " << orbitoffset << " bx offset " << bxoffset << " :";
97  for(L1AcceptBunchCrossingCollection::const_iterator debu=l1abcc.begin();debu!=l1abcc.end();++debu) {
98  edm::LogPrint("L1AcceptBunchCrossingNotInOrder") << *debu;
99  }
100  break;
101  }
102  }
103  }
104  else {
105  TinyEvent::operator=(event);
106  edm::LogWarning("L1AcceptBunchCrossingNoCollection") << " L1AcceptBunchCrossing with offset=0 not found "
107  << " likely L1ABCCollection is empty ";
108  }
109 
110 }
111 
112 EventWithHistory::EventWithHistory(const EventWithHistory& he): TinyEvent(he), _prevse(he._prevse) { }
113 
115 
116  if(this != &he) {
118  _prevse = he._prevse;
119  }
120  return *this;
121 }
122 
123 // int EventWithHistory::operator<(const EventWithHistory& other) const { return TinyEvent::operator<(other); }
124 
126 
127  int equal = TinyEvent::operator==(other);
128 
129  // depth is not checked anymore
130 
131  // equal = equal && (depth() == other.depth());
132 
133  if(equal) {
134  for(unsigned int i=0;i<((depth()<other.depth())?depth():other.depth());i++) {
135  equal = equal && (_prevse[i] == other._prevse[i]);
136  }
137  }
138 
139  return equal;
140 }
141 
142 int EventWithHistory::add(const EventWithHistory& he, const int idepth) {
143 
144  if(!add((const TinyEvent&) he,idepth)) return 0;
145 
146  for(std::vector<TinyEvent>::const_iterator ev=he._prevse.begin();ev!=he._prevse.end();ev++) {
147  if(!add(*ev,idepth)) return 0;
148  }
149  return 1;
150 }
151 
152 int EventWithHistory::add(const TinyEvent& se, const int idepth) {
153 
154  bool isfuture = (idepth <0);
155  const unsigned int adepth = abs(idepth);
156 
157  // protect against the possibility of filling with past and future history
158 
159  if( depth()>0 && ((isfuture && !isFutureHistory()) || (!isfuture && isFutureHistory()))) return 0;
160 
161  if(adepth==0) return 0;
162  if(_prevse.size()>= adepth) return 0;
163 
164  if(_prevse.size()==0) {
165  if((!isfuture && isNextOf(se)) || (isfuture && se.isNextOf(*this))) {
166  _prevse.push_back(se);
167  return 1;
168  }
169  else {
170  return 0;
171  }
172  }
173  else {
174  if((!isfuture && _prevse[_prevse.size()-1].isNextOf(se)) || (isfuture && se.isNextOf(_prevse[_prevse.size()-1]))) {
175  _prevse.push_back(se);
176  return 1;
177  }
178  else {
179  return 0;
180  }
181  }
182  return 0;
183 }
184 
186 const unsigned int EventWithHistory::orbit() const { return TinyEvent::_orbit; }
187 const int EventWithHistory::bx() const { return TinyEvent::_bx; }
188 
189 const TinyEvent* EventWithHistory::get(const unsigned int ev) const {
190 
191  if(ev==0) return this;
192  if(ev<=_prevse.size()) return &_prevse[ev-1];
193  return 0;
194 
195 }
196 
197 unsigned int EventWithHistory::depth() const { return _prevse.size(); }
198 
200 
201  return (depth()>0 && _prevse[0].isNextOf(*this));
202 
203 }
204 
205 long long EventWithHistory::deltaBX(const unsigned int ev2, const unsigned int ev1) const {
206 
207  if(ev2==ev1) return 0;
208 
209  if(ev2<ev1 && ev1<=_prevse.size()) {
210  if(ev2==0) return TinyEvent::deltaBX(_prevse[ev1-1]);
211  return _prevse[ev2-1].deltaBX(_prevse[ev1-1]);
212  }
213 
214  return -1;
215 }
216 
217 long long EventWithHistory::deltaBX(const unsigned int ev1) const { return deltaBX(0,ev1); }
218 
219 long long EventWithHistory::deltaBX() const { return deltaBX(0,1); }
220 
221 long long EventWithHistory::deltaBX(const TinyEvent& se) const {
222 
223  return TinyEvent::deltaBX(se);
224 
225 }
226 
227 long long EventWithHistory::absoluteBX(const unsigned int ev1) const {
228 
229  if(ev1==0) return TinyEvent::absoluteBX();
230  if(ev1<=_prevse.size()) return _prevse[ev1-1].absoluteBX();
231 
232  return -1;
233 
234 }
235 
236 long long EventWithHistory::absoluteBX() const {
237 
238  return TinyEvent::absoluteBX();
239 
240 }
241 
242 long long EventWithHistory::absoluteBXinCycle(const unsigned int ev1, const int bx0) const {
243 
244  if(ev1==0) return TinyEvent::absoluteBXinCycle(bx0);
245  if(ev1<=_prevse.size()) return _prevse[ev1-1].absoluteBXinCycle(bx0);
246 
247  return -1;
248 
249 }
250 
251 long long EventWithHistory::absoluteBXinCycle(const int bx0) const {
252 
253  return TinyEvent::absoluteBXinCycle(bx0);
254 
255 }
256 
257 long long EventWithHistory::deltaBXinCycle(const unsigned int ev2, const unsigned int ev1, const int bx0) const {
258 
259  if(ev2==ev1 && ev1<=_prevse.size()) {
260  if(ev2==0) return TinyEvent::deltaBXinCycle(*this,bx0);
261  return _prevse[ev2-1].deltaBXinCycle(_prevse[ev1-1],bx0);
262  }
263 
264  if(ev2<ev1 && ev1<=_prevse.size()) {
265  if(ev2==0) return TinyEvent::deltaBXinCycle(_prevse[ev1-1],bx0);
266  return _prevse[ev2-1].deltaBXinCycle(_prevse[ev1-1],bx0);
267  }
268 
269  return -1;
270 }
271 
272 long long EventWithHistory::deltaBXinCycle(const unsigned int ev1, const int bx0) const {
273  return deltaBXinCycle(0,ev1,bx0);
274 }
275 
276 long long EventWithHistory::deltaBXinCycle(const int bx0) const {
277  return deltaBXinCycle(0,1,bx0);
278 }
279 
280 long long EventWithHistory::deltaBXinCycle(const TinyEvent& se, const int bx0) const {
281 
282  return TinyEvent::deltaBXinCycle(se,bx0);
283 
284 }
unsigned int depth() const
long long absoluteBXinCycle(const int bx0) const
Definition: TinyEvent.h:63
EventNumber_t event() const
Definition: EventID.h:41
int i
Definition: DBlmapReader.cc:9
long long deltaBX() const
const unsigned int orbit() const
const TinyEvent * get(const unsigned int ev) const
unsigned int _bx
Definition: TinyEvent.h:89
unsigned long long EventNumber_t
long long absoluteBXinCycle(const unsigned int ev1, const int bx0) const
bool ev
bool equal(const T &first, const T &second)
Definition: Equal.h:34
std::vector< TinyEvent > _prevse
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< L1AcceptBunchCrossing > L1AcceptBunchCrossingCollection
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int add(const EventWithHistory &he, const int idepth)
TinyEvent & operator=(const TinyEvent &se)
Definition: TinyEvent.h:29
long long absoluteBX() const
Definition: TinyEvent.h:57
long long deltaBX(const TinyEvent &se) const
Definition: TinyEvent.h:69
const int bx() const
const edm::EventNumber_t event() const
int isNextOf(const TinyEvent &se) const
Definition: TinyEvent.h:51
long long deltaBXinCycle(const unsigned int ev2, const unsigned int ev1, const int bx0) const
bool isFutureHistory() const
edm::EventID id() const
Definition: EventBase.h:60
long long absoluteBX() const
static std::atomic< unsigned int > counter
edm::EventNumber_t _event
Definition: TinyEvent.h:87
EventWithHistory & operator=(const EventWithHistory &he)
unsigned int _orbit
Definition: TinyEvent.h:88
int operator==(const TinyEvent &other) const
Definition: TinyEvent.h:45
int operator==(const EventWithHistory &other) const
tuple size
Write out results.
long long deltaBXinCycle(const TinyEvent &se, const int bx0) const
Definition: TinyEvent.h:79