25 void readHistogram(MonitorElement* aMe,
unsigned int& aCounter,
const float aNorm,
const unsigned int aFedId);
28 const unsigned short aAPVNumber,
29 const unsigned short aFlag,
30 unsigned int& aCounter);
33 const unsigned int aDetId,
34 const unsigned short aApvNum,
35 const unsigned short aFlag,
36 unsigned int& aCounter);
61 fp_(iConfig.getUntrackedParameter<
edm::FileInPath>(
62 "file",
edm::FileInPath(
"CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))),
63 threshold_(iConfig.getUntrackedParameter<double>(
"Threshold", 0)),
64 debug_(iConfig.getUntrackedParameter<unsigned
int>(
"Debug", 0)),
66 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::SiStripFEDErrorsDQM()]";
70 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::~SiStripFEDErrorsDQM]";
88 std::ostringstream lPath;
89 lPath <<
"Run " <<
getRunNumber() <<
"/SiStrip/Run summary/ReadoutView/";
93 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Now in " << lBaseDir << std::endl;
95 std::vector<std::pair<std::string, unsigned int> > lFedsFolder;
98 lFedsFolder.push_back(std::pair<std::string, unsigned int>(
"FedMonitoringSummary", 0));
106 std::ostringstream lFedDir;
107 lFedDir <<
"FrontEndDriver" << ifed;
112 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] - Errors detected for FED " << ifed
114 lFedsFolder.push_back(std::pair<std::string, unsigned int>(lFedDir.str(), ifed));
119 unsigned int nAPVsTotal = 0;
122 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] cabling not filled, return false " 127 for (
unsigned int iFed(0); iFed < lFedVec.size(); iFed++) {
130 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Invalid fedid : " << *(lFedVec.begin() + iFed) << std::endl;
134 for (
unsigned int iConn(0); iConn < lConnVec.size(); iConn++) {
138 unsigned int lDetid = lConnection.
detId();
146 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total number of APVs found : " 147 << nAPVsTotal << std::endl;
149 unsigned int nAPVsWithErrorTotal = 0;
150 unsigned int nFolders = 0;
152 for (
const auto& iFolder : lFedsFolder) {
153 const std::string lDirName = lBaseDir +
"/" + iFolder.first;
154 const unsigned int lFedId = iFolder.second;
159 std::vector<MonitorElement*> lMeVec = getter.
getContents(lDirName);
162 for (
auto iMe : lMeVec) {
164 if (lMeName.find(
"nFEDErrors") != lMeName.npos) {
165 lNorm = iMe->getEntries();
171 <<
"[SiStripFEDErrorsDQM::readBadAPVs] nFEDErrors not found, norm is " << lNorm << std::endl;
176 unsigned int nAPVsWithError = 0;
177 for (
auto iMe : lMeVec) {
178 if (iMe->getEntries() == 0)
182 bool lookForErrors =
false;
185 lookForErrors = lMeName.find(
"DataMissing") != lMeName.npos || lMeName.find(
"AnyFEDErrors") != lMeName.npos ||
186 (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos);
189 lookForErrors = lMeName.find(
"APVAddressError") != lMeName.npos || lMeName.find(
"APVError") != lMeName.npos ||
190 lMeName.find(
"BadMajorityAddresses") != lMeName.npos ||
191 lMeName.find(
"FEMissing") != lMeName.npos || lMeName.find(
"OOSBits") != lMeName.npos ||
192 lMeName.find(
"UnlockedBits") != lMeName.npos;
200 nAPVsWithErrorTotal += nAPVsWithError;
205 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total APVs with error found above threshold = " << nAPVsWithErrorTotal
216 unsigned int& aCounter,
218 const unsigned int aFedId) {
219 unsigned short lFlag = 0;
221 if (lMeName.find(
"DataMissing") != lMeName.npos) {
223 }
else if (lMeName.find(
"AnyFEDErrors") != lMeName.npos) {
225 }
else if (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos) {
227 }
else if (lMeName.find(
"FEMissing") != lMeName.npos) {
229 }
else if (lMeName.find(
"BadMajorityAddresses") != lMeName.npos) {
231 }
else if (lMeName.find(
"UnlockedBits") != lMeName.npos) {
233 }
else if (lMeName.find(
"OOSBits") != lMeName.npos) {
235 }
else if (lMeName.find(
"APVAddressError") != lMeName.npos) {
237 }
else if (lMeName.find(
"APVError") != lMeName.npos) {
240 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Shouldn't be here ..." 246 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Reading histo : " << lMeName
247 <<
", flag = " << lFlag << std::endl;
252 bool lIsFedHist =
false;
253 bool lIsAPVHist =
false;
254 bool lIsFeHist =
false;
255 bool lIsChHist =
false;
264 else if (lNBins < 10)
271 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFedHist: " << lIsFedHist
273 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsAPVHist: " << lIsAPVHist
275 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFeHist : " << lIsFeHist
277 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsChHist : " << lIsChHist
281 for (
unsigned int ibin(1); ibin < lNBins + 1; ibin++) {
287 <<
"[SiStripFEDErrorsDQM::readHistogramError] ---- Below threshold : " << lStat << std::endl;
291 unsigned int lFedId = ibin + lBinShift;
297 addBadAPV(lConnection, 0, lFlag, aCounter);
301 unsigned int iFeId = ibin + lBinShift;
304 unsigned int iChId = sistrip::FEDCH_PER_FEUNIT * iFeId + iFeCh;
308 addBadAPV(lConnection, 0, lFlag, aCounter);
311 unsigned int iChId = ibin + lBinShift;
313 unsigned int iAPVid = iChId % 2 + 1;
314 iChId =
static_cast<unsigned int>(iChId / 2.);
316 addBadAPV(lConnection, iAPVid, lFlag, aCounter);
321 addBadAPV(lConnection, 0, lFlag, aCounter);
330 const unsigned short aAPVNumber,
331 const unsigned short aFlag,
332 unsigned int& aCounter) {
334 edm::LogWarning(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, incompatible cabling ! " 335 "Channel is not connected, but entry found in histo ... " 339 unsigned int lDetid = aConnection.
detId();
342 <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, DetId is invalid: " << lDetid << std::endl;
346 unsigned short lApvNum = 0;
347 if (aAPVNumber < 2) {
349 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
351 if (aAPVNumber == 0 || aAPVNumber == 2) {
353 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
358 const unsigned int aDetId,
359 const unsigned short aApvNum,
360 const unsigned short aFlag,
361 unsigned int& aCounter) {
363 const unsigned short lFirstBadStrip = aApvNum * 128;
364 const unsigned short lConsecutiveBadStrips = 128;
366 unsigned int lBadStripRange =
obj_.
encode(lFirstBadStrip, lConsecutiveBadStrips, aFlag);
368 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] ---- Adding : detid " << aDetId <<
" (FED " 369 << aConnection.
fedId() <<
", Ch " << aConnection.
fedCh() <<
")" 370 <<
", APV " << aApvNum <<
", flag " << aFlag << std::endl;
385 inline void setFlagBit(
unsigned short& aFlag,
const unsigned short aBit) { aFlag = aFlag | (0x1 << aBit); }
390 const std::vector<uint32_t>& lList = it.second;
394 std::map<unsigned short, unsigned short> lAPVMap;
395 for (
auto cCont : lList) {
397 unsigned short lFlag = 0;
398 setFlagBit(lFlag, lData.
flag);
402 auto lInsert = lAPVMap.emplace(lData.
firstStrip, lFlag);
403 if (!lInsert.second) {
405 setFlagBit(lInsert.first->second, lData.
flag);
411 std::vector<unsigned int> lStripVector;
412 const unsigned short lConsecutiveBadStrips = 128;
413 for (
const auto& lIter : lAPVMap) {
414 lStripVector.push_back(
obj_.
encode(lIter.first, lConsecutiveBadStrips, lIter.second));
418 if (!
obj_.
put(it.first, lRange)) {
419 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] detid already exists." << std::endl;
void addBadStrips(const FedChannelConnection &aConnection, const unsigned int aDetId, const unsigned short aApvNum, const unsigned short aFlag, unsigned int &aCounter)
static const uint16_t FED_ID_MIN
FedChannelConnection fedConnection(uint16_t fed_id, uint16_t fed_ch) const
const uint16_t & fedCh() const
static const uint32_t invalid32_
void dqmEndJob(DQMStore::IBooker &booker, DQMStore::IGetter &getter) override
std::vector< MonitorElement * > getContents(Args &&...args)
uint16_t apvPairNumber() const
const std::string & getName() const
get name of ME
const uint16_t & fedId() const
void initES(const edm::EventSetup &iSetup) override
SiStripBadStrip * getObj() const override
bool dirExists(std::string const &path)
#define DEFINE_FWK_MODULE(type)
std::map< uint32_t, std::vector< unsigned int > > detIdErrors_
virtual int getNbinsX() const
get # of bins in X-axis
const uint32_t & detId() const
Class containning control, module, detector and connection information, at the level of a FED channel...
FedsConstIterRange fedIds() const
virtual double getBinContent(int binx) const
get content of bin (1-D)
void addErrors()
Writes the errors to the db.
~SiStripPopConFEDErrorsHandlerFromDQM() override
uint32_t getRunNumber() const
void addBadAPV(const FedChannelConnection &aConnection, const unsigned short aAPVNumber, const unsigned short aFlag, unsigned int &aCounter)
unsigned short firstStrip
static const uint16_t FEDCH_PER_FEUNIT
const SiStripFedCabling * cabling_
void readHistogram(MonitorElement *aMe, unsigned int &aCounter, const float aNorm, const unsigned int aFedId)
ConnsConstIterRange fedConnections(uint16_t fed_id) const
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
static const uint16_t FEDCH_PER_FED
std::pair< ContainerIterator, ContainerIterator > Range
std::string fullPath() const
static const uint16_t FED_ID_MAX
SiStripPopConFEDErrorsHandlerFromDQM(const edm::ParameterSet &iConfig)
bool put(const uint32_t &detID, const InputVector &vect)
T const * product() const
unsigned int encode(const unsigned short &first, const unsigned short &NconsecutiveBadStrips, const unsigned short &flag=0)
data decode(const unsigned int &value) const
void setCurrentFolder(std::string const &fullpath)
dqm::legacy::MonitorElement MonitorElement
dqm::legacy::DQMStore DQMStore