CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DTTriggerEfficiencyTest.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author C. Battilana - CIEMAT
5  */
6 
7 
8 // This class header
10 
11 // Framework headers
16 
17 // Geometry
20 
21 // Trigger
23 
24 // Root
25 #include "TF1.h"
26 #include "TProfile.h"
27 
28 
29 //C++ headers
30 #include <iostream>
31 #include <sstream>
32 
33 using namespace edm;
34 using namespace std;
35 
36 
38 
39  setConfig(ps,"DTTriggerEfficiency");
40  baseFolderDCC = "DT/03-LocalTrigger-DCC/";
41  baseFolderDDU = "DT/04-LocalTrigger-DDU/";
42  detailedPlots = ps.getUntrackedParameter<bool>("detailedAnalysis",true);
43 
44 }
45 
46 
48 
49 }
50 
51 
53 
55 
56 }
57 
58 
60 
62  trigGeomUtils = new DTTrigGeomUtils(muonGeom);
63 
64  vector<string>::const_iterator iTr = trigSources.begin();
65  vector<string>::const_iterator trEnd = trigSources.end();
66  vector<string>::const_iterator iHw = hwSources.begin();
67  vector<string>::const_iterator hwEnd = hwSources.end();
68 
69 
70  //Booking
71  if(parameters.getUntrackedParameter<bool>("staticBooking", true)){
72  for (; iTr != trEnd; ++iTr){
73  trigSource = (*iTr);
74  for (; iHw != hwEnd; ++iHw){
75  hwSource = (*iHw);
76  // Loop over the TriggerUnits
77  bookHistos("TrigEffPhi","");
78  bookHistos("TrigEffCorrPhi","");
79  for (int wh=-2; wh<=2; ++wh){
80  if (detailedPlots) {
81  for (int sect=1; sect<=12; ++sect){
82  for (int stat=1; stat<=4; ++stat){
83  DTChamberId chId(wh,stat,sect);
84  bookChambHistos(chId,"TrigEffPosvsAnglePhi","Segment");
85  bookChambHistos(chId,"TrigEffPosvsAngleCorrPhi","Segment");
86  }
87  }
88  }
89  bookWheelHistos(wh,"TrigEffPhi","");
90  bookWheelHistos(wh,"TrigEffCorrPhi","");
91  }
92  }
93  }
94  }
95 
96 }
97 
98 
100 
101  // Loop over Trig & Hw sources
102  for (vector<string>::const_iterator iTr = trigSources.begin(); iTr != trigSources.end(); ++iTr){
103  trigSource = (*iTr);
104  for (vector<string>::const_iterator iHw = hwSources.begin(); iHw != hwSources.end(); ++iHw){
105  hwSource = (*iHw);
106  // Loop over the TriggerUnits
107  if( globalEffDistr.find(fullName("TrigEffPhi")) == globalEffDistr.end() ){
108  bookHistos("TrigEffPhi","");
109  bookHistos("TrigEffCorrPhi","");
110  }
111  for (int wh=-2; wh<=2; ++wh){
112 
113  TH2F * TrigEffDenum = getHisto<TH2F>(dbe->get(getMEName("TrigEffDenum","Task",wh)));
114  TH2F * TrigEffNum = getHisto<TH2F>(dbe->get(getMEName("TrigEffNum","Task",wh)));
115  TH2F * TrigEffCorrNum = getHisto<TH2F>(dbe->get(getMEName("TrigEffCorrNum","Task",wh)));
116 
117  if (TrigEffDenum && TrigEffNum && TrigEffCorrNum && TrigEffDenum->GetEntries()>1) {
118 
119  if( whME[wh].find(fullName("TrigEffPhi")) == whME[wh].end() ){
120  bookWheelHistos(wh,"TrigEffPhi","");
121  bookWheelHistos(wh,"TrigEffCorrPhi","");
122  }
123 
124  MonitorElement* Eff1DAll_TrigEffPhi = (&globalEffDistr)->find(fullName("TrigEffPhi"))->second;
125  MonitorElement* Eff1DAll_TrigEffCorrPhi = (&globalEffDistr)->find(fullName("TrigEffCorrPhi"))->second;
126 
127  MonitorElement* Eff1DWh_TrigEffPhi = (&(EffDistrPerWh[wh]))->find(fullName("TrigEffPhi"))->second;
128  MonitorElement* Eff1DWh_TrigEffCorrPhi = (&(EffDistrPerWh[wh]))->find(fullName("TrigEffCorrPhi"))->second;
129 
130  MonitorElement* Eff2DWh_TrigEffPhi = (&(whME[wh]))->find(fullName("TrigEffPhi"))->second;
131  MonitorElement* Eff2DWh_TrigEffCorrPhi = (&(whME[wh]))->find(fullName("TrigEffCorrPhi"))->second;
132 
133  makeEfficiencyME(TrigEffNum,TrigEffDenum,Eff2DWh_TrigEffPhi,Eff1DWh_TrigEffPhi,Eff1DAll_TrigEffPhi);
134  makeEfficiencyME(TrigEffCorrNum,TrigEffDenum,Eff2DWh_TrigEffCorrPhi,Eff1DWh_TrigEffCorrPhi,Eff1DAll_TrigEffCorrPhi);
135 
136  }
137 
138  if (detailedPlots) {
139  for (int stat=1; stat<=4; ++stat){
140  for (int sect=1; sect<=12; ++sect){
141  DTChamberId chId(wh,stat,sect);
142  uint32_t indexCh = chId.rawId();
143 
144  // Perform Efficiency analysis (Phi+Segments 2D)
145  TH2F * TrackPosvsAngle = getHisto<TH2F>(dbe->get(getMEName("TrackPosvsAngle","Segment", chId)));
146  TH2F * TrackPosvsAngleAnyQual = getHisto<TH2F>(dbe->get(getMEName("TrackPosvsAngleAnyQual","Segment", chId)));
147  TH2F * TrackPosvsAngleCorr = getHisto<TH2F>(dbe->get(getMEName("TrackPosvsAngleCorr","Segment", chId)));
148 
149  if (TrackPosvsAngle && TrackPosvsAngleAnyQual && TrackPosvsAngleCorr && TrackPosvsAngle->GetEntries()>1) {
150 
151  if( chambME[indexCh].find(fullName("TrigEffAnglePhi")) == chambME[indexCh].end()){
152  bookChambHistos(chId,"TrigEffPosvsAnglePhi","Segment");
153  bookChambHistos(chId,"TrigEffPosvsAngleCorrPhi","Segment");
154  }
155 
156  std::map<std::string,MonitorElement*> *innerME = &(chambME[indexCh]);
157  makeEfficiencyME(TrackPosvsAngleAnyQual,TrackPosvsAngle,innerME->find(fullName("TrigEffPosvsAnglePhi"))->second);
158  makeEfficiencyME(TrackPosvsAngleCorr,TrackPosvsAngle,innerME->find(fullName("TrigEffPosvsAngleCorrPhi"))->second);
159 
160  }
161  }
162  }
163  }
164  }
165 
166  }
167  }
168 
169 }
170 
172 
173  TH2F* efficiency = result2DWh->getTH2F();
174  efficiency->Divide(numerator,denominator,1,1,"");
175 
176  int nbinsx = efficiency->GetNbinsX();
177  int nbinsy = efficiency->GetNbinsY();
178  for (int binx=1; binx<=nbinsx; ++binx){
179  for (int biny=1; biny<=nbinsy; ++biny){
180  float error = 0;
181  float bineff = efficiency->GetBinContent(binx,biny);
182 
183  result1DWh->Fill(bineff);
184  result1D->Fill(bineff);
185 
186  if (denominator->GetBinContent(binx,biny)){
187  error = sqrt(bineff*(1-bineff)/denominator->GetBinContent(binx,biny));
188  }
189  else {
190  error = 1;
191  efficiency->SetBinContent(binx,biny,0.);
192  }
193 
194  efficiency->SetBinError(binx,biny,error);
195  }
196  }
197 
198 }
199 
201 
202  TH2F* efficiency = result2DWh->getTH2F();
203  efficiency->Divide(numerator,denominator,1,1,"");
204 
205  int nbinsx = efficiency->GetNbinsX();
206  int nbinsy = efficiency->GetNbinsY();
207  for (int binx=1; binx<=nbinsx; ++binx){
208  for (int biny=1; biny<=nbinsy; ++biny){
209  float error = 0;
210  float bineff = efficiency->GetBinContent(binx,biny);
211 
212  if (denominator->GetBinContent(binx,biny)){
213  error = sqrt(bineff*(1-bineff)/denominator->GetBinContent(binx,biny));
214  }
215  else {
216  error = 1;
217  efficiency->SetBinContent(binx,biny,0.);
218  }
219 
220  efficiency->SetBinError(binx,biny,error);
221  }
222  }
223 
224 }
225 
226 string DTTriggerEfficiencyTest::getMEName(string histoTag, string folder, int wh) {
227 
228  stringstream wheel; wheel << wh;
229 
230  string folderName = topFolder(hwSource=="DCC") + folder + "/";
231 
232  string histoname = sourceFolder + folderName
233  + fullName(histoTag) + "_W" + wheel.str();
234 
235  return histoname;
236 
237 }
238 
239 void DTTriggerEfficiencyTest::bookHistos(string hTag,string folder) {
240 
241  string basedir;
242  bool isDCC = hwSource=="DCC" ;
243  basedir = topFolder(isDCC); //Book summary histo outside Task directory
244 
245  if (folder != "") {
246  basedir += folder +"/" ;
247  }
248  dbe->setCurrentFolder(basedir);
249 
250  string fullTag = fullName(hTag);
251  string hname = fullTag + "_All";
252 
253  globalEffDistr[fullTag] = dbe->book1D(hname.c_str(),hname.c_str(),51,0.,1.02);
254  globalEffDistr[fullTag] ->setAxisTitle("Trig Eff",1);
255 
256 }
257 
258 void DTTriggerEfficiencyTest::bookWheelHistos(int wheel,string hTag,string folder) {
259 
260  stringstream wh; wh << wheel;
261  string basedir;
262  bool isDCC = hwSource=="DCC" ;
263  if (hTag.find("Summary") != string::npos) {
264  basedir = topFolder(isDCC); //Book summary histo outside wheel directories
265  } else {
266  basedir = topFolder(isDCC) + "Wheel" + wh.str() + "/" ;
267 
268  }
269  if (folder != "") {
270  basedir += folder +"/" ;
271  }
272  dbe->setCurrentFolder(basedir);
273 
274  string fullTag = fullName(hTag);
275  string hname = fullTag+ "_W" + wh.str();
276 
277  string hnameAll = fullTag+ "_All_W" + wh.str();
278 
279  LogTrace(category()) << "[" << testName << "Test]: booking "<< basedir << hname;
280 
281  (EffDistrPerWh[wheel])[fullTag] = dbe->book1D(hnameAll.c_str(),hnameAll.c_str(),51,0.,1.02);
282 
283  if (hTag.find("Phi")!= string::npos ||
284  hTag.find("Summary") != string::npos ){
285  MonitorElement* me = dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,4,1,5);
286 
287  // setLabelPh(me);
288  me->setBinLabel(1,"MB1",2);
289  me->setBinLabel(2,"MB2",2);
290  me->setBinLabel(3,"MB3",2);
291  me->setBinLabel(4,"MB4",2);
292  me->setAxisTitle("Sector",1);
293 
294  whME[wheel][fullTag] = me;
295  return;
296  }
297 
298  if (hTag.find("Theta") != string::npos){
299  MonitorElement* me =dbe->book2D(hname.c_str(),hname.c_str(),12,1,13,3,1,4);
300 
301  // setLabelTh(me);
302  me->setBinLabel(1,"MB1",2);
303  me->setBinLabel(2,"MB2",2);
304  me->setBinLabel(3,"MB3",2);
305  me->setAxisTitle("Sector",1);
306 
307  whME[wheel][fullTag] = me;
308  return;
309  }
310 
311 }
312 
313 void DTTriggerEfficiencyTest::bookChambHistos(DTChamberId chambId, string htype, string folder) {
314 
315  stringstream wheel; wheel << chambId.wheel();
316  stringstream station; station << chambId.station();
317  stringstream sector; sector << chambId.sector();
318 
319  string fullType = fullName(htype);
320  bool isDCC = hwSource=="DCC" ;
321  string HistoName = fullType + "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
322 
323  dbe->setCurrentFolder(topFolder(isDCC) +
324  "Wheel" + wheel.str() +
325  "/Sector" + sector.str() +
326  "/Station" + station.str() +
327  "/" + folder + "/");
328 
329  LogTrace(category()) << "[" << testName << "Test]: booking " + topFolder(isDCC) + "Wheel" << wheel.str()
330  <<"/Sector" << sector.str() << "/Station" << station.str() << "/" + folder + "/" << HistoName;
331 
332 
333  uint32_t indexChId = chambId.rawId();
334  float min, max;
335  int nbins;
336  trigGeomUtils->phiRange(chambId,min,max,nbins,20);
337  if (htype.find("TrigEffPosvsAnglePhi") == 0 ){
338  chambME[indexChId][fullType] = dbe->book2D(HistoName.c_str(),"Trigger efficiency (any qual.) position vs angle (Phi)",12,-30.,30.,nbins,min,max);
339  return;
340  }
341  if (htype.find("TrigEffPosvsAngleCorrPhi") == 0 ){
342  chambME[indexChId][fullType] = dbe->book2D(HistoName.c_str(),"Trigger efficiency (correlated) pos vs angle (Phi)",12,-30.,30.,nbins,min,max);
343  return;
344  }
345 
346 }
void makeEfficiencyME(TH2F *numerator, TH2F *denominator, MonitorElement *result2DWh, MonitorElement *result1DWh, MonitorElement *result1D)
Compute 1D/2D efficiency plots.
T getUntrackedParameter(std::string const &, T const &) const
dictionary parameters
Definition: Parameters.py:2
void bookWheelHistos(int wheel, std::string hTag, std::string folder)
Book the new MEs (for each wheel)
list numerator
Definition: cuy.py:483
void bookChambHistos(DTChamberId chambId, std::string htype, std::string folder="")
Book the new MEs (for each chamber)
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 beginRun(edm::Run const &run, edm::EventSetup const &context)
BeginRun.
void beginRun(const edm::Run &r, const edm::EventSetup &c)
BeginRun.
DTTriggerEfficiencyTest(const edm::ParameterSet &ps)
Constructor.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
void bookHistos(std::string hTag, std::string folder)
Book the new MEs (global)
virtual ~DTTriggerEfficiencyTest()
Destructor.
void Fill(long long x)
void bookHistos()
Definition: Histogram.h:33
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
U second(std::pair< T, U > const &p)
list denominator
Definition: cuy.py:484
T sqrt(T t)
Definition: SSEVec.h:48
std::string getMEName(std::string histoTag, std::string folder, int wh)
Get the ME name (by wheel)
EventID const & min(EventID const &lh, EventID const &rh)
Definition: EventID.h:132
void runClientDiagnostic()
DQM Client Diagnostic.
#define LogTrace(id)
string fullName
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 setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: Run.h:41
EventID const & max(EventID const &lh, EventID const &rh)
Definition: EventID.h:137