45 for (
int i = 0; selectionTypeStringToEnumMap[
i].
label && (!
found); ++
i)
46 if (!strcmp(label.c_str(), selectionTypeStringToEnumMap[
i].
label)) {
48 value = selectionTypeStringToEnumMap[
i].
value;
53 throw cms::Exception(
"MuonSelectorError") << label <<
" is not a recognized SelectionType";
59 double maxChamberDist,
60 double maxChamberDistPull,
62 unsigned int theMask = 0;
64 for (
int stationIdx = 1; stationIdx < 5; ++stationIdx)
65 for (
int detectorIdx = 1; detectorIdx < 3; ++detectorIdx)
66 if (muon.
trackDist(stationIdx, detectorIdx, arbitrationType) < maxChamberDist &&
67 muon.
trackDist(stationIdx, detectorIdx, arbitrationType) /
68 muon.
trackDistErr(stationIdx, detectorIdx, arbitrationType) <
70 theMask += 1 << ((stationIdx - 1) + 4 * (detectorIdx - 1));
80 bool use_weight_regain_at_chamber_boundary =
true;
81 bool use_match_dist_penalty =
true;
83 int nr_of_stations_crossed = 0;
84 int nr_of_stations_with_segment = 0;
85 std::vector<int> stations_w_track(8);
86 std::vector<int> station_has_segmentmatch(8);
87 std::vector<int> station_was_crossed(8);
88 std::vector<float> stations_w_track_at_boundary(8);
89 std::vector<float> station_weight(8);
90 int position_in_stations = 0;
91 float full_weight = 0.;
93 for (
int i = 1;
i <= 8; ++
i) {
98 if (muon.
trackDist(
i, 1, arbitrationType) < 999999) {
99 ++nr_of_stations_crossed;
100 station_was_crossed[
i - 1] = 1;
101 if (muon.
trackDist(
i, 1, arbitrationType) > -10.)
102 stations_w_track_at_boundary[
i - 1] = muon.
trackDist(
i, 1, arbitrationType);
104 stations_w_track_at_boundary[
i - 1] = 0.;
107 if (muon.
segmentX(
i, 1, arbitrationType) < 999999) {
108 ++nr_of_stations_with_segment;
109 station_has_segmentmatch[
i - 1] = 1;
112 if (muon.
trackDist(
i - 4, 2, arbitrationType) < 999999) {
113 ++nr_of_stations_crossed;
114 station_was_crossed[
i - 1] = 1;
115 if (muon.
trackDist(
i - 4, 2, arbitrationType) > -10.)
116 stations_w_track_at_boundary[
i - 1] = muon.
trackDist(
i - 4, 2, arbitrationType);
118 stations_w_track_at_boundary[
i - 1] = 0.;
121 if (muon.
segmentX(
i - 4, 2, arbitrationType) < 999999) {
122 ++nr_of_stations_with_segment;
123 station_has_segmentmatch[
i - 1] = 1;
142 const float attenuate_weight_regain = 0.5;
144 for (
int i = 1;
i <= 8; ++
i) {
150 if (station_was_crossed[
i - 1] > 0) {
156 ++position_in_stations;
158 switch (nr_of_stations_crossed) {
160 station_weight[
i - 1] = 1.;
163 if (position_in_stations == 1)
164 station_weight[
i - 1] = 0.33;
166 station_weight[
i - 1] = 0.67;
169 if (position_in_stations == 1)
170 station_weight[
i - 1] = 0.23;
171 else if (position_in_stations == 2)
172 station_weight[
i - 1] = 0.33;
174 station_weight[
i - 1] = 0.44;
177 if (position_in_stations == 1)
178 station_weight[
i - 1] = 0.10;
179 else if (position_in_stations == 2)
180 station_weight[
i - 1] = 0.20;
181 else if (position_in_stations == 3)
182 station_weight[
i - 1] = 0.30;
184 station_weight[
i - 1] = 0.40;
191 station_weight[
i - 1] = 1. / nr_of_stations_crossed;
194 if (use_weight_regain_at_chamber_boundary) {
195 if (station_has_segmentmatch[
i - 1] <= 0 && stations_w_track_at_boundary[
i - 1] != 0.) {
200 station_weight[
i - 1] = station_weight[
i - 1] * attenuate_weight_regain * 0.5 *
201 (TMath::Erf(stations_w_track_at_boundary[
i - 1] / 6.) + 1.);
202 }
else if (station_has_segmentmatch[
i - 1] <= 0 &&
203 stations_w_track_at_boundary[
i - 1] == 0.) {
205 station_weight[
i - 1] = 0.;
208 if (station_has_segmentmatch[
i - 1] <= 0)
209 station_weight[
i - 1] = 0.;
213 if (station_has_segmentmatch[
i - 1] > 0 && 42 == 42) {
215 if (muon.
dY(
i, 1, arbitrationType) < 999999 &&
216 muon.
dX(
i, 1, arbitrationType) < 999999) {
217 if (TMath::Sqrt(TMath::Power(muon.
pullX(
i, 1, arbitrationType), 2.) +
218 TMath::Power(muon.
pullY(
i, 1, arbitrationType), 2.)) > 1.) {
220 if (use_match_dist_penalty) {
222 if (TMath::Sqrt(TMath::Power(muon.
dX(
i, 1, arbitrationType), 2.) +
223 TMath::Power(muon.
dY(
i, 1, arbitrationType), 2.)) < 3. &&
224 TMath::Sqrt(TMath::Power(muon.
pullX(
i, 1, arbitrationType), 2.) +
225 TMath::Power(muon.
pullY(
i, 1, arbitrationType), 2.)) > 3.) {
226 station_weight[
i - 1] *=
228 TMath::Power(
TMath::Max((
double)TMath::Sqrt(TMath::Power(muon.
dX(
i, 1, arbitrationType), 2.) +
229 TMath::Power(muon.
dY(
i, 1, arbitrationType), 2.)),
233 station_weight[
i - 1] *=
234 1. / TMath::Power(TMath::Sqrt(TMath::Power(muon.
pullX(
i, 1, arbitrationType), 2.) +
235 TMath::Power(muon.
pullY(
i, 1, arbitrationType), 2.)),
240 }
else if (muon.
dY(
i, 1, arbitrationType) >= 999999) {
242 if (muon.
pullX(
i, 1, arbitrationType) > 1.) {
244 if (use_match_dist_penalty) {
246 if (muon.
dX(
i, 1, arbitrationType) < 3. && muon.
pullX(
i, 1, arbitrationType) > 3.) {
247 station_weight[
i - 1] *=
248 1. / TMath::Power(
TMath::Max((
double)muon.
dX(
i, 1, arbitrationType), (double)1.), .25);
250 station_weight[
i - 1] *= 1. / TMath::Power(muon.
pullX(
i, 1, arbitrationType), .25);
256 if (muon.
pullY(
i, 1, arbitrationType) > 1.) {
258 if (use_match_dist_penalty) {
260 if (muon.
dY(
i, 1, arbitrationType) < 3. && muon.
pullY(
i, 1, arbitrationType) > 3.) {
261 station_weight[
i - 1] *=
262 1. / TMath::Power(
TMath::Max((
double)muon.
dY(
i, 1, arbitrationType), (double)1.), .25);
264 station_weight[
i - 1] *= 1. / TMath::Power(muon.
pullY(
i, 1, arbitrationType), .25);
270 if (TMath::Sqrt(TMath::Power(muon.
pullX(
i - 4, 2, arbitrationType), 2.) +
271 TMath::Power(muon.
pullY(
i - 4, 2, arbitrationType), 2.)) > 1.) {
273 if (use_match_dist_penalty) {
275 if (TMath::Sqrt(TMath::Power(muon.
dX(
i - 4, 2, arbitrationType), 2.) +
276 TMath::Power(muon.
dY(
i - 4, 2, arbitrationType), 2.)) < 3. &&
277 TMath::Sqrt(TMath::Power(muon.
pullX(
i - 4, 2, arbitrationType), 2.) +
278 TMath::Power(muon.
pullY(
i - 4, 2, arbitrationType), 2.)) > 3.) {
279 station_weight[
i - 1] *=
281 TMath::Power(
TMath::Max((
double)TMath::Sqrt(TMath::Power(muon.
dX(
i - 4, 2, arbitrationType), 2.) +
282 TMath::Power(muon.
dY(
i - 4, 2, arbitrationType), 2.)),
286 station_weight[
i - 1] *=
287 1. / TMath::Power(TMath::Sqrt(TMath::Power(muon.
pullX(
i - 4, 2, arbitrationType), 2.) +
288 TMath::Power(muon.
pullY(
i - 4, 2, arbitrationType), 2.)),
301 station_weight[
i - 1] = 0.;
305 full_weight += station_weight[
i - 1];
311 if (nr_of_stations_crossed == 0) {
325 double minCompatibility,
329 bool goodMuon =
false;
355 double maxChamberDist,
356 double maxChamberDistPull,
358 bool syncMinNMatchesNRequiredStationsInBarrelOnly,
359 bool applyAlsoAngularCuts) {
362 bool goodMuon =
false;
367 if (minNumberOfMatches == 0)
370 unsigned int theStationMask = muon.
stationMask(arbitrationType);
371 unsigned int theRequiredStationMask =
376 int numRequiredStations = 0;
377 for (
int it = 0; it < 8; ++it) {
378 if (theStationMask & 1 << it)
380 if (theRequiredStationMask & 1 << it)
381 ++numRequiredStations;
386 if (syncMinNMatchesNRequiredStationsInBarrelOnly) {
388 if (fabs(muon.
eta()) < 1.2) {
389 if (minNumberOfMatches > numRequiredStations)
390 minNumberOfMatches = numRequiredStations;
391 if (minNumberOfMatches < 1)
392 minNumberOfMatches = 1;
395 if (minNumberOfMatches > numRequiredStations)
396 minNumberOfMatches = numRequiredStations;
397 if (minNumberOfMatches < 1)
398 minNumberOfMatches = 1;
401 if (numSegs >= minNumberOfMatches)
409 if (theRequiredStationMask) {
410 for (
int stationIdx = 7; stationIdx >= 0; --stationIdx)
411 if (theRequiredStationMask & 1 << stationIdx) {
412 if (theStationMask & 1 << stationIdx) {
413 lastSegBit = stationIdx;
422 for (
int stationIdx = 7; stationIdx >= 0; --stationIdx)
423 if (theStationMask & 1 << stationIdx) {
424 lastSegBit = stationIdx;
434 station = lastSegBit < 4 ? lastSegBit + 1 : lastSegBit - 3;
438 if (fabs(muon.
pullX(station,
detector, arbitrationType,
true)) > maxAbsPullX &&
439 fabs(muon.
dX(station,
detector, arbitrationType)) > maxAbsDx)
442 if (applyAlsoAngularCuts && fabs(muon.
pullDxDz(station,
detector, arbitrationType,
true)) > maxAbsPullX)
446 if (maxAbsDy < 999999) {
450 if (fabs(muon.
pullY(station, 2, arbitrationType,
true)) > maxAbsPullY &&
451 fabs(muon.
dY(station, 2, arbitrationType)) > maxAbsDy)
454 if (applyAlsoAngularCuts && fabs(muon.
pullDyDz(station, 2, arbitrationType,
true)) > maxAbsPullY)
472 for (
int stationIdx = station; stationIdx > 0; --stationIdx) {
473 if (!(theStationMask & 1 << (stationIdx - 1)))
476 if (muon.
dY(stationIdx, 1, arbitrationType) > 999998)
479 if (fabs(muon.
pullY(stationIdx, 1, arbitrationType,
true)) > maxAbsPullY &&
480 fabs(muon.
dY(stationIdx, 1, arbitrationType)) > maxAbsDy) {
484 if (applyAlsoAngularCuts && fabs(muon.
pullDyDz(stationIdx, 1, arbitrationType,
true)) > maxAbsPullY)
507 unsigned int theStationMask = muon.
stationMask(arbitrationType);
518 bool existsGoodDTSegX =
false;
519 bool existsDTSegY =
false;
523 for (
int stationIdx = 0; stationIdx <= 7; ++stationIdx)
524 if (theStationMask & 1 << stationIdx) {
525 station = stationIdx < 4 ? stationIdx + 1 : stationIdx - 3;
528 if ((fabs(muon.
pullX(station,
detector, arbitrationType,
true)) > maxAbsPullX &&
529 fabs(muon.
dX(station,
detector, arbitrationType)) > maxAbsDx) ||
530 (applyAlsoAngularCuts && fabs(muon.
pullDxDz(station,
detector, arbitrationType,
true)) > maxAbsPullX))
533 existsGoodDTSegX =
true;
536 if (maxAbsDy < 999999) {
538 if ((fabs(muon.
pullY(station, 2, arbitrationType,
true)) > maxAbsPullY &&
539 fabs(muon.
dY(station, 2, arbitrationType)) > maxAbsDy) ||
540 (applyAlsoAngularCuts && fabs(muon.
pullDyDz(station, 2, arbitrationType,
true)) > maxAbsPullY))
543 if (muon.
dY(station, 1, arbitrationType) > 999998)
548 if ((fabs(muon.
pullY(station, 1, arbitrationType,
true)) > maxAbsPullY &&
549 fabs(muon.
dY(station, 1, arbitrationType)) > maxAbsDy) ||
550 (applyAlsoAngularCuts && fabs(muon.
pullDyDz(station, 1, arbitrationType,
true)) > maxAbsPullY)) {
567 if (maxAbsDy < 999999) {
570 else if (existsGoodDTSegX)
577 if (minNumberOfMatches == 0)
581 for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = muon.
matches().begin();
582 chamberMatch != muon.
matches().end();
584 if (chamberMatch->detector() != 3)
587 const double trkX = chamberMatch->x;
588 const double errX = chamberMatch->xErr;
590 for (std::vector<reco::MuonRPCHitMatch>::const_iterator rpcMatch = chamberMatch->rpcMatches.begin();
591 rpcMatch != chamberMatch->rpcMatches.end();
593 const double rpcX = rpcMatch->x;
595 const double dX = fabs(rpcX - trkX);
596 if (dX < maxAbsDx
or dX / errX < maxAbsPullX) {
603 if (nMatch >= minNumberOfMatches)
610 if (minNumberOfMatches == 0)
614 for (
const auto& chamberMatch : muon.
matches()) {
618 const double trkX = chamberMatch.x;
619 const double errX = chamberMatch.xErr;
620 const double trkY = chamberMatch.y;
621 const double errY = chamberMatch.yErr;
623 for (
const auto& segment : chamberMatch.me0Matches) {
624 const double me0X = segment.x;
625 const double me0ErrX = segment.xErr;
626 const double me0Y = segment.y;
627 const double me0ErrY = segment.yErr;
629 const double dX = fabs(me0X - trkX);
630 const double dY = fabs(me0Y - trkY);
631 const double pullX = dX /
std::sqrt(errX + me0ErrX);
632 const double pullY = dY /
std::sqrt(errY + me0ErrY);
634 if ((dX < maxAbsDx
or pullX < maxAbsPullX) and (dY < maxAbsDy
or pullY < maxAbsPullY)) {
641 return (nMatch >= minNumberOfMatches);
645 if (minNumberOfMatches == 0)
649 for (
const auto& chamberMatch : muon.
matches()) {
653 const double trkX = chamberMatch.x;
654 const double errX = chamberMatch.xErr;
655 const double trkY = chamberMatch.y;
656 const double errY = chamberMatch.yErr;
658 for (
const auto& segment : chamberMatch.gemMatches) {
659 const double gemX = segment.x;
660 const double gemErrX = segment.xErr;
661 const double gemY = segment.y;
662 const double gemErrY = segment.yErr;
664 const double dX = fabs(gemX - trkX);
665 const double dY = fabs(gemY - trkY);
666 const double pullX = dX /
std::sqrt(errX + gemErrX);
667 const double pullY = dY /
std::sqrt(errY + gemErrY);
669 if ((dX < maxAbsDx
or pullX < maxAbsPullX) and (dY < maxAbsDy
or pullY < maxAbsPullY)) {
676 return (nMatch >= minNumberOfMatches);
704 muon.
globalTrack()->hitPattern().numberOfValidMuonHits() > 0;
718 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 1E9, 1E9, -3, -3, arbitrationType,
true,
false);
722 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 3, 3, -3, -3, arbitrationType,
true,
false);
726 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 1E9, 1E9, 1E9, 1E9, arbitrationType,
false,
false);
730 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 3, 3, 1E9, 1E9, arbitrationType,
false,
false);
733 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
735 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 1E9, 1E9, 1E9, 1E9, arbitrationType,
false,
false);
738 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 1E9, 1E9, -3, -3, arbitrationType,
false,
false);
741 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
743 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 3, 3, 1E9, 1E9, arbitrationType,
false,
false);
746 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 3, 3, -3, -3, arbitrationType,
false,
false);
769 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 1E9, 1E9, -3, -3, arbitrationType,
false,
true);
773 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 3, 3, -3, -3, arbitrationType,
false,
true);
777 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 1E9, 1E9, 1E9, 1E9, arbitrationType,
false,
true);
781 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 3, 3, 1E9, 1E9, arbitrationType,
false,
true);
784 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
786 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 1E9, 1E9, 1E9, 1E9, arbitrationType,
false,
false);
789 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 1E9, 1E9, -3, -3, arbitrationType,
true,
false);
792 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
794 isGoodMuon(muon,
TMOneStation, 1, 3, 3, 3, 3, 1E9, 1E9, arbitrationType,
false,
false);
797 isGoodMuon(muon,
TMLastStation, 2, 3, 3, 3, 3, -3, -3, arbitrationType,
true,
false);
800 return muon.
isRPCMuon() &&
isGoodMuon(muon,
RPCMu, 2, 20, 4, 1e9, 1e9, 1e9, 1e9, arbitrationType,
false,
false);
807 isGoodMuon(muon,
ME0Mu, 1, 1e9, 1e9, 1e9, 1e9, 1e9, 1e9, arbitrationType,
false,
false);
814 isGoodMuon(muon,
GEMMu, 1, 1e9, 1e9, 1e9, 1e9, 1e9, 1e9, arbitrationType,
false,
false);
825 const reco::Muon& muon1,
const reco::Muon& muon2,
double pullX,
double pullY,
bool checkAdjacentChambers) {
828 unsigned int betterMuon = (muon1.
pt() > muon2.
pt() ? 1 : 2);
829 for (std::vector<reco::MuonChamberMatch>::const_iterator chamber1 = muon1.
matches().begin();
830 chamber1 != muon1.
matches().end();
832 for (std::vector<reco::MuonChamberMatch>::const_iterator chamber2 = muon2.
matches().begin();
833 chamber2 != muon2.
matches().end();
839 if (chamber1->id == chamber2->id) {
841 if (fabs(chamber1->x - chamber2->x) <
842 pullX *
sqrt(chamber1->xErr * chamber1->xErr + chamber2->xErr * chamber2->xErr)) {
847 if (nMatches1 == 0 || nMatches2 == 0)
851 if (fabs(chamber1->y - chamber2->y) <
852 pullY *
sqrt(chamber1->yErr * chamber1->yErr + chamber2->yErr * chamber2->yErr)) {
857 if (nMatches1 == 0 || nMatches2 == 0)
861 if (!checkAdjacentChambers)
882 if (fabs(chamber1->edgeX) > chamber1->xErr * pullX)
884 if (fabs(chamber2->edgeX) > chamber2->xErr * pullX)
886 if (chamber1->x * chamber2->x < 0) {
891 if (nMatches1 == 0 || nMatches2 == 0)
906 bool layer_requirements = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
907 muon.
innerTrack()->hitPattern().pixelLayersWithMeasurement() > 0;
908 bool match_requirements =
910 return layer_requirements and match_requirements;
919 bool hits = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
920 muon.
innerTrack()->hitPattern().numberOfValidPixelHits() > 0;
925 return muID && hits && ip;
935 if (run2016_hip_mitigation) {
936 if (muon.
innerTrack()->validFraction() < 0.49)
955 bool layers = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
956 muon.
innerTrack()->hitPattern().pixelLayersWithMeasurement() > 0;
962 return layers && ip && (ishighq | run2016_hip_mitigation);
969 bool muValHits = (muon.
globalTrack()->hitPattern().numberOfValidMuonHits() > 0 ||
981 bool muID = muValHits && muMatchedSt;
983 bool hits = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
984 muon.
innerTrack()->hitPattern().numberOfValidPixelHits() > 0;
990 return muID && hits && momQuality && ip;
998 bool hits = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
999 muon.
innerTrack()->hitPattern().numberOfValidPixelHits() > 0;
1005 return muID && hits && momQuality && ip;
1012 for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = mu.
matches().begin();
1013 chamberMatch != mu.
matches().end();
1015 if (chamberMatch->segmentMatches.empty())
1017 for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch2 = mu2.
matches().begin();
1018 chamberMatch2 != mu2.
matches().end();
1020 if (chamberMatch2->segmentMatches.empty())
1022 if (chamberMatch2->id() != chamberMatch->id())
1024 for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
1025 segmentMatch != chamberMatch->segmentMatches.end();
1027 if (!segmentMatch->isMask(segmentArbitrationMask))
1029 for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch2 = chamberMatch2->segmentMatches.begin();
1030 segmentMatch2 != chamberMatch2->segmentMatches.end();
1032 if (!segmentMatch2->isMask(segmentArbitrationMask))
1034 if ((segmentMatch->cscSegmentRef.isNonnull() &&
1035 segmentMatch->cscSegmentRef == segmentMatch2->cscSegmentRef) ||
1036 (segmentMatch->dtSegmentRef.isNonnull() && segmentMatch->dtSegmentRef == segmentMatch2->dtSegmentRef)) {
1048 const auto& combinedTime = muon.
time();
1049 const auto& rpcTime = muon.
rpcTime();
1050 bool combinedTimeIsOk = (combinedTime.nDof > 7);
1051 bool rpcTimeIsOk = (rpcTime.nDof > 1 && fabs(rpcTime.timeAtIpInOutErr) < 0.001);
1052 bool outOfTime =
false;
1054 if ((fabs(rpcTime.timeAtIpInOut) > 10) && !(combinedTimeIsOk && fabs(combinedTime.timeAtIpInOut) < 10))
1057 if (combinedTimeIsOk && (combinedTime.timeAtIpInOut > 20 || combinedTime.timeAtIpInOut < -45))
1065 bool run2016_hip_mitigation) {
1073 double dbCorrectedIsolation = chIso +
std::max(nIso + phoIso - .5 * puIso, 0.);
1074 double dbCorrectedRelIso = dbCorrectedIsolation / muon.
pt();
1098 if (dbCorrectedRelIso < 0.40)
1100 if (dbCorrectedRelIso < 0.25)
1102 if (dbCorrectedRelIso < 0.20)
1104 if (dbCorrectedRelIso < 0.15)
1106 if (dbCorrectedRelIso < 0.10)
1108 if (dbCorrectedRelIso < 0.05)
1112 if (tkRelIso < 0.10)
1114 if (tkRelIso < 0.05)
float chi2LocalPosition
chi2 value for the STA-TK matching of local position
float segmentX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
int numberOfMatchedRPCLayers(ArbitrationType type=RPCHitAndTrackArbitration) const
TrackRef track() const override
reference to a Track
bool isNonnull() const
Checks for non-null.
double eta() const final
momentum pseudorapidity
bool isStandAloneMuon() const override
float sumPt
sum-pt of tracks
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
virtual TrackRef innerTrack() const
ret
prodAgent to be discontinued
double pt() const final
transverse momentum
float trkKink
value of the kink algorithm applied to the inner track stub
bool isMatchesValid() const
float sumPhotonEt
sum pt of PF photons
float trkRelChi2
chi2 value for the inner track stub with respect to the global track
const Point & position() const
position
MuonTime time() const
get DT/CSC combined timing information
float caloCompatibility(const reco::Muon &muon)
bool isLooseMuon(const reco::Muon &)
float sumNeutralHadronEt
sum pt of neutral hadrons
SelectionType
Selector type.
bool isTrackerMuon() const override
bool overlap(const reco::Muon &muon1, const reco::Muon &muon2, double pullX=1.0, double pullY=1.0, bool checkAdjacentChambers=false)
unsigned int expectedNnumberOfMatchedStations(float minDistanceFromEdge=10.0) const
float trackDistErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float sumPUPt
sum pt of charged Particles not from PV (for Pu corrections)
float dY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
virtual TrackRef muonBestTrack() const
bool isGlobalMuon() const override
ArbitrationType
define arbitration schemes
float pullDxDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
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
MuonQuality combinedQuality() const
get energy deposition information
Abs< T >::type abs(const T &t)
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
bool isQualityValid() const
bool isSoftMuon(const reco::Muon &, const reco::Vertex &, bool run2016_hip_mitigation=false)
float dX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float pullY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
unsigned int stationMask(ArbitrationType type=SegmentAndTrackArbitration) const
int numberOfMatchedStations(ArbitrationType type=SegmentAndTrackArbitration) const
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=0, bool run2016_hip_mitigation=false)
float staRelChi2
chi2 value for the outer track stub with respect to the global track
int sharedSegments(const reco::Muon &muon1, const reco::Muon &muon2, unsigned int segmentArbitrationMask=reco::MuonSegmentMatch::BestInChamberByDR)
bool isHighPtMuon(const reco::Muon &, const reco::Vertex &)
SelectionType selectionTypeFromString(const std::string &label)
const MuonPFIsolation & pfIsolationR04() const
a lightweight "map" for selection type string label and enum value
uint64_t selectors() const
unsigned int RequiredStationMask(const reco::Muon &muon, double maxChamberDist, double maxChamberDistPull, reco::Muon::ArbitrationType arbitrationType)
std::vector< MuonChamberMatch > & matches()
get muon matching information
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
MuonTime rpcTime() const
get RPC timing information
float pullDyDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
float trackDist(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
bool outOfTimeMuon(const reco::Muon &muon)
virtual TrackRef tunePMuonBestTrack() const
bool isTrackerHighPtMuon(const reco::Muon &, const reco::Vertex &)
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
bool isLooseTriggerMuon(const reco::Muon &)
float caloCompatibility() const
const MuonIsolation & isolationR03() const
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
float pullX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
float sumChargedHadronPt
sum-pt of charged Hadron