PandaRoot
PndIdealTrackFinder.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
23 #ifndef PndIdealTrackFinder_H_
24 #define PndIdealTrackFinder_H_
25 
26 // framework includes
27 #include "PndPersistencyTask.h"
28 #include "FairMCPoint.h"
29 #include "PndTrackCand.h"
30 #include "PndTrackFunctor.h"
31 #include "FairTSBufferFunctional.h"
32 
33 #include "TClonesArray.h"
34 #include "TDatabasePDG.h"
35 #include <math.h>
36 
38  public:
39  PndIdealTrackFinder(TString name = "PndIdealTrackFinder");
40  virtual ~PndIdealTrackFinder();
41 
42  virtual InitStatus Init();
43 
49  virtual void AddBranchName(TString name)
50  {
51  fBranchNames.push_back(name);
52  }
53 
60  virtual void AddBranchName(TString name, TString mcName)
61  {
62  fBranchNames.push_back(name);
63  fPointBranchMap[name] = mcName;
64  }
65 
71  virtual void SetOutputBranchName(TString name) { fOutBranchName = name; };
72 
76  virtual void Exec(Option_t *opt);
77 
78  // virtual void Finish();
79 
80  // taken from sttmvdtracking/PndSttMvdGemTrackingIdeal.h
81 
88  void SetMomentumSmearing(Double_t sigmax, Double_t sigmay, Double_t sigmaz)
89  {
90  fMomSigma.SetXYZ(fabs(sigmax), fabs(sigmay), fabs(sigmaz));
91  fRelative = kFALSE;
92  };
93 
99  void SetRelativeMomentumSmearing(Double_t dpop)
100  {
101  fDPoP = fabs(dpop);
102  fRelative = kTRUE;
103  };
104 
108  void SetRunTimeBased(bool valRunTimeBased = true) { fRunTimeBased = valRunTimeBased; };
109 
116  void SetVertexSmearing(Double_t sigmax = -1., Double_t sigmay = -1., Double_t sigmaz = -1.) { fVtxSigma.SetXYZ(fabs(sigmax), fabs(sigmay), fabs(sigmaz)); }; // in cm
117 
122  void SetTrackingEfficiency(Double_t eff = 1.) { fEfficiency = eff; };
123 
129  void SetTrackSelector(TString selector)
130  {
132  }
133 
137  void SetPersistence(Bool_t persistence) { SetPersistency(persistence); }
138 
139  protected:
140  virtual void CreateTrackCands();
141  virtual void CreateTracks();
142  virtual void FilterTrackCands();
143  virtual FairMCPoint *GetFairMCPoint(TString hitBranch, FairMultiLinkedData_Interface *links, FairMultiLinkedData &array);
144  // taken from sttmvdtracking/PndSttMvdGemTrackingIdeal.h
145  virtual void SmearVector(TVector3 &vec, const TVector3 &sigma);
146 
147  protected:
148  // For time-based data
149  // Functor for start time
150 
152 
153  BinaryFunctor *fFunctor;
155 
156  TString fOutBranchName;
157  TClonesArray *fTrackCand;
158  TClonesArray *fTrack;
159  TClonesArray *fMCTrack;
161  std::map<TString, TClonesArray *> fBranchMap;
162  std::vector<TString> fBranchNames;
163  std::map<FairLink, PndTrackCand> fTrackCandMap;
164  std::map<FairLink, FairMCPoint> fFirstPointMap;
165  std::map<FairLink, FairMCPoint> fLastPointMap;
166  std::map<TString, TString> fPointBranchMap;
167 
168  TDatabasePDG *fPdg;
169 
170  Int_t fHitCount;
171 
172  // Parameters for fake tracking taken from sttmvdtracking/PndSttMvdGemTrackingIdeal.h
173  TVector3 fMomSigma;
174  Double_t fDPoP;
175  Bool_t fRelative;
176  TVector3 fVtxSigma;
177  Double_t fEfficiency;
178 
180 };
181 
182 #endif /* PndIdealTrackFinder_H_ */
virtual FairMCPoint * GetFairMCPoint(TString hitBranch, FairMultiLinkedData_Interface *links, FairMultiLinkedData &array)
void SetMomentumSmearing(Double_t sigmax, Double_t sigmay, Double_t sigmaz)
TDatabasePDG * fPdg
! Particle DB
std::map< TString, TClonesArray * > fBranchMap
void SetTrackingEfficiency(Double_t eff=1.)
Ideal track finder for all types of tracking detectors The PndIdealTrackFinder combines all hits in ...
PndIdealTrackFinder(TString name="PndIdealTrackFinder")
BinaryFunctor * fFunctor
void SetPersistency(Bool_t val=kTRUE)
void SetPersistence(Bool_t persistence)
virtual void SetOutputBranchName(TString name)
std::map< TString, TString > fPointBranchMap
std::map< FairLink, FairMCPoint > fFirstPointMap
std::vector< TString > fBranchNames
virtual void AddBranchName(TString name, TString mcName)
virtual void FilterTrackCands()
void SetTrackSelector(TString selector)
void SetRelativeMomentumSmearing(Double_t dpop)
virtual void SmearVector(TVector3 &vec, const TVector3 &sigma)
PndTrackFunctor * fTrackSelector
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:58
Double_t fDPoP
Relative momentum Smearing.
ClassDef(PndIdealTrackFinder, 2)
void SetVertexSmearing(Double_t sigmax=-1., Double_t sigmay=-1., Double_t sigmaz=-1.)
void SetRunTimeBased(bool valRunTimeBased=true)
TVector3 fMomSigma
Momentum smearing sigma [GeV].
std::map< FairLink, FairMCPoint > fLastPointMap
virtual void CreateTracks()
Double_t fEfficiency
Tracking efficiency - if (0 <= e < 1), some tracks will be discarded.
virtual void CreateTrackCands()
virtual InitStatus Init()
static PndTrackFunctor * make_PndTrackFunctor(std::string functorName)
virtual void AddBranchName(TString name)
virtual void Exec(Option_t *opt)
virtual ~PndIdealTrackFinder()
TVector3 fVtxSigma
Vertex smearing sigma [cm].
std::map< FairLink, PndTrackCand > fTrackCandMap