49 #include "DQM/SiStripMonitorHardware/interface/FEDHistograms.hh"
50 #include "DQM/SiStripMonitorHardware/interface/FEDErrors.hh"
115 : rawDataTag_(iConfig.getUntrackedParameter<edm::InputTag>(
"RawDataTag",edm::InputTag(
"source",
""))),
116 folderName_(iConfig.getUntrackedParameter<std::string>(
"HistogramFolderName",
"SiStrip/ReadoutView/FedMonitoringSummary")),
117 fillAllDetailedHistograms_(iConfig.getUntrackedParameter<bool>(
"FillAllDetailedHistograms",
false)),
118 fillWithEvtNum_(iConfig.getUntrackedParameter<bool>(
"FillWithEventNumber",
false)),
119 printDebug_(iConfig.getUntrackedParameter<unsigned int>(
"PrintDebugMessages",1)),
121 writeDQMStore_(iConfig.getUntrackedParameter<bool>(
"WriteDQMStore",
false)),
122 dqmStoreFileName_(iConfig.getUntrackedParameter<std::string>(
"DQMStoreFileName",
"DQMStore.root")),
127 std::ostringstream debugStream;
129 debugStream <<
"[SiStripFEDMonitorPlugin]Configuration for SiStripFEDMonitorPlugin: " << std::endl
130 <<
"[SiStripFEDMonitorPlugin]\tRawDataTag: " <<
rawDataTag_ << std::endl
131 <<
"[SiStripFEDMonitorPlugin]\tHistogramFolderName: " <<
folderName_ << std::endl
133 <<
"[SiStripFEDMonitorPlugin]\tFillWithEventNumber?" << (
fillWithEvtNum_ ?
"yes" :
"no") << std::endl
134 <<
"[SiStripFEDMonitorPlugin]\tPrintDebugMessages? " << (
printDebug_ ?
"yes" :
"no") << std::endl
135 <<
"[SiStripFEDMonitorPlugin]\tWriteDQMStore? " << (
writeDQMStore_ ?
"yes" :
"no") << std::endl;
140 std::ostringstream* pDebugStream = (
printDebug_>1 ? &debugStream :
NULL);
142 fedHists_.initialise(iConfig,pDebugStream);
149 LogTrace(
"SiStripMonitorHardware") << debugStream.str();
188 std::map<unsigned int,std::pair<unsigned short,unsigned short> > badChannelFraction;
190 unsigned int lNFEDMonitoring = 0;
191 unsigned int lNFEDUnpacker = 0;
192 unsigned int lNChannelMonitoring = 0;
193 unsigned int lNChannelUnpacker = 0;
195 unsigned int lNTotBadFeds = 0;
196 unsigned int lNTotBadChannels = 0;
197 unsigned int lNTotBadActiveChannels = 0;
207 bool lFullDebug =
false;
211 bool lDataExist =
fedErrors_.checkDataPresent(fedData);
231 bool lFailUnpackerFEDcheck =
fedErrors_.failUnpackerFEDCheck();
237 bool lFailMonitoringFEDcheck =
fedErrors_.failMonitoringFEDCheck();
238 if (lFailMonitoringFEDcheck) lNTotBadFeds++;
244 if (lFailMonitoringFEDcheck != lFailUnpackerFEDcheck) {
246 std::ostringstream debugStream;
247 debugStream <<
" --- WARNING: FED " << fedId << std::endl
248 <<
" ------ Monitoring FED check " ;
249 if (lFailMonitoringFEDcheck) debugStream <<
"failed." << std::endl;
250 else debugStream <<
"passed." << std::endl ;
251 debugStream <<
" ------ Unpacker FED check " ;
252 if (lFailUnpackerFEDcheck) debugStream <<
"failed." << std::endl;
253 else debugStream <<
"passed." << std::endl ;
254 edm::LogError(
"SiStripMonitorHardware") << debugStream.str();
257 if (lFailMonitoringFEDcheck) lNFEDMonitoring++;
258 else if (lFailUnpackerFEDcheck) lNFEDUnpacker++;
267 <<
", TkHistoMap enabled but pointer is null." << std::endl;
273 lNTotBadActiveChannels);
276 if ((lNTotBadFeds> 0 || lNTotBadChannels>0) &&
printDebug_>1) {
277 std::ostringstream debugStream;
278 debugStream <<
"[SiStripFEDMonitorPlugin] --- Total number of bad feds = "
279 << lNTotBadFeds << std::endl
280 <<
"[SiStripFEDMonitorPlugin] --- Total number of bad channels = "
281 << lNTotBadChannels << std::endl
282 <<
"[SiStripFEDMonitorPlugin] --- Total number of bad active channels = "
283 << lNTotBadActiveChannels << std::endl;
284 edm::LogInfo(
"SiStripMonitorHardware") << debugStream.str();
287 if ((lNFEDMonitoring > 0 || lNFEDUnpacker > 0 || lNChannelMonitoring > 0 || lNChannelUnpacker > 0) &&
printDebug_) {
288 std::ostringstream debugStream;
290 <<
"[SiStripFEDMonitorPlugin]-------------------------------------------------------------------------" << std::endl
291 <<
"[SiStripFEDMonitorPlugin]-------------------------------------------------------------------------" << std::endl
292 <<
"[SiStripFEDMonitorPlugin]-- Summary of differences between unpacker and monitoring at FED level : " << std::endl
293 <<
"[SiStripFEDMonitorPlugin] ---- Number of times monitoring fails but not unpacking = " << lNFEDMonitoring << std::endl
294 <<
"[SiStripFEDMonitorPlugin] ---- Number of times unpacking fails but not monitoring = " << lNFEDUnpacker << std::endl
295 <<
"[SiStripFEDMonitorPlugin]-------------------------------------------------------------------------" << std::endl
296 <<
"[SiStripFEDMonitorPlugin]-- Summary of differences between unpacker and monitoring at Channel level : " << std::endl
297 <<
"[SiStripFEDMonitorPlugin] ---- Number of times monitoring fails but not unpacking = " << lNChannelMonitoring << std::endl
298 <<
"[SiStripFEDMonitorPlugin] ---- Number of times unpacking fails but not monitoring = " << lNChannelUnpacker << std::endl
299 <<
"[SiStripFEDMonitorPlugin]-------------------------------------------------------------------------" << std::endl
300 <<
"[SiStripFEDMonitorPlugin]-------------------------------------------------------------------------" << std::endl ;
301 edm::LogError(
"SiStripMonitorHardware") << debugStream.str();
305 FEDErrors::getFEDErrorsCounters().nTotalBadChannels = lNTotBadChannels;
306 FEDErrors::getFEDErrorsCounters().nTotalBadActiveChannels = lNTotBadActiveChannels;
311 else fedHists_.fillCountersHistograms(FEDErrors::getFEDErrorsCounters(),FEDErrors::getChannelErrorsCounters(),iEvent.
orbitNumber()/11223.);
EventNumber_t event() const
~SiStripFEDMonitorPlugin()
std::string dqmStoreFileName_
bool fillAllDetailedHistograms_
const SiStripFedCabling * cabling_
#define DEFINE_FWK_MODULE(type)
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
virtual void analyze(const edm::Event &, const edm::EventSetup &)
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
SiStripFEDMonitorPlugin(const edm::ParameterSet &)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
virtual void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
virtual void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
T const * product() const
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
edm::InputTag rawDataTag_
void setCurrentFolder(const std::string &fullpath)
void updateCabling(const edm::EventSetup &eventSetup)