![]() |
![]() |
#include <RecoMuon/TrackerSeedGenerator/interface/L1MuonSeedsMerger.h>
Public Types | |
typedef std::pair< const reco::Track *, SeedingHitSet::Hits > | TrackAndHits |
typedef std::vector< TrackAndHits > | TracksAndHits |
Public Member Functions | |
L1MuonSeedsMerger (const edm::ParameterSet &cfg) | |
virtual void | resolve (TracksAndHits &) const |
virtual | ~L1MuonSeedsMerger () |
Private Types | |
enum | Action { goAhead, killFirst, killSecond, mergeTwo } |
Private Member Functions | |
Action | compare (const TrackAndHits *, const TrackAndHits *) const |
const TrackAndHits * | merge (const TrackAndHits *, const TrackAndHits *) const |
Private Attributes | |
float | theDeltaEtaCut |
float | theDiffRelPtCut |
Classes | |
struct | Less |
Definition at line 10 of file L1MuonSeedsMerger.h.
typedef std::pair<const reco::Track*, SeedingHitSet::Hits > L1MuonSeedsMerger::TrackAndHits |
Definition at line 12 of file L1MuonSeedsMerger.h.
typedef std::vector<TrackAndHits> L1MuonSeedsMerger::TracksAndHits |
Definition at line 13 of file L1MuonSeedsMerger.h.
enum L1MuonSeedsMerger::Action [private] |
Definition at line 18 of file L1MuonSeedsMerger.h.
00018 { goAhead, killFirst, killSecond, mergeTwo };
L1MuonSeedsMerger::L1MuonSeedsMerger | ( | const edm::ParameterSet & | cfg | ) |
Definition at line 6 of file L1MuonSeedsMerger.cc.
References edm::ParameterSet::getParameter(), theDeltaEtaCut, and theDiffRelPtCut.
00007 { 00008 theDeltaEtaCut = cfg.getParameter<double>("deltaEtaCut"); 00009 theDiffRelPtCut = cfg.getParameter<double>("diffRelPtCut"); 00010 }
virtual L1MuonSeedsMerger::~L1MuonSeedsMerger | ( | ) | [inline, virtual] |
L1MuonSeedsMerger::Action L1MuonSeedsMerger::compare | ( | const TrackAndHits * | a, | |
const TrackAndHits * | b | |||
) | const [private] |
Definition at line 60 of file L1MuonSeedsMerger.cc.
References goAhead, killFirst, killSecond, and theDiffRelPtCut.
00061 { 00062 int nshared = 0; 00063 const SeedingHitSet::Hits & hitsA = a->second; 00064 const SeedingHitSet::Hits & hitsB = b->second; 00065 SeedingHitSet::Hits::const_iterator ihA, ihB; 00066 for (ihA = hitsA.begin(); ihA != hitsA.end(); ihA++) 00067 for (ihB = hitsB.begin(); ihB != hitsB.end(); ihB++) { 00068 const TrackingRecHit* trha = *ihA; 00069 const TrackingRecHit* trhb = *ihB; 00070 if (trha==trhb) nshared++; 00071 } 00072 00073 if (nshared >= 2) { 00074 if (hitsA.size() >= 3 && hitsB.size() >= 3 ) 00075 return (a->first->chi2() > b->first->chi2()) ? killFirst : killSecond; 00076 else if (hitsB.size() >= 3) 00077 return killFirst; 00078 else 00079 return killSecond; 00080 } 00081 else if (nshared >= 1) { 00082 if (hitsA.size() != hitsB.size()) 00083 return (hitsA.size() < hitsB.size()) ? killFirst : killSecond; 00084 else if ( hitsA.size() >= 3 00085 && a->first->charge()==b->first->charge() 00086 && fabs(a->first->pt()-b->first->pt())/b->first->pt() < theDiffRelPtCut ) 00087 return (a->first->chi2() > b->first->chi2()) ? killFirst : killSecond; 00088 else if ( hitsA.size() == 2 ) 00089 return (a->first->pt() < b->first->pt()) ? killFirst : killSecond; 00090 else 00091 return goAhead; 00092 } 00093 else return goAhead; 00094 }
const L1MuonSeedsMerger::TrackAndHits * L1MuonSeedsMerger::merge | ( | const TrackAndHits * | a, | |
const TrackAndHits * | b | |||
) | const [private] |
virtual void L1MuonSeedsMerger::resolve | ( | TracksAndHits & | ) | const [virtual] |
Referenced by TSGFromL1Muon::produce().
float L1MuonSeedsMerger::theDeltaEtaCut [private] |
float L1MuonSeedsMerger::theDiffRelPtCut [private] |
Definition at line 24 of file L1MuonSeedsMerger.h.
Referenced by compare(), and L1MuonSeedsMerger().