00001 #ifndef JetAlgorithms_CMSMidpointAlgorithm_h 00002 #define JetAlgorithms_CMSMidpointAlgorithm_h 00003 00025 #include "RecoJets/JetAlgorithms/interface/JetRecoTypes.h" 00026 00027 class CMSMidpointAlgorithm 00028 { 00029 public: 00030 typedef std::vector<ProtoJet*> InternalCollection; 00031 00033 CMSMidpointAlgorithm () : 00034 theSeedThreshold(3.0), 00035 theConeRadius(0.5), 00036 theConeAreaFraction(1.0), 00037 theMaxPairSize(2), 00038 theMaxIterations(100), 00039 theOverlapThreshold(0.75), 00040 theDebugLevel(0) 00041 { } 00042 00065 CMSMidpointAlgorithm(double fSeedThreshold, double fConeRadius, double fConeAreaFraction, 00066 int fMaxPairSize, int fMaxIterations, double fOverlapThreshold, int fDebugLevel) : 00067 theSeedThreshold(fSeedThreshold), 00068 theConeRadius(fConeRadius), 00069 theConeAreaFraction(fConeAreaFraction), 00070 theMaxPairSize(fMaxPairSize), 00071 theMaxIterations(fMaxIterations), 00072 theOverlapThreshold(fOverlapThreshold), 00073 theDebugLevel(fDebugLevel) 00074 { } 00075 00078 void run(const JetReco::InputCollection& fInput, JetReco::OutputCollection* fOutput); 00079 00080 private: 00083 void findStableConesFromSeeds(const JetReco::InputCollection& fInput, InternalCollection* fOutput); 00084 00087 void iterateCone(const JetReco::InputCollection& fInput, 00088 double startRapidity, double startPhi, double startPt, bool reduceConeSize, 00089 InternalCollection* fOutput); 00090 00093 void findStableConesFromMidPoints(const JetReco::InputCollection& fInput, InternalCollection* fOutput); 00094 00097 void addClustersToPairs(const JetReco::InputCollection& fInput, 00098 std::vector<int>& testPair, std::vector<std::vector<int> >& pairs, 00099 std::vector<std::vector<bool> >& distanceOK, int maxClustersInPair); 00100 00103 void splitAndMerge(const JetReco::InputCollection& fInput, 00104 InternalCollection* fProtoJets, JetReco::OutputCollection* fFinalJets); 00105 00106 00107 double theSeedThreshold; 00108 double theConeRadius; 00109 double theConeAreaFraction; 00110 int theMaxPairSize; 00111 int theMaxIterations; 00112 double theOverlapThreshold; 00113 int theDebugLevel; 00114 }; 00115 00116 #endif