48 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: Constructor" << endl;
51 dtDigiToken_ = consumes<DTDigiCollection>(
58 subtractT0 = ps.
getParameter<
bool>(
"performPerWireT0Calibration");
67 ltcDigiCollectionToken_ = consumes<LTCDigiCollection>(
77 inTimeHitsLowerBound = ps.
getParameter<
int>(
"inTimeHitsLowerBound");
78 inTimeHitsUpperBound = ps.
getParameter<
int>(
"inTimeHitsUpperBound");
105 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"DTDigiTask: analyzed " << nevents <<
" events" << endl;
112 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: begin run" << endl;
135 if(doStaticBooking) {
138 nEventMonitor = ibooker.
bookFloat(tpMode ?
"nProcessedEventsDigiTP" :
"nProcessedEventsDigi" );
140 for(
int wh = -2; wh <= 2; ++wh) {
141 if(doAllHitsOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyAllHits");
143 if(doNoiseOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyNoise");
144 if(doInTimeOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyInTimeHits");
146 if(lookForSyncNoise || filterSyncNoise) {
147 bookHistos(ibooker, wh,
string(
"SynchNoise"),
"SyncNoiseEvents");
148 bookHistos(ibooker, wh,
string(
"SynchNoise"),
"SyncNoiseChambs");
151 for(
int st = 1; st <= 4; ++st) {
152 for(
int sect = 1; sect <= 14; ++sect) {
153 if((sect == 13 || sect == 14) && st != 4)
continue;
158 if (doAllHitsOccupancies) {
159 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyAllHits_perCh");
161 channelsMap(dtChId,
"OccupancyAllHits_perCh");
163 if(doNoiseOccupancies)
164 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyNoise_perCh");
165 if(doInTimeOccupancies)
166 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyInTimeHits_perCh");
168 for(
int sl = 1; sl <= 3; ++sl) {
169 if(st == 4 && sl == 2)
continue;
172 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBox");
175 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxDTonly");
176 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxNoDT");
177 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxDTalso");
189 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: Begin of LS transition" << endl;
193 if(lumiBlock % resetCycle == 0) {
195 <<
"[DTDigiTask]: Reset at the LS transition : " 196 << lumiBlock << endl;
198 map<string,map<uint32_t,MonitorElement*> >::const_iterator histosIt = digiHistos.begin();
199 map<string,map<uint32_t,MonitorElement*> >::const_iterator histosEnd = digiHistos.end();
200 for(;histosIt != histosEnd ; ++histosIt) {
201 map<uint32_t,MonitorElement*>::const_iterator histoIt = (*histosIt).second.begin();
202 map<uint32_t,MonitorElement*>::const_iterator histoEnd = (*histosIt).second.end();
203 for(;histoIt != histoEnd; ++histoIt) { (*histoIt).second->Reset(); }
207 for(
int wh=-2; wh<=2; wh++) {
208 for(
int sect=1; sect<=14; sect++) {
209 for(
int st=1; st<=4; st++) {
210 if( (sect == 13 || sect == 14) && st != 4 ) {
continue;}
212 channelsMap(dtChId,
"OccupancyAllHits_perCh");
218 map<string,map<int,MonitorElement*> >::const_iterator whHistosIt = wheelHistos.begin();
219 map<string,map<int,MonitorElement*> >::const_iterator whHistosEnd = wheelHistos.end();
220 for(; whHistosIt != whHistosEnd ; ++whHistosIt) {
221 if ((*whHistosIt).first.find(
"Sync") == string::npos) {
222 map<int,MonitorElement*>::const_iterator histoIt = (*whHistosIt).second.begin();
223 map<int,MonitorElement*>::const_iterator histoEnd = (*whHistosIt).second.end();
224 for(;histoIt != histoEnd; ++histoIt) { (*histoIt).second->Reset(); }
237 stringstream sector; sector << dtSL.
sector();
238 stringstream superLayer; superLayer << dtSL.
superlayer();
240 "/Sector" + sector.str() +
241 "/Station" + station.str());
244 string histoName = histoTag
246 +
"_St" + station.str()
247 +
"_Sec" + sector.str()
248 +
"_SL" + superLayer.str();
250 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
251 <<
"[DTDigiTask]: booking SL histo:" << histoName
252 <<
" (tag: " << histoTag
253 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
254 "/Station" + station.str() +
255 "/Sector" + sector.str() +
"/" +
folder << endl;
261 else tTrig = defaultTTrig;
264 if (
folder ==
"TimeBoxes") {
265 string histoTitle = histoName +
" (TDC Counts)";
268 (digiHistos[histoTag])[dtSL.
rawId()] =
269 ibooker.
book1D(histoName,histoTitle, maxTTMounts/timeBoxGranularity, 0, maxTTMounts);
270 if(doLayerTimeBoxes) {
271 for(
int layer = 1; layer != 5; ++layer) {
273 stringstream layerHistoName; layerHistoName << histoName <<
"_L" << layer;
274 (digiHistos[histoTag])[layerId.
rawId()] =
275 ibooker.
book1D(layerHistoName.str(),layerHistoName.str(), maxTTMounts/timeBoxGranularity, 0, maxTTMounts);
280 (digiHistos[histoTag])[dtSL.
rawId()] =
281 ibooker.
book1D(histoName,histoTitle, 3*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
282 if(doLayerTimeBoxes) {
284 for(
int layer = 1; layer != 5; ++layer) {
286 stringstream layerHistoName; layerHistoName << histoName <<
"_L" << layer;
287 (digiHistos[histoTag])[layerId.
rawId()] =
288 ibooker.
book1D(layerHistoName.str(),layerHistoName.str(), 3*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
294 if (
folder ==
"CathodPhotoPeaks" ) {
296 "/Sector" + sector.str() +
297 "/Station" + station.str() +
"/" +
folder);
298 (digiHistos[histoTag])[dtSL.
rawId()] = ibooker.
book1D(histoName,histoName,500,0,1000);
308 stringstream sector; sector << dtCh.
sector();
310 "/Sector" + sector.str() +
311 "/Station" + station.str());
314 string histoName = histoTag
316 +
"_St" + station.str()
317 +
"_Sec" + sector.str();
320 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
321 <<
"[DTDigiTask]: booking chamber histo:" 322 <<
" (tag: " << histoTag
323 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
324 "/Station" + station.str() +
325 "/Sector" + sector.str() << endl;
328 if (
folder ==
"Occupancies") {
330 const DTChamber* dtchamber = muonGeom->chamber(dtCh);
331 const std::vector<const DTSuperLayer*> dtSupLylist = dtchamber->
superLayers();
332 std::vector<const DTSuperLayer*>::const_iterator suly = dtSupLylist.begin();
333 std::vector<const DTSuperLayer*>::const_iterator sulyend = dtSupLylist.end();
339 while(suly != sulyend) {
340 const std::vector<const DTLayer*> dtLyList = (*suly)->layers();
341 std::vector<const DTLayer*>::const_iterator ly = dtLyList.begin();
342 std::vector<const DTLayer*>::const_iterator lyend = dtLyList.end();
343 stringstream superLayer; superLayer << (*suly)->id().superlayer();
346 nWires = muonGeom->layer((*ly)->id())->specificTopology().channels();
347 firstWire = muonGeom->layer((*ly)->id())->specificTopology().firstChannel();
348 stringstream layer; layer << (*ly)->id().layer();
349 string histoName_layer = histoName +
"_SL" + superLayer.str() +
"_L" + layer.str();
350 if(histoTag ==
"OccupancyAllHits_perL" 351 || histoTag ==
"OccupancyNoise_perL" 352 || histoTag ==
"OccupancyInTimeHits_perL")
353 (digiHistos[histoTag])[(*ly)->id().rawId()] = ibooker.
book1D(histoName_layer,histoName_layer,nWires,firstWire,nWires+firstWire);
355 if((nWires+firstWire) > nWires_max) nWires_max = (nWires+firstWire);
361 if(histoTag !=
"OccupancyAllHits_perL" 362 && histoTag !=
"OccupancyNoise_perL" 363 && histoTag !=
"OccupancyInTimeHits_perL"){
365 string histoTitle = histoName;
366 if(!readTTrigDB && histoTag ==
"OccupancyInTimeHits_perCh") {
368 int inTimeHitsLowerBoundCorr =
int(round(defaultTTrig)) - inTimeHitsLowerBound;
369 int inTimeHitsUpperBoundCorr =
int(round(defaultTTrig)) + defaultTmax + inTimeHitsUpperBound;
370 title <<
"Occ. digis in time [" << inTimeHitsLowerBoundCorr <<
", " 371 << inTimeHitsUpperBoundCorr <<
"] (TDC counts)";
372 histoTitle = title.str();
374 (digiHistos[histoTag])[dtCh.
rawId()] = ibooker.
book2D(histoName,histoTitle,nWires_max,1,nWires_max+1,12,0,12);
376 for(
int i=1;
i<=12;
i++) {
382 string label=
"SL1: L"+layer_name;
383 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
390 string label=
"SL2: L"+layer_name;
391 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(
i,label,2);
393 else if(
i>8 &&
i<13){
398 string label=
"SL3: L"+layer_name;
399 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(
i,label,2);
408 stringstream
wheel; wheel << wheelId;
412 string histoName = histoTag +
"_W" + wheel.str();
415 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
416 <<
"[DTDigiTask]: booking wheel histo:" << histoName
417 <<
" (tag: " << histoTag
418 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
"/" <<endl;
420 if(
folder ==
"Occupancies") {
422 string histoTitle =
"# of digis per chamber WHEEL: "+wheel.str();
423 (wheelHistos[histoTag])[wheelId] = ibooker.
book2D(histoName,histoTitle,12,1,13,4,1,5);
424 (wheelHistos[histoTag])[wheelId]->setBinLabel(1,
"MB1",2);
425 (wheelHistos[histoTag])[wheelId]->setBinLabel(2,
"MB2",2);
426 (wheelHistos[histoTag])[wheelId]->setBinLabel(3,
"MB3",2);
427 (wheelHistos[histoTag])[wheelId]->setBinLabel(4,
"MB4",2);
428 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"sector",1);
429 }
else if(
folder ==
"SynchNoise") {
431 if (histoTag==
"SyncNoiseEvents") {
432 string histoTitle =
"# of Syncronous-noise events WHEEL: "+wheel.str();
433 (wheelHistos[histoTag])[wheelId] = ibooker.
book2D(histoName,histoTitle,12,1,13,4,1,5);
434 (wheelHistos[histoTag])[wheelId]->setBinLabel(1,
"MB1",2);
435 (wheelHistos[histoTag])[wheelId]->setBinLabel(2,
"MB2",2);
436 (wheelHistos[histoTag])[wheelId]->setBinLabel(3,
"MB3",2);
437 (wheelHistos[histoTag])[wheelId]->setBinLabel(4,
"MB4",2);
438 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"sector",1);
439 }
else if (histoTag==
"SyncNoiseChambs") {
440 string histoTitle =
"# of Synchornous-noise chamb per evt. WHEEL: "+wheel.str();
441 (wheelHistos[histoTag])[wheelId] = ibooker.
book1D(histoName,histoTitle,50,0.5,50.5);
442 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"# of noisy chambs.",1);
443 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"# of evts.",2);
451 nEventMonitor->Fill(nevents);
452 if (nevents%1000 == 0) {
453 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Analyze #Run: " <<
event.id().run()
454 <<
" #Event: " <<
event.id().event() << endl;
461 event.getByToken(dtDigiToken_, dtdigis);
464 if (!isLocalRun)
event.getByToken(ltcDigiCollectionToken_, ltcdigis);
468 if(checkNoisyChannels) {
476 if(dtdigis->begin() == dtdigis->end()) {
477 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"Event " << nevents <<
" empty." << endl;
480 if (lookForSyncNoise || filterSyncNoise) {
483 for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); dtLayerId_It++) {
484 DTChamberId chId = ((*dtLayerId_It).first).chamberId();
485 if(hitMap.find(chId) == hitMap.end()) {
488 hitMap[chId] += (((*dtLayerId_It).second).
second - ((*dtLayerId_It).second).first);
494 map<DTChamberId,int>::const_iterator hitMapIt = hitMap.begin();
495 map<DTChamberId,int>::const_iterator hitMapEnd = hitMap.end();
499 for (; hitMapIt != hitMapEnd; ++hitMapIt) {
500 if((hitMapIt->second) > maxTDCHits) {
503 int wh = chId.
wheel();
505 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Synch noise in chamber: " << chId
506 <<
" with # digis: " << hitMapIt->second << endl;
508 if(chMap.find(wh) == chMap.end()) { chMap[wh] = 0; }
511 syncNoisyChambers.insert(chId);
513 wheelHistos[
"SyncNoiseEvents"][wh]->Fill(chId.
sector(),chId.
station());
519 map<int,int>::const_iterator chMapIt = chMap.begin();
520 map<int,int>::const_iterator chMapEnd = chMap.end();
521 for (; chMapIt != chMapEnd; ++chMapIt) {
522 wheelHistos[
"SyncNoiseChambs"][(*chMapIt).first]->Fill((*chMapIt).second);
528 if (syncNoisyChambers.size() != 0) {
529 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Synch Noise in event: " << nevents;
530 if(filterSyncNoise)
LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"\tnoisy time-boxes and occupancy will not be filled!" << endl;
536 if (syncNoisyChambers.size() > 3) {
537 time_t eventTime = time_t(event.
time().
value()>>32);
539 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask|DTSynchNoise")
540 <<
"[DTDigiTask] At least 4 Synch Noisy chambers in Run : " <<
event.id().run()
541 <<
" Lumi : " <<
event.id().luminosityBlock()
542 <<
" Event : " <<
event.id().event()
543 <<
" at time : " << ctime(&eventTime) << endl;
545 set<DTChamberId>::const_iterator chIt = syncNoisyChambers.begin();
546 set<DTChamberId>::const_iterator chEnd = syncNoisyChambers.end();
548 stringstream synchNoisyCh;
549 for (;chIt!=chEnd;++chIt) { synchNoisyCh <<
" " << (*chIt); }
550 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask|DTSynchNoise") <<
551 "[DTDigiTask] Chamber List :" << synchNoisyCh.str() << endl;
554 if (nevents%1000 == 0) {
555 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") << (syncNumTot*100./nevents) <<
"% sync noise events since the beginning \n" 556 << (syncNum*0.1) <<
"% sync noise events in the last 1000 events " << endl;
561 bool isSyncNoisy =
false;
564 for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It) {
567 if (filterSyncNoise) {
568 DTChamberId chId = ((*dtLayerId_It).first).chamberId();
569 if(syncNoisyChambers.find(chId) != syncNoisyChambers.end()) {
575 digiIt!=((*dtLayerId_It).second).
second; ++digiIt) {
577 bool isNoisy =
false;
578 bool isFEMasked =
false;
579 bool isTDCMasked =
false;
580 bool isTrigMask =
false;
583 if(checkNoisyChannels) {
584 const DTWireId wireId(((*dtLayerId_It).first), (*digiIt).wire());
585 statusMap->
cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
589 const DTSuperLayerId dtSLId = ((*dtLayerId_It).first).superlayerId();
590 uint32_t indexSL = dtSLId.
rawId();
592 uint32_t indexCh = dtChId.
rawId();
593 int layer_number=((*dtLayerId_It).first).layer();
599 tTrigMap->get( ((*dtLayerId_It).first).superlayerId(),
601 else tTrig = defaultTTrig;
603 int inTimeHitsLowerBoundCorr =
int(round(tTrig)) - inTimeHitsLowerBound;
604 int inTimeHitsUpperBoundCorr =
int(round(tTrig)) + tMax + inTimeHitsUpperBound;
606 float t0;
float t0RMS;
607 int tdcTime = (*digiIt).countsTDC();
610 const DTWireId dtWireId(((*dtLayerId_It).first), (*digiIt).wire());
613 tdcTime +=
int(round(t0));
620 if (( !isNoisy ) && (!isSyncNoisy)) {
622 histoTag =
"TimeBox" + triggerSource();
624 (digiHistos.find(histoTag)->second).
find(indexSL)->second->Fill(tdcTime);
626 (digiHistos.find(histoTag)->second).
find((*dtLayerId_It).first.rawId())->
second->Fill(tdcTime);
632 if (doAllHitsOccupancies) {
634 histoTag =
"OccupancyAllHits_perCh";
635 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
636 digiHistos[histoTag].find(indexCh);
645 mappedHisto->second->Fill((*digiIt).wire(),(layer_number+(superlayer_number-1)*4)-1);
649 histoTag =
"OccupancyAllHits";
650 map<int, MonitorElement*>::const_iterator histoPerWheel =
651 wheelHistos[histoTag].find(dtChId.
wheel());
653 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
656 if(doNoiseOccupancies) {
657 if (tdcTime < inTimeHitsLowerBoundCorr ) {
662 histoTag =
"OccupancyNoise_perCh";
663 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
664 digiHistos[histoTag].find(indexCh);
666 mappedHisto->second->Fill((*digiIt).wire(),
667 (layer_number+(superlayer_number-1)*4)-1);
671 histoTag =
"OccupancyNoise";
672 map<int, MonitorElement*>::const_iterator histoPerWheel =
673 wheelHistos[histoTag].find(dtChId.
wheel());
675 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
679 if(doInTimeOccupancies) {
680 if (tdcTime > inTimeHitsLowerBoundCorr && tdcTime < inTimeHitsUpperBoundCorr) {
684 histoTag =
"OccupancyInTimeHits_perCh";
685 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
686 digiHistos[histoTag].find(indexCh);
688 mappedHisto->second->Fill((*digiIt).wire(),
689 (layer_number+(superlayer_number-1)*4)-1);
692 histoTag =
"OccupancyInTimeHits";
693 map<int, MonitorElement*>::const_iterator histoPerWheel =
694 wheelHistos[histoTag].find(dtChId.
wheel());
696 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
704 syncNoisyChambers.clear();
714 for (std::vector<LTCDigi>::const_iterator ltc_it = ltcdigis->begin(); ltc_it != ltcdigis->end(); ltc_it++){
715 size_t otherTriggerSum=0;
716 for (
size_t i = 1;
i < 6;
i++)
717 otherTriggerSum +=
size_t((*ltc_it).HasTriggered(
i));
719 if ((*ltc_it).HasTriggered(0) && otherTriggerSum == 0)
720 l1ASource =
"DTonly";
721 else if (!(*ltc_it).HasTriggered(0))
723 else if ((*ltc_it).HasTriggered(0) && otherTriggerSum > 0)
724 l1ASource =
"DTalso";
734 if(tpMode)
return string(
"DT/10-TestPulses/");
735 return string(
"DT/01-Digi/");
749 int nWires_max = (digiHistos[histoTag])[dtCh.
rawId()] -> getNbinsX();
752 for(
int sl=1; sl<=3; sl++) {
753 for(
int ly=1; ly<=4; ly++) {
754 for(
int ch=1; ch<=nWires_max; ch++) {
756 int dduId = -1, rosId = -1, robId = -1, tdcId = -1, channelId = -1;
757 int realCh =
mapping->geometryToReadOut(dtCh.
wheel(),dtCh.
station(),dtCh.
sector(),sl,ly,ch,dduId,rosId,robId,tdcId,channelId);
762 int lybin = (4*sl - 4) + ly;
763 (digiHistos[histoTag])[dtCh.
rawId()] -> setBinContent(ch,lybin,-1.);
LuminosityBlockID id() const
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
void channelsMap(const DTChamberId &dtCh, std::string histoTag)
To map real channels.
DTChamberId chamberId() const
Return the corresponding ChamberId.
std::string topFolder() const
def setup(process, global_tag, zero_tesla=False)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
DTDigiTask(const edm::ParameterSet &ps)
Constructor.
uint32_t rawId() const
get the raw id
U second(std::pair< T, U > const &p)
const std::vector< const DTSuperLayer * > & superLayers() const
Return the superlayers in the chamber.
MonitorElement * book1D(Args &&...args)
virtual ~DTDigiTask()
Destructor.
int superlayer() const
Return the superlayer number (deprecated method name)
void setCurrentFolder(const std::string &fullpath)
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &setup) override
MonitorElement * book2D(Args &&...args)
void bookHistos(DQMStore::IBooker &ibooker, const DTSuperLayerId &dtSL, std::string folder, std::string histoTag)
Book the ME.
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
LuminosityBlockNumber_t luminosityBlock() const
std::vector< DTDigi >::const_iterator const_iterator
int cellStatus(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, bool &noiseFlag, bool &feMask, bool &tdcMask, bool &trigMask, bool &deadFlag, bool &nohvFlag) const
get content
void beginLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &context) override
To reset the MEs.
MonitorElement * bookFloat(Args &&...args)
int station() const
Return the station number.
int wheel() const
Return the wheel number.
std::string triggerSource()
get the L1A source
TimeValue_t value() const
edm::Timestamp time() const
void analyze(const edm::Event &e, const edm::EventSetup &c) override
Analyze.