Skip to content

Commit

Permalink
Merge pull request #20612 from drkovalskyi/standard_muon_selectors
Browse files Browse the repository at this point in the history
Standard muon selectors
  • Loading branch information
cmsbuild committed Oct 8, 2017
2 parents 0cc0682 + 0dce48d commit b9e344f
Show file tree
Hide file tree
Showing 20 changed files with 606 additions and 87 deletions.
66 changes: 53 additions & 13 deletions DataFormats/MuonReco/interface/Muon.h
Expand Up @@ -30,7 +30,7 @@ namespace reco {
/// constructor from values
Muon( Charge, const LorentzVector &, const Point & = Point( 0, 0, 0 ) );
/// create a clone
Muon * clone() const;
Muon * clone() const override;



Expand All @@ -46,20 +46,20 @@ namespace reco {
/// reference to Track reconstructed in the tracker only
using reco::RecoCandidate::track;
virtual TrackRef innerTrack() const { return innerTrack_; }
virtual TrackRef track() const { return innerTrack(); }
TrackRef track() const override { return innerTrack(); }
/// reference to Track reconstructed in the muon detector only
virtual TrackRef outerTrack() const { return outerTrack_; }
virtual TrackRef standAloneMuon() const { return outerTrack(); }
TrackRef standAloneMuon() const override { return outerTrack(); }
/// reference to Track reconstructed in both tracked and muon detector
virtual TrackRef globalTrack() const { return globalTrack_; }
virtual TrackRef combinedMuon() const { return globalTrack(); }
TrackRef combinedMuon() const override { return globalTrack(); }

virtual TrackRef tpfmsTrack() const { return muonTrackFromMap(TPFMS);}
virtual TrackRef pickyTrack() const { return muonTrackFromMap(Picky);}
virtual TrackRef dytTrack() const { return muonTrackFromMap(DYT);}

virtual const Track * bestTrack() const {return muonTrack(bestTrackType_).get();}
virtual TrackBaseRef bestTrackRef() const {return reco::TrackBaseRef(muonTrack(bestTrackType_));}
const Track * bestTrack() const override {return muonTrack(bestTrackType_).get();}
TrackBaseRef bestTrackRef() const override {return reco::TrackBaseRef(muonTrack(bestTrackType_));}
virtual TrackRef muonBestTrack() const {return muonTrack(bestTrackType_);}
virtual MuonTrackType muonBestTrackType() const {return bestTrackType_;}
virtual TrackRef tunePMuonBestTrack() const {return muonTrack(bestTunePTrackType_);}
Expand Down Expand Up @@ -182,6 +182,45 @@ namespace reco {
enum ArbitrationType { NoArbitration, SegmentArbitration, SegmentAndTrackArbitration, SegmentAndTrackArbitrationCleaned,
RPCHitAndTrackArbitration, GEMSegmentAndTrackArbitration, ME0SegmentAndTrackArbitration };

///
/// ====================== STANDARD SELECTORS ===========================
///
enum Selector {
CutBasedIdLoose = 1UL<< 0,
CutBasedIdMedium = 1UL<< 1,
CutBasedIdMediumPrompt = 1UL<< 2, // medium with IP cuts
CutBasedIdTight = 1UL<< 3,
CutBasedIdGlobalHighPt = 1UL<< 4, // high pt muon for Z',W' (better momentum resolution)
CutBasedIdTrkHighPt = 1UL<< 5, // high pt muon for boosted Z (better efficiency)
PFIsoVeryLoose = 1UL<< 6, // reliso<0.40
PFIsoLoose = 1UL<< 7, // reliso<0.25
PFIsoMedium = 1UL<< 8, // reliso<0.20
PFIsoTight = 1UL<< 9, // reliso<0.15
PFIsoVeryTight = 1UL<<10, // reliso<0.10
TkIsoLoose = 1UL<<11, // reliso<0.10
TkIsoTight = 1UL<<12, // reliso<0.05
SoftCutBasedId = 1UL<<13,
SoftMvaId = 1UL<<14,
MvaLoose = 1UL<<15,
MvaMedium = 1UL<<16,
MvaTight = 1UL<<17,
MiniIsoLoose = 1UL<<18, // reliso<0.40
MiniIsoMedium = 1UL<<19, // reliso<0.20
MiniIsoTight = 1UL<<20, // reliso<0.10
MiniIsoVeryTight = 1UL<<21 // reliso<0.05

};

bool passed( unsigned int selection ) const { return (selectors_ & selection)==selection; }
unsigned int selectors() const { return selectors_; }
void setSelectors( unsigned int selectors ){ selectors_ = selectors; }
void setSelector(Selector selector, bool passed){
if (passed)
selectors_ |= selector;
else
selectors_ &= ~selector;
}

///
/// ====================== USEFUL METHODs ===========================
///
Expand Down Expand Up @@ -221,19 +260,19 @@ namespace reco {
void setType( unsigned int type ) { type_ = type; }
unsigned int type() const { return type_; }
// override of method in base class reco::Candidate
bool isMuon() const { return true; }
bool isGlobalMuon() const { return type_ & GlobalMuon; }
bool isTrackerMuon() const { return type_ & TrackerMuon; }
bool isStandAloneMuon() const { return type_ & StandAloneMuon; }
bool isCaloMuon() const { return type_ & CaloMuon; }
bool isMuon() const override { return true; }
bool isGlobalMuon() const override { return type_ & GlobalMuon; }
bool isTrackerMuon() const override { return type_ & TrackerMuon; }
bool isStandAloneMuon() const override { return type_ & StandAloneMuon; }
bool isCaloMuon() const override { return type_ & CaloMuon; }
bool isPFMuon() const {return type_ & PFMuon;} //fix me ! Has to go to type
bool isRPCMuon() const {return type_ & RPCMuon;}
bool isGEMMuon() const {return type_ & GEMMuon;}
bool isME0Muon() const {return type_ & ME0Muon;}

private:
/// check overlap with another candidate
virtual bool overlap( const Candidate & ) const;
bool overlap( const Candidate & ) const override;
/// reference to Track reconstructed in the tracker only
TrackRef innerTrack_;
/// reference to Track reconstructed in the muon detector only
Expand Down Expand Up @@ -288,7 +327,8 @@ namespace reco {
/// get pointers to best segment and corresponding chamber in vector of chambers
std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> pair( const std::vector<const MuonChamberMatch*> &,
ArbitrationType type = SegmentAndTrackArbitration ) const;

/// selector bitmap
unsigned int selectors_;
public:
/// get number of segments
int numberOfSegments( int station, int muonSubdetId, ArbitrationType type = SegmentAndTrackArbitration ) const;
Expand Down
8 changes: 6 additions & 2 deletions DataFormats/MuonReco/interface/MuonSelectors.h
Expand Up @@ -87,9 +87,10 @@ namespace muon {

bool isTightMuon(const reco::Muon&, const reco::Vertex&);
bool isLooseMuon(const reco::Muon&);
bool isMediumMuon(const reco::Muon&);
bool isSoftMuon(const reco::Muon&, const reco::Vertex&);
bool isMediumMuon(const reco::Muon&, bool run2016_hip_mitigation=false);
bool isSoftMuon(const reco::Muon&, const reco::Vertex&, bool run2016_hip_mitigation=false);
bool isHighPtMuon(const reco::Muon&, const reco::Vertex&);
bool isTrackerHighPtMuon(const reco::Muon&, const reco::Vertex&);

// determine if station was crossed well withing active volume
unsigned int RequiredStationMask( const reco::Muon& muon,
Expand All @@ -116,5 +117,8 @@ namespace muon {
int sharedSegments( const reco::Muon& muon1, const reco::Muon& muon2,
unsigned int segmentArbitrationMask = reco::MuonSegmentMatch::BestInChamberByDR ) ;

void setCutBasedSelectorFlags(reco::Muon& muon,
const reco::Vertex* vertex=nullptr,
bool run2016_hip_mitigation=false);
}
#endif

0 comments on commit b9e344f

Please sign in to comment.