33 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
34 <<
"[DTDataIntegrityTask]: Constructor" <<endl;
55 if (processingMode ==
"Online") {
57 }
else if(processingMode ==
"SM") {
59 }
else if (processingMode ==
"Offline") {
61 }
else if (processingMode ==
"HLT") {
65 <<
"[DTDataIntegrityTask]: processingMode :" << processingMode
66 <<
" invalid! Must be Online, SM, Offline or HLT !" << endl;
73 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
74 <<
"[DTDataIntegrityTask]: Destructor. Analyzed "<<
neventsDDU <<
" events"<<endl;
75 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
76 <<
"[DTDataIntegrityTask]: postEndJob called!" <<endl;
90 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
"[DTDataIntegrityTask]: postBeginJob" <<endl;
92 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
"[DTDataIntegrityTask] Get DQMStore service" << endl;
96 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
112 for(
int ros = 1; ros <= 12; ++ros) {
128 int nFED = (fedMax - fedMin)+1;
130 hFEDEntry = ibooker.
book1D(
"FEDEntries",
"# entries per DT FED",nFED,fedMin,fedMax+1);
131 hFEDFatal = ibooker.
book1D(
"FEDFatal",
"# fatal errors DT FED",nFED,fedMin,fedMax+1);
132 hFEDNonFatal = ibooker.
book1D(
"FEDNonFatal",
"# NON fatal errors DT FED",nFED,fedMin,fedMax+1);
137 hTTSSummary = ibooker.
book2D(
"TTSSummary",
"Summary Status TTS",nFED,fedMin,fedMax+1,9,1,10);
152 nFED,fedMin,fedMax+1, 8, 1, 9);
169 stringstream dduID_s; dduID_s << code.
getDDU();
170 stringstream rosID_s; rosID_s << code.
getROS();
171 stringstream robID_s; robID_s << code.
getROB();
173 stringstream wheel_s; wheel_s <<
wheel;
175 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
176 <<
" Booking histos for FED: " << code.
getDDU() <<
" ROS: " << code.
getROS()
177 <<
" ROB: " << code.
getROB() <<
" folder: " <<
folder << endl;
189 histoType =
"EventLenght";
190 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
191 histoTitle =
"Event Lenght (Bytes) FED " + dduID_s.str();
196 histoType =
"ROSStatus";
197 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
228 histoType =
"FEDAvgEvLenghtvsLumi";
229 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
230 histoTitle =
"Avg Event Lenght (Bytes) vs LumiSec FED " + dduID_s.str();
233 histoType =
"TTSValues";
234 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
246 histoType =
"EventType";
247 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
253 histoType =
"ROSList";
254 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
255 histoTitle =
"# of ROS in the FED payload (FED" + dduID_s.str() +
")";
258 histoType =
"FIFOStatus";
259 histoName =
"FED" + dduID_s.str() +
"_" + histoType;
274 histoName =
"FED" + dduID_s.str() +
"_BXID";
275 histoTitle =
"Distrib. BX ID (FED" + dduID_s.str() +
")";
281 if (
folder ==
"ROS_S" ) {
286 histoType =
"ROSSummary";
287 histoName =
"FED" + dduID_s.str() +
"_ROSSummary";
288 string histoTitle =
"Summary Wheel" + wheel_s.str() +
" (FED " + dduID_s.str() +
")";
334 histoType =
"ROSError";
335 histoName =
"FED" + dduID_s.str() +
"_" +
folder + rosID_s.str() +
"_ROSError";
336 histoTitle = histoName +
" (ROBID error summary)";
393 histoType =
"ROSEventLenght";
394 histoName =
"FED" + dduID_s.str() +
"_" +
folder + rosID_s.str() +
"_ROSEventLenght";
395 histoTitle =
"Event Lenght (Bytes) FED " + dduID_s.str() +
" ROS " + rosID_s.str();
398 histoType =
"ROSAvgEventLenghtvsLumi";
399 histoName =
"FED" + dduID_s.str() +
"_" +
folder + rosID_s.str() + histoType;
400 histoTitle =
"Event Lenght (Bytes) FED " + dduID_s.str() +
" ROS " + rosID_s.str();
403 histoType =
"TDCError";
404 histoName =
"FED" + dduID_s.str() +
"_" +
folder + rosID_s.str() +
"_TDCError";
405 histoTitle = histoName +
" (ROBID error summary)";
460 histoType =
"ROB_mean";
461 histoName =
"FED" + dduID_s.str() +
"_" +
"ROS" + rosID_s.str() +
"_ROB_mean";
462 string fullName =
topFolder(
false) +
"FED" + dduID_s.str() +
"/" +
folder + rosID_s.str()+
"/" + histoName;
463 names.insert (pair<std::string,std::string> (histoType,
string(fullName)));
476 histoType =
"SCSizeVsROSSize";
477 histoName =
"FED" + dduID_s.str() +
"_SCSizeVsROSSize";
478 histoTitle =
"SC size vs SC (FED " + dduID_s.str() +
")";
499 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
500 <<
"[DTDataIntegrityTask]: " <<
neventsROS25 <<
" events analyzed by processROS25" << endl;
515 if ( (
mode<=2) && (!ROSError) ) {
516 LogError(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
517 "Trying to access non existing ME at ROSID " << code.
getROSID() <<
530 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
" TXP error en ROS " 541 for (vector<DTROSErrorWord>::const_iterator error_it = data.
getROSErrors().begin();
544 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
" Error in ROS " << code.
getROS()
545 <<
" ROB Id " << (*error_it).robID()
546 <<
" Error type " << (*error_it).errorType() << endl;
549 ROSSummary->
Fill((*error_it).errorType(), code.
getROS());
550 if((*error_it).errorType() <= 11) {
556 if ((*error_it).robID() != 31) {
557 ROSError->
Fill((*error_it).errorType(),(*error_it).robID());
559 else if ((*error_it).errorType() == 4) {
560 vector<int> channelBins;
562 vector<int>::const_iterator channelIt = channelBins.begin();
563 vector<int>::const_iterator channelEnd = channelBins.end();
564 for(;channelIt!=channelEnd;++channelIt) {
565 ROSError->
Fill(4,(*channelIt));
572 int ROSDebug_BunchNumber = -1;
574 for (vector<DTROSDebugWord>::const_iterator debug_it = data.
getROSDebugs().begin();
577 int debugROSSummary = 0;
578 int debugROSError = 0;
579 vector<int> debugBins;
580 bool hasEvIdMis =
false;
581 vector<int> evIdMisBins;
583 if ((*debug_it).debugType() == 0 ) {
584 ROSDebug_BunchNumber = (*debug_it).debugMessage();
585 }
else if ((*debug_it).debugType() == 1 ) {
588 }
else if ((*debug_it).debugType() == 2 ) {
591 }
else if ((*debug_it).debugType() == 3) {
592 if ((*debug_it).dontRead()){
593 debugROSSummary = 11;
595 if (
mode <= 2)
channelsInCEROS((*debug_it).cerosIdCerosStatus(),(*debug_it).dontRead(),debugBins);
596 }
if ((*debug_it).evIdMis()){
598 if (
mode <= 2)
channelsInCEROS((*debug_it).cerosIdCerosStatus(),(*debug_it).evIdMis(),evIdMisBins);
600 }
else if ((*debug_it).debugType() == 4 &&
601 (*debug_it).cerosIdRosStatus()){
602 debugROSSummary = 13;
607 if (debugROSSummary) {
608 ROSSummary->
Fill(debugROSSummary,code.
getROS());
610 vector<int>::const_iterator channelIt = debugBins.begin();
611 vector<int>::const_iterator channelEnd = debugBins.end();
612 for (;channelIt!=channelEnd;++channelIt) {
613 ROSError->
Fill(debugROSError,(*channelIt));
621 vector<int>::const_iterator channelIt = evIdMisBins.begin();
622 vector<int>::const_iterator channelEnd = evIdMisBins.end();
623 for (;channelIt!=channelEnd;++channelIt) {
624 ROSError->
Fill(9,(*channelIt));
633 for (vector<DTROBHeader>::const_iterator rob_it = data.
getROBHeaders().begin();
636 code.
setROB((*rob_it).first);
641 if (robheader.
bunchID() != ROSDebug_BunchNumber) {
654 for (vector<DTROBTrailerWord>::const_iterator robt_it = data.
getROBTrailers().begin();
656 float wCount = (*robt_it).wordCount()<100. ? (*robt_it).wordCount() : 99.9;
664 if(rosEventLenght > 1600) rosEventLenght = 1600;
670 for (vector<DTTDCData>::const_iterator tdc_it = data.
getTDCData().begin();
671 tdc_it != data.
getTDCData().end(); tdc_it++) {
675 if ( tdcDatum.
PC() !=0) {
676 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
677 <<
" PC error in ROS " << code.
getROS() <<
" TDC " << (*tdc_it).first << endl;
684 if(
mode <= 2) ROSError->
Fill(6,(*tdc_it).first);
689 for (vector<DTTDCError>::const_iterator tdc_it = data.
getTDCError().begin();
692 code.
setROB((*tdc_it).first);
694 int tdcError_ROSSummary = 0;
695 int tdcError_ROSError = 0;
696 int tdcError_TDCHisto = 0;
698 if(((*tdc_it).second).tdcError() & 0x4000 ) {
699 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
701 <<
" Internal fatal Error 4000 in TDC " << (*tdc_it).first << endl;
703 tdcError_ROSSummary = 14;
704 tdcError_ROSError = 11;
705 tdcError_TDCHisto = 0;
707 }
else if ( ((*tdc_it).second).tdcError() & 0x0249 ) {
708 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
710 <<
" TDC FIFO overflow in TDC " << (*tdc_it).first << endl;
712 tdcError_ROSSummary = 15;
713 tdcError_ROSError = 12;
714 tdcError_TDCHisto = 1;
716 }
else if ( ((*tdc_it).second).tdcError() & 0x0492 ) {
717 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
719 <<
" TDC L1 buffer overflow in TDC " << (*tdc_it).first << endl;
721 tdcError_ROSSummary = 16;
722 tdcError_ROSError = 13;
723 tdcError_TDCHisto = 2;
725 }
else if ( ((*tdc_it).second).tdcError() & 0x2000 ) {
726 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
728 <<
" TDC L1A FIFO overflow in TDC " << (*tdc_it).first << endl;
730 tdcError_ROSSummary = 17;
731 tdcError_ROSError = 14;
732 tdcError_TDCHisto = 3;
734 }
else if ( ((*tdc_it).second).tdcError() & 0x0924 ) {
735 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
737 <<
" TDC hit error in TDC " << (*tdc_it).first << endl;
739 tdcError_ROSSummary = 18;
740 tdcError_ROSError = 15;
741 tdcError_TDCHisto = 4;
743 }
else if ( ((*tdc_it).second).tdcError() & 0x1000 ) {
744 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
746 <<
" TDC hit rejected in TDC " << (*tdc_it).first << endl;
748 tdcError_ROSSummary = 19;
749 tdcError_ROSError = 16;
750 tdcError_TDCHisto = 5;
753 LogWarning(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
754 <<
" TDC error code not known " << ((*tdc_it).second).tdcError() << endl;
757 ROSSummary->
Fill(tdcError_ROSSummary,code.
getROS());
759 if(tdcError_ROSSummary <= 15) {
764 ROSError->
Fill(tdcError_ROSError,(*tdc_it).first);
766 rosHistos[
"TDCError"][code.
getROSID()]->Fill(tdcError_TDCHisto+6*((*tdc_it).second).tdcID(),(*tdc_it).first);
783 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
784 <<
"[DTDataIntegrityTask]: " <<
neventsDDU <<
" events analyzed by processFED" << endl;
797 if(!header.
check()) {
803 if(!trailer.
check()) {
823 int ttsCodeValue = -1;
824 int ttsSummaryBin = -1;
843 bool knownOrigin =
false;
860 if(!knownOrigin) ttsSummaryBin = 9;
866 bool knownOrigin =
false;
875 if(!knownOrigin) ttsSummaryBin = 9;
891 LogError(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
892 <<
"[DTDataIntegrityTask] DDU control: wrong TTS value "<<trailer.
ttsBits()<<endl;
897 if(ttsSummaryBin != -1) {
910 int rosList = secondWord.
rosList();
911 set<int> rosPositions;
912 for(
int i=0;
i<12;
i++) {
914 rosPositions.insert(
i);
922 for (vector<DTDDUFirstStatusWord>::const_iterator fsw_it = data.
getFirstStatusWord().begin();
926 hROSStatus->
Fill(0,channel,(*fsw_it).channelEnabled());
927 hROSStatus->
Fill(1,channel,(*fsw_it).timeout());
928 hROSStatus->
Fill(2,channel,(*fsw_it).eventTrailerLost());
929 hROSStatus->
Fill(3,channel,(*fsw_it).opticalFiberSignalLost());
930 hROSStatus->
Fill(4,channel,(*fsw_it).tlkPropagationError());
931 hROSStatus->
Fill(5,channel,(*fsw_it).tlkPatternError());
932 hROSStatus->
Fill(6,channel,(*fsw_it).tlkSignalLost());
933 hROSStatus->
Fill(7,channel,(*fsw_it).errorFromROS());
936 if((*fsw_it).channelEnabled() == 1 &&
937 rosPositions.find(channel) == rosPositions.end()) {
938 if(
mode <= 2) hROSStatus->
Fill(9,channel,1);
951 if((rosBXIds.size() > 1 || rosBXIds.find(header.
bxID()) == rosBXIds.end()) && rosBXIds.size() != 0) {
952 for(vector<DTROS25Data>::const_iterator rosControlData = rosData.begin();
953 rosControlData != rosData.end(); ++rosControlData) {
954 for (vector<DTROSDebugWord>::const_iterator debug_it = (*rosControlData).getROSDebugs().begin();
955 debug_it != (*rosControlData).getROSDebugs().end(); debug_it++) {
956 if ((*debug_it).debugType() == 0 && (*debug_it).debugMessage() != header.
bxID()) {
957 int ros = (*rosControlData).getROSID();
959 if(
mode <= 2) hROSStatus->
Fill(11,ros-1);
971 LogWarning(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask")
972 <<
"ERROR: FED " << ddu <<
" BX ID different from other feds: " << header.
bxID() << endl;
981 if((rosL1AIds.size() > 1 || rosL1AIds.find(header.
lvl1ID()-1) == rosL1AIds.end()) && rosL1AIds.size() != 0) {
983 for (vector<DTROS25Data>::const_iterator rosControlData = rosData.begin();
984 rosControlData != rosData.end(); rosControlData++) {
985 int ROSHeader_TTCCount = ((*rosControlData).getROSHeader().TTCEventCounter() + 1) % 0x1000000;
986 if( ROSHeader_TTCCount != header.
lvl1ID() ) {
987 int ros = (*rosControlData).getROSID();
988 if(
mode <= 2) hROSStatus->
Fill(10,ros-1);
997 int fedEvtLenght = trailer.
lenght()*8;
1001 if(
mode > 1)
return;
1013 int fifoFull = secondWord.
fifoFull();
1017 for(
int i=0;
i<3;
i++){
1018 if(inputFifoFull & 0x1){
1019 hFIFOStatus->
Fill(
i,0);
1021 if(inputFifoAlmostFull & 0x1){
1022 hFIFOStatus->
Fill(
i,1);
1025 hFIFOStatus->
Fill(3+
i,0);
1027 if(fifoAlmostFull & 0x1){
1028 hFIFOStatus->
Fill(3+
i,1);
1030 if(!(inputFifoFull & 0x1) && !(inputFifoAlmostFull & 0x1)){
1031 hFIFOStatus->
Fill(
i,2);
1033 if(!(fifoFull & 0x1) && !(fifoAlmostFull & 0x1)){
1034 hFIFOStatus->
Fill(3+
i,2);
1036 inputFifoFull >>= 1;
1037 inputFifoAlmostFull >>= 1;
1039 fifoAlmostFull >>= 1;
1043 hFIFOStatus->
Fill(6,0);
1045 if(outputFifoAlmostFull){
1046 hFIFOStatus->
Fill(6,1);
1048 if(!outputFifoFull && !outputFifoAlmostFull){
1049 hFIFOStatus->
Fill(6,2);
1095 folder =
"DT/00-DataIntegrity/";
1102 for (
int iCh=0; iCh<6;++iCh) {
1103 if ((chMask >> iCh) & 0x1){
1104 channels.push_back(cerosId*6+iCh);
1111 for (
int iCeros=0; iCeros<5;++iCeros) {
1112 if ((cerosMask >> iCeros) & 0x1){
1113 for (
int iCh=0; iCh<6;++iCh) {
1114 channels.push_back(iCeros*6+iCh);
1131 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator dduIt =
dduTimeHistos.begin();
1132 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator dduEnd =
dduTimeHistos.end();
1133 for(; dduIt!=dduEnd; ++dduIt) {
1134 map<int, DTTimeEvolutionHisto*>::iterator histoIt = dduIt->second.begin();
1135 map<int, DTTimeEvolutionHisto*>::iterator histoEnd = dduIt->second.end();
1136 for(; histoIt!=histoEnd; ++histoIt) {
1137 histoIt->second->updateTimeSlot(lumiBlock,
nEventsLS);
1141 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator rosIt =
rosTimeHistos.begin();
1142 map<std::string, map<int, DTTimeEvolutionHisto*> >::iterator rosEnd =
rosTimeHistos.end();
1143 for(; rosIt!=rosEnd; ++rosIt) {
1144 map<int, DTTimeEvolutionHisto*>::iterator histoIt = rosIt->second.begin();
1145 map<int, DTTimeEvolutionHisto*>::iterator histoEnd = rosIt->second.end();
1146 for(; histoIt!=histoEnd; ++histoIt) {
1147 histoIt->second->updateTimeSlot(lumiBlock,
nEventsLS);
1160 LogTrace(
"DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityTask") <<
"[DTDataIntegrityTask]: preProcessEvent" <<endl;
1163 (*rosBxIds).second.clear();
1169 (*rosL1AIds).second.clear();
1182 std::vector<DTROS25Data> ros25Data;
1185 for(
unsigned int i=0;
i<dduProduct->size(); ++
i)
1187 dduData = dduProduct->at(
i);
1188 ros25Data = ros25Product->at(
i);
1193 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
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