33 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
34 <<
"[DTDataIntegrityTask]: Constructor" <<endl;
52 if (processingMode ==
"Online") {
54 }
else if(processingMode ==
"SM") {
56 }
else if (processingMode ==
"Offline") {
58 }
else if (processingMode ==
"HLT") {
62 <<
"[DTDataIntegrityTask]: processingMode :" << processingMode
63 <<
" invalid! Must be Online, SM, Offline or HLT !" << endl;
71 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
72 <<
"[DTDataIntegrityTask]: Destructor. Analyzed "<<
neventsDDU <<
" events"<<endl;
73 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
74 <<
"[DTDataIntegrityTask]: postEndJob called!" <<endl;
88 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
"[DTDataIntegrityTask]: postBeginJob" <<endl;
90 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
"[DTDataIntegrityTask] Get DQMStore service" << endl;
96 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
97 <<
" FEDS: " << FEDIDmin <<
" to " << FEDIDMax <<
" in the RO" << endl;
103 for(
int fed = FEDIDmin; fed <=
FEDIDMax; ++fed) {
111 for(
int ros = 1; ros <= 12; ++ros) {
126 int nFED = (fedMax - fedMin)+1;
128 hFEDEntry = ibooker.
book1D(
"FEDEntries",
"# entries per DT FED",nFED,fedMin,fedMax+1);
129 hFEDFatal = ibooker.
book1D(
"FEDFatal",
"# fatal errors DT FED",nFED,fedMin,fedMax+1);
130 hFEDNonFatal = ibooker.
book1D(
"FEDNonFatal",
"# NON fatal errors DT FED",nFED,fedMin,fedMax+1);
134 hTTSSummary = ibooker.
book2D(
"TTSSummary",
"Summary Status TTS",nFED,fedMin,fedMax+1,9,1,10);
149 nFED,fedMin,fedMax+1, 8, 1, 9);
166 stringstream dduID_s; dduID_s << code.
getDDU();
167 stringstream rosID_s; rosID_s << code.
getROS();
168 stringstream robID_s; robID_s << code.
getROB();
169 int wheel = (code.
getDDUID() - 770)%5 - 2;
170 stringstream wheel_s; wheel_s << wheel;
172 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
173 <<
" Booking histos for FED: " << code.
getDDU() <<
" ROS: " << code.
getROS()
174 <<
" ROB: " << code.
getROB() <<
" folder: " << folder << endl;
182 if (folder ==
"DDU") {
186 histoType =
"EventLenght";
187 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
188 histoTitle =
"Event Lenght (Bytes) FED " + dduID_s.str();
193 histoType =
"ROSStatus";
194 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
225 histoType =
"FEDAvgEvLenghtvsLumi";
226 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
227 histoTitle =
"Avg Event Lenght (Bytes) vs LumiSec FED " + dduID_s.str();
230 histoType =
"TTSValues";
231 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
243 histoType =
"EventType";
244 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
250 histoType =
"ROSList";
251 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
252 histoTitle =
"# of ROS in the FED payload (FED" + dduID_s.str() +
")";
255 histoType =
"FIFOStatus";
256 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
271 histoName =
"FED" + dduID_s.str() +
"_BXID";
272 histoTitle =
"Distrib. BX ID (FED" + dduID_s.str() +
")";
278 if ( folder ==
"ROS_S" ) {
281 histoType =
"ROSSummary";
282 histoName =
"FED" + dduID_s.str() +
"_ROSSummary";
283 string histoTitle =
"Summary Wheel" + wheel_s.str() +
" (FED " + dduID_s.str() +
")";
324 if ( folder ==
"ROS" ) {
328 histoType =
"ROSError";
329 histoName =
"FED" + dduID_s.str() +
"_" + folder + rosID_s.str() +
"_ROSError";
330 histoTitle = histoName +
" (ROBID error summary)";
387 histoType =
"ROSEventLenght";
388 histoName =
"FED" + dduID_s.str() +
"_" + folder + rosID_s.str() +
"_ROSEventLenght";
389 histoTitle =
"Event Lenght (Bytes) FED " + dduID_s.str() +
" ROS " + rosID_s.str();
392 histoType =
"ROSAvgEventLenghtvsLumi";
393 histoName =
"FED" + dduID_s.str() +
"_" + folder + rosID_s.str() + histoType;
394 histoTitle =
"Event Lenght (Bytes) FED " + dduID_s.str() +
" ROS " + rosID_s.str();
397 histoType =
"TDCError";
398 histoName =
"FED" + dduID_s.str() +
"_" + folder + rosID_s.str() +
"_TDCError";
399 histoTitle = histoName +
" (ROBID error summary)";
454 histoType =
"ROB_mean";
455 histoName =
"FED" + dduID_s.str() +
"_" +
"ROS" + rosID_s.str() +
"_ROB_mean";
457 names.insert (pair<std::string,std::string> (histoType,
string(fullName)));
465 if ( folder ==
"SC" ) {
470 histoType =
"SCSizeVsROSSize";
471 histoName =
"FED" + dduID_s.str() +
"_SCSizeVsROSSize";
472 histoTitle =
"SC size - ROS size vs SC (FED " + dduID_s.str() +
")";
493 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
494 <<
"[DTDataIntegrityTask]: " <<
neventsROS25 <<
" events analyzed by processROS25" << endl;
507 if ( (
mode<=2) && (!ROSError) ) {
508 LogError(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
509 "Trying to access non existing ME at ROSID " << code.
getROSID() <<
522 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
" TXP error en ROS "
533 for (vector<DTROSErrorWord>::const_iterator error_it = data.
getROSErrors().begin();
536 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
" Error in ROS " << code.
getROS()
537 <<
" ROB Id " << (*error_it).robID()
538 <<
" Error type " << (*error_it).errorType() << endl;
541 ROSSummary->
Fill((*error_it).errorType(), code.
getROS());
542 if((*error_it).errorType() <= 11) {
548 if ((*error_it).robID() != 31) {
549 ROSError->
Fill((*error_it).errorType(),(*error_it).robID());
551 else if ((*error_it).errorType() == 4) {
552 vector<int> channelBins;
554 vector<int>::const_iterator channelIt = channelBins.begin();
555 vector<int>::const_iterator channelEnd = channelBins.end();
556 for(;channelIt!=channelEnd;++channelIt) {
557 ROSError->
Fill(4,(*channelIt));
564 int ROSDebug_BunchNumber = -1;
566 for (vector<DTROSDebugWord>::const_iterator debug_it = data.
getROSDebugs().begin();
569 int debugROSSummary = 0;
570 int debugROSError = 0;
571 vector<int> debugBins;
572 bool hasEvIdMis =
false;
573 vector<int> evIdMisBins;
575 if ((*debug_it).debugType() == 0 ) {
576 ROSDebug_BunchNumber = (*debug_it).debugMessage();
577 }
else if ((*debug_it).debugType() == 1 ) {
580 }
else if ((*debug_it).debugType() == 2 ) {
583 }
else if ((*debug_it).debugType() == 3) {
584 if ((*debug_it).dontRead()){
585 debugROSSummary = 11;
587 if (
mode <= 2)
channelsInCEROS((*debug_it).cerosIdCerosStatus(),(*debug_it).dontRead(),debugBins);
588 }
if ((*debug_it).evIdMis()){
590 if (
mode <= 2)
channelsInCEROS((*debug_it).cerosIdCerosStatus(),(*debug_it).evIdMis(),evIdMisBins);
592 }
else if ((*debug_it).debugType() == 4 &&
593 (*debug_it).cerosIdRosStatus()){
594 debugROSSummary = 13;
599 if (debugROSSummary) {
600 ROSSummary->
Fill(debugROSSummary,code.
getROS());
602 vector<int>::const_iterator channelIt = debugBins.begin();
603 vector<int>::const_iterator channelEnd = debugBins.end();
604 for (;channelIt!=channelEnd;++channelIt) {
605 ROSError->
Fill(debugROSError,(*channelIt));
613 vector<int>::const_iterator channelIt = evIdMisBins.begin();
614 vector<int>::const_iterator channelEnd = evIdMisBins.end();
615 for (;channelIt!=channelEnd;++channelIt) {
616 ROSError->
Fill(9,(*channelIt));
625 for (vector<DTROBHeader>::const_iterator rob_it = data.
getROBHeaders().begin();
628 code.
setROB((*rob_it).first);
633 if (robheader.
bunchID() != ROSDebug_BunchNumber) {
646 for (vector<DTROBTrailerWord>::const_iterator robt_it = data.
getROBTrailers().begin();
648 float wCount = (*robt_it).wordCount()<100. ? (*robt_it).wordCount() : 99.9;
656 if(rosEventLenght > 1600) rosEventLenght = 1600;
662 for (vector<DTTDCData>::const_iterator tdc_it = data.
getTDCData().begin();
663 tdc_it != data.
getTDCData().end(); tdc_it++) {
667 if ( tdcDatum.
PC() !=0) {
668 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
669 <<
" PC error in ROS " << code.
getROS() <<
" TDC " << (*tdc_it).first << endl;
676 if(
mode <= 2) ROSError->
Fill(6,(*tdc_it).first);
681 for (vector<DTTDCError>::const_iterator tdc_it = data.
getTDCError().begin();
684 code.
setROB((*tdc_it).first);
686 int tdcError_ROSSummary = 0;
687 int tdcError_ROSError = 0;
688 int tdcError_TDCHisto = 0;
690 if(((*tdc_it).second).tdcError() & 0x4000 ) {
691 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
693 <<
" Internal fatal Error 4000 in TDC " << (*tdc_it).first << endl;
695 tdcError_ROSSummary = 14;
696 tdcError_ROSError = 11;
697 tdcError_TDCHisto = 0;
699 }
else if ( ((*tdc_it).second).tdcError() & 0x0249 ) {
700 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
702 <<
" TDC FIFO overflow in TDC " << (*tdc_it).first << endl;
704 tdcError_ROSSummary = 15;
705 tdcError_ROSError = 12;
706 tdcError_TDCHisto = 1;
708 }
else if ( ((*tdc_it).second).tdcError() & 0x0492 ) {
709 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
711 <<
" TDC L1 buffer overflow in TDC " << (*tdc_it).first << endl;
713 tdcError_ROSSummary = 16;
714 tdcError_ROSError = 13;
715 tdcError_TDCHisto = 2;
717 }
else if ( ((*tdc_it).second).tdcError() & 0x2000 ) {
718 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
720 <<
" TDC L1A FIFO overflow in TDC " << (*tdc_it).first << endl;
722 tdcError_ROSSummary = 17;
723 tdcError_ROSError = 14;
724 tdcError_TDCHisto = 3;
726 }
else if ( ((*tdc_it).second).tdcError() & 0x0924 ) {
727 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
729 <<
" TDC hit error in TDC " << (*tdc_it).first << endl;
731 tdcError_ROSSummary = 18;
732 tdcError_ROSError = 15;
733 tdcError_TDCHisto = 4;
735 }
else if ( ((*tdc_it).second).tdcError() & 0x1000 ) {
736 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
738 <<
" TDC hit rejected in TDC " << (*tdc_it).first << endl;
740 tdcError_ROSSummary = 19;
741 tdcError_ROSError = 16;
742 tdcError_TDCHisto = 5;
745 LogWarning(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
746 <<
" TDC error code not known " << ((*tdc_it).second).tdcError() << endl;
749 ROSSummary->
Fill(tdcError_ROSSummary,code.
getROS());
751 if(tdcError_ROSSummary <= 15) {
756 ROSError->
Fill(tdcError_ROSError,(*tdc_it).first);
758 rosHistos[
"TDCError"][code.
getROSID()]->Fill(tdcError_TDCHisto+6*((*tdc_it).second).tdcID(),(*tdc_it).first);
775 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
776 <<
"[DTDataIntegrityTask]: " <<
neventsDDU <<
" events analyzed by processFED" << endl;
789 if(!header.
check()) {
795 if(!trailer.
check()) {
813 int ttsCodeValue = -1;
814 int ttsSummaryBin = -1;
833 bool knownOrigin =
false;
850 if(!knownOrigin) ttsSummaryBin = 9;
856 bool knownOrigin =
false;
865 if(!knownOrigin) ttsSummaryBin = 9;
881 LogError(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
882 <<
"[DTDataIntegrityTask] DDU control: wrong TTS value "<<trailer.
ttsBits()<<endl;
887 if(ttsSummaryBin != -1) {
900 int rosList = secondWord.
rosList();
901 set<int> rosPositions;
902 for(
int i=0;
i<12;
i++) {
904 rosPositions.insert(
i);
912 for (vector<DTDDUFirstStatusWord>::const_iterator fsw_it = data.
getFirstStatusWord().begin();
916 hROSStatus->
Fill(0,channel,(*fsw_it).channelEnabled());
917 hROSStatus->
Fill(1,channel,(*fsw_it).timeout());
918 hROSStatus->
Fill(2,channel,(*fsw_it).eventTrailerLost());
919 hROSStatus->
Fill(3,channel,(*fsw_it).opticalFiberSignalLost());
920 hROSStatus->
Fill(4,channel,(*fsw_it).tlkPropagationError());
921 hROSStatus->
Fill(5,channel,(*fsw_it).tlkPatternError());
922 hROSStatus->
Fill(6,channel,(*fsw_it).tlkSignalLost());
923 hROSStatus->
Fill(7,channel,(*fsw_it).errorFromROS());
926 if((*fsw_it).channelEnabled() == 1 &&
927 rosPositions.find(channel) == rosPositions.end()) {
928 if(
mode <= 2) hROSStatus->
Fill(9,channel,1);
941 if((rosBXIds.size() > 1 || rosBXIds.find(header.
bxID()) == rosBXIds.end()) && rosBXIds.size() != 0) {
942 for(vector<DTROS25Data>::const_iterator rosControlData = rosData.begin();
943 rosControlData != rosData.end(); ++rosControlData) {
944 for (vector<DTROSDebugWord>::const_iterator debug_it = (*rosControlData).getROSDebugs().begin();
945 debug_it != (*rosControlData).getROSDebugs().end(); debug_it++) {
946 if ((*debug_it).debugType() == 0 && (*debug_it).debugMessage() != header.
bxID()) {
947 int ros = (*rosControlData).getROSID();
949 if(
mode <= 2) hROSStatus->
Fill(11,ros-1);
961 LogWarning(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
962 <<
"ERROR: FED " << ddu <<
" BX ID different from other feds: " << header.
bxID() << endl;
971 if((rosL1AIds.size() > 1 || rosL1AIds.find(header.
lvl1ID()-1) == rosL1AIds.end()) && rosL1AIds.size() != 0) {
973 for (vector<DTROS25Data>::const_iterator rosControlData = rosData.begin();
974 rosControlData != rosData.end(); rosControlData++) {
975 int ROSHeader_TTCCount = ((*rosControlData).getROSHeader().TTCEventCounter() + 1) % 0x1000000;
976 if( ROSHeader_TTCCount != header.
lvl1ID() ) {
977 int ros = (*rosControlData).getROSID();
978 if(
mode <= 2) hROSStatus->
Fill(10,ros-1);
987 int fedEvtLenght = trailer.
lenght()*8;
1003 int fifoFull = secondWord.
fifoFull();
1007 for(
int i=0;
i<3;
i++){
1008 if(inputFifoFull & 0x1){
1009 hFIFOStatus->
Fill(
i,0);
1011 if(inputFifoAlmostFull & 0x1){
1012 hFIFOStatus->
Fill(
i,1);
1015 hFIFOStatus->
Fill(3+
i,0);
1017 if(fifoAlmostFull & 0x1){
1018 hFIFOStatus->
Fill(3+
i,1);
1020 if(!(inputFifoFull & 0x1) && !(inputFifoAlmostFull & 0x1)){
1021 hFIFOStatus->
Fill(
i,2);
1023 if(!(fifoFull & 0x1) && !(fifoAlmostFull & 0x1)){
1024 hFIFOStatus->
Fill(3+
i,2);
1026 inputFifoFull >>= 1;
1027 inputFifoAlmostFull >>= 1;
1029 fifoAlmostFull >>= 1;
1033 hFIFOStatus->
Fill(6,0);
1035 if(outputFifoAlmostFull){
1036 hFIFOStatus->
Fill(6,1);
1038 if(!outputFifoFull && !outputFifoAlmostFull){
1039 hFIFOStatus->
Fill(6,2);
1084 if (!isFEDIntegrity)
1085 folder += (
mode==1) ?
"_SM/" : (
mode==3) ?
"_EvF/" :
"/";
1092 for (
int iCh=0; iCh<6;++iCh) {
1093 if ((chMask >> iCh) & 0x1){
1094 channels.push_back(cerosId*6+iCh);
1101 for (
int iCeros=0; iCeros<5;++iCeros) {
1102 if ((cerosMask >> iCeros) & 0x1){
1103 for (
int iCh=0; iCh<6;++iCh) {
1104 channels.push_back(iCeros*6+iCh);
1121 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator dduIt =
dduTimeHistos.begin();
1122 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator dduEnd =
dduTimeHistos.end();
1123 for(; dduIt!=dduEnd; ++dduIt) {
1124 map<int, DTTimeEvolutionHisto*>::iterator histoIt = dduIt->second.begin();
1125 map<int, DTTimeEvolutionHisto*>::iterator histoEnd = dduIt->second.end();
1126 for(; histoIt!=histoEnd; ++histoIt) {
1127 histoIt->second->updateTimeSlot(lumiBlock,
nEventsLS);
1131 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator rosIt =
rosTimeHistos.begin();
1132 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator rosEnd =
rosTimeHistos.end();
1133 for(; rosIt!=rosEnd; ++rosIt) {
1134 map<int, DTTimeEvolutionHisto*>::iterator histoIt = rosIt->second.begin();
1135 map<int, DTTimeEvolutionHisto*>::iterator histoEnd = rosIt->second.end();
1136 for(; histoIt!=histoEnd; ++histoIt) {
1137 histoIt->second->updateTimeSlot(lumiBlock,
nEventsLS);
1150 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
"[DTDataIntegrityTask]: preProcessEvent" <<endl;
1153 (*rosBxIds).second.clear();
1159 (*rosL1AIds).second.clear();
1172 std::vector<DTROS25Data> ros25Data;
1175 for(
unsigned int i=0;
i<dduProduct->size(); ++
i)
1177 dduData = dduProduct->at(
i);
1178 ros25Data = ros25Product->at(
i);
1183 for(
unsigned int j=0;
j < ros25Data.size(); ++
j) {
std::map< int, std::set< int > > rosBxIdsPerFED
std::multimap< std::string, std::string > names
std::map< int, std::set< int > > rosL1AIdsPerFED
int EventWordCount() const
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
const std::vector< DTROBHeader > & getROBHeaders() const
std::map< std::string, std::map< int, MonitorElement * > > dduHistos
const std::vector< DTTDCData > & getTDCData() const
void processFED(DTDDUData &dduData, const std::vector< DTROS25Data > &rosData, int dduID)
int outputFifoFull() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::string fedIntegrityFolder
MonitorElement * hFEDNonFatal
const DTLocalTriggerSectorCollectorHeaderWord & getSCPrivHeader() const
int l1AFifoOccupancy() const
bool eventHasErrors() const
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
void bookHistos(DQMStore::IBooker &, const int fedMin, const int fedMax)
std::map< std::string, std::map< int, DTTimeEvolutionHisto * > > dduTimeHistos
void channelsInROS(int cerosMask, std::vector< int > &channels)
MonitorElement * hFEDFatal
LuminosityBlockNumber_t luminosityBlock() const
edm::EDGetTokenT< DTROS25Collection > ros25Token
const DTLocalTriggerTrailerWord & getSCTrailer() const
int warningROSPAF() const
DTDataIntegrityTask(const edm::ParameterSet &ps)
void processROS25(DTROS25Data &data, int dduID, int ros)
const std::vector< DTROSDebugWord > & getROSDebugs() const
const std::vector< DTDDUFirstStatusWord > & getFirstStatusWord() const
const DTROSTrailerWord & getROSTrailer() const
const DTROSHeaderWord & getROSHeader() const
void beginLuminosityBlock(const edm::LuminosityBlock &ls, const edm::EventSetup &es) override
void analyze(const edm::Event &e, const edm::EventSetup &c) override
MonitorElement * book1D(Args &&...args)
void endLuminosityBlock(const edm::LuminosityBlock &ls, const edm::EventSetup &es) override
std::map< std::string, std::map< int, MonitorElement * > > rosSHistos
const FEDTrailer & getDDUTrailer() const
MonitorElement * nEventMonitor
int inputFifoAlmostFull() const
int ttsBits()
Current value of the Trigger Throttling System bitsAQ).
int inputFifoFull() const
std::string topFolder(bool isFEDIntegrity) const
const FEDHeader & getDDUHeader() const
Getters.
void setCurrentFolder(const std::string &fullpath)
MonitorElement * hFEDEntry
MonitorElement * book2D(Args &&...args)
void setROB(const int &ID)
std::map< std::string, std::map< int, MonitorElement * > > rosHistos
int lenght()
The length of the event fragment counted in 64-bit words including header and trailer.
void setROS(const int &ID)
const std::vector< DTROBTrailerWord > & getROBTrailers() const
void channelsInCEROS(int cerosId, int chMask, std::vector< int > &channels)
int outputFifoAlmostFull() const
void setDDU(const int &ID)
need to reset the bits before setting
char data[epos_bytes_allocation]
void bookHistosROS25(DQMStore::IBooker &, DTROChainCoding code)
const std::vector< DTROSErrorWord > & getROSErrors() const
MonitorElement * hTTSSummary
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
std::map< std::string, std::map< int, DTTimeEvolutionHisto * > > rosTimeHistos
void fedNonFatal(int dduID)
MonitorElement * bookFloat(Args &&...args)
int fifoAlmostFull() const
const std::vector< DTTDCError > & getTDCError() const
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
const DTDDUSecondStatusWord & getSecondStatusWord() const
int outOfSynchROSError() const
MonitorElement * hCorruptionSummary
virtual ~DTDataIntegrityTask()
edm::EDGetTokenT< DTDDUCollection > dduToken