PandaRoot
PndTrkTrackFinder.h
Go to the documentation of this file.
1 #ifndef PNDTRKTRACKFINDER_H
2 #define PNDTRKTRACKFINDER_H
3 
5 // fairroot
6 #include "FairTask.h"
7 // pandaroot
8 #include "PndTrack.h"
9 #include "PndMCTrack.h"
10 // stt
11 #include "PndGeoSttPar.h"
12 #include "PndSttHit.h"
13 #include "PndSttMapCreator.h"
14 // tracking
15 #include "PndTrkSttHitList.h"
16 #include "PndTrkSdsHitList.h"
17 #include "PndTrkSciTHitList.h"
18 #include "PndTrkGemHitList.h"
19 #include "PndTrkCluster.h"
20 #include "PndTrkClusterList.h"
21 #include "PndTrkTrack.h"
22 #include "PndTrkTrackList.h"
23 #include "PndTrkConformalHitList.h"
24 #include "PndTrkSkewHitList.h"
25 #include "PndTrkFitter.h"
26 #include "PndTrkNeighboringMap.h"
27 #include "PndTrkGemCombinatorial.h"
28 
29 // ROOT
30 #include "TH2F.h"
31 #include "TCanvas.h"
32 #include <TStopwatch.h>
33 
34 #define MAXNOFHITS 1000 // CHECK
35 
36 class TClonesArray;
37 class TObjectArray;
40 class PndTrkTrackFinder : public FairTask {
41 
42  public:
45  PndTrkTrackFinder(int verbose);
46 
49 
51  virtual InitStatus Init();
52 
54  virtual void Exec(Option_t *opt);
55 
56  void SetParContainers();
57 
58  // void Apollonius(PndTrkCluster *cluster, double *X, double *Y, double *R);
59  void Apollonius(PndTrkCluster *cluster, std::vector<double> &X, std::vector<double> &Y, std::vector<double> &R);
60  void Apollonius(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, std::vector<double> &X, std::vector<double> &Y, std::vector<double> &R);
61  void CircleBy3Points(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, double &X, double &Y, double &R);
62 
63  void Initialize();
64  void Reset();
65 
66  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
67  void DrawGeometry();
68  void DrawHits(PndTrkHitList *hitlist);
69  void DrawLists();
70  void DrawNeighborings();
72  void Refresh();
73  void RefreshConf();
74  void DrawGeometryConf(double x1, double x2, double y1, double y2);
75  void DrawConfHit(double x, double y, double r, int marker = 2);
76 
77  void LightCluster(PndTrkCluster *cluster);
78  void DrawLegendreHisto();
79 
81 
82  Int_t FillConformalHitList(PndTrkCluster *cluster);
83  void FillLegendreHisto(PndTrkCluster *cluster);
84  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
91 
92  void RePrepareLegendre(PndTrkCluster *cluster);
93  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
94  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
95 
96  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
97  void FromConformalToRealTrackParabola(double fita, double fitb, double fitc, double &x0, double &y0, double &R, double &epsilon);
98  void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp);
99 
100  void SearchSecondaryTracks() { fSecondary = kTRUE; }
101 
103  // PndTrkClusterList CreateFullClusterization2();
104 
105  Int_t CountTracksInCluster(PndTrkCluster *cluster);
106  Int_t CountTracksInSkewSector(PndTrkCluster *cluster);
107  Int_t CountTracksInCluster(PndTrkCluster *cluster, Int_t where);
108  Int_t CountPossibleTracks();
109 
110  Int_t ClusterToConformal(PndTrkCluster *cluster);
113 
114  Bool_t AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq);
115  void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2);
116  Bool_t AnalyticalParabolaFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fita, double &fitb, Double_t &fitc, Double_t &epsilon);
117 
118  void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R);
119  void IntersectionFinder(PndTrkConformalHit *chit, double fitm, double fitp);
120 
121  void FillHitMap();
122 
125  void DrawZGeometry(double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
126 
127  Bool_t MinuitFit(PndTrkCluster *cluster, double mstart, double qstart, double &fitm, double &fitq);
128  Bool_t MinuitFit2(PndTrkCluster *cluster, double xstart, double ystart, double rstart, double &xc, double &yc, double &R, double &sign);
129 
130  void DeletePrimaryHits() { fDelPrim = kTRUE; }
131  Int_t RecreateHitArrays(std::map<int, std::vector<int>> &det_to_hitids);
132  std::map<int, bool> PrimaryCheck(Int_t detid, std::map<int, std::vector<int>> &det_to_hitids);
133 
134  private:
135  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits, fNofSciTHits, fNofGemHits;
136 
138  TClonesArray *fSttPointArray;
140  TClonesArray *fSttHitArray;
141 
143  TClonesArray *fMvdPixelHitArray;
145  TClonesArray *fMvdStripHitArray;
146 
148  TClonesArray *fSciTHitArray;
150  TClonesArray *fGemHitArray;
151 
152  TClonesArray *fTrackArray, *fTrackCandArray, *fTrkTrackArray, *fPrimaryTrackArray;
153 
154  TClonesArray *fTubeArray;
155 
156  PndGeoSttPar *fSttParameters; // CHECK added
157  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200], fSciTBranch[200], fGemBranch[200];
158 
159  PndSttMapCreator *fMapper;
160 
161  Int_t fEventCounter; // , fVerbose;
162 
163  PndTrkGemCombinatorial *fCombiFinder;
164 
165  PndTrkSttHitList *stthitlist;
166  PndTrkSdsHitList *mvdpixhitlist;
167  PndTrkSdsHitList *mvdstrhitlist;
168  PndTrkSciTHitList *scithitlist;
169  PndTrkGemHitList *gemhitlist;
170  Double_t fSttParalDistance, fSttToMvdStripDistance;
171 
172  double fDeltaThetaRad;
173  // TSpectrum2 *s;
174  PndTrkLegendreTransform *legendre;
175  Bool_t fDisplayOn, fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fUseSCIT, fUseGEM, fSecondary, fInitDone;
176  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
177  double fUmin, fUmax, fVmin, fVmax, fRmin, fRmax, fThetamin, fThetamax;
178  PndTrkHit *fRefHit;
179  Bool_t fDelPrim;
180  Int_t fNofPrimaries;
181 
182  PndTrkConformalTransform *conform;
183  PndTrkConformalHitList *fConformalHitList;
184  PndTrkTools *tools;
185 
186  std::vector<std::pair<double, double>> fFoundPeaks;
187  double fTime;
188  TStopwatch *fTimer;
189  PndTrkFitter *fFitter;
190 
191  PndTrkNeighboringMap *fHitMap;
192 
193  // display
194  TH2F *hxy, *hxz, *hzphi;
195  TCanvas *display;
196  TH2F *huv;
197  TH2F *fLineHisto;
198  PndTrkCluster *fCluster;
199  PndTrkCluster *fFinalCluster;
200  PndTrkCluster *fIndivCluster;
201  PndTrkCluster *fSkewCluster;
202  PndTrkCluster *fFinalSkewCluster;
203  PndTrkCluster *fIndivisibleHitList;
204 
205  PndTrkTrackList *fTrackList;
206 
207  ClassDef(PndTrkTrackFinder, 1);
208 };
209 
210 #endif
PndTrkCluster CleanUpSkewHitList(PndTrkCluster *skewhitlist)
PndTrkClusterList CreateFullClusterization()
virtual void Exec(Option_t *opt)
void DrawLegendreHisto()
Int_t RecreateHitArrays(std::map< int, std::vector< int >> &det_to_hitids)
void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2)
void DrawNeighboringsToHit(PndTrkHit *hit)
Bool_t AnalyticalParabolaFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fita, double &fitb, Double_t &fitc, Double_t &epsilon)
std::map< int, bool > PrimaryCheck(Int_t detid, std::map< int, std::vector< int >> &det_to_hitids)
void DrawConfHit(double x, double y, double r, int marker=2)
Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max)
void LightCluster(PndTrkCluster *cluster)
PndTrkHit * FindMvdReferenceHit()
virtual InitStatus Init()
int isec
Definition: f_Init.h:16
Bool_t MinuitFit(PndTrkCluster *cluster, double mstart, double qstart, double &fitm, double &fitq)
Bool_t MinuitFit2(PndTrkCluster *cluster, double xstart, double ystart, double rstart, double &xc, double &yc, double &R, double &sign)
PndTrkCluster CreateSkewHitList(PndTrkTrack *track)
void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R)
void FillLegendreHisto(PndTrkCluster *cluster)
Int_t CountTracksInCluster(PndTrkCluster *cluster)
void DrawZGeometry(double phimin=0, double phimax=360, double zmin=-43, double zmax=113)
void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp)
Int_t CountPossibleTracks()
void Apollonius(PndTrkCluster *cluster, std::vector< double > &X, std::vector< double > &Y, std::vector< double > &R)
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
void DrawGeometryConf(double x1, double x2, double y1, double y2)
void CircleBy3Points(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, double &X, double &Y, double &R)
PndTrkHit * FindReferenceHit()
PndTrkHit * FindSttReferenceHit(int isec=-1)
void ComputePlaneExtremities(PndTrkCluster *cluster)
void DrawHits(PndTrkHitList *hitlist)
void RePrepareLegendre(PndTrkCluster *cluster)
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
Int_t ClusterToConformal(PndTrkCluster *cluster)
PndTrkHit * FindMvdStripReferenceHit()
void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R)
void FromConformalToRealTrackParabola(double fita, double fitb, double fitc, double &x0, double &y0, double &R, double &epsilon)
PndTrkCluster * CreateClusterAroundTrack(PndTrkTrack *track)
int sign(T val)
Definition: PndCADef.h:49
Int_t FillConformalHitList(PndTrkCluster *cluster)
Bool_t AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq)
Int_t CountTracksInSkewSector(PndTrkCluster *cluster)
PndTrkTrack * LegendreFit(PndTrkCluster *cluster)
PndTrkHit * FindMvdPixelReferenceHit()