LCFIPlus  0.6.5
TrackSelector.h
Go to the documentation of this file.
1 // TrackSelector.h
2 
3 #ifndef TrackSelector_h
4 #define TrackSelector_h 1
5 
6 #include "lcfiplus.h"
7 #include <vector>
8 #include <cmath>
9 
10 using namespace std;
11 using namespace lcfiplus;
12 
13 namespace lcfiplus {
14 
16  public:
17  // cuts which are combined using the AND scheme
18  double minD0;
19  double maxD0;
20  double minD0Err;
21  double maxD0Err;
22  double minD0Sig;
23  double maxD0Sig;
24  double minZ0;
25  double maxZ0;
26  double minZ0Err;
27  double maxZ0Err;
28  double minZ0Sig;
29  double maxZ0Sig;
30  double minD0Z0Sig;
31  double maxD0Z0Sig;
32  double minPt;
34  // cuts which are combined using the OR scheme, then AND'd with the AND schemes above
40 
42  minD0 = 0.;
43  maxD0 = 1e+300;
44  minD0Err = 0.;
45  maxD0Err = 1e+300;
46  minD0Sig = 0.;
47  maxD0Sig = 1e+300;
48  minZ0 = 0.;
49  maxZ0 = 1e+300;
50  minZ0Err = 0.;
51  maxZ0Err = 1e+300;
52  minZ0Sig = 0.;
53  maxZ0Sig = 1e+300;
54  minD0Z0Sig = 0.;
55  maxD0Z0Sig = 1e+300;
56  minPt = 0.;
57  maxInnermostHitRadius = 1e+300;
58 
59  minTpcHits = 999999;
60  minTpcHitsMinPt = 999999;
61  minFtdHits = 999999;
62  minVtxHits = 999999;
63  minVtxPlusFtdHits = 0;
64  }
65 };
66 
68  public:
69  vector<const Track*> operator () (const vector<const Track*>& tracks, TrackSelectorConfig& config) {
70  vector<const Track*> ret;
71 
72  for (unsigned int i=0; i<tracks.size(); i++) {
73  if (passesCut(tracks[i], config))
74  ret.push_back(tracks[i]);
75  }
76 
77  return ret;
78  }
79 
80  bool passesCut(const Track* trk, const TrackSelectorConfig& cfg) {
81  // AND cuts
82 
83  if (fabs(trk->getD0()) < cfg.minD0) return false;
84  if (fabs(trk->getD0()) > cfg.maxD0) return false;
85  if (trk->getCovMatrix()[tpar::d0d0] < cfg.minD0Err) return false;
86  if (trk->getCovMatrix()[tpar::d0d0] > cfg.maxD0Err) return false;
87  double d0sig = fabs(trk->getD0()) / sqrt(trk->getCovMatrix()[tpar::d0d0]);
88  if ( d0sig < cfg.minD0Sig) return false;
89  if ( d0sig > cfg.maxD0Sig) return false;
90 
91  if (fabs(trk->getZ0()) < cfg.minZ0) return false;
92  if (fabs(trk->getZ0()) > cfg.maxZ0) return false;
93  if (trk->getCovMatrix()[tpar::z0z0] < cfg.minZ0Err) return false;
94  if (trk->getCovMatrix()[tpar::z0z0] > cfg.maxZ0Err) return false;
95  double z0sig = fabs(trk->getZ0()) / sqrt(trk->getCovMatrix()[tpar::z0z0]);
96  if ( z0sig < cfg.minZ0Sig) return false;
97  if ( z0sig > cfg.maxZ0Sig) return false;
98 
99  if (sqrt(d0sig * d0sig + z0sig * z0sig) < cfg.minD0Z0Sig)return false;
100  if (sqrt(d0sig * d0sig + z0sig * z0sig) > cfg.maxD0Z0Sig)return false;
101 
102  if (trk->Pt() < cfg.minPt) return false;
103  if (trk->getRadiusOfInnermostHit() > cfg.maxInnermostHitRadius) return false;
104 
105  // OR cuts
106  if (trk->getFtdHits() >= cfg.minFtdHits) return true;
107  if (trk->getVtxHits() >= cfg.minVtxHits) return true;
108  if (trk->getVtxHits() + trk->getFtdHits() >= cfg.minVtxPlusFtdHits) return true;
109  if (trk->getTpcHits() >= cfg.minTpcHits && trk->Pt() > cfg.minTpcHitsMinPt) return true;
110 
111  return false;
112  }
113 
114  //c-tor / d-tor
117 };
118 }
119 
120 #endif //TrackSelector_h
double minZ0Sig
Definition: TrackSelector.h:28
double getRadiusOfInnermostHit() const
Definition: lcfiplus.h:479
double getZ0() const
Definition: lcfiplus.h:422
int getVtxHits() const
Definition: lcfiplus.h:450
int getTpcHits() const
Definition: lcfiplus.h:459
int minVtxHits
Definition: TrackSelector.h:38
double minD0Sig
Definition: TrackSelector.h:22
double maxZ0Err
Definition: TrackSelector.h:27
double maxD0Err
Definition: TrackSelector.h:21
const double * getCovMatrix() const
Definition: lcfiplus.h:445
Definition: lcfiplus.h:384
double maxD0
Definition: TrackSelector.h:19
double maxZ0Sig
Definition: TrackSelector.h:29
Definition: TrackSelector.h:67
Definition: lcfiplus.h:27
int minFtdHits
Definition: TrackSelector.h:37
double minPt
Definition: TrackSelector.h:32
double minZ0Err
Definition: TrackSelector.h:26
int minTpcHits
Definition: TrackSelector.h:35
double getD0() const
Definition: lcfiplus.h:419
double maxD0Z0Sig
Definition: TrackSelector.h:31
int minVtxPlusFtdHits
Definition: TrackSelector.h:39
TrackSelector()
Definition: TrackSelector.h:115
bool passesCut(const Track *trk, const TrackSelectorConfig &cfg)
Definition: TrackSelector.h:80
int getFtdHits() const
Definition: lcfiplus.h:453
double maxZ0
Definition: TrackSelector.h:25
double minZ0
Definition: TrackSelector.h:24
double minD0
Definition: TrackSelector.h:18
Definition: TrackSelector.h:15
double minD0Z0Sig
Definition: TrackSelector.h:30
double maxInnermostHitRadius
Definition: TrackSelector.h:33
~TrackSelector()
Definition: TrackSelector.h:116
TrackSelectorConfig()
Definition: TrackSelector.h:41
double minD0Err
Definition: TrackSelector.h:20
Definition: lcfiplus.h:26
double maxD0Sig
Definition: TrackSelector.h:23
double minTpcHitsMinPt
Definition: TrackSelector.h:36