30 " Creating SiStripQualityChecker " <<
"\n" ;
35 SubDetFolderMap.insert(std::pair<std::string, std::string>(
"TIB",
"TIB"));
36 SubDetFolderMap.insert(std::pair<std::string, std::string>(
"TOB",
"TOB"));
37 SubDetFolderMap.insert(std::pair<std::string, std::string>(
"TECF",
"TEC/side_2"));
38 SubDetFolderMap.insert(std::pair<std::string, std::string>(
"TECB",
"TEC/side_1"));
39 SubDetFolderMap.insert(std::pair<std::string, std::string>(
"TIDF",
"TID/side_2"));
40 SubDetFolderMap.insert(std::pair<std::string, std::string>(
"TIDB",
"TID/side_1"));
45 "\n------------------------------------------"
46 "\nUnAvailable Service TkHistoMap: please insert in the configuration file an instance like"
47 "\n\tprocess.TkDetMap = cms.Service(\"TkDetMap\")"
48 "\n------------------------------------------";
60 TrackingMEsMap.insert(std::pair<std::string, TrackingMEs>(
"Rate", tracking_mes));
67 TrackingMEsMap.insert(std::pair<std::string, TrackingMEs>(
"Chi2", tracking_mes));
74 TrackingMEsMap.insert(std::pair<std::string, TrackingMEs>(
"RecHits", tracking_mes));
106 " Deleting SiStripQualityChecker " <<
"\n" ;
115 std::string strip_dir =
"";
117 if (strip_dir.size() == 0) strip_dir =
"SiStrip";
123 std::string hname, htitle;
124 hname =
"detFractionReportMap";
125 htitle =
"SiStrip Report for Good Detector Fraction";
129 hname =
"sToNReportMap";
130 htitle =
"SiStrip Report for Signal-to-Noise";
138 hname =
"reportSummaryMap";
139 htitle =
"SiStrip Report Summary Map";
148 for (std::map<std::string, std::string>::const_iterator it =
SubDetFolderMap.begin();
151 std::string det = it->first;
159 else if (det ==
"TECB") local_mes.
detectorTag =
"TEC-";
160 else if (det ==
"TIDF") local_mes.
detectorTag =
"TID+";
161 else if (det ==
"TIDB") local_mes.
detectorTag =
"TID-";
165 me_name =
"SiStrip_" + det;
168 me_name =
"SiStrip_DetFraction_" + det;
171 me_name =
"SiStrip_SToNFlag_" + det;
173 SubDetMEsMap.insert(std::pair<std::string, SubDetMEs>(det, local_mes));
179 std::string tracking_dir =
"";
181 if (tracking_dir.size() == 0) tracking_dir =
"Tracking";
186 std::string hname, htitle;
187 hname =
"reportSummaryMap";
188 htitle =
"Tracking Report Summary Map";
197 dqm_store->
setCurrentFolder(tracking_dir+
"/EventInfo/reportSummaryContents");
199 for (std::map<std::string, TrackingMEs>::iterator it =
TrackingMEsMap.begin();
202 std::string
name = it->first;
203 it->second.TrackingFlag = dqm_store->
bookFloat(
"Track"+name);
217 for (std::map<std::string, SubDetMEs>::const_iterator it =
SubDetMEsMap.begin();
241 for (std::map<std::string, TrackingMEs>::iterator it =
TrackingMEsMap.begin();
243 it->second.TrackingFlag->Fill(-1.0);
258 for (std::map<std::string, SubDetMEs>::const_iterator it =
SubDetMEsMap.begin();
275 for (std::map<std::string, TrackingMEs>::iterator it =
TrackingMEsMap.begin();
277 it->second.TrackingFlag->Reset();
304 unsigned int xbin = 0;
305 float global_flag = 0;
307 std::string mdir =
"MechanicalView";
309 std::string mechanicalview_dir = dqm_store->
pwd();
312 for (std::map<std::string, SubDetMEs>::const_iterator it =
SubDetMEsMap.begin();
314 std::string det = it->first;
315 std::map<std::string, std::string>::const_iterator cPos =
SubDetFolderMap.find(det);
317 std::string
dname = mechanicalview_dir +
"/" + cPos->second;
318 if (!dqm_store->
dirExists(dname))
continue;
319 dqm_store->
cd(dname);
326 global_flag = global_flag/xbin*1.0;
336 std::string
dir =
"Tracking";
338 dir =
"TrackParameters";
341 std::vector<MonitorElement*> meVec1;
342 std::vector<MonitorElement*> meVec2;
344 meVec1 = dqm_store->
getContents(dqm_store->
pwd()+
"/GeneralProperties/GoodTracks");
345 meVec2 = dqm_store->
getContents(dqm_store->
pwd()+
"/HitProperties/GoodTracks");
347 meVec1 = dqm_store->
getContents(dqm_store->
pwd()+
"/GeneralProperties");
348 meVec2 = dqm_store->
getContents(dqm_store->
pwd()+
"/HitProperties");
350 std::vector<MonitorElement*> meVec(meVec1.size() + meVec2.size());
351 std::merge(meVec1.begin(), meVec1.end(), meVec2.begin(), meVec2.end(), meVec.begin());
354 for (std::vector<MonitorElement*>::const_iterator itME = meVec.begin(); itME != meVec.end(); itME++) {
357 std::vector<QReport *> qt_reports = me->
getQReports();
358 if (qt_reports.size() == 0)
continue;
364 for (std::map<std::string, TrackingMEs>::const_iterator it =
TrackingMEsMap.begin();
367 std::string hname = it->second.HistoName;
368 if (name.find(hname) != std::string::npos) {
369 status = qt_reports[0]->getQTresult();
370 it->second.TrackingFlag->Fill(status);
375 gstatus = gstatus *
status;
385 SubDetMEs& mes,
unsigned int xbin,
float& gflag) {
388 if (status_flag < 1)
return;
390 std::vector<std::string> subDirVec = dqm_store->
getSubdirs();
392 unsigned int ybin = 0;
395 float tot_ston_stat = 0;
397 for (std::vector<std::string>::const_iterator ic = subDirVec.begin();
398 ic != subDirVec.end(); ic++) {
399 std::string
dname = (*ic);
400 if (dname.find(
"BadModuleList") != std::string::npos)
continue;
401 std::vector<MonitorElement*> meVec;
403 dqm_store->
cd((*ic));
409 int lnum = atoi(dname.substr(dname.find_last_of(
"_")+1).c_str());
410 ndet = cabling->connectedNumber(mes.
detectorTag, lnum);
414 for (std::vector<MonitorElement*>::const_iterator it = meVec.begin();
415 it != meVec.end(); it++) {
418 std::vector<QReport *> reports = me->
getQReports();
420 if (reports.size() == 0)
continue;
423 if( name.find(
"Summary_ClusterStoNCorr__OnTrack") != std::string::npos){
425 if (reports[0]->getQTresult() == -1) {
434 float eff_fac = 1 - (errdet*1.0/ndet);
441 tot_errdet += errdet;
442 tot_ston_stat += ston_stat;
444 dqm_store->
cd((*ic));
447 float tot_eff_fac = 1 - (tot_errdet*1.0/tot_ndet);
449 float tot_ston_fac = tot_ston_stat/ybin;
451 if (tot_ston_fac < 0){
454 gflag =
std::min(tot_eff_fac,tot_ston_fac);
463 std::ostringstream det_summary_str;
464 for (std::map<std::string, SubDetMEs>::const_iterator it =
SubDetMEsMap.begin();
466 std::string det = it->first;
467 det_summary_str << std::setprecision(4);
468 det_summary_str << std::setiosflags(std::ios::fixed);
470 det_summary_str <<
" Printing Status for " << det <<
" : " << std::endl;
474 float fval1, fval2, fval3;
475 fval1 = fval2 = fval3 = -1.0;
479 if (sval.size() > 0) fval1 = atof(sval.c_str());
481 if (sval.size() > 0) fval2 = atof(sval.c_str());
483 if (sval.size() > 0) fval3 = atof(sval.c_str());
485 det_summary_str << std::setw(7) <<
" % of good detectors " << fval1
486 <<
" SToN Flag " << fval2
487 <<
" Summary Flag " << fval3 << std::endl;
496 std::map<uint32_t,uint16_t> bad_modules;
497 for (std::vector<MonitorElement*>::const_iterator it = layer_mes.begin();
498 it != layer_mes.end(); it++) {
501 std::vector<QReport *> qreports = me->
getQReports();
502 if (qreports.size() == 0)
continue;
504 std::vector<DQMChannel> bad_channels_me;
506 bad_channels_me = qreports[0]->getBadChannels();
509 bad_channels_me = qreports[0]->getBadChannels();
510 lname = name.substr(name.find(
"TkHMap_")+7);
511 lname = lname.substr(lname.find(
"_T")+1);
514 for (std::vector<DQMChannel>::iterator it = bad_channels_me.begin(); it != bad_channels_me.end(); it++){
515 int xval = (*it).getBinX();
516 int yval = (*it).getBinY();
518 std::map<uint32_t,uint16_t>::iterator iPos = bad_modules.find(detId);
520 if (iPos != bad_modules.end()){
528 std::ostringstream detid_str;
532 std::string thisMEpath = currentdir.substr( 0 , currentdir.rfind(
"/" ) ) +
"/BadModuleList/" + detid_str.str() ;
539 flag = atoi ( val_str.c_str() );
545 bad_modules.insert(std::pair<uint32_t,uint16_t>(detId,flag));
549 for(std::map<uint32_t,uint16_t>::const_iterator it = bad_modules.begin();
550 it != bad_modules.end(); it++) {
551 uint32_t detId = it->first;
552 uint16_t
flag = it->second;
553 std::map<uint32_t,uint16_t>::iterator iPos =
badModuleList.find(detId);
557 badModuleList.insert(std::pair<uint32_t,uint16_t>(detId,flag));
560 errdet = bad_modules.size();
568 th2d->SetBinContent(xbin, ybin, val);
577 std::string mdir =
"MechanicalView";
579 std::string mechanical_dir = dqm_store->
pwd();
583 uint32_t detId = it->first;
584 std::string subdet_folder ;
586 if (!dqm_store->
dirExists(subdet_folder)) {
587 subdet_folder = mechanical_dir + subdet_folder.substr(subdet_folder.find(
"MechanicalView")+14);
588 if (!dqm_store->
dirExists(subdet_folder))
continue;
590 std::string bad_module_folder = subdet_folder +
"/" +
"BadModuleList";
593 std::ostringstream detid_str;
595 std::string full_path = bad_module_folder +
"/" + detid_str.str();
598 else me = dqm_store->
bookInt(detid_str.str());
599 me->
Fill(it->second);
625 std::string rdir =
"ReadoutView";
627 std::string fullpath = dqm_store->
pwd()
628 +
"/FedSummary/PerLumiSection/"
629 +
"lumiErrorFraction";
633 float global_fraction = 0.0;
635 for (
int ibin = 1; ibin <= th1->GetNbinsX(); ibin++) {
636 std::string
label = th1->GetXaxis()->GetBinLabel(ibin);
637 std::map<std::string, SubDetMEs>::iterator iPos =
SubDetMEsMap.find(label);
639 float fraction = 1.0 - th1->GetBinContent(ibin);
640 global_fraction += fraction;
642 iPos->second.DetFraction->Fill(fraction);
643 iPos->second.SToNFlag->Fill(-1.0);
644 iPos->second.SummaryFlag->Fill(fraction);
647 global_fraction = global_fraction/dets;
657 std::string
dir =
"Tracking";
659 dir =
"TrackParameters";
662 std::vector<MonitorElement*> meVec1;
663 std::vector<MonitorElement*> meVec2;
668 meVec1 = dqm_store->
getContents(dqm_store->
pwd()+
"/GeneralProperties");
669 meVec2 = dqm_store->
getContents(dqm_store->
pwd()+
"/HitProperties");
671 std::vector<MonitorElement*> meVec(meVec1.size() + meVec2.size());
672 std::merge(meVec1.begin(), meVec1.end(), meVec2.begin(), meVec2.end(), meVec.begin());
675 for (std::vector<MonitorElement*>::const_iterator itME = meVec.begin(); itME != meVec.end(); itME++) {
682 for (std::map<std::string, TrackingMEs>::const_iterator it =
TrackingMEsMap.begin();
685 std::string hname = it->second.HistoName+
"lumiFlag_";
686 float lower_cut = it->second.LowerCut;
687 float upper_cut = it->second.UpperCut;
688 if (name.find(hname) != std::string::npos) {
689 if (me->
getMean() <= lower_cut || me->
getMean() > upper_cut) status = 0.0;
691 it->second.TrackingFlag->Fill(status);
697 if (status == -1.0) gstatus = -1.0;
698 else gstatus = gstatus *
status;
static void setBadModuleFlag(std::string &hname, uint16_t &flg)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
const std::string & getName(void) const
get name of ME
MonitorElement * SToNFlag
uint32_t getDetFromBin(int layer, int ix, int iy)
bool bookedTrackingStatus_
void getSubDetFolder(const uint32_t &detid, std::string &folder_name)
void bookStatus(DQMStore *dqm_store)
void fillDetectorStatusAtLumi(DQMStore *dqm_store)
std::vector< std::string > getSubdirs(void) const
void fillDetectorStatus(DQMStore *dqm_store, const edm::ESHandle< SiStripDetCabling > &cabling)
static void getMEValue(MonitorElement *me, std::string &val)
std::map< std::string, std::string > SubDetFolderMap
void cd(void)
go to top directory (ie. root)
MonitorElement * SummaryFlag
void getModuleStatus(DQMStore *dqm_store, std::vector< MonitorElement * > &layer_mes, int &errdet)
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
tuple currentdir
parse figure configuration if found
void fillTrackingStatusAtLumi(DQMStore *dqm_store)
double getMean(int axis=1) const
get mean value of histogram along x, y or z axis (axis=1, 2, 3 respectively)
void initialiseBadModuleList()
MonitorElement * bookFloat(const char *name)
Book float.
SiStripQualityChecker(edm::ParameterSet const &ps)
int getNbinsY(void) const
get # of bins in Y-axis
std::map< std::string, SubDetMEs > SubDetMEsMap
virtual ~SiStripQualityChecker()
void fillStatus(DQMStore *dqm_store, const edm::ESHandle< SiStripDetCabling > &cabling)
Kind kind(void) const
Get the type of the monitor element.
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. "my/long/dir/my_histo")
std::vector< MonitorElement * > getContents(const std::string &path) const
MonitorElement * DetFractionReportMap
MonitorElement * TrackingFlag
bool dirExists(const std::string &path) const
true if directory exists
std::vector< QReport * > getQReports(void) const
get map of QReports
static int getMEStatus(MonitorElement *me)
MonitorElement * TrackSummaryReportGlobal
TH1F * getTH1F(void) const
void fillStatusAtLumi(DQMStore *dqm_store)
MonitorElement * SummaryReportMap
MonitorElement * SummaryReportGlobal
MonitorElement * SToNReportMap
void fillTrackingStatus(DQMStore *dqm_store)
int getNbinsX(void) const
get # of bins in X-axis
static const int STATUS_OK
MonitorElement * TrackSummaryReportMap
std::map< uint32_t, uint16_t > badModuleList
std::map< std::string, TrackingMEs > TrackingMEsMap
TH2F * getTH2F(void) const
MonitorElement * bookInt(const char *name)
Book int.
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void Reset(void)
reset ME (ie. contents, errors, etc)
void fillSubDetStatus(DQMStore *dqm_store, const edm::ESHandle< SiStripDetCabling > &cabling, SubDetMEs &mes, unsigned int xbin, float &gflag)
static bool goToDir(DQMStore *dqm_store, std::string name)
MonitorElement * DetFraction
void setCurrentFolder(const std::string &fullpath)
void fillFaultyModuleStatus(DQMStore *dqm_store)
void fillStatusHistogram(MonitorElement *, int xbin, int ybin, float val)
const std::string & pwd(void) const
static void getTopFolderPath(DQMStore *dqm_store, std::string type, std::string &path)