CMS 3D CMS Logo

SiStripGainsPCLWorker.cc
Go to the documentation of this file.
4 
5 #include <iostream>
6 #include <sstream>
7 
8 //********************************************************************************//
10  MinTrackMomentum = iConfig.getUntrackedParameter<double>("minTrackMomentum", 3.0);
11  MaxTrackMomentum = iConfig.getUntrackedParameter<double>("maxTrackMomentum", 99999.0);
12  MinTrackEta = iConfig.getUntrackedParameter<double>("minTrackEta", -5.0);
13  MaxTrackEta = iConfig.getUntrackedParameter<double>("maxTrackEta", 5.0);
14  MaxNrStrips = iConfig.getUntrackedParameter<unsigned>("maxNrStrips", 2);
15  MinTrackHits = iConfig.getUntrackedParameter<unsigned>("MinTrackHits", 8);
16  MaxTrackChiOverNdf = iConfig.getUntrackedParameter<double>("MaxTrackChiOverNdf", 3);
17  MaxTrackingIteration = iConfig.getUntrackedParameter<int>("MaxTrackingIteration", 7);
18  AllowSaturation = iConfig.getUntrackedParameter<bool>("AllowSaturation", false);
19  FirstSetOfConstants = iConfig.getUntrackedParameter<bool>("FirstSetOfConstants", true);
20  Validation = iConfig.getUntrackedParameter<bool>("Validation", false);
21  OldGainRemoving = iConfig.getUntrackedParameter<bool>("OldGainRemoving", false);
22  useCalibration = iConfig.getUntrackedParameter<bool>("UseCalibration", false);
23  doChargeMonitorPerPlane = iConfig.getUntrackedParameter<bool>("doChargeMonitorPerPlane", false);
24  m_DQMdir = iConfig.getUntrackedParameter<std::string>("DQMdir", "AlCaReco/SiStripGains");
25  m_calibrationMode = iConfig.getUntrackedParameter<std::string>("calibrationMode", "StdBunch");
26  VChargeHisto = iConfig.getUntrackedParameter<std::vector<std::string>>("ChargeHisto");
27 
28  // fill in the mapping between the histogram indices and the (id,side,plane) tuple
29  std::vector<std::pair<std::string, std::string>> hnames =
31  for (unsigned int i = 0; i < hnames.size(); i++) {
32  int id = APVGain::subdetectorId((hnames[i]).first);
33  int side = APVGain::subdetectorSide((hnames[i]).first);
34  int plane = APVGain::subdetectorPlane((hnames[i]).first);
35  int thick = APVGain::thickness((hnames[i]).first);
36  std::string s = hnames[i].first;
37 
38  auto loc = APVloc(thick, id, side, plane, s);
39  theTopologyMap.insert(std::make_pair(i, loc));
40  }
41 
42  //Set the monitoring element tag and store
43  dqm_tag_.reserve(7);
44  dqm_tag_.clear();
45  dqm_tag_.push_back("StdBunch"); // statistic collection from Standard Collision Bunch @ 3.8 T
46  dqm_tag_.push_back("StdBunch0T"); // statistic collection from Standard Collision Bunch @ 0 T
47  dqm_tag_.push_back("AagBunch"); // statistic collection from First Collision After Abort Gap @ 3.8 T
48  dqm_tag_.push_back("AagBunch0T"); // statistic collection from First Collision After Abort Gap @ 0 T
49  dqm_tag_.push_back("IsoMuon"); // statistic collection from Isolated Muon @ 3.8 T
50  dqm_tag_.push_back("IsoMuon0T"); // statistic collection from Isolated Muon @ 0 T
51  dqm_tag_.push_back("Harvest"); // statistic collection: Harvest
52 
53  // configure token for gathering the ntuple variables
54  edm::ParameterSet swhallowgain_pset = iConfig.getUntrackedParameter<edm::ParameterSet>("gain");
55 
56  std::string label = swhallowgain_pset.getUntrackedParameter<std::string>("label");
57  CalibPrefix_ = swhallowgain_pset.getUntrackedParameter<std::string>("prefix");
58  CalibSuffix_ = swhallowgain_pset.getUntrackedParameter<std::string>("suffix");
59 
60  trackindex_token_ = consumes<std::vector<int>>(edm::InputTag(label, CalibPrefix_ + "trackindex" + CalibSuffix_));
61  rawid_token_ = consumes<std::vector<unsigned int>>(edm::InputTag(label, CalibPrefix_ + "rawid" + CalibSuffix_));
62  localdirx_token_ = consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "localdirx" + CalibSuffix_));
63  localdiry_token_ = consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "localdiry" + CalibSuffix_));
64  localdirz_token_ = consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "localdirz" + CalibSuffix_));
66  consumes<std::vector<unsigned short>>(edm::InputTag(label, CalibPrefix_ + "firststrip" + CalibSuffix_));
67  nstrips_token_ = consumes<std::vector<unsigned short>>(edm::InputTag(label, CalibPrefix_ + "nstrips" + CalibSuffix_));
68  saturation_token_ = consumes<std::vector<bool>>(edm::InputTag(label, CalibPrefix_ + "saturation" + CalibSuffix_));
69  overlapping_token_ = consumes<std::vector<bool>>(edm::InputTag(label, CalibPrefix_ + "overlapping" + CalibSuffix_));
70  farfromedge_token_ = consumes<std::vector<bool>>(edm::InputTag(label, CalibPrefix_ + "farfromedge" + CalibSuffix_));
71  charge_token_ = consumes<std::vector<unsigned int>>(edm::InputTag(label, CalibPrefix_ + "charge" + CalibSuffix_));
72  path_token_ = consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "path" + CalibSuffix_));
73 #ifdef ExtendedCALIBTree
75  consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "chargeoverpath" + CalibSuffix_));
76 #endif
78  consumes<std::vector<unsigned char>>(edm::InputTag(label, CalibPrefix_ + "amplitude" + CalibSuffix_));
79  gainused_token_ = consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "gainused" + CalibSuffix_));
81  consumes<std::vector<double>>(edm::InputTag(label, CalibPrefix_ + "gainusedTick" + CalibSuffix_));
82 
83  edm::ParameterSet evtinfo_pset = iConfig.getUntrackedParameter<edm::ParameterSet>("evtinfo");
84  label = evtinfo_pset.getUntrackedParameter<std::string>("label");
85  EventPrefix_ = evtinfo_pset.getUntrackedParameter<std::string>("prefix");
86  EventSuffix_ = evtinfo_pset.getUntrackedParameter<std::string>("suffix");
87  TrigTech_token_ = consumes<std::vector<bool>>(edm::InputTag(label, EventPrefix_ + "TrigTech" + EventSuffix_));
88 
89  edm::ParameterSet track_pset = iConfig.getUntrackedParameter<edm::ParameterSet>("tracks");
90  label = track_pset.getUntrackedParameter<std::string>("label");
91  TrackPrefix_ = track_pset.getUntrackedParameter<std::string>("prefix");
92  TrackSuffix_ = track_pset.getUntrackedParameter<std::string>("suffix");
93 
94  trackchi2ndof_token_ = consumes<std::vector<double>>(edm::InputTag(label, TrackPrefix_ + "chi2ndof" + TrackSuffix_));
95  trackp_token_ = consumes<std::vector<float>>(edm::InputTag(label, TrackPrefix_ + "momentum" + TrackSuffix_));
96  trackpt_token_ = consumes<std::vector<float>>(edm::InputTag(label, TrackPrefix_ + "pt" + TrackSuffix_));
97  tracketa_token_ = consumes<std::vector<double>>(edm::InputTag(label, TrackPrefix_ + "eta" + TrackSuffix_));
98  trackphi_token_ = consumes<std::vector<double>>(edm::InputTag(label, TrackPrefix_ + "phi" + TrackSuffix_));
100  consumes<std::vector<unsigned int>>(edm::InputTag(label, TrackPrefix_ + "hitsvalid" + TrackSuffix_));
101  trackalgo_token_ = consumes<std::vector<int>>(edm::InputTag(label, TrackPrefix_ + "algo" + TrackSuffix_));
102 
104  tkGeomToken_ = esConsumes<edm::Transition::BeginRun>();
105  gainToken_ = esConsumes<edm::Transition::BeginRun>();
106  qualityToken_ = esConsumes<edm::Transition::BeginRun>();
107 }
108 
109 //********************************************************************************//
111  edm::EventSetup const& iSetup,
113  using namespace edm;
114  static constexpr float defaultGainTick = 690. / 640.;
115 
116  // fills the APV collections at each begin run
117  const TrackerGeometry* bareTkGeomPtr = &iSetup.getData(tkGeomToken_);
118  checkBookAPVColls(bareTkGeomPtr, histograms);
119 
120  const auto gainHandle = iSetup.getHandle(gainToken_);
121  if (!gainHandle.isValid()) {
122  edm::LogError("SiStripGainPCLWorker") << "gainHandle is not valid\n";
123  exit(0);
124  }
125 
126  const auto& siStripQuality = iSetup.getData(qualityToken_);
127 
128  for (unsigned int a = 0; a < histograms.APVsCollOrdered.size(); a++) {
129  std::shared_ptr<stAPVGain> APV = histograms.APVsCollOrdered[a];
130 
132  continue;
133 
134  APV->isMasked = siStripQuality.IsApvBad(APV->DetId, APV->APVId);
135 
136  if (gainHandle->getNumberOfTags() != 2) {
137  edm::LogError("SiStripGainPCLWorker") << "NUMBER OF GAIN TAG IS EXPECTED TO BE 2\n";
138  fflush(stdout);
139  exit(0);
140  };
141  float newPreviousGain = gainHandle->getApvGain(APV->APVId, gainHandle->getRange(APV->DetId, 1), 1);
142  if (APV->PreviousGain != 1 and newPreviousGain != APV->PreviousGain)
143  edm::LogWarning("SiStripGainPCLWorker") << "WARNING: ParticleGain in the global tag changed\n";
144  APV->PreviousGain = newPreviousGain;
145 
146  float newPreviousGainTick =
147  APV->isMasked ? defaultGainTick : gainHandle->getApvGain(APV->APVId, gainHandle->getRange(APV->DetId, 0), 0);
148  if (APV->PreviousGainTick != 1 and newPreviousGainTick != APV->PreviousGainTick) {
149  edm::LogWarning("SiStripGainPCLWorker")
150  << "WARNING: TickMarkGain in the global tag changed\n"
151  << std::endl
152  << " APV->SubDet: " << APV->SubDet << " APV->APVId:" << APV->APVId << std::endl
153  << " APV->PreviousGainTick: " << APV->PreviousGainTick << " newPreviousGainTick: " << newPreviousGainTick
154  << std::endl;
155  }
156  APV->PreviousGainTick = newPreviousGainTick;
157  }
158 }
159 
160 //********************************************************************************//
161 // ------------ method called for each event ------------
163  edm::EventSetup const& iSetup,
164  APVGain::APVGainHistograms const& histograms) const {
165  using namespace edm;
166 
167  unsigned int eventnumber = iEvent.id().event();
168  unsigned int runnumber = iEvent.id().run();
169 
170  edm::LogInfo("SiStripGainsPCLWorker") << "Processing run " << runnumber << " and event " << eventnumber << std::endl;
171 
172  const TrackerTopology* topo = &iSetup.getData(tTopoToken_);
173 
174  // *****************************
175  // * Event data handles
176  // *****************************
177 
178  //Event data
179 
180  // Track data
182  iEvent.getByToken(trackchi2ndof_token_, handle01);
183  auto trackchi2ndof = handle01.product();
184 
186  iEvent.getByToken(trackp_token_, handle02);
187  auto trackp = handle02.product();
188 
190  iEvent.getByToken(tracketa_token_, handle03);
191  auto tracketa = handle03.product();
192 
194  iEvent.getByToken(trackhitsvalid_token_, handle04);
195  auto trackhitsvalid = handle04.product();
196 
198  iEvent.getByToken(trackalgo_token_, handle05);
199  auto trackalgo = handle05.product();
200 
201  // CalibTree data
203  iEvent.getByToken(trackindex_token_, handle06);
204  auto trackindex = handle06.product();
205 
207  iEvent.getByToken(rawid_token_, handle07);
208  auto rawid = handle07.product();
209 
211  iEvent.getByToken(firststrip_token_, handle08);
212  auto firststrip = handle08.product();
213 
215  iEvent.getByToken(nstrips_token_, handle09);
216  auto nstrips = handle09.product();
217 
219  iEvent.getByToken(saturation_token_, handle10);
220  auto saturation = handle10.product();
221 
223  iEvent.getByToken(overlapping_token_, handle11);
224  auto overlapping = handle11.product();
225 
227  iEvent.getByToken(farfromedge_token_, handle12);
228  auto farfromedge = handle12.product();
229 
231  iEvent.getByToken(charge_token_, handle13);
232  auto charge = handle13.product();
233 
235  iEvent.getByToken(path_token_, handle14);
236  auto path = handle14.product();
237 
238 #ifdef ExtendedCALIBTree
240  iEvent.getByToken(chargeoverpath_token_, handle15);
241  auto chargeoverpath = handle15.product();
242 #endif
243 
245  iEvent.getByToken(amplitude_token_, handle16);
246  auto amplitude = handle16.product();
247 
249  iEvent.getByToken(gainused_token_, handle17);
250  auto gainused = handle17.product();
251 
253  iEvent.getByToken(gainusedTick_token_, handle18);
254  auto gainusedTick = handle18.product();
255 
256  for (const auto& elem : theTopologyMap) {
257  LogDebug("SiStripGainsPCLWorker") << elem.first << " - " << elem.second.m_string << " "
258  << elem.second.m_subdetectorId << " " << elem.second.m_subdetectorSide << " "
259  << elem.second.m_subdetectorPlane << std::endl;
260  }
261 
262  LogDebug("SiStripGainsPCLWorker") << "for mode" << m_calibrationMode << std::endl;
263 
264  int elepos = statCollectionFromMode(m_calibrationMode.c_str());
265 
266  histograms.EventStats->Fill(0., 0., 1);
267  histograms.EventStats->Fill(1., 0., trackp->size());
268  histograms.EventStats->Fill(2., 0., charge->size());
269 
270  unsigned int FirstAmplitude = 0;
271  for (unsigned int i = 0; i < charge->size(); i++) {
272  FirstAmplitude += (*nstrips)[i];
273  int TI = (*trackindex)[i];
274 
275  if ((*tracketa)[TI] < MinTrackEta)
276  continue;
277  if ((*tracketa)[TI] > MaxTrackEta)
278  continue;
279  if ((*trackp)[TI] < MinTrackMomentum)
280  continue;
281  if ((*trackp)[TI] > MaxTrackMomentum)
282  continue;
283  if ((*trackhitsvalid)[TI] < MinTrackHits)
284  continue;
285  if ((*trackchi2ndof)[TI] > MaxTrackChiOverNdf)
286  continue;
287  if ((*trackalgo)[TI] > MaxTrackingIteration)
288  continue;
289 
290  std::shared_ptr<stAPVGain> APV = histograms.APVsColl.at(
291  ((*rawid)[i] << 4) |
292  ((*firststrip)[i] /
293  128)); //works for both strip and pixel thanks to firstStrip encoding for pixel in the calibTree
294 
295  if (APV->SubDet > 2 && (*farfromedge)[i] == false)
296  continue;
297  if (APV->SubDet > 2 && (*overlapping)[i] == true)
298  continue;
299  if (APV->SubDet > 2 && (*saturation)[i] && !AllowSaturation)
300  continue;
301  if (APV->SubDet > 2 && (*nstrips)[i] > MaxNrStrips)
302  continue;
303 
304  int Charge = 0;
305  if (APV->SubDet > 2 && (useCalibration || !FirstSetOfConstants)) {
306  bool Saturation = false;
307  for (unsigned int s = 0; s < (*nstrips)[i]; s++) {
308  int StripCharge = (*amplitude)[FirstAmplitude - (*nstrips)[i] + s];
310  StripCharge = (int)(StripCharge * (APV->PreviousGain / APV->CalibGain));
311  } else if (useCalibration) {
312  StripCharge = (int)(StripCharge / APV->CalibGain);
313  } else if (!FirstSetOfConstants) {
314  StripCharge = (int)(StripCharge * APV->PreviousGain);
315  }
316  if (StripCharge > 1024) {
317  StripCharge = 255;
318  Saturation = true;
319  } else if (StripCharge > 254) {
320  StripCharge = 254;
321  Saturation = true;
322  }
323  Charge += StripCharge;
324  }
325  if (Saturation && !AllowSaturation)
326  continue;
327  } else if (APV->SubDet > 2) {
328  Charge = (*charge)[i];
329  } else {
330  Charge = (*charge)[i] / 265.0; //expected scale factor between pixel and strip charge
331  }
332 
333  double ClusterChargeOverPath = ((double)Charge) / (*path)[i];
334  if (APV->SubDet > 2) {
335  if (Validation) {
336  ClusterChargeOverPath /= (*gainused)[i];
337  }
338  if (OldGainRemoving) {
339  ClusterChargeOverPath *= (*gainused)[i];
340  }
341  }
342 
343  // keep processing of pixel cluster charge until here
344  if (APV->SubDet <= 2)
345  continue;
346 
347  // real histogram for calibration
348  histograms.Charge_Vs_Index[elepos]->Fill(APV->Index, ClusterChargeOverPath);
349  LogDebug("SiStripGainsPCLWorker") << " for mode " << m_calibrationMode << "\n"
350  << " i " << i << " useCalibration " << useCalibration << " FirstSetOfConstants "
351  << FirstSetOfConstants << " APV->PreviousGain " << APV->PreviousGain
352  << " APV->CalibGain " << APV->CalibGain << " APV->DetId " << APV->DetId
353  << " APV->Index " << APV->Index << " Charge " << Charge << " Path " << (*path)[i]
354  << " ClusterChargeOverPath " << ClusterChargeOverPath << std::endl;
355 
356  // Fill monitoring histograms
357  int mCharge1 = 0;
358  int mCharge2 = 0;
359  int mCharge3 = 0;
360  int mCharge4 = 0;
361  if (APV->SubDet > 2) {
362  for (unsigned int s = 0; s < (*nstrips)[i]; s++) {
363  int StripCharge = (*amplitude)[FirstAmplitude - (*nstrips)[i] + s];
364  if (StripCharge > 1024)
365  StripCharge = 255;
366  else if (StripCharge > 254)
367  StripCharge = 254;
368  mCharge1 += StripCharge;
369  mCharge2 += StripCharge;
370  mCharge3 += StripCharge;
371  mCharge4 += StripCharge;
372  }
373  // Revome gains for monitoring
374  mCharge2 *= (*gainused)[i]; // remove G2
375  mCharge3 *= (*gainusedTick)[i]; // remove G1
376  mCharge4 *= ((*gainused)[i] * (*gainusedTick)[i]); // remove G1 and G2
377  }
378 
379  LogDebug("SiStripGainsPCLWorker") << " full charge " << mCharge1 << " remove G2 " << mCharge2 << " remove G1 "
380  << mCharge3 << " remove G1*G2 " << mCharge4 << std::endl;
381 
382  auto indices = APVGain::FetchIndices(theTopologyMap, (*rawid)[i], topo);
383 
384  for (auto m : indices)
385  histograms.Charge_1[elepos][m]->Fill(((double)mCharge1) / (*path)[i]);
386  for (auto m : indices)
387  histograms.Charge_2[elepos][m]->Fill(((double)mCharge2) / (*path)[i]);
388  for (auto m : indices)
389  histograms.Charge_3[elepos][m]->Fill(((double)mCharge3) / (*path)[i]);
390  for (auto m : indices)
391  histograms.Charge_4[elepos][m]->Fill(((double)mCharge4) / (*path)[i]);
392 
393  if (APV->SubDet == StripSubdetector::TIB) {
394  histograms.Charge_Vs_PathlengthTIB[elepos]->Fill((*path)[i], Charge); // TIB
395 
396  } else if (APV->SubDet == StripSubdetector::TOB) {
397  histograms.Charge_Vs_PathlengthTOB[elepos]->Fill((*path)[i], Charge); // TOB
398 
399  } else if (APV->SubDet == StripSubdetector::TID) {
400  if (APV->Eta < 0) {
401  histograms.Charge_Vs_PathlengthTIDM[elepos]->Fill((*path)[i], Charge);
402  } // TID minus
403  else if (APV->Eta > 0) {
404  histograms.Charge_Vs_PathlengthTIDP[elepos]->Fill((*path)[i], Charge);
405  } // TID plus
406 
407  } else if (APV->SubDet == StripSubdetector::TEC) {
408  if (APV->Eta < 0) {
409  if (APV->Thickness < 0.04) {
410  histograms.Charge_Vs_PathlengthTECM1[elepos]->Fill((*path)[i], Charge);
411  } // TEC minus, type 1
412  else if (APV->Thickness > 0.04) {
413  histograms.Charge_Vs_PathlengthTECM2[elepos]->Fill((*path)[i], Charge);
414  } // TEC minus, type 2
415  } else if (APV->Eta > 0) {
416  if (APV->Thickness < 0.04) {
417  histograms.Charge_Vs_PathlengthTECP1[elepos]->Fill((*path)[i], Charge);
418  } // TEC plus, type 1
419  else if (APV->Thickness > 0.04) {
420  histograms.Charge_Vs_PathlengthTECP2[elepos]->Fill((*path)[i], Charge);
421  } // TEC plus, type 2
422  }
423  }
424 
425  } // END OF ON-CLUSTER LOOP
426 
427  //LogDebug("SiStripGainsPCLWorker")<<" for mode"<< m_calibrationMode
428  // <<" entries in histogram:"<< histograms.Charge_Vs_Index[elepos].getEntries()
429  // <<std::endl;
430 }
431 
432 //********************************************************************************//
434 
435 //********************************************************************************//
436 // ------------ method called once each job just before starting event loop ------------
439  if (bareTkGeomPtr) { // pointer not yet set: called the first time => fill the APVColls
440  auto const& Det = bareTkGeomPtr->dets();
441 
442  edm::LogInfo("SiStripGainsPCLWorker") << " Resetting APV struct" << std::endl;
443 
444  unsigned int Index = 0;
445 
446  for (unsigned int i = 0; i < Det.size(); i++) {
447  DetId Detid = Det[i]->geographicalId();
448  int SubDet = Detid.subdetId();
449 
452  auto DetUnit = dynamic_cast<const StripGeomDetUnit*>(Det[i]);
453  if (!DetUnit)
454  continue;
455 
456  const StripTopology& Topo = DetUnit->specificTopology();
457  unsigned int NAPV = Topo.nstrips() / 128;
458 
459  for (unsigned int j = 0; j < NAPV; j++) {
460  auto APV = std::make_shared<stAPVGain>();
461  APV->Index = Index;
462  APV->Bin = -1;
463  APV->DetId = Detid.rawId();
464  APV->APVId = j;
465  APV->SubDet = SubDet;
466  APV->FitMPV = -1;
467  APV->FitMPVErr = -1;
468  APV->FitWidth = -1;
469  APV->FitWidthErr = -1;
470  APV->FitChi2 = -1;
471  APV->FitNorm = -1;
472  APV->Gain = -1;
473  APV->PreviousGain = 1;
474  APV->PreviousGainTick = 1;
475  APV->x = DetUnit->position().basicVector().x();
476  APV->y = DetUnit->position().basicVector().y();
477  APV->z = DetUnit->position().basicVector().z();
478  APV->Eta = DetUnit->position().basicVector().eta();
479  APV->Phi = DetUnit->position().basicVector().phi();
480  APV->R = DetUnit->position().basicVector().transverse();
481  APV->Thickness = DetUnit->surface().bounds().thickness();
482  APV->NEntries = 0;
483  APV->isMasked = false;
484 
485  histograms.APVsCollOrdered.push_back(APV);
486  histograms.APVsColl[(APV->DetId << 4) | APV->APVId] = APV;
487  Index++;
488  histograms.NStripAPVs++;
489  } // loop on APVs
490  } // if is Strips
491  } // loop on dets
492 
493  for (unsigned int i = 0; i < Det.size();
494  i++) { //Make two loop such that the Pixel information is added at the end --> make transition simpler
495  DetId Detid = Det[i]->geographicalId();
496  int SubDet = Detid.subdetId();
498  auto DetUnit = dynamic_cast<const PixelGeomDetUnit*>(Det[i]);
499  if (!DetUnit)
500  continue;
501 
502  const PixelTopology& Topo = DetUnit->specificTopology();
503  unsigned int NROCRow = Topo.nrows() / (80.);
504  unsigned int NROCCol = Topo.ncolumns() / (52.);
505 
506  for (unsigned int j = 0; j < NROCRow; j++) {
507  for (unsigned int i = 0; i < NROCCol; i++) {
508  auto APV = std::make_shared<stAPVGain>();
509  APV->Index = Index;
510  APV->Bin = -1;
511  APV->DetId = Detid.rawId();
512  APV->APVId = (j << 3 | i);
513  APV->SubDet = SubDet;
514  APV->FitMPV = -1;
515  APV->FitMPVErr = -1;
516  APV->FitWidth = -1;
517  APV->FitWidthErr = -1;
518  APV->FitChi2 = -1;
519  APV->Gain = -1;
520  APV->PreviousGain = 1;
521  APV->PreviousGainTick = 1;
522  APV->x = DetUnit->position().basicVector().x();
523  APV->y = DetUnit->position().basicVector().y();
524  APV->z = DetUnit->position().basicVector().z();
525  APV->Eta = DetUnit->position().basicVector().eta();
526  APV->Phi = DetUnit->position().basicVector().phi();
527  APV->R = DetUnit->position().basicVector().transverse();
528  APV->Thickness = DetUnit->surface().bounds().thickness();
529  APV->isMasked = false; //SiPixelQuality_->IsModuleBad(Detid.rawId());
530  APV->NEntries = 0;
531 
532  histograms.APVsCollOrdered.push_back(APV);
533  histograms.APVsColl[(APV->DetId << 4) | APV->APVId] = APV;
534  Index++;
535  histograms.NPixelDets++;
536 
537  } // loop on ROC cols
538  } // loop on ROC rows
539  } // if Pixel
540  } // loop on Dets
541  } //if (!bareTkGeomPtr_) ...
542 }
543 
544 //********************************************************************************//
547  desc.setUnknown();
548  descriptions.addDefault(desc);
549 }
550 
551 //********************************************************************************//
553  edm::Run const& run,
554  edm::EventSetup const& setup,
556  ibooker.cd();
557  std::string dqm_dir = m_DQMdir;
558  const char* tag = dqm_tag_[statCollectionFromMode(m_calibrationMode.c_str())].c_str();
559 
560  edm::LogInfo("SiStripGainsPCLWorker") << "Setting " << dqm_dir << " in DQM and booking histograms for tag " << tag
561  << std::endl;
562 
563  ibooker.setCurrentFolder(dqm_dir);
564 
565  // this MonitorElement is created to log the number of events / tracks and clusters used
566  // by the calibration algorithm
567 
568  histograms.EventStats = ibooker.book2S("EventStats", "Statistics", 3, -0.5, 2.5, 1, 0, 1);
569  histograms.EventStats->setBinLabel(1, "events count", 1);
570  histograms.EventStats->setBinLabel(2, "tracks count", 1);
571  histograms.EventStats->setBinLabel(3, "clusters count", 1);
572 
573  std::string stag(tag);
574  if (!stag.empty() && stag[0] != '_')
575  stag.insert(0, 1, '_');
576 
577  std::string cvi = std::string("Charge_Vs_Index") + stag;
578  std::string cvpTIB = std::string("Charge_Vs_PathlengthTIB") + stag;
579  std::string cvpTOB = std::string("Charge_Vs_PathlengthTOB") + stag;
580  std::string cvpTIDP = std::string("Charge_Vs_PathlengthTIDP") + stag;
581  std::string cvpTIDM = std::string("Charge_Vs_PathlengthTIDM") + stag;
582  std::string cvpTECP1 = std::string("Charge_Vs_PathlengthTECP1") + stag;
583  std::string cvpTECP2 = std::string("Charge_Vs_PathlengthTECP2") + stag;
584  std::string cvpTECM1 = std::string("Charge_Vs_PathlengthTECM1") + stag;
585  std::string cvpTECM2 = std::string("Charge_Vs_PathlengthTECM2") + stag;
586 
587  int elepos = statCollectionFromMode(tag);
588 
589  histograms.Charge_Vs_Index.reserve(dqm_tag_.size());
590  histograms.Charge_Vs_PathlengthTIB.reserve(dqm_tag_.size());
591  histograms.Charge_Vs_PathlengthTOB.reserve(dqm_tag_.size());
592  histograms.Charge_Vs_PathlengthTIDP.reserve(dqm_tag_.size());
593  histograms.Charge_Vs_PathlengthTIDM.reserve(dqm_tag_.size());
594  histograms.Charge_Vs_PathlengthTECP1.reserve(dqm_tag_.size());
595  histograms.Charge_Vs_PathlengthTECP2.reserve(dqm_tag_.size());
596  histograms.Charge_Vs_PathlengthTECM1.reserve(dqm_tag_.size());
597  histograms.Charge_Vs_PathlengthTECM2.reserve(dqm_tag_.size());
598 
599  // The cluster charge is stored by exploiting a non uniform binning in order
600  // reduce the histogram memory size. The bin width is relaxed with a falling
601  // exponential function and the bin boundaries are stored in the binYarray.
602  // The binXarray is used to provide as many bins as the APVs.
603  //
604  // More details about this implementations are here:
605  // https://indico.cern.ch/event/649344/contributions/2672267/attachments/1498323/2332518/OptimizeChHisto.pdf
606 
607  std::vector<float> binXarray;
608  binXarray.reserve(histograms.NStripAPVs + 1);
609  for (unsigned int a = 0; a <= histograms.NStripAPVs; a++) {
610  binXarray.push_back((float)a);
611  }
612 
613  std::array<float, 688> binYarray;
614  double p0 = 5.445;
615  double p1 = 0.002113;
616  double p2 = 69.01576;
617  double y = 0.;
618  for (int b = 0; b < 687; b++) {
619  binYarray[b] = y;
620  if (y <= 902.)
621  y = y + 2.;
622  else
623  y = (p0 - log(exp(p0 - p1 * y) - p2 * p1)) / p1;
624  }
625  binYarray[687] = 4000.;
626 
627  histograms.Charge_1[elepos].clear();
628  histograms.Charge_2[elepos].clear();
629  histograms.Charge_3[elepos].clear();
630  histograms.Charge_4[elepos].clear();
631 
632  auto it = histograms.Charge_Vs_Index.begin();
633  histograms.Charge_Vs_Index.insert(
634  it + elepos,
635  ibooker.book2S(cvi.c_str(), cvi.c_str(), histograms.NStripAPVs, &binXarray[0], 687, binYarray.data()));
636 
637  it = histograms.Charge_Vs_PathlengthTIB.begin();
638  histograms.Charge_Vs_PathlengthTIB.insert(it + elepos,
639  ibooker.book2S(cvpTIB.c_str(), cvpTIB.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
640 
641  it = histograms.Charge_Vs_PathlengthTOB.begin();
642  histograms.Charge_Vs_PathlengthTOB.insert(it + elepos,
643  ibooker.book2S(cvpTOB.c_str(), cvpTOB.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
644 
645  it = histograms.Charge_Vs_PathlengthTIDP.begin();
646  histograms.Charge_Vs_PathlengthTIDP.insert(
647  it + elepos, ibooker.book2S(cvpTIDP.c_str(), cvpTIDP.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
648 
649  it = histograms.Charge_Vs_PathlengthTIDM.begin();
650  histograms.Charge_Vs_PathlengthTIDM.insert(
651  it + elepos, ibooker.book2S(cvpTIDM.c_str(), cvpTIDM.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
652 
653  it = histograms.Charge_Vs_PathlengthTECP1.begin();
654  histograms.Charge_Vs_PathlengthTECP1.insert(
655  it + elepos, ibooker.book2S(cvpTECP1.c_str(), cvpTECP1.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
656 
657  it = histograms.Charge_Vs_PathlengthTECP2.begin();
658  histograms.Charge_Vs_PathlengthTECP2.insert(
659  it + elepos, ibooker.book2S(cvpTECP2.c_str(), cvpTECP2.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
660 
661  it = histograms.Charge_Vs_PathlengthTECM1.begin();
662  histograms.Charge_Vs_PathlengthTECM1.insert(
663  it + elepos, ibooker.book2S(cvpTECM1.c_str(), cvpTECM1.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
664 
665  it = histograms.Charge_Vs_PathlengthTECM2.begin();
666  histograms.Charge_Vs_PathlengthTECM2.insert(
667  it + elepos, ibooker.book2S(cvpTECM2.c_str(), cvpTECM2.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
668 
669  std::vector<std::pair<std::string, std::string>> hnames =
671  for (unsigned int i = 0; i < hnames.size(); i++) {
672  std::string htag = (hnames[i]).first + stag;
673  histograms.Charge_1[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
674  }
675 
677  for (unsigned int i = 0; i < hnames.size(); i++) {
678  std::string htag = (hnames[i]).first + stag;
679  histograms.Charge_2[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
680  }
681 
683  for (unsigned int i = 0; i < hnames.size(); i++) {
684  std::string htag = (hnames[i]).first + stag;
685  histograms.Charge_3[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
686  }
687 
689  for (unsigned int i = 0; i < hnames.size(); i++) {
690  std::string htag = (hnames[i]).first + stag;
691  histograms.Charge_4[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
692  }
693 }
SiStripGainsPCLWorker::trackpt_token_
edm::EDGetTokenT< std::vector< float > > trackpt_token_
Definition: SiStripGainsPCLWorker.h:119
bTagCombinedSVVariables_cff.indices
indices
Definition: bTagCombinedSVVariables_cff.py:67
SiStripGainsPCLWorker::MinTrackHits
unsigned int MinTrackHits
Definition: SiStripGainsPCLWorker.h:100
DDAxes::y
SiStripGainsPCLWorker::tkGeomToken_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
Definition: SiStripGainsPCLWorker.h:142
SiStripGainsPCLWorker::VChargeHisto
std::vector< std::string > VChargeHisto
Definition: SiStripGainsPCLWorker.h:112
mps_fire.i
i
Definition: mps_fire.py:428
SiStripGainsPCLWorker::charge_token_
edm::EDGetTokenT< std::vector< unsigned int > > charge_token_
Definition: SiStripGainsPCLWorker.h:134
CustomPhysics_cfi.amplitude
amplitude
Definition: CustomPhysics_cfi.py:12
SiStripGainsPCLWorker::m_DQMdir
std::string m_DQMdir
Definition: SiStripGainsPCLWorker.h:110
MessageLogger.h
PixelSubdetector::PixelEndcap
Definition: PixelSubdetector.h:11
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
edm::Handle::product
T const * product() const
Definition: Handle.h:70
dqm::implementation::IBooker::book2S
MonitorElement * book2S(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:219
APVGain::FetchIndices
std::vector< unsigned int > FetchIndices(std::map< unsigned int, APVloc >, uint32_t, const TrackerTopology *topo=nullptr)
Definition: APVGainHelpers.cc:187
SiStripGainsPCLWorker::nstrips_token_
edm::EDGetTokenT< std::vector< unsigned short > > nstrips_token_
Definition: SiStripGainsPCLWorker.h:130
SiStripGainsPCLWorker::MinTrackMomentum
double MinTrackMomentum
Definition: SiStripGainsPCLWorker.h:95
SiStripGainsPCLWorker::dqmAnalyze
void dqmAnalyze(edm::Event const &, edm::EventSetup const &, APVGain::APVGainHistograms const &) const override
Definition: SiStripGainsPCLWorker.cc:162
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerTopology
Definition: TrackerTopology.h:16
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
SiStripGainsPCLWorker::amplitude_token_
edm::EDGetTokenT< std::vector< unsigned char > > amplitude_token_
Definition: SiStripGainsPCLWorker.h:137
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
SiStripGainsPCLWorker::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &, APVGain::APVGainHistograms &) const override
Definition: SiStripGainsPCLWorker.cc:552
SiStripGainsPCLWorker::MaxTrackMomentum
double MaxTrackMomentum
Definition: SiStripGainsPCLWorker.h:96
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
APVGain::subdetectorPlane
int subdetectorPlane(uint32_t, const TrackerTopology *)
Definition: APVGainHelpers.cc:119
SiStripGainsPCLWorker::TrigTech_token_
edm::EDGetTokenT< std::vector< bool > > TrigTech_token_
Definition: SiStripGainsPCLWorker.h:116
edm::Handle
Definition: AssociativeIterator.h:50
SiStripGainsPCLWorker::CalibSuffix_
std::string CalibSuffix_
Definition: SiStripGainsPCLWorker.h:151
SiStripGainsPCLWorker::AllowSaturation
bool AllowSaturation
Definition: SiStripGainsPCLWorker.h:103
dqmdumpme.first
first
Definition: dqmdumpme.py:55
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
SiStripGainsPCLWorker::beginJob
void beginJob() override
Definition: SiStripGainsPCLWorker.cc:433
SiStripGainsPCLWorker::localdirz_token_
edm::EDGetTokenT< std::vector< double > > localdirz_token_
Definition: SiStripGainsPCLWorker.h:128
SiStripGainsPCLWorker::trackphi_token_
edm::EDGetTokenT< std::vector< double > > trackphi_token_
Definition: SiStripGainsPCLWorker.h:121
SiStripGainsPCLWorker::path_token_
edm::EDGetTokenT< std::vector< double > > path_token_
Definition: SiStripGainsPCLWorker.h:135
SiStripGainsPCLWorker::FirstSetOfConstants
bool FirstSetOfConstants
Definition: SiStripGainsPCLWorker.h:104
DetId
Definition: DetId.h:17
alignCSCRings.s
s
Definition: alignCSCRings.py:92
SiStripGainsPCLWorker::gainusedTick_token_
edm::EDGetTokenT< std::vector< double > > gainusedTick_token_
Definition: SiStripGainsPCLWorker.h:139
SiStripGainsPCLWorker::MinTrackEta
double MinTrackEta
Definition: SiStripGainsPCLWorker.h:97
TrackerTopologyRcd.h
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
ntupleEnum.SubDet
SubDet
Definition: ntupleEnum.py:15
SiStripGainsPCLWorker::TrackPrefix_
std::string TrackPrefix_
Definition: SiStripGainsPCLWorker.h:148
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:72
SiStripGainsPCLWorker::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: SiStripGainsPCLWorker.cc:545
SiStripGainsPCLWorker::TrackSuffix_
std::string TrackSuffix_
Definition: SiStripGainsPCLWorker.h:149
p2
double p2[4]
Definition: TauolaWrapper.h:90
dqm::implementation::NavigatorBase::cd
virtual void cd()
Definition: DQMStore.cc:29
PixelTopology::ncolumns
virtual int ncolumns() const =0
StripSubdetector::TIB
static constexpr auto TIB
Definition: StripSubdetector.h:16
SiStripGainsPCLWorker::Validation
bool Validation
Definition: SiStripGainsPCLWorker.h:105
SiStripGainsPCLWorker::trackindex_token_
edm::EDGetTokenT< std::vector< int > > trackindex_token_
Definition: SiStripGainsPCLWorker.h:124
SiStripGainsPCLWorker::farfromedge_token_
edm::EDGetTokenT< std::vector< bool > > farfromedge_token_
Definition: SiStripGainsPCLWorker.h:133
PixelTopology
Definition: PixelTopology.h:10
b
double b
Definition: hdecay.h:118
SiStripGainsPCLWorker::doChargeMonitorPerPlane
bool doChargeMonitorPerPlane
Definition: SiStripGainsPCLWorker.h:108
SiStripGainsPCLWorker::dqmBeginRun
void dqmBeginRun(edm::Run const &, edm::EventSetup const &, APVGain::APVGainHistograms &) const override
Definition: SiStripGainsPCLWorker.cc:110
SiStripGainsPCLWorker::SiStripGainsPCLWorker
SiStripGainsPCLWorker(const edm::ParameterSet &)
Definition: SiStripGainsPCLWorker.cc:9
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiStripGainsPCLWorker::saturation_token_
edm::EDGetTokenT< std::vector< bool > > saturation_token_
Definition: SiStripGainsPCLWorker.h:131
dqm::implementation::IBooker::book1DD
MonitorElement * book1DD(TString const &name, TString const &title, int nchX, double lowX, double highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:155
SiStripGainsPCLWorker.h
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
SiStripGainsPCLWorker::MaxNrStrips
unsigned int MaxNrStrips
Definition: SiStripGainsPCLWorker.h:99
SiStripGainsPCLWorker::tTopoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: SiStripGainsPCLWorker.h:141
HLT_FULL_cff.saturation
saturation
Definition: HLT_FULL_cff.py:6636
SiStripGainsPCLWorker::rawid_token_
edm::EDGetTokenT< std::vector< unsigned int > > rawid_token_
Definition: SiStripGainsPCLWorker.h:125
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
edm::ParameterSet
Definition: ParameterSet.h:47
a
double a
Definition: hdecay.h:119
APVGain::subdetectorSide
int subdetectorSide(uint32_t, const TrackerTopology *)
Definition: APVGainHelpers.cc:49
SiStripGainsPCLWorker::trackalgo_token_
edm::EDGetTokenT< std::vector< int > > trackalgo_token_
Definition: SiStripGainsPCLWorker.h:123
mps_setup.stdout
stdout
Definition: mps_setup.py:250
SiStripGainsPCLWorker::trackhitsvalid_token_
edm::EDGetTokenT< std::vector< unsigned int > > trackhitsvalid_token_
Definition: SiStripGainsPCLWorker.h:122
cond::runnumber
Definition: Time.h:19
SiStripGainsPCLWorker::chargeoverpath_token_
edm::EDGetTokenT< std::vector< double > > chargeoverpath_token_
Definition: SiStripGainsPCLWorker.h:136
SiStripGainsPCLWorker::overlapping_token_
edm::EDGetTokenT< std::vector< bool > > overlapping_token_
Definition: SiStripGainsPCLWorker.h:132
sistrip::APV
Definition: ConstantsForGranularity.h:79
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
SiStripGainsPCLWorker::dqm_tag_
std::vector< std::string > dqm_tag_
Definition: SiStripGainsPCLWorker.h:91
SiStripGainsPCLWorker::tracketa_token_
edm::EDGetTokenT< std::vector< double > > tracketa_token_
Definition: SiStripGainsPCLWorker.h:120
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
SiStripGainsPCLWorker::EventSuffix_
std::string EventSuffix_
Definition: SiStripGainsPCLWorker.h:147
p1
double p1[4]
Definition: TauolaWrapper.h:89
edm::EventSetup
Definition: EventSetup.h:57
APVGain::thickness
int thickness(uint32_t)
Definition: APVGainHelpers.cc:76
histograms
Definition: histograms.py:1
TrackerGeometry::dets
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: TrackerGeometry.h:62
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
SiStripGainsPCLWorker::OldGainRemoving
bool OldGainRemoving
Definition: SiStripGainsPCLWorker.h:106
SiStripGainsPCLWorker::theTopologyMap
std::map< unsigned int, APVloc > theTopologyMap
Definition: SiStripGainsPCLWorker.h:154
APVloc
Definition: APVGainStruct.h:36
StripTopology::nstrips
virtual int nstrips() const =0
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:120
SiStripGainsPCLWorker::localdirx_token_
edm::EDGetTokenT< std::vector< double > > localdirx_token_
Definition: SiStripGainsPCLWorker.h:126
SiStripGainsPCLWorker::gainused_token_
edm::EDGetTokenT< std::vector< double > > gainused_token_
Definition: SiStripGainsPCLWorker.h:138
SiStripGainsPCLWorker::statCollectionFromMode
int statCollectionFromMode(const char *tag) const
Definition: SiStripGainsPCLWorker.h:157
SiStripGainsPCLWorker::MaxTrackingIteration
int MaxTrackingIteration
Definition: SiStripGainsPCLWorker.h:102
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
writedatasetfile.run
run
Definition: writedatasetfile.py:27
SiStripGainsPCLWorker::localdiry_token_
edm::EDGetTokenT< std::vector< double > > localdiry_token_
Definition: SiStripGainsPCLWorker.h:127
StripSubdetector::TEC
static constexpr auto TEC
Definition: StripSubdetector.h:19
SiStripGainsPCLWorker::MaxTrackEta
double MaxTrackEta
Definition: SiStripGainsPCLWorker.h:98
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
PixelTestBeamValidation_cfi.Charge
Charge
Definition: PixelTestBeamValidation_cfi.py:91
SiStripGainsPCLWorker::EventPrefix_
std::string EventPrefix_
Definition: SiStripGainsPCLWorker.h:146
SiStripGainsPCLWorker::qualityToken_
edm::ESGetToken< SiStripQuality, SiStripQualityRcd > qualityToken_
Definition: SiStripGainsPCLWorker.h:144
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
dqm::implementation::IBooker
Definition: DQMStore.h:43
APVGain::monHnames
std::vector< std::pair< std::string, std::string > > monHnames(std::vector< std::string >, bool, const char *tag)
Definition: APVGainHelpers.cc:215
edm::EDConsumerBase::esConsumes
auto esConsumes()
Definition: EDConsumerBase.h:200
SiStripGainsPCLWorker::MaxTrackChiOverNdf
double MaxTrackChiOverNdf
Definition: SiStripGainsPCLWorker.h:101
SiStripGainsPCLWorker::firststrip_token_
edm::EDGetTokenT< std::vector< unsigned short > > firststrip_token_
Definition: SiStripGainsPCLWorker.h:129
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
SiStripGainsPCLWorker::useCalibration
bool useCalibration
Definition: SiStripGainsPCLWorker.h:107
beamvalidation.exit
def exit(msg="")
Definition: beamvalidation.py:53
GeometricSearchDet
Definition: GeometricSearchDet.h:17
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
SiStripGainsPCLWorker::trackp_token_
edm::EDGetTokenT< std::vector< float > > trackp_token_
Definition: SiStripGainsPCLWorker.h:118
edm::Event
Definition: Event.h:73
PixelTopology::nrows
virtual int nrows() const =0
edm::ConfigurationDescriptions::addDefault
void addDefault(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:99
SiStripGainsPCLWorker::checkBookAPVColls
void checkBookAPVColls(const TrackerGeometry *bareTkGeomPtr, APVGain::APVGainHistograms &histograms) const
Definition: SiStripGainsPCLWorker.cc:437
StripTopology
Definition: StripTopology.h:11
SiStripGainsPCLWorker::CalibPrefix_
std::string CalibPrefix_
Definition: SiStripGainsPCLWorker.h:150
label
const char * label
Definition: PFTauDecayModeTools.cc:11
SiStripGainsPCLWorker::gainToken_
edm::ESGetToken< SiStripGain, SiStripGainRcd > gainToken_
Definition: SiStripGainsPCLWorker.h:143
APVGain::APVGainHistograms
Definition: APVGainHelpers.h:62
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
SiStripGainsPCLWorker::trackchi2ndof_token_
edm::EDGetTokenT< std::vector< double > > trackchi2ndof_token_
Definition: SiStripGainsPCLWorker.h:117
APVGain::subdetectorId
int subdetectorId(uint32_t)
Definition: APVGainHelpers.cc:16
SiStripGainsPCLWorker::m_calibrationMode
std::string m_calibrationMode
Definition: SiStripGainsPCLWorker.h:111
TrackerGeometry
Definition: TrackerGeometry.h:14