PandaRoot
PndTrkLegendreSecTask2.h
Go to the documentation of this file.
1 #ifndef PNDTRKLEGENDSECRETASK2_H
2 #define PNDTRKLEGENDSECRETASK2_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 "PndTrkCluster.h"
18 #include "PndTrkClusterList.h"
19 #include "PndTrkTrack.h"
20 #include "PndTrkConformalHitList.h"
21 #include "PndTrkFitter.h"
22 
23 // ROOT
24 #include "TH2F.h"
25 #include "TCanvas.h"
26 
27 #define MAXNOFHITS 1000 // CHECK
28 
29 class TClonesArray;
30 class TObjectArray;
31 class TSpectrum2;
34 class PndTrkLegendreSecTask2 : public FairTask {
35 
36  public:
39  PndTrkLegendreSecTask2(int verbose);
40 
43 
45  virtual InitStatus Init();
46 
48  virtual void Exec(Option_t *opt);
49 
50  void SetParContainers();
51 
52  void Initialize();
53  void Reset();
54 
55  Int_t FillConformalHitList(int isec = -1);
56  Int_t FillConformalHitList(PndTrkCluster *cluster);
57  void FillLegendreHisto(Int_t mode);
58  void FillLegendreHisto(PndTrkCluster *cluster);
59 
60  Int_t AddHitToClusterByDistance(PndTrkCluster *cluster, Int_t mode, double fitm, double fitp);
61  Bool_t CheckVicinity(PndTrkHit *hit, PndTrkCluster *cluster);
62  Bool_t CheckAssignability(std::vector<PndTrkHit *> hitlist);
63 
65  Bool_t IsSttAssociate(PndTrkHit *hit1, PndTrkHit *hit2);
66 
67  PndTrkCluster CreateClusterByConfDistance(double fitm, double fitq);
68  PndTrkCluster CreateClusterByRealDistance(double xc0, double yc0, double R0);
69  PndTrkCluster CreateClusterByMixedDistance(double fitm, double fitq);
70  PndTrkCluster CreateClusterByDistance(Int_t mode, double fitm, double fitq);
72 
73  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
75 
76  void RegisterTrack(PndTrkTrack *track);
77 
78  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
79 
85 
87 
89 
90  void SearchSecondaryTracks() { fSecondary = kTRUE; }
91 
92  Bool_t fDisplayOn;
93  TH2F *hxy, *hxz, *hzphi;
94  TCanvas *display;
95  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
96  void DrawGeometry();
97  void DrawHits(PndTrkHitList *hitlist);
98  void Refresh();
99  // conformal
100  TH2F *huv;
101  void RefreshConf();
102  void DrawGeometryConf(double x1, double y1, double x2, double y2);
103  void DrawConfHit(double x, double y, double r, int marker = 2);
104  void LightCluster(PndTrkCluster *cluster);
105  void DrawLegendreHisto();
106  // z
107  void RefreshZ();
108  void DrawZGeometry(int whichone = 1, double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
109  void DontUseMvdPix() { fUseMVDPix = kFALSE; }
110  void DontUseMvdStr() { fUseMVDStr = kFALSE; }
111  void DontUseStt() { fUseSTT = kFALSE; }
112 
113  Bool_t DoesRealHitBelong(PndTrkHit *hit, double x0, double y0, double R);
114  Bool_t DoesConfHitBelong(PndTrkConformalHit *hit, double fitm, double fitp);
115 
116  void RePrepareLegendre(PndTrkCluster *cluster);
117  void PrepareLegendre();
118  Int_t ApplyLegendre(double &theta_max, double &r_max);
119  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
120  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
121 
122  Bool_t ZPhiFit(int iter, PndTrkCluster *cluster, double &fitm, double &fitp);
123  PndTrkCluster *CleanupZPhiFit(PndTrkCluster *cluster, double fitm, double fitp);
124  double ComputeZRediduals(PndTrkCluster *cluster, double fitm, double fitp);
125  double CorrectZ(PndTrkCluster *cluster, double deltaz, double fitm, double fitp);
126 
127  private:
128  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits;
129 
131  TClonesArray *fSttPointArray;
133  TClonesArray *fSttHitArray;
134 
136  TClonesArray *fMvdPixelHitArray;
138  TClonesArray *fMvdStripHitArray;
139 
140  TClonesArray *fTrackArray, *fTrackCandArray;
141 
142  TClonesArray *fTubeArray;
143 
144  PndGeoSttPar *fSttParameters; // CHECK added
145  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
146 
147  PndSttMapCreator *fMapper;
148 
149  Int_t fEventCounter; // , fVerbose;
150 
151  PndTrkSttHitList *stthitlist;
152  PndTrkSdsHitList *mvdpixhitlist;
153  PndTrkSdsHitList *mvdstrhitlist;
154  Double_t fSttParalDistance, fSttToMvdStripDistance;
155 
156  double fDeltaThetaRad;
157  // TSpectrum2 *s;
158  PndTrkLegendreTransform *legendre;
159  Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary, fInitDone;
160 
161  PndTrkConformalTransform *conform;
162  PndTrkConformalHitList *conformalhitlist;
163  PndTrkTools *tools;
164 
165  PndTrkHit *fRefHit;
166 
167  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
168 
169  std::vector<std::pair<double, double>> fFoundPeaks;
170  double fTime;
171  TStopwatch *fTimer;
172  PndTrkFitter *fFitter;
173  ClassDef(PndTrkLegendreSecTask2, 1);
174 };
175 
176 #endif
PndTrkCluster CreateSkewHitList(PndTrkTrack *track)
PndTrkHit * FindSttReferenceHit(int isec=-1)
Int_t ApplyLegendre(double &theta_max, double &r_max)
void LightCluster(PndTrkCluster *cluster)
void RegisterTrack(PndTrkTrack *track)
void DrawGeometryConf(double x1, double y1, double x2, double y2)
Bool_t CheckAssignability(std::vector< PndTrkHit *> hitlist)
PndTrkHit * FindMvdPixelReferenceHit()
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
PndTrkHit * FindMvdStripReferenceHit()
PndTrkCluster CreateClusterByRealDistance(double xc0, double yc0, double R0)
virtual InitStatus Init()
void FillLegendreHisto(Int_t mode)
PndTrkCluster * CleanupZPhiFit(PndTrkCluster *cluster, double fitm, double fitp)
PndTrkCluster CreateClusterByDistance(Int_t mode, double fitm, double fitq)
void RePrepareLegendre(PndTrkCluster *cluster)
PndTrkHit * FindMvdReferenceHit()
void DrawHits(PndTrkHitList *hitlist)
int isec
Definition: f_Init.h:16
double CorrectZ(PndTrkCluster *cluster, double deltaz, double fitm, double fitp)
Bool_t CheckVicinity(PndTrkHit *hit, PndTrkCluster *cluster)
Int_t FillConformalHitList(int isec=-1)
Bool_t DoesConfHitBelong(PndTrkConformalHit *hit, double fitm, double fitp)
PndTrkCluster CleanUpSkewHitList(PndTrkCluster *skewhitlist)
virtual void Exec(Option_t *opt)
PndTrkCluster CreateClusterByConfDistance(double fitm, double fitq)
Int_t AddHitToClusterByDistance(PndTrkCluster *cluster, Int_t mode, double fitm, double fitp)
void DrawConfHit(double x, double y, double r, int marker=2)
PndTrkCluster Cleanup(PndTrkCluster cluster)
PndTrkHit * FindReferenceHit()
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
Bool_t DoesRealHitBelong(PndTrkHit *hit, double x0, double y0, double R)
Bool_t ZPhiFit(int iter, PndTrkCluster *cluster, double &fitm, double &fitp)
void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R)
double ComputeZRediduals(PndTrkCluster *cluster, double fitm, double fitp)
PndTrkCluster CreateSttCluster(PndTrkHit *firsthit)
PndTrkCluster CreateClusterByMixedDistance(double fitm, double fitq)
void DrawZGeometry(int whichone=1, double phimin=0, double phimax=360, double zmin=-43, double zmax=113)
Bool_t IsSttAssociate(PndTrkHit *hit1, PndTrkHit *hit2)