CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
L1GtTrigReport Class Reference

#include <L1GtTrigReport.h>

Inheritance diagram for L1GtTrigReport:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

 L1GtTrigReport (const edm::ParameterSet &)
 constructor More...
 
virtual ~L1GtTrigReport ()
 destructor More...
 
- Public Member Functions inherited from edm::EDAnalyzer
 EDAnalyzer ()
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndex indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Types

typedef std::list
< L1GtTrigReportEntry * >
::const_iterator 
CItEntry
 
typedef std::list
< L1GtTrigReportEntry * >
::iterator 
ItEntry
 

Private Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 analyze each event More...
 
virtual void beginJob ()
 
virtual void endJob ()
 end of job More...
 

Private Attributes

std::list< L1GtTrigReportEntry * > m_entryList
 list of individual entries in the report for physics algorithms More...
 
std::list< L1GtTrigReportEntry * > m_entryListTechTrig
 list of individual entries in the report for technical triggers More...
 
std::vector< int > m_globalNrAccepts
 global number of events accepted by any of the L1 algorithm in any menu More...
 
std::vector< int > m_globalNrErrors
 global number of events with error (EDProduct[s] not found) More...
 
const L1GtTriggerMenum_l1GtMenu
 
unsigned long long m_l1GtMenuCacheID
 
const L1GtPrescaleFactorsm_l1GtPfAlgo
 prescale factors More...
 
unsigned long long m_l1GtPfAlgoCacheID
 
const L1GtPrescaleFactorsm_l1GtPfTech
 
unsigned long long m_l1GtPfTechCacheID
 
edm::InputTag m_l1GtRecordInputTag
 input tag for GT record (L1 GT DAQ record or L1 GT "lite" record): More...
 
const L1GtStableParametersm_l1GtStablePar
 cached stuff More...
 
unsigned long long m_l1GtStableParCacheID
 
const L1GtTriggerMaskm_l1GtTmAlgo
 trigger masks & veto masks More...
 
unsigned long long m_l1GtTmAlgoCacheID
 
const L1GtTriggerMaskm_l1GtTmTech
 
unsigned long long m_l1GtTmTechCacheID
 
const L1GtTriggerMaskm_l1GtTmVetoAlgo
 
unsigned long long m_l1GtTmVetoAlgoCacheID
 
const L1GtTriggerMaskm_l1GtTmVetoTech
 
unsigned long long m_l1GtTmVetoTechCacheID
 
unsigned int m_numberDaqPartitions
 number of DAQ partitions More...
 
unsigned int m_numberDaqPartitionsMax
 
unsigned int m_numberPhysTriggers
 number of physics triggers More...
 
unsigned int m_numberTechnicalTriggers
 number of technical triggers More...
 
unsigned int m_physicsDaqPartition
 index of physics DAQ partition More...
 
const std::vector< std::vector
< int > > * 
m_prescaleFactorsAlgoTrig
 
const std::vector< std::vector
< int > > * 
m_prescaleFactorsTechTrig
 
int m_printOutput
 print output More...
 
int m_printVerbosity
 print verbosity More...
 
int m_totalEvents
 counters More...
 
std::vector< unsigned int > m_triggerMaskAlgoTrig
 
std::vector< unsigned int > m_triggerMaskTechTrig
 
std::vector< unsigned int > m_triggerMaskVetoAlgoTrig
 
std::vector< unsigned int > m_triggerMaskVetoTechTrig
 
bool m_useL1GlobalTriggerRecord
 boolean flag to select the input record More...
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
typedef WorkerT< EDAnalyzerWorkerType
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Description: L1 Trigger report.

Implementation: <TODO: enter implementation details>

Author
: Vasile Mihai Ghete - HEPHY Vienna

$Date$ $Revision$

Definition at line 45 of file L1GtTrigReport.h.

Member Typedef Documentation

typedef std::list<L1GtTrigReportEntry*>::const_iterator L1GtTrigReport::CItEntry
private

Definition at line 149 of file L1GtTrigReport.h.

Definition at line 150 of file L1GtTrigReport.h.

Constructor & Destructor Documentation

L1GtTrigReport::L1GtTrigReport ( const edm::ParameterSet pSet)
explicit

constructor

input tag for GT record (L1 GT DAQ record or L1 GT "lite" record):

Definition at line 72 of file L1GtTrigReport.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), LogDebug, m_entryList, m_entryListTechTrig, m_l1GtMenuCacheID, m_l1GtPfAlgoCacheID, m_l1GtPfTechCacheID, m_l1GtRecordInputTag, m_l1GtStableParCacheID, m_l1GtTmAlgoCacheID, m_l1GtTmTechCacheID, m_l1GtTmVetoAlgoCacheID, m_l1GtTmVetoTechCacheID, m_numberDaqPartitions, m_numberDaqPartitionsMax, m_numberPhysTriggers, m_numberTechnicalTriggers, m_physicsDaqPartition, m_printOutput, m_printVerbosity, m_totalEvents, and m_useL1GlobalTriggerRecord.

72  {
73 
74  // boolean flag to select the input record
75  // if true, it will use L1GlobalTriggerRecord
76  m_useL1GlobalTriggerRecord = pSet.getParameter<bool>("UseL1GlobalTriggerRecord");
77 
79  m_l1GtRecordInputTag = pSet.getParameter<edm::InputTag>("L1GtRecordInputTag");
80 
81  // print verbosity
82  m_printVerbosity = pSet.getUntrackedParameter<int>("PrintVerbosity", 2);
83 
84  // print output
85  m_printOutput = pSet.getUntrackedParameter<int>("PrintOutput", 3);
86 
87  LogDebug("L1GtTrigReport") << "\n Use L1GlobalTriggerRecord: " << m_useL1GlobalTriggerRecord
88  << "\n (if false: L1GtTrigReport uses L1GlobalTriggerReadoutRecord.)"
89  << "\n Input tag for L1 GT record: " << m_l1GtRecordInputTag.label() << " \n"
90  << "\n Print verbosity level: " << m_printVerbosity << " \n"
91  << "\n Print output: " << m_printOutput << " \n" << std::endl;
92 
93  // initialize cached IDs
94 
95  //
97 
102 
103  //
104  m_l1GtPfAlgoCacheID = 0ULL;
105  m_l1GtPfTechCacheID = 0ULL;
106 
107  m_l1GtTmAlgoCacheID = 0ULL;
108  m_l1GtTmTechCacheID = 0ULL;
109 
112 
113  //
114  m_l1GtMenuCacheID = 0ULL;
115 
116  // initialize global counters
117 
118  // number of events processed
119  m_totalEvents = 0;
120 
121  //
122  m_entryList.clear();
123  m_entryListTechTrig.clear();
124 
125  // set the index of physics DAQ partition TODO input parameter?
127 
128 }
#define LogDebug(id)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::list< L1GtTrigReportEntry * > m_entryListTechTrig
list of individual entries in the report for technical triggers
unsigned int m_numberDaqPartitions
number of DAQ partitions
unsigned long long m_l1GtStableParCacheID
int m_printOutput
print output
unsigned long long m_l1GtPfTechCacheID
unsigned int m_numberDaqPartitionsMax
int m_printVerbosity
print verbosity
std::list< L1GtTrigReportEntry * > m_entryList
list of individual entries in the report for physics algorithms
bool m_useL1GlobalTriggerRecord
boolean flag to select the input record
unsigned long long m_l1GtPfAlgoCacheID
unsigned long long m_l1GtTmAlgoCacheID
unsigned int m_numberTechnicalTriggers
number of technical triggers
unsigned long long m_l1GtTmVetoTechCacheID
unsigned long long m_l1GtMenuCacheID
unsigned long long m_l1GtTmTechCacheID
int m_totalEvents
counters
unsigned int m_physicsDaqPartition
index of physics DAQ partition
edm::InputTag m_l1GtRecordInputTag
input tag for GT record (L1 GT DAQ record or L1 GT &quot;lite&quot; record):
unsigned int m_numberPhysTriggers
number of physics triggers
unsigned long long m_l1GtTmVetoAlgoCacheID
L1GtTrigReport::~L1GtTrigReport ( )
virtual

