8 #ifndef PNDTOOLS_TRACKINGQA_PNDTRACKFUNCTOR_H_ 9 #define PNDTOOLS_TRACKINGQA_PNDTRACKFUNCTOR_H_ 11 #include "FairMultiLinkedData.h" 12 #include "FairRootManager.h" 16 class PndTrackFunctor :
public std::binary_function<FairMultiLinkedData *, Bool_t, Bool_t> {
18 virtual Bool_t
operator()(FairMultiLinkedData *a, Bool_t primary) {
return Call(a, primary); };
20 virtual Bool_t
Call(FairMultiLinkedData *a, Bool_t primary) = 0;
21 virtual void Print() = 0;
27 Bool_t
Call(FairMultiLinkedData *a, Bool_t)
29 FairRootManager *ioman = FairRootManager::Instance();
30 Bool_t possibleTrack = kFALSE;
32 (possibleTrack | ((a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsPixel")).GetNLinks() + a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsStrip")).GetNLinks()) > 3));
34 possibleTrack = (possibleTrack | ((a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsPixel")).GetNLinks() + a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsStrip")).GetNLinks() +
35 a->GetLinksWithType(ioman->GetBranchId(
"STTHit")).GetNLinks() + a->GetLinksWithType(ioman->GetBranchId(
"GEMHit")).GetNLinks()) > 5));
40 void Print() { std::cout <<
"StandardTrackFunctor: > 3 Hits in MVD or > 5 Hits in (MVD+Stt+GEM)" << std::endl; }
44 Bool_t
Call(FairMultiLinkedData *a, Bool_t)
46 FairRootManager *ioman = FairRootManager::Instance();
47 Bool_t possibleTrack = kFALSE;
49 possibleTrack = (possibleTrack | (a->GetLinksWithType(ioman->GetBranchId(
"STTHit")).GetNLinks() > 5));
53 void Print() { std::cout <<
"OnlySttFunctor: > 5 Hits in Stt" << std::endl; }
57 Bool_t
Call(FairMultiLinkedData *a, Bool_t)
59 FairRootManager *ioman = FairRootManager::Instance();
60 Bool_t possibleTrack = kFALSE;
62 possibleTrack = (possibleTrack | (a->GetLinksWithType(ioman->GetBranchId(
"STTSortedHits")).GetNLinks() > 5));
66 void Print() { std::cout <<
"OnlySttTimeBasedFunctor: > 5 Hits in Stt" << std::endl; }
70 Bool_t
Call(FairMultiLinkedData *a, Bool_t)
72 FairRootManager *ioman = FairRootManager::Instance();
73 Bool_t possibleTrack = kFALSE;
74 Bool_t mvdHits = ((a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsPixel")).GetNLinks() + a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsStrip")).GetNLinks()) > 2);
77 possibleTrack = (a->GetLinksWithType(ioman->GetBranchId(
"STTHit")).GetNLinks() > 1) | (a->GetLinksWithType(ioman->GetBranchId(
"GEMHit")).GetNLinks() > 1);
81 void Print() { std::cout <<
"RiemannMvdSttGemFunctor: > 2 Hits in MVD and >0 Hits in (Stt+Gem)" << std::endl; }
85 Bool_t
Call(FairMultiLinkedData *a, Bool_t primary)
87 if (primary == kFALSE)
89 FairRootManager *ioman = FairRootManager::Instance();
90 Bool_t possibleTrack = kFALSE;
92 Int_t nHitsMvdPixel = a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsPixel")).GetNLinks();
93 Int_t nHitsMvdStrip = a->GetLinksWithType(ioman->GetBranchId(
"MVDHitsStrip")).GetNLinks();
94 if (nHitsMvdPixel + nHitsMvdStrip > 2) {
97 possibleTrack = kTRUE;
100 return possibleTrack;
102 void Print() { std::cout <<
"CircleHoughTrackFunctor: >= 3 Hits in MVD and primary track" << std::endl; }
106 Bool_t
Call(FairMultiLinkedData *a, Bool_t)
108 FairRootManager *ioman = FairRootManager::Instance();
109 Bool_t possibleTrack = kFALSE;
111 possibleTrack = (possibleTrack | (a->GetLinksWithType(ioman->GetBranchId(
"FTSHit")).GetNLinks() > 5));
113 return possibleTrack;
115 void Print() { std::cout <<
"FTSTrackFunctor: > 5 Hits in Fts" << std::endl; }
119 Bool_t
Call(FairMultiLinkedData *a, Bool_t primary)
121 FairRootManager *ioman = FairRootManager::Instance();
122 Bool_t possibleTrack = kFALSE;
124 possibleTrack = (possibleTrack | !(a->GetLinksWithType(ioman->GetBranchId(
"FTSHit")).GetNLinks() > 0));
125 if (possibleTrack == kFALSE)
128 possibleTrack = kFALSE;
129 possibleTrack = (possibleTrack | standard(a, primary));
131 return possibleTrack;
133 void Print() { std::cout <<
"noFTSTrackFunctor: no Hits in Fts + standardFunctor!" << std::endl; }
137 Bool_t
Call(FairMultiLinkedData *, Bool_t)
141 void Print() { std::cout <<
"AllTracksFunctor: take everything" << std::endl; }
virtual ~PndTrackFunctor()
static PndTrackFunctor * make_PndTrackFunctor(std::string functorName)
virtual Bool_t operator()(FairMultiLinkedData *a, Bool_t primary)
virtual Bool_t Call(FairMultiLinkedData *a, Bool_t primary)=0