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 
32 
33 
35 {
36 public:
39 
40  void book() override;
41 
42  void event(const edm::Event &iEvent, const edm::EventSetup &iSetup, const ConstTrajTrackPairCollection& iTrajTracks) override;
44 
45  void afterAlignment() override;
46 
47 private:
48 
49  // parameters
51  double m_minTrackPt;
52  double m_maxTrackPt;
53  double m_minTrackP;
54  double m_maxTrackP;
55  double m_maxDxy;
63  bool m_doDT;
64  bool m_doCSC;
67 
68  // counter
79 
80  // histogram helper
82  {
83  public:
84  MuonSystemMapPlot1D(std::string name, AlignmentMonitorMuonSystemMap1D *module, int bins, double low, double high, bool xy, bool add_1d);
85 
86  void fill_x_1d(double residx, double chi2, int dof);
87  void fill_x(char charge, double abscissa, double residx, double chi2, int dof);
88  void fill_y(char charge, double abscissa, double residy, double chi2, int dof);
89  void fill_dxdz(char charge, double abscissa, double slopex, double chi2, int dof);
90  void fill_dydz(char charge, double abscissa, double slopey, double chi2, int dof);
91 
92  private:
94  int m_bins;
95  bool m_xy;
96  bool m_1d;
97  TH1F *m_x_1d;
99  };
100 
101  MuonSystemMapPlot1D *m_DTvsz_station[4][14]; // [station][sector]
102  MuonSystemMapPlot1D *m_CSCvsr_me[2][4][36]; // [endcap][station][chamber]
103  MuonSystemMapPlot1D *m_DTvsphi_station[4][5];// [station][wheel]
104  MuonSystemMapPlot1D *m_CSCvsphi_me[2][4][3]; // [endcap][station][ring]
105 
106  std::vector<MuonSystemMapPlot1D*> m_plots;
107 
108  std::string num02d(int num);
109 
110  // optional debug ntuple
111  TTree *m_cscnt;
112 
113  struct MyCSCDetId
114  {
115  void init(CSCDetId &id)
116  {
117  e = id.endcap();
118  s = id.station();
119  r = id.ring();
120  c = id.chamber();
121  t = id.iChamberType();
122  }
123  Short_t e, s, r, c;
124  Short_t t; // type 1-10: ME1/a,1/b,1/2,1/3,2/1...4/2
125  };
127 
128  struct MyTrack
129  {
130  Int_t q;
131  Float_t pt, pz;
132  };
134 
135  struct MyResidual
136  {
137  Float_t res, slope, rho, phi, z;
138  };
140 
141  UInt_t m_run;
142 };
143 
144 
145 
147  : AlignmentMonitorBase(cfg, "AlignmentMonitorMuonSystemMap1D")
148  , m_muonCollectionTag(cfg.getParameter<edm::InputTag>("muonCollectionTag"))
149  , m_minTrackPt(cfg.getParameter<double>("minTrackPt"))
150  , m_maxTrackPt(cfg.getParameter<double>("maxTrackPt"))
151  , m_minTrackP(cfg.getParameter<double>("minTrackP"))
152  , m_maxTrackP(cfg.getParameter<double>("maxTrackP"))
153  , m_maxDxy(cfg.getParameter<double>("maxDxy"))
154  , m_minTrackerHits(cfg.getParameter<int>("minTrackerHits"))
155  , m_maxTrackerRedChi2(cfg.getParameter<double>("maxTrackerRedChi2"))
156  , m_allowTIDTEC(cfg.getParameter<bool>("allowTIDTEC"))
157  , m_minNCrossedChambers(cfg.getParameter<int>("minNCrossedChambers"))
158  , m_minDT13Hits(cfg.getParameter<int>("minDT13Hits"))
159  , m_minDT2Hits(cfg.getParameter<int>("minDT2Hits"))
160  , m_minCSCHits(cfg.getParameter<int>("minCSCHits"))
161  , m_doDT(cfg.getParameter<bool>("doDT"))
162  , m_doCSC(cfg.getParameter<bool>("doCSC"))
163  , m_useStubPosition(cfg.getParameter<bool>("useStubPosition"))
164  , m_createNtuple(cfg.getParameter<bool>("createNtuple"))
165 {
166  if (m_createNtuple)
167  {
169  m_cscnt = fs->make<TTree>("mualNtuple", "mualNtuple");
170  m_cscnt->Branch("id", &m_id.e,"e/S:s:r:c:t");
171  m_cscnt->Branch("tr", &m_tr.q,"q/I:pt/F:pz");
172  m_cscnt->Branch("re", &m_re.res, "res/F:slope:rho:phi:z");
173  m_cscnt->Branch("run", &m_run, "run/i");
174  }
175 }
176 
177 
179 {
180  assert(num>=0 && num <100);
181  char tmp[4];
182  sprintf(tmp, "%02d", num);
183  return std::string(tmp);
184 }
185 
186 
188 {
189  std::string wheel_label[5]={"A","B","C","D","E"};
190 
191  for (unsigned char station = 1; station<=4; station++)
192  {
193  std::string s_station = std::to_string(station);
194 
195  bool do_y = true;
196  if (station==4) do_y = false;
197 
198  // *** DT ***
199  if (m_doDT) for (int sector = 1; sector <= 14; sector++)
200  {
201  if ((station<4 && sector <= 12) || station==4)
202  {
203  m_DTvsz_station[station-1][sector-1] =
204  new MuonSystemMapPlot1D("DTvsz_st" + s_station + "sec" + num02d(sector), this, 60, -660., 660., do_y,false);
205  m_plots.push_back(m_DTvsz_station[station-1][sector-1]);
206  }
207  }
208 
209  if (m_doDT) for (int wheel = -2; wheel <= 2; wheel++)
210  {
212  new MuonSystemMapPlot1D("DTvsphi_st" + s_station + "wh" + wheel_label[wheel+2], this, 180, -M_PI, M_PI, do_y, false);
213  m_plots.push_back(m_DTvsphi_station[station-1][wheel+2]);
214  }
215 
216  // *** CSC ***
217  if (m_doCSC) for (int endcap = 1; endcap <= 2; endcap++)
218  {
219  std::string s_endcap("m");
220  if (endcap == 1) s_endcap = "p";
221 
222  for (int chamber = 1; chamber <= 36; chamber++)
223  {
224  m_CSCvsr_me[endcap-1][station-1][chamber-1] =
225  new MuonSystemMapPlot1D("CSCvsr_me" + s_endcap + s_station +"ch" + num02d(chamber), this, 60, 100., 700., false, false);
226  m_plots.push_back(m_CSCvsr_me[endcap-1][station-1][chamber-1]);
227  }
228 
229  for (int ring = 1; ring <= 3; ring++) // the ME1/a (ring4) is not independent from ME1/b (ring1)
230  {
231  std::string s_ring = std::to_string(ring);
232  if ( (station>1 && ring<=2) || station==1)
233  {
234  m_CSCvsphi_me[endcap-1][station-1][ring-1] =
235  new MuonSystemMapPlot1D("CSCvsphi_me" + s_endcap + s_station + s_ring, this, 180, -M_PI/180.*5., M_PI*(2.-5./180.), false, true);
236  m_plots.push_back(m_CSCvsphi_me[endcap-1][station-1][ring-1]);
237  }
238  }
239  } // endcaps
240  } // stations
241 
242  m_counter_event = 0;
243  m_counter_track = 0;
245  m_counter_trackdxy = 0;
247  m_counter_dt = 0;
249  m_counter_2numhits = 0;
250  m_counter_csc = 0;
252 }
253 
254 
256 {
257  m_counter_event++;
258 
260  iSetup.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
261 
263  iEvent.getByLabel(m_beamSpotTag, beamSpot);
264 
265  edm::ESHandle<DetIdAssociator> muonDetIdAssociator_;
266  iSetup.get<DetIdAssociatorRecord>().get("MuonDetIdAssociator", muonDetIdAssociator_);
267 
269  iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny",prop);
270 
272  iSetup.get<IdealMagneticFieldRecord>().get(magneticField);
273 
274  if (m_muonCollectionTag.label().empty()) // use trajectories
275  {
276  for (ConstTrajTrackPairCollection::const_iterator trajtrack = trajtracks.begin(); trajtrack != trajtracks.end(); ++trajtrack)
277  {
278  m_counter_track++;
279  const Trajectory* traj = (*trajtrack).first;
280  const reco::Track* track = (*trajtrack).second;
281 
282  if (m_minTrackPt < track->pt() && track->pt() < m_maxTrackPt && m_minTrackP < track->p() && track->p() < m_maxTrackP)
283  {
285  if ( fabs(track->dxy(beamSpot->position())) < m_maxDxy )
286  {
288 
289  MuonResidualsFromTrack muonResidualsFromTrack(iSetup, magneticField, globalGeometry, muonDetIdAssociator_, prop, traj, track, pNavigator(), 1000.);
290  processMuonResidualsFromTrack(muonResidualsFromTrack, iEvent);
291  }
292  } // end if track has acceptable momentum
293  } // end loop over tracks
294  }
295  else
296  {
298  iEvent.getByLabel(m_muonCollectionTag, muons);
299 
300  for (reco::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); ++muon)
301  {
302  if ( !(muon->isTrackerMuon() && muon->innerTrack().isNonnull() ) ) continue;
303 
304  m_counter_track++;
305 
306  if (m_minTrackPt < muon->pt() && muon->pt() < m_maxTrackPt && m_minTrackP < muon->p() && muon->p() < m_maxTrackP )
307  {
309  if (fabs(muon->innerTrack()->dxy(beamSpot->position())) < m_maxDxy)
310  {
312 
313  MuonResidualsFromTrack muonResidualsFromTrack(globalGeometry, &(*muon), pNavigator(), 100.);
314  processMuonResidualsFromTrack(muonResidualsFromTrack, iEvent);
315  }
316  }
317  }
318  }
319 }
320 
321 
323 {
324  if (mrft.trackerNumHits() < m_minTrackerHits) return;
325  if (!m_allowTIDTEC && mrft.contains_TIDTEC()) return;
326  if (mrft.normalizedChi2() > m_maxTrackerRedChi2) return;
327 
328  int nMuChambers = 0;
329  std::vector<DetId> chamberIds = mrft.chamberIds();
330  for (unsigned ch=0; ch < chamberIds.size(); ch++) if (chamberIds[ch].det() == DetId::Muon) nMuChambers++;
331  if (nMuChambers < m_minNCrossedChambers ) return;
332 
333  char charge = (mrft.getTrack()->charge() > 0 ? 1 : -1);
334  // double qoverpt = track->charge() / track->pt();
335  // double qoverpz = track->charge() / track->pz();
336 
338 
339  for (std::vector<DetId>::const_iterator chamberId = chamberIds.begin(); chamberId != chamberIds.end(); ++chamberId)
340  {
341  if (chamberId->det() != DetId::Muon ) continue;
342 
343  if (m_doDT && chamberId->subdetId() == MuonSubdetId::DT)
344  {
347  DTChamberId id(chamberId->rawId());
348 
349  m_counter_dt++;
350 
351  if (id.station() < 4 && dt13 != nullptr && dt13->numHits() >= m_minDT13Hits && dt2 != nullptr && dt2->numHits() >= m_minDT2Hits && (dt2->chi2() / double(dt2->ndof())) < 2.0)
352  {
354 
355  double residual = dt13->global_residual();
356  double resslope = dt13->global_resslope();
357  double chi2 = dt13->chi2();
358  int dof = dt13->ndof();
359 
360  align::GlobalPoint gpos;
361  if (m_useStubPosition) gpos = dt13->global_stubpos();
362  else gpos = dt13->global_trackpos();
363  double phi = atan2(gpos.y(), gpos.x());
364  double z = gpos.z();
365 
366  assert(1 <= id.sector() && id.sector() <= 14);
367 
368  m_DTvsz_station[id.station()-1][id.sector()-1]->fill_x(charge, z, residual, chi2, dof);
369  m_DTvsz_station[id.station()-1][id.sector()-1]->fill_dxdz(charge, z, resslope, chi2, dof);
370  m_DTvsphi_station[id.station()-1][id.wheel()+2]->fill_x(charge, phi, residual, chi2, dof);
371  m_DTvsphi_station[id.station()-1][id.wheel()+2]->fill_dxdz(charge, phi, resslope, chi2, dof);
372 
374 
375  residual = dt2->global_residual();
376  resslope = dt2->global_resslope();
377  chi2 = dt2->chi2();
378  dof = dt2->ndof();
379 
380  if (m_useStubPosition) gpos = dt2->global_stubpos();
381  else gpos = dt2->global_trackpos();
382  phi = atan2(gpos.y(), gpos.x());
383  z = gpos.z();
384 
385  assert(1 <= id.sector() && id.sector() <= 14);
386 
387  m_DTvsz_station[id.station()-1][id.sector()-1]->fill_y(charge, z, residual, chi2, dof);
388  m_DTvsz_station[id.station()-1][id.sector()-1]->fill_dydz(charge, z, resslope, chi2, dof);
389  m_DTvsphi_station[id.station()-1][id.wheel()+2]->fill_y(charge, phi, residual, chi2, dof);
390  m_DTvsphi_station[id.station()-1][id.wheel()+2]->fill_dydz(charge, phi, resslope, chi2, dof);
391  }
392 
393  if (id.station() == 4 && dt13 != nullptr && dt13->numHits() >= m_minDT13Hits)
394  {
396 
397  double residual = dt13->global_residual();
398  double resslope = dt13->global_resslope();
399  double chi2 = dt13->chi2();
400  int dof = dt13->ndof();
401 
402  align::GlobalPoint gpos;
403  if (m_useStubPosition) gpos = dt13->global_stubpos();
404  else gpos = dt13->global_trackpos();
405  double phi = atan2(gpos.y(), gpos.x());
406  double z = gpos.z();
407 
408  assert(1 <= id.sector() && id.sector() <= 14);
409 
410  m_DTvsz_station[id.station()-1][id.sector()-1]->fill_x(charge, z, residual, chi2, dof);
411  m_DTvsz_station[id.station()-1][id.sector()-1]->fill_dxdz(charge, z, resslope, chi2, dof);
412  m_DTvsphi_station[id.station()-1][id.wheel()+2]->fill_x(charge, phi, residual, chi2, dof);
413  m_DTvsphi_station[id.station()-1][id.wheel()+2]->fill_dxdz(charge, phi, resslope, chi2, dof);
414  }
415  }
416 
417  else if (m_doCSC && chamberId->subdetId() == MuonSubdetId::CSC)
418  {
420  CSCDetId id(chamberId->rawId());
421 
422  int ring = id.ring();
423  if (id.ring()==4) ring = 1; // combine ME1/a + ME1/b
424 
425  m_counter_csc++;
426 
427  if (csc != nullptr && csc->numHits() >= m_minCSCHits)
428  {
430 
431  double residual = csc->global_residual();
432  double resslope = csc->global_resslope();
433  double chi2 = csc->chi2();
434  int dof = csc->ndof();
435 
436  align::GlobalPoint gpos;
437  if (m_useStubPosition) gpos = csc->global_stubpos();
438  else gpos = csc->global_trackpos();
439  double phi = atan2(gpos.y(), gpos.x());
440  // start phi from -5deg
441  if (phi<-M_PI/180.*5.) phi += 2.*M_PI;
442  double R = sqrt(pow(gpos.x(), 2) + pow(gpos.y(), 2));
443 
444  int chamber = id.chamber() - 1;
445  if (id.station() > 1 && ring == 1) chamber *= 2;
446 
447  assert(1 <= id.endcap() && id.endcap() <= 2 && 0 <= chamber && chamber <= 35);
448 
449  if (R>0.) m_CSCvsphi_me[id.endcap()-1][id.station()-1][ring-1]->fill_x_1d(residual/R, chi2, dof);
450 
451  m_CSCvsr_me[id.endcap()-1][id.station()-1][chamber]->fill_x(charge, R, residual, chi2, dof);
452  m_CSCvsr_me[id.endcap()-1][id.station()-1][chamber]->fill_dxdz(charge, R, resslope, chi2, dof);
453  m_CSCvsphi_me[id.endcap()-1][id.station()-1][ring-1]->fill_x(charge, phi, residual, chi2, dof);
454  m_CSCvsphi_me[id.endcap()-1][id.station()-1][ring-1]->fill_dxdz(charge, phi, resslope, chi2, dof);
455 
456  if (m_createNtuple && chi2 > 0.)// && TMath::Prob(chi2, dof) < 0.95)
457  {
458  m_id.init(id);
459  m_tr.q = charge;
460  m_tr.pt = mrft.getTrack()->pt();
461  m_tr.pz = mrft.getTrack()->pz();
462  m_re.res = residual;
463  m_re.slope = resslope;
464  m_re.rho = R;
465  m_re.phi = phi;
466  m_re.z = gpos.z();
467  m_run = iEvent.id().run();
468  m_cscnt->Fill();
469  }
470 
471  }
472  }
473 
474  //else { assert(false); }
475  } // end loop over chambers
476 }
477 
478 
480 {
481  std::cout << "AlignmentMonitorMuonSystemMap1D counters:"<<std::endl;
482  std::cout << " monitor m_counter_event = " << m_counter_event << std::endl;
483  std::cout << " monitor m_counter_track = " << m_counter_track << std::endl;
484  std::cout << " monitor m_counter_trackppt = " << m_counter_trackmoment << std::endl;
485  std::cout << " monitor m_counter_trackdxy = " << m_counter_trackdxy << std::endl;
486  std::cout << " monitor m_counter_trackokay = " << m_counter_trackokay << std::endl;
487  std::cout << " monitor m_counter_dt = " << m_counter_dt << std::endl;
488  std::cout << " monitor m_counter_13numhits = " << m_counter_13numhits << std::endl;
489  std::cout << " monitor m_counter_2numhits = " << m_counter_2numhits << std::endl;
490  std::cout << " monitor m_counter_csc = " << m_counter_csc << std::endl;
491  std::cout << " monitor m_counter_cscnumhits = " << m_counter_cscnumhits << std::endl;
492 }
493 
494 
496  : m_name(name), m_bins(bins), m_xy(xy), m_1d(add_1d)
497 {
498  m_x_2d = m_y_2d = m_dxdz_2d = m_dydz_2d = nullptr;
499  std::stringstream name_x_2d, name_y_2d, name_dxdz_2d, name_dydz_2d;
500  name_x_2d << m_name << "_x_2d";
501  name_y_2d << m_name << "_y_2d";
502  name_dxdz_2d << m_name << "_dxdz_2d";
503  name_dydz_2d << m_name << "_dydz_2d";
504 
505  const int nbins = 200;
506  const double window = 100.;
507 
508  m_x_2d = module->book2D("/iterN/", name_x_2d.str(), "", m_bins, low, high, nbins, -window, window);
509  if (m_xy) m_y_2d = module->book2D("/iterN/", name_y_2d.str(), "", m_bins, low, high, nbins, -window, window);
510  m_dxdz_2d = module->book2D("/iterN/", name_dxdz_2d.str(), "", m_bins, low, high, nbins, -window, window);
511  if (m_xy) m_dydz_2d = module->book2D("/iterN/", name_dydz_2d.str(), "", m_bins, low, high, nbins, -window, window);
512 
513  m_x_1d = nullptr;
514  if (m_1d) {
515  std::stringstream name_x_1d;//, name_y_1d, name_dxdz_1d, name_dydz_1d;
516  name_x_1d << m_name << "_x_1d";
517  m_x_1d = module->book1D("/iterN/", name_x_1d.str(), "", nbins, -window, window);
518  }
519 }
520 
521 
523 {
524  if (m_1d && chi2 > 0.) {
525  // assume that residx was in radians
526  double residual = residx * 1000.;
527  m_x_1d->Fill(residual);
528  }
529 }
530 
531 
532 void AlignmentMonitorMuonSystemMap1D::MuonSystemMapPlot1D::fill_x(char charge, double abscissa, double residx, double chi2, int dof)
533 {
534  if (chi2 > 0.) {
535  double residual = residx * 10.;
536  //double weight = dof / chi2;
537  m_x_2d->Fill(abscissa, residual);
538  }
539 }
540 
541 
542 void AlignmentMonitorMuonSystemMap1D::MuonSystemMapPlot1D::fill_y(char charge, double abscissa, double residy, double chi2, int dof)
543 {
544  if (m_xy && chi2 > 0.) {
545  double residual = residy * 10.;
546  //double weight = dof / chi2;
547  m_y_2d->Fill(abscissa, residual);
548  }
549 }
550 
551 
552 void AlignmentMonitorMuonSystemMap1D::MuonSystemMapPlot1D::fill_dxdz(char charge, double abscissa, double slopex, double chi2, int dof)
553 {
554  if (chi2 > 0.) {
555  double residual = slopex * 1000.;
556  //double weight = dof / chi2;
557  m_dxdz_2d->Fill(abscissa, residual);
558  }
559 }
560 
561 
562 void AlignmentMonitorMuonSystemMap1D::MuonSystemMapPlot1D::fill_dydz(char charge, double abscissa, double slopey, double chi2, int dof)
563 {
564  if (m_xy && chi2 > 0.) {
565  double residual = slopey * 1000.;
566  //double weight = dof / chi2;
567  m_dydz_2d->Fill(abscissa, residual);
568  }
569 }
570 
571 
RunNumber_t run() const
Definition: EventID.h:39
double p() const
momentum vector magnitude
Definition: TrackBase.h:615
AlignableNavigator * pNavigator()
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)
align::GlobalPoint global_trackpos()
TH2F * book2D(std::string dir, std::string name, std::string title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
static const double slope[3]
T y() const
Definition: PV3DBase.h:63
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
MuonSystemMapPlot1D * m_CSCvsr_me[2][4][36]
MuonSystemMapPlot1D * m_CSCvsphi_me[2][4][3]
double global_residual() const
Definition: Electron.h:6
const std::vector< DetId > chamberIds() const
void book() override
Book or retrieve histograms; MUST be reimplemented.
void event(const edm::Event &iEvent, const edm::EventSetup &iSetup, const ConstTrajTrackPairCollection &iTrajTracks) override
Called for each event (by "run()"): may be reimplemented.
int iEvent
Definition: GenABIO.cc:230
static const int CSC
Definition: MuonSubdetId.h:13
T sqrt(T t)
Definition: SSEVec.h:18
double pt() const
track transverse momentum
Definition: TrackBase.h:621
T z() const
Definition: PV3DBase.h:64
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:642
std::vector< ConstTrajTrackPair > ConstTrajTrackPairCollection
const edm::InputTag m_beamSpotTag
TH1F * book1D(std::string dir, std::string name, std::string title, int nchX, double lowX, double highX)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:475
Definition: L1Track.h:19
#define M_PI
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:639
void fill_dxdz(char charge, double abscissa, double slopex, double chi2, int dof)
const T & get() const
Definition: EventSetup.h:59
align::GlobalPoint global_stubpos()
std::vector< MuonSystemMapPlot1D * > m_plots
std::string const & label() const
Definition: InputTag.h:36
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
MuonSystemMapPlot1D(std::string name, AlignmentMonitorMuonSystemMap1D *module, int bins, double low, double high, bool xy, bool add_1d)
double global_resslope() const
int charge() const
track electric charge
Definition: TrackBase.h:567
#define DEFINE_EDM_PLUGIN(factory, type, name)
const Point & position() const
position
Definition: BeamSpot.h:62
static const int DT
Definition: MuonSubdetId.h:12
void processMuonResidualsFromTrack(MuonResidualsFromTrack &mrft, const edm::Event &iEvent)
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:591
T x() const
Definition: PV3DBase.h:62
Definition: vlib.h:208
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
AlignmentMonitorMuonSystemMap1D(const edm::ParameterSet &cfg)
MuonChamberResidual * chamberResidual(DetId chamberId, int type)