destructor

Definition at line 131 of file L1GtTrigReport.cc.

References m_entryList, and m_entryListTechTrig.

131  {
132 
133  for (ItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
134  if (*itEntry != 0) {
135  delete *itEntry;
136  *itEntry = 0;
137  }
138  }
139 
140  m_entryList.clear();
141 
142  for (ItEntry itEntry = m_entryListTechTrig.begin(); itEntry != m_entryListTechTrig.end(); itEntry++) {
143  if (*itEntry != 0) {
144  delete *itEntry;
145  *itEntry = 0;
146  }
147  }
148 
149  m_entryListTechTrig.clear();
150 
151 }
std::list< L1GtTrigReportEntry * > m_entryListTechTrig
list of individual entries in the report for technical triggers
std::list< L1GtTrigReportEntry * > m_entryList
list of individual entries in the report for physics algorithms
std::list< L1GtTrigReportEntry * >::iterator ItEntry

Member Function Documentation

void L1GtTrigReport::analyze ( const edm::Event iEvent,
const edm::EventSetup evSetup 
)
privatevirtual

analyze each event

Implements edm::EDAnalyzer.

Definition at line 164 of file L1GtTrigReport.cc.

References L1GtTrigReportEntry::addErrorEntry(), L1GtTrigReportEntry::addValidEntry(), edm::EventSetup::get(), edm::Event::getByLabel(), L1GtTriggerMenu::gtAlgorithmMap(), L1GtStableParameters::gtNumberPhysTriggers(), L1GtStableParameters::gtNumberTechnicalTriggers(), L1GtPrescaleFactors::gtPrescaleFactors(), L1GtTriggerMenu::gtTechnicalTriggerMap(), L1GtTriggerMask::gtTriggerMask(), L1GtTriggerMenu::gtTriggerMenuName(), edm::HandleBase::isValid(), edm::InputTag::label(), LogDebug, m_entryList, m_entryListTechTrig, m_globalNrAccepts, m_globalNrErrors, m_l1GtMenu, m_l1GtMenuCacheID, m_l1GtPfAlgo, m_l1GtPfAlgoCacheID, m_l1GtPfTech, m_l1GtPfTechCacheID, m_l1GtRecordInputTag, m_l1GtStablePar, m_l1GtStableParCacheID, m_l1GtTmAlgo, m_l1GtTmAlgoCacheID, m_l1GtTmTech, m_l1GtTmTechCacheID, m_l1GtTmVetoAlgo, m_l1GtTmVetoAlgoCacheID, m_l1GtTmVetoTech, m_l1GtTmVetoTechCacheID, m_numberDaqPartitions, m_numberDaqPartitionsMax, m_numberPhysTriggers, m_numberTechnicalTriggers, m_physicsDaqPartition, m_prescaleFactorsAlgoTrig, m_prescaleFactorsTechTrig, m_totalEvents, m_triggerMaskAlgoTrig, m_triggerMaskTechTrig, m_triggerMaskVetoAlgoTrig, m_triggerMaskVetoTechTrig, m_useL1GlobalTriggerRecord, dtDQMClient_cfg::prescaleFactor, edm::ESHandle< class >::product(), and AlCaHLTBitMon_QueryRunRegistry::string.

