PandaRoot
PndTrkLegendreTask.h
Go to the documentation of this file.
1 #ifndef PNDTRKLEGENDRETASK_H
2 #define PNDTRKLEGENDRETASK_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 PndTrkLegendreTask : public FairTask {
35 
36  public:
39  PndTrkLegendreTask(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();
56  void FillLegendreHisto(Int_t mode);
57  void FillLegendreHisto(PndTrkCluster *cluster);
58 
60  Bool_t IsSttAssociate(PndTrkHit *hit1, PndTrkHit *hit2);
61 
62  PndTrkCluster CreateClusterByConfDistance(double fitm, double fitq);
63  PndTrkCluster CreateClusterByRealDistance(double xc0, double yc0, double R0);
64  PndTrkCluster CreateClusterByMixedDistance(double fitm, double fitq);
65  PndTrkCluster CreateClusterByDistance(Int_t mode, double fitm, double fitq);
67 
68  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
70 
71  void RegisterTrack(PndTrkTrack *track);
72 
73  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
74 
81 
82  void SearchSecondaryTracks() { fSecondary = kTRUE; }
83 
84  Bool_t fDisplayOn;
85  TH2F *hxy, *hxz, *hzphi;
86  TCanvas *display;
87  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
88  void DrawGeometry();
89  void DrawHits(PndTrkHitList *hitlist);
90  void Refresh();
91  // conformal
92  TH2F *huv;
93  void RefreshConf();
94  void DrawGeometryConf(double x1, double y1, double x2, double y2);
95  void DrawConfHit(double x, double y, double r, int marker = 2);
96  void LightCluster(PndTrkCluster *cluster);
97  void DrawLegendreHisto();
98  // z
99  void RefreshZ();
100  void DrawZGeometry(int whichone = 1, double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
101  void DontUseMvdPix() { fUseMVDPix = kFALSE; }
102  void DontUseMvdStr() { fUseMVDStr = kFALSE; }
103  void DontUseStt() { fUseSTT = kFALSE; }
104 
105  Bool_t DoesRealHitBelong(PndTrkHit *hit, double x0, double y0, double R);
106  Bool_t DoesConfHitBelong(PndTrkConformalHit *hit, double fitm, double fitp);
107 
108  void RePrepareLegendre(PndTrkCluster *cluster);
109  void PrepareLegendre();
110  Int_t ApplyLegendre(double &theta_max, double &r_max);
111  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
112  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
113 
114  Bool_t ZPhiFit(int iter, PndTrkCluster *cluster, double &fitm, double &fitp);
115  PndTrkCluster *CleanupZPhiFit(PndTrkCluster *cluster, double fitm, double fitp);
116  double ComputeZRediduals(PndTrkCluster *cluster, double fitm, double fitp);
117  double CorrectZ(PndTrkCluster *cluster, double deltaz, double fitm, double fitp);
118 
119  private:
120  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits;
121 
123  TClonesArray *fSttPointArray;
125  TClonesArray *fSttHitArray;
126 
128  TClonesArray *fMvdPixelHitArray;
130  TClonesArray *fMvdStripHitArray;
131 
132  TClonesArray *fTrackArray, *fTrackCandArray;
133 
134  TClonesArray *fTubeArray;
135 
136  PndGeoSttPar *fSttParameters; // CHECK added
137  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
138 
139  PndSttMapCreator *fMapper;
140 
141  Int_t fEventCounter; // , fVerbose;
142 
143  PndTrkSttHitList *stthitlist;
144  PndTrkSdsHitList *mvdpixhitlist;
145  PndTrkSdsHitList *mvdstrhitlist;
146  Double_t fSttParalDistance, fSttToMvdStripDistance;
147 
148  double fDeltaThetaRad;
149  // TSpectrum2 *s;
150  PndTrkLegendreTransform *legendre;
151  Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary;
152 
153  Bool_t fInitDone;
154 
155  PndTrkConformalTransform *conform;
156  PndTrkConformalHitList *conformalhitlist;
157  PndTrkTools *tools;
158 
159  PndTrkHit *fRefHit;
160 
161  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
162 
163  std::vector<std::pair<double, double>> fFoundPeaks;
164  double fTime;
165  TStopwatch *fTimer;
166  PndTrkFitter *fFitter;
167  ClassDef(PndTrkLegendreTask, 1);
168 };
169 
170 #endif
PndTrkCluster Cleanup(PndTrkCluster cluster)
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
Bool_t IsSttAssociate(PndTrkHit *hit1, PndTrkHit *hit2)
void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R)
PndTrkHit * FindReferenceHit()
void DrawConfHit(double x, double y, double r, int marker=2)
double ComputeZRediduals(PndTrkCluster *cluster, double fitm, double fitp)
PndTrkHit * FindMvdReferenceHit()
void FillLegendreHisto(Int_t mode)
PndTrkCluster CreateClusterByMixedDistance(double fitm, double fitq)
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
void RePrepareLegendre(PndTrkCluster *cluster)
void DrawZGeometry(int whichone=1, double phimin=0, double phimax=360, double zmin=-43, double zmax=113)
Int_t FillConformalHitList()
void DrawGeometryConf(double x1, double y1, double x2, double y2)
Bool_t DoesConfHitBelong(PndTrkConformalHit *hit, double fitm, double fitp)
virtual void Exec(Option_t *opt)
Bool_t ZPhiFit(int iter, PndTrkCluster *cluster, double &fitm, double &fitp)
PndTrkCluster * CleanupZPhiFit(PndTrkCluster *cluster, double fitm, double fitp)
PndTrkCluster CreateSkewHitList(PndTrkTrack *track)
PndTrkHit * FindMvdPixelReferenceHit()
void RegisterTrack(PndTrkTrack *track)
PndTrkCluster CreateClusterByConfDistance(double fitm, double fitq)
PndTrkHit * FindSttReferenceHit()
Int_t ApplyLegendre(double &theta_max, double &r_max)
void LightCluster(PndTrkCluster *cluster)
PndTrkHit * FindMvdStripReferenceHit()
double CorrectZ(PndTrkCluster *cluster, double deltaz, double fitm, double fitp)
PndTrkCluster CreateClusterByRealDistance(double xc0, double yc0, double R0)
PndTrkCluster CreateClusterByDistance(Int_t mode, double fitm, double fitq)
Bool_t DoesRealHitBelong(PndTrkHit *hit, double x0, double y0, double R)
virtual InitStatus Init()
void DrawHits(PndTrkHitList *hitlist)
PndTrkCluster CreateSttCluster(PndTrkHit *firsthit)
PndTrkCluster CleanUpSkewHitList(PndTrkCluster *skewhitlist)