FairRoot/PandaRoot
PndSttMvdGemTracking.h
Go to the documentation of this file.
1 #ifndef PNDSTTMVDGEMTRACKING_H
2 #define PNDSTTMVDGEMTRACKING_H 1
3 
4 #include "PndGeoSttPar.h"
5 #include "PndGemDigiPar.h"
6 #include "PndGemHit.h"
7 #include "PndSttHit.h"
8 #include "PndTrackCand.h"
9 #include "PndTrack.h"
10 #include "PndPersistencyTask.h"
11 #include "FairGeanePro.h"
12 
13 #include "TCanvas.h"
14 #include "TH2F.h"
15 
16 class TClonesArray;
17 
19 
20  public:
21 
24 
26 
27 
30 
31 
33  virtual InitStatus Init();
34 
35 
37  virtual void Exec(Option_t* opt);
38 
39 
41  void SetPersistenc(Bool_t persistence) { SetPersistency(persistence); }
42 
43 
44  virtual void SetParContainers();
45 
46  // -------- MVD + STT ---> + GEM --------------
47  void Copy(PndTrackCand *completeCand, PndTrack *completeTrack,
48  PndTrackCand *sttmvdCand, PndTrack *sttmvd);
49  void SetTimes(Int_t times) {fTimes = times;}
50  void SetMaxDistance(Double_t maxdistance) {fMaxDistance = maxdistance;}
51  void SwitchOnDisplay() {fDisplayOn = true;}
52 
53  void SetupGEMPlanes();
54  void Reset(Int_t nhits, Int_t ntracks);
55  void OrderGemHits(Int_t nhits);
56 
57  Int_t GetTrackIndex(Int_t i);
58  Int_t GetHitIndex(Int_t i);
59  Int_t GetPosIndex(PndGemHit *hit);
60 
61  Int_t CountTracks();
62  Int_t CountHitsInTrack(Int_t itrk);
63  void AddHitToTrack(Int_t ihit, Int_t itrk);
64  void DeleteHitFromTrack(Int_t ihit, Int_t itrk);
65  std::vector<int> GetTracksAssociatedToHit(Int_t ihit);
66  std::vector<int> GetHitsAssociatedToTrack(Int_t itrk);
67  std::vector<int> GetHitsAssociatedToTrackOnPlane(Int_t itrk, Int_t ipos);
68  void AddRemainingHits(Int_t ntracks);
69 
70  void CheckCombinatorial(Int_t nhits, Int_t ntracks);
71  void ForbidMultiAssignedHits(Int_t nhits, Int_t ntracks);
72  void OnlyOneHitToEachTrack(Int_t nhits, Int_t ntracks);
73  void Retrack();
74 
75  Bool_t PropagateToGemPlane(FairTrackParP *tmppar, FairTrackParP *gempar, Int_t ipos);
76  Bool_t PropagateToGemPlaneAsHelix(PndTrack *sttmvd, FairTrackParP *gempar, Int_t ipos);
77 
78  Double_t IsAssignable(FairTrackParP *gempar, PndGemHit *gemhit);
79  std::vector<int> AssignHits(Int_t itrk, FairTrackParP *gempar, Int_t ipos);
80  void EvaluatePerformances(Int_t nhits, Int_t ntracks);
81  void FillTrueDistances();
82  // -----------------------------------------------
84 
85  void Kalman(TMatrixT<double> extrap, TMatrixT<double> measurement,
86  TMatrixT<double> H,
87  TMatrixT<double> extrap_cov, TMatrixT<double> measurement_cov,
88  TMatrixT<double> &kalman, TMatrixT<double> &kalman_cov);
89  FairTrackParP SetStartParameters(PndTrack *sttmvd, PndTrackCand *sttmvdCand);
90 
91  Int_t GetClosestOnFirst(FairTrackParP* gempar, Int_t ipos, Double_t &closestdistance);
92 
93 
94  // PREFIT -----------------------------
95  Bool_t Prefit(PndTrack *sttmvdTrack, PndTrackCand *sttmvdCand, TVector3 &lastpos, TVector3 &lastmom);
96  Bool_t IntersectionFinder(Double_t xc, Double_t yc, Double_t radius, PndSttHit* stthit, TVector3 &xyz, TVector3 &dxyz);
97  Bool_t Fit(TMatrixT<double> points, Double_t &outxc, Double_t &outyc, Double_t &outradius);
98  Bool_t ZFit(TMatrixT<double> points, Int_t charge, Double_t xc, Double_t yc, Double_t radius, Double_t &fitm, Double_t &fip);
99  Bool_t GetInitialParams(PndTrack * sttmvd, Double_t &xc, Double_t &yc, Double_t &radius, Double_t &fitm, Double_t &fitp);
100  Double_t CalculatePhi(TVector2 v, TVector2 p, double alpha, double Phi0, int charge);
101  Double_t CompareToPreviousPhi(Double_t Fi, Double_t Fi_pre, int charge);
102  Bool_t ZFind(Int_t nhits, TMatrixT<double> points, Double_t xc, Double_t yc, Double_t radius);
103 
104 
105  // COMBINATORIAL EFFECS ----------------
107  void SetCombinatorialDistance(Double_t combidistance) { fCombiDistance = combidistance; }
108  void UpdateMCTrackId(PndTrackCand *completeCand);
109 
110 
111 
112  // CHECK delete this when everything is ok
113  void UseMonteCarlo() { fUseMC = kTRUE; }
114  void WriteHistograms();
115 
116 
117  void SetEvaluateFlag(Bool_t flag) { fEvaluate = flag; }
118 
119  // PDG stuff
120  Int_t GetPdgFromMC(int trackid);
121  Int_t GetChargeCorrectedPdgFromMC(int trackid, int charge);
122  void SetPdgFromMC() { fPdgFromMC = kTRUE; }
123  void SetPdgFromMC(TString trackid) {
124  fStartTrackIDBranchName = trackid;
125  fPdgFromMC = kTRUE;
126  }
127  void SetDefaultPdg(int pdg) { fDefaultPdgCode = pdg; }
128 
129  void SetBranchNames(TString mvdpixel, TString mvdstrip, TString stt, TString gem);
130  void SetTrackBranchNames(TString startingtrack, TString startingtrackcand);
131 
132  private:
133 
135  TClonesArray* fGemHitArray;
137  TClonesArray* fGemPointArray;
138 
140  TClonesArray* fMvdPixelHitArray;
142  TClonesArray* fMvdStripHitArray;
144  TClonesArray* fSttHitArray;
145 
147  TClonesArray* fMvdPointArray;
149  TClonesArray* fSttPointArray;
150 
151 
153  TClonesArray* fMCTrackArray;
155  TClonesArray* fTrackArray;
157  TClonesArray* fTrackIDArray;
159  TClonesArray* fTrackCandArray;
160 
162  TClonesArray* fCompleteTrackCandArray;
164  TClonesArray* fCompleteTrackArray;
165 
167  TClonesArray* fTubeArray;
168 
170 
171 
174 
176  FairGeanePro *fPro;
177 
180 
181  std::vector<int> usabletracks;
182 
184  std::vector<int> fOrdering;
185  std::vector<int>::iterator fOrderingIterator;
186 
188  TClonesArray *fSensPositions;
189 
191  Int_t fNPositions;
192 
194  TVector3 fDj, fDk;
195 
198 
199  // CHECK added -------------------------
200  std::vector<std::pair<int, int> > trackvector;
201  std::vector<int> trackindexes;
202  std::vector<int> notassignedhits;
203  std::vector<int> notassignedtracks;
204 
206  std::map<int, bool> towhichplane;
207 
209  std::map<int, bool> fProTracks;
210 
216  TMatrixT<float> hitmap;
217 
221  TMatrixT<float> hitcounter;
222 
224  TMatrixT<double> distancemap;
225  // ----------------------------------------
226 
228  Int_t fTimes;
229  Int_t fTurn;
230 
231  // DISPLAY
233  TCanvas *display;
234  TH2F *h[8], *hnotskewed, *hskewed;
235  TH1F *hdist[8], *hdist2[8], *hsigma[8], *hsigma2[8], *hchosen[8], *hchosen2[8], *hmcdist[8], *hmcx[8], *hmcy[8];
236 
237  // MonteCarlo
238  // CHECK delete this when everything is ok
240 
243 
244 
246  std::map<int, int> fCombiMap;
248 
249  // evaluate performances? yes/no
251 
253 
254 };
255 
256 #endif
Double_t CompareToPreviousPhi(Double_t Fi, Double_t Fi_pre, int charge)
std::vector< int >::iterator fOrderingIterator
TMatrixT< float > hitmap
PndGemDigiPar * fGemParameters
void OrderGemHits(Int_t nhits)
Int_t GetPosIndex(PndGemHit *hit)
void Copy(PndTrackCand *completeCand, PndTrack *completeTrack, PndTrackCand *sttmvdCand, PndTrack *sttmvd)
void SetCombinatorialDistance(Double_t combidistance)
std::vector< int > GetHitsAssociatedToTrackOnPlane(Int_t itrk, Int_t ipos)
Int_t i
Definition: run_full.C:25
void CheckCombinatorial(Int_t nhits, Int_t ntracks)
void SetBranchNames(TString mvdpixel, TString mvdstrip, TString stt, TString gem)
Bool_t Fit(TMatrixT< double > points, Double_t &outxc, Double_t &outyc, Double_t &outradius)
#define verbose
TClonesArray * fTrackCandArray
Double_t IsAssignable(FairTrackParP *gempar, PndGemHit *gemhit)
virtual void Exec(Option_t *opt)
KalmanTask * kalman
std::vector< int > trackindexes
void SetPersistency(Bool_t val=kTRUE)
Double_t CalculatePhi(TVector2 v, TVector2 p, double alpha, double Phi0, int charge)
Int_t CountHitsInTrack(Int_t itrk)
TClonesArray * fCompleteTrackCandArray
Digitization Parameter Class for GEM part.
Definition: PndGemDigiPar.h:31
Bool_t IntersectionFinder(Double_t xc, Double_t yc, Double_t radius, PndSttHit *stthit, TVector3 &xyz, TVector3 &dxyz)
std::vector< std::pair< int, int > > trackvector
Int_t GetChargeCorrectedPdgFromMC(int trackid, int charge)
Bool_t ZFit(TMatrixT< double > points, Int_t charge, Double_t xc, Double_t yc, Double_t radius, Double_t &fitm, Double_t &fip)
__m128 v
Definition: P4_F32vec4.h:4
TClonesArray * fCompleteTrackArray
Double_t p
Definition: anasim.C:58
Int_t GetClosestOnFirst(FairTrackParP *gempar, Int_t ipos, Double_t &closestdistance)
std::vector< int > GetHitsAssociatedToTrack(Int_t itrk)
void EvaluatePerformances(Int_t nhits, Int_t ntracks)
std::vector< int > fOrdering
virtual InitStatus Init()
TClonesArray * fMvdPixelHitArray
void AddRemainingHits(Int_t ntracks)
Bool_t PropagateToGemPlane(FairTrackParP *tmppar, FairTrackParP *gempar, Int_t ipos)
Int_t GetPdgFromMC(int trackid)
Double_t
TClonesArray * fMvdStripHitArray
TMatrixT< double > distancemap
void SetMaxDistance(Double_t maxdistance)
Bool_t Prefit(PndTrack *sttmvdTrack, PndTrackCand *sttmvdCand, TVector3 &lastpos, TVector3 &lastmom)
void SetPdgFromMC(TString trackid)
TMatrixT< float > hitcounter
void Kalman(TMatrixT< double > extrap, TMatrixT< double > measurement, TMatrixT< double > H, TMatrixT< double > extrap_cov, TMatrixT< double > measurement_cov, TMatrixT< double > &kalman, TMatrixT< double > &kalman_cov)
std::map< int, bool > fProTracks
void DeleteHitFromTrack(Int_t ihit, Int_t itrk)
void ForbidMultiAssignedHits(Int_t nhits, Int_t ntracks)
std::vector< int > notassignedtracks
void AddHitToTrack(Int_t ihit, Int_t itrk)
Bool_t ZFind(Int_t nhits, TMatrixT< double > points, Double_t xc, Double_t yc, Double_t radius)
Bool_t PropagateToGemPlaneAsHelix(PndTrack *sttmvd, FairTrackParP *gempar, Int_t ipos)
void SetTrackBranchNames(TString startingtrack, TString startingtrackcand)
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Definition: hit.C:1
FairTrackParP SetStartParameters(PndTrack *sttmvd, PndTrackCand *sttmvdCand)
std::vector< int > GetTracksAssociatedToHit(Int_t ihit)
Int_t SelectPdgCode(PndTrack *sttmvd)
PndSttMvdTracking * sttmvd
Definition: runrecoMix.C:114
void OnlyOneHitToEachTrack(Int_t nhits, Int_t ntracks)
std::vector< int > AssignHits(Int_t itrk, FairTrackParP *gempar, Int_t ipos)
double alpha
Definition: f_Init.h:9
void UpdateMCTrackId(PndTrackCand *completeCand)
void SetPersistenc(Bool_t persistence)
Bool_t GetInitialParams(PndTrack *sttmvd, Double_t &xc, Double_t &yc, Double_t &radius, Double_t &fitm, Double_t &fitp)
void SetTimes(Int_t times)
std::vector< int > notassignedhits
void SetEvaluateFlag(Bool_t flag)
void ConsiderCombinatorialEffect(Int_t nhits)
std::map< int, bool > towhichplane
std::map< int, int > fCombiMap
ClassDef(PndSttMvdGemTracking, 1)
void Reset(Int_t nhits, Int_t ntracks)
std::vector< int > usabletracks