164  {
165 
166  // increase the number of processed events
167  m_totalEvents++;
168 
169  // get / update the stable parameters from the EventSetup
170  // local cache & check on cacheIdentifier
171 
172  unsigned long long l1GtStableParCacheID =
173  evSetup.get<L1GtStableParametersRcd>().cacheIdentifier();
174 
175  if (m_l1GtStableParCacheID != l1GtStableParCacheID) {
176 
178  evSetup.get<L1GtStableParametersRcd>().get(l1GtStablePar);
179  m_l1GtStablePar = l1GtStablePar.product();
180 
181  // number of physics triggers
183 
184  // number of technical triggers
186 
187  // number of DAQ partitions
188  m_numberDaqPartitions = 8; // FIXME add it to stable parameters
189 
191 
192  int numberDaqPartitionsOld = m_numberDaqPartitionsMax;
194 
197 
198  for (unsigned int iDaq = numberDaqPartitionsOld; iDaq < m_numberDaqPartitionsMax; ++iDaq) {
199 
200  m_globalNrErrors.push_back(0);
201  m_globalNrAccepts.push_back(0);
202 
203  }
204 
205  }
206 
207  //
208  m_l1GtStableParCacheID = l1GtStableParCacheID;
209 
210  }
211 
212  // get / update the prescale factors from the EventSetup
213  // local cache & check on cacheIdentifier
214 
215  unsigned long long l1GtPfAlgoCacheID =
216  evSetup.get<L1GtPrescaleFactorsAlgoTrigRcd>().cacheIdentifier();
217 
218  if (m_l1GtPfAlgoCacheID != l1GtPfAlgoCacheID) {
219 
221  evSetup.get<L1GtPrescaleFactorsAlgoTrigRcd>().get(l1GtPfAlgo);
222  m_l1GtPfAlgo = l1GtPfAlgo.product();
223 
225 
226  m_l1GtPfAlgoCacheID = l1GtPfAlgoCacheID;
227 
228  }
229 
230  unsigned long long l1GtPfTechCacheID =
231  evSetup.get<L1GtPrescaleFactorsTechTrigRcd>().cacheIdentifier();
232 
233  if (m_l1GtPfTechCacheID != l1GtPfTechCacheID) {
234 
236  evSetup.get<L1GtPrescaleFactorsTechTrigRcd>().get(l1GtPfTech);
237  m_l1GtPfTech = l1GtPfTech.product();
238 
240 
241  m_l1GtPfTechCacheID = l1GtPfTechCacheID;
242 
243  }
244 
245  // get / update the trigger mask from the EventSetup
246  // local cache & check on cacheIdentifier
247 
248  unsigned long long l1GtTmAlgoCacheID =
249  evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().cacheIdentifier();
250 
251  if (m_l1GtTmAlgoCacheID != l1GtTmAlgoCacheID) {
252 
254  evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().get(l1GtTmAlgo);
255  m_l1GtTmAlgo = l1GtTmAlgo.product();
256 
258 
259  m_l1GtTmAlgoCacheID = l1GtTmAlgoCacheID;
260 
261  }
262 
263  unsigned long long l1GtTmTechCacheID =
264  evSetup.get<L1GtTriggerMaskTechTrigRcd>().cacheIdentifier();
265 
266  if (m_l1GtTmTechCacheID != l1GtTmTechCacheID) {
267 
269  evSetup.get<L1GtTriggerMaskTechTrigRcd>().get(l1GtTmTech);
270  m_l1GtTmTech = l1GtTmTech.product();
271 
273 
274  m_l1GtTmTechCacheID = l1GtTmTechCacheID;
275 
276  }
277 
278  unsigned long long l1GtTmVetoAlgoCacheID =
279  evSetup.get<L1GtTriggerMaskVetoAlgoTrigRcd>().cacheIdentifier();
280 
281  if (m_l1GtTmVetoAlgoCacheID != l1GtTmVetoAlgoCacheID) {
282 
283  edm::ESHandle<L1GtTriggerMask> l1GtTmVetoAlgo;
284  evSetup.get<L1GtTriggerMaskVetoAlgoTrigRcd>().get(l1GtTmVetoAlgo);
285  m_l1GtTmVetoAlgo = l1GtTmVetoAlgo.product();
286 
288 
289  m_l1GtTmVetoAlgoCacheID = l1GtTmVetoAlgoCacheID;
290 
291  }
292 
293  unsigned long long l1GtTmVetoTechCacheID =
294  evSetup.get<L1GtTriggerMaskVetoTechTrigRcd>().cacheIdentifier();
295 
296  if (m_l1GtTmVetoTechCacheID != l1GtTmVetoTechCacheID) {
297 
298  edm::ESHandle<L1GtTriggerMask> l1GtTmVetoTech;
299  evSetup.get<L1GtTriggerMaskVetoTechTrigRcd>().get(l1GtTmVetoTech);
300  m_l1GtTmVetoTech = l1GtTmVetoTech.product();
301 
303 
304  m_l1GtTmVetoTechCacheID = l1GtTmVetoTechCacheID;
305 
306  }
307 
308  // get / update the trigger menu from the EventSetup
309  // local cache & check on cacheIdentifier
310 
311  unsigned long long l1GtMenuCacheID =
312  evSetup.get<L1GtTriggerMenuRcd>().cacheIdentifier();
313 
314  if (m_l1GtMenuCacheID != l1GtMenuCacheID) {
315 
317  evSetup.get<L1GtTriggerMenuRcd>().get(l1GtMenu);
318  m_l1GtMenu = l1GtMenu.product();
319 
320  m_l1GtMenuCacheID = l1GtMenuCacheID;
321 
322  LogDebug("L1GtTrigReport") << "\n Changing L1 menu to : \n"
323  << m_l1GtMenu->gtTriggerMenuName() << "\n\n" << std::endl;
324 
325  }
326 
327 
328  const AlgorithmMap& algorithmMap = m_l1GtMenu->gtAlgorithmMap();
329  const AlgorithmMap& technicalTriggerMap = m_l1GtMenu->gtTechnicalTriggerMap();
330 
331  const std::string& menuName = m_l1GtMenu->gtTriggerMenuName();
332 
333  // ... end EventSetup
334 
335  // get L1GlobalTriggerReadoutRecord or L1GlobalTriggerRecord
336  // in L1GlobalTriggerRecord, only the physics partition is available
339 
341  iEvent.getByLabel(m_l1GtRecordInputTag, gtRecord);
342  } else {
343  iEvent.getByLabel(m_l1GtRecordInputTag, gtReadoutRecord);
344  }
345 
346  bool validRecord = false;
347 
348  unsigned int pfIndexAlgo = 0; // get them later from the record
349  unsigned int pfIndexTech = 0;
350 
351  DecisionWord gtDecisionWordBeforeMask;
352  DecisionWord gtDecisionWordAfterMask;
353 
354  TechnicalTriggerWord technicalTriggerWordBeforeMask;
355  TechnicalTriggerWord technicalTriggerWordAfterMask;
356 
358 
359  if (gtRecord.isValid()) {
360 
361  // get Global Trigger decision and the decision word
362  bool gtDecision = gtRecord->decision();
363 
364  gtDecisionWordBeforeMask = gtRecord->decisionWordBeforeMask();
365  gtDecisionWordAfterMask = gtRecord->decisionWord();
366 
367  technicalTriggerWordBeforeMask = gtRecord->technicalTriggerWordBeforeMask();
368  technicalTriggerWordAfterMask = gtRecord->technicalTriggerWord();
369 
370  if (gtDecision) {
372  }
373 
374  pfIndexAlgo = gtRecord->gtPrescaleFactorIndexAlgo();
375  pfIndexTech = gtRecord->gtPrescaleFactorIndexTech();
376 
377  validRecord = true;
378 
379  } else {
380 
382 
383  edm::LogWarning("L1GtTrigReport") << "\n L1GlobalTriggerRecord with input tag "
384  << m_l1GtRecordInputTag.label() << " not found."
385  << "\n Event classified as Error\n\n"
386  << std::endl;
387 
388  }
389 
390  } else {
391  if (gtReadoutRecord.isValid()) {
392 
393  // check if the readout record has size greater than zero, then proceeds
394  const std::vector<L1GtFdlWord>& fdlVec = gtReadoutRecord->gtFdlVector();
395  size_t fdlVecSize = fdlVec.size();
396 
397  if (fdlVecSize > 0) {
398 
399  LogDebug("L1GtTrigReport") << "\n L1GlobalTriggerReadoutRecord with input tag "
400  << m_l1GtRecordInputTag.label() << " has gtFdlVector of size " << fdlVecSize
401  << std::endl;
402 
403  // get Global Trigger finalOR and the decision word
404  boost::uint16_t gtFinalOR = gtReadoutRecord->finalOR();
405 
406  gtDecisionWordBeforeMask = gtReadoutRecord->decisionWord();
407  technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord();
408 
409  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
410 
411  bool gtDecision = static_cast<bool>(gtFinalOR & ( 1 << iDaqPartition ));
412  if (gtDecision) {
413  m_globalNrAccepts[iDaqPartition]++;
414  }
415 
416  }
417 
418  pfIndexAlgo
419  = static_cast<unsigned int>( ( gtReadoutRecord->gtFdlWord() ).gtPrescaleFactorIndexAlgo());
420  pfIndexTech
421  = static_cast<unsigned int>( ( gtReadoutRecord->gtFdlWord() ).gtPrescaleFactorIndexTech());
422 
423  validRecord = true;
424 
425  } else {
426 
427  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
428  m_globalNrErrors[iDaqPartition]++;
429  }
430 
431  edm::LogWarning("L1GtTrigReport") << "\n L1GlobalTriggerReadoutRecord with input tag "
432  << m_l1GtRecordInputTag.label() << " has gtFdlVector of size " << fdlVecSize
433  << "\n Invalid L1GlobalTriggerReadoutRecord!"
434  << "\n Event classified as Error\n\n"
435  << std::endl;
436 
437  validRecord = false;
438 
439  }
440 
441  } else {
442 
443  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
444  m_globalNrErrors[iDaqPartition]++;
445  }
446 
447  edm::LogWarning("L1GtTrigReport") << "\n L1GlobalTriggerReadoutRecord with input tag "
448  << m_l1GtRecordInputTag.label() << " not found."
449  << "\n Event classified as Error\n\n"
450  << std::endl;
451 
452  }
453 
454  }
455 
456  // get the prescale factor set used in the actual luminosity segment
457  const std::vector<int>& prescaleFactorsAlgoTrig =
458  ( *m_prescaleFactorsAlgoTrig ).at(pfIndexAlgo);
459 
460  const std::vector<int>& prescaleFactorsTechTrig =
461  ( *m_prescaleFactorsTechTrig ).at(pfIndexTech);
462 
463 
464  if (validRecord) {
465 
466  // loop over algorithms and increase the corresponding counters
467  for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
468 
469  std::string algName = itAlgo->first;
470  int algBitNumber = ( itAlgo->second ).algoBitNumber();
471 
472  // the result before applying the trigger masks is available
473  // in both L1GlobalTriggerReadoutRecord or L1GlobalTriggerRecord
474  bool algResultBeforeMask = gtDecisionWordBeforeMask[algBitNumber];
475 
476  int prescaleFactor = prescaleFactorsAlgoTrig.at(algBitNumber);
477 
478  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
479 
480  unsigned int triggerMask = ( m_triggerMaskAlgoTrig.at(algBitNumber) ) & ( 1
481  << iDaqPartition );
482 
483  bool algResultAfterMask = false;
484 
486  if (iDaqPartition == m_physicsDaqPartition) {
487  // result available already for physics DAQ partition
488  // in lite record
489  algResultAfterMask = gtDecisionWordAfterMask[algBitNumber];
490  } else {
491  // apply the masks for other partitions
492  algResultAfterMask = algResultBeforeMask;
493 
494  if (triggerMask) {
495  algResultAfterMask = false;
496  }
497  }
498  } else {
499  // apply the masks for L1GlobalTriggerReadoutRecord
500  algResultAfterMask = algResultBeforeMask;
501 
502  if (triggerMask) {
503  algResultAfterMask = false;
504  }
505  }
506 
508  menuName, algName, prescaleFactor, triggerMask, iDaqPartition);
509 
510  int iCount = 0;
511 
512  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
513  if ( ( *entryRep ) == * ( *itEntry )) {
514  iCount++;
515  // increase the corresponding counter in the list entry
516  ( *itEntry )->addValidEntry(algResultAfterMask, algResultBeforeMask);
517  }
518  }
519 
520  if (iCount == 0) {
521  // if entry not in the list, increase the corresponding counter
522  // and push the entry in the list
523  entryRep->addValidEntry(algResultAfterMask, algResultBeforeMask);
524  m_entryList.push_back(entryRep);
525  } else {
526  delete entryRep;
527  }
528  }
529  }
530 
531  // loop over technical triggers and increase the corresponding counters
532  for (CItAlgo itAlgo = technicalTriggerMap.begin(); itAlgo != technicalTriggerMap.end(); itAlgo++) {
533  //for (unsigned int iTechTrig = 0; iTechTrig < m_numberTechnicalTriggers; ++iTechTrig) {
534 
535  std::string ttName = itAlgo->first;
536  int ttBitNumber = ( itAlgo->second ).algoBitNumber();
537  // std::string ttName = boost::lexical_cast<std::string>(iTechTrig);
538  // int ttBitNumber = iTechTrig;
539 
540  // the result before applying the trigger masks is available
541  // in both L1GlobalTriggerReadoutRecord or L1GlobalTriggerRecord
542  bool ttResultBeforeMask = technicalTriggerWordBeforeMask[ttBitNumber];
543 
544  int prescaleFactor = prescaleFactorsTechTrig.at(ttBitNumber);
545 
546  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
547 
548  unsigned int triggerMask = ( m_triggerMaskTechTrig.at(ttBitNumber) ) & ( 1
549  << iDaqPartition );
550 
551  bool ttResultAfterMask = false;
552 
554  if (iDaqPartition == m_physicsDaqPartition) {
555  // result available already for physics DAQ partition
556  // in lite record
557  ttResultAfterMask = technicalTriggerWordAfterMask[ttBitNumber];
558  } else {
559  // apply the masks for other partitions
560  ttResultAfterMask = ttResultBeforeMask;
561 
562  if (triggerMask) {
563  ttResultAfterMask = false;
564  }
565  }
566  } else {
567  // apply the masks for L1GlobalTriggerReadoutRecord
568  ttResultAfterMask = ttResultBeforeMask;
569 
570  if (triggerMask) {
571  ttResultAfterMask = false;
572  }
573  }
574 
576  menuName, ttName, prescaleFactor, triggerMask, iDaqPartition);
577 
578  int iCount = 0;
579 
580  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry
581  != m_entryListTechTrig.end(); itEntry++) {
582  if ( ( *entryRep ) == * ( *itEntry )) {
583  iCount++;
584  // increase the corresponding counter in the list entry
585  ( *itEntry )->addValidEntry(ttResultAfterMask, ttResultBeforeMask);
586  }
587  }
588 
589  if (iCount == 0) {
590  // if entry not in the list, increase the corresponding counter
591  // and push the entry in the list
592  entryRep->addValidEntry(ttResultAfterMask, ttResultBeforeMask);
593  m_entryListTechTrig.push_back(entryRep);
594  } else {
595  delete entryRep;
596  }
597  }
598  }
599 
600  } else {
601 
602  // loop over algorithms and increase the error counters
603  for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
604 
605  std::string algName = itAlgo->first;
606  int algBitNumber = ( itAlgo->second ).algoBitNumber();
607 
608  int prescaleFactor = prescaleFactorsAlgoTrig.at(algBitNumber);
609 
610  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
611 
612  unsigned int triggerMask = ( m_triggerMaskAlgoTrig.at(algBitNumber) ) & ( 1
613  << iDaqPartition );
614 
616  menuName, algName, prescaleFactor, triggerMask, iDaqPartition);
617 
618  int iCount = 0;
619 
620  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
621 
622  if ( ( *entryRep ) == * ( *itEntry )) {
623  iCount++;
624  // increase the corresponding counter in the list entry
625  ( *itEntry )->addErrorEntry();
626  }
627  }
628 
629  if (iCount == 0) {
630  // if entry not in the list, increase the corresponding counter
631  // and push the entry in the list
632  entryRep->addErrorEntry();
633  m_entryList.push_back(entryRep);
634  } else {
635  delete entryRep;
636  }
637  }
638 
639  }
640 
641  // loop over technical triggers and increase the error counters
642  // FIXME move to names when technical triggers available in menu
643  //for (CItAlgo itAlgo = technicalTriggerMap.begin(); itAlgo != technicalTriggerMap.end(); itAlgo++) {
644  for (unsigned int iTechTrig = 0; iTechTrig < m_numberTechnicalTriggers; ++iTechTrig) {
645 
646  //std::string ttName = itAlgo->first;
647  //int ttBitNumber = ( itAlgo->second ).algoBitNumber();
648  std::string ttName = boost::lexical_cast<std::string>(iTechTrig);
649  int ttBitNumber = iTechTrig;
650 
651  int prescaleFactor = prescaleFactorsTechTrig.at(ttBitNumber);
652 
653  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
654 
655  unsigned int triggerMask = ( m_triggerMaskTechTrig.at(ttBitNumber) ) & ( 1
656  << iDaqPartition );
657 
659  menuName, ttName, prescaleFactor, triggerMask, iDaqPartition);
660 
661  int iCount = 0;
662 
663  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry
664  != m_entryListTechTrig.end(); itEntry++) {
665 
666  if ( ( *entryRep ) == * ( *itEntry )) {
667  iCount++;
668  // increase the corresponding counter in the list entry
669  ( *itEntry )->addErrorEntry();
670  }
671  }
672 
673  if (iCount == 0) {
674  // if entry not in the list, increase the corresponding counter
675  // and push the entry in the list
676  entryRep->addErrorEntry();
677  m_entryListTechTrig.push_back(entryRep);
678  } else {
679  delete entryRep;
680  }
681  }
682 
683  }
684 
685  }
686 
687 }
#define LogDebug(id)
const std::string & gtTriggerMenuName() const
std::vector< int > m_globalNrErrors
global number of events with error (EDProduct[s] not found)
std::list< L1GtTrigReportEntry * >::const_iterator CItEntry
std::list< L1GtTrigReportEntry * > m_entryListTechTrig
list of individual entries in the report for technical triggers
const L1GtTriggerMenu * m_l1GtMenu
std::vector< unsigned int > m_triggerMaskTechTrig
unsigned int m_numberDaqPartitions
number of DAQ partitions
unsigned long long m_l1GtStableParCacheID
const L1GtStableParameters * m_l1GtStablePar
cached stuff
std::vector< unsigned int > m_triggerMaskAlgoTrig
std::map< std::string, L1GtAlgorithm > AlgorithmMap
map containing the algorithms
void addValidEntry(const bool algResultAfterMask, const bool algResultBeforeMask)
increase # of events accepted/rejected for this entry
unsigned long long m_l1GtPfTechCacheID
unsigned int m_numberDaqPartitionsMax
const L1GtTriggerMask * m_l1GtTmVetoTech
const L1GtPrescaleFactors * m_l1GtPfTech
const L1GtTriggerMask * m_l1GtTmVetoAlgo
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
std::list< L1GtTrigReportEntry * > m_entryList
list of individual entries in the report for physics algorithms
unsigned int gtNumberTechnicalTriggers() const
get / set the number of technical triggers
unsigned int gtNumberPhysTriggers() const
get / set the number of physics trigger algorithms
bool m_useL1GlobalTriggerRecord
boolean flag to select the input record
unsigned long long m_l1GtPfAlgoCacheID
const std::vector< unsigned int > & gtTriggerMask() const
get the trigger mask
std::vector< bool > DecisionWord
typedefs
const L1GtTriggerMask * m_l1GtTmAlgo
trigger masks &amp; veto masks
const L1GtPrescaleFactors * m_l1GtPfAlgo
prescale factors
unsigned long long m_l1GtTmAlgoCacheID
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
std::vector< unsigned int > m_triggerMaskVetoTechTrig
bool isValid() const
Definition: HandleBase.h:76
unsigned int m_numberTechnicalTriggers
number of technical triggers
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
unsigned long long m_l1GtTmVetoTechCacheID
void addErrorEntry()
increase # of events with error
const L1GtTriggerMask * m_l1GtTmTech
std::vector< int > m_globalNrAccepts
global number of events accepted by any of the L1 algorithm in any menu
unsigned long long m_l1GtMenuCacheID
unsigned long long m_l1GtTmTechCacheID
std::vector< unsigned int > m_triggerMaskVetoAlgoTrig
const std::vector< std::vector< int > > & gtPrescaleFactors() const
get the prescale factors by reference
int m_totalEvents
counters
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
const std::vector< std::vector< int > > * m_prescaleFactorsAlgoTrig
unsigned int m_physicsDaqPartition
index of physics DAQ partition
edm::InputTag m_l1GtRecordInputTag
input tag for GT record (L1 GT DAQ record or L1 GT &quot;lite&quot; record):
std::string const & label() const
Definition: InputTag.h:42
const AlgorithmMap & gtAlgorithmMap() const
get / set the algorithm map (by name)
unsigned int m_numberPhysTriggers
number of physics triggers
const std::vector< std::vector< int > > * m_prescaleFactorsTechTrig
const AlgorithmMap & gtTechnicalTriggerMap() const
get / set the technical trigger map
unsigned long long m_l1GtTmVetoAlgoCacheID
void L1GtTrigReport::beginJob ( void  )
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 157 of file L1GtTrigReport.cc.

