[11] | 1 | #ifndef _MIDPOINT_ALGORITHM_HH_
|
---|
| 2 | #define _MIDPOINT_ALGORITHM_HH_
|
---|
| 3 |
|
---|
| 4 | #include "../interface/PhysicsTower.hh"
|
---|
| 5 | #include "../interface/Cluster.hh"
|
---|
| 6 | #include <vector>
|
---|
| 7 |
|
---|
| 8 | class MidPointAlgorithm
|
---|
| 9 | {
|
---|
| 10 | public:
|
---|
| 11 | enum SplitMergeScale {SM_pt, SM_Et, SM_mt, SM_pttilde};
|
---|
| 12 |
|
---|
| 13 | private:
|
---|
| 14 | double _seedThreshold;
|
---|
| 15 | double _coneRadius;
|
---|
| 16 | double _coneAreaFraction;
|
---|
| 17 | int _maxPairSize;
|
---|
| 18 | int _maxIterations;
|
---|
| 19 | double _overlapThreshold;
|
---|
| 20 | SplitMergeScale _smScale;
|
---|
| 21 |
|
---|
| 22 | public:
|
---|
| 23 | MidPointAlgorithm():
|
---|
| 24 | _seedThreshold(1),
|
---|
| 25 | _coneRadius(0.7),
|
---|
| 26 | _coneAreaFraction(0.25),
|
---|
| 27 | _maxPairSize(2),
|
---|
| 28 | _maxIterations(100),
|
---|
| 29 | _overlapThreshold(0.75),
|
---|
| 30 | _smScale(SM_pt)
|
---|
| 31 | {}
|
---|
| 32 | MidPointAlgorithm(double st, double cr, double caf, int mps, int mi, double ot, SplitMergeScale sm = SM_pt):
|
---|
| 33 | _seedThreshold(st),
|
---|
| 34 | _coneRadius(cr),
|
---|
| 35 | _coneAreaFraction(caf),
|
---|
| 36 | _maxPairSize(mps),
|
---|
| 37 | _maxIterations(mi),
|
---|
| 38 | _overlapThreshold(ot),
|
---|
| 39 | _smScale(sm)
|
---|
| 40 | {}
|
---|
| 41 | void findStableConesFromSeeds(std::vector<PhysicsTower>& particles, std::vector<Cluster>& stableCones);
|
---|
| 42 | void findStableConesFromMidPoints(std::vector<PhysicsTower>& particles, std::vector<Cluster>& stableCones);
|
---|
| 43 | void iterateCone(volatile double startRapidity, volatile double startPhi, volatile double startPt, std::vector<PhysicsTower>& particles,
|
---|
| 44 | std::vector<Cluster>& stableCones, bool reduceConeSize);
|
---|
| 45 | void addClustersToPairs(std::vector<int>& testPair, std::vector< std::vector<int> >& pairs,
|
---|
| 46 | std::vector< std::vector<bool> >& distanceOK, int maxClustersInPair);
|
---|
| 47 | void splitAndMerge(std::vector<Cluster>& stableCones, std::vector<Cluster>& jets);
|
---|
| 48 | void run(std::vector<PhysicsTower>& particles, std::vector<Cluster>& jets);
|
---|
| 49 |
|
---|
| 50 | /// sort the clusters into whatever order is
|
---|
| 51 | void local_sort(std::vector<Cluster>&);
|
---|
| 52 |
|
---|
| 53 | };
|
---|
| 54 |
|
---|
| 55 |
|
---|
| 56 | #endif
|
---|