00001 #ifndef MuonSeedGenerator_SETSeedFinder_h 00002 #define MuonSeedGenerator_SETSeedFinder_h 00003 00004 #include "RecoMuon/MuonSeedGenerator/src/MuonSeedVFinder.h" 00005 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h" 00006 #include "RecoMuon/MuonSeedGenerator/src/MuonSeedPtExtractor.h" 00007 #include "RecoMuon/MuonSeedGenerator/src/SETFilter.h" 00008 #include "CLHEP/Matrix/Vector.h" 00009 #include "CLHEP/Vector/ThreeVector.h" 00010 00011 00012 class SETSeedFinder : public MuonSeedVFinder 00013 { 00014 public: 00015 typedef MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer; 00016 00017 explicit SETSeedFinder(const edm::ParameterSet & pset); 00018 virtual ~SETSeedFinder() {delete thePtExtractor;} 00020 virtual void setBField(const MagneticField * field) {} 00021 00029 virtual void seeds(const MuonRecHitContainer & cluster, 00030 std::vector<TrajectorySeed> & result); 00031 00032 void setServiceProxy(MuonServiceProxy * service) {theService = service;} 00033 00034 std::vector<MuonRecHitContainer> 00035 sortByLayer(MuonRecHitContainer & cluster) const; 00036 00037 //---- For protection against huge memory consumtion 00038 void limitCombinatorics(std::vector< MuonRecHitContainer > & MuonRecHitContainer_perLayer); 00039 00040 std::vector<MuonRecHitContainer> 00041 findAllValidSets(const std::vector<MuonRecHitContainer> & MuonRecHitContainer_perLayer); 00042 00043 std::pair <int, int> checkAngleDeviation(double dPhi_1, double dPhi_2) const; 00044 00045 void validSetsPrePruning(std::vector<MuonRecHitContainer> & allValidSets); 00046 00047 void pre_prune(MuonRecHitContainer & validSet) const; 00048 00049 std::vector <SeedCandidate> 00050 fillSeedCandidates(std::vector <MuonRecHitContainer> & allValidSets); 00051 00052 void estimateMomentum(const MuonRecHitContainer & validSet, 00053 CLHEP::Hep3Vector & momentum, int & charge) const; 00054 00055 TrajectorySeed makeSeed(const TrajectoryStateOnSurface & tsos, 00056 const TransientTrackingRecHit::ConstRecHitContainer & hits) const; 00057 00058 private: 00059 MuonServiceProxy * theService; 00060 00061 bool apply_prePruning; 00062 bool useSegmentsInTrajectory; 00063 00064 00065 }; 00066 00067 #endif 00068 00069 00070