157  {
158 
159  // empty
160 
161 }
void L1GtTrigReport::endJob ( void  )
privatevirtual

end of job

Reimplemented from edm::EDAnalyzer.

Definition at line 690 of file L1GtTrigReport.cc.

References gather_cfg::cout, LogTrace, m_entryList, m_entryListTechTrig, m_globalNrAccepts, m_globalNrErrors, m_numberDaqPartitions, m_physicsDaqPartition, m_printOutput, m_printVerbosity, m_totalEvents, m_useL1GlobalTriggerRecord, and mathSSE::sqrt().

690  {
691 
692  // define an output stream to print into
693  // it can then be directed to whatever log level is desired
694  std::ostringstream myCout;
695 
696  myCout << std::dec << std::endl;
697  myCout << "L1T-Report " << "---------- Event Summary ----------\n";
698  myCout << "L1T-Report " << "Total number of events processed: " << m_totalEvents << "\n";
699  myCout << "L1T-Report\n";
700 
701  myCout
702  << "\n"
703  << " DAQ partition "
704  << " Total "
705  << " Passed[finalOR] "
706  << " Rejected "
707  << " Errors "
708  << "\n" << std::endl;
709 
710  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
711 
712  int rejectedEvents = m_totalEvents - m_globalNrErrors[iDaqPartition]
713  - m_globalNrAccepts[iDaqPartition];
714 
715  if (m_useL1GlobalTriggerRecord && ( iDaqPartition != m_physicsDaqPartition )) {
716  continue;
717  } else {
718 
719  myCout
720  << std::right << std::setw(16) << iDaqPartition << " "
721  << std::right << std::setw(16) << m_totalEvents << " "
722  << std::right << std::setw(16) << m_globalNrAccepts[iDaqPartition] << " "
723  << std::right << std::setw(16) << rejectedEvents << " "
724  << std::right << std::setw(16) << m_globalNrErrors[iDaqPartition] << std::endl;
725 
726  }
727 
728  }
729 
730  // get the list of menus for the sample analyzed
731  //
732  std::set<std::string> menuList;
733  typedef std::set<std::string>::const_iterator CItL1Menu;
734 
735  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
736  menuList.insert( ( *itEntry )->gtTriggerMenuName());
737  }
738 
739  myCout
740  << "\nThe following L1 menus were used for this sample: " << std::endl;
741  for (CItL1Menu itMenu = menuList.begin(); itMenu != menuList.end(); itMenu++) {
742  myCout << " " << ( *itMenu ) << std::endl;
743  }
744  myCout << "\n" << std::endl;
745 
746  switch (m_printVerbosity) {
747  case 0: {
748 
749  myCout
750  << "\nL1T-Report " << "---------- L1 Trigger Global Summary - DAQ Partition "
751  << m_physicsDaqPartition << "----------\n\n";
752 
753  myCout
754  << "\n\n Number of events written after applying L1 prescale factors"
755  << " and trigger masks\n" << " if not explicitly mentioned.\n\n";
756 
757  for (CItL1Menu itMenu = menuList.begin(); itMenu != menuList.end(); itMenu++) {
758 
759  myCout << "\nReport for L1 menu: " << (*itMenu) << "\n"
760  << std::endl;
761 
762  myCout
763  << std::right << std::setw(45) << "Algorithm Key" << " "
764  << std::right << std::setw(10) << "Passed" << " "
765  << std::right << std::setw(10) << "Rejected" << " "
766  << std::right << std::setw(10) << "Error"
767  << "\n";
768 
769  for (CItEntry itEntry = m_entryList.begin(); itEntry
770  != m_entryList.end(); itEntry++) {
771 
772  if (((*itEntry)->gtDaqPartition() == m_physicsDaqPartition)
773  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
774 
775  myCout
776  << std::right << std::setw(45) << (*itEntry)->gtAlgoName() << " "
777  << std::right << std::setw(10) << (*itEntry)->gtNrEventsAccept() << " "
778  << std::right << std::setw(10) << (*itEntry)->gtNrEventsReject() << " "
779  << std::right << std::setw(10) << (*itEntry)->gtNrEventsError()
780  << "\n";
781  }
782 
783  }
784 
785  myCout
786  << "\n\n"
787  << std::right << std::setw(45) << "Technical Trigger Key" << " "
788  << std::right << std::setw(10) << "Passed" << " "
789  << std::right << std::setw(10) << "Rejected" << " "
790  << std::right << std::setw(10) << "Error"
791  << "\n";
792 
793  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry
794  != m_entryListTechTrig.end(); itEntry++) {
795 
796  if (((*itEntry)->gtDaqPartition() == m_physicsDaqPartition)
797  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
798 
799  myCout
800  << std::right << std::setw(45) << (*itEntry)->gtAlgoName() << " "
801  << std::right << std::setw(10) << (*itEntry)->gtNrEventsAccept() << " "
802  << std::right << std::setw(10) << (*itEntry)->gtNrEventsReject() << " "
803  << std::right << std::setw(10) << (*itEntry)->gtNrEventsError()
804  << "\n";
805  }
806 
807  }
808  }
809 
810  }
811 
812  break;
813  case 1: {
814 
815  myCout << "\nL1T-Report " << "---------- L1 Trigger Global Summary - DAQ Partition "
816  << m_physicsDaqPartition << "----------\n\n";
817 
818  myCout << "\n\n Number of events written after applying L1 prescale factors"
819  << " and trigger masks\n" << " if not explicitly mentioned.\n\n";
820 
821  for (CItL1Menu itMenu = menuList.begin(); itMenu != menuList.end(); itMenu++) {
822 
823  myCout << "\nReport for L1 menu: " << (*itMenu) << "\n"
824  << std::endl;
825  myCout
826  << std::right << std::setw(45) << "Algorithm Key" << " "
827  << std::right << std::setw(10) << "Prescale" << " "
828  << std::right << std::setw(5) << "Mask" << " "
829  << std::right << std::setw(10) << "Passed" << " "
830  << std::right << std::setw(10) << "Rejected" << " "
831  << std::right << std::setw(10) << "Error" << std::setw(2) << " "
832  << "\n";
833 
834  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
835 
836  if ( (( *itEntry )->gtDaqPartition() == m_physicsDaqPartition)
837  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
838  myCout
839  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
840  << std::right << std::setw(10) << ( *itEntry )->gtPrescaleFactor() << " "
841  << std::right << std::setw(2) //<< std::setfill('0')
842  << std::hex << ( *itEntry )->gtTriggerMask() //<< std::setfill(' ')
843  << std::dec << " "
844  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsAccept() << " "
845  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsReject() << " "
846  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsError() << std::setw(2) << " "
847  << "\n";
848  }
849  }
850 
851  myCout
852  << "\n\n"
853  << std::right << std::setw(45) << "Technical Trigger Key" << " "
854  << std::right << std::setw(10) << "Prescale" << " "
855  << std::right << std::setw(5) << "Mask" << " "
856  << std::right << std::setw(10) << "Passed" << " "
857  << std::right << std::setw(10) << "Rejected" << " "
858  << std::right << std::setw(10) << "Error" << std::setw(2) << " "
859  << "\n";
860 
861  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry != m_entryListTechTrig.end(); itEntry++) {
862 
863  if ( (( *itEntry )->gtDaqPartition() == m_physicsDaqPartition)
864  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
865  myCout
866  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
867  << std::right << std::setw(10) << ( *itEntry )->gtPrescaleFactor() << " "
868  << std::right << std::setw(2) //<< std::setfill('0')
869  << std::hex << ( *itEntry )->gtTriggerMask() //<< std::setfill(' ')
870  << std::dec << " "
871  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsAccept() << " "
872  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsReject() << " "
873  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsError() << std::setw(2) << " "
874  << "\n";
875  }
876  }
877  }
878 
879  }
880 
881  break;
882  case 2: {
883 
884 
885  for (CItL1Menu itMenu = menuList.begin(); itMenu != menuList.end(); itMenu++) {
886 
887  myCout << "\nReport for L1 menu: " << ( *itMenu ) << "\n"
888  << std::endl;
889 
890  myCout
891  << std::right << std::setw(45) << "Algorithm Key" << " "
892  << std::right << std::setw(10) << "Passed" << " "
893  << std::right << std::setw(10) << "Rejected" << " "
894  << std::right << std::setw(10) << "Error" << "\n";
895 
896  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
897 
898  if ( ( ( *itEntry )->gtDaqPartition() == m_physicsDaqPartition )
899  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
900 
901  int nrEventsAccept = ( *itEntry )->gtNrEventsAccept();
902  int nrEventsReject = ( *itEntry )->gtNrEventsReject();
903  int nrEventsError = ( *itEntry )->gtNrEventsError();
904 
905  myCout
906  << std::right << std::setw(45) << (( *itEntry )->gtAlgoName()) << " "
907  << std::right << std::setw(10) << nrEventsAccept << " "
908  << std::right << std::setw(10) << nrEventsReject << " "
909  << std::right << std::setw(10) << nrEventsError << "\n";
910 
911  }
912  }
913 
914  // efficiency and its statistical error
915 
916  myCout << "\n\n"
917  << std::right << std::setw(45) << "Algorithm Key" << " "
918  << std::right << std::setw(10) << "Efficiency " << " "
919  << std::right << std::setw(10) << "Stat error (%)" << "\n";
920 
921  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
922 
923  if ( ( ( *itEntry )->gtDaqPartition() == 0 )
924  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
925 
926  int nrEventsAccept = ( *itEntry )->gtNrEventsAccept();
927  int nrEventsReject = ( *itEntry )->gtNrEventsReject();
928  int nrEventsError = ( *itEntry )->gtNrEventsError();
929 
930  int totalEvents = nrEventsAccept + nrEventsReject + nrEventsError;
931 
932  // efficiency and their statistical error
933  float eff = 0.;
934  float statErrEff = 0.;
935 
936  if (totalEvents != 0) {
937  eff = static_cast<float> (nrEventsAccept)
938  / static_cast<float> (totalEvents);
939  statErrEff = sqrt(eff * ( 1.0 - eff )
940  / static_cast<float> (totalEvents));
941 
942  }
943 
944  myCout
945  << std::right << std::setw(45) << (( *itEntry )->gtAlgoName()) << " "
946  << std::right << std::setw(10) << std::fixed << std::setprecision(2)
947  << 100.*eff << " +- "
948  << std::right << std::setw(10) << std::setprecision(2)
949  << 100.*statErrEff << "\n";
950 
951 
952  }
953 
954  }
955 
956  myCout
957  << "\n\n"
958  << std::right << std::setw(45) << "Technical Trigger Key" << " "
959  << std::right << std::setw(10) << "Passed" << " "
960  << std::right << std::setw(10) << "Rejected" << " "
961  << std::right << std::setw(10) << "Error" << "\n";
962 
963  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry
964  != m_entryListTechTrig.end(); itEntry++) {
965 
966  if ( ( ( *itEntry )->gtDaqPartition() == m_physicsDaqPartition )
967  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
968 
969  int nrEventsAccept = ( *itEntry )->gtNrEventsAccept();
970  int nrEventsReject = ( *itEntry )->gtNrEventsReject();
971  int nrEventsError = ( *itEntry )->gtNrEventsError();
972 
973  myCout
974  << std::right << std::setw(45) << (( *itEntry )->gtAlgoName()) << " "
975  << std::right << std::setw(10) << nrEventsAccept << " "
976  << std::right << std::setw(10) << nrEventsReject << " "
977  << std::right << std::setw(10) << nrEventsError << "\n";
978 
979  }
980  }
981 
982  // efficiency and its statistical error
983 
984  myCout << "\n\n"
985  << std::right << std::setw(45) << "Technical Trigger Key" << " "
986  << std::right << std::setw(10) << "Efficiency " << " "
987  << std::right << std::setw(10) << "Stat error (%)" << "\n";
988 
989  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry
990  != m_entryListTechTrig.end(); itEntry++) {
991 
992  if ( ( ( *itEntry )->gtDaqPartition() == 0 )
993  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
994 
995  int nrEventsAccept = ( *itEntry )->gtNrEventsAccept();
996  int nrEventsReject = ( *itEntry )->gtNrEventsReject();
997  int nrEventsError = ( *itEntry )->gtNrEventsError();
998 
999  int totalEvents = nrEventsAccept + nrEventsReject + nrEventsError;
1000 
1001  // efficiency and their statistical error
1002  float eff = 0.;
1003  float statErrEff = 0.;
1004 
1005  if (totalEvents != 0) {
1006  eff = static_cast<float> (nrEventsAccept)
1007  / static_cast<float> (totalEvents);
1008  statErrEff = sqrt(eff * ( 1.0 - eff )
1009  / static_cast<float> (totalEvents));
1010 
1011  }
1012 
1013  myCout
1014  << std::right << std::setw(45) << (( *itEntry )->gtAlgoName()) << " "
1015  << std::right << std::setw(10) << std::fixed << std::setprecision(2)
1016  << 100.*eff << " +- "
1017  << std::right << std::setw(10) << std::setprecision(2)
1018  << 100.*statErrEff << "\n";
1019 
1020 
1021  }
1022 
1023  }
1024 
1025  }
1026 
1027 
1028  }
1029  break;
1030 
1031  case 10: {
1032 
1033  myCout << "\nL1T-Report " << "---------- L1 Trigger Global Summary - DAQ Partition "
1034  << m_physicsDaqPartition << "----------\n\n";
1035 
1036  for (CItL1Menu itMenu = menuList.begin(); itMenu != menuList.end(); itMenu++) {
1037 
1038  myCout << "\nReport for L1 menu: " << ( *itMenu ) << "\n"
1039  << std::endl;
1040  myCout
1041  << std::right << std::setw(45) << "Algorithm Key" << " "
1042  << std::right << std::setw(10) << "Prescale" << " "
1043  << std::right << std::setw(5) << "Mask" << " "
1044  << std::right << std::setw(25) << "Before Mask" << " "
1045  << std::right << std::setw(30) << "After Mask" << " "
1046  << std::right << std::setw(22) << "Error"
1047  << "\n"
1048  << std::right << std::setw(64) << " " << std::setw(15) << "Passed"
1049  << std::right << std::setw(1) << " " << std::setw(15) << "Rejected"
1050  << std::right << std::setw(1) << " " << std::setw(15) << "Passed"
1051  << std::right << std::setw(1) << " " << std::setw(15) << "Rejected"
1052  << "\n";
1053 
1054  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
1055 
1056  if ( (( *itEntry )->gtDaqPartition() == m_physicsDaqPartition)
1057  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
1058  myCout
1059  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
1060  << std::right << std::setw(10) << ( *itEntry )->gtPrescaleFactor() << " "
1061  << std::right << std::setw(5) << " " << std::hex << ( *itEntry )->gtTriggerMask() << std::dec << " "
1062  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsAcceptBeforeMask() << " "
1063  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsRejectBeforeMask() << " "
1064  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsAccept() << " "
1065  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsReject() << " "
1066  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsError()
1067  << "\n";
1068  }
1069  }
1070 
1071  myCout
1072  << "\n\n"
1073  << std::right << std::setw(45) << "Technical Trigger Key" << " "
1074  << std::right << std::setw(10) << "Prescale" << " "
1075  << std::right << std::setw(5) << "Mask" << " "
1076  << std::right << std::setw(25) << "Before Mask" << " "
1077  << std::right << std::setw(30) << "After Mask" << " "
1078  << std::right << std::setw(22) << "Error"
1079  << "\n"
1080  << std::right << std::setw(64) << " " << std::setw(15) << "Passed"
1081  << std::right << std::setw(1) << " " << std::setw(15) << "Rejected"
1082  << std::right << std::setw(1) << " " << std::setw(15) << "Passed"
1083  << std::right << std::setw(1) << " " << std::setw(15) << "Rejected"
1084  << "\n";
1085 
1086  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry != m_entryListTechTrig.end(); itEntry++) {
1087 
1088  if ( (( *itEntry )->gtDaqPartition() == m_physicsDaqPartition)
1089  && ( ( *itEntry )->gtTriggerMenuName() == *itMenu )) {
1090  myCout
1091  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
1092  << std::right << std::setw(10) << ( *itEntry )->gtPrescaleFactor() << " "
1093  << std::right << std::setw(5) << " " << std::hex << ( *itEntry )->gtTriggerMask() << std::dec << " "
1094  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsAcceptBeforeMask() << " "
1095  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsRejectBeforeMask() << " "
1096  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsAccept() << " "
1097  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsReject() << " "
1098  << std::right << std::setw(15) << ( *itEntry )->gtNrEventsError()
1099  << "\n";
1100  }
1101  }
1102  }
1103  }
1104 
1105  break;
1106  case 100: {
1107 
1108  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
1109 
1110  myCout << "\nL1T-Report "
1111  << "---------- L1 Trigger Global Summary - DAQ Partition " << iDaqPartition
1112  << " " << "----------\n\n";
1113 
1114  myCout
1115  << std::right << std::setw(45) << "Algorithm Key" << " "
1116  << std::right << std::setw(10) << "Passed" << " "
1117  << std::right << std::setw(10) << "Rejected" << " "
1118  << std::right << std::setw(10) << "Error" << std::setw(2) << " "
1119  << "\n";
1120 
1121  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
1122 
1123  if ( (( *itEntry )->gtDaqPartition() == 0)) {
1124 
1125  myCout
1126  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
1127  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsAccept() << " "
1128  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsReject() << " "
1129  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsError() << std::setw(2) << " "
1130  << "\n";
1131  }
1132 
1133  }
1134 
1135  myCout
1136  << "\n\n"
1137  << std::right << std::setw(45) << "Technical Trigger Key" << " "
1138  << std::right << std::setw(10) << "Passed" << " "
1139  << std::right << std::setw(10) << "Rejected" << " "
1140  << std::right << std::setw(10) << "Error" << std::setw(2) << " "
1141  << "\n";
1142 
1143  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry != m_entryListTechTrig.end(); itEntry++) {
1144 
1145  if ( ( *itEntry )->gtDaqPartition() == 0) {
1146 
1147  myCout
1148  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
1149  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsAccept() << " "
1150  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsReject() << " "
1151  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsError() << std::setw(2) << " "
1152  << std::right << std::setw(20) << ( *itEntry )->gtTriggerMenuName()
1153  << "\n";
1154  }
1155 
1156  }
1157 
1158  }
1159  }
1160 
1161  break;
1162  case 101: {
1163 
1164  for (unsigned int iDaqPartition = 0; iDaqPartition < m_numberDaqPartitions; ++iDaqPartition) {
1165 
1166  myCout << "\nL1T-Report "
1167  << "---------- L1 Trigger Global Summary - DAQ Partition " << iDaqPartition
1168  << " " << "----------\n\n";
1169 
1170  myCout
1171  << std::right << std::setw(45) << "Algorithm Key" << " "
1172  << std::right << std::setw(10) << "Prescale" << " "
1173  << std::right << std::setw(5) << "Mask" << " "
1174  << std::right << std::setw(10) << "Passed" << " "
1175  << std::right << std::setw(10) << "Rejected" << " "
1176  << std::right << std::setw(10) << "Error" << std::setw(2) << " "
1177  << "\n";
1178 
1179  for (CItEntry itEntry = m_entryList.begin(); itEntry != m_entryList.end(); itEntry++) {
1180 
1181  if ( ( *itEntry )->gtDaqPartition() == 0) {
1182  myCout
1183  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
1184  << std::right << std::setw(10) << ( *itEntry )->gtPrescaleFactor() << " "
1185  << std::right << std::setw(2) //<< std::setfill('0')
1186  << std::hex << ( *itEntry )->gtTriggerMask() //<< std::setfill(' ')
1187  << std::dec << " "
1188  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsAccept() << " "
1189  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsReject() << " "
1190  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsError() << std::setw(2) << " "
1191  << "\n";
1192  }
1193  }
1194 
1195  myCout
1196  << "\n\n"
1197  << std::right << std::setw(45) << "Technical Trigger Key" << " "
1198  << std::right << std::setw(10) << "Prescale" << " "
1199  << std::right << std::setw(5) << "Mask" << " "
1200  << std::right << std::setw(10) << "Passed" << " "
1201  << std::right << std::setw(10) << "Rejected" << " "
1202  << std::right << std::setw(10) << "Error" << std::setw(2) << " "
1203  << "\n";
1204 
1205  for (CItEntry itEntry = m_entryListTechTrig.begin(); itEntry != m_entryListTechTrig.end(); itEntry++) {
1206 
1207  if ( ( *itEntry )->gtDaqPartition() == 0) {
1208  myCout
1209  << std::right << std::setw(45) << ( *itEntry )->gtAlgoName() << " "
1210  << std::right << std::setw(10) << ( *itEntry )->gtPrescaleFactor() << " "
1211  << std::right << std::setw(2) //<< std::setfill('0')
1212  << std::hex << ( *itEntry )->gtTriggerMask() //<< std::setfill(' ')
1213  << std::dec << " "
1214  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsAccept() << " "
1215  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsReject() << " "
1216  << std::right << std::setw(10) << ( *itEntry )->gtNrEventsError() << std::setw(2) << " "
1217  << "\n";
1218  }
1219  }
1220 
1221  }
1222  }
1223 
1224  break;
1225  default: {
1226  myCout
1227  << "\n\nL1GtTrigReport: Error - no print verbosity level = " << m_printVerbosity
1228  << " defined! \nCheck available values in the cfi file." << "\n";
1229  }
1230 
1231  break;
1232  }
1233 
1234  // TODO for other verbosity levels
1235  // print the trigger menu, the prescale factors and the trigger mask, etc
1236 
1237 
1238  myCout << std::endl;
1239  myCout << "L1T-Report end!" << std::endl;
1240  myCout << std::endl;
1241 
1242  switch (m_printOutput) {
1243  case 0: {
1244 
1245  std::cout << myCout.str() << std::endl;
1246 
1247  }
1248 
1249  break;
1250  case 1: {
1251 
1252  LogTrace("L1GtTrigReport") << myCout.str() << std::endl;
1253 
1254  }
1255  break;
1256 
1257  case 2: {
1258 
1259  edm::LogVerbatim("L1GtTrigReport") << myCout.str() << std::endl;
1260 
1261  }
1262 
1263  break;
1264  case 3: {
1265 
1266  edm::LogInfo("L1GtTrigReport") << myCout.str();
1267 
1268  }
1269 
1270  break;
1271  default: {
1272  std::cout
1273  << "\n\n L1GtTrigReport: Error - no print output = " << m_printOutput
1274  << " defined! \n Check available values in the cfi file." << "\n" << std::endl;
1275 
1276  }
1277  break;
1278  }
1279 
1280 }
std::vector< int > m_globalNrErrors
global number of events with error (EDProduct[s] not found)
std::list< L1GtTrigReportEntry * >::const_iterator CItEntry
std::list< L1GtTrigReportEntry * > m_entryListTechTrig
list of individual entries in the report for technical triggers
unsigned int m_numberDaqPartitions
number of DAQ partitions
int m_printOutput
print output
int m_printVerbosity
print verbosity
std::list< L1GtTrigReportEntry * > m_entryList
list of individual entries in the report for physics algorithms
bool m_useL1GlobalTriggerRecord
boolean flag to select the input record
T sqrt(T t)
Definition: SSEVec.h:48
#define LogTrace(id)
std::vector< int > m_globalNrAccepts
global number of events accepted by any of the L1 algorithm in any menu
int m_totalEvents
counters
unsigned int m_physicsDaqPartition
index of physics DAQ partition
tuple cout
Definition: gather_cfg.py:121

