46 LogTrace (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
"[DTSegmentAnalysisTest]: Constructor";
50 detailedAnalysis =
parameters.getUntrackedParameter<
bool>(
"detailedAnalysis",
false);
51 normalizeHistoPlots =
parameters.getUntrackedParameter<
bool>(
"normalizeHistoPlots",
false);
52 runOnline =
parameters.getUntrackedParameter<
bool>(
"runOnline",
true);
71 LogTrace (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
"DTSegmentAnalysisTest: analyzed " <<
nevents <<
" events";
76 LogTrace (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
"[DTSegmentAnalysisTest]: BeginRun";
94 LogTrace (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest")
95 <<
"[DTSegmentAnalysisTest]: End of LS " << nLumiSegs
96 <<
". Client called in online mode , perform DQM client operation";
98 performClientDiagnostic(igetter);
110 LogTrace (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest")
111 <<
"[DTSegmentAnalysisTest]: endJob. Client called in offline mode , perform DQM client operation";
113 performClientDiagnostic(igetter);
116 if(normalizeHistoPlots) {
117 LogTrace (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
" Performing time-histo normalization" << endl;
120 if(hltDQMMode) hNevtPerLS = igetter.
get(topHistoFolder +
"/NevtPerLS");
121 else hNevtPerLS = igetter.
get(
"DT/EventInfo/NevtPerLS");
123 if(hNevtPerLS != 0) {
124 for(
int wheel = -2; wheel != 3; ++wheel) {
125 for(
int sector = 1; sector <= 12; ++sector) {
126 stringstream wheelstr; wheelstr << wheel;
127 stringstream sectorstr; sectorstr << sector;
128 string sectorHistoName = topHistoFolder +
"/Wheel" + wheelstr.str() +
129 "/Sector" + sectorstr.str() +
130 "/NSegmPerEvent_W" + wheelstr.str() +
131 "_Sec" + sectorstr.str();
143 LogError (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
"Histo NevtPerLS not found!" << endl;
150 summaryHistos[3]->Reset();
151 summaryHistos[4]->Reset();
152 vector<const DTChamber*>::const_iterator ch_it = muonGeom->chambers().begin();
153 vector<const DTChamber*>::const_iterator ch_end = muonGeom->chambers().end();
155 for (; ch_it != ch_end; ++ch_it) {
161 if (hNHits && hSegmOcc) {
163 TH1F * hNHits_root = hNHits->
getTH1F();
164 TH2F * hSegmOcc_root = hSegmOcc->
getTH2F();
165 TH2F * summary_histo_root = summaryHistos[3]->getTH2F();
167 int sector = chID.
sector();
168 if(sector == 13) sector=4;
169 if(sector == 14) sector=10;
172 if((chID.
station()!=4 && hNHits_root->GetMaximumBin() < maxPhiZHit)||
173 (chID.
station()==4 && hNHits_root->GetMaximumBin() < maxPhiHit)){
174 summaryHistos[chID.
wheel()]->setBinContent(sector, chID.
station(),1);
175 if(summary_histo_root->GetBinContent(sector, chID.
wheel()+3)<1)
176 summaryHistos[3]->setBinContent(sector, chID.
wheel()+3,1);
179 summaryHistos[chID.
wheel()]->setBinContent(sector, chID.
station(),0);
181 if(detailedAnalysis) {
188 TH2F * summary2_histo_root = summaryHistos[3]->getTH2F();
190 if(hSegmOcc_root->GetBinContent(sector,chID.
station())==0){
191 summaryHistos[chID.
wheel()]->setBinContent(sector, chID.
station(),2);
192 if(summary2_histo_root->GetBinContent(sector, chID.
wheel()+3)<2)
193 summaryHistos[3]->setBinContent(sector, chID.
wheel()+3,2);
197 if((sector == 4 || sector == 10) && chID.
station() == 4) weight = 1./8.;
198 summaryHistos[4]->Fill(sector, chID.
wheel(),
weight);
202 LogVerbatim (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest")
203 <<
"[DTSegmentAnalysisTest]: histos not found!!";
206 if(detailedAnalysis){
212 TH1F * chi2_histo_root = chi2_histo->
getTH1F();
214 double maximum = chi2_histo_root->GetXaxis()->GetXmax();
215 double minimum = chi2_histo_root->GetXaxis()->GetXmin();
216 int nbins = chi2_histo_root->GetXaxis()->GetNbins();
217 int thresholdBin = int(threshold/((maximum-minimum)/nbins));
219 double badSegments=0;
221 badSegments+=chi2_histo_root->GetBinContent(
bin);
224 if(chi2_histo_root->GetEntries()!=0){
225 double badSegmentsPercentual= badSegments/double(chi2_histo_root->GetEntries());
229 LogVerbatim (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest")
230 <<
"[DTSegmentAnalysisTest]: Histo: " << getMEName(chID,
"h4DChi2") <<
" not found!" << endl;
236 string nEvtsName =
"DT/EventInfo/Counters/nProcessedEventsSegment";
242 summaryHistos[4]->setEntries(nProcEvts < nMinEvts ? 10. : nProcEvts);
244 summaryHistos[4]->setEntries(nMinEvts + 1);
245 LogVerbatim (
"DTDQM|DTMonitorClient|DTOccupancyTest") <<
"[DTOccupancyTest] ME: "
246 << nEvtsName <<
" not found!" << endl;
249 if(detailedAnalysis){
251 string chi2CriterionName =
parameters.getUntrackedParameter<
string>(
"chi2TestName",
"chi2InRange");
253 histo != chi2Histos.end();
256 const QReport * theChi2QReport = (*histo).second->getQReport(chi2CriterionName);
258 vector<dqm::me_util::Channel> badChannels = theChi2QReport->
getBadChannels();
259 for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin();
260 channel != badChannels.end(); channel++) {
262 LogError (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
"Wheel: "<<(*histo).first.first
263 <<
" Sector: "<<(*histo).first.second
264 <<
" Bad stations: "<<(*channel).getBin()
265 <<
" Contents : "<<(*channel).getContents();
271 string segmRecHitCriterionName =
parameters.getUntrackedParameter<
string>(
"segmRecHitTestName",
"segmRecHitInRange");
273 histo != segmRecHitHistos.end();
276 const QReport * theSegmRecHitQReport = (*histo).second->getQReport(segmRecHitCriterionName);
277 if(theSegmRecHitQReport) {
278 vector<dqm::me_util::Channel> badChannels = theSegmRecHitQReport->
getBadChannels();
279 for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin();
280 channel != badChannels.end(); channel++) {
282 LogError (
"DTDQM|DTMonitorClient|DTSegmentAnalysisTest") <<
"Wheel: "<<(*histo).first.first
283 <<
" Sector: "<<(*histo).first.second
284 <<
" Bad stations on recHit number: "
285 <<(*channel).getBin()
287 <<(*channel).getContents();
298 stringstream wheel; wheel << chID.
wheel();
300 stringstream sector; sector << chID.
sector();
303 topHistoFolder +
"/Wheel" + wheel.str() +
304 "/Sector" + sector.str() +
305 "/Station" + station.str() +
"/";
307 string histoname = folderName + histoTag
309 +
"_St" + station.str()
310 +
"_Sec" + sector.str();
312 if(histoTag ==
"numberOfSegments")
314 topHistoFolder +
"/Wheel" + wheel.str() +
"/" +
315 histoTag + +
"_W" + wheel.str();
323 for(
int wh=-2; wh<=2; wh++){
324 stringstream wheel; wheel << wh;
325 string histoName =
"segmentSummary_W" + wheel.str();
329 summaryHistos[wh] = ibooker.
book2D(histoName.c_str(),histoName.c_str(),12,1,13,4,1,5);
331 summaryHistos[wh]->setBinLabel(1,
"MB1",2);
332 summaryHistos[wh]->setBinLabel(2,
"MB2",2);
333 summaryHistos[wh]->setBinLabel(3,
"MB3",2);
334 summaryHistos[wh]->setBinLabel(4,
"MB4",2);
336 if(detailedAnalysis){
337 for(
int sect=1; sect<=14; sect++){
338 stringstream sector; sector << sect;
339 string chi2HistoName =
"chi2BadSegmPercentual_W" + wheel.str() +
"_Sec" + sector.str();
340 ibooker.
setCurrentFolder(topHistoFolder +
"/Wheel" + wheel.str() +
"/Tests");
341 chi2Histos[make_pair(wh,sect)] = ibooker.
book1D(chi2HistoName.c_str(),chi2HistoName.c_str(),4,1,5);
342 chi2Histos[make_pair(wh,sect)]->
setBinLabel(1,
"MB1");
343 chi2Histos[make_pair(wh,sect)]->setBinLabel(2,
"MB2");
344 chi2Histos[make_pair(wh,sect)]->setBinLabel(3,
"MB3");
345 chi2Histos[make_pair(wh,sect)]->setBinLabel(4,
"MB4");
347 string segmHistoName =
"residualsOnSegmRecHitNumber_W" + wheel.str() +
"_Sec" + sector.str();
348 segmRecHitHistos[make_pair(wh,sect)] = ibooker.
book1D(segmHistoName.c_str(),segmHistoName.c_str(),4,1,5);
349 segmRecHitHistos[make_pair(wh,sect)]->
setBinLabel(1,
"MB1");
350 segmRecHitHistos[make_pair(wh,sect)]->setBinLabel(2,
"MB2");
351 segmRecHitHistos[make_pair(wh,sect)]->setBinLabel(3,
"MB3");
352 segmRecHitHistos[make_pair(wh,sect)]->setBinLabel(4,
"MB4");
358 string histoName =
"segmentSummary";
362 summaryHistos[3] = ibooker.
book2D(histoName.c_str(),histoName.c_str(),12,1,13,5,-2,3);
364 summaryHistos[3]->setAxisTitle(
"Wheel",2);
366 summaryHistos[4] = ibooker.
book2D(
"SegmentGlbSummary",histoName.c_str(),12,1,13,5,-2,3);
368 summaryHistos[4]->setAxisTitle(
"Wheel",2);
LuminosityBlockID id() const
T getUntrackedParameter(std::string const &, T const &) const
void endRun(edm::Run const &run, edm::EventSetup const &c)
MonitorElement * get(const std::string &path)
void beginRun(const edm::Run &, const edm::EventSetup &)
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)
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
double getFloatValue(void) const
MonitorElement * book1D(Args &&...args)
Abs< T >::type abs(const T &t)
void bookHistos(DQMStore::IBooker &)
DTSegmentAnalysisTest(const edm::ParameterSet &ps)
Constructor.
const std::vector< DQMChannel > & getBadChannels(void) const
std::string getMEName(const DTChamberId &chID, std::string histoTag)
Get the ME name.
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
virtual ~DTSegmentAnalysisTest()
Destructor.
TH1F * getTH1F(void) const
LuminosityBlockNumber_t luminosityBlock() const
void normalizeTo(const MonitorElement *histForNorm)
int station() const
Return the station number.
TH2F * getTH2F(void) const
int wheel() const
Return the wheel number.
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void performClientDiagnostic(DQMStore::IGetter &)
Perform client diagnostic operations.