CMS 3D CMS Logo

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