Member Data Documentation

std::list<L1GtTrigReportEntry*> L1GtTrigReport::m_entryList
private

list of individual entries in the report for physics algorithms

Definition at line 144 of file L1GtTrigReport.h.

Referenced by analyze(), endJob(), L1GtTrigReport(), and ~L1GtTrigReport().

std::list<L1GtTrigReportEntry*> L1GtTrigReport::m_entryListTechTrig
private

list of individual entries in the report for technical triggers

Definition at line 147 of file L1GtTrigReport.h.

Referenced by analyze(), endJob(), L1GtTrigReport(), and ~L1GtTrigReport().

std::vector<int> L1GtTrigReport::m_globalNrAccepts
private

global number of events accepted by any of the L1 algorithm in any menu

Definition at line 141 of file L1GtTrigReport.h.

Referenced by analyze(), and endJob().

std::vector<int> L1GtTrigReport::m_globalNrErrors
private

global number of events with error (EDProduct[s] not found)

Definition at line 138 of file L1GtTrigReport.h.

Referenced by analyze(), and endJob().

const L1GtTriggerMenu* L1GtTrigReport::m_l1GtMenu
private

Definition at line 114 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtMenuCacheID
private

Definition at line 115 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtPrescaleFactors* L1GtTrigReport::m_l1GtPfAlgo
private

