FairRoot/PandaRoot
PndTrackFunctor.h
Go to the documentation of this file.
1 /*
2  * PndTrackFunctor.h
3  *
4  * Created on: 02.02.2017
5  * Author: Stockmanns
6  */
7 
8 #ifndef PNDTOOLS_TRACKINGQA_PNDTRACKFUNCTOR_H_
9 #define PNDTOOLS_TRACKINGQA_PNDTRACKFUNCTOR_H_
10 
11 #include "FairMultiLinkedData.h"
12 #include "FairRootManager.h"
13 
14 #include <functional>
15 
16 class PndTrackFunctor : public std::binary_function<FairMultiLinkedData* , Bool_t, Bool_t>
17 {
18  public :
19  virtual Bool_t operator() (FairMultiLinkedData* a, Bool_t primary) {return Call(a, primary);};
20  static PndTrackFunctor* make_PndTrackFunctor(std::string functorName);
21  virtual Bool_t Call(FairMultiLinkedData* a, Bool_t primary) = 0;
22  virtual void Print() = 0;
23 
24  virtual ~PndTrackFunctor() {};
25 
26 };
27 
29 {
30  Bool_t Call(FairMultiLinkedData* a, Bool_t ){ // primary //[R.K.03/2017] unused variable(s)
31  FairRootManager* ioman = FairRootManager::Instance();
32  Bool_t possibleTrack = kFALSE;
33  possibleTrack = (possibleTrack | ((a->GetLinksWithType(ioman->GetBranchId("MVDHitsPixel")).GetNLinks() +
34  a->GetLinksWithType(ioman->GetBranchId("MVDHitsStrip")).GetNLinks()) > 3));
35 
36  possibleTrack = (possibleTrack | ((a->GetLinksWithType(ioman->GetBranchId("MVDHitsPixel")).GetNLinks() +
37  a->GetLinksWithType(ioman->GetBranchId("MVDHitsStrip")).GetNLinks() +
38  a->GetLinksWithType(ioman->GetBranchId("STTHit")).GetNLinks() +
39  a->GetLinksWithType(ioman->GetBranchId("GEMHit")).GetNLinks()) > 5));
40 
41  return possibleTrack;
42  }
43 
44  void Print(){
45  std::cout << "StandardTrackFunctor: > 3 Hits in MVD or > 5 Hits in (MVD+Stt+GEM)" << std::endl;
46  }
47 };
48 
50 {
51  Bool_t Call(FairMultiLinkedData* a, Bool_t ){ // primary //[R.K.03/2017] unused variable(s)
52  FairRootManager* ioman = FairRootManager::Instance();
53  Bool_t possibleTrack = kFALSE;
54 
55  possibleTrack = (possibleTrack | (a->GetLinksWithType(ioman->GetBranchId("STTHit")).GetNLinks() > 5));
56 
57  return possibleTrack;
58  }
59  void Print(){
60  std::cout << "OnlySttFunctor: > 5 Hits in Stt" << std::endl;
61  }
62 };
63 
65 {
66  Bool_t Call(FairMultiLinkedData* a, Bool_t ){ // primary //[R.K.03/2017] unused variable(s)
67  FairRootManager* ioman = FairRootManager::Instance();
68  Bool_t possibleTrack = kFALSE;
69  Bool_t mvdHits = ((a->GetLinksWithType(ioman->GetBranchId("MVDHitsPixel")).GetNLinks() +
70  a->GetLinksWithType(ioman->GetBranchId("MVDHitsStrip")).GetNLinks()) > 2);
71 
72  if (mvdHits){
73  possibleTrack = (a->GetLinksWithType(ioman->GetBranchId("STTHit")).GetNLinks() > 1)
74  | (a->GetLinksWithType(ioman->GetBranchId("GEMHit")).GetNLinks() > 1);
75  }
76  return possibleTrack;
77  }
78  void Print(){
79  std::cout << "RiemannMvdSttGemFunctor: > 2 Hits in MVD and >0 Hits in (Stt+Gem)" << std::endl;
80  }
81 
82 };
83 
85 {
86  Bool_t Call(FairMultiLinkedData* a, Bool_t primary){
87  if (primary == kFALSE) return kFALSE;
88  FairRootManager* ioman = FairRootManager::Instance();
89  Bool_t possibleTrack = kFALSE;
90 
91  Int_t nHitsMvdPixel = a->GetLinksWithType(ioman->GetBranchId("MVDHitsPixel")).GetNLinks();
92  Int_t nHitsMvdStrip = a->GetLinksWithType(ioman->GetBranchId("MVDHitsStrip")).GetNLinks();
93  if (nHitsMvdPixel + nHitsMvdStrip > 2) { // First requirement: more than two MVD hits
94  //Int_t nHitsStt = a->GetLinksWithType(ioman->GetBranchId("STTHit")).GetNLinks();
95  //Int_t nHitsGem = a->GetLinksWithType(ioman->GetBranchId("GEMHit")).GetNLinks();
96  possibleTrack = kTRUE;
97  //possibleTrack = (nHitsMvdPixel + nHitsMvdStrip + nHitsStt + nHitsGem > 6); // Second requirement: More than six hits total
98  }
99  return possibleTrack;
100  }
101  void Print(){
102  std::cout << "CircleHoughTrackFunctor: >= 3 Hits in MVD and primary track" << std::endl;
103  }
104 
105 };
106 
108 {
109  Bool_t Call(FairMultiLinkedData* a, Bool_t ) { // primary //[R.K.03/2017] unused variable(s)
110  FairRootManager* ioman = FairRootManager::Instance();
111  Bool_t possibleTrack = kFALSE;
112 
113  possibleTrack = (possibleTrack | (a->GetLinksWithType(ioman->GetBranchId("FTSHit")).GetNLinks() > 5));
114 
115  return possibleTrack;
116  }
117  void Print() {
118  std::cout << "FTSTrackFunctor: > 5 Hits in Fts" << std::endl;
119  }
120 };
121 
123 {
124  Bool_t Call(FairMultiLinkedData* a, Bool_t primary) {
125  FairRootManager* ioman = FairRootManager::Instance();
126  Bool_t possibleTrack = kFALSE;
127 
128  possibleTrack = (possibleTrack | !(a->GetLinksWithType(ioman->GetBranchId("FTSHit")).GetNLinks() > 0));
129  if (possibleTrack == kFALSE) return kFALSE;
130  StandardTrackFunctor standard;
131  possibleTrack = kFALSE;
132  possibleTrack = (possibleTrack | standard(a, primary));
133 
134  return possibleTrack;
135  }
136  void Print() {
137  std::cout << "noFTSTrackFunctor: no Hits in Fts + standardFunctor!" << std::endl;
138  }
139 };
140 
142 {
143  Bool_t Call(FairMultiLinkedData* , Bool_t ) { //a primary//[R.K.03/2017] unused variable(s)
144  return kTRUE;
145  }
146  void Print() {
147  std::cout << "AllTracksFunctor: take everything" << std::endl;
148  }
149 };
150 
151 
152 
153 #endif /* PNDTOOLS_TRACKINGQA_PNDTRACKFUNCTOR_H_ */
virtual void Print()=0
Bool_t Call(FairMultiLinkedData *a, Bool_t primary)
Bool_t Call(FairMultiLinkedData *a, Bool_t primary)
virtual ~PndTrackFunctor()
Bool_t Call(FairMultiLinkedData *a, Bool_t)
Int_t a
Definition: anaLmdDigi.C:126
static PndTrackFunctor * make_PndTrackFunctor(std::string functorName)
Bool_t Call(FairMultiLinkedData *a, Bool_t)
Bool_t Call(FairMultiLinkedData *a, Bool_t)
Bool_t Call(FairMultiLinkedData *a, Bool_t)
Bool_t Call(FairMultiLinkedData *, Bool_t)
virtual Bool_t operator()(FairMultiLinkedData *a, Bool_t primary)
virtual Bool_t Call(FairMultiLinkedData *a, Bool_t primary)=0