16 kTransientTrackBuilderToken_(
20 kMuonTrackTypeName_(ps.getUntrackedParameter<
std::
string>(
"muonTrackType")),
21 kMuonTrackType_(getMuonTrackType(kMuonTrackTypeName_)),
22 kMuonName_(TString(ps.getUntrackedParameter<
std::
string>(
"muonName"))),
23 kFolder_(ps.getUntrackedParameter<
std::
string>(
"folder")),
24 kScenario_(getScenarioOption(ps.getUntrackedParameter<
std::
string>(
"scenario"))),
25 kStartingStateType_(getStartingStateType(ps.getUntrackedParameter<
std::
string>(
"startingStateType"))),
32 ps.getUntrackedParameter<std::vector<int> >(
"cscForGE0"),
33 ps.getUntrackedParameter<std::vector<int> >(
"cscForGE11"),
34 ps.getUntrackedParameter<std::vector<int> >(
"cscForGE21"),
36 kMuonSegmentMatchDRCut_(static_cast<float>(ps.getUntrackedParameter<
double>(
"muonSegmentMatchDRCut"))),
38 ps.getUntrackedParameter<
double>(
"muonPtMinCutGE0"),
39 ps.getUntrackedParameter<
double>(
"muonPtMinCutGE11"),
40 ps.getUntrackedParameter<
double>(
"muonPtMinCutGE21"),
43 ps.getUntrackedParameter<
double>(
"muonEtaMinCutGE0"),
44 ps.getUntrackedParameter<
double>(
"muonEtaMinCutGE11"),
45 ps.getUntrackedParameter<
double>(
"muonEtaMinCutGE21"),
48 ps.getUntrackedParameter<
double>(
"muonEtaMaxCutGE0"),
49 ps.getUntrackedParameter<
double>(
"muonEtaMaxCutGE11"),
50 ps.getUntrackedParameter<
double>(
"muonEtaMaxCutGE21"),
52 kPropagationErrorRCut_(static_cast<float>(ps.getUntrackedParameter<
double>(
"propagationErrorRCut"))),
53 kPropagationErrorPhiCut_(static_cast<float>(ps.getUntrackedParameter<
double>(
"propagationErrorPhiCut"))),
54 kBoundsErrorScale_(static_cast<float>(ps.getUntrackedParameter<
double>(
"boundsErrorScale"))),
55 kMatchingMetric_(getMatchingMetric(ps.getUntrackedParameter<
std::string>(
"matchingMetric"))),
56 kMatchingCut_(static_cast<float>(ps.getUntrackedParameter<
double>(
"matchingCut"))),
57 kMuonPtBins_(ps.getUntrackedParameter<std::vector<double> >(
"muonPtBins")),
59 ps.getUntrackedParameter<
int>(
"muonEtaNbinsGE0"),
60 ps.getUntrackedParameter<
int>(
"muonEtaNbinsGE11"),
61 ps.getUntrackedParameter<
int>(
"muonEtaNbinsGE21"),
64 ps.getUntrackedParameter<
double>(
"muonEtaLowGE0"),
65 ps.getUntrackedParameter<
double>(
"muonEtaLowGE11"),
66 ps.getUntrackedParameter<
double>(
"muonEtaLowGE21"),
69 ps.getUntrackedParameter<
double>(
"muonEtaUpGE0"),
70 ps.getUntrackedParameter<
double>(
"muonEtaUpGE11"),
71 ps.getUntrackedParameter<
double>(
"muonEtaUpGE21"),
73 kModeDev_(ps.getUntrackedParameter<
bool>(
"modeDev")) {
75 std::make_unique<MuonServiceProxy>(ps.getParameter<
edm::ParameterSet>(
"ServiceParameters"), consumesCollector());
85 desc.addUntracked<
bool>(
"monitorGE11",
true);
86 desc.addUntracked<
bool>(
"monitorGE21",
false);
87 desc.addUntracked<
bool>(
"monitorGE0",
false);
88 desc.addUntracked<
bool>(
"maskChamberWithError",
false);
94 desc.addUntracked<
bool>(
"modeDev",
false);
100 desc.addUntracked<
std::string>(
"startingStateType",
"OutermostMeasurementState");
101 desc.addUntracked<
double>(
"muonSegmentMatchDRCut", 5.0f);
103 desc.addUntracked<
double>(
"muonPtMinCutGE0", 20.0f);
104 desc.addUntracked<
double>(
"muonPtMinCutGE11", 20.0f);
105 desc.addUntracked<
double>(
"muonPtMinCutGE21", 20.0f);
107 desc.addUntracked<
double>(
"muonEtaMinCutGE11", 1.5);
108 desc.addUntracked<
double>(
"muonEtaMaxCutGE11", 2.2);
110 desc.addUntracked<
double>(
"muonEtaMinCutGE21", 1.5);
111 desc.addUntracked<
double>(
"muonEtaMaxCutGE21", 2.5);
113 desc.addUntracked<
double>(
"muonEtaMinCutGE0", 2.0);
114 desc.addUntracked<
double>(
"muonEtaMaxCutGE0", 3.0);
116 desc.addUntracked<
double>(
"propagationErrorRCut", 0.5);
117 desc.addUntracked<
double>(
"propagationErrorPhiCut", 0.2);
119 desc.addUntracked<
double>(
"boundsErrorScale", -2.0);
122 desc.addUntracked<
double>(
"matchingCut", 0.2);
124 const std::vector<double> default_pt_bins{
125 0, 5, 10., 20., 30., 40., 50., 60., 70., 80., 90., 100., 110.};
126 desc.addUntracked<std::vector<double> >(
"muonPtBins", default_pt_bins);
128 desc.addUntracked<
int>(
"muonEtaNbinsGE11", 9);
129 desc.addUntracked<
double>(
"muonEtaLowGE11", 1.4);
130 desc.addUntracked<
double>(
"muonEtaUpGE11", 2.3);
132 desc.addUntracked<
int>(
"muonEtaNbinsGE21", 12);
133 desc.addUntracked<
double>(
"muonEtaLowGE21", 1.4);
134 desc.addUntracked<
double>(
"muonEtaUpGE21", 2.6);
136 desc.addUntracked<
int>(
"muonEtaNbinsGE0", 12);
137 desc.addUntracked<
double>(
"muonEtaLowGE0", 1.9);
138 desc.addUntracked<
double>(
"muonEtaUpGE0", 3.1);
141 desc.addUntracked<std::vector<int> >(
"muonSubdetForGE0", {});
142 desc.addUntracked<std::vector<int> >(
"muonSubdetForGE11", {});
143 desc.addUntracked<std::vector<int> >(
"muonSubdetForGE21", {});
147 desc.addUntracked<std::vector<int> >(
"cscForGE11", {1, 2});
148 desc.addUntracked<std::vector<int> >(
"cscForGE21", {});
149 desc.addUntracked<std::vector<int> >(
"cscForGE0", {});
157 descriptions.
add(
"gemEfficiencyAnalyzerDefault",
desc);
164 if (
name ==
"DeltaPhi") {
167 }
else if (
name ==
"RdPhi") {
172 <<
" -> MatchingMetric::kDeltaPhi will be used instead.";
183 if (
name ==
"InnermostMeasurementState") {
186 }
else if (
name ==
"OutermostMeasurementState") {
189 }
else if (
name ==
"StateOnSurfaceWithCSCSegment") {
192 }
else if (
name ==
"AlignmentStyle") {
197 <<
" -> StartingStateType::kOutermostMeasurementState will be used instead.";
209 if (
name ==
"InnerTrack") {
210 muon_track_type = reco::Muon::MuonTrackType::InnerTrack;
212 }
else if (
name ==
"OuterTrack") {
213 muon_track_type = reco::Muon::MuonTrackType::OuterTrack;
215 }
else if (
name ==
"CombinedTrack") {
216 muon_track_type = reco::Muon::MuonTrackType::CombinedTrack;
220 <<
" --> OuterTrack will be used instead.";
222 muon_track_type = reco::Muon::MuonTrackType::OuterTrack;
225 return muon_track_type;
233 }
else if (
name ==
"cosmics") {
236 }
else if (
name ==
"HeavyIons") {
240 <<
" but there is no strategy dedicated to" 241 <<
"\"HeavyIons\" scenario. The strategy for " 242 <<
"the \"pp\" scenario will be used insteqad.";
248 <<
". Choose from (\"pp\", \"cosmics\", \"HeavyIons\")" 249 <<
" --> pp will be used instead.";
267 const int region_id =
station->region();
268 const int station_id =
station->station();
326 const std::vector<const GEMSuperChamber*> superchamber_vec =
station->superChambers();
332 const std::vector<const GEMChamber*> chamber_vec = superchamber_vec.front()->chambers();
340 const int layer_id =
chamber->id().layer();
382 const std::vector<const GEMEtaPartition*> eta_partition_vec = chamber_vec.front()->etaPartitions();
389 const int ieta = eta_partition->id().ieta();
393 const TString gem_label = TString::Format(
"GE%d1-%c-E%d", station_id, (region_id > 0 ?
'P' :
'M'),
ieta);
394 const TString
suffix =
"_" + gem_label;
408 matching_metric_x_title =
"#Delta#phi [deg]";
411 matching_metric_x_title =
"R#Delta#phi [cm]";
414 matching_metric_x_title =
"UNKNOWN METRIC";
429 ibooker.
book1D(
"residual_phi_muon" +
suffix,
title +
" (#mu, q < 0)", 50, -0.5, 0.5);
435 ibooker.
book1D(
"residual_phi_antimuon" +
suffix,
title +
" (#tilde{#mu}, q > 0)", 50, -0.5, 0.5);
458 return track.innerPosition().mag2() >
track.outerPosition().mag2();
463 std::map<GEMDetId, std::vector<const GEMChamber*> > chambers_per_layer;
466 const int region_id =
station->region();
467 const int station_id =
station->station();
468 const bool is_ge11 = station_id == 1;
477 const int chamber_id = is_ge11 ? superchamber->id().chamber() % 2 : 0;
480 const int layer_id =
chamber->id().layer();
482 const GEMDetId key{region_id, 1, station_id, layer_id, chamber_id, 0};
484 if (chambers_per_layer.find(
key) == chambers_per_layer.end()) {
485 chambers_per_layer.insert({
key, std::vector<const GEMChamber*>()});
487 chambers_per_layer.at(
key).push_back(
chamber);
493 for (
auto [gem_id,
chambers] : chambers_per_layer) {
495 const float z_origin =
chambers.front()->position().z();
501 auto [r_min, r_max] =
chambers.front()->surface().rSpan();
502 auto [z_min, z_max] =
chambers.front()->surface().zSpan();
514 << Form(
" ==> (z_origin, z_min, z_max) = (%.2f, %.2f, %.2f)", z_origin, z_min, z_max);
521 const bool is_same_region =
track->eta() *
layer.id.region() > 0;
525 float p2_in =
track->innerMomentum().mag2();
526 float p2_out =
track->outerMomentum().mag2();
529 const bool is_outgoing = p2_in > p2_out;
531 skip = (is_outgoing xor is_same_region);
535 skip = not is_same_region;
580 const bool are_same_region = gem_layer.
id.
region() == start_id.region();
581 const bool are_same_station = gem_layer.
id.
station() == start_id.station();
582 const bool are_same_layer = gem_layer.
id.
layer() == start_id.layer();
583 if (are_same_region and are_same_station and are_same_layer) {
585 <<
"The starting detector of the muon propagation is same with the destination. Skip this propagation.";
609 det_id =
track.outerDetId();
613 det_id =
track.innerDetId();
616 return std::make_tuple(
true,
state, det_id);
630 det_id =
track.innerDetId();
634 det_id =
track.outerDetId();
637 return std::make_tuple(
true,
state, det_id);
656 det_id = csc_segment->geographicalId();
675 det_id = csc_segment->geographicalId();
681 const float momentum_magnitude = inner_track.
isNonnull() ? inner_track.
get()->outerP() : 1.0f;
682 const LocalVector momentum = momentum_magnitude * csc_segment->localDirection();
689 asSMatrix<5>(csc_segment->parametersError().similarityT(csc_segment->projectionMatrix()));
709 tracking_rechit_iter != transient_track.
recHitsEnd();
710 tracking_rechit_iter++) {
712 if (not tracking_rechit->
isValid()) {
731 if (
auto csc_segment = dynamic_cast<const CSCSegment*>(tracking_rechit)) {
733 if (det ==
nullptr) {
738 const float z_distance =
std::abs(gem_layer.
disk->localZclamped(global_position));
740 if (z_distance < min_z_distance) {
741 best_csc_segment = csc_segment;
742 min_z_distance = z_distance;
747 <<
"failed to perform the conversion from `const TrackingRechit*` to `const CSCSegment*`";
751 return best_csc_segment;
762 const CSCDetId csc_id{chamber_match.id};
767 const float x_track = chamber_match.x;
768 const float y_track = chamber_match.y;
775 const float dr = std::hypot(x_track - segment_match.
x, y_track - segment_match.
y);
789 return best_csc_segment;
805 if ((gem_station < 0)
or (gem_station > 2)) {
812 "(Detector, Subdetector) = (%d, %d)", static_cast<int>(det_id.
det()), det_id.
subdetId());
817 return allowed.empty()
or (
std::find(allowed.begin(), allowed.end(), det_id.
subdetId()) != allowed.end());
826 if ((gem_station < 0)
or (gem_station > 2)) {
832 const int csc_chamber_type =
static_cast<int>(csc_id.
iChamberType());
834 const std::vector<int> allowed =
kCSCForGEM_.at(gem_station);
835 return allowed.empty()
or (
std::find(allowed.begin(), allowed.end(), csc_chamber_type) != allowed.end());
840 const LocalPoint local_point_2d(local_point.
x(), local_point.
y(), 0.0f);
853 const LocalPoint local_point_2d{local_point.
x(), local_point.
y(), 0.0f};
859 const std::vector<const GEMChamber*>& chamber_vector) {
868 bound = eta_partition;
884 const float dx = prop_local_pos.
x() - hit_local_pos.
x();
885 const float dy = prop_local_pos.
y() - hit_local_pos.
y();
886 const float hit_strip = eta_partition->
strip(hit_local_pos);
887 const float hit_phi = topology.
stripAngle(hit_strip);
908 metric =
computeDeltaPhi(prop_global_pos, hit_local_pos, eta_partition);
912 metric =
computeRdPhi(prop_global_pos, hit_local_pos, eta_partition);
934 for (
auto hit = rechit_range.first;
hit != rechit_range.second; ++
hit) {
941 closest_hit = &(*hit);
945 return std::make_pair(closest_hit, min_metric);
966 rechit_collection =
handle.product();
974 muon_view =
handle.product();
984 oh_status_collection =
handle.product();
991 vfat_status_collection =
handle.product();
1003 transient_track_builder =
handle.product();
1029 if (
track ==
nullptr) {
1035 if (not transient_track.
isValid()) {
1047 if (not found_start_state) {
1053 const auto [propagated_state, prop_path_length] =
propagator->propagateWithPath(start_state, *(
layer.disk));
1054 if (not propagated_state.isValid()) {
1056 << Form(
"(Detector, Subdetector) = (%d, %d)",
1057 static_cast<int>(start_id.det()),
1058 start_id.subdetId())
1059 <<
" to " <<
layer.id <<
". The path length is " << prop_path_length;
1063 const GlobalPoint prop_global_pos = propagated_state.globalPosition();
1073 if (eta_partition ==
nullptr) {
1095 const int station_id = gem_id.
station();
1096 const int chamber_id = gem_id.
chamber();
1099 const double muon_pt =
muon.pt();
1100 const double muon_eta = std::fabs(
muon.eta());
1103 const double prop_global_err_r =
std::sqrt(prop_global_err.
rerr(prop_global_pos));
1110 const bool passed_eta_cut =
1113 const bool passed_prop_err_cuts = passed_prop_err_r_cut and passed_prop_err_phi_cut;
1114 const bool passed_all_cuts = passed_prop_err_cuts and passed_pt_cut and passed_eta_cut;
1116 const int cutflow_last = not
kModeDev_ ? 0
1117 : not passed_prop_err_r_cut ? 1
1118 : not passed_prop_err_phi_cut ? 2
1119 : not passed_pt_cut ? 3
1120 : not passed_eta_cut ? 4
1126 if (passed_eta_cut and passed_prop_err_cuts) {
1130 if (passed_pt_cut and passed_prop_err_cuts) {
1134 if (passed_all_cuts) {
1149 for (
int bin = 1;
bin <= cutflow_last;
bin++) {
1158 const auto [
hit, matching_metric] =
1159 findClosestHit(prop_global_pos, rechit_collection->get(gem_id), eta_partition);
1161 if (
hit ==
nullptr) {
1178 if (passed_eta_cut and passed_prop_err_cuts) {
1182 if (passed_pt_cut and passed_prop_err_cuts) {
1186 if (passed_all_cuts) {
1202 if (passed_all_cuts) {
1203 for (
int bin = 1;
bin <= cutflow_last;
bin++) {
1212 if (passed_all_cuts) {
1223 const float residual_x = prop_local_pos.
x() - hit_local_pos.
x();
1224 const float residual_y = prop_local_pos.
y() - hit_local_pos.
y();
1225 const float residual_strip = topology.
strip(prop_local_pos) - topology.
strip(hit_local_pos);
1232 if (
muon.charge() < 0) {
const float kBoundsErrorScale_
static DiskPointer build(Args &&... args)
const bool kMaskChamberWithError_
MEMap me_residual_phi_muon_
const Track & track() const
virtual int dimension() const =0
constexpr int station() const
bool isInsideOut(const reco::Track &)
StartingState buildStartingStateAlignmentStyle(const reco::Muon &, const reco::TransientTrack &, const GEMLayer &)
std::pair< const_iterator, const_iterator > range
iterator range
constexpr int region() const
bool skipGEMStation(const int)
static bool isCSC(unsigned int detId)
MEMap me_muon_charge_matched_
TString getSuffixName(Int_t region_id)
virtual float stripAngle(float strip) const =0
CSCSegmentRef cscSegmentRef
const std::vector< double > kMuonEtaLow_
virtual void setCurrentFolder(std::string const &fullpath)
std::tuple< bool, TrajectoryStateOnSurface, DetId > StartingState
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
void setAllowAnything()
allow any parameter label/value pairs
MonitorElement * bookChamberEtaPartition(DQMStore::IBooker &, const TString &, const TString &, const GEMStation *)
MEMap me_prop_path_length_
MEMap me_prop_err_phi_matched_
std::unique_ptr< MuonServiceProxy > muon_service_
trackingRecHit_iterator recHitsEnd() const
last iterator to RecHits
const std::vector< double > kMuonPtBins_
const std::vector< double > kMuonPtMinCuts_
MonitorElement * bookNumerator2D(DQMStore::IBooker &, MonitorElement *)
void buildGEMLayers(const GEMGeometry *)
Geom::Phi< T > phi() const
constexpr NumType convertRadToDeg(NumType radians)
Sin< T >::type sin(const T &t)
bool checkBounds(const Plane &, const GlobalPoint &)
void fillMEWithinLimits(MonitorElement *, const double)
bool isNonnull() const
Checks for non-null.
const std::string kFolder_
float computeRdPhi(const GlobalPoint &, const LocalPoint &, const GEMEtaPartition *)
bool maskChamberWithError(const GEMDetId &chamber_id, const GEMOHStatusCollection *, const GEMVFATStatusCollection *)
MEMap me_matching_metric_all_
trackingRecHit_iterator recHitsBegin() const
first iterator to RecHits
Log< level::Error, false > LogError
TString getSuffixTitle(Int_t region_id)
constexpr int layer() const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
unsigned short iChamberType() const
LocalPoint toLocal(const GlobalPoint &gp) const
MEMap me_muon_eta_matched_
const edm::EDGetTokenT< GEMVFATStatusCollection > kGEMVFATStatusCollectionToken_
constexpr Detector det() const
get the detector field from this detid
const edm::EDGetTokenT< GEMRecHitCollection > kGEMRecHitCollectionToken_
MEMap me_muon_pt_matched_
const edm::EDGetTokenT< edm::View< reco::Muon > > kMuonViewToken_
static const unsigned int BestInStationByDR
constexpr int chamber() const
T phierr(const GlobalPoint &aPoint) const
const MatchingMetric kMatchingMetric_
StartingStateType getStartingStateType(const std::string)
const float kPropagationErrorPhiCut_
virtual float strip(const LocalPoint &) const =0
const CSCSegment * findCSCSegmentBeam(const reco::TransientTrack &, const GEMLayer &)
void fillME(MEMap &, const GEMDetId &, const double)
const reco::Muon::MuonTrackType kMuonTrackType_
reco::Muon::MuonTrackType getMuonTrackType(const std::string)
const std::vector< std::vector< int > > kCSCForGEM_
T getUntrackedParameter(std::string const &, T const &) const
reco::TransientTrack build(const reco::Track *p) const
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
MEMap me_matching_metric_
MEMap me_residual_phi_antimuon_
StartingState getOutermostMeasurementState(const reco::TransientTrack &)
const int kCSCSegmentDimension_
const std::vector< std::vector< int > > kMuonSubdetForGEM_
MEMap me_prop_err_r_matched_
const std::vector< double > kMuonEtaMaxCuts_
MEMap me_muon_eta_all_matched_
TrajectoryStateOnSurface outermostMeasurementState() const
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
MonitorElement * bookNumerator1D(DQMStore::IBooker &, MonitorElement *)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Cos< T >::type cos(const T &t)
const edm::ESGetToken< GEMGeometry, MuonGeometryRecord > kGEMGeometryTokenBeginRun_
ScenarioOption getScenarioOption(const std::string)
const std::vector< double > kMuonEtaUp_
MEMap me_muon_pt_all_matched_
bool isMask(unsigned int flag=Arbitrated) const
Abs< T >::type abs(const T &t)
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override
const GEMEtaPartition * findEtaPartition(const GlobalPoint &, const GlobalError &, const std::vector< const GEMChamber *> &)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
TrajectoryStateOnSurface innermostMeasurementState() const
const float kMatchingCut_
const std::string kLogCategory_
MEMap me_prop_path_length_matched_
const CSCSegment * findCSCSegment(const reco::Muon &, const reco::TransientTrack &, const GEMLayer &)
StartingState buildStartingState(const reco::Muon &, const reco::TransientTrack &, const GEMLayer &)
GEMDetId getReStKey(const int, const int)
GEMEfficiencyAnalyzer(const edm::ParameterSet &)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
const std::vector< int > kMuonEtaNbins_
const float kMuonSegmentMatchDRCut_
constexpr int ieta() const
Log< level::Info, false > LogInfo
const edm::EDGetTokenT< GEMOHStatusCollection > kGEMOHStatusCollectionToken_
StartingState getInnermostMeasurementState(const reco::TransientTrack &)
const std::string kMuonTrackTypeName_
bool checkRefs(const std::vector< T *> &)
DetId geographicalId() const
std::vector< GEMLayer > gem_layers_
static void fillDescriptions(edm::ConfigurationDescriptions &)
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > kTransientTrackBuilderToken_
MEMap me_muon_phi_matched_
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
const ScenarioOption kScenario_
float computeDeltaPhi(const GlobalPoint &, const LocalPoint &, const GEMEtaPartition *)
bool isCSCAllowed(const CSCDetId &, const int)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
MEMap me_cutflow_matched_
TrajectoryStateOnSurface stateOnSurface(const GlobalPoint &point) const
static bool isGEM(unsigned int detId)
float computeMatchingMetric(const GlobalPoint &, const LocalPoint &, const GEMEtaPartition *)
StartingState buildStateOnSurfaceWithCSCSegment(const reco::Muon &, const reco::TransientTrack &, const GEMLayer &)
static int position[264][3]
T rerr(const GlobalPoint &aPoint) const
MEMap me_chamber_ieta_matched_
T const * get() const
Returns C++ pointer to the item.
~GEMEfficiencyAnalyzer() override
constexpr GEMDetId chamberId() const
bool checkPropagationDirection(const reco::Track *, const GEMLayer &)
const float kPropagationErrorRCut_
MuonTrackType
map for Global Muon refitters
const std::vector< double > kMuonEtaMinCuts_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
bool isValid() const
Make the ReferenceCountingProxy method to check validity public.
GEMDetId getReStLaKey(const GEMDetId &)
MatchingMetric getMatchingMetric(const std::string)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
static char chambers[264][20]
GEMDetId getReStEtKey(const GEMDetId &)
const StartingStateType kStartingStateType_
std::pair< const GEMRecHit *, float > findClosestHit(const GlobalPoint &, const GEMRecHitCollection::range &, const GEMEtaPartition *)
const Bounds & bounds() const
bool isMuonSubdetAllowed(const DetId &, const int)
const CSCSegment * findCSCSegmentCosmics(const reco::Muon &, const GEMLayer &)
A container for a generic type of digis indexed by some index, implemented with a map<IndexType...