prescale factors

Definition at line 85 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtPfAlgoCacheID
private

Definition at line 86 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtPrescaleFactors* L1GtTrigReport::m_l1GtPfTech
private

Definition at line 88 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtPfTechCacheID
private

Definition at line 89 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

edm::InputTag L1GtTrigReport::m_l1GtRecordInputTag
private

input tag for GT record (L1 GT DAQ record or L1 GT "lite" record):

Definition at line 124 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtStableParameters* L1GtTrigReport::m_l1GtStablePar
private

cached stuff

stable parameters

Definition at line 71 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtStableParCacheID
private

Definition at line 72 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtTriggerMask* L1GtTrigReport::m_l1GtTmAlgo
private

trigger masks & veto masks

Definition at line 95 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtTmAlgoCacheID
private

Definition at line 96 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtTriggerMask* L1GtTrigReport::m_l1GtTmTech
private

Definition at line 98 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtTmTechCacheID
private

Definition at line 99 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtTriggerMask* L1GtTrigReport::m_l1GtTmVetoAlgo
private

Definition at line 101 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtTmVetoAlgoCacheID
private

Definition at line 102 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

const L1GtTriggerMask* L1GtTrigReport::m_l1GtTmVetoTech
private

Definition at line 104 of file L1GtTrigReport.h.

