CMS 3D CMS Logo

MuGEMMuonExtTableProducer.cc
Go to the documentation of this file.
4 
7 
8 #include <vector>
9 
11 
14 
18 
21 
23 
26 
28 public:
31 
34 
35 protected:
37  void fillTable(edm::Event&) final;
38 
40  void getFromES(const edm::Run&, const edm::EventSetup&) final;
41 
43  void getFromES(const edm::EventSetup&) final;
44 
45 private:
48 
51 
54 
57 
59  std::unique_ptr<MuonServiceProxy> m_muonSP;
60 };
61 
64  m_token{config, consumesCollector(), "src"},
65  m_fillPropagated{config.getParameter<bool>("fillPropagated")},
66  m_gemGeometry{consumesCollector()},
67  m_transientTrackBuilder{consumesCollector(), "TransientTrackBuilder"},
68  m_muonSP{std::make_unique<MuonServiceProxy>(config.getParameter<edm::ParameterSet>("ServiceParameters"),
69  consumesCollector())} {
70  produces<nanoaod::FlatTable>();
71 
72  if (m_fillPropagated) {
73  produces<nanoaod::FlatTable>("propagated");
74  }
75 }
76 
79 
80  desc.add<std::string>("name", "muon");
81  desc.add<edm::InputTag>("src", edm::InputTag{"patMuons"});
82 
83  desc.add<bool>("fillPropagated", true);
84  desc.setAllowAnything();
85 
86  descriptions.addWithDefaultLabel(desc);
87 }
88 
91 }
92 
95  m_muonSP->update(environment);
96 }
97 
99  unsigned int nMuons{0};
100 
101  std::vector<bool> isCSC;
102  std::vector<bool> isME11;
103 
104  std::vector<float> innermost_x;
105  std::vector<float> innermost_y;
106  std::vector<float> innermost_z;
107 
108  std::vector<float> outermost_x;
109  std::vector<float> outermost_y;
110  std::vector<float> outermost_z;
111 
112  unsigned int nProp{0};
113 
114  std::vector<uint32_t> propagated_muIdx;
115 
116  std::vector<bool> propagated_isincoming;
117  std::vector<bool> propagated_isinsideout;
118  std::vector<int16_t> propagated_region;
119  std::vector<int16_t> propagated_layer;
120  std::vector<int16_t> propagated_chamber;
121  std::vector<int16_t> propagated_etaP;
122 
123  std::vector<float> propagatedLoc_x;
124  std::vector<float> propagatedLoc_y;
125  std::vector<float> propagatedLoc_z;
126  std::vector<float> propagatedLoc_r;
127  std::vector<float> propagatedLoc_phi;
128  std::vector<float> propagatedLoc_dirX;
129  std::vector<float> propagatedLoc_dirY;
130  std::vector<float> propagatedLoc_dirZ;
131  std::vector<float> propagatedLoc_errX;
132  std::vector<float> propagatedLoc_errY;
133 
134  std::vector<float> propagatedGlb_x;
135  std::vector<float> propagatedGlb_y;
136  std::vector<float> propagatedGlb_z;
137  std::vector<float> propagatedGlb_r;
138  std::vector<float> propagatedGlb_phi;
139  std::vector<float> propagatedGlb_errX;
140  std::vector<float> propagatedGlb_errY;
141  std::vector<float> propagatedGlb_phierr;
142  std::vector<float> propagatedGlb_rerr;
143 
144  std::vector<float> propagated_EtaPartition_centerX;
145  std::vector<float> propagated_EtaPartition_centerY;
146  std::vector<float> propagated_EtaPartition_phiMax;
147  std::vector<float> propagated_EtaPartition_phiMin;
148  std::vector<float> propagated_EtaPartition_rMax;
149  std::vector<float> propagated_EtaPartition_rMin;
150 
151  std::vector<int16_t> propagated_nME1hits;
152  std::vector<int16_t> propagated_nME2hits;
153  std::vector<int16_t> propagated_nME3hits;
154  std::vector<int16_t> propagated_nME4hits;
155 
156  auto muons = m_token.conditionalGet(ev);
157 
158  // edm::ESHandle<Propagator>
159  auto&& propagator_any = m_muonSP->propagator("SteppingHelixPropagatorAny");
160  auto&& propagator_along = m_muonSP->propagator("SteppingHelixPropagatorAlong");
161  auto&& propagator_opposite = m_muonSP->propagator("SteppingHelixPropagatorOpposite");
162 
163  if (!propagator_any.isValid() || !propagator_along.isValid() || !propagator_opposite.isValid()) {
164  return;
165  }
166 
167  if (muons.isValid() && m_transientTrackBuilder.isValid()) {
168  //loop on recoMuons
169  for (const auto& muon : (*muons)) {
170  ++nMuons;
171 
172  bool is_csc = false;
173  bool is_me11 = false;
174 
175  if (!muon.outerTrack().isNull()) {
176  const auto track = muon.outerTrack().get();
177  const auto outerTrackRef = muon.outerTrack();
178 
179  float p2_in = track->innerMomentum().mag2();
180  float p2_out = track->outerMomentum().mag2();
181  float pos_out = track->outerPosition().mag2();
182  float pos_in = track->innerPosition().mag2();
183 
184  bool is_insideout = pos_in > pos_out;
185 
186  if (is_insideout) {
187  std::swap(pos_in, pos_out);
188  std::swap(p2_in, p2_out);
189  }
190 
191  bool is_incoming = p2_out > p2_in;
192 
193  const auto&& transient_track = m_transientTrackBuilder->build(track);
194  const auto& htp = transient_track.hitPattern();
195 
196  if (transient_track.isValid()) {
197  const auto innerPosGlb{transient_track.innermostMeasurementState().globalPosition()};
198  const auto outerPosGlb{transient_track.outermostMeasurementState().globalPosition()};
199 
200  innermost_x.push_back(innerPosGlb.x());
201  innermost_y.push_back(innerPosGlb.y());
202  innermost_z.push_back(innerPosGlb.z());
203  outermost_x.push_back(outerPosGlb.x());
204  outermost_y.push_back(outerPosGlb.y());
205  outermost_z.push_back(outerPosGlb.z());
206  } else {
207  innermost_x.push_back(DEFAULT_DOUBLE_VAL);
208  innermost_y.push_back(DEFAULT_DOUBLE_VAL);
209  innermost_z.push_back(DEFAULT_DOUBLE_VAL);
210  outermost_x.push_back(DEFAULT_DOUBLE_VAL);
211  outermost_y.push_back(DEFAULT_DOUBLE_VAL);
212  outermost_z.push_back(DEFAULT_DOUBLE_VAL);
213  continue;
214  }
215 
216  const auto&& start_state = transient_track.innermostMeasurementState();
217  auto& propagator = propagator_any;
218 
219  auto recHitMu = outerTrackRef->recHitsBegin();
220  auto recHitMuEnd = outerTrackRef->recHitsEnd();
221 
222  //loop on recHits which form the outerTrack
223  for (; recHitMu != recHitMuEnd; ++recHitMu) {
224  DetId detId{(*recHitMu)->geographicalId()};
225 
226  if (detId.det() == DetId::Muon && detId.subdetId() == MuonSubdetId::CSC) {
227  is_csc = true;
228 
229  const CSCDetId csc_id{detId};
230  // ME11 chambers consist of 2 subchambers: ME11a, ME11b.
231  // In CMSSW they are referred as Stat. 1 Ring 1, Stat. 1 Ring. 4 respectively
232  if (csc_id.station() == 1 && ((csc_id.ring() == 1) || (csc_id.ring() == 4)))
233  is_me11 = true;
234  }
235  } //loop on recHits
236 
237  //if at least one CSC hit is found, perform propagation
238  if (is_csc) {
239  // CSC Hits
240  int16_t nME1_hits = 0;
241  int16_t nME2_hits = 0;
242  int16_t nME3_hits = 0;
243  int16_t nME4_hits = 0;
244 
245  int nHits{htp.numberOfAllHits(htp.TRACK_HITS)};
246 
247  for (int i = 0; i != nHits; ++i) {
248  uint32_t hit = htp.getHitPattern(htp.TRACK_HITS, i);
249  int substructure = htp.getSubStructure(hit);
250  int hittype = htp.getHitType(hit);
251 
252  if (substructure == 2 && hittype == 0) { // CSC Hits
253  int CSC_station = htp.getMuonStation(hit);
254 
255  switch (CSC_station) {
256  case 1:
257  ++nME1_hits;
258  break;
259  case 2:
260  ++nME2_hits;
261  break;
262  case 3:
263  ++nME3_hits;
264  break;
265  case 4:
266  ++nME4_hits;
267  break;
268  default:
269  // do nothing
270  break;
271  }
272  }
273  }
274  //loop on GEM etaPartitions
275  for (const auto& eta_partition : m_gemGeometry->etaPartitions()) {
276  if (eta_partition->id().station() != 1) {
277  continue; //Only takes GE1/1
278  }
279  const GEMDetId&& gem_id = eta_partition->id();
280 
281  bool is_opposite_region = muon.eta() * gem_id.region() < 0;
282  if (is_incoming xor is_opposite_region) {
283  continue; //Check on muon direction
284  }
285  const BoundPlane& bound_plane = eta_partition->surface();
286 
287  const auto& dest_state = propagator->propagate(start_state, bound_plane);
288  if (!dest_state.isValid()) {
289  // std::cout << "failed to propagate" << std::endl;
290  continue;
291  }
292  const GlobalPoint&& dest_global_pos = dest_state.globalPosition();
293  const LocalPoint&& local_point = eta_partition->toLocal(dest_global_pos);
294  const LocalPoint local_point_2d{local_point.x(), local_point.y(), 0.0f};
295 
296  if (eta_partition->surface().bounds().inside(local_point_2d)) {
298  // X,Y
299  double xx = dest_state.curvilinearError().matrix()(3, 3);
300  double yy = dest_state.curvilinearError().matrix()(4, 4);
301  double xy = dest_state.curvilinearError().matrix()(4, 3);
302  double dest_glob_error_x = sqrt(0.5 * (xx + yy - sqrt((xx - yy) * (xx - yy) + 4 * xy * xy)));
303  double dest_glob_error_y = sqrt(0.5 * (xx + yy + sqrt((xx - yy) * (xx - yy) + 4 * xy * xy)));
304 
305  // R,Phi
306  const LocalPoint&& dest_local_pos = eta_partition->toLocal(dest_global_pos);
307  const LocalError&& dest_local_err = dest_state.localError().positionError();
308  const GlobalError& dest_global_err =
309  ErrorFrameTransformer().transform(dest_local_err, eta_partition->surface());
310  const double dest_global_r_err = std::sqrt(dest_global_err.rerr(dest_global_pos));
311  const double dest_global_phi_err = std::sqrt(dest_global_err.phierr(dest_global_pos));
312 
313  ++nProp;
314 
315  propagated_muIdx.push_back(nMuons - 1);
316 
317  propagated_nME1hits.push_back(nME1_hits);
318  propagated_nME2hits.push_back(nME2_hits);
319  propagated_nME3hits.push_back(nME3_hits);
320  propagated_nME4hits.push_back(nME4_hits);
321 
322  const auto& eta_partition_pos{eta_partition->position()};
323  const auto& eta_partition_surf{eta_partition->surface()};
324  propagated_EtaPartition_centerX.push_back(eta_partition_pos.x());
325  propagated_EtaPartition_centerY.push_back(eta_partition_pos.y());
326  propagated_EtaPartition_rMin.push_back(eta_partition_surf.rSpan().first);
327  propagated_EtaPartition_rMax.push_back(eta_partition_surf.rSpan().second);
328  propagated_EtaPartition_phiMin.push_back(eta_partition_surf.phiSpan().first);
329  propagated_EtaPartition_phiMax.push_back(eta_partition_surf.phiSpan().second);
330 
331  propagatedGlb_x.push_back(dest_global_pos.x());
332  propagatedGlb_y.push_back(dest_global_pos.y());
333  propagatedGlb_z.push_back(dest_global_pos.z());
334  propagatedGlb_r.push_back(dest_global_pos.perp());
335  propagatedGlb_phi.push_back(dest_global_pos.phi());
336 
337  const auto dest_local_dir{dest_state.localDirection()};
338  propagatedLoc_x.push_back(dest_local_pos.x());
339  propagatedLoc_y.push_back(dest_local_pos.y());
340  propagatedLoc_z.push_back(dest_local_pos.z());
341  propagatedLoc_r.push_back(dest_local_pos.perp());
342  propagatedLoc_phi.push_back(dest_local_pos.phi());
343  propagatedLoc_dirX.push_back(dest_local_dir.x());
344  propagatedLoc_dirY.push_back(dest_local_dir.y());
345  propagatedLoc_dirZ.push_back(dest_local_dir.z());
346 
347  propagatedLoc_errX.push_back(dest_local_err.xx());
348  propagatedLoc_errY.push_back(dest_local_err.yy());
349 
350  propagatedGlb_errX.push_back(dest_glob_error_x);
351  propagatedGlb_errY.push_back(dest_glob_error_y);
352  propagatedGlb_rerr.push_back(dest_global_r_err);
353  propagatedGlb_phierr.push_back(dest_global_phi_err);
354 
355  propagated_region.push_back(gem_id.region());
356  propagated_layer.push_back(gem_id.layer());
357  propagated_chamber.push_back(gem_id.chamber());
358  propagated_etaP.push_back(gem_id.roll());
359 
360  propagated_isinsideout.push_back(is_insideout);
361  propagated_isincoming.push_back(is_incoming);
362 
363  } //propagation is inside boundaries
364  } //loop on EtaPartitions
365  } //is_csc therefore perform propagation
366  } else {
367  innermost_x.push_back(DEFAULT_DOUBLE_VAL);
368  innermost_y.push_back(DEFAULT_DOUBLE_VAL);
369  innermost_z.push_back(DEFAULT_DOUBLE_VAL);
370  outermost_x.push_back(DEFAULT_DOUBLE_VAL);
371  outermost_y.push_back(DEFAULT_DOUBLE_VAL);
372  outermost_z.push_back(DEFAULT_DOUBLE_VAL);
373  }
374  isCSC.push_back(is_csc);
375  isME11.push_back(is_me11);
376 
377  } //loop on reco muons
378  }
379 
380  auto table = std::make_unique<nanoaod::FlatTable>(nMuons, m_name, false, true);
381 
382  //table->setDoc("RECO muon information");
383 
384  addColumn(table, "innermost_x", innermost_x, "");
385  addColumn(table, "innermost_y", innermost_y, "");
386  addColumn(table, "innermost_z", innermost_z, "");
387 
388  addColumn(table, "outermost_x", outermost_x, "");
389  addColumn(table, "outermost_y", outermost_y, "");
390  addColumn(table, "outermost_z", outermost_z, "");
391  ev.put(std::move(table));
392 
393  if (m_fillPropagated) {
394  auto tabProp = std::make_unique<nanoaod::FlatTable>(nProp, m_name + "_propagated", false, false);
395 
396  addColumn(tabProp, "propagated_muIdx", propagated_muIdx, "");
397 
398  addColumn(tabProp,
399  "propagated_nME1hits",
400  propagated_nME1hits,
401  "number of hits in the CSC ME1 station"
402  "in the STA muon track extrapolated to GE11");
403  addColumn(tabProp,
404  "propagated_nME2hits",
405  propagated_nME2hits,
406  "number of hits in the CSC ME2 station"
407  "in the STA muon track extrapolated to GE11");
408  addColumn(tabProp,
409  "propagated_nME3hits",
410  propagated_nME3hits,
411  "number of hits in the CSC ME3 station"
412  "in the STA muon track extrapolated to GE11");
413  addColumn(tabProp,
414  "propagated_nME4hits",
415  propagated_nME4hits,
416  "number of hits in the CSC ME4 station"
417  "in the STA muon track extrapolated to GE11");
418 
419  addColumn(
420  tabProp, "propagated_isincoming", propagated_isincoming, "bool, condition on the muon STA track direction");
421  addColumn(
422  tabProp, "propagated_isinsideout", propagated_isinsideout, "bool, condition on the muon STA track direction");
423  addColumn(tabProp,
424  "propagated_region",
425  propagated_region,
426  "GE11 region where the extrapolated muon track falls"
427  "<br />(int, positive endcap: +1, negative endcap: -1");
428  addColumn(tabProp,
429  "propagated_layer",
430  propagated_layer,
431  "GE11 layer where the extrapolated muon track falls"
432  "<br />(int, layer1: 1, layer2: 2");
433  addColumn(tabProp,
434  "propagated_chamber",
435  propagated_chamber,
436  "GE11 superchamber where the extrapolated muon track falls"
437  "<br />(int, chambers numbered from 0 to 35");
438  addColumn(tabProp,
439  "propagated_etaP",
440  propagated_etaP,
441  "GE11 eta partition where the extrapolated muon track falls"
442  "<br />(int, partitions numbered from 1 to 8");
443 
444  addColumn(tabProp,
445  "propagatedLoc_x",
446  propagatedLoc_x,
447  "expected position of muon track extrapolated to GE11 surface"
448  "<br />(float, local layer x coordinates, cm)");
449  addColumn(tabProp,
450  "propagatedLoc_y",
451  propagatedLoc_y,
452  "expected position of muon track extrapolated to GE11 surface"
453  "<br />(float, local layer y coordinates, cm)");
454  addColumn(tabProp,
455  "propagatedLoc_z",
456  propagatedLoc_z,
457  "expected position of muon track extrapolated to GE11 surface"
458  "<br />(float, local layer z coordinates, cm)");
459  addColumn(tabProp,
460  "propagatedLoc_r",
461  propagatedLoc_r,
462  "expected position of muon track extrapolated to GE11 surface"
463  "<br />(float, local layer radial coordinate, cm)");
464  addColumn(tabProp,
465  "propagatedLoc_phi",
466  propagatedLoc_phi,
467  "expected position of muon track extrapolated to GE11 surface"
468  "<br />(float, local layer phi coordinates, rad)");
469 
470  addColumn(tabProp,
471  "propagatedLoc_dirX",
472  propagatedLoc_dirX,
473  "direction cosine of angle between local x axis and GE11 plane"
474  "<br />(float, dir. cosine)");
475  addColumn(tabProp,
476  "propagatedLoc_dirY",
477  propagatedLoc_dirY,
478  "direction cosine of angle between local y axis and GE11 plane"
479  "<br />(float, dir. cosine)");
480  addColumn(tabProp,
481  "propagatedLoc_dirZ",
482  propagatedLoc_dirZ,
483  "direction cosine of angle between local z axis and GE11 plane"
484  "<br />(float, dir. cosine)");
485 
486  addColumn(tabProp,
487  "propagatedLoc_errX",
488  propagatedLoc_errX,
489  "uncertainty on expected position of muon track extrapolated to GE11 surface"
490  "<br />(float, local layer x coordinates, cm)");
491  addColumn(tabProp,
492  "propagatedLoc_errY",
493  propagatedLoc_errY,
494  "uncertainty on expected position of muon track extrapolated to GE11 surface"
495  "<br />(float, local layer y coordinates, cm)");
496 
497  addColumn(tabProp,
498  "propagatedGlb_x",
499  propagatedGlb_x,
500  "expected position of muon track extrapolated to GE11 surface"
501  "<br />(float, global x coordinates, cm)");
502  addColumn(tabProp,
503  "propagatedGlb_y",
504  propagatedGlb_y,
505  "expected position of muon track extrapolated to GE11 surface"
506  "<br />(float, global y coordinates, cm)");
507  addColumn(tabProp,
508  "propagatedGlb_z",
509  propagatedGlb_z,
510  "expected position of muon track extrapolated to GE11 surface"
511  "<br />(float, global z coordinates, cm)");
512  addColumn(tabProp,
513  "propagatedGlb_r",
514  propagatedGlb_r,
515  "expected position of muon track extrapolated to GE11 surface"
516  "<br />(float, global radial (r) coordinates, cm)");
517  addColumn(tabProp,
518  "propagatedGlb_phi",
519  propagatedGlb_phi,
520  "expected position of muon track extrapolated to GE11 surface"
521  "<br />(float, global phi coordinates, rad)");
522  addColumn(tabProp,
523  "propagatedGlb_errX",
524  propagatedGlb_errX,
525  "uncertainty on position of muon track extrapolated to GE11 surface"
526  "<br />(float, global x coordinates, cm)");
527  addColumn(tabProp,
528  "propagatedGlb_errY",
529  propagatedGlb_errY,
530  "uncertainty on position of muon track extrapolated to GE11 surface"
531  "<br />(float, global y coordinates, cm)");
532  addColumn(tabProp,
533  "propagatedGlb_rerr",
534  propagatedGlb_rerr,
535  "uncertainty on position of muon track extrapolated to GE11 surface"
536  "<br />(float, global radial (r) coordinates, cm)");
537  addColumn(tabProp,
538  "propagatedGlb_phierr",
539  propagatedGlb_phierr,
540  "uncertainty on position of muon track extrapolated to GE11 surface"
541  "<br />(float, global phi coordinates, rad)");
542 
543  addColumn(tabProp,
544  "propagated_EtaPartition_centerX",
545  propagated_EtaPartition_centerX,
546  "global X coordinate of the center of the etaPartition"
547  "<br />where the extrapolated muon track position falls"
548  "<br />(float, global x coordinates, cm)");
549  addColumn(tabProp,
550  "propagated_EtaPartition_centerY",
551  propagated_EtaPartition_centerY,
552  "global Y coordinate of the center of the etaPartition"
553  "<br />where the extrapolated muon track position falls"
554  "<br />(float, global x coordinates, cm)");
555  addColumn(tabProp,
556  "propagated_EtaPartition_phiMax",
557  propagated_EtaPartition_phiMax,
558  "upper edge in phi global coordinates of the etaPartition"
559  "<br />where the extrapolated muon track position falls"
560  "<br />(float, global phi coordinates, rad)");
561  addColumn(tabProp,
562  "propagated_EtaPartition_phiMin",
563  propagated_EtaPartition_phiMin,
564  "lower edge in phi global coordinates of the etaPartition"
565  "<br />where the extrapolated muon track position falls"
566  "<br />(float, global phi coordinates, rad)");
567  addColumn(tabProp,
568  "propagated_EtaPartition_rMax",
569  propagated_EtaPartition_rMax,
570  "upper edge in r global coordinates of the etaPartition"
571  "<br />where the extrapolated muon track position falls"
572  "<br />(float, global radial (r) coordinates, cm)");
573  addColumn(tabProp,
574  "propagated_EtaPartition_rMin",
575  propagated_EtaPartition_rMin,
576  "lower edge in r global coordinates of the etaPartition"
577  "<br />where the extrapolated muon track position falls"
578  "<br />(float, global radial (r) coordinates, cm)");
579 
580  ev.put(std::move(tabProp), "propagated");
581  }
582 }
583 
586 
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
static GlobalError transform(const LocalError &le, const Surface &surf)
T perp() const
Definition: PV3DBase.h:69
constexpr int region() const
Definition: GEMDetId.h:171
T z() const
Definition: PV3DBase.h:61
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
const HitPattern & hitPattern() const
Definition: config.py:1
auto conditionalGet(const edm::Event &ev) const
Definition: MuNtupleUtils.h:49
constexpr int layer() const
Definition: GEMDetId.h:190
muons
the two sets of parameters below are mutually exclusive, depending if RECO or ALCARECO is used the us...
Definition: DiMuonV_cfg.py:214
static constexpr double DEFAULT_DOUBLE_VAL
Definition of default values for float variables.
constexpr int chamber() const
Definition: GEMDetId.h:183
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:112
T phierr(const GlobalPoint &aPoint) const
void getFromES(const edm::Run &, const edm::EventSetup &) final
Get info from the ES by run.
reco::TransientTrack build(const reco::Track *p) const
void addColumn(std::unique_ptr< nanoaod::FlatTable > &table, const std::string name, const std::vector< T > &vec, const std::string descr)
float yy() const
Definition: LocalError.h:24
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecord > m_transientTrackBuilder
Transient Track Builder.
void fillTable(edm::Event &) final
Fill tree branches for a given event.
bool m_fillPropagated
Fill matches table.
T sqrt(T t)
Definition: SSEVec.h:23
nano_mu::ESTokenHandle< GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_gemGeometry
GEM Geometry.
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Definition: DetId.h:17
static void fillDescriptions(edm::ConfigurationDescriptions &)
Fill descriptors.
bool isValid()
Check validity.
Definition: MuNtupleUtils.h:76
std::string m_name
The label name of the FlatTableProducer.
void getFromES(const edm::EventSetup &environment)
Get Handle from ES.
Definition: MuNtupleUtils.h:73
constexpr int roll() const
Definition: GEMDetId.h:194
bool isCSC(GeomDetEnumerators::SubDetector m)
T rerr(const GlobalPoint &aPoint) const
dictionary config
Read in AllInOne config in JSON format.
Definition: DiMuonV_cfg.py:30
TupleMultiplicity< TrackerTraits > const *__restrict__ uint32_t nHits
static constexpr int CSC
Definition: MuonSubdetId.h:12
MuGEMMuonExtTableProducer(const edm::ParameterSet &)
Constructor.
float xx() const
Definition: LocalError.h:22
def move(src, dest)
Definition: eostools.py:511
Definition: Run.h:45
nano_mu::EDTokenHandle< edm::View< reco::Muon > > m_token
The RECO mu token.
const std::vector< const GEMEtaPartition * > & etaPartitions() const
Return a vector of all GEM eta partitions.
Definition: GEMGeometry.cc:40