CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DTChamberEfficiencyTest.cc
Go to the documentation of this file.
1 
2 
3 /*
4  * See header file for a description of this class.
5  *
6  * $Date: 2008/10/22 09:40:34 $
7  * $Revision: 1.14 $
8  * \author G. Mila - INFN Torino
9  */
10 
11 
15 
16 // Framework
18 
19 
20 // Geometry
23 
25 
26 #include <stdio.h>
27 #include <sstream>
28 #include <math.h>
29 
30 
31 using namespace edm;
32 using namespace std;
33 
34 
35 
37 
38  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "[DTChamberEfficiencyTest]: Constructor";
39 
40  parameters = ps;
41 
42  dbe = edm::Service<DQMStore>().operator->();
43 
44  prescaleFactor = parameters.getUntrackedParameter<int>("diagnosticPrescale", 1);
45 
46 }
47 
48 
49 
51 
52  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "DTChamberEfficiencyTest: analyzed " << nevents << " events";
53 
54 }
55 
56 
58 
59  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") <<"[DTChamberEfficiencyTest]: BeginJob";
60 
61  nevents = 0;
62 
63 }
64 
65 
67 
68  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") <<"[DTChamberEfficiencyTest]: Begin of LS transition";
69 
70  // Get the run number
71  run = lumiSeg.run();
72 
73 }
74 
75 
77 
78  // Get the DT Geometry
79  setup.get<MuonGeometryRecord>().get(muonGeom);
80 
81  // Loop over all the chambers
82  vector<DTChamber*>::const_iterator ch_it = muonGeom->chambers().begin();
83  vector<DTChamber*>::const_iterator ch_end = muonGeom->chambers().end();
84  for (; ch_it != ch_end; ++ch_it) {
85  // histo booking
86  bookHistos((*ch_it)->id());
87  }
88 
89  //summary histo booking
90  bookHistos();
91 }
92 
94 
95  nevents++;
96  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "[DTChamberEfficiencyTest]: "<<nevents<<" events";
97 
98 }
99 
100 
102 
103  // counts number of updats (online mode) or number of events (standalone mode)
104  //nevents++;
105  // if running in standalone perform diagnostic only after a reasonalbe amount of events
106  //if ( parameters.getUntrackedParameter<bool>("runningStandalone", false) &&
107  // nevents%parameters.getUntrackedParameter<int>("diagnosticPrescale", 1000) != 0 ) return;
108  //edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "[DTChamberEfficiencyTest]: "<<nevents<<" updates";
109 
110  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") <<"[DTChamberEfficiencyTest]: End of LS transition, performing the DQM client operation";
111 
112  // counts number of lumiSegs
113  nLumiSegs = lumiSeg.id().luminosityBlock();
114 
115  // prescale factor
116  if ( nLumiSegs%prescaleFactor != 0 ) return;
117 
118  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") <<"[DTChamberEfficiencyTest]: "<<nLumiSegs<<" updates";
119 
120 
121  vector<DTChamber*>::const_iterator ch_it = muonGeom->chambers().begin();
122  vector<DTChamber*>::const_iterator ch_end = muonGeom->chambers().end();
123 
124  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "[DTChamberEfficiencyTest]: ChamberEfficiency tests results";
125 
126  // Loop over the chambers
127  for (; ch_it != ch_end; ++ch_it) {
128  DTChamberId chID = (*ch_it)->id();
129 
130  stringstream wheel; wheel << chID.wheel();
131  stringstream station; station << chID.station();
132  stringstream sector; sector << chID.sector();
133 
134  string HistoName = "W" + wheel.str() + "_St" + station.str() + "_Sec" + sector.str();
135 
136  // Get the ME produced by EfficiencyTask Source
137  MonitorElement * GoodSegDen_histo = dbe->get(getMEName("hEffGoodSegVsPosDen", chID));
138  MonitorElement * GoodCloseSegNum_histo = dbe->get(getMEName("hEffGoodCloseSegVsPosNum", chID));
139 
140  // ME -> TH1F
141  if(GoodSegDen_histo && GoodCloseSegNum_histo) {
142  TH2F * GoodSegDen_histo_root = GoodSegDen_histo->getTH2F();
143  TH2F * GoodCloseSegNum_histo_root = GoodCloseSegNum_histo->getTH2F();
144 
145  int lastBinX=(*GoodSegDen_histo_root).GetNbinsX();
146  TH1D* proxN=GoodCloseSegNum_histo_root->ProjectionX();
147  TH1D* proxD=GoodSegDen_histo_root->ProjectionX();
148 
149  int lastBinY=(*GoodSegDen_histo_root).GetNbinsY();
150  TH1D* proyN=GoodCloseSegNum_histo_root->ProjectionY();
151  TH1D* proyD=GoodSegDen_histo_root->ProjectionY();
152 
153  for(int xBin=1; xBin<=lastBinX; xBin++) {
154  if(proxD->GetBinContent(xBin)!=0){
155  float Xefficiency = proxN->GetBinContent(xBin) / proxD->GetBinContent(xBin);
156  xEfficiencyHistos.find(HistoName)->second->setBinContent(xBin, Xefficiency);
157  }
158 
159  for(int yBin=1; yBin<=lastBinY; yBin++) {
160  if(GoodSegDen_histo_root->GetBinContent(xBin, yBin)!=0){
161  float XvsYefficiency = GoodCloseSegNum_histo_root->GetBinContent(xBin, yBin) / GoodSegDen_histo_root->GetBinContent(xBin, yBin);
162  xVSyEffHistos.find(HistoName)->second->setBinContent(xBin, yBin, XvsYefficiency);
163  }
164  }
165 
166  }
167 
168  for(int yBin=1; yBin<=lastBinY; yBin++) {
169  if(proyD->GetBinContent(yBin)!=0){
170  float Yefficiency = proyN->GetBinContent(yBin) / proyD->GetBinContent(yBin);
171  yEfficiencyHistos.find(HistoName)->second->setBinContent(yBin, Yefficiency);
172  }
173  }
174  }
175  } // loop on chambers
176 
177 
178  // ChamberEfficiency test on X axis
179  string XEfficiencyCriterionName = parameters.getUntrackedParameter<string>("XEfficiencyTestName","ChEfficiencyInRangeX");
180  for(map<string, MonitorElement*>::const_iterator hXEff = xEfficiencyHistos.begin();
181  hXEff != xEfficiencyHistos.end();
182  hXEff++) {
183  const QReport * theXEfficiencyQReport = (*hXEff).second->getQReport(XEfficiencyCriterionName);
184  if(theXEfficiencyQReport) {
185  vector<dqm::me_util::Channel> badChannels = theXEfficiencyQReport->getBadChannels();
186  for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin();
187  channel != badChannels.end(); channel++) {
188  edm::LogError ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "Chamber : " << (*hXEff).first << " Bad XChamberEfficiency channels: "<<(*channel).getBin()<<" Contents : "<<(*channel).getContents();
189  }
190  // FIXME: getMessage() sometimes returns and invalid string (null pointer inside QReport data member)
191  // edm::LogWarning ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "-------- Chamber : "<<(*hXEff).first<<" "<<theXEfficiencyQReport->getMessage()<<" ------- "<<theXEfficiencyQReport->getStatus();
192  }
193  }
194 
195 
196  // ChamberEfficiency test on Y axis
197  string YEfficiencyCriterionName = parameters.getUntrackedParameter<string>("YEfficiencyTestName","ChEfficiencyInRangeY");
198  for(map<string, MonitorElement*>::const_iterator hYEff = yEfficiencyHistos.begin();
199  hYEff != yEfficiencyHistos.end();
200  hYEff++) {
201  const QReport * theYEfficiencyQReport = (*hYEff).second->getQReport(YEfficiencyCriterionName);
202  if(theYEfficiencyQReport) {
203  vector<dqm::me_util::Channel> badChannels = theYEfficiencyQReport->getBadChannels();
204  for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin();
205  channel != badChannels.end(); channel++) {
206  edm::LogError ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "Chamber : " << (*hYEff).first <<" Bad YChamberEfficiency channels: "<<(*channel).getBin()<<" Contents : "<<(*channel).getContents();
207  }
208  // FIXME: getMessage() sometimes returns and invalid string (null pointer inside QReport data member)
209  // edm::LogWarning ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "-------- Chamber : "<<(*hYEff).first<<" "<<theYEfficiencyQReport->getMessage()<<" ------- "<<theYEfficiencyQReport->getStatus();
210  }
211  }
212 
213  //Fill the report summary histos
214  for(int wh=-2; wh<=2; wh++){
215  for(int sec=1; sec<=12; sec++){
216  for(int st=1; st<=4; st++){
217 
218  summaryHistos[wh]->Fill(sec,st,1);
219 
220  }
221  }
222  }
223 
224 }
225 
226 
227 
229 
230  edm::LogVerbatim ("DTDQM|DTMonitorClient|DTChamberEfficiencyTest") << "[DTChamberEfficiencyTest] endjob called!";
231 
232 }
233 
234 
235 
236 
237 string DTChamberEfficiencyTest::getMEName(string histoTag, const DTChamberId & chID) {
238 
239  stringstream wheel; wheel << chID.wheel();
240  stringstream station; station << chID.station();
241  stringstream sector; sector << chID.sector();
242 
243  string folderRoot = parameters.getUntrackedParameter<string>("folderRoot", "Collector/FU0/");
244  string folderName =
245  folderRoot + "DT/01-DTChamberEfficiency/Task/Wheel" + wheel.str() +
246  "/Sector" + sector.str() +
247  "/Station" + station.str() + "/";
248 
249  string histoname = folderName + histoTag
250  + "_W" + wheel.str()
251  + "_St" + station.str()
252  + "_Sec" + sector.str();
253 
254  return histoname;
255 
256 }
257 
258 
260 
261  stringstream wheel; wheel << chId.wheel();
262  stringstream station; station << chId.station();
263  stringstream sector; sector << chId.sector();
264 
265  string HistoName = "W" + wheel.str() + "_St" + station.str() + "_Sec" + sector.str();
266  string xEfficiencyHistoName = "xEfficiency_" + HistoName;
267  string yEfficiencyHistoName = "yEfficiency_" + HistoName;
268  string xVSyEffHistoName = "xVSyEff_" + HistoName;
269 
270  dbe->setCurrentFolder("DT/01-DTChamberEfficiency/Wheel" + wheel.str() +
271  "/Sector" + sector.str() +
272  "/Station" + station.str());
273 
274  xEfficiencyHistos[HistoName] = dbe->book1D(xEfficiencyHistoName.c_str(),xEfficiencyHistoName.c_str(),25,-250.,250.);
275  yEfficiencyHistos[HistoName] = dbe->book1D(yEfficiencyHistoName.c_str(),yEfficiencyHistoName.c_str(),25,-250.,250.);
276  xVSyEffHistos[HistoName] = dbe->book2D(xVSyEffHistoName.c_str(),xVSyEffHistoName.c_str(),25,-250.,250., 25,-250.,250.);
277 
278 }
279 
280 
282 
283  for(int wh=-2; wh<=2; wh++){
284  stringstream wheel; wheel << wh;
285  string histoName = "chEfficiencySummary_W" + wheel.str();
286  dbe->setCurrentFolder("DT/01-DTChamberEfficiency");
287  summaryHistos[wh] = dbe->book2D(histoName.c_str(),histoName.c_str(),12,1,13,4,1,5);
288  summaryHistos[wh]->setAxisTitle("Sector",1);
289  summaryHistos[wh]->setBinLabel(1,"MB1",2);
290  summaryHistos[wh]->setBinLabel(2,"MB2",2);
291  summaryHistos[wh]->setBinLabel(3,"MB3",2);
292  summaryHistos[wh]->setBinLabel(4,"MB4",2);
293  }
294 
295 }
LuminosityBlockID id() const
void bookHistos()
book the report summary
void beginRun(const edm::Run &run, const edm::EventSetup &setup)
BeginRun.
virtual ~DTChamberEfficiencyTest()
Destructor.
void beginLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &context)
void bookHistos()
Definition: Histogram.h:33
std::string getMEName(std::string histoTag, const DTChamberId &chID)
Get the ME name.
RunNumber_t run() const
int nevents
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &c)
DQM Client Diagnostic.
const std::vector< DQMChannel > & getBadChannels(void) const
Definition: QReport.h:33
void analyze(const edm::Event &e, const edm::EventSetup &c)
Analyze.
const T & get() const
Definition: EventSetup.h:55
LuminosityBlockNumber_t luminosityBlock() const
std::string HistoName
int sector() const
Definition: DTChamberId.h:63
int station() const
Return the station number.
Definition: DTChamberId.h:53
TH2F * getTH2F(void) const
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:47
DTChamberEfficiencyTest(const edm::ParameterSet &ps)
Constructor.
Definition: Run.h:31