Referenced by analyze().

unsigned long long L1GtTrigReport::m_l1GtTmVetoTechCacheID
private

Definition at line 105 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

unsigned int L1GtTrigReport::m_numberDaqPartitions
private

number of DAQ partitions

Definition at line 81 of file L1GtTrigReport.h.

Referenced by analyze(), endJob(), and L1GtTrigReport().

unsigned int L1GtTrigReport::m_numberDaqPartitionsMax
private

Definition at line 82 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

unsigned int L1GtTrigReport::m_numberPhysTriggers
private

number of physics triggers

Definition at line 75 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

unsigned int L1GtTrigReport::m_numberTechnicalTriggers
private

number of technical triggers

Definition at line 78 of file L1GtTrigReport.h.

Referenced by analyze(), and L1GtTrigReport().

unsigned int L1GtTrigReport::m_physicsDaqPartition
private

index of physics DAQ partition

Definition at line 153 of file L1GtTrigReport.h.

Referenced by analyze(), endJob(), and L1GtTrigReport().

const std::vector<std::vector<int> >* L1GtTrigReport::m_prescaleFactorsAlgoTrig
private

Definition at line 91 of file L1GtTrigReport.h.

Referenced by analyze().

const std::vector<std::vector<int> >* L1GtTrigReport::m_prescaleFactorsTechTrig
private

