FairRoot/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 
33 
34 #define MAXNOFHITS 1000 // CHECK
35 
36 class TClonesArray;
37 class TObjectArray;
40 class PndTrkTrackFinder : public FairTask {
41 
42  public:
43 
47 
48 
51 
52 
54  virtual InitStatus Init();
55 
56 
58  virtual void Exec(Option_t* opt);
59 
60  void SetParContainers();
61 
62  // void Apollonius(PndTrkCluster *cluster, double *X, double *Y, double *R);
63  void Apollonius(PndTrkCluster *cluster, std::vector< double > &X, std::vector< double > &Y, std::vector< double > &R);
64  void Apollonius(PndTrkHit* hit1, PndTrkHit * hit2, PndTrkHit * hit3, std::vector< double > &X, std::vector< double > &Y, std::vector< double > &R);
65  void CircleBy3Points(PndTrkHit* hit1, PndTrkHit * hit2, PndTrkHit * hit3, double &X, double &Y, double &R);
66 
67  void Initialize();
68  void Reset();
69 
70  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
71  void DrawGeometry();
72  void DrawHits(PndTrkHitList *hitlist);
73  void DrawLists();
74  void DrawNeighborings();
76  void Refresh();
77  void RefreshConf();
78  void DrawGeometryConf(double x1, double x2, double y1, double y2);
79  void DrawConfHit(double x, double y, double r, int marker = 2);
80 
81  void LightCluster(PndTrkCluster *cluster);
82  void DrawLegendreHisto();
83 
85 
86  Int_t FillConformalHitList(PndTrkCluster *cluster);
87  void FillLegendreHisto(PndTrkCluster *cluster);
88  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
95 
96 
97  void RePrepareLegendre(PndTrkCluster *cluster);
98  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
99  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
100 
101  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
102  void FromConformalToRealTrackParabola(double fita, double fitb, double fitc, double &x0, double &y0, double &R, double &epsilon);
103  void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp);
104 
105  void SearchSecondaryTracks() { fSecondary = kTRUE; }
106 
108  // PndTrkClusterList CreateFullClusterization2();
109 
110  Int_t CountTracksInCluster(PndTrkCluster *cluster);
111  Int_t CountTracksInSkewSector(PndTrkCluster *cluster);
112  Int_t CountTracksInCluster(PndTrkCluster *cluster, Int_t where);
113  Int_t CountPossibleTracks();
114 
115  Int_t ClusterToConformal(PndTrkCluster *cluster);
118 
119  Bool_t AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq);
120  void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2);
121  Bool_t AnalyticalParabolaFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fita, double&fitb, Double_t &fitc, Double_t &epsilon);
122 
123  void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R);
124  void IntersectionFinder(PndTrkConformalHit *chit, double fitm, double fitp);
125 
126  void FillHitMap();
127 
130  void DrawZGeometry(double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
131 
132 
133  Bool_t MinuitFit(PndTrkCluster *cluster, double mstart, double qstart, double &fitm, double&fitq);
134  Bool_t MinuitFit2(PndTrkCluster *cluster, double xstart, double ystart, double rstart, double &xc, double&yc, double &R, double &sign);
135 
136  void DeletePrimaryHits() { fDelPrim = kTRUE; }
137  Int_t RecreateHitArrays( std::map< int, std::vector< int > > &det_to_hitids);
138  std::map< int, bool > PrimaryCheck(Int_t detid, std::map< int, std::vector< int > > &det_to_hitids );
139 
140 
141  private:
142 
143 
145 
147  TClonesArray* fSttPointArray;
149  TClonesArray* fSttHitArray;
150 
151 
153  TClonesArray* fMvdPixelHitArray;
155  TClonesArray* fMvdStripHitArray;
156 
158  TClonesArray* fSciTHitArray;
160  TClonesArray* fGemHitArray;
161 
163 
164  TClonesArray* fTubeArray;
165 
166 
167  PndGeoSttPar *fSttParameters; // CHECK added
168  char fSttBranch[200],
169  fMvdPixelBranch[200],
170  fMvdStripBranch[200],
171  fSciTBranch[200],
172  fGemBranch[200];
173 
175 
176  Int_t fEventCounter; // , fVerbose;
177 
179 
186 
187 
189  // TSpectrum2 *s;
197 
198 
199 
203 
204 
205 
206  std::vector< std::pair<double, double> > fFoundPeaks;
207  double fTime;
208  TStopwatch *fTimer;
210 
212 
213  // display
214  TH2F *hxy, *hxz, *hzphi;
215  TCanvas *display;
216  TH2F *huv;
217  TH2F *fLineHisto;
224 
226 
228 
229 };
230 
231 #endif
Double_t x0
Definition: checkhelixhit.C:70
PndTrkCluster CleanUpSkewHitList(PndTrkCluster *skewhitlist)
PndTrkClusterList CreateFullClusterization()
PndTrkCluster * fIndivCluster
PndTrkConformalTransform * conform
TClonesArray * fMvdStripHitArray
PndTrkSttHitList * stthitlist
double r
Definition: RiemannTest.C:14
TClonesArray * fTubeArray
TClonesArray * fPrimaryTrackArray
PndTrkHit * FindReferenceHit()
PndTransMap * map
Definition: sim_emc_apd.C:99
void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2)
#define verbose
void DrawNeighboringsToHit(PndTrkHit *hit)
Double_t fMvdPix_RealDistLimit
PndTrkCluster * fIndivisibleHitList
Bool_t AnalyticalParabolaFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fita, double &fitb, Double_t &fitc, Double_t &epsilon)
PndTrkHit * FindMvdReferenceHit()
TClonesArray * fMvdPixelHitArray
PndTrkTrackList * fTrackList
PndTrkGemHitList * gemhitlist
PndTrkConformalHitList * fConformalHitList
PndTrkCluster * fFinalCluster
void DrawConfHit(double x, double y, double r, int marker=2)
double Y
Definition: anaLmdDigi.C:68
Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max)
PndTrkCluster * fCluster
void LightCluster(PndTrkCluster *cluster)
PndTrkCluster * CreateClusterAroundTrack(PndTrkTrack *track)
int isec
Definition: f_Init.h:19
PndTrkSdsHitList * mvdpixhitlist
virtual InitStatus Init()
Bool_t MinuitFit(PndTrkCluster *cluster, double mstart, double qstart, double &fitm, double &fitq)
Int_t mode
Definition: autocutx.C:47
Bool_t MinuitFit2(PndTrkCluster *cluster, double xstart, double ystart, double rstart, double &xc, double &yc, double &R, double &sign)
PndTrkCluster CreateSkewHitList(PndTrkTrack *track)
TClonesArray * fTrackCandArray
Int_t RecreateHitArrays(std::map< int, std::vector< int > > &det_to_hitids)
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)
PndTrkSciTHitList * scithitlist
PndGeoSttPar * fSttParameters
Double_t
PndTrkHit * FindMvdPixelReferenceHit()
virtual void Exec(Option_t *opt)
Double_t y0
Definition: checkhelixhit.C:71
TClonesArray * fTrackArray
void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp)
void Apollonius(PndTrkCluster *cluster, std::vector< double > &X, std::vector< double > &Y, std::vector< double > &R)
PndMCTrack * track
Definition: anaLmdCluster.C:89
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
void DrawGeometryConf(double x1, double x2, double y1, double y2)
PndTrkLegendreTransform * legendre
void CircleBy3Points(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, double &X, double &Y, double &R)
TClonesArray * fGemHitArray
PndTrkNeighboringMap * fHitMap
std::map< int, bool > PrimaryCheck(Int_t detid, std::map< int, std::vector< int > > &det_to_hitids)
void ComputePlaneExtremities(PndTrkCluster *cluster)
PndTrkCluster * fSkewCluster
PndTrkHit * FindSttReferenceHit(int isec=-1)
PndTrkFitter * fFitter
void DrawHits(PndTrkHitList *hitlist)
void RePrepareLegendre(PndTrkCluster *cluster)
Double_t fSttToMvdStripDistance
ClassDef(PndTrkTrackFinder, 1)
double X
Definition: anaLmdDigi.C:68
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
Int_t ClusterToConformal(PndTrkCluster *cluster)
PndTrkCluster * fFinalSkewCluster
TClonesArray * fSciTHitArray
PndTrkSdsHitList * mvdstrhitlist
Double_t x
PndTrkTrack * LegendreFit(PndTrkCluster *cluster)
std::vector< std::pair< double, double > > fFoundPeaks
Double_t fMvdPix_ConfDistLimit
TClonesArray * fSttPointArray
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)
PndSttMapCreator * fMapper
int sign(T val)
Definition: PndCADef.h:48
PndSdsMCPoint * hit
Definition: anasim.C:70
Double_t y
TClonesArray * fSttHitArray
Int_t FillConformalHitList(PndTrkCluster *cluster)
Double_t fMvdStr_RealDistLimit
TClonesArray * fTrkTrackArray
PndTrkGemCombinatorial * fCombiFinder
Double_t fMvdStr_ConfDistLimit
PndTrkHit * FindMvdStripReferenceHit()
Bool_t AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq)
Double_t R
Definition: checkhelixhit.C:61
Int_t CountTracksInSkewSector(PndTrkCluster *cluster)