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
|
---|