Definition at line 92 of file L1GtTrigReport.h.

Referenced by analyze().

int L1GtTrigReport::m_printOutput
private

print output

Definition at line 130 of file L1GtTrigReport.h.

Referenced by endJob(), and L1GtTrigReport().

int L1GtTrigReport::m_printVerbosity
private

print verbosity

Definition at line 127 of file L1GtTrigReport.h.

Referenced by endJob(), and L1GtTrigReport().

int L1GtTrigReport::m_totalEvents
private

counters

global number of events processed

Definition at line 135 of file L1GtTrigReport.h.

Referenced by analyze(), endJob(), and L1GtTrigReport().

std::vector<unsigned int> L1GtTrigReport::m_triggerMaskAlgoTrig
private

Definition at line 107 of file L1GtTrigReport.h.

Referenced by analyze().

std::vector<unsigned int> L1GtTrigReport::m_triggerMaskTechTrig
private

Definition at line 108 of file L1GtTrigReport.h.

Referenced by analyze().

std::vector<unsigned int> L1GtTrigReport::m_triggerMaskVetoAlgoTrig
private

Definition at line 110 of file L1GtTrigReport.h.

Referenced by analyze().

std::vector<unsigned int> L1GtTrigReport::m_triggerMaskVetoTechTrig
private

Definition at line 111 of file L1GtTrigReport.h.

Referenced by analyze().

bool L1GtTrigReport::m_useL1GlobalTriggerRecord
private

boolean flag to select the input record

Definition at line 121 of file L1GtTrigReport.h.

Referenced by analyze(), endJob(), and L1GtTrigReport().