CMS 3D CMS Logo

EventWithHistoryFilter.cc
Go to the documentation of this file.
5 //#include "DPGAnalysis/SiStripTools/interface/APVLatency.h"
6 //#include "DPGAnalysis/SiStripTools/interface/APVLatencyRcd.h"
10 //#include "FWCore/Utilities/interface/Exception.h"
11 
13 
14 
16  m_historyToken(),
17  m_partition(),
18  m_APVPhaseToken(),
19  m_apvmodes(),
20  m_dbxrange(), m_dbxrangelat(),
21  m_bxrange(), m_bxrangelat(),
22  m_bxcyclerange(), m_bxcyclerangelat(),
23  m_dbxcyclerange(), m_dbxcyclerangelat(),
24  m_dbxtrpltrange(),
25  m_dbxgenericrange(),m_dbxgenericfirst(0),m_dbxgenericlast(1),
26  m_noAPVPhase(true)
27 {
29 }
30 
32  m_historyToken(iC.consumes<EventWithHistory>(iConfig.getUntrackedParameter<edm::InputTag>("historyProduct",edm::InputTag("consecutiveHEs")))),
33  m_partition(iConfig.getUntrackedParameter<std::string>("partitionName","Any")),
34  m_APVPhaseToken(iC.consumes<APVCyclePhaseCollection>(edm::InputTag(iConfig.getUntrackedParameter<std::string>("APVPhaseLabel","APVPhases")))),
35  m_apvmodes(iConfig.getUntrackedParameter<std::vector<int> >("apvModes",std::vector<int>())),
36  m_dbxrange(iConfig.getUntrackedParameter<std::vector<int> >("dbxRange",std::vector<int>())),
37  m_dbxrangelat(iConfig.getUntrackedParameter<std::vector<int> >("dbxRangeLtcyAware",std::vector<int>())),
38  m_bxrange(iConfig.getUntrackedParameter<std::vector<int> >("absBXRange",std::vector<int>())),
39  m_bxrangelat(iConfig.getUntrackedParameter<std::vector<int> >("absBXRangeLtcyAware",std::vector<int>())),
40  m_bxcyclerange(iConfig.getUntrackedParameter<std::vector<int> >("absBXInCycleRange",std::vector<int>())),
41  m_bxcyclerangelat(iConfig.getUntrackedParameter<std::vector<int> >("absBXInCycleRangeLtcyAware",std::vector<int>())),
42  m_dbxcyclerange(iConfig.getUntrackedParameter<std::vector<int> >("dbxInCycleRange",std::vector<int>())),
43  m_dbxcyclerangelat(iConfig.getUntrackedParameter<std::vector<int> >("dbxInCycleRangeLtcyAware",std::vector<int>())),
44  m_dbxtrpltrange(iConfig.getUntrackedParameter<std::vector<int> >("dbxTripletRange",std::vector<int>())),
45  m_dbxgenericrange(iConfig.getUntrackedParameter<std::vector<int> >("dbxGenericRange",std::vector<int>())),
46  m_dbxgenericfirst(iConfig.getUntrackedParameter<unsigned int>("dbxGenericFirst",0)),
47  m_dbxgenericlast(iConfig.getUntrackedParameter<unsigned int>("dbxGenericLast",1))
48 
49 {
51  printConfig(iConfig.getUntrackedParameter<edm::InputTag>("historyProduct",edm::InputTag("consecutiveHEs")),
52  edm::InputTag(iConfig.getUntrackedParameter<std::string>("APVPhaseLabel","APVPhases")));
53 }
54 
56 
57 
58  m_historyToken = iC.consumes<EventWithHistory>(iConfig.getUntrackedParameter<edm::InputTag>("historyProduct",edm::InputTag("consecutiveHEs")));
59  m_partition = iConfig.getUntrackedParameter<std::string>("partitionName","Any");
60  m_APVPhaseToken = iC.consumes<APVCyclePhaseCollection>(edm::InputTag(iConfig.getUntrackedParameter<std::string>("APVPhaseLabel","APVPhases")));
61  m_dbxrange = iConfig.getUntrackedParameter<std::vector<int> >("dbxRange",std::vector<int>());
62  m_dbxrangelat = iConfig.getUntrackedParameter<std::vector<int> >("dbxRangeLtcyAware",std::vector<int>());
63  m_bxrange = iConfig.getUntrackedParameter<std::vector<int> >("absBXRange",std::vector<int>());
64  m_bxrangelat = iConfig.getUntrackedParameter<std::vector<int> >("absBXRangeLtcyAware",std::vector<int>());
65  m_bxcyclerange = iConfig.getUntrackedParameter<std::vector<int> >("absBXInCycleRange",std::vector<int>());
66  m_bxcyclerangelat = iConfig.getUntrackedParameter<std::vector<int> >("absBXInCycleRangeLtcyAware",std::vector<int>());
67  m_dbxcyclerange = iConfig.getUntrackedParameter<std::vector<int> >("dbxInCycleRange",std::vector<int>());
68  m_dbxcyclerangelat = iConfig.getUntrackedParameter<std::vector<int> >("dbxInCycleRangeLtcyAware",std::vector<int>());
69  m_dbxtrpltrange = iConfig.getUntrackedParameter<std::vector<int> >("dbxTripletRange",std::vector<int>());
70  m_dbxgenericrange = iConfig.getUntrackedParameter<std::vector<int> >("dbxGenericRange",std::vector<int>());
71  m_dbxgenericfirst = iConfig.getUntrackedParameter<int>("dbxGenericFirst",0);
72  m_dbxgenericlast = iConfig.getUntrackedParameter<int>("dbxGenericLast",1);
73 
75  printConfig(iConfig.getUntrackedParameter<edm::InputTag>("historyProduct",edm::InputTag("consecutiveHEs")),
76  edm::InputTag(iConfig.getUntrackedParameter<std::string>("APVPhaseLabel","APVPhases")));
77 
78 }
79 
80 const bool EventWithHistoryFilter::selected(const EventWithHistory& he, const edm::EventSetup& iSetup) const {
81 
82  const std::vector<int> dummy;
83  return is_selected(he,iSetup,dummy);
84 
85 }
86 
87 const bool EventWithHistoryFilter::selected(const EventWithHistory& he, const edm::Event& iEvent, const edm::EventSetup& iSetup) const {
88 
89  const std::vector<int> apvphases = getAPVPhase(iEvent);
90  return is_selected(he,iSetup,apvphases);
91 
92 }
93 
94 const bool EventWithHistoryFilter::selected(const edm::Event& event, const edm::EventSetup& iSetup) const {
95 
96  const std::vector<int> apvphases = getAPVPhase(event);
97 
99  event.getByToken(m_historyToken,hEvent);
100 
101  return is_selected(*hEvent,iSetup,apvphases);
102 
103 }
104 
105 
106 const bool EventWithHistoryFilter::is_selected(const EventWithHistory& he, const edm::EventSetup& iSetup, const std::vector<int>& _apvphases) const {
107 
108  const std::vector<int>& apvphases = _apvphases;
109  const int latency = getAPVLatency(iSetup);
110 
111 
112  bool selected = true;
113 
114  if(!isAPVModeNotNeeded()) {
115  const int apvmode = getAPVMode(iSetup);
116  bool modeok = false;
117  for(std::vector<int>::const_iterator wantedmode =m_apvmodes.begin();wantedmode!=m_apvmodes.end();++wantedmode) {
118  modeok = modeok || (apvmode == *wantedmode);
119  }
120  if(!modeok) return false;
121  }
122 
123  selected = selected && (isCutInactive(m_dbxrange) || isInRange(he.deltaBX(),m_dbxrange,he.depth()!=0));
124 
125  selected = selected && (isCutInactive(m_dbxrangelat) ||
126  isInRange(he.deltaBX()-latency,m_dbxrangelat,he.depth()!=0 && latency>=0));
127 
128  selected = selected && (isCutInactive(m_bxrange) || isInRange(he.absoluteBX()%70,m_bxrange,true));
129 
130  selected = selected && (isCutInactive(m_bxrangelat) ||
131  isInRange((he.absoluteBX()-latency)%70,m_bxrangelat,latency>=0));
132 
133  // loop on all the phases and require that the cut is fulfilled for at least one of them
134 
135 
136  bool phaseselected;
137 
138  phaseselected = isCutInactive(m_bxcyclerange);
139  for(std::vector<int>::const_iterator phase=apvphases.begin();phase!=apvphases.end();++phase) {
140  phaseselected = phaseselected || isInRange(he.absoluteBXinCycle(*phase)%70,m_bxcyclerange,*phase>=0);
141  }
142  selected = selected && phaseselected;
143 
144  phaseselected = isCutInactive(m_bxcyclerangelat);
145  for(std::vector<int>::const_iterator phase=apvphases.begin();phase!=apvphases.end();++phase) {
146  phaseselected = phaseselected || isInRange((he.absoluteBXinCycle(*phase)-latency)%70,m_bxcyclerangelat,
147  *phase>=0 && latency>=0);
148  }
149  selected = selected && phaseselected;
150 
151  phaseselected = isCutInactive(m_dbxcyclerange);
152  for(std::vector<int>::const_iterator phase=apvphases.begin();phase!=apvphases.end();++phase) {
153  phaseselected = phaseselected || isInRange(he.deltaBXinCycle(*phase),m_dbxcyclerange,he.depth()!=0 && *phase>=0);
154  }
155  selected = selected && phaseselected;
156 
157  phaseselected = isCutInactive(m_dbxcyclerangelat);
158  for(std::vector<int>::const_iterator phase=apvphases.begin();phase!=apvphases.end();++phase) {
159  phaseselected = phaseselected || isInRange(he.deltaBXinCycle(*phase)-latency,m_dbxcyclerangelat,
160  he.depth()!=0 && *phase>=0 && latency>=0);
161  }
162  selected = selected && phaseselected;
163 
164  // end of phase-dependent cuts
165 
166  selected = selected && (isCutInactive(m_dbxtrpltrange) ||
167  isInRange(he.deltaBX(1,2),m_dbxtrpltrange,he.depth()>1));
168 
169  selected = selected && (isCutInactive(m_dbxgenericrange) ||
171 
172  return selected;
173 
174 }
175 
177 
178  if(isAPVLatencyNotNeeded()) return -1;
179 
181  iSetup.get<SiStripLatencyRcd>().get(apvlat);
182  const int latency = apvlat->singleLatency()!=255 ? apvlat->singleLatency(): -1;
183 
184  // thrown an exception if latency value is invalid
185  /*
186  if(latency < 0 && !isAPVLatencyNotNeeded())
187  throw cms::Exception("InvalidAPVLatency") << " invalid APVLatency found ";
188  */
189 
190  return latency;
191 
192 }
193 
194 const int EventWithHistoryFilter::getAPVMode(const edm::EventSetup& iSetup) const {
195 
196  if(isAPVModeNotNeeded()) return -1;
197 
199  iSetup.get<SiStripLatencyRcd>().get(apvlat);
200  int mode = -1;
201  if(apvlat->singleReadOutMode()==1) mode = 47;
202  if(apvlat->singleReadOutMode()==0) mode = 37;
203 
204  // thrown an exception if mode value is invalid
205  /*
206  if(mode < 0 && !isAPVModeNotNeeded())
207  throw cms::Exception("InvalidAPVMode") << " invalid APVMode found ";
208  */
209 
210  return mode;
211 
212 }
213 
214 const std::vector<int> EventWithHistoryFilter::getAPVPhase(const edm::Event& iEvent) const {
215 
216  if(m_noAPVPhase) {
217  const std::vector<int> dummy;
218  return dummy;
219  }
220 
222  iEvent.getByToken(m_APVPhaseToken,apvPhases);
223 
224  const std::vector<int> phases = apvPhases->getPhases(m_partition);
225 
226  /*
227  if(!m_noAPVPhase) {
228  if(phases.size()==0) throw cms::Exception("NoPartitionAPVPhase")
229  << " No APV phase for partition " << m_partition.c_str() << " : check if a proper partition has been chosen ";
230  }
231  */
232 
233  return phases;
234 }
235 
237 
238  return
243 
244 }
245 
247 
248  return
253 
254 }
255 
257 
258  return (m_apvmodes.empty()) ;
259 
260 }
261 
262 const bool EventWithHistoryFilter::isCutInactive(const std::vector<int>& range) const {
263 
264  return ((range.empty() ||
265  (range.size()==1 && range[0]<0) ||
266  (range.size()==2 && range[0]<0 && range[1]<0)));
267 
268 }
269 
270 const bool EventWithHistoryFilter::isInRange(const long long bx, const std::vector<int>& range, const bool extra) const {
271 
272  bool cut1 = range.empty() || range[0]<0 || (extra && bx >= range[0]);
273  bool cut2 = range.size()<2 || range[1]<0 || (extra && bx <= range[1]);
274 
275  if(range.size()>=2 && range[0]>=0 && range[1]>=0 && (range[0] > range[1])) {
276  return cut1 || cut2;
277  }
278  else {
279  return cut1 && cut2;
280  }
281 
282 }
283 
284 void EventWithHistoryFilter::printConfig(const edm::InputTag& historyTag, const edm::InputTag& apvphaseTag) const {
285 
286  std::string msgcategory = "EventWithHistoryFilterConfiguration";
287 
288  if(!(
299  )) {
300 
301  edm::LogInfo(msgcategory) << "historyProduct: " << historyTag << " APVCyclePhase: " << apvphaseTag;
302 
303  edm::LogVerbatim(msgcategory) << "-----------------------";
304  edm::LogVerbatim(msgcategory) << "List of active cuts:";
305  if(!isCutInactive(m_bxrange)) {
306  edm::LogVerbatim(msgcategory) << "......................";
307  if(!m_bxrange.empty()) edm::LogVerbatim(msgcategory) << "absoluteBX lower limit " << m_bxrange[0];
308  if(m_bxrange.size()>=2) edm::LogVerbatim(msgcategory) << "absoluteBX upper limit " << m_bxrange[1];
309  edm::LogVerbatim(msgcategory) << "......................";
310  }
312  edm::LogVerbatim(msgcategory) << "......................";
313  if(!m_bxrangelat.empty()) edm::LogVerbatim(msgcategory) << "absoluteBXLtcyAware lower limit "
314  << m_bxrangelat[0];
315  if(m_bxrangelat.size()>=2) edm::LogVerbatim(msgcategory) << "absoluteBXLtcyAware upper limit "
316  << m_bxrangelat[1];
317  edm::LogVerbatim(msgcategory) << "......................";
318  }
320  edm::LogVerbatim(msgcategory) << "......................";
321  edm::LogVerbatim(msgcategory) <<"absoluteBXinCycle partition: " << m_partition;
322  if(!m_bxcyclerange.empty()) edm::LogVerbatim(msgcategory) << "absoluteBXinCycle lower limit "
323  << m_bxcyclerange[0];
324  if(m_bxcyclerange.size()>=2) edm::LogVerbatim(msgcategory) << "absoluteBXinCycle upper limit "
325  << m_bxcyclerange[1];
326  edm::LogVerbatim(msgcategory) << "......................";
327  }
329  edm::LogVerbatim(msgcategory) << "......................";
330  edm::LogVerbatim(msgcategory) <<"absoluteBXinCycleLtcyAware partition: " << m_partition;
331  if(!m_bxcyclerangelat.empty()) edm::LogVerbatim(msgcategory) << "absoluteBXinCycleLtcyAware lower limit "
332  << m_bxcyclerangelat[0];
333  if(m_bxcyclerangelat.size()>=2) edm::LogVerbatim(msgcategory) << "absoluteBXinCycleLtcyAware upper limit "
334  << m_bxcyclerangelat[1];
335  edm::LogVerbatim(msgcategory) << "......................";
336  }
337  if(!isCutInactive(m_dbxrange)) {
338  edm::LogVerbatim(msgcategory) << "......................";
339  if(!m_dbxrange.empty()) edm::LogVerbatim(msgcategory) << "deltaBX lower limit " << m_dbxrange[0];
340  if(m_dbxrange.size()>=2) edm::LogVerbatim(msgcategory) << "deltaBX upper limit " << m_dbxrange[1];
341  edm::LogVerbatim(msgcategory) << "......................";
342  }
344  edm::LogVerbatim(msgcategory) << "......................";
345  if(!m_dbxrangelat.empty()) edm::LogVerbatim(msgcategory) << "deltaBXLtcyAware lower limit "
346  << m_dbxrangelat[0];
347  if(m_dbxrangelat.size()>=2) edm::LogVerbatim(msgcategory) << "deltaBXLtcyAware upper limit "
348  << m_dbxrangelat[1];
349  edm::LogVerbatim(msgcategory) << "......................";
350  }
352  edm::LogVerbatim(msgcategory) << "......................";
353  edm::LogVerbatim(msgcategory) <<"deltaBXinCycle partition: " << m_partition;
354  if(!m_dbxcyclerange.empty()) edm::LogVerbatim(msgcategory) << "deltaBXinCycle lower limit "
355  << m_dbxcyclerange[0];
356  if(m_dbxcyclerange.size()>=2) edm::LogVerbatim(msgcategory) << "deltaBXinCycle upper limit "
357  << m_dbxcyclerange[1];
358  edm::LogVerbatim(msgcategory) << "......................";
359  }
361  edm::LogVerbatim(msgcategory) << "......................";
362  edm::LogVerbatim(msgcategory) <<"deltaBXinCycleLtcyAware partition: " << m_partition;
363  if(!m_dbxcyclerangelat.empty()) edm::LogVerbatim(msgcategory) << "deltaBXinCycleLtcyAware lower limit "
364  << m_dbxcyclerangelat[0];
365  if(m_dbxcyclerangelat.size()>=2) edm::LogVerbatim(msgcategory) << "deltaBXinCycleLtcyAware upper limit "
366  << m_dbxcyclerangelat[1];
367  edm::LogVerbatim(msgcategory) << "......................";
368  }
370  edm::LogVerbatim(msgcategory) << "......................";
371  if(!m_dbxtrpltrange.empty()) edm::LogVerbatim(msgcategory) << "TripletIsolation lower limit "
372  << m_dbxtrpltrange[0];
373  if(m_dbxtrpltrange.size()>=2) edm::LogVerbatim(msgcategory) << "TripletIsolation upper limit "
374  << m_dbxtrpltrange[1];
375  edm::LogVerbatim(msgcategory) << "......................";
376  }
378  edm::LogVerbatim(msgcategory) << "......................";
379  edm::LogVerbatim(msgcategory) << "Generic DBX computed between n-" << m_dbxgenericfirst << " and n-"<<m_dbxgenericlast << " trigger";
380  if(!m_dbxgenericrange.empty()) edm::LogVerbatim(msgcategory) << "Generic DBX cut lower limit "
381  << m_dbxgenericrange[0];
382  if(m_dbxgenericrange.size()>=2) edm::LogVerbatim(msgcategory) << "Generic DBX upper limit "
383  << m_dbxgenericrange[1];
384  edm::LogVerbatim(msgcategory) << "......................";
385  }
386  edm::LogVerbatim(msgcategory) << "-----------------------";
387  }
388 }
unsigned int depth() const
std::vector< int > m_dbxcyclerange
T getUntrackedParameter(std::string const &, T const &) const
std::vector< int > m_bxcyclerange
long long deltaBX(const unsigned int ev2, const unsigned int ev1) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
const bool isAPVPhaseNotNeeded() const
int16_t singleReadOutMode() const
const bool is_selected(const EventWithHistory &he, const edm::EventSetup &iSetup, const std::vector< int > &apvphases) const
long long absoluteBX(const unsigned int ev1) const
long long absoluteBXinCycle(const unsigned int ev1, const int bx0) const
const std::vector< int > getAPVPhase(const edm::Event &iEvent) const
std::vector< int > m_dbxgenericrange
const bool isAPVModeNotNeeded() const
edm::EDGetTokenT< APVCyclePhaseCollection > m_APVPhaseToken
void printConfig(const edm::InputTag &historyTag, const edm::InputTag &apvphaseTag) const
std::vector< int > m_dbxrangelat
void set(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC)
int iEvent
Definition: GenABIO.cc:224
const int getAPVMode(const edm::EventSetup &iSetup) const
const std::vector< int > getPhases(const std::string partition) const
std::vector< int > m_dbxtrpltrange
edm::EDGetTokenT< EventWithHistory > m_historyToken
const int getAPVLatency(const edm::EventSetup &iSetup) const
uint16_t singleLatency() const
If all the latency values stored are equal return that value, otherwise return -1.
const bool selected(const EventWithHistory &he, const edm::EventSetup &iSetup) const
const bool isInRange(const long long bx, const std::vector< int > &range, const bool extra) const
std::vector< int > m_bxrangelat
const bool isAPVLatencyNotNeeded() const
std::vector< int > phases
std::vector< int > m_bxcyclerangelat
std::vector< int > m_dbxcyclerangelat
long long deltaBXinCycle(const unsigned int ev2, const unsigned int ev1, const int bx0) const
const bool isCutInactive(const std::vector< int > &range) const
HLT enums.
std::vector< int > m_apvmodes
T get() const
Definition: EventSetup.h:71
std::vector< int > m_dbxrange
latency
hardware algo
std::vector< int > m_bxrange
Definition: event.py:1