46 for(
int i = 0; selectionTypeStringToEnumMap[
i].
label && (!
found); ++
i)
47 if (! strcmp(label.c_str(), selectionTypeStringToEnumMap[
i].
label)) {
49 value = selectionTypeStringToEnumMap[
i].
value;
53 if (! found)
throw cms::Exception(
"MuonSelectorError") << label <<
" is not a recognized SelectionType";
59 double maxChamberDist,
60 double maxChamberDistPull,
63 unsigned int theMask = 0;
65 for(
int stationIdx = 1; stationIdx < 5; ++stationIdx)
66 for(
int detectorIdx = 1; detectorIdx < 3; ++detectorIdx)
67 if(muon.
trackDist(stationIdx,detectorIdx,arbitrationType) < maxChamberDist &&
68 muon.
trackDist(stationIdx,detectorIdx,arbitrationType)/muon.
trackDistErr(stationIdx,detectorIdx,arbitrationType) < maxChamberDistPull)
69 theMask += 1<<((stationIdx-1)+4*(detectorIdx-1));
81 bool use_weight_regain_at_chamber_boundary =
true;
82 bool use_match_dist_penalty =
true;
84 int nr_of_stations_crossed = 0;
85 int nr_of_stations_with_segment = 0;
86 std::vector<int> stations_w_track(8);
87 std::vector<int> station_has_segmentmatch(8);
88 std::vector<int> station_was_crossed(8);
89 std::vector<float> stations_w_track_at_boundary(8);
90 std::vector<float> station_weight(8);
91 int position_in_stations = 0;
92 float full_weight = 0.;
94 for(
int i = 1;
i<=8; ++
i) {
99 if( muon.
trackDist(
i,1,arbitrationType) < 999999 ) {
100 ++nr_of_stations_crossed;
101 station_was_crossed[
i-1] = 1;
102 if(muon.
trackDist(
i,1,arbitrationType) > -10. ) stations_w_track_at_boundary[
i-1] = muon.
trackDist(
i,1,arbitrationType);
103 else stations_w_track_at_boundary[
i-1] = 0.;
105 if( muon.
segmentX(
i,1,arbitrationType) < 999999 ) {
106 ++nr_of_stations_with_segment;
107 station_has_segmentmatch[
i-1] = 1;
111 if( muon.
trackDist(
i-4,2,arbitrationType) < 999999 ) {
112 ++nr_of_stations_crossed;
113 station_was_crossed[
i-1] = 1;
114 if(muon.
trackDist(
i-4,2,arbitrationType) > -10. ) stations_w_track_at_boundary[
i-1] = muon.
trackDist(
i-4,2,arbitrationType);
115 else stations_w_track_at_boundary[
i-1] = 0.;
117 if( muon.
segmentX(
i-4,2,arbitrationType) < 999999 ) {
118 ++nr_of_stations_with_segment;
119 station_has_segmentmatch[
i-1] = 1;
138 const float attenuate_weight_regain = 0.5;
140 for(
int i = 1;
i<=8; ++
i) {
146 if( station_was_crossed[
i-1] > 0 ) {
152 ++position_in_stations;
154 switch ( nr_of_stations_crossed ) {
156 station_weight[
i-1] = 1.;
159 if ( position_in_stations == 1 ) station_weight[
i-1] = 0.33;
160 else station_weight[
i-1] = 0.67;
163 if ( position_in_stations == 1 ) station_weight[
i-1] = 0.23;
164 else if( position_in_stations == 2 ) station_weight[
i-1] = 0.33;
165 else station_weight[
i-1] = 0.44;
168 if ( position_in_stations == 1 ) station_weight[
i-1] = 0.10;
169 else if( position_in_stations == 2 ) station_weight[
i-1] = 0.20;
170 else if( position_in_stations == 3 ) station_weight[
i-1] = 0.30;
171 else station_weight[
i-1] = 0.40;
178 station_weight[
i-1] = 1./nr_of_stations_crossed;
181 if( use_weight_regain_at_chamber_boundary ) {
182 if(station_has_segmentmatch[
i-1] <= 0 && stations_w_track_at_boundary[
i-1] != 0. ) {
186 station_weight[
i-1] = station_weight[
i-1]*attenuate_weight_regain*0.5*(TMath::Erf(stations_w_track_at_boundary[
i-1]/6.)+1.);
188 else if(station_has_segmentmatch[
i-1] <= 0 && stations_w_track_at_boundary[
i-1] == 0.) {
190 station_weight[
i-1] = 0.;
194 if(station_has_segmentmatch[
i-1] <= 0) station_weight[
i-1] = 0.;
197 if( station_has_segmentmatch[
i-1] > 0 && 42 == 42 ) {
199 if( muon.
dY(
i,1,arbitrationType) < 999999 && muon.
dX(
i,1,arbitrationType) < 999999) {
201 TMath::Sqrt(TMath::Power(muon.
pullX(
i,1,arbitrationType),2.)+TMath::Power(muon.
pullY(
i,1,arbitrationType),2.))> 1. ) {
203 if(use_match_dist_penalty) {
205 if(TMath::Sqrt(TMath::Power(muon.
dX(
i,1,arbitrationType),2.)+TMath::Power(muon.
dY(
i,1,arbitrationType),2.)) < 3. && TMath::Sqrt(TMath::Power(muon.
pullX(
i,1,arbitrationType),2.)+TMath::Power(muon.
pullY(
i,1,arbitrationType),2.)) > 3. ) {
206 station_weight[
i-1] *= 1./TMath::Power(
207 TMath::Max((
double)TMath::Sqrt(TMath::Power(muon.
dX(
i,1,arbitrationType),2.)+TMath::Power(muon.
dY(
i,1,arbitrationType),2.)),(
double)1.),.25);
210 station_weight[
i-1] *= 1./TMath::Power(
211 TMath::Sqrt(TMath::Power(muon.
pullX(
i,1,arbitrationType),2.)+TMath::Power(muon.
pullY(
i,1,arbitrationType),2.)),.25);
216 else if (muon.
dY(
i,1,arbitrationType) >= 999999) {
217 if( muon.
pullX(
i,1,arbitrationType) > 1. ) {
219 if(use_match_dist_penalty) {
221 if( muon.
dX(
i,1,arbitrationType) < 3. && muon.
pullX(
i,1,arbitrationType) > 3. ) {
222 station_weight[
i-1] *= 1./TMath::Power(
TMath::Max((
double)muon.
dX(
i,1,arbitrationType),(double)1.),.25);
225 station_weight[
i-1] *= 1./TMath::Power(muon.
pullX(
i,1,arbitrationType),.25);
231 if( muon.
pullY(
i,1,arbitrationType) > 1. ) {
233 if(use_match_dist_penalty) {
235 if( muon.
dY(
i,1,arbitrationType) < 3. && muon.
pullY(
i,1,arbitrationType) > 3. ) {
236 station_weight[
i-1] *= 1./TMath::Power(
TMath::Max((
double)muon.
dY(
i,1,arbitrationType),(double)1.),.25);
239 station_weight[
i-1] *= 1./TMath::Power(muon.
pullY(
i,1,arbitrationType),.25);
247 TMath::Sqrt(TMath::Power(muon.
pullX(
i-4,2,arbitrationType),2.)+TMath::Power(muon.
pullY(
i-4,2,arbitrationType),2.)) > 1. ) {
249 if(use_match_dist_penalty) {
251 if(TMath::Sqrt(TMath::Power(muon.
dX(
i-4,2,arbitrationType),2.)+TMath::Power(muon.
dY(
i-4,2,arbitrationType),2.)) < 3. && TMath::Sqrt(TMath::Power(muon.
pullX(
i-4,2,arbitrationType),2.)+TMath::Power(muon.
pullY(
i-4,2,arbitrationType),2.)) > 3. ) {
252 station_weight[
i-1] *= 1./TMath::Power(
253 TMath::Max((
double)TMath::Sqrt(TMath::Power(muon.
dX(
i-4,2,arbitrationType),2.)+TMath::Power(muon.
dY(
i-4,2,arbitrationType),2.)),(
double)1.),.25);
256 station_weight[
i-1] *= 1./TMath::Power(
257 TMath::Sqrt(TMath::Power(muon.
pullX(
i-4,2,arbitrationType),2.)+TMath::Power(muon.
pullY(
i-4,2,arbitrationType),2.)),.25);
270 station_weight[
i-1] = 0.;
274 full_weight += station_weight[
i-1];
280 if( nr_of_stations_crossed == 0 ) {
295 double minCompatibility,
298 bool goodMuon =
false;
304 else goodMuon =
false;
322 double maxChamberDist,
323 double maxChamberDistPull,
325 bool syncMinNMatchesNRequiredStationsInBarrelOnly,
326 bool applyAlsoAngularCuts)
329 bool goodMuon =
false;
334 if(minNumberOfMatches == 0)
return true;
336 unsigned int theStationMask = muon.
stationMask(arbitrationType);
337 unsigned int theRequiredStationMask =
RequiredStationMask(muon, maxChamberDist, maxChamberDistPull, arbitrationType);
341 int numRequiredStations = 0;
342 for(
int it = 0; it < 8; ++it) {
343 if(theStationMask & 1<<it) ++numSegs;
344 if(theRequiredStationMask & 1<<it) ++numRequiredStations;
349 if (syncMinNMatchesNRequiredStationsInBarrelOnly) {
351 if (fabs(muon.
eta()) < 1.2) {
352 if(minNumberOfMatches > numRequiredStations)
353 minNumberOfMatches = numRequiredStations;
354 if(minNumberOfMatches < 1)
355 minNumberOfMatches = 1;
358 if(minNumberOfMatches > numRequiredStations)
359 minNumberOfMatches = numRequiredStations;
360 if(minNumberOfMatches < 1)
361 minNumberOfMatches = 1;
364 if(numSegs >= minNumberOfMatches) goodMuon =
true;
371 if(theRequiredStationMask) {
372 for(
int stationIdx = 7; stationIdx >= 0; --stationIdx)
373 if(theRequiredStationMask & 1<<stationIdx){
374 if(theStationMask & 1<<stationIdx) {
375 lastSegBit = stationIdx;
384 for(
int stationIdx = 7; stationIdx >= 0; --stationIdx)
385 if(theStationMask & 1<<stationIdx) {
386 lastSegBit = stationIdx;
391 if(!goodMuon)
return false;
395 station = lastSegBit < 4 ? lastSegBit+1 : lastSegBit-3;
399 if(fabs(muon.
pullX(station,
detector,arbitrationType,
true)) > maxAbsPullX &&
400 fabs(muon.
dX(station,
detector,arbitrationType)) > maxAbsDx)
403 if(applyAlsoAngularCuts && fabs(muon.
pullDxDz(station,
detector,arbitrationType,
true)) > maxAbsPullX)
407 if (maxAbsDy < 999999) {
411 if(fabs(muon.
pullY(station,2,arbitrationType,
true)) > maxAbsPullY &&
412 fabs(muon.
dY(station,2,arbitrationType)) > maxAbsDy)
415 if(applyAlsoAngularCuts && fabs(muon.
pullDyDz(station,2,arbitrationType,
true)) > maxAbsPullY)
433 for (
int stationIdx = station; stationIdx > 0; --stationIdx) {
434 if(! (theStationMask & 1<<(stationIdx-1)))
437 if(muon.
dY(stationIdx,1,arbitrationType) > 999998)
440 if(fabs(muon.
pullY(stationIdx,1,arbitrationType,
true)) > maxAbsPullY &&
441 fabs(muon.
dY(stationIdx,1,arbitrationType)) > maxAbsDy) {
445 if(applyAlsoAngularCuts && fabs(muon.
pullDyDz(stationIdx,1,arbitrationType,
true)) > maxAbsPullY)
468 unsigned int theStationMask = muon.
stationMask(arbitrationType);
471 if (! theStationMask)
return false;
478 bool existsGoodDTSegX =
false;
479 bool existsDTSegY =
false;
483 for(
int stationIdx = 0; stationIdx <= 7; ++stationIdx)
484 if(theStationMask & 1<<stationIdx) {
485 station = stationIdx < 4 ? stationIdx+1 : stationIdx-3;
488 if((fabs(muon.
pullX(station,
detector,arbitrationType,
true)) > maxAbsPullX &&
489 fabs(muon.
dX(station,
detector,arbitrationType)) > maxAbsDx) ||
490 (applyAlsoAngularCuts && fabs(muon.
pullDxDz(station,
detector,arbitrationType,
true)) > maxAbsPullX))
493 existsGoodDTSegX =
true;
496 if (maxAbsDy < 999999) {
498 if((fabs(muon.
pullY(station,2,arbitrationType,
true)) > maxAbsPullY &&
499 fabs(muon.
dY(station,2,arbitrationType)) > maxAbsDy) ||
500 (applyAlsoAngularCuts && fabs(muon.
pullDyDz(station,2,arbitrationType,
true)) > maxAbsPullY))
504 if(muon.
dY(station,1,arbitrationType) > 999998)
509 if((fabs(muon.
pullY(station,1,arbitrationType,
true)) > maxAbsPullY &&
510 fabs(muon.
dY(station,1,arbitrationType)) > maxAbsDy) ||
511 (applyAlsoAngularCuts && fabs(muon.
pullDyDz(station,1,arbitrationType,
true)) > maxAbsPullY)) {
528 if (maxAbsDy < 999999) {
531 else if (existsGoodDTSegX)
539 if ( minNumberOfMatches == 0 )
return true;
542 for ( std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = muon.
matches().begin();
543 chamberMatch != muon.
matches().end(); ++chamberMatch )
545 if ( chamberMatch->detector() != 3 )
continue;
547 const double trkX = chamberMatch->x;
548 const double errX = chamberMatch->xErr;
550 for ( std::vector<reco::MuonRPCHitMatch>::const_iterator rpcMatch = chamberMatch->rpcMatches.begin();
551 rpcMatch != chamberMatch->rpcMatches.end(); ++rpcMatch )
553 const double rpcX = rpcMatch->x;
555 const double dX = fabs(rpcX-trkX);
556 if ( dX < maxAbsDx
or dX/errX < maxAbsPullX )
564 if ( nMatch >= minNumberOfMatches )
return true;
570 if ( minNumberOfMatches == 0 )
return true;
573 for (
const auto& chamberMatch : muon.
matches() )
577 const double trkX = chamberMatch.x;
578 const double errX = chamberMatch.xErr;
579 const double trkY = chamberMatch.y;
580 const double errY = chamberMatch.yErr;
582 for (
const auto& segment : chamberMatch.me0Matches )
585 const double me0X = segment.x;
586 const double me0ErrX = segment.xErr;
587 const double me0Y = segment.y;
588 const double me0ErrY = segment.yErr;
590 const double dX = fabs(me0X - trkX);
591 const double dY = fabs(me0Y - trkY);
592 const double pullX = dX/
std::sqrt(errX + me0ErrX);
593 const double pullY = dY/
std::sqrt(errY + me0ErrY);
595 if ( (dX < maxAbsDx
or pullX < maxAbsPullX) and (dY < maxAbsDy
or pullY < maxAbsPullY) )
603 return ( nMatch >= minNumberOfMatches );
608 if ( minNumberOfMatches == 0 )
return true;
611 for (
const auto& chamberMatch : muon.
matches() )
615 const double trkX = chamberMatch.x;
616 const double errX = chamberMatch.xErr;
617 const double trkY = chamberMatch.y;
618 const double errY = chamberMatch.yErr;
620 for (
const auto& segment : chamberMatch.gemMatches )
623 const double gemX = segment.x;
624 const double gemErrX = segment.xErr;
625 const double gemY = segment.y;
626 const double gemErrY = segment.yErr;
628 const double dX = fabs(gemX - trkX);
629 const double dY = fabs(gemY - trkY);
630 const double pullX = dX/
std::sqrt(errX + gemErrX);
631 const double pullY = dY/
std::sqrt(errY + gemErrY);
633 if ( (dX < maxAbsDx
or pullX < maxAbsPullX) and (dY < maxAbsDy
or pullY < maxAbsPullY) )
641 return ( nMatch >= minNumberOfMatches );
684 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,1E9,1E9,-3,-3,arbitrationType,
true,
false);
687 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,3,3,-3,-3,arbitrationType,
true,
false);
690 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,1E9,1E9,1E9,1E9,arbitrationType,
false,
false);
693 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,3,3,1E9,1E9,arbitrationType,
false,
false);
696 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
697 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,1E9,1E9,1E9,1E9,arbitrationType,
false,
false);
699 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,1E9,1E9,-3,-3,arbitrationType,
false,
false);
702 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
703 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,3,3,1E9,1E9,arbitrationType,
false,
false);
705 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,3,3,-3,-3,arbitrationType,
false,
false);
725 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,1E9,1E9,-3,-3,arbitrationType,
false,
true);
728 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,3,3,-3,-3,arbitrationType,
false,
true);
731 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,1E9,1E9,1E9,1E9,arbitrationType,
false,
true);
734 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,3,3,1E9,1E9,arbitrationType,
false,
true);
737 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
738 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,1E9,1E9,1E9,1E9,arbitrationType,
false,
false);
740 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,1E9,1E9,-3,-3,arbitrationType,
true,
false);
743 if (muon.
pt() < 8. && fabs(muon.
eta()) < 1.2)
744 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMOneStation,1,3,3,3,3,1E9,1E9,arbitrationType,
false,
false);
746 return muon.
isTrackerMuon() &&
isGoodMuon(muon,
TMLastStation,2,3,3,3,3,-3,-3,arbitrationType,
true,
false);
749 return muon.
isRPCMuon() &&
isGoodMuon(muon,
RPCMu, 2, 20, 4, 1e9, 1e9, 1e9, 1e9, arbitrationType,
false,
false);
755 return muon.
isME0Muon() &&
isGoodMuon(muon,
ME0Mu, 1, 1e9, 1e9, 1e9, 1e9, 1e9, 1e9, arbitrationType,
false,
false);
761 return muon.
isGEMMuon() &&
isGoodMuon(muon,
GEMMu, 1, 1e9, 1e9, 1e9, 1e9, 1e9, 1e9, arbitrationType,
false,
false);
769 double pullX,
double pullY,
bool checkAdjacentChambers)
773 unsigned int betterMuon = ( muon1.
pt() > muon2.
pt() ? 1 : 2 );
774 for ( std::vector<reco::MuonChamberMatch>::const_iterator chamber1 = muon1.
matches().begin();
775 chamber1 != muon1.
matches().end(); ++chamber1 )
776 for ( std::vector<reco::MuonChamberMatch>::const_iterator chamber2 = muon2.
matches().begin();
777 chamber2 != muon2.
matches().end(); ++chamber2 )
784 if ( chamber1->id == chamber2->id ){
786 if ( fabs(chamber1->x-chamber2->x) <
787 pullX *
sqrt(chamber1->xErr*chamber1->xErr+chamber2->xErr*chamber2->xErr) )
789 if ( betterMuon == 1 )
793 if ( nMatches1==0 || nMatches2==0 )
return true;
796 if ( fabs(chamber1->y-chamber2->y) <
797 pullY *
sqrt(chamber1->yErr*chamber1->yErr+chamber2->yErr*chamber2->yErr) )
799 if ( betterMuon == 1 )
803 if ( nMatches1==0 || nMatches2==0 )
return true;
806 if ( ! checkAdjacentChambers )
continue;
814 if ( id1.
ring() != id2.
ring() )
continue;
822 if ( fabs(chamber1->edgeX) > chamber1->xErr*pullX )
continue;
823 if ( fabs(chamber2->edgeX) > chamber2->xErr*pullX )
continue;
824 if ( chamber1->x * chamber2->x < 0 ) {
825 if ( betterMuon == 1 )
829 if ( nMatches1==0 || nMatches2==0 )
return true;
844 bool hits = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
845 muon.
innerTrack()->hitPattern().numberOfValidPixelHits() > 0;
850 return muID && hits && ip;
861 if (run2016_hip_mitigation){
862 if (muon.
innerTrack()->validFraction() < 0.49 )
return false;
864 if (muon.
innerTrack()->validFraction() < 0.8 )
return false;
876 bool run2016_hip_mitigation){
880 if(!muID)
return false;
882 bool layers = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
883 muon.
innerTrack()->hitPattern().pixelLayersWithMeasurement() > 0;
889 return layers && ip && (ishighq|run2016_hip_mitigation);
896 if(!muID)
return false;
898 bool hits = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
899 muon.
innerTrack()->hitPattern().numberOfValidPixelHits() > 0;
905 return muID && hits && momQuality && ip;
911 if(!muID)
return false;
913 bool hits = muon.
innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 &&
914 muon.
innerTrack()->hitPattern().numberOfValidPixelHits() > 0;
920 return muID && hits && momQuality && ip;
928 for(std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = mu.
matches().begin();
929 chamberMatch != mu.
matches().end(); ++chamberMatch) {
930 if (chamberMatch->segmentMatches.empty())
continue;
931 for(std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch2 = mu2.
matches().begin();
932 chamberMatch2 != mu2.
matches().end(); ++chamberMatch2) {
933 if (chamberMatch2->segmentMatches.empty())
continue;
934 if (chamberMatch2->id() != chamberMatch->id())
continue;
935 for(std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
936 segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
937 if (!segmentMatch->isMask(segmentArbitrationMask))
continue;
938 for(std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch2 = chamberMatch2->segmentMatches.begin();
939 segmentMatch2 != chamberMatch2->segmentMatches.end(); ++segmentMatch2) {
940 if (!segmentMatch2->isMask(segmentArbitrationMask))
continue;
941 if ((segmentMatch->cscSegmentRef.isNonnull() && segmentMatch->cscSegmentRef == segmentMatch2->cscSegmentRef) ||
942 (segmentMatch-> dtSegmentRef.isNonnull() && segmentMatch-> dtSegmentRef == segmentMatch2-> dtSegmentRef) ) {
955 bool run2016_hip_mitigation)
964 double dbCorrectedIsolation = chIso +
std::max( nIso + phoIso - .5*puIso, 0. ) ;
965 double dbCorectedRelIso = dbCorrectedIsolation/muon.
pt();
float chi2LocalPosition
chi2 value for the STA-TK matching of local position
float segmentX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
TrackRef track() const override
reference to a Track
bool isNonnull() const
Checks for non-null.
double eta() const final
momentum pseudorapidity
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
bool isStandAloneMuon() const override
float sumPt
sum-pt of tracks
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
virtual TrackRef innerTrack() const
double pt() const final
transverse momentum
void setCutBasedSelectorFlags(reco::Muon &muon, const reco::Vertex *vertex=0, bool run2016_hip_mitigation=false)
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
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)
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
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 &)
void setSelectors(unsigned int selectors)
SelectionType selectionTypeFromString(const std::string &label)
const MuonPFIsolation & pfIsolationR04() const
a lightweight "map" for selection type string label and enum value
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
unsigned int selectors() const
float pullDyDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
float trackDist(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
virtual TrackRef tunePMuonBestTrack() const
bool isTrackerHighPtMuon(const reco::Muon &, const reco::Vertex &)
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
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