CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DTT0CalibrationRMS.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author S. Bolognesi - INFN Torino
5  */
8 
11 
14 
17 
18 #include "TH1I.h"
19 #include "TFile.h"
20 #include "TKey.h"
21 
22 using namespace std;
23 using namespace edm;
24 // using namespace cond;
25 
26 // Constructor
28  // Get the debug parameter for verbose output
29  debug = pset.getUntrackedParameter<bool>("debug");
30  if (debug)
31  cout << "[DTT0CalibrationRMS]Constructor called!" << endl;
32 
33  // Get the label to retrieve digis from the event
34  digiLabel = pset.getUntrackedParameter<string>("digiLabel");
35 
36  // The root file which contain the histos per layer
37  string rootFileName = pset.getUntrackedParameter<string>("rootFileName", "DTT0PerLayer.root");
38  theFile = new TFile(rootFileName.c_str(), "RECREATE");
39 
41  pset.getUntrackedParameter<string>("calibWheel", "All"); //FIXME amke a vector of integer instead of a string
42  if (theCalibWheel != "All") {
43  stringstream linestr;
44  int selWheel;
45  linestr << theCalibWheel;
46  linestr >> selWheel;
47  cout << "[DTT0CalibrationRMSPerLayer] chosen wheel " << selWheel << endl;
48  }
49 
50  // Sector/s to calibrate
52  pset.getUntrackedParameter<string>("calibSector", "All"); //FIXME amke a vector of integer instead of a string
53  if (theCalibSector != "All") {
54  stringstream linestr;
55  int selSector;
56  linestr << theCalibSector;
57  linestr >> selSector;
58  cout << "[DTT0CalibrationRMSPerLayer] chosen sector " << selSector << endl;
59  }
60 
61  vector<string> defaultCell;
62  defaultCell.push_back("None");
63  cellsWithHistos = pset.getUntrackedParameter<vector<string> >("cellsWithHisto", defaultCell);
64  for (vector<string>::const_iterator cell = cellsWithHistos.begin(); cell != cellsWithHistos.end(); ++cell) {
65  if ((*cell) != "None") {
66  stringstream linestr;
67  int wheel, sector, station, sl, layer, wire;
68  linestr << (*cell);
69  linestr >> wheel >> sector >> station >> sl >> layer >> wire;
70  wireIdWithHistos.push_back(DTWireId(wheel, station, sector, sl, layer, wire));
71  }
72  }
73 
74  hT0SectorHisto = nullptr;
75 
76  nevents = 0;
77  eventsForLayerT0 = pset.getParameter<unsigned int>("eventsForLayerT0");
78  eventsForWireT0 = pset.getParameter<unsigned int>("eventsForWireT0");
79  rejectDigiFromPeak = pset.getParameter<unsigned int>("rejectDigiFromPeak");
80  tpPeakWidth = pset.getParameter<double>("tpPeakWidth");
81  //useReferenceWireInLayer_ = true;
82  correctByChamberMean_ = pset.getParameter<bool>("correctByChamberMean");
83 }
84 
85 // Destructor
87  if (debug)
88  cout << "[DTT0CalibrationRMS]Destructor called!" << endl;
89 
90  theFile->Close();
91 }
92 
95  if (debug || event.id().event() % 500 == 0)
96  cout << "--- [DTT0CalibrationRMS] Analysing Event: #Run: " << event.id().run() << " #Event: " << event.id().event()
97  << endl;
98  nevents++;
99 
100  // Get the digis from the event
102  event.getByLabel(digiLabel, digis);
103 
104  // Get the DT Geometry
105  dtGeom = eventSetup.getHandle(dtGeomToken_);
106 
107  // Iterate through all digi collections ordered by LayerId
109  for (dtLayerIt = digis->begin(); dtLayerIt != digis->end(); ++dtLayerIt) {
110  // Get the iterators over the digis associated with this LayerId
111  const DTDigiCollection::Range& digiRange = (*dtLayerIt).second;
112 
113  // Get the layerId
114  const DTLayerId layerId = (*dtLayerIt).first; //FIXME: check to be in the right sector
115 
116  if ((theCalibWheel != "All") && (layerId.superlayerId().chamberId().wheel() != selWheel))
117  continue;
118  if ((theCalibSector != "All") && (layerId.superlayerId().chamberId().sector() != selSector))
119  continue;
120 
121  //if(debug) {
122  // cout << "Layer " << layerId<<" with "<<distance(digiRange.first, digiRange.second)<<" digi"<<endl;
123  //}
124 
125  // Loop over all digis in the given layer
126  for (DTDigiCollection::const_iterator digi = digiRange.first; digi != digiRange.second; ++digi) {
127  double t0 = (*digi).countsTDC();
128 
129  //Use first bunch of events to fill t0 per layer
130  if (nevents < eventsForLayerT0) {
131  //Get the per-layer histo from the map
132  TH1I* hT0LayerHisto = theHistoLayerMap[layerId];
133  //If it doesn't exist, book it
134  if (hT0LayerHisto == nullptr) {
135  theFile->cd();
136  hT0LayerHisto = new TH1I(getHistoName(layerId).c_str(),
137  "T0 from pulses by layer (TDC counts, 1 TDC count = 0.781 ns)",
138  200,
139  t0 - 100,
140  t0 + 100);
141  if (debug)
142  cout << " New T0 per Layer Histo: " << hT0LayerHisto->GetName() << endl;
143  theHistoLayerMap[layerId] = hT0LayerHisto;
144  }
145 
146  //Fill the histos
147  theFile->cd();
148  if (hT0LayerHisto != nullptr) {
149  // if(debug)
150  // cout<<"Filling histo "<<hT0LayerHisto->GetName()<<" with digi "<<t0<<" TDC counts"<<endl;
151  hT0LayerHisto->Fill(t0);
152  }
153  }
154 
155  //Use all the remaining events to compute t0 per wire
156  if (nevents > eventsForLayerT0) {
157  // Get the wireId
158  const DTWireId wireId(layerId, (*digi).wire());
159  if (debug) {
160  cout << " Wire: " << wireId << endl << " time (TDC counts): " << (*digi).countsTDC() << endl;
161  }
162 
163  //Fill the histos per wire for the chosen cells
164  vector<DTWireId>::iterator it_wire = find(wireIdWithHistos.begin(), wireIdWithHistos.end(), wireId);
165  if (it_wire != wireIdWithHistos.end()) {
166  if (theHistoWireMap.find(wireId) == theHistoWireMap.end()) {
167  theHistoWireMap[wireId] = new TH1I(getHistoName(wireId).c_str(),
168  "T0 from pulses by wire (TDC counts, 1 TDC count = 0.781 ns)",
169  7000,
170  0,
171  7000);
172  if (debug)
173  cout << " New T0 per wire Histo: " << (theHistoWireMap[wireId])->GetName() << endl;
174  }
175  if (theHistoWireMap_ref.find(wireId) == theHistoWireMap_ref.end()) {
176  theHistoWireMap_ref[wireId] = new TH1I((getHistoName(wireId) + "_ref").c_str(),
177  "T0 from pulses by wire (TDC counts, 1 TDC count = 0.781 ns)",
178  7000,
179  0,
180  7000);
181  if (debug)
182  cout << " New T0 per wire Histo: " << (theHistoWireMap_ref[wireId])->GetName() << endl;
183  }
184 
185  TH1I* hT0WireHisto = theHistoWireMap[wireId];
186  //Fill the histos
187  theFile->cd();
188  if (hT0WireHisto)
189  hT0WireHisto->Fill(t0);
190  }
191 
192  //Check the tzero has reasonable value
193  if (abs(hT0SectorHisto->GetBinCenter(hT0SectorHisto->GetMaximumBin()) - t0) > rejectDigiFromPeak) {
194  if (debug)
195  cout << "digi skipped because t0 per sector "
196  << hT0SectorHisto->GetBinCenter(hT0SectorHisto->GetMaximumBin()) << endl;
197  continue;
198  }
199 
200  //Use second bunch of events to compute a t0 reference per wire
202  //Fill reference wire histos
203  if (it_wire != wireIdWithHistos.end()) {
204  TH1I* hT0WireHisto_ref = theHistoWireMap_ref[wireId];
205  theFile->cd();
206  if (hT0WireHisto_ref)
207  hT0WireHisto_ref->Fill(t0);
208  }
209  if (!nDigiPerWire_ref[wireId]) {
210  mK_ref[wireId] = 0;
211  }
212  nDigiPerWire_ref[wireId] = nDigiPerWire_ref[wireId] + 1;
213  mK_ref[wireId] = mK_ref[wireId] + (t0 - mK_ref[wireId]) / nDigiPerWire_ref[wireId];
214  }
215  //Use last all the remaining events to compute the mean and sigma t0 per wire
216  else if (nevents > (eventsForLayerT0 + eventsForWireT0)) {
217  if (abs(t0 - mK_ref[wireId]) > tpPeakWidth)
218  continue;
219  if (!nDigiPerWire[wireId]) {
220  theAbsoluteT0PerWire[wireId] = 0;
221  qK[wireId] = 0;
222  mK[wireId] = 0;
223  }
224  nDigiPerWire[wireId] = nDigiPerWire[wireId] + 1;
225  theAbsoluteT0PerWire[wireId] = theAbsoluteT0PerWire[wireId] + t0;
226  //theSigmaT0PerWire[wireId] = theSigmaT0PerWire[wireId] + (t0*t0);
227  qK[wireId] =
228  qK[wireId] + ((nDigiPerWire[wireId] - 1) * (t0 - mK[wireId]) * (t0 - mK[wireId]) / nDigiPerWire[wireId]);
229  mK[wireId] = mK[wireId] + (t0 - mK[wireId]) / nDigiPerWire[wireId];
230  }
231  } //end if(nevents>1000)
232  } //end loop on digi
233  } //end loop on layer
234 
235  //Use the t0 per layer histos to have an indication about the t0 position
236  if (nevents == eventsForLayerT0) {
237  for (map<DTLayerId, TH1I*>::const_iterator lHisto = theHistoLayerMap.begin(); lHisto != theHistoLayerMap.end();
238  ++lHisto) {
239  if (debug)
240  cout << "Reading histogram " << (*lHisto).second->GetName() << " with mean " << (*lHisto).second->GetMean()
241  << " and RMS " << (*lHisto).second->GetRMS();
242 
243  //Take the mean as a first t0 estimation
244  if ((*lHisto).second->GetRMS() < 5.0) {
245  if (hT0SectorHisto == nullptr) {
246  hT0SectorHisto = new TH1D("hT0AllLayerOfSector",
247  "T0 from pulses per layer in sector",
248  //20, (*lHisto).second->GetMean()-100, (*lHisto).second->GetMean()+100);
249  700,
250  0,
251  7000);
252  }
253  if (debug)
254  cout << " accepted" << endl;
255  hT0SectorHisto->Fill((*lHisto).second->GetMean());
256  }
257  //Take the mean of noise + 400ns as a first t0 estimation
258  // if((*lHisto).second->GetRMS()>10.0 && ((*lHisto).second->GetRMS()<15.0)){
259  // double t0_estim = (*lHisto).second->GetMean() + 400;
260  // if(hT0SectorHisto == 0){
261  // hT0SectorHisto = new TH1D("hT0AllLayerOfSector","T0 from pulses per layer in sector",
262  // //20, t0_estim-100, t0_estim+100);
263  // 700, 0, 7000);
264  // }
265  // if(debug)
266  // cout<<" accepted + 400ns"<<endl;
267  // hT0SectorHisto->Fill((*lHisto).second->GetMean() + 400);
268  // }
269  if (debug)
270  cout << endl;
271 
272  theT0LayerMap[(*lHisto).second->GetName()] = (*lHisto).second->GetMean();
273  theSigmaT0LayerMap[(*lHisto).second->GetName()] = (*lHisto).second->GetRMS();
274  }
275  if (!hT0SectorHisto) {
276  cout << "[DTT0CalibrationRMS]: All the t0 per layer are still uncorrect: trying with greater number of events"
277  << endl;
279  return;
280  }
281  if (debug)
282  cout << "[DTT0CalibrationRMS] t0 reference for this sector "
283  << hT0SectorHisto->GetBinCenter(hT0SectorHisto->GetMaximumBin()) << endl;
284  }
285 }
286 
288  DTT0* t0sAbsolute = new DTT0();
289  DTT0* t0sRelative = new DTT0();
290  DTT0* t0sWRTChamber = new DTT0();
291 
292  //if(debug)
293  cout << "[DTT0CalibrationRMSPerLayer]Writing histos to file!" << endl;
294 
295  theFile->cd();
296  theFile->WriteTObject(hT0SectorHisto);
297  //hT0SectorHisto->Write();
298  for (map<DTWireId, TH1I*>::const_iterator wHisto = theHistoWireMap.begin(); wHisto != theHistoWireMap.end();
299  ++wHisto) {
300  (*wHisto).second->Write();
301  }
302  for (map<DTWireId, TH1I*>::const_iterator wHisto = theHistoWireMap_ref.begin(); wHisto != theHistoWireMap_ref.end();
303  ++wHisto) {
304  (*wHisto).second->Write();
305  }
306  for (map<DTLayerId, TH1I*>::const_iterator lHisto = theHistoLayerMap.begin(); lHisto != theHistoLayerMap.end();
307  ++lHisto) {
308  (*lHisto).second->Write();
309  }
310 
311  //if(debug)
312  cout << "[DTT0CalibrationRMS] Compute and store t0 and sigma per wire" << endl;
313 
314  for (map<DTWireId, double>::const_iterator wiret0 = theAbsoluteT0PerWire.begin();
315  wiret0 != theAbsoluteT0PerWire.end();
316  ++wiret0) {
317  if (nDigiPerWire[(*wiret0).first]) {
318  double t0 = (*wiret0).second / nDigiPerWire[(*wiret0).first];
319 
320  theRelativeT0PerWire[(*wiret0).first] = t0 - hT0SectorHisto->GetBinCenter(hT0SectorHisto->GetMaximumBin());
321 
322  //theSigmaT0PerWire[(*wiret0).first] = sqrt((theSigmaT0PerWire[(*wiret0).first] / nDigiPerWire[(*wiret0).first]) - t0*t0);
323  theSigmaT0PerWire[(*wiret0).first] = sqrt(qK[(*wiret0).first] / nDigiPerWire[(*wiret0).first]);
324 
325  cout << "Wire " << (*wiret0).first << " has t0 " << t0 << "(absolute) " << theRelativeT0PerWire[(*wiret0).first]
326  << "(relative)"
327  << " sigma " << theSigmaT0PerWire[(*wiret0).first] << endl;
328 
329  t0sAbsolute->set((*wiret0).first, t0, theSigmaT0PerWire[(*wiret0).first], DTTimeUnits::counts);
330  } else {
331  cout << "[DTT0CalibrationRMS] ERROR: no digis in wire " << (*wiret0).first << endl;
332  abort();
333  }
334  }
335 
336  if (correctByChamberMean_) {
338  // Get all the sls from the setup
339  const vector<const DTSuperLayer*> superLayers = dtGeom->superLayers();
340  // Loop over all SLs
341  for (vector<const DTSuperLayer*>::const_iterator sl = superLayers.begin(); sl != superLayers.end(); sl++) {
342  //Compute mean for odd and even superlayers
343  double oddLayersMean = 0;
344  double evenLayersMean = 0;
345  double oddLayersDen = 0;
346  double evenLayersDen = 0;
347  for (map<DTWireId, double>::const_iterator wiret0 = theRelativeT0PerWire.begin();
348  wiret0 != theRelativeT0PerWire.end();
349  ++wiret0) {
350  if ((*wiret0).first.layerId().superlayerId() == (*sl)->id()) {
351  if (debug)
352  cout << "[DTT0CalibrationRMS] Superlayer " << (*sl)->id() << "layer " << (*wiret0).first.layerId().layer()
353  << " with " << (*wiret0).second << endl;
354  if (((*wiret0).first.layerId().layer()) % 2) {
355  oddLayersMean = oddLayersMean + (*wiret0).second;
356  oddLayersDen++;
357  } else {
358  evenLayersMean = evenLayersMean + (*wiret0).second;
359  evenLayersDen++;
360  }
361  }
362  }
363  oddLayersMean = oddLayersMean / oddLayersDen;
364  evenLayersMean = evenLayersMean / evenLayersDen;
365  //if(debug && oddLayersMean)
366  cout << "[DTT0CalibrationRMS] Relative T0 mean for odd layers " << oddLayersMean << " even layers"
367  << evenLayersMean << endl;
368 
369  //Compute sigma for odd and even superlayers
370  double oddLayersSigma = 0;
371  double evenLayersSigma = 0;
372  for (map<DTWireId, double>::const_iterator wiret0 = theRelativeT0PerWire.begin();
373  wiret0 != theRelativeT0PerWire.end();
374  ++wiret0) {
375  if ((*wiret0).first.layerId().superlayerId() == (*sl)->id()) {
376  if (((*wiret0).first.layerId().layer()) % 2) {
377  oddLayersSigma = oddLayersSigma + ((*wiret0).second - oddLayersMean) * ((*wiret0).second - oddLayersMean);
378  } else {
379  evenLayersSigma =
380  evenLayersSigma + ((*wiret0).second - evenLayersMean) * ((*wiret0).second - evenLayersMean);
381  }
382  }
383  }
384  oddLayersSigma = oddLayersSigma / oddLayersDen;
385  evenLayersSigma = evenLayersSigma / evenLayersDen;
386  oddLayersSigma = sqrt(oddLayersSigma);
387  evenLayersSigma = sqrt(evenLayersSigma);
388 
389  //if(debug && oddLayersMean)
390  cout << "[DTT0CalibrationRMS] Relative T0 sigma for odd layers " << oddLayersSigma << " even layers"
391  << evenLayersSigma << endl;
392 
393  //Recompute the mean for odd and even superlayers discarding fluctations
394  double oddLayersFinalMean = 0;
395  double evenLayersFinalMean = 0;
396  for (map<DTWireId, double>::const_iterator wiret0 = theRelativeT0PerWire.begin();
397  wiret0 != theRelativeT0PerWire.end();
398  ++wiret0) {
399  if ((*wiret0).first.layerId().superlayerId() == (*sl)->id()) {
400  if (((*wiret0).first.layerId().layer()) % 2) {
401  if (abs((*wiret0).second - oddLayersMean) < (2 * oddLayersSigma))
402  oddLayersFinalMean = oddLayersFinalMean + (*wiret0).second;
403  } else {
404  if (abs((*wiret0).second - evenLayersMean) < (2 * evenLayersSigma))
405  evenLayersFinalMean = evenLayersFinalMean + (*wiret0).second;
406  }
407  }
408  }
409  oddLayersFinalMean = oddLayersFinalMean / oddLayersDen;
410  evenLayersFinalMean = evenLayersFinalMean / evenLayersDen;
411  //if(debug && oddLayersMean)
412  cout << "[DTT0CalibrationRMS] Final relative T0 mean for odd layers " << oddLayersFinalMean << " even layers"
413  << evenLayersFinalMean << endl;
414 
415  for (map<DTWireId, double>::const_iterator wiret0 = theRelativeT0PerWire.begin();
416  wiret0 != theRelativeT0PerWire.end();
417  ++wiret0) {
418  if ((*wiret0).first.layerId().superlayerId() == (*sl)->id()) {
419  double t0 = -999;
420  if (((*wiret0).first.layerId().layer()) % 2)
421  t0 = (*wiret0).second + (evenLayersFinalMean - oddLayersFinalMean);
422  else
423  t0 = (*wiret0).second;
424 
425  cout << "[DTT0CalibrationRMS] Wire " << (*wiret0).first << " has t0 " << (*wiret0).second
426  << " (relative, after even-odd layer corrections) "
427  << " sigma " << theSigmaT0PerWire[(*wiret0).first] << endl;
428 
429  //Store the results into DB
430  t0sRelative->set((*wiret0).first, t0, theSigmaT0PerWire[(*wiret0).first], DTTimeUnits::counts);
431  }
432  }
433  }
434 
436  //if(debug)
437  cout << "[DTT0CalibrationRMS]Computing relative t0 wrt to chamber average" << endl;
438  //Compute the reference for each chamber
439  map<DTChamberId, double> sumT0ByChamber;
440  map<DTChamberId, int> countT0ByChamber;
441  for (DTT0::const_iterator tzero = t0sRelative->begin(); tzero != t0sRelative->end(); ++tzero) {
442  int channelId = tzero->channelId;
443  if (channelId == 0)
444  continue;
445  DTWireId wireId(channelId);
446  DTChamberId chamberId(wireId.chamberId());
447  //sumT0ByChamber[chamberId] = sumT0ByChamber[chamberId] + tzero->t0mean;
448  // @@@ better DTT0 usage
449  float t0mean_f;
450  float t0rms_f;
451  t0sRelative->get(wireId, t0mean_f, t0rms_f, DTTimeUnits::counts);
452  sumT0ByChamber[chamberId] = sumT0ByChamber[chamberId] + t0mean_f;
453  // @@@ NEW DTT0 END
454  countT0ByChamber[chamberId]++;
455  }
456 
457  //Change reference for each wire and store the new t0s in the new map
458  for (DTT0::const_iterator tzero = t0sRelative->begin(); tzero != t0sRelative->end(); ++tzero) {
459  int channelId = tzero->channelId;
460  if (channelId == 0)
461  continue;
462  DTWireId wireId(channelId);
463  DTChamberId chamberId(wireId.chamberId());
464  //double t0mean = (tzero->t0mean) - (sumT0ByChamber[chamberId]/countT0ByChamber[chamberId]);
465  //double t0rms = tzero->t0rms;
466  // @@@ better DTT0 usage
467  float t0mean_f;
468  float t0rms_f;
469  t0sRelative->get(wireId, t0mean_f, t0rms_f, DTTimeUnits::counts);
470  double t0mean = t0mean_f - (sumT0ByChamber[chamberId] / countT0ByChamber[chamberId]);
471  double t0rms = t0rms_f;
472  // @@@ NEW DTT0 END
473  t0sWRTChamber->set(wireId, t0mean, t0rms, DTTimeUnits::counts);
474  //if(debug)
475  //cout<<"Chamber "<<chamberId<<" has reference "<<(sumT0ByChamber[chamberId]/countT0ByChamber[chamberId]);
476  cout << "Changing t0 of wire " << wireId << " from " << t0mean_f << " to " << t0mean << endl;
477  }
478  }
479 
481  if (debug)
482  cout << "[DTT0CalibrationRMS]Writing values in DB!" << endl;
483  // FIXME: to be read from cfg?
484  string t0Record = "DTT0Rcd";
485  // Write the t0 map to DB
487  DTCalibDBUtils::writeToDB(t0Record, t0sWRTChamber);
488  else
489  DTCalibDBUtils::writeToDB(t0Record, t0sAbsolute);
490 }
491 
492 string DTT0CalibrationRMS::getHistoName(const DTWireId& wId) const {
493  string histoName = "Ch_" + std::to_string(wId.wheel()) + "_" + std::to_string(wId.station()) + "_" +
494  std::to_string(wId.sector()) + "_SL" + std::to_string(wId.superlayer()) + "_L" +
495  std::to_string(wId.layer()) + "_W" + std::to_string(wId.wire()) + "_hT0Histo";
496  return histoName;
497 }
498 
499 string DTT0CalibrationRMS::getHistoName(const DTLayerId& lId) const {
500  string histoName = "Ch_" + std::to_string(lId.wheel()) + "_" + std::to_string(lId.station()) + "_" +
501  std::to_string(lId.sector()) + "_SL" + std::to_string(lId.superlayer()) + "_L" +
502  std::to_string(lId.layer()) + "_hT0Histo";
503  return histoName;
504 }
const_iterator begin() const
Definition: DTT0.cc:145
RunNumber_t run() const
Definition: EventID.h:38
int set(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, float t0mean, float t0rms, DTTimeUnits::type unit)
Definition: DTT0.cc:97
EventNumber_t event() const
Definition: EventID.h:40
T getUntrackedParameter(std::string const &, T const &) const
std::map< DTWireId, double > theAbsoluteT0PerWire
static void writeToDB(std::string record, const T &payload)
void endJob() override
Compute the mean and the RMS of the t0 from the maps and write them to the DB with channel granularit...
std::map< DTWireId, double > qK
std::map< DTWireId, double > mK
DTChamberId chamberId() const
Return the corresponding ChamberId.
std::map< DTWireId, int > nDigiPerWire
std::map< std::string, double > theSigmaT0LayerMap
std::string to_string(const V &value)
Definition: OMSAccess.h:71
edm::ESHandle< DTGeometry > dtGeom
std::map< DTWireId, TH1I * > theHistoWireMap
int layer() const
Return the layer number.
Definition: DTLayerId.h:42
unsigned int rejectDigiFromPeak
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
Definition: DTLayerId.h:45
std::vector< DTWireId > wireIdWithHistos
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
std::string theCalibSector
int get(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, float &t0mean, float &t0rms, DTTimeUnits::type unit) const
Definition: DTT0.cc:48
std::vector< DTT0Data >::const_iterator const_iterator
Access methods to data.
Definition: DTT0.h:122
unsigned int eventsForWireT0
std::string getHistoName(const DTWireId &wId) const
constexpr std::array< uint8_t, layerIndexSize > layer
std::map< std::string, double > theT0LayerMap
std::map< DTWireId, TH1I * > theHistoWireMap_ref
std::map< DTWireId, double > mK_ref
Definition: DTT0.h:48
~DTT0CalibrationRMS() override
Destructor.
unsigned int eventsForLayerT0
T sqrt(T t)
Definition: SSEVec.h:19
std::map< DTLayerId, TH1I * > theHistoLayerMap
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::map< DTWireId, double > theSigmaT0PerWire
int wire() const
Return the wire number.
Definition: DTWireId.h:42
const_iterator end() const
Definition: DTT0.cc:147
int superlayer() const
Return the superlayer number (deprecated method name)
std::pair< const_iterator, const_iterator > Range
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::vector< std::string > cellsWithHistos
std::vector< DigiType >::const_iterator const_iterator
DTT0CalibrationRMS(const edm::ParameterSet &pset)
Constructor.
edm::EventID id() const
Definition: EventBase.h:59
std::map< DTWireId, double > theRelativeT0PerWire
int sector() const
Definition: DTChamberId.h:49
const edm::ESGetToken< DTGeometry, MuonGeometryRecord > dtGeomToken_
static const double tzero[3]
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override
Fill the maps with t0 (by channel)
tuple cout
Definition: gather_cfg.py:144
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
int station() const
Return the station number.
Definition: DTChamberId.h:42
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
std::map< DTWireId, int > nDigiPerWire_ref