45 #include "DQM/SiStripMonitorHardware/interface/FEDErrors.hh" 69 inline void fillPresent(
unsigned int fedId,
bool present);
119 dirName_(iConfig.getUntrackedParameter<
std::
string>(
"DirName",
"SiStrip/FEDIntegrity/")),
131 updateFrequency_(iConfig.getUntrackedParameter<unsigned
int>(
"HistogramUpdateFrequency", 0)),
145 std::stringstream
ss;
146 ss <<
"Payload checks are disabled but individual payload checks have been enabled. The following payload checks " 149 ss <<
"Channel length check, ";
151 ss <<
"Channel packet code check, ";
153 ss <<
"Cabled channel status bits checks, ";
155 ss <<
"FE Unit legnth check";
185 std::cout <<
"[SiStripFEDCheckPlugin::analyze] gotData ? " << (gotData ?
"YES" :
"NOPE") << std::endl;
193 FEDErrors lFedErrors;
197 size_t nFEDinWdata = 0;
206 if (!fedData.
size() || !fedData.
data()) {
215 std::cout <<
" fedData.data(): " << fedData.
data() << std::endl;
218 if (fedData.
size() && fedData.
data())
226 bool hasFatalErrors =
false;
227 float rateNonFatal = 0;
229 std::unique_ptr<const sistrip::FEDBuffer>
buffer;
231 if (!lFedErrors.fillFatalFEDErrors(fedData, 0)) {
232 hasFatalErrors =
true;
238 bool channelLengthsOK =
checkChannelLengths_ ? buffer->checkChannelLengthsMatchBufferLength() :
true;
239 bool channelPacketCodesOK =
checkPacketCodes_ ? buffer->checkChannelPacketCodes() :
true;
240 bool feLengthsOK =
checkFELengths_ ? buffer->checkFEUnitLengths() :
true;
241 if (!channelLengthsOK || !channelPacketCodesOK || !feLengthsOK) {
242 hasFatalErrors =
true;
246 rateNonFatal = lFedErrors.fillNonFatalFEDErrors(buffer.get(),
cabling_);
250 if (hasFatalErrors) {
255 edm::LogInfo(
"SiStripFEDCheck") <<
"Fatal error with FED ID " << fedId <<
". Check summary: " << std::endl
256 << buffer->checkSummary() << std::endl;
257 std::stringstream
ss;
268 edm::LogInfo(
"SiStripFEDCheck") <<
"Non-fatal error with FED ID " << fedId <<
" for " << rateNonFatal
269 <<
" of the channels. Check summary: " << std::endl
270 << buffer->checkSummary() << std::endl;
271 std::stringstream
ss;
278 std::cout <<
"nFEDin: " << nFEDin <<
" nFEDinWdata: " << nFEDinWdata << std::endl;
293 double xFEDmin = siStripFedIdMin_ - 0.5;
301 ibooker.
book1D(
"FEDEntries",
"Number of times FED buffer is present in data", nFED, xFEDmin, xFEDmax);
306 fedFatalErrors_ = ibooker.
book1D(
"FEDFatal",
"Number of fatal errors in FED buffer", nFED, xFEDmin, xFEDmax);
312 ibooker.
book1D(
"FEDNonFatal",
"Number of non fatal errors in FED buffer", nFED, xFEDmin, xFEDmax);
322 ibooker.
bookProfile(
"nFEDinVsLS",
"number of FED in Vs LS", LSBin, LSMin, LSMax, nFED, xFEDmin, xFEDmax);
329 "nFEDinWdataVsLS",
"number of FED in (with data) Vs LS", LSBin, LSMin, LSMax, nFED, xFEDmin, xFEDmax);
371 if (nonFatalError > 0)
374 if (nonFatalError > 0)
391 unsigned int entriesFedsPresent = 0;
392 unsigned int entriesFatalErrors = 0;
393 unsigned int entriesNonFatalErrors = 0;
398 entriesFedsPresent += fedsPresentBin;
402 entriesFatalErrors += fedFatalErrorsBin;
406 entriesNonFatalErrors += fedNonFatalErrorsBin;
425 desc.
addUntracked<
unsigned int>(
"HistogramUpdateFrequency", 1000);
428 desc.
add<
bool>(
"doPLOTfedsPresent",
true);
429 desc.
add<
bool>(
"doPLOTfedFatalErrors",
true);
430 desc.
add<
bool>(
"doPLOTfedNonFatalErrors",
true);
431 desc.
add<
bool>(
"doPLOTnFEDinVsLS",
false);
432 desc.
add<
bool>(
"doPLOTnFEDinWdataVsLS",
false);
440 desc.
addUntracked<
bool>(
"CheckChannelPacketCodes",
true);
445 desc.
add<
int>(
"LSBin", 5000);
446 desc.
add<
double>(
"LSMin", 0.5);
447 desc.
add<
double>(
"LSMax", 5000.5);
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
T getParameter(std::string const &) const
bool doPLOTnFEDinWdataVsLS_
void dqmEndRun(edm::Run const &, edm::EventSetup const &) override
MonitorElement * nFEDinWdataVsLS_
bool checkChannelLengths_
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void fillFatalError(unsigned int fedId, bool fatalError)
edm::InputTag rawDataTag_
bool doPLOTfedNonFatalErrors_
edm::EDGetTokenT< FEDRawDataCollection > rawDataToken_
unsigned int siStripFedIdMax_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const SiStripFedCabling * cabling_
void setCurrentFolder(std::string const &fullpath)
bool hasNonFatalError(const FEDRawData &fedData, unsigned int fedId) const
MonitorElement * fedNonFatalErrors_
LuminosityBlockNumber_t luminosityBlock() const
size_t size() const
Lenght of the data buffer in bytes.
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
#define DEFINE_FWK_MODULE(type)
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
void addDefault(ParameterSetDescription const &psetDescription)
unsigned int updateFrequency_
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, char const *option="s")
ParameterDescriptionBase * add(U const &iLabel, T const &value)
~SiStripFEDCheckPlugin() override
std::vector< unsigned int > fedFatalErrorBinContents_
std::vector< unsigned int > fedsPresentBinContents_
unsigned int siStripFedIdMin_
Constants and enumerated types for FED/FEC systems.
MonitorElement * nFEDinVsLS_
bool hasFatalError(const FEDRawData &fedData, unsigned int fedId) const
bool doPLOTfedFatalErrors_
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
SiStripFEDCheckPlugin(const edm::ParameterSet &)
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
void updateCabling(const edm::EventSetup &eventSetup)
MonitorElement * fedFatalErrors_
MonitorElement * fedsPresent_
bool checkChannelStatusBits_
void fillNonFatalError(unsigned int fedId, float nonFatalError)
T const * product() const
std::vector< unsigned int > fedNonFatalErrorBinContents_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void fillPresent(unsigned int fedId, bool present)
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)