|
|
|
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 321 of file SiStripPopConFEDErrorsDQM.cc.
326 edm::LogWarning(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, incompatible cabling ! "
327 "Channel is not connected, but entry found in histo ... "
331 unsigned int lDetid = aConnection.
detId();
334 <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, DetId is invalid: " << lDetid << std::endl;
338 unsigned short lApvNum = 0;
339 if (aAPVNumber < 2) {
341 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
343 if (aAPVNumber == 0 || aAPVNumber == 2) {
345 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 349 of file SiStripPopConFEDErrorsDQM.cc.
355 const unsigned short lFirstBadStrip = aApvNum * 128;
356 const unsigned short lConsecutiveBadStrips = 128;
358 unsigned int lBadStripRange =
obj_.
encode(lFirstBadStrip, lConsecutiveBadStrips, aFlag);
360 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] ---- Adding : detid " << aDetId <<
" (FED "
361 << aConnection.
fedId() <<
", Ch " << aConnection.
fedCh() <<
")"
362 <<
", 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 380 of file SiStripPopConFEDErrorsDQM.cc.
382 const std::vector<uint32_t>& lList = it.second;
386 std::map<unsigned short, unsigned short> lAPVMap;
387 for (
auto cCont : lList) {
389 unsigned short lFlag = 0;
390 setFlagBit(lFlag, lData.
flag);
394 auto lInsert = lAPVMap.emplace(lData.
firstStrip, lFlag);
395 if (!lInsert.second) {
397 setFlagBit(lInsert.first->second, lData.
flag);
403 std::vector<unsigned int> lStripVector;
404 const unsigned short lConsecutiveBadStrips = 128;
405 lStripVector.reserve(lAPVMap.size());
406 for (
const auto& lIter : lAPVMap) {
407 lStripVector.push_back(
obj_.
encode(lIter.first, lConsecutiveBadStrips, lIter.second));
411 if (!
obj_.
put(it.first, lRange)) {
412 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 77 of file SiStripPopConFEDErrorsDQM.cc.
80 std::ostringstream lPath;
81 lPath <<
"Run " <<
getRunNumber() <<
"/SiStrip/Run summary/ReadoutView/";
85 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Now in " << lBaseDir << std::endl;
87 std::vector<std::pair<std::string, unsigned int> > lFedsFolder;
90 lFedsFolder.push_back(std::pair<std::string, unsigned int>(
"FedMonitoringSummary", 0));
98 std::ostringstream lFedDir;
99 lFedDir <<
"FrontEndDriver" << ifed;
104 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] - Errors detected for FED " << ifed
106 lFedsFolder.push_back(std::pair<std::string, unsigned int>(lFedDir.str(), ifed));
111 unsigned int nAPVsTotal = 0;
114 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] cabling not filled, return false "
119 for (
unsigned int iFed(0); iFed < lFedVec.size(); iFed++) {
122 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Invalid fedid : " << *(lFedVec.begin() + iFed) << std::endl;
126 for (
unsigned int iConn(0); iConn < lConnVec.size(); iConn++) {
130 unsigned int lDetid = lConnection.
detId();
138 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total number of APVs found : "
139 << nAPVsTotal << std::endl;
141 unsigned int nAPVsWithErrorTotal = 0;
142 unsigned int nFolders = 0;
144 for (
const auto& iFolder : lFedsFolder) {
145 const std::string lDirName = lBaseDir +
"/" + iFolder.first;
146 const unsigned int lFedId = iFolder.second;
151 std::vector<MonitorElement*> lMeVec = getter.
getContents(lDirName);
154 for (
auto iMe : lMeVec) {
156 if (lMeName.find(
"nFEDErrors") != lMeName.npos) {
157 lNorm = iMe->getEntries();
163 <<
"[SiStripFEDErrorsDQM::readBadAPVs] nFEDErrors not found, norm is " << lNorm << std::endl;
168 unsigned int nAPVsWithError = 0;
169 for (
auto iMe : lMeVec) {
170 if (iMe->getEntries() == 0)
174 bool lookForErrors =
false;
177 lookForErrors = lMeName.find(
"DataMissing") != lMeName.npos || lMeName.find(
"AnyFEDErrors") != lMeName.npos ||
178 (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos);
181 lookForErrors = lMeName.find(
"APVAddressError") != lMeName.npos || lMeName.find(
"APVError") != lMeName.npos ||
182 lMeName.find(
"BadMajorityAddresses") != lMeName.npos ||
183 lMeName.find(
"FEMissing") != lMeName.npos || lMeName.find(
"OOSBits") != lMeName.npos ||
184 lMeName.find(
"UnlockedBits") != lMeName.npos;
192 nAPVsWithErrorTotal += nAPVsWithError;
197 <<
"[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(), 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 207 of file SiStripPopConFEDErrorsDQM.cc.
211 unsigned short lFlag = 0;
213 if (lMeName.find(
"DataMissing") != lMeName.npos) {
215 }
else if (lMeName.find(
"AnyFEDErrors") != lMeName.npos) {
217 }
else if (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos) {
219 }
else if (lMeName.find(
"FEMissing") != lMeName.npos) {
221 }
else if (lMeName.find(
"BadMajorityAddresses") != lMeName.npos) {
223 }
else if (lMeName.find(
"UnlockedBits") != lMeName.npos) {
225 }
else if (lMeName.find(
"OOSBits") != lMeName.npos) {
227 }
else if (lMeName.find(
"APVAddressError") != lMeName.npos) {
229 }
else if (lMeName.find(
"APVError") != lMeName.npos) {
232 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Shouldn't be here ..."
238 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Reading histo : " << lMeName
239 <<
", flag = " << lFlag << std::endl;
244 bool lIsFedHist =
false;
245 bool lIsAPVHist =
false;
246 bool lIsFeHist =
false;
247 bool lIsChHist =
false;
256 else if (lNBins < 10)
263 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFedHist: " << lIsFedHist
265 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsAPVHist: " << lIsAPVHist
267 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFeHist : " << lIsFeHist
269 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsChHist : " << lIsChHist
273 for (
unsigned int ibin(1); ibin < lNBins + 1; ibin++) {
279 <<
"[SiStripFEDErrorsDQM::readHistogramError] ---- Below threshold : " << lStat << std::endl;
283 unsigned int lFedId = ibin + lBinShift;
289 addBadAPV(lConnection, 0, lFlag, aCounter);
293 unsigned int iFeId = ibin + lBinShift;
300 addBadAPV(lConnection, 0, lFlag, aCounter);
303 unsigned int iChId = ibin + lBinShift;
305 unsigned int iAPVid = iChId % 2 + 1;
306 iChId = static_cast<unsigned int>(iChId / 2.);
308 addBadAPV(lConnection, iAPVid, lFlag, aCounter);
313 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_
◆ 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