PandaRoot
PndTrkCombiLegendreTask.h
Go to the documentation of this file.
1 #ifndef PNDTRKCOMBILEGENDRETASK_H
2 #define PNDTRKCOMBILEGENDRETASK_H
3 
6 // fairroot
7 #include "FairTask.h"
8 // pandaroot
9 #include "PndTrack.h"
10 #include "PndMCTrack.h"
11 // stt
12 #include "PndGeoSttPar.h"
13 #include "PndSttHit.h"
14 #include "PndSttMapCreator.h"
15 // tracking
16 #include "PndTrkSttHitList.h"
17 #include "PndTrkSdsHitList.h"
18 #include "PndTrkCluster.h"
19 #include "PndTrkClusterList.h"
20 #include "PndTrkTrack.h"
21 #include "PndTrkConformalHitList.h"
22 #include "PndTrkFitter.h"
23 #include "PndTrkNeighboringMap.h"
24 
25 // ROOT
26 #include "TH2F.h"
27 #include "TCanvas.h"
28 
29 #define MAXNOFHITS 1000 // CHECK
30 
31 class TClonesArray;
32 class TObjectArray;
36 class PndTrkCombiLegendreTask : public FairTask {
37 
38  public:
41  PndTrkCombiLegendreTask(int verbose);
42 
45 
47  virtual InitStatus Init();
48 
50  virtual void Exec(Option_t *opt);
51 
52  void SetParContainers();
53 
54  void Initialize();
55  void Reset();
56 
57  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
58  inline void SwitchOnSeeMC() { fSeeMC = kTRUE; }
59  void DrawGeometry(int cpad = 1);
60  void DrawSttGeometry();
61  void DrawHits(PndTrkHitList *hitlist);
62  void DrawLists();
63  void DrawNeighborings();
65  void Refresh();
66  void RefreshConf();
67  void DrawGeometryConf(double x1, double x2, double y1, double y2);
68  void DrawConfHit(double x, double y, double r, int marker = 2);
69 
70  void LightCluster(PndTrkCluster *cluster);
71  void DrawLegendreHisto();
72 
74 
75  Int_t FillConformalHitList(PndTrkCluster *cluster);
76  void FillLegendreHisto(PndTrkCluster *cluster);
77  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
83  PndTrkHit *FindReferenceHit(PndTrkCluster *cluster, bool keeprefhit);
84 
85  void RePrepareLegendre(PndTrkCluster *cluster);
86  /* void PrepareLegendre(); */
87  /* Int_t ApplyLegendre(double &theta_max, double &r_max); */
88  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
89  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
90 
91  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
92  void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp);
93 
94  void SearchSecondaryTracks() { fSecondary = kTRUE; }
95 
98 
99  Int_t CountTracksInCluster(PndTrkCluster *cluster, int *noftracksinlayer);
100  Int_t CountTracksInSkewSector(PndTrkCluster *cluster, int *noftracksinlayer);
101  Int_t CountTracksInCluster(PndTrkCluster *cluster, Int_t where, int *noftracksinlayer);
102 
103  Int_t ClusterToConformal(PndTrkCluster *cluster, bool samerefhit);
109 
110  Bool_t DoesBelong(PndTrkHit *hit, double xc, double yc, double R);
111 
112  void AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq);
113  void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2);
114  void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R);
115  void IntersectionFinder(PndTrkConformalHit *chit, double fitm, double fitp);
116  Double_t ComputePerpendicularChi2(PndTrkCluster *cluster, double fitm, double fitp);
117 
118  void FillHitMap();
119 
120  void FillPeakCouplesHisto(PndTrkCluster *cluster);
122 
124 
125  void CleanTrack(PndTrkTrack *track);
126 
127  private:
128  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits;
129 
131  TClonesArray *fSttPointArray;
133  TClonesArray *fSttHitArray;
134 
136  TClonesArray *fMvdPointArray;
138  TClonesArray *fMvdPixelHitArray;
140  TClonesArray *fMvdStripHitArray;
141 
142  TClonesArray *fTrackArray, *fTrackCandArray;
143 
144  TClonesArray *fTubeArray;
145 
146  PndGeoSttPar *fSttParameters; // CHECK added
147  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
148 
149  PndSttMapCreator *fMapper;
150 
151  Int_t fEventCounter; // , fVerbose;
152 
153  PndTrkSttHitList *stthitlist;
154  PndTrkSdsHitList *mvdpixhitlist;
155  PndTrkSdsHitList *mvdstrhitlist;
156  Double_t fSttParalDistance, fSttToMvdStripDistance;
157 
158  double fDeltaThetaRad;
159  // TSpectrum2 *s;
160  PndTrkLegendreTransform *legendre;
161  PndTrkCombiLegendreTransform *legendrecombi;
162  Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary, fInitDone;
163  Int_t fRecoverIteration;
164 
165  PndTrkConformalTransform *conform;
166  PndTrkConformalHitList *conformalhitlist;
167  PndTrkTools *tools;
168 
169  PndTrkHit *fRefHit;
170 
171  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
172 
173  std::vector<std::pair<double, double>> fFoundPeaks;
174  double fTime;
175  TStopwatch *fTimer;
176  PndTrkFitter *fFitter;
177 
178  PndTrkNeighboringMap *fHitMap;
179  double fUmin, fUmax, fVmin, fVmax, fRmin, fRmax, fThetamin, fThetamax;
180 
181  // display
182  Bool_t fDisplayOn;
183  Bool_t fSeeMC;
184  TH2F *hxy, *hxz, *hzphi;
185  TCanvas *display;
186  TH2F *huv;
187 
188  ClassDef(PndTrkCombiLegendreTask, 1);
189 };
190 
191 #endif
void AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq)
PndTrkClusterList CreateFullClusterization2()
Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max)
void LightCluster(PndTrkCluster *cluster)
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
void CleanTrack(PndTrkTrack *track)
void FillPeakCouplesHisto(PndTrkCluster *cluster)
void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R)
void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2)
void ComputePlaneExtremities(PndTrkCluster *cluster)
PndTrkCluster * ComputeSkewedXYZ(PndTrkCluster *cluster)
PndTrkClusterList CreateFullClusterization()
void DrawGeometry(int cpad=1)
void FillPeakNeighCouplesHisto(PndTrkCluster *cluster)
PndTrkTrack * LegendreFit(PndTrkCluster *cluster)
PndTrkHit * FindReferenceHit()
int isec
Definition: f_Init.h:16
PndTrkCluster * CreateClusterAroundTrack3(PndTrkTrack *track)
virtual InitStatus Init()
PndTrkCluster * CreateClusterAroundTrack2(PndTrkTrack *track)
Int_t FillConformalHitList(PndTrkCluster *cluster)
PndTrkHit * FindSttReferenceHit(int isec=-1)
PndTrkHit * FindMvdReferenceHit()
void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp)
void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R)
Int_t CountTracksInSkewSector(PndTrkCluster *cluster, int *noftracksinlayer)
PndTrkHit * FindMvdStripReferenceHit()
void DrawHits(PndTrkHitList *hitlist)
PndTrkCluster * CreateClusterAroundTrack(PndTrkTrack *track)
void DrawConfHit(double x, double y, double r, int marker=2)
virtual void Exec(Option_t *opt)
void RePrepareLegendre(PndTrkCluster *cluster)
Bool_t DoesBelong(PndTrkHit *hit, double xc, double yc, double R)
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
void DrawGeometryConf(double x1, double x2, double y1, double y2)
void FillLegendreHisto(PndTrkCluster *cluster)
Int_t ClusterToConformal(PndTrkCluster *cluster, bool samerefhit)
void DrawNeighboringsToHit(PndTrkHit *hit)
Int_t CountTracksInCluster(PndTrkCluster *cluster, int *noftracksinlayer)
Double_t ComputePerpendicularChi2(PndTrkCluster *cluster, double fitm, double fitp)
PndTrkTrack * LegendreFitWithRecovering(PndTrkCluster *cluster)
PndTrkHit * FindMvdPixelReferenceHit()