File indexing completed on 2023-06-05 22:16:10
0001 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
0002 #include "DataFormats/MuonDetId/interface/GEMDetId.h"
0003 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
0004
0005 #include "DataFormats/GeometryCommonDetAlgo/interface/ErrorFrameTransformer.h"
0006 #include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixStateInfo.h"
0007
0008 #include <vector>
0009
0010 #include "DPGAnalysis/MuonTools/interface/MuBaseFlatTableProducer.h"
0011
0012 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0014
0015 #include "DataFormats/Common/interface/View.h"
0016 #include "DataFormats/MuonReco/interface/Muon.h"
0017 #include "DataFormats/MuonReco/interface/MuonFwd.h"
0018
0019 #include "Geometry/GEMGeometry/interface/GEMGeometry.h"
0020 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0021
0022 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h"
0023
0024 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
0025 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
0026
0027 class MuGEMMuonExtTableProducer : public MuBaseFlatTableProducer {
0028 public:
0029
0030 MuGEMMuonExtTableProducer(const edm::ParameterSet&);
0031
0032
0033 static void fillDescriptions(edm::ConfigurationDescriptions&);
0034
0035 protected:
0036
0037 void fillTable(edm::Event&) final;
0038
0039
0040 void getFromES(const edm::Run&, const edm::EventSetup&) final;
0041
0042
0043 void getFromES(const edm::EventSetup&) final;
0044
0045 private:
0046
0047 nano_mu::EDTokenHandle<edm::View<reco::Muon>> m_token;
0048
0049
0050 bool m_fillPropagated;
0051
0052
0053 nano_mu::ESTokenHandle<GEMGeometry, MuonGeometryRecord, edm::Transition::BeginRun> m_gemGeometry;
0054
0055
0056 nano_mu::ESTokenHandle<TransientTrackBuilder, TransientTrackRecord> m_transientTrackBuilder;
0057
0058
0059 std::unique_ptr<MuonServiceProxy> m_muonSP;
0060 };
0061
0062 MuGEMMuonExtTableProducer::MuGEMMuonExtTableProducer(const edm::ParameterSet& config)
0063 : MuBaseFlatTableProducer{config},
0064 m_token{config, consumesCollector(), "src"},
0065 m_fillPropagated{config.getParameter<bool>("fillPropagated")},
0066 m_gemGeometry{consumesCollector()},
0067 m_transientTrackBuilder{consumesCollector(), "TransientTrackBuilder"},
0068 m_muonSP{std::make_unique<MuonServiceProxy>(config.getParameter<edm::ParameterSet>("ServiceParameters"),
0069 consumesCollector())} {
0070 produces<nanoaod::FlatTable>();
0071
0072 if (m_fillPropagated) {
0073 produces<nanoaod::FlatTable>("propagated");
0074 }
0075 }
0076
0077 void MuGEMMuonExtTableProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0078 edm::ParameterSetDescription desc;
0079
0080 desc.add<std::string>("name", "muon");
0081 desc.add<edm::InputTag>("src", edm::InputTag{"patMuons"});
0082
0083 desc.add<bool>("fillPropagated", true);
0084 desc.setAllowAnything();
0085
0086 descriptions.addWithDefaultLabel(desc);
0087 }
0088
0089 void MuGEMMuonExtTableProducer::getFromES(const edm::Run& run, const edm::EventSetup& environment) {
0090 m_gemGeometry.getFromES(environment);
0091 }
0092
0093 void MuGEMMuonExtTableProducer::getFromES(const edm::EventSetup& environment) {
0094 m_transientTrackBuilder.getFromES(environment);
0095 m_muonSP->update(environment);
0096 }
0097
0098 void MuGEMMuonExtTableProducer::fillTable(edm::Event& ev) {
0099 unsigned int nMuons{0};
0100
0101 std::vector<bool> isCSC;
0102 std::vector<bool> isME11;
0103
0104 std::vector<float> innermost_x;
0105 std::vector<float> innermost_y;
0106 std::vector<float> innermost_z;
0107
0108 std::vector<float> outermost_x;
0109 std::vector<float> outermost_y;
0110 std::vector<float> outermost_z;
0111
0112 unsigned int nProp{0};
0113
0114 std::vector<uint32_t> propagated_muIdx;
0115
0116 std::vector<bool> propagated_isincoming;
0117 std::vector<bool> propagated_isinsideout;
0118 std::vector<int8_t> propagated_region;
0119 std::vector<int8_t> propagated_layer;
0120 std::vector<int8_t> propagated_chamber;
0121 std::vector<int8_t> propagated_etaP;
0122
0123 std::vector<float> propagatedLoc_x;
0124 std::vector<float> propagatedLoc_y;
0125 std::vector<float> propagatedLoc_z;
0126 std::vector<float> propagatedLoc_r;
0127 std::vector<float> propagatedLoc_phi;
0128 std::vector<float> propagatedLoc_dirX;
0129 std::vector<float> propagatedLoc_dirY;
0130 std::vector<float> propagatedLoc_dirZ;
0131 std::vector<float> propagatedLoc_errX;
0132 std::vector<float> propagatedLoc_errY;
0133
0134 std::vector<float> propagatedGlb_x;
0135 std::vector<float> propagatedGlb_y;
0136 std::vector<float> propagatedGlb_z;
0137 std::vector<float> propagatedGlb_r;
0138 std::vector<float> propagatedGlb_phi;
0139 std::vector<float> propagatedGlb_errX;
0140 std::vector<float> propagatedGlb_errY;
0141 std::vector<float> propagatedGlb_phierr;
0142 std::vector<float> propagatedGlb_rerr;
0143
0144 std::vector<float> propagated_EtaPartition_centerX;
0145 std::vector<float> propagated_EtaPartition_centerY;
0146 std::vector<float> propagated_EtaPartition_phiMax;
0147 std::vector<float> propagated_EtaPartition_phiMin;
0148 std::vector<float> propagated_EtaPartition_rMax;
0149 std::vector<float> propagated_EtaPartition_rMin;
0150
0151 std::vector<int8_t> propagated_nME1hits;
0152 std::vector<int8_t> propagated_nME2hits;
0153 std::vector<int8_t> propagated_nME3hits;
0154 std::vector<int8_t> propagated_nME4hits;
0155
0156 auto muons = m_token.conditionalGet(ev);
0157
0158
0159 auto&& propagator_any = m_muonSP->propagator("SteppingHelixPropagatorAny");
0160 auto&& propagator_along = m_muonSP->propagator("SteppingHelixPropagatorAlong");
0161 auto&& propagator_opposite = m_muonSP->propagator("SteppingHelixPropagatorOpposite");
0162
0163 if (!propagator_any.isValid() || !propagator_along.isValid() || !propagator_opposite.isValid()) {
0164 return;
0165 }
0166
0167 if (muons.isValid() && m_transientTrackBuilder.isValid()) {
0168
0169 for (const auto& muon : (*muons)) {
0170 ++nMuons;
0171
0172 bool is_csc = false;
0173 bool is_me11 = false;
0174
0175 if (!muon.outerTrack().isNull()) {
0176 const auto track = muon.outerTrack().get();
0177 const auto outerTrackRef = muon.outerTrack();
0178
0179 float p2_in = track->innerMomentum().mag2();
0180 float p2_out = track->outerMomentum().mag2();
0181 float pos_out = track->outerPosition().mag2();
0182 float pos_in = track->innerPosition().mag2();
0183
0184 bool is_insideout = pos_in > pos_out;
0185
0186 if (is_insideout) {
0187 std::swap(pos_in, pos_out);
0188 std::swap(p2_in, p2_out);
0189 }
0190
0191 bool is_incoming = p2_out > p2_in;
0192
0193 const auto&& transient_track = m_transientTrackBuilder->build(track);
0194 const auto& htp = transient_track.hitPattern();
0195
0196 if (transient_track.isValid()) {
0197 const auto innerPosGlb{transient_track.innermostMeasurementState().globalPosition()};
0198 const auto outerPosGlb{transient_track.outermostMeasurementState().globalPosition()};
0199
0200 innermost_x.push_back(innerPosGlb.x());
0201 innermost_y.push_back(innerPosGlb.y());
0202 innermost_z.push_back(innerPosGlb.z());
0203 outermost_x.push_back(outerPosGlb.x());
0204 outermost_y.push_back(outerPosGlb.y());
0205 outermost_z.push_back(outerPosGlb.z());
0206 } else {
0207 innermost_x.push_back(DEFAULT_DOUBLE_VAL);
0208 innermost_y.push_back(DEFAULT_DOUBLE_VAL);
0209 innermost_z.push_back(DEFAULT_DOUBLE_VAL);
0210 outermost_x.push_back(DEFAULT_DOUBLE_VAL);
0211 outermost_y.push_back(DEFAULT_DOUBLE_VAL);
0212 outermost_z.push_back(DEFAULT_DOUBLE_VAL);
0213 continue;
0214 }
0215
0216 const auto&& start_state =
0217 is_insideout ? transient_track.outermostMeasurementState() : transient_track.innermostMeasurementState();
0218 auto& propagator = is_incoming ? propagator_along : propagator_opposite;
0219
0220 auto recHitMu = outerTrackRef->recHitsBegin();
0221 auto recHitMuEnd = outerTrackRef->recHitsEnd();
0222
0223
0224 for (; recHitMu != recHitMuEnd; ++recHitMu) {
0225 DetId detId{(*recHitMu)->geographicalId()};
0226
0227 if (detId.det() == DetId::Muon && detId.subdetId() == MuonSubdetId::CSC) {
0228 is_csc = true;
0229
0230 const CSCDetId csc_id{detId};
0231
0232
0233 if (csc_id.station() == 1 && ((csc_id.ring() == 1) || (csc_id.ring() == 4)))
0234 is_me11 = true;
0235 }
0236 }
0237
0238
0239 if (is_csc) {
0240
0241 int8_t nME1_hits = 0;
0242 int8_t nME2_hits = 0;
0243 int8_t nME3_hits = 0;
0244 int8_t nME4_hits = 0;
0245
0246 int nHits{htp.numberOfAllHits(htp.TRACK_HITS)};
0247
0248 for (int i = 0; i != nHits; ++i) {
0249 uint32_t hit = htp.getHitPattern(htp.TRACK_HITS, i);
0250 int substructure = htp.getSubStructure(hit);
0251 int hittype = htp.getHitType(hit);
0252
0253 if (substructure == 2 && hittype == 0) {
0254 int CSC_station = htp.getMuonStation(hit);
0255
0256 switch (CSC_station) {
0257 case 1:
0258 ++nME1_hits;
0259 break;
0260 case 2:
0261 ++nME2_hits;
0262 break;
0263 case 3:
0264 ++nME3_hits;
0265 break;
0266 case 4:
0267 ++nME4_hits;
0268 break;
0269 default:
0270
0271 break;
0272 }
0273 }
0274 }
0275
0276 for (const auto& eta_partition : m_gemGeometry->etaPartitions()) {
0277 if (eta_partition->id().station() != 1) {
0278 continue;
0279 }
0280 const GEMDetId&& gem_id = eta_partition->id();
0281
0282 bool is_opposite_region = muon.eta() * gem_id.region() < 0;
0283 if (is_incoming xor is_opposite_region) {
0284 continue;
0285 }
0286 const BoundPlane& bound_plane = eta_partition->surface();
0287
0288 const auto& dest_state = propagator->propagate(start_state, bound_plane);
0289 if (!dest_state.isValid()) {
0290
0291 continue;
0292 }
0293 const GlobalPoint&& dest_global_pos = dest_state.globalPosition();
0294 const LocalPoint&& local_point = eta_partition->toLocal(dest_global_pos);
0295 const LocalPoint local_point_2d{local_point.x(), local_point.y(), 0.0f};
0296
0297 if (eta_partition->surface().bounds().inside(local_point_2d)) {
0298
0299
0300 double xx = dest_state.curvilinearError().matrix()(3, 3);
0301 double yy = dest_state.curvilinearError().matrix()(4, 4);
0302 double xy = dest_state.curvilinearError().matrix()(4, 3);
0303 double dest_glob_error_x = sqrt(0.5 * (xx + yy - sqrt((xx - yy) * (xx - yy) + 4 * xy * xy)));
0304 double dest_glob_error_y = sqrt(0.5 * (xx + yy + sqrt((xx - yy) * (xx - yy) + 4 * xy * xy)));
0305
0306
0307 const LocalPoint&& dest_local_pos = eta_partition->toLocal(dest_global_pos);
0308 const LocalError&& dest_local_err = dest_state.localError().positionError();
0309 const GlobalError& dest_global_err =
0310 ErrorFrameTransformer().transform(dest_local_err, eta_partition->surface());
0311 const double dest_global_r_err = std::sqrt(dest_global_err.rerr(dest_global_pos));
0312 const double dest_global_phi_err = std::sqrt(dest_global_err.phierr(dest_global_pos));
0313
0314 ++nProp;
0315
0316 propagated_muIdx.push_back(nMuons - 1);
0317
0318 propagated_nME1hits.push_back(nME1_hits);
0319 propagated_nME2hits.push_back(nME2_hits);
0320 propagated_nME3hits.push_back(nME3_hits);
0321 propagated_nME4hits.push_back(nME4_hits);
0322
0323 const auto& eta_partition_pos{eta_partition->position()};
0324 const auto& eta_partition_surf{eta_partition->surface()};
0325 propagated_EtaPartition_centerX.push_back(eta_partition_pos.x());
0326 propagated_EtaPartition_centerY.push_back(eta_partition_pos.y());
0327 propagated_EtaPartition_rMin.push_back(eta_partition_surf.rSpan().first);
0328 propagated_EtaPartition_rMax.push_back(eta_partition_surf.rSpan().second);
0329 propagated_EtaPartition_phiMin.push_back(eta_partition_surf.phiSpan().first);
0330 propagated_EtaPartition_phiMax.push_back(eta_partition_surf.phiSpan().second);
0331
0332 propagatedGlb_x.push_back(dest_global_pos.x());
0333 propagatedGlb_y.push_back(dest_global_pos.y());
0334 propagatedGlb_z.push_back(dest_global_pos.z());
0335 propagatedGlb_r.push_back(dest_global_pos.perp());
0336 propagatedGlb_phi.push_back(dest_global_pos.phi());
0337
0338 const auto dest_local_dir{dest_state.localDirection()};
0339 propagatedLoc_x.push_back(dest_local_pos.x());
0340 propagatedLoc_y.push_back(dest_local_pos.y());
0341 propagatedLoc_z.push_back(dest_local_pos.z());
0342 propagatedLoc_r.push_back(dest_local_pos.perp());
0343 propagatedLoc_phi.push_back(dest_local_pos.phi());
0344 propagatedLoc_dirX.push_back(dest_local_dir.x());
0345 propagatedLoc_dirY.push_back(dest_local_dir.y());
0346 propagatedLoc_dirZ.push_back(dest_local_dir.z());
0347
0348 propagatedLoc_errX.push_back(dest_local_err.xx());
0349 propagatedLoc_errY.push_back(dest_local_err.yy());
0350
0351 propagatedGlb_errX.push_back(dest_glob_error_x);
0352 propagatedGlb_errY.push_back(dest_glob_error_y);
0353 propagatedGlb_rerr.push_back(dest_global_r_err);
0354 propagatedGlb_phierr.push_back(dest_global_phi_err);
0355
0356 propagated_region.push_back(gem_id.region());
0357 propagated_layer.push_back(gem_id.layer());
0358 propagated_chamber.push_back(gem_id.chamber());
0359 propagated_etaP.push_back(gem_id.roll());
0360
0361 propagated_isinsideout.push_back(is_insideout);
0362 propagated_isincoming.push_back(is_incoming);
0363
0364 }
0365 }
0366 }
0367 } else {
0368 innermost_x.push_back(DEFAULT_DOUBLE_VAL);
0369 innermost_y.push_back(DEFAULT_DOUBLE_VAL);
0370 innermost_z.push_back(DEFAULT_DOUBLE_VAL);
0371 outermost_x.push_back(DEFAULT_DOUBLE_VAL);
0372 outermost_y.push_back(DEFAULT_DOUBLE_VAL);
0373 outermost_z.push_back(DEFAULT_DOUBLE_VAL);
0374 }
0375 isCSC.push_back(is_csc);
0376 isME11.push_back(is_me11);
0377
0378 }
0379 }
0380
0381 auto table = std::make_unique<nanoaod::FlatTable>(nMuons, m_name, false, true);
0382
0383
0384
0385 addColumn(table, "innermost_x", innermost_x, "");
0386 addColumn(table, "innermost_y", innermost_y, "");
0387 addColumn(table, "innermost_z", innermost_z, "");
0388
0389 addColumn(table, "outermost_x", outermost_x, "");
0390 addColumn(table, "outermost_y", outermost_y, "");
0391 addColumn(table, "outermost_z", outermost_z, "");
0392 ev.put(std::move(table));
0393
0394 if (m_fillPropagated) {
0395 auto tabProp = std::make_unique<nanoaod::FlatTable>(nProp, m_name + "_propagated", false, false);
0396
0397 addColumn(tabProp, "propagated_muIdx", propagated_muIdx, "");
0398
0399 addColumn(tabProp,
0400 "propagated_nME1hits",
0401 propagated_nME1hits,
0402 "number of hits in the CSC ME1 station"
0403 "in the STA muon track extrapolated to GE11");
0404 addColumn(tabProp,
0405 "propagated_nME2hits",
0406 propagated_nME2hits,
0407 "number of hits in the CSC ME2 station"
0408 "in the STA muon track extrapolated to GE11");
0409 addColumn(tabProp,
0410 "propagated_nME3hits",
0411 propagated_nME3hits,
0412 "number of hits in the CSC ME3 station"
0413 "in the STA muon track extrapolated to GE11");
0414 addColumn(tabProp,
0415 "propagated_nME4hits",
0416 propagated_nME4hits,
0417 "number of hits in the CSC ME4 station"
0418 "in the STA muon track extrapolated to GE11");
0419
0420 addColumn(
0421 tabProp, "propagated_isincoming", propagated_isincoming, "bool, condition on the muon STA track direction");
0422 addColumn(
0423 tabProp, "propagated_isinsideout", propagated_isinsideout, "bool, condition on the muon STA track direction");
0424 addColumn(tabProp,
0425 "propagated_region",
0426 propagated_region,
0427 "GE11 region where the extrapolated muon track falls"
0428 "<br />(int, positive endcap: +1, negative endcap: -1");
0429 addColumn(tabProp,
0430 "propagated_layer",
0431 propagated_layer,
0432 "GE11 layer where the extrapolated muon track falls"
0433 "<br />(int, layer1: 1, layer2: 2");
0434 addColumn(tabProp,
0435 "propagated_chamber",
0436 propagated_chamber,
0437 "GE11 superchamber where the extrapolated muon track falls"
0438 "<br />(int, chambers numbered from 0 to 35");
0439 addColumn(tabProp,
0440 "propagated_etaP",
0441 propagated_etaP,
0442 "GE11 eta partition where the extrapolated muon track falls"
0443 "<br />(int, partitions numbered from 1 to 8");
0444
0445 addColumn(tabProp,
0446 "propagatedLoc_x",
0447 propagatedLoc_x,
0448 "expected position of muon track extrapolated to GE11 surface"
0449 "<br />(float, local layer x coordinates, cm)");
0450 addColumn(tabProp,
0451 "propagatedLoc_y",
0452 propagatedLoc_y,
0453 "expected position of muon track extrapolated to GE11 surface"
0454 "<br />(float, local layer y coordinates, cm)");
0455 addColumn(tabProp,
0456 "propagatedLoc_z",
0457 propagatedLoc_z,
0458 "expected position of muon track extrapolated to GE11 surface"
0459 "<br />(float, local layer z coordinates, cm)");
0460 addColumn(tabProp,
0461 "propagatedLoc_r",
0462 propagatedLoc_r,
0463 "expected position of muon track extrapolated to GE11 surface"
0464 "<br />(float, local layer radial coordinate, cm)");
0465 addColumn(tabProp,
0466 "propagatedLoc_phi",
0467 propagatedLoc_phi,
0468 "expected position of muon track extrapolated to GE11 surface"
0469 "<br />(float, local layer phi coordinates, rad)");
0470
0471 addColumn(tabProp,
0472 "propagatedLoc_dirX",
0473 propagatedLoc_dirX,
0474 "direction cosine of angle between local x axis and GE11 plane"
0475 "<br />(float, dir. cosine)");
0476 addColumn(tabProp,
0477 "propagatedLoc_dirY",
0478 propagatedLoc_dirY,
0479 "direction cosine of angle between local y axis and GE11 plane"
0480 "<br />(float, dir. cosine)");
0481 addColumn(tabProp,
0482 "propagatedLoc_dirZ",
0483 propagatedLoc_dirZ,
0484 "direction cosine of angle between local z axis and GE11 plane"
0485 "<br />(float, dir. cosine)");
0486
0487 addColumn(tabProp,
0488 "propagatedLoc_errX",
0489 propagatedLoc_errX,
0490 "uncertainty on expected position of muon track extrapolated to GE11 surface"
0491 "<br />(float, local layer x coordinates, cm)");
0492 addColumn(tabProp,
0493 "propagatedLoc_errY",
0494 propagatedLoc_errY,
0495 "uncertainty on expected position of muon track extrapolated to GE11 surface"
0496 "<br />(float, local layer y coordinates, cm)");
0497
0498 addColumn(tabProp,
0499 "propagatedGlb_x",
0500 propagatedGlb_x,
0501 "expected position of muon track extrapolated to GE11 surface"
0502 "<br />(float, global x coordinates, cm)");
0503 addColumn(tabProp,
0504 "propagatedGlb_y",
0505 propagatedGlb_y,
0506 "expected position of muon track extrapolated to GE11 surface"
0507 "<br />(float, global y coordinates, cm)");
0508 addColumn(tabProp,
0509 "propagatedGlb_z",
0510 propagatedGlb_z,
0511 "expected position of muon track extrapolated to GE11 surface"
0512 "<br />(float, global z coordinates, cm)");
0513 addColumn(tabProp,
0514 "propagatedGlb_r",
0515 propagatedGlb_r,
0516 "expected position of muon track extrapolated to GE11 surface"
0517 "<br />(float, global radial (r) coordinates, cm)");
0518 addColumn(tabProp,
0519 "propagatedGlb_phi",
0520 propagatedGlb_phi,
0521 "expected position of muon track extrapolated to GE11 surface"
0522 "<br />(float, global phi coordinates, rad)");
0523 addColumn(tabProp,
0524 "propagatedGlb_errX",
0525 propagatedGlb_errX,
0526 "uncertainty on position of muon track extrapolated to GE11 surface"
0527 "<br />(float, global x coordinates, cm)");
0528 addColumn(tabProp,
0529 "propagatedGlb_errY",
0530 propagatedGlb_errY,
0531 "uncertainty on position of muon track extrapolated to GE11 surface"
0532 "<br />(float, global y coordinates, cm)");
0533 addColumn(tabProp,
0534 "propagatedGlb_rerr",
0535 propagatedGlb_rerr,
0536 "uncertainty on position of muon track extrapolated to GE11 surface"
0537 "<br />(float, global radial (r) coordinates, cm)");
0538 addColumn(tabProp,
0539 "propagatedGlb_phierr",
0540 propagatedGlb_phierr,
0541 "uncertainty on position of muon track extrapolated to GE11 surface"
0542 "<br />(float, global phi coordinates, rad)");
0543
0544 addColumn(tabProp,
0545 "propagated_EtaPartition_centerX",
0546 propagated_EtaPartition_centerX,
0547 "global X coordinate of the center of the etaPartition"
0548 "<br />where the extrapolated muon track position falls"
0549 "<br />(float, global x coordinates, cm)");
0550 addColumn(tabProp,
0551 "propagated_EtaPartition_centerY",
0552 propagated_EtaPartition_centerY,
0553 "global Y coordinate of the center of the etaPartition"
0554 "<br />where the extrapolated muon track position falls"
0555 "<br />(float, global x coordinates, cm)");
0556 addColumn(tabProp,
0557 "propagated_EtaPartition_phiMax",
0558 propagated_EtaPartition_phiMax,
0559 "upper edge in phi global coordinates of the etaPartition"
0560 "<br />where the extrapolated muon track position falls"
0561 "<br />(float, global phi coordinates, rad)");
0562 addColumn(tabProp,
0563 "propagated_EtaPartition_phiMin",
0564 propagated_EtaPartition_phiMin,
0565 "lower edge in phi global coordinates of the etaPartition"
0566 "<br />where the extrapolated muon track position falls"
0567 "<br />(float, global phi coordinates, rad)");
0568 addColumn(tabProp,
0569 "propagated_EtaPartition_rMax",
0570 propagated_EtaPartition_rMax,
0571 "upper edge in r global coordinates of the etaPartition"
0572 "<br />where the extrapolated muon track position falls"
0573 "<br />(float, global radial (r) coordinates, cm)");
0574 addColumn(tabProp,
0575 "propagated_EtaPartition_rMin",
0576 propagated_EtaPartition_rMin,
0577 "lower edge in r global coordinates of the etaPartition"
0578 "<br />where the extrapolated muon track position falls"
0579 "<br />(float, global radial (r) coordinates, cm)");
0580
0581 ev.put(std::move(tabProp), "propagated");
0582 }
0583 }
0584
0585 #include "FWCore/PluginManager/interface/ModuleDef.h"
0586 #include "FWCore/Framework/interface/MakerMacros.h"
0587
0588 DEFINE_FWK_MODULE(MuGEMMuonExtTableProducer);