CMS 3D CMS Logo

AlignmentMonitorMuonSystemMap1D.cc
Go to the documentation of this file.
1 /*
2  * Package: CommonAlignmentProducer
3  * Class : AlignmentMonitorMuonSystemMap1D
4  *
5  * Original Author: Jim Pivarski
6  * Created: Mon Nov 12 13:30:14 CST 2007
7  *
8  * $Id: AlignmentMonitorMuonSystemMap1D.cc,v 1.5 2011/04/15 23:09:37 khotilov Exp $
9  */
10 
14 
23 
24 #include "TH1F.h"
25 #include "TH2F.h"
26 
33 
35 public:
38 
39  void book() override;
40 
41  void event(const edm::Event &iEvent,
42  const edm::EventSetup &iSetup,
43  const ConstTrajTrackPairCollection &iTrajTracks) override;
45 
46  void afterAlignment() override;
47 
48 private:
49  // es token
55 
56  // parameters
58  double m_minTrackPt;
59  double m_maxTrackPt;
60  double m_minTrackP;
61  double m_maxTrackP;
62  double m_maxDxy;
70  bool m_doDT;
71  bool m_doCSC;
74 
75  // counter
86 
87  // histogram helper
89  public:
92  int bins,
93  double low,
94  double high,
95  bool xy,
96  bool add_1d);
97 
98  void fill_x_1d(double residx, double chi2, int dof);
99  void fill_x(char charge, double abscissa, double residx, double chi2, int dof);
100  void fill_y(char charge, double abscissa, double residy, double chi2, int dof);
101  void fill_dxdz(char charge, double abscissa, double slopex, double chi2, int dof);
102  void fill_dydz(char charge, double abscissa, double slopey, double chi2, int dof);
103 
104  private:
106  int m_bins;
107  bool m_xy;
108  bool m_1d;
109  TH1F *m_x_1d;
111  };
112 
113  MuonSystemMapPlot1D *m_DTvsz_station[4][14]; // [station][sector]
114  MuonSystemMapPlot1D *m_CSCvsr_me[2][4][36]; // [endcap][station][chamber]
115  MuonSystemMapPlot1D *m_DTvsphi_station[4][5]; // [station][wheel]
116  MuonSystemMapPlot1D *m_CSCvsphi_me[2][4][3]; // [endcap][station][ring]
117 
118  std::vector<MuonSystemMapPlot1D *> m_plots;
119 
120  std::string num02d(int num);
121 
122  // optional debug ntuple
123  TTree *m_cscnt;
124 
125  struct MyCSCDetId {
126  void init(CSCDetId &id) {
127  e = id.endcap();
128  s = id.station();
129  r = id.ring();
130  c = id.chamber();
131  t = id.iChamberType();
132  }
133  Short_t e, s, r, c;
134  Short_t t; // type 1-10: ME1/a,1/b,1/2,1/3,2/1...4/2
135  };
137 
138  struct MyTrack {
139  Int_t q;
140  Float_t pt, pz;
141  };
143 
144  struct MyResidual {
145  Float_t res, slope, rho, phi, z;
146  };
148 
149  UInt_t m_run;
150 };
151 
154  : AlignmentMonitorBase(cfg, iC, "AlignmentMonitorMuonSystemMap1D"),
155  m_esTokenGBTGeom(iC.esConsumes()),
156  m_esTokenDetId(iC.esConsumes(edm::ESInputTag("", "MuonDetIdAssociator"))),
157  m_esTokenProp(iC.esConsumes(edm::ESInputTag("", "SteppingHelixPropagatorAny"))),
158  m_esTokenMF(iC.esConsumes()),
159  m_esTokenBuilder(iC.esConsumes(MuonResidualsFromTrack::builderESInputTag())),
160  m_muonCollectionTag(cfg.getParameter<edm::InputTag>("muonCollectionTag")),
161  m_minTrackPt(cfg.getParameter<double>("minTrackPt")),
162  m_maxTrackPt(cfg.getParameter<double>("maxTrackPt")),
163  m_minTrackP(cfg.getParameter<double>("minTrackP")),
164  m_maxTrackP(cfg.getParameter<double>("maxTrackP")),
165  m_maxDxy(cfg.getParameter<double>("maxDxy")),
166  m_minTrackerHits(cfg.getParameter<int>("minTrackerHits")),
167  m_maxTrackerRedChi2(cfg.getParameter<double>("maxTrackerRedChi2")),
168  m_allowTIDTEC(cfg.getParameter<bool>("allowTIDTEC")),
169  m_minNCrossedChambers(cfg.getParameter<int>("minNCrossedChambers")),
170  m_minDT13Hits(cfg.getParameter<int>("minDT13Hits")),
171  m_minDT2Hits(cfg.getParameter<int>("minDT2Hits")),
172  m_minCSCHits(cfg.getParameter<int>("minCSCHits")),
173  m_doDT(cfg.getParameter<bool>("doDT")),
174  m_doCSC(cfg.getParameter<bool>("doCSC")),
175  m_useStubPosition(cfg.getParameter<bool>("useStubPosition")),
176  m_createNtuple(cfg.getParameter<bool>("createNtuple")) {
177  if (m_createNtuple) {
179  m_cscnt = fs->make<TTree>("mualNtuple", "mualNtuple");
180  m_cscnt->Branch("id", &m_id.e, "e/S:s:r:c:t");
181  m_cscnt->Branch("tr", &m_tr.q, "q/I:pt/F:pz");
182  m_cscnt->Branch("re", &m_re.res, "res/F:slope:rho:phi:z");
183  m_cscnt->Branch("run", &m_run, "run/i");
184  }
185 }
186 
188  assert(num >= 0 && num < 100);
189  char tmp[4];
190  sprintf(tmp, "%02d", num);
191  return std::string(tmp);
192 }
193 
195  std::string wheel_label[5] = {"A", "B", "C", "D", "E"};
196 
197  for (unsigned char station = 1; station <= 4; station++) {
198  std::string s_station = std::to_string(station);
199 
200  bool do_y = true;
201  if (station == 4)
202  do_y = false;
203 
204  // *** DT ***
205  if (m_doDT)
206  for (int sector = 1; sector <= 14; sector++) {
207  if ((station < 4 && sector <= 12) || station == 4) {
208  m_DTvsz_station[station - 1][sector - 1] = new MuonSystemMapPlot1D(
209  "DTvsz_st" + s_station + "sec" + num02d(sector), this, 60, -660., 660., do_y, false);
210  m_plots.push_back(m_DTvsz_station[station - 1][sector - 1]);
211  }
212  }
213 
214  if (m_doDT)
215  for (int wheel = -2; wheel <= 2; wheel++) {
217  "DTvsphi_st" + s_station + "wh" + wheel_label[wheel + 2], this, 180, -M_PI, M_PI, do_y, false);
218  m_plots.push_back(m_DTvsphi_station[station - 1][wheel + 2]);
219  }
220 
221  // *** CSC ***
222  if (m_doCSC)
223  for (int endcap = 1; endcap <= 2; endcap++) {
224  std::string s_endcap("m");
225  if (endcap == 1)
226  s_endcap = "p";
227 
228  for (int chamber = 1; chamber <= 36; chamber++) {
230  "CSCvsr_me" + s_endcap + s_station + "ch" + num02d(chamber), this, 60, 100., 700., false, false);
231  m_plots.push_back(m_CSCvsr_me[endcap - 1][station - 1][chamber - 1]);
232  }
233 
234  for (int ring = 1; ring <= 3; ring++) // the ME1/a (ring4) is not independent from ME1/b (ring1)
235  {
236  std::string s_ring = std::to_string(ring);
237  if ((station > 1 && ring <= 2) || station == 1) {
238  m_CSCvsphi_me[endcap - 1][station - 1][ring - 1] =
239  new MuonSystemMapPlot1D("CSCvsphi_me" + s_endcap + s_station + s_ring,
240  this,
241  180,
242  -M_PI / 180. * 5.,
243  M_PI * (2. - 5. / 180.),
244  false,
245  true);
246  m_plots.push_back(m_CSCvsphi_me[endcap - 1][station - 1][ring - 1]);
247  }
248  }
249  } // endcaps
250  } // stations
251 
252  m_counter_event = 0;
253  m_counter_track = 0;
255  m_counter_trackdxy = 0;
257  m_counter_dt = 0;
259  m_counter_2numhits = 0;
260  m_counter_csc = 0;
262 }
263 
265  const edm::EventSetup &iSetup,
266  const ConstTrajTrackPairCollection &trajtracks) {
267  m_counter_event++;
268 
270  iEvent.getByLabel(m_beamSpotTag, beamSpot);
271 
272  const GlobalTrackingGeometry *globalGeometry = &iSetup.getData(m_esTokenGBTGeom);
273  const DetIdAssociator *muonDetIdAssociator_ = &iSetup.getData(m_esTokenDetId);
274  const Propagator *prop = &iSetup.getData(m_esTokenProp);
276  auto builder = iSetup.getHandle(m_esTokenBuilder);
277 
278  if (m_muonCollectionTag.label().empty()) // use trajectories
279  {
280  for (ConstTrajTrackPairCollection::const_iterator trajtrack = trajtracks.begin(); trajtrack != trajtracks.end();
281  ++trajtrack) {
282  m_counter_track++;
283  const Trajectory *traj = (*trajtrack).first;
284  const reco::Track *track = (*trajtrack).second;
285 
286  if (m_minTrackPt < track->pt() && track->pt() < m_maxTrackPt && m_minTrackP < track->p() &&
287  track->p() < m_maxTrackP) {
289  if (fabs(track->dxy(beamSpot->position())) < m_maxDxy) {
291 
292  MuonResidualsFromTrack muonResidualsFromTrack(
293  builder, magneticField, globalGeometry, muonDetIdAssociator_, prop, traj, track, pNavigator(), 1000.);
294  processMuonResidualsFromTrack(muonResidualsFromTrack, iEvent);
295  }
296  } // end if track has acceptable momentum
297  } // end loop over tracks
298  } else {
300  iEvent.getByLabel(m_muonCollectionTag, muons);
301 
302  for (reco::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) {
303  if (!(muon->isTrackerMuon() && muon->innerTrack().isNonnull()))
304  continue;
305 
306  m_counter_track++;
307 
308  if (m_minTrackPt < muon->pt() && muon->pt() < m_maxTrackPt && m_minTrackP < muon->p() &&
309  muon->p() < m_maxTrackP) {
311  if (fabs(muon->innerTrack()->dxy(beamSpot->position())) < m_maxDxy) {
313 
314  MuonResidualsFromTrack muonResidualsFromTrack(globalGeometry, &(*muon), pNavigator(), 100.);
315  processMuonResidualsFromTrack(muonResidualsFromTrack, iEvent);
316  }
317  }
318  }
319  }
320 }
321 
323  const edm::Event &iEvent) {
324  if (mrft.trackerNumHits() < m_minTrackerHits)
325  return;
326  if (!m_allowTIDTEC && mrft.contains_TIDTEC())
327  return;
328  if (mrft.normalizedChi2() > m_maxTrackerRedChi2)
329  return;
330 
331  int nMuChambers = 0;
332  std::vector<DetId> chamberIds = mrft.chamberIds();
333  for (unsigned ch = 0; ch < chamberIds.size(); ch++)
334  if (chamberIds[ch].det() == DetId::Muon)
335  nMuChambers++;
336  if (nMuChambers < m_minNCrossedChambers)
337  return;
338 
339  char charge = (mrft.getTrack()->charge() > 0 ? 1 : -1);
340  // double qoverpt = track->charge() / track->pt();
341  // double qoverpz = track->charge() / track->pz();
342 
344 
345  for (std::vector<DetId>::const_iterator chamberId = chamberIds.begin(); chamberId != chamberIds.end(); ++chamberId) {
346  if (chamberId->det() != DetId::Muon)
347  continue;
348 
349  if (m_doDT && chamberId->subdetId() == MuonSubdetId::DT) {
352  DTChamberId id(chamberId->rawId());
353 
354  m_counter_dt++;
355 
356  if (id.station() < 4 && dt13 != nullptr && dt13->numHits() >= m_minDT13Hits && dt2 != nullptr &&
357  dt2->numHits() >= m_minDT2Hits && (dt2->chi2() / double(dt2->ndof())) < 2.0) {
359 
360  double residual = dt13->global_residual();
361  double resslope = dt13->global_resslope();
362  double chi2 = dt13->chi2();
363  int dof = dt13->ndof();
364 
365  align::GlobalPoint gpos;
366  if (m_useStubPosition)
367  gpos = dt13->global_stubpos();
368  else
369  gpos = dt13->global_trackpos();
370  double phi = atan2(gpos.y(), gpos.x());
371  double z = gpos.z();
372 
373  assert(1 <= id.sector() && id.sector() <= 14);
374 
375  m_DTvsz_station[id.station() - 1][id.sector() - 1]->fill_x(charge, z, residual, chi2, dof);
376  m_DTvsz_station[id.station() - 1][id.sector() - 1]->fill_dxdz(charge, z, resslope, chi2, dof);
377  m_DTvsphi_station[id.station() - 1][id.wheel() + 2]->fill_x(charge, phi, residual, chi2, dof);
378  m_DTvsphi_station[id.station() - 1][id.wheel() + 2]->fill_dxdz(charge, phi, resslope, chi2, dof);
379 
381 
382  residual = dt2->global_residual();
383  resslope = dt2->global_resslope();
384  chi2 = dt2->chi2();
385  dof = dt2->ndof();
386 
387  if (m_useStubPosition)
388  gpos = dt2->global_stubpos();
389  else
390  gpos = dt2->global_trackpos();
391  phi = atan2(gpos.y(), gpos.x());
392  z = gpos.z();
393 
394  assert(1 <= id.sector() && id.sector() <= 14);
395 
396  m_DTvsz_station[id.station() - 1][id.sector() - 1]->fill_y(charge, z, residual, chi2, dof);
397  m_DTvsz_station[id.station() - 1][id.sector() - 1]->fill_dydz(charge, z, resslope, chi2, dof);
398  m_DTvsphi_station[id.station() - 1][id.wheel() + 2]->fill_y(charge, phi, residual, chi2, dof);
399  m_DTvsphi_station[id.station() - 1][id.wheel() + 2]->fill_dydz(charge, phi, resslope, chi2, dof);
400  }
401 
402  if (id.station() == 4 && dt13 != nullptr && dt13->numHits() >= m_minDT13Hits) {
404 
405  double residual = dt13->global_residual();
406  double resslope = dt13->global_resslope();
407  double chi2 = dt13->chi2();
408  int dof = dt13->ndof();
409 
410  align::GlobalPoint gpos;
411  if (m_useStubPosition)
412  gpos = dt13->global_stubpos();
413  else
414  gpos = dt13->global_trackpos();
415  double phi = atan2(gpos.y(), gpos.x());
416  double z = gpos.z();
417 
418  assert(1 <= id.sector() && id.sector() <= 14);
419 
420  m_DTvsz_station[id.station() - 1][id.sector() - 1]->fill_x(charge, z, residual, chi2, dof);
421  m_DTvsz_station[id.station() - 1][id.sector() - 1]->fill_dxdz(charge, z, resslope, chi2, dof);
422  m_DTvsphi_station[id.station() - 1][id.wheel() + 2]->fill_x(charge, phi, residual, chi2, dof);
423  m_DTvsphi_station[id.station() - 1][id.wheel() + 2]->fill_dxdz(charge, phi, resslope, chi2, dof);
424  }
425  }
426 
427  else if (m_doCSC && chamberId->subdetId() == MuonSubdetId::CSC) {
429  CSCDetId id(chamberId->rawId());
430 
431  int ring = id.ring();
432  if (id.ring() == 4)
433  ring = 1; // combine ME1/a + ME1/b
434 
435  m_counter_csc++;
436 
437  if (csc != nullptr && csc->numHits() >= m_minCSCHits) {
439 
440  double residual = csc->global_residual();
441  double resslope = csc->global_resslope();
442  double chi2 = csc->chi2();
443  int dof = csc->ndof();
444 
445  align::GlobalPoint gpos;
446  if (m_useStubPosition)
447  gpos = csc->global_stubpos();
448  else
449  gpos = csc->global_trackpos();
450  double phi = atan2(gpos.y(), gpos.x());
451  // start phi from -5deg
452  if (phi < -M_PI / 180. * 5.)
453  phi += 2. * M_PI;
454  double R = sqrt(pow(gpos.x(), 2) + pow(gpos.y(), 2));
455 
456  int chamber = id.chamber() - 1;
457  if (id.station() > 1 && ring == 1)
458  chamber *= 2;
459 
460  assert(1 <= id.endcap() && id.endcap() <= 2 && 0 <= chamber && chamber <= 35);
461 
462  if (R > 0.)
463  m_CSCvsphi_me[id.endcap() - 1][id.station() - 1][ring - 1]->fill_x_1d(residual / R, chi2, dof);
464 
465  m_CSCvsr_me[id.endcap() - 1][id.station() - 1][chamber]->fill_x(charge, R, residual, chi2, dof);
466  m_CSCvsr_me[id.endcap() - 1][id.station() - 1][chamber]->fill_dxdz(charge, R, resslope, chi2, dof);
467  m_CSCvsphi_me[id.endcap() - 1][id.station() - 1][ring - 1]->fill_x(charge, phi, residual, chi2, dof);
468  m_CSCvsphi_me[id.endcap() - 1][id.station() - 1][ring - 1]->fill_dxdz(charge, phi, resslope, chi2, dof);
469 
470  if (m_createNtuple && chi2 > 0.) // && TMath::Prob(chi2, dof) < 0.95)
471  {
472  m_id.init(id);
473  m_tr.q = charge;
474  m_tr.pt = mrft.getTrack()->pt();
475  m_tr.pz = mrft.getTrack()->pz();
476  m_re.res = residual;
477  m_re.slope = resslope;
478  m_re.rho = R;
479  m_re.phi = phi;
480  m_re.z = gpos.z();
481  m_run = iEvent.id().run();
482  m_cscnt->Fill();
483  }
484  }
485  }
486 
487  //else { assert(false); }
488  } // end loop over chambers
489 }
490 
492  std::cout << "AlignmentMonitorMuonSystemMap1D counters:" << std::endl;
493  std::cout << " monitor m_counter_event = " << m_counter_event << std::endl;
494  std::cout << " monitor m_counter_track = " << m_counter_track << std::endl;
495  std::cout << " monitor m_counter_trackppt = " << m_counter_trackmoment << std::endl;
496  std::cout << " monitor m_counter_trackdxy = " << m_counter_trackdxy << std::endl;
497  std::cout << " monitor m_counter_trackokay = " << m_counter_trackokay << std::endl;
498  std::cout << " monitor m_counter_dt = " << m_counter_dt << std::endl;
499  std::cout << " monitor m_counter_13numhits = " << m_counter_13numhits << std::endl;
500  std::cout << " monitor m_counter_2numhits = " << m_counter_2numhits << std::endl;
501  std::cout << " monitor m_counter_csc = " << m_counter_csc << std::endl;
502  std::cout << " monitor m_counter_cscnumhits = " << m_counter_cscnumhits << std::endl;
503 }
504 
506  std::string name, AlignmentMonitorMuonSystemMap1D *module, int bins, double low, double high, bool xy, bool add_1d)
507  : m_name(name), m_bins(bins), m_xy(xy), m_1d(add_1d) {
508  m_x_2d = m_y_2d = m_dxdz_2d = m_dydz_2d = nullptr;
509  std::stringstream name_x_2d, name_y_2d, name_dxdz_2d, name_dydz_2d;
510  name_x_2d << m_name << "_x_2d";
511  name_y_2d << m_name << "_y_2d";
512  name_dxdz_2d << m_name << "_dxdz_2d";
513  name_dydz_2d << m_name << "_dydz_2d";
514 
515  const int nbins = 200;
516  const double window = 100.;
517 
518  m_x_2d = module->book2D("/iterN/", name_x_2d.str(), "", m_bins, low, high, nbins, -window, window);
519  if (m_xy)
520  m_y_2d = module->book2D("/iterN/", name_y_2d.str(), "", m_bins, low, high, nbins, -window, window);
521  m_dxdz_2d = module->book2D("/iterN/", name_dxdz_2d.str(), "", m_bins, low, high, nbins, -window, window);
522  if (m_xy)
523  m_dydz_2d = module->book2D("/iterN/", name_dydz_2d.str(), "", m_bins, low, high, nbins, -window, window);
524 
525  m_x_1d = nullptr;
526  if (m_1d) {
527  std::stringstream name_x_1d; //, name_y_1d, name_dxdz_1d, name_dydz_1d;
528  name_x_1d << m_name << "_x_1d";
529  m_x_1d = module->book1D("/iterN/", name_x_1d.str(), "", nbins, -window, window);
530  }
531 }
532 
534  if (m_1d && chi2 > 0.) {
535  // assume that residx was in radians
536  double residual = residx * 1000.;
537  m_x_1d->Fill(residual);
538  }
539 }
540 
542  char charge, double abscissa, double residx, double chi2, int dof) {
543  if (chi2 > 0.) {
544  double residual = residx * 10.;
545  //double weight = dof / chi2;
546  m_x_2d->Fill(abscissa, residual);
547  }
548 }
549 
551  char charge, double abscissa, double residy, double chi2, int dof) {
552  if (m_xy && chi2 > 0.) {
553  double residual = residy * 10.;
554  //double weight = dof / chi2;
555  m_y_2d->Fill(abscissa, residual);
556  }
557 }
558 
560  char charge, double abscissa, double slopex, double chi2, int dof) {
561  if (chi2 > 0.) {
562  double residual = slopex * 1000.;
563  //double weight = dof / chi2;
564  m_dxdz_2d->Fill(abscissa, residual);
565  }
566 }
567 
569  char charge, double abscissa, double slopey, double chi2, int dof) {
570  if (m_xy && chi2 > 0.) {
571  double residual = slopey * 1000.;
572  //double weight = dof / chi2;
573  m_dydz_2d->Fill(abscissa, residual);
574  }
575 }
576 
AlignableNavigator * pNavigator()
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
void fill_x(char charge, double abscissa, double residx, double chi2, int dof)
void fill_dydz(char charge, double abscissa, double slopey, double chi2, int dof)
void fill_y(char charge, double abscissa, double residy, double chi2, int dof)
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > m_esTokenGBTGeom
T z() const
Definition: PV3DBase.h:61
align::GlobalPoint global_trackpos()
AlignmentMonitorMuonSystemMap1D(const edm::ParameterSet &cfg, edm::ConsumesCollector iC)
std::string to_string(const V &value)
Definition: OMSAccess.h:71
MuonSystemMapPlot1D * m_CSCvsr_me[2][4][36]
std::string const & label() const
Definition: InputTag.h:36
MuonSystemMapPlot1D * m_CSCvsphi_me[2][4][3]
const edm::ESGetToken< Propagator, TrackingComponentsRecord > m_esTokenProp
assert(be >=bs)
void book() override
Book or retrieve histograms; MUST be reimplemented.
double pt() const
track transverse momentum
Definition: TrackBase.h:637
void event(const edm::Event &iEvent, const edm::EventSetup &iSetup, const ConstTrajTrackPairCollection &iTrajTracks) override
Called for each event (by "run()"): may be reimplemented.
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
int charge() const
track electric charge
Definition: TrackBase.h:596
int iEvent
Definition: GenABIO.cc:224
T sqrt(T t)
Definition: SSEVec.h:19
const reco::Track * getTrack()
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
Definition: svgfig.py:643
bool getData(T &iHolder) const
Definition: EventSetup.h:122
std::vector< ConstTrajTrackPair > ConstTrajTrackPairCollection
const edm::InputTag m_beamSpotTag
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
Definition: L1Track.h:19
#define M_PI
void fill_dxdz(char charge, double abscissa, double slopex, double chi2, int dof)
std::vector< MuonSystemMapPlot1D * > m_plots
double global_residual() const
const MuonResidualsFromTrack::BuilderToken m_esTokenBuilder
const std::vector< DetId > chamberIds() const
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:646
align::GlobalPoint global_stubpos()
HLT enums.
MuonSystemMapPlot1D(std::string name, AlignmentMonitorMuonSystemMap1D *module, int bins, double low, double high, bool xy, bool add_1d)
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > m_esTokenMF
#define DEFINE_EDM_PLUGIN(factory, type, name)
void processMuonResidualsFromTrack(MuonResidualsFromTrack &mrft, const edm::Event &iEvent)
static constexpr int DT
Definition: MuonSubdetId.h:11
tmp
align.sh
Definition: createJobs.py:716
static constexpr int CSC
Definition: MuonSubdetId.h:12
const edm::ESGetToken< DetIdAssociator, DetIdAssociatorRecord > m_esTokenDetId
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
MuonChamberResidual * chamberResidual(DetId chamberId, int type)
double global_resslope() const