|
|
|
void | addBadAPV (const FedChannelConnection &aConnection, const unsigned short aAPVNumber, const unsigned short aFlag, unsigned int &aCounter) |
|
void | addBadStrips (const FedChannelConnection &aConnection, const unsigned int aDetId, const unsigned short aApvNum, const unsigned short aFlag, unsigned int &aCounter) |
|
void | addErrors () |
| Writes the errors to the db. More...
|
|
void | readHistogram (MonitorElement *aMe, unsigned int &aCounter, const float aNorm, const unsigned int aFedId) |
|
- Author
- A.-M. Magnan, M. De Mattia
-
P. David update to PopConSourceHandler and DQMEDHarvester @EDAnalyzer to read modules flagged by the DQM due to FED errors as bad and write in the database with the proper error flag.
Definition at line 14 of file SiStripPopConFEDErrorsDQM.cc.
◆ DQMStore
◆ MonitorElement
◆ SiStripPopConFEDErrorsHandlerFromDQM()
◆ ~SiStripPopConFEDErrorsHandlerFromDQM()
SiStripPopConFEDErrorsHandlerFromDQM::~SiStripPopConFEDErrorsHandlerFromDQM |
( |
| ) |
|
|
override |
◆ addBadAPV()
void SiStripPopConFEDErrorsHandlerFromDQM::addBadAPV |
( |
const FedChannelConnection & |
aConnection, |
|
|
const unsigned short |
aAPVNumber, |
|
|
const unsigned short |
aFlag, |
|
|
unsigned int & |
aCounter |
|
) |
| |
|
private |
Definition at line 327 of file SiStripPopConFEDErrorsDQM.cc.
332 edm::LogWarning(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, incompatible cabling ! "
333 "Channel is not connected, but entry found in histo ... "
337 unsigned int lDetid = aConnection.
detId();
340 <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, DetId is invalid: " << lDetid << std::endl;
344 unsigned short lApvNum = 0;
345 if (aAPVNumber < 2) {
347 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
349 if (aAPVNumber == 0 || aAPVNumber == 2) {
351 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
References addBadStrips(), FedChannelConnection::apvPairNumber(), FedChannelConnection::detId(), sistrip::invalid32_, and FedChannelConnection::isConnected().
Referenced by readHistogram().
◆ addBadStrips()
void SiStripPopConFEDErrorsHandlerFromDQM::addBadStrips |
( |
const FedChannelConnection & |
aConnection, |
|
|
const unsigned int |
aDetId, |
|
|
const unsigned short |
aApvNum, |
|
|
const unsigned short |
aFlag, |
|
|
unsigned int & |
aCounter |
|
) |
| |
|
private |
Definition at line 355 of file SiStripPopConFEDErrorsDQM.cc.
361 const unsigned short lFirstBadStrip = aApvNum * 128;
362 const unsigned short lConsecutiveBadStrips = 128;
364 unsigned int lBadStripRange =
obj_.
encode(lFirstBadStrip, lConsecutiveBadStrips, aFlag);
366 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] ---- Adding : detid " << aDetId <<
" (FED "
367 << aConnection.
fedId() <<
", Ch " << aConnection.
fedCh() <<
")"
368 <<
", APV " << aApvNum <<
", flag " << aFlag << std::endl;
References detIdErrors_, SiStripBadStrip::encode(), FedChannelConnection::fedCh(), FedChannelConnection::fedId(), LogTrace, and obj_.
Referenced by addBadAPV().
◆ addErrors()
void SiStripPopConFEDErrorsHandlerFromDQM::addErrors |
( |
| ) |
|
|
private |
Writes the errors to the db.
Definition at line 386 of file SiStripPopConFEDErrorsDQM.cc.
388 const std::vector<uint32_t>& lList = it.second;
392 std::map<unsigned short, unsigned short> lAPVMap;
393 for (
auto cCont : lList) {
395 unsigned short lFlag = 0;
396 setFlagBit(lFlag, lData.
flag);
400 auto lInsert = lAPVMap.emplace(lData.
firstStrip, lFlag);
401 if (!lInsert.second) {
403 setFlagBit(lInsert.first->second, lData.
flag);
409 std::vector<unsigned int> lStripVector;
410 const unsigned short lConsecutiveBadStrips = 128;
411 lStripVector.reserve(lAPVMap.size());
412 for (
const auto& lIter : lAPVMap) {
413 lStripVector.push_back(
obj_.
encode(lIter.first, lConsecutiveBadStrips, lIter.second));
417 if (!
obj_.
put(it.first, lRange)) {
418 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] detid already exists." << std::endl;
References SiStripBadStrip::decode(), detIdErrors_, SiStripBadStrip::encode(), SiStripBadStrip::data::firstStrip, SiStripBadStrip::data::flag, obj_, and SiStripBadStrip::put().
Referenced by dqmEndJob().
◆ dqmEndJob()
Reimplemented from SiStripDQMPopConSourceHandler< SiStripBadStrip >.
Definition at line 81 of file SiStripPopConFEDErrorsDQM.cc.
86 std::ostringstream lPath;
87 lPath <<
"Run " <<
getRunNumber() <<
"/SiStrip/Run summary/ReadoutView/";
91 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Now in " << lBaseDir << std::endl;
93 std::vector<std::pair<std::string, unsigned int> > lFedsFolder;
96 lFedsFolder.push_back(std::pair<std::string, unsigned int>(
"FedMonitoringSummary", 0));
104 std::ostringstream lFedDir;
105 lFedDir <<
"FrontEndDriver" << ifed;
110 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] - Errors detected for FED " << ifed
112 lFedsFolder.push_back(std::pair<std::string, unsigned int>(lFedDir.str(), ifed));
117 unsigned int nAPVsTotal = 0;
120 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] cabling not filled, return false "
125 for (
unsigned int iFed(0); iFed < lFedVec.size(); iFed++) {
128 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Invalid fedid : " << *(lFedVec.begin() + iFed) << std::endl;
132 for (
unsigned int iConn(0); iConn < lConnVec.size(); iConn++) {
136 unsigned int lDetid = lConnection.
detId();
144 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total number of APVs found : "
145 << nAPVsTotal << std::endl;
147 unsigned int nAPVsWithErrorTotal = 0;
148 unsigned int nFolders = 0;
150 for (
const auto& iFolder : lFedsFolder) {
151 const std::string lDirName = lBaseDir +
"/" + iFolder.first;
152 const unsigned int lFedId = iFolder.second;
157 std::vector<MonitorElement*> lMeVec = getter.
getContents(lDirName);
160 for (
auto iMe : lMeVec) {
162 if (lMeName.find(
"nFEDErrors") != lMeName.npos) {
163 lNorm = iMe->getEntries();
169 <<
"[SiStripFEDErrorsDQM::readBadAPVs] nFEDErrors not found, norm is " << lNorm << std::endl;
174 unsigned int nAPVsWithError = 0;
175 for (
auto iMe : lMeVec) {
176 if (iMe->getEntries() == 0)
180 bool lookForErrors =
false;
183 lookForErrors = lMeName.find(
"DataMissing") != lMeName.npos || lMeName.find(
"AnyFEDErrors") != lMeName.npos ||
184 (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos);
187 lookForErrors = lMeName.find(
"APVAddressError") != lMeName.npos || lMeName.find(
"APVError") != lMeName.npos ||
188 lMeName.find(
"BadMajorityAddresses") != lMeName.npos ||
189 lMeName.find(
"FEMissing") != lMeName.npos || lMeName.find(
"OOSBits") != lMeName.npos ||
190 lMeName.find(
"UnlockedBits") != lMeName.npos;
198 nAPVsWithErrorTotal += nAPVsWithError;
203 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total APVs with error found above threshold = " << nAPVsWithErrorTotal
References addErrors(), cabling_, dqm::implementation::NavigatorBase::cd(), debug_, FedChannelConnection::detId(), dqm::implementation::IGetter::dirExists(), sistrip::FED_ID_MAX, sistrip::FED_ID_MIN, SiStripFedCabling::fedConnections(), SiStripFedCabling::fedIds(), fp_, edm::FileInPath::fullPath(), dqm::implementation::IGetter::getContents(), SiStripDQMPopConSourceHandler< SiStripBadStrip >::getRunNumber(), sistrip::invalid32_, FedChannelConnection::isConnected(), LogTrace, FEDNumbering::MAXSiStripFEDID, FEDNumbering::MINSiStripFEDID, obj_, readHistogram(), dqm::implementation::NavigatorBase::setCurrentFolder(), and AlCaHLTBitMon_QueryRunRegistry::string.
◆ getObj()
◆ initES()
void SiStripPopConFEDErrorsHandlerFromDQM::initES |
( |
const edm::EventSetup & |
iSetup | ) |
|
|
overridevirtual |
◆ readHistogram()
void SiStripPopConFEDErrorsHandlerFromDQM::readHistogram |
( |
MonitorElement * |
aMe, |
|
|
unsigned int & |
aCounter, |
|
|
const float |
aNorm, |
|
|
const unsigned int |
aFedId |
|
) |
| |
|
private |
Definition at line 213 of file SiStripPopConFEDErrorsDQM.cc.
217 unsigned short lFlag = 0;
219 if (lMeName.find(
"DataMissing") != lMeName.npos) {
221 }
else if (lMeName.find(
"AnyFEDErrors") != lMeName.npos) {
223 }
else if (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos) {
225 }
else if (lMeName.find(
"FEMissing") != lMeName.npos) {
227 }
else if (lMeName.find(
"BadMajorityAddresses") != lMeName.npos) {
229 }
else if (lMeName.find(
"UnlockedBits") != lMeName.npos) {
231 }
else if (lMeName.find(
"OOSBits") != lMeName.npos) {
233 }
else if (lMeName.find(
"APVAddressError") != lMeName.npos) {
235 }
else if (lMeName.find(
"APVError") != lMeName.npos) {
238 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Shouldn't be here ..."
244 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Reading histo : " << lMeName
245 <<
", flag = " << lFlag << std::endl;
250 bool lIsFedHist =
false;
251 bool lIsAPVHist =
false;
252 bool lIsFeHist =
false;
253 bool lIsChHist =
false;
262 else if (lNBins < 10)
269 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFedHist: " << lIsFedHist
271 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsAPVHist: " << lIsAPVHist
273 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFeHist : " << lIsFeHist
275 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsChHist : " << lIsChHist
279 for (
unsigned int ibin(1); ibin < lNBins + 1; ibin++) {
285 <<
"[SiStripFEDErrorsDQM::readHistogramError] ---- Below threshold : " << lStat << std::endl;
289 unsigned int lFedId = ibin + lBinShift;
295 addBadAPV(lConnection, 0, lFlag, aCounter);
299 unsigned int iFeId = ibin + lBinShift;
306 addBadAPV(lConnection, 0, lFlag, aCounter);
309 unsigned int iChId = ibin + lBinShift;
311 unsigned int iAPVid = iChId % 2 + 1;
312 iChId = static_cast<unsigned int>(iChId / 2.);
314 addBadAPV(lConnection, iAPVid, lFlag, aCounter);
319 addBadAPV(lConnection, 0, lFlag, aCounter);
References addBadAPV(), cabling_, debug_, sistrip::FEDCH_PER_FED, sistrip::FEDCH_PER_FEUNIT, SiStripFedCabling::fedConnection(), dqm::impl::MonitorElement::getBinContent(), dqm::impl::MonitorElement::getName(), dqm::impl::MonitorElement::getNbinsX(), FedChannelConnection::isConnected(), LogTrace, FEDNumbering::MINSiStripFEDID, AlCaHLTBitMon_QueryRunRegistry::string, and threshold_.
Referenced by dqmEndJob().
◆ cabling_
◆ debug_
unsigned int SiStripPopConFEDErrorsHandlerFromDQM::debug_ |
|
private |
◆ detIdErrors_
std::map<uint32_t, std::vector<unsigned int> > SiStripPopConFEDErrorsHandlerFromDQM::detIdErrors_ |
|
private |
◆ fedCablingToken_
◆ fedCablingWatcher_
◆ fp_
◆ obj_
◆ threshold_
double SiStripPopConFEDErrorsHandlerFromDQM::threshold_ |
|
private |
bool check(const edm::EventSetup &iSetup)
virtual std::vector< dqm::harvesting::MonitorElement * > getContents(std::string const &path) const
static const uint32_t invalid32_
const uint16_t & fedCh() const
edm::ESWatcher< SiStripFedCablingRcd > fedCablingWatcher_
virtual void setCurrentFolder(std::string const &fullpath)
data decode(const unsigned int &value) const
FedChannelConnection fedConnection(uint16_t fed_id, uint16_t fed_ch) const
T getUntrackedParameter(std::string const &, T const &) const
static const uint16_t FED_ID_MIN
bool put(const uint32_t &detID, const InputVector &vect)
Log< level::Info, false > LogInfo
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses,...
Log< level::Warning, false > LogWarning
std::map< uint32_t, std::vector< unsigned int > > detIdErrors_
edm::ESGetToken< SiStripFedCabling, SiStripFedCablingRcd > fedCablingToken_
std::pair< ContainerIterator, ContainerIterator > Range
void addBadAPV(const FedChannelConnection &aConnection, const unsigned short aAPVNumber, const unsigned short aFlag, unsigned int &aCounter)
uint32_t getRunNumber() const
const SiStripFedCabling * cabling_
Class containning control, module, detector and connection information, at the level of a FED channel...
const uint32_t & detId() const
unsigned short firstStrip
Log< level::Error, false > LogError
static const uint16_t FED_ID_MAX
bool getData(T &iHolder) const
const uint16_t & fedId() const
void addErrors()
Writes the errors to the db.
virtual int getNbinsX() const
get # of bins in X-axis
void addBadStrips(const FedChannelConnection &aConnection, const unsigned int aDetId, const unsigned short aApvNum, const unsigned short aFlag, unsigned int &aCounter)
const std::string & getName() const
get name of ME
static const uint16_t FEDCH_PER_FED
FedsConstIterRange fedIds() const
static const uint16_t FEDCH_PER_FEUNIT
uint16_t apvPairNumber() const
void readHistogram(MonitorElement *aMe, unsigned int &aCounter, const float aNorm, const unsigned int aFedId)
ConnsConstIterRange fedConnections(uint16_t fed_id) const
unsigned int encode(const unsigned short &first, const unsigned short &NconsecutiveBadStrips, const unsigned short &flag=0)
virtual double getBinContent(int binx) const
get content of bin (1-D)
virtual bool dirExists(std::string const &path) const
std::string fullPath() const