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