CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Attributes
MuGEMMuonExtTableProducer Class Reference
Inheritance diagram for MuGEMMuonExtTableProducer:
MuBaseFlatTableProducer edm::stream::EDProducer<>

Public Member Functions

 MuGEMMuonExtTableProducer (const edm::ParameterSet &)
 Constructor. More...
 
- Public Member Functions inherited from MuBaseFlatTableProducer
void beginRun (const edm::Run &run, const edm::EventSetup &config) final
 Configure event setup for each run. More...
 
void endRun (const edm::Run &, const edm::EventSetup &) final
 Empty, needed by interface. More...
 
 MuBaseFlatTableProducer (const edm::ParameterSet &)
 Constructor. More...
 
void produce (edm::Event &, const edm::EventSetup &) final
 Fill ntuples event by event. More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &)
 Fill descriptors. More...
 

Protected Member Functions

void fillTable (edm::Event &) final
 Fill tree branches for a given event. More...
 
void getFromES (const edm::Run &, const edm::EventSetup &) final
 Get info from the ES by run. More...
 
void getFromES (const edm::EventSetup &) final
 Get info from the ES for a given event. More...
 
- Protected Member Functions inherited from MuBaseFlatTableProducer
template<typename T >
void addColumn (std::unique_ptr< nanoaod::FlatTable > &table, const std::string name, const std::vector< T > &vec, const std::string descr)
 

Private Attributes

bool m_fillPropagated
 Fill matches table. More...
 
nano_mu::ESTokenHandle< GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRunm_gemGeometry
 GEM Geometry. More...
 
std::unique_ptr< MuonServiceProxym_muonSP
 Muon service proxy. More...
 
nano_mu::EDTokenHandle< edm::View< reco::Muon > > m_token
 The RECO mu token. More...
 
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecordm_transientTrackBuilder
 Transient Track Builder. More...
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Protected Attributes inherited from MuBaseFlatTableProducer
std::string m_name
 The label name of the FlatTableProducer. More...
 
- Static Protected Attributes inherited from MuBaseFlatTableProducer
static constexpr double DEFAULT_DOUBLE_VAL {-999.0}
 Definition of default values for float variables. More...
 
static constexpr double DEFAULT_DOUBLE_VAL_POS {-1.0}
 Definition of default values for positive float variables. More...
 
static constexpr int8_t DEFAULT_INT8_VAL {-99}
 Definition of default values for int8 variables. More...
 
static constexpr int DEFAULT_INT_VAL {-999}
 Definition of default values for int variables. More...
 
static constexpr int DEFAULT_INT_VAL_POS {-1}
 Definition of default values for positive int variables. More...
 

Detailed Description

Definition at line 27 of file MuGEMMuonExtTableProducer.cc.

Constructor & Destructor Documentation

◆ MuGEMMuonExtTableProducer()

MuGEMMuonExtTableProducer::MuGEMMuonExtTableProducer ( const edm::ParameterSet config)

Constructor.

Definition at line 62 of file MuGEMMuonExtTableProducer.cc.

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 }
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.
Definition: config.py:1
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecord > m_transientTrackBuilder
Transient Track Builder.
bool m_fillPropagated
Fill matches table.
nano_mu::ESTokenHandle< GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_gemGeometry
GEM Geometry.
dictionary config
Read in AllInOne config in JSON format.
Definition: DiMuonV_cfg.py:29
nano_mu::EDTokenHandle< edm::View< reco::Muon > > m_token
The RECO mu token.

Member Function Documentation

◆ fillDescriptions()

void MuGEMMuonExtTableProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Fill descriptors.

Definition at line 77 of file MuGEMMuonExtTableProducer.cc.

References edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, and AlCaHLTBitMon_QueryRunRegistry::string.

77  {
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 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)

◆ fillTable()

void MuGEMMuonExtTableProducer::fillTable ( edm::Event ev)
finalprotectedvirtual

Fill tree branches for a given event.

muon.outerTrack().isNull()

Implements MuBaseFlatTableProducer.

Definition at line 98 of file MuGEMMuonExtTableProducer.cc.

References MuBaseFlatTableProducer::addColumn(), TransientTrackBuilder::build(), GEMDetId::chamber(), nano_mu::EDTokenHandle< T >::conditionalGet(), MuonSubdetId::CSC, MuBaseFlatTableProducer::DEFAULT_DOUBLE_VAL, hcalRecHitTable_cff::detId, GEMGeometry::etaPartitions(), makeMEIFBenchmarkPlots::ev, reco::TransientTrack::hitPattern(), mps_fire::i, GeomDetEnumerators::isCSC(), nano_mu::ESTokenHandle< T, R, TR >::isValid(), GEMDetId::layer(), m_fillPropagated, m_gemGeometry, m_muonSP, MuBaseFlatTableProducer::m_name, m_token, m_transientTrackBuilder, eostools::move(), DetId::Muon, DiMuonV_cfg::muons, nHits, custom_jme_cff::nMuons, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), GlobalErrorBase< T, ErrorWeightType >::phierr(), TrackCandidateProducer_cfi::propagator, GEMDetId::region(), GlobalErrorBase< T, ErrorWeightType >::rerr(), GEMDetId::roll(), mathSSE::sqrt(), edm::swap(), TableParser::table, HLT_2023v12_cff::track, ErrorFrameTransformer::transform(), PV3DBase< T, PVType, FrameType >::x(), geometryCSVtoXML::xx, LocalError::xx(), geometryCSVtoXML::xy, PV3DBase< T, PVType, FrameType >::y(), geometryCSVtoXML::yy, LocalError::yy(), and PV3DBase< T, PVType, FrameType >::z().

98  {
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 }
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.
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
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:212
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
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.
bool m_fillPropagated
Fill matches table.
T sqrt(T t)
Definition: SSEVec.h:19
nano_mu::ESTokenHandle< GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_gemGeometry
GEM Geometry.
Definition: DetId.h:17
bool isValid()
Check validity.
Definition: MuNtupleUtils.h:76
std::string m_name
The label name of the FlatTableProducer.
constexpr int roll() const
Definition: GEMDetId.h:194
bool isCSC(GeomDetEnumerators::SubDetector m)
T rerr(const GlobalPoint &aPoint) const
TupleMultiplicity< TrackerTraits > const *__restrict__ uint32_t nHits
static constexpr int CSC
Definition: MuonSubdetId.h:12
float xx() const
Definition: LocalError.h:22
def move(src, dest)
Definition: eostools.py:511
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

◆ getFromES() [1/2]

void MuGEMMuonExtTableProducer::getFromES ( const edm::Run run,
const edm::EventSetup environment 
)
finalprotectedvirtual

Get info from the ES by run.

Reimplemented from MuBaseFlatTableProducer.

Definition at line 89 of file MuGEMMuonExtTableProducer.cc.

References reco_calib_source_client_cfg::environment, nano_mu::ESTokenHandle< T, R, TR >::getFromES(), and m_gemGeometry.

89  {
91 }
nano_mu::ESTokenHandle< GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun > m_gemGeometry
GEM Geometry.
void getFromES(const edm::EventSetup &environment)
Get Handle from ES.
Definition: MuNtupleUtils.h:73

◆ getFromES() [2/2]

void MuGEMMuonExtTableProducer::getFromES ( const edm::EventSetup environment)
finalprotectedvirtual

Get info from the ES for a given event.

Reimplemented from MuBaseFlatTableProducer.

Definition at line 93 of file MuGEMMuonExtTableProducer.cc.

References reco_calib_source_client_cfg::environment, nano_mu::ESTokenHandle< T, R, TR >::getFromES(), m_muonSP, and m_transientTrackBuilder.

93  {
95  m_muonSP->update(environment);
96 }
std::unique_ptr< MuonServiceProxy > m_muonSP
Muon service proxy.
nano_mu::ESTokenHandle< TransientTrackBuilder, TransientTrackRecord > m_transientTrackBuilder
Transient Track Builder.
void getFromES(const edm::EventSetup &environment)
Get Handle from ES.
Definition: MuNtupleUtils.h:73

Member Data Documentation

◆ m_fillPropagated

bool MuGEMMuonExtTableProducer::m_fillPropagated
private

Fill matches table.

Definition at line 50 of file MuGEMMuonExtTableProducer.cc.

Referenced by fillTable().

◆ m_gemGeometry

nano_mu::ESTokenHandle<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun> MuGEMMuonExtTableProducer::m_gemGeometry
private

GEM Geometry.

Definition at line 53 of file MuGEMMuonExtTableProducer.cc.

Referenced by fillTable(), and getFromES().

◆ m_muonSP

std::unique_ptr<MuonServiceProxy> MuGEMMuonExtTableProducer::m_muonSP
private

Muon service proxy.

Definition at line 59 of file MuGEMMuonExtTableProducer.cc.

Referenced by fillTable(), and getFromES().

◆ m_token

nano_mu::EDTokenHandle<edm::View<reco::Muon> > MuGEMMuonExtTableProducer::m_token
private

The RECO mu token.

Definition at line 47 of file MuGEMMuonExtTableProducer.cc.

Referenced by fillTable().

◆ m_transientTrackBuilder

nano_mu::ESTokenHandle<TransientTrackBuilder, TransientTrackRecord> MuGEMMuonExtTableProducer::m_transientTrackBuilder
private

Transient Track Builder.

Definition at line 56 of file MuGEMMuonExtTableProducer.cc.

Referenced by fillTable(), and getFromES().