PandaRoot
PndTrkLegendreTask.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 #ifndef PNDTRKLEGENDRETASK_H
14 #define PNDTRKLEGENDRETASK_H
15 
17 // fairroot
18 #include "FairTask.h"
19 // pandaroot
20 #include "PndTrack.h"
21 #include "PndMCTrack.h"
22 // stt
23 #include "PndGeoSttPar.h"
24 #include "PndSttHit.h"
25 #include "PndSttMapCreator.h"
26 // tracking
27 #include "PndTrkSttHitList.h"
28 #include "PndTrkSdsHitList.h"
29 #include "PndTrkCluster.h"
30 #include "PndTrkClusterList.h"
31 #include "PndTrkTrack.h"
32 #include "PndTrkConformalHitList.h"
33 #include "PndTrkFitter.h"
34 
35 // ROOT
36 #include "TH2F.h"
37 #include "TCanvas.h"
38 
39 #define MAXNOFHITS 1000 // CHECK
40 
41 class TClonesArray;
42 class TObjectArray;
43 class TSpectrum2;
46 class PndTrkLegendreTask : public FairTask {
47 
48  public:
51  PndTrkLegendreTask(int verbose);
52 
55 
57  virtual InitStatus Init();
58 
60  virtual void Exec(Option_t *opt);
61 
62  void SetParContainers();
63 
64  void Initialize();
65  void Reset();
66 
67  Int_t FillConformalHitList();
68  void FillLegendreHisto(Int_t mode);
69  void FillLegendreHisto(PndTrkCluster *cluster);
70 
72  Bool_t IsSttAssociate(PndTrkHit *hit1, PndTrkHit *hit2);
73 
74  PndTrkCluster CreateClusterByConfDistance(double fitm, double fitq);
75  PndTrkCluster CreateClusterByRealDistance(double xc0, double yc0, double R0);
76  PndTrkCluster CreateClusterByMixedDistance(double fitm, double fitq);
77  PndTrkCluster CreateClusterByDistance(Int_t mode, double fitm, double fitq);
79 
80  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
82 
83  void RegisterTrack(PndTrkTrack *track);
84 
85  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
86 
93 
94  void SearchSecondaryTracks() { fSecondary = kTRUE; }
95 
96  Bool_t fDisplayOn;
97  TH2F *hxy, *hxz, *hzphi;
98  TCanvas *display;
99  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
100  void DrawGeometry();
101  void DrawHits(PndTrkHitList *hitlist);
102  void Refresh();
103  // conformal
104  TH2F *huv;
105  void RefreshConf();
106  void DrawGeometryConf(double x1, double y1, double x2, double y2);
107  void DrawConfHit(double x, double y, double r, int marker = 2);
108  void LightCluster(PndTrkCluster *cluster);
109  void DrawLegendreHisto();
110  // z
111  void RefreshZ();
112  void DrawZGeometry(int whichone = 1, double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
113  void DontUseMvdPix() { fUseMVDPix = kFALSE; }
114  void DontUseMvdStr() { fUseMVDStr = kFALSE; }
115  void DontUseStt() { fUseSTT = kFALSE; }
116 
117  Bool_t DoesRealHitBelong(PndTrkHit *hit, double x0, double y0, double R);
118  Bool_t DoesConfHitBelong(PndTrkConformalHit *hit, double fitm, double fitp);
119 
120  void RePrepareLegendre(PndTrkCluster *cluster);
121  void PrepareLegendre();
122  Int_t ApplyLegendre(double &theta_max, double &r_max);
123  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
124  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
125 
126  Bool_t ZPhiFit(int iter, PndTrkCluster *cluster, double &fitm, double &fitp);
127  PndTrkCluster *CleanupZPhiFit(PndTrkCluster *cluster, double fitm, double fitp);
128  double ComputeZRediduals(PndTrkCluster *cluster, double fitm, double fitp);
129  double CorrectZ(PndTrkCluster *cluster, double deltaz, double fitm, double fitp);
130 
131  private:
132  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits;
133 
135  TClonesArray *fSttPointArray;
137  TClonesArray *fSttHitArray;
138 
140  TClonesArray *fMvdPixelHitArray;
142  TClonesArray *fMvdStripHitArray;
143 
144  TClonesArray *fTrackArray, *fTrackCandArray;
145 
146  TClonesArray *fTubeArray;
147 
148  PndGeoSttPar *fSttParameters; // CHECK added
149  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
150 
151  PndSttMapCreator *fMapper;
152 
153  Int_t fEventCounter; // , fVerbose;
154 
155  PndTrkSttHitList *stthitlist;
156  PndTrkSdsHitList *mvdpixhitlist;
157  PndTrkSdsHitList *mvdstrhitlist;
158  Double_t fSttParalDistance, fSttToMvdStripDistance;
159 
160  double fDeltaThetaRad;
161  // TSpectrum2 *s;
162  PndTrkLegendreTransform *legendre;
163  Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary;
164 
165  Bool_t fInitDone;
166 
167  PndTrkConformalTransform *conform;
168  PndTrkConformalHitList *conformalhitlist;
169  PndTrkTools *tools;
170 
171  PndTrkHit *fRefHit;
172 
173  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
174 
175  std::vector<std::pair<double, double>> fFoundPeaks;
176  double fTime;
177  TStopwatch *fTimer;
178  PndTrkFitter *fFitter;
179  ClassDef(PndTrkLegendreTask, 1);
180 };
181 
182 #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)