CMS 3D CMS Logo

DTRunConditionVarClient.cc
Go to the documentation of this file.
1 /******* \class DTRunConditionVarClient *******
2  *
3  * Description:
4  *
5  * detailed description
6  *
7  * \author : Paolo Bellan, Antonio Branca
8  * $date : 23/09/2011 15:42:04 CET $
9  *
10  * Modification:
11  *
12  * threadsafe version (//-) oct/nov 2014 - WATWanAbdullah -ncpp-um-my
13  *
14  *
15  *********************************/
16 
20 
23 
27 
28 #include <cstdio>
29 #include <sstream>
30 #include <cmath>
31 
32 using namespace edm;
33 using namespace std;
34 
36 {
37 
38  LogVerbatim ("DTDQM|DTMonitorClient|DTRunConditionVarClient")
39  << "DTRunConditionVarClient: Constructor called";
40 
41 
42  minRangeVDrift = pSet.getUntrackedParameter<double>("minRangeVDrift");
43  maxRangeVDrift = pSet.getUntrackedParameter<double>("maxRangeVDrift");
44  minRangeT0 = pSet.getUntrackedParameter<double>("minRangeT0");
45  maxRangeT0 = pSet.getUntrackedParameter<double>("maxRangeT0");
46 
47  maxGoodVDriftDev = pSet.getUntrackedParameter<double>("maxGoodVDriftDev");
48  minBadVDriftDev = pSet.getUntrackedParameter<double>("minBadVDriftDev");
49  maxGoodT0 = pSet.getUntrackedParameter<double>("maxGoodT0");
50  minBadT0 = pSet.getUntrackedParameter<double>("minBadT0");
51 
52  maxGoodVDriftSigma = pSet.getUntrackedParameter<double>("maxGoodVDriftSigma");
53  minBadVDriftSigma = pSet.getUntrackedParameter<double>("minBadVDriftSigma");
54  maxGoodT0Sigma = pSet.getUntrackedParameter<double>("maxGoodT0Sigma");
55  minBadT0Sigma = pSet.getUntrackedParameter<double>("minBadT0Sigma");
56 
57  nevents = 0;
58 
59  bookingdone = false;
60 
61 }
62 
64 {
65  LogVerbatim ("DTDQM|DTMonitorClient|DTRunConditionVarClient")
66  << "DTRunConditionVarClient: Destructor called";
67 }
68 
69 void DTRunConditionVarClient::beginRun(const Run& run, const EventSetup& context){
70 
71  LogTrace ("DTDQM|DTMonitorClient|DTResolutionAnalysisTest") <<"[DTRunConditionVarClient]: BeginRun";
72  // Get the map of vdrift from the setup
73  context.get<DTMtimeRcd>().get(mTime);
74  mTimeMap_ = &*mTime;
75 }
76 
77 
78 
80  edm::LuminosityBlock const & lumiSeg, edm::EventSetup const & context)
81 {
82 
83 }
84 
86 {
87  LogVerbatim ("DTDQM|DTMonitorClient|DTRunConditionVarClient")
88  << "DTRunConditionVarClient: end job";
89 
90  ibooker.setCurrentFolder("DT/02-Segments");
91 
92  glbVDriftSummary = ibooker.book2D("VDriftGlbSummary", "# of MBs with good mean and good sigma of vDrift",12,1,13,5,-2,3);
93  glbT0Summary = ibooker.book2D("T0GlbSummary", "# of MBs with good mean and good sigma of t0",12,1,13,5,-2,3);
94 
95  ibooker.setCurrentFolder("DT/02-Segments/02-MeanVDrift");
96 
97  summaryHistos["MeanVDriftGlbSummary"] = ibooker.book2D("MeanVDriftGlbSummary","mean VDrift average per sector",12,1.,13.,5,-2.,3.);
98  allwheelHistos["allMeanVDrift"] = ibooker.book1D("VDriftMeanAllWheels","mean VDrift for all chambers",60,0.0048,0.006);
99 
100  ibooker.setCurrentFolder("DT/02-Segments/02-SigmaVDrift");
101 
102  summaryHistos["SigmaVDriftGlbSummary"] = ibooker.book2D("SigmaVDriftGlbSummary","# of Chambers with good sigma VDrift",12,1.,13.,5,-2.,3.);
103  allwheelHistos["allSigmaVDrift"] = ibooker.book1D("VDriftSigmaAllWheels","sigma VDrift for all chambers",30,0.,0.0006);
104 
105  ibooker.setCurrentFolder("DT/02-Segments/03-MeanT0");
106 
107  summaryHistos["MeanT0GlbSummary"] = ibooker.book2D("MeanT0GlbSummary","mean T0 average per sector",12,1.,13.,5,-2.,3.);
108  allwheelHistos["allMeanT0"] = ibooker.book1D("T0MeanAllWheels","mean T0 for all chambers",100,-25.,25.);
109 
110  ibooker.setCurrentFolder("DT/02-Segments/03-SigmaT0");
111 
112  summaryHistos["SigmaT0GlbSummary"] = ibooker.book2D("SigmaT0GlbSummary","# of Chambers with good sigma T0",12,1.,13.,5,-2.,3.);
113  allwheelHistos["allSigmaT0"] = ibooker.book1D("T0SigmaAllWheels","sigma T0 for alla chambers",50,0,25);
114 
115  for(int wh=-2; wh<=2; wh++) {
116  bookWheelHistos(ibooker,"MeanVDrift","02-MeanVDrift",wh,60,0.0048,0.006,true);
117  bookWheelHistos(ibooker,"SigmaVDrift","02-SigmaVDrift",wh,30,0.,0.0006);
118  bookWheelHistos(ibooker,"MeanT0","03-MeanT0",wh,100,-25.,25.);
119  bookWheelHistos(ibooker,"SigmaT0","03-SigmaT0",wh,50,0,25);
120  }
121 
122 
123  for(int wheel=-2;wheel<=2;wheel++){
124  for(int sec=1; sec<=14; sec++) {
125  for(int stat=1; stat<=4; stat++) {
126 
127  if( (sec == 13 || sec == 14) && stat != 4 ) continue;
128 
129  // Get the ME produced by DTRunConditionVar Source
130  MonitorElement* VDriftME = getChamberHistos(igetter,DTChamberId(wheel,stat,sec),"VDrift_FromSegm");
131  MonitorElement* T0ME = getChamberHistos(igetter,DTChamberId(wheel,stat,sec),"T0_FromSegm");
132 
133  if (!VDriftME || !T0ME) {
134  edm::LogWarning("DTRunConditionVarClient") << "ME not available" << std::endl;
135  return;
136  }
137 
138 
139  // Get the means per chamber
140  float vDriftMean = VDriftME->getMean();
141  float t0Mean = T0ME->getMean();
142 
143  // Get the sigma per chamber
144  float vDriftSigma = VDriftME->getRMS();
145  float t0Sigma = T0ME->getRMS();
146 
147  if( VDriftME->getEntries() != 0 ) {
148 
149  allwheelHistos["allMeanVDrift"] -> Fill(vDriftMean);
150  allwheelHistos["allSigmaVDrift"] -> Fill(vDriftSigma);
151 
152  (wheelHistos[wheel])["MeanVDrift"] -> Fill(vDriftMean);
153  (wheelHistos[wheel])["SigmaVDrift"] -> Fill(vDriftSigma);
154 
155  }
156 
157 
158  if( T0ME->getEntries() != 0 ) {
159 
160  allwheelHistos["allMeanT0"] -> Fill(t0Mean);
161  allwheelHistos["allSigmaT0"] -> Fill(t0Sigma);
162 
163  (wheelHistos[wheel])["MeanT0"] -> Fill(t0Mean);
164  (wheelHistos[wheel])["SigmaT0"] -> Fill(t0Sigma);
165 
166  }
167 
168  DTChamberId indexCh(wheel,stat,sec);
169 
170  float vDriftDev(0.), errvDriftDev(0.);
171  percDevVDrift(indexCh, vDriftMean, vDriftSigma, vDriftDev, errvDriftDev);
172 
173  int sec_ = sec;
174  if( sec == 13 || sec == 14 ) sec_ = ( sec == 13 ) ? 4 : 10;
175 
176  float fillvDriftDev = max(min(vDriftDev,maxRangeVDrift),minRangeVDrift);
177  float fillT0Mean = max(min(t0Mean,maxRangeT0),minRangeT0);
178 
179  float vDriftDevQ = varQuality(fabs(vDriftDev),maxGoodVDriftDev,minBadVDriftDev);
180  float t0MeanQ = varQuality(fabs(t0Mean),maxGoodT0,minBadT0);
181 
182  float vDriftSigmQ = varQuality(vDriftSigma,maxGoodVDriftSigma,minBadVDriftSigma);
183  float t0SigmQ = varQuality(t0Sigma,maxGoodT0Sigma,minBadT0Sigma);
184 
185  if( sec == 13 || sec == 14 ) {
186 
187  float binVDriftDev = (wheelHistos[wheel])["MeanVDriftSummary"]->getBinContent(sec_,stat);
188  binVDriftDev = (fabs(binVDriftDev) > fabs(fillvDriftDev)) ? binVDriftDev : fillvDriftDev;
189  (wheelHistos[wheel])["MeanVDriftSummary"] -> setBinContent(sec_,stat,binVDriftDev);
190 
191  float binT0MeanVal = (wheelHistos[wheel])["MeanT0Summary"] -> getBinContent(sec_,stat);
192  binT0MeanVal = (fabs(binT0MeanVal) > fabs(fillT0Mean)) ? binT0MeanVal : fillT0Mean;
193  (wheelHistos[wheel])["MeanT0Summary"] -> setBinContent(sec_,stat,binT0MeanVal);
194 
195  float binVDriftSigmVal = (wheelHistos[wheel])["SigmaVDriftSummary"] -> getBinContent(sec_,stat);
196  binVDriftSigmVal = (binVDriftSigmVal > 0. && binVDriftSigmVal < vDriftSigmQ) ? binVDriftSigmVal : vDriftSigmQ;
197  (wheelHistos[wheel])["SigmaVDriftSummary"] -> setBinContent(sec_,stat,binVDriftSigmVal);
198 
199  float binT0SigmVal = (wheelHistos[wheel])["SigmaT0Summary"] -> getBinContent(sec_,stat);
200  binT0SigmVal = (binT0SigmVal > 0. && binT0SigmVal < t0SigmQ) ? binT0SigmVal : t0SigmQ;
201  (wheelHistos[wheel])["SigmaT0Summary"] -> setBinContent(sec_,stat,binT0SigmVal);
202 
203  } else {
204 
205  (wheelHistos[wheel])["MeanVDriftSummary"] -> setBinContent(sec_,stat,fillvDriftDev);
206  (wheelHistos[wheel])["MeanT0Summary"] -> setBinContent(sec_,stat,fillT0Mean);
207  (wheelHistos[wheel])["SigmaVDriftSummary"] -> setBinContent(sec_,stat,vDriftSigmQ);
208  (wheelHistos[wheel])["SigmaT0Summary"] -> setBinContent(sec_,stat,t0SigmQ);
209 
210  }
211 
212  double weight = 1/4.;
213  if(( sec_ == 4 || sec_ == 10) && stat == 4) weight = 1/8.;
214 
215  if( vDriftDevQ > 0.85 && vDriftSigmQ > 0.85 ) {
216  glbVDriftSummary -> Fill(sec_,wheel,weight);
217  summaryHistos["MeanVDriftGlbSummary"] -> Fill(sec_,wheel,weight);
218  summaryHistos["SigmaVDriftGlbSummary"] -> Fill(sec_,wheel,weight);
219 
220  } else {
221  if( vDriftDevQ > 0.85 && vDriftSigmQ < 0.85 ) {
222  summaryHistos["MeanVDriftGlbSummary"] -> Fill(sec_,wheel,weight);
223  }
224  if( vDriftDevQ < 0.85 && vDriftSigmQ > 0.85 ) {
225  summaryHistos["SigmaVDriftGlbSummary"] -> Fill(sec_,wheel,weight);
226  }
227  }
228 
229  if( t0MeanQ > 0.85 && t0SigmQ > 0.85 ) {
230  glbT0Summary -> Fill(sec_,wheel,weight);
231  summaryHistos["MeanT0GlbSummary"] -> Fill(sec_,wheel,weight);
232  summaryHistos["SigmaT0GlbSummary"] -> Fill(sec_,wheel,weight);
233  } else {
234  if( t0MeanQ > 0.85 && t0SigmQ < 0.85 ) {
235  summaryHistos["MeanT0GlbSummary"] -> Fill(sec_,wheel,weight);
236 
237  }
238  if( t0MeanQ < 0.85 && t0SigmQ > 0.85 ) {
239  summaryHistos["SigmaT0GlbSummary"] -> Fill(sec_,wheel,weight);
240  }
241  }
242 
243 
244  }// end loop on stations
245  }// end loop on sectors
246  }//end loop on wheels
247 
248  return;
249 }
250 
251 float DTRunConditionVarClient::varQuality(float var, float maxGood, float minBad) {
252 
253  float qual(0);
254  if( var <= maxGood ) {qual = 1.;}
255  else if( var > maxGood && var < minBad ) {qual = 0.9;}
256  else if( var >= minBad ) {qual = 0.1;}
257 
258  return qual;
259 }
260 
261 void DTRunConditionVarClient::percDevVDrift(DTChamberId indexCh, float meanVD, float sigmaVD, float& devVD, float& errdevVD) {
262 
263  DTSuperLayerId indexSLPhi1(indexCh,1);
264  DTSuperLayerId indexSLPhi2(indexCh,3);
265 
266  float vDriftPhi1(0.), vDriftPhi2(0.);
267  float ResPhi1(0.), ResPhi2(0.);
268  int status1 = mTimeMap_->get(indexSLPhi1,vDriftPhi1,ResPhi1,DTVelocityUnits::cm_per_ns);
269  int status2 = mTimeMap_->get(indexSLPhi2,vDriftPhi2,ResPhi2,DTVelocityUnits::cm_per_ns);
270 
271  if(status1 != 0 || status2 != 0) {
272  DTSuperLayerId sl = (status1 != 0) ? indexSLPhi1 : indexSLPhi2;
273  throw cms::Exception("DTRunConditionVarClient") << "Could not find vDrift entry in DB for"
274  << sl << endl;
275  }
276 
277  float vDriftMed = (vDriftPhi1 + vDriftPhi2) / 2.;
278 
279  devVD = (meanVD - vDriftMed) / vDriftMed;
280  devVD = devVD < 1. ? devVD : 1.;
281 
282  errdevVD = sigmaVD/vDriftMed;
283 
284  return;
285 }
286 
287 void DTRunConditionVarClient::bookWheelHistos(DQMStore::IBooker & ibooker, string histoType, string subfolder,
288  int wh, int nbins, float min, float max, bool isVDCorr )
289 {
290  stringstream wheel; wheel << wh;
291 
292  string folder = "DT/02-Segments/" + subfolder;
293 
294  ibooker.setCurrentFolder(folder);
295 
296  string histoName = histoType + "_W" + wheel.str();
297  string histoLabel = histoType;
298 
299  (wheelHistos[wh])[histoType] = ibooker.book1D(histoName, histoLabel, nbins, min, max);
300 
301  if( isVDCorr ) {
302  histoLabel = "Summary of corrections to VDrift DB values";
303  histoName = "CorrTo" + histoType + "Summary_W" + wheel.str();
304  } else {
305  histoLabel = histoType + "Summary";
306  histoName = histoType + "Summary_W" + wheel.str();
307  }
308 
309  MonitorElement* me = ibooker.book2D(histoName, histoLabel,12,1,13,4,1,5);
310 
311  me->setBinLabel(1,"MB1",2);
312  me->setBinLabel(2,"MB2",2);
313  me->setBinLabel(3,"MB3",2);
314  me->setBinLabel(4,"MB4",2);
315  me->setAxisTitle("Sector",1);
316 
317  (wheelHistos[wh])[histoType + "Summary"] = me;
318 
319  return;
320 }
321 
323 
324  int wh = dtCh.wheel();
325  int sc = dtCh.sector();
326  int st = dtCh.station();
327  stringstream wheel; wheel << wh;
328  stringstream station; station << st;
329  stringstream sector; sector << sc;
330 
331  string folder = "DT/02-Segments/Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" + station.str();
332  string histoTag = "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
333  string MEpath = folder + "/" + histoType + histoTag;
334 
335  igetter.setCurrentFolder(folder);
336 
337  LogTrace ("DTDQM|DTMonitorModule|DTRunConditionVar")
338  << "[DTRunConditionVar]: getting ME from " << folder << endl;
339 
340  MonitorElement* ME = igetter.get(MEpath);
341 
342  return ME;
343 }
T getUntrackedParameter(std::string const &, T const &) const
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
DQM Client Diagnostic.
MonitorElement * getChamberHistos(DQMStore::IGetter &, const DTChamberId &, std::string)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
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 setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:361
Definition: weight.py:1
double getMean(int axis=1) const
get mean value of histogram along x, y or z axis (axis=1, 2, 3 respectively)
float varQuality(float var, float maxGood, float minBad)
Definition: ME.h:11
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
void percDevVDrift(DTChamberId indexCh, float meanVD, float sigmaVD, float &devVD, float &errdevVD)
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
EventID const & min(EventID const &lh, EventID const &rh)
Definition: EventID.h:137
DTRunConditionVarClient(const edm::ParameterSet &ps)
Constructor.
#define LogTrace(id)
MonitorElement * get(std::string const &path)
Definition: DQMStore.cc:303
void bookWheelHistos(DQMStore::IBooker &, std::string histoType, std::string subfolder, int wh, int nbins, float min, float max, bool isVDCorr=false)
book the report summary
double getEntries() const
get # of entries
~DTRunConditionVarClient() override
Destructor.
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
void beginRun(const edm::Run &r, const edm::EventSetup &c) override
MonitorElement ME
HLT enums.
double getRMS(int axis=1) const
get RMS of histogram along x, y or z axis (axis=1, 2, 3 respectively)
int sector() const
Definition: DTChamberId.h:61
T get() const
Definition: EventSetup.h:62
int station() const
Return the station number.
Definition: DTChamberId.h:51
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:44
EventID const & max(EventID const &lh, EventID const &rh)
Definition: EventID.h:142