PandaRoot
PndTrkLegendreSecTask2.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 PNDTRKLEGENDSECRETASK2_H
14 #define PNDTRKLEGENDSECRETASK2_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 PndTrkLegendreSecTask2 : public FairTask {
47 
48  public:
51  PndTrkLegendreSecTask2(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(int isec = -1);
68  Int_t FillConformalHitList(PndTrkCluster *cluster);
69  void FillLegendreHisto(Int_t mode);
70  void FillLegendreHisto(PndTrkCluster *cluster);
71 
72  Int_t AddHitToClusterByDistance(PndTrkCluster *cluster, Int_t mode, double fitm, double fitp);
73  Bool_t CheckVicinity(PndTrkHit *hit, PndTrkCluster *cluster);
74  Bool_t CheckAssignability(std::vector<PndTrkHit *> hitlist);
75 
77  Bool_t IsSttAssociate(PndTrkHit *hit1, PndTrkHit *hit2);
78 
79  PndTrkCluster CreateClusterByConfDistance(double fitm, double fitq);
80  PndTrkCluster CreateClusterByRealDistance(double xc0, double yc0, double R0);
81  PndTrkCluster CreateClusterByMixedDistance(double fitm, double fitq);
82  PndTrkCluster CreateClusterByDistance(Int_t mode, double fitm, double fitq);
84 
85  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
87 
88  void RegisterTrack(PndTrkTrack *track);
89 
90  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
91 
97 
99 
101 
102  void SearchSecondaryTracks() { fSecondary = kTRUE; }
103 
104  Bool_t fDisplayOn;
105  TH2F *hxy, *hxz, *hzphi;
106  TCanvas *display;
107  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
108  void DrawGeometry();
109  void DrawHits(PndTrkHitList *hitlist);
110  void Refresh();
111  // conformal
112  TH2F *huv;
113  void RefreshConf();
114  void DrawGeometryConf(double x1, double y1, double x2, double y2);
115  void DrawConfHit(double x, double y, double r, int marker = 2);
116  void LightCluster(PndTrkCluster *cluster);
117  void DrawLegendreHisto();
118  // z
119  void RefreshZ();
120  void DrawZGeometry(int whichone = 1, double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
121  void DontUseMvdPix() { fUseMVDPix = kFALSE; }
122  void DontUseMvdStr() { fUseMVDStr = kFALSE; }
123  void DontUseStt() { fUseSTT = kFALSE; }
124 
125  Bool_t DoesRealHitBelong(PndTrkHit *hit, double x0, double y0, double R);
126  Bool_t DoesConfHitBelong(PndTrkConformalHit *hit, double fitm, double fitp);
127 
128  void RePrepareLegendre(PndTrkCluster *cluster);
129  void PrepareLegendre();
130  Int_t ApplyLegendre(double &theta_max, double &r_max);
131  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
132  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
133 
134  Bool_t ZPhiFit(int iter, PndTrkCluster *cluster, double &fitm, double &fitp);
135  PndTrkCluster *CleanupZPhiFit(PndTrkCluster *cluster, double fitm, double fitp);
136  double ComputeZRediduals(PndTrkCluster *cluster, double fitm, double fitp);
137  double CorrectZ(PndTrkCluster *cluster, double deltaz, double fitm, double fitp);
138 
139  private:
140  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits;
141 
143  TClonesArray *fSttPointArray;
145  TClonesArray *fSttHitArray;
146 
148  TClonesArray *fMvdPixelHitArray;
150  TClonesArray *fMvdStripHitArray;
151 
152  TClonesArray *fTrackArray, *fTrackCandArray;
153 
154  TClonesArray *fTubeArray;
155 
156  PndGeoSttPar *fSttParameters; // CHECK added
157  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
158 
159  PndSttMapCreator *fMapper;
160 
161  Int_t fEventCounter; // , fVerbose;
162 
163  PndTrkSttHitList *stthitlist;
164  PndTrkSdsHitList *mvdpixhitlist;
165  PndTrkSdsHitList *mvdstrhitlist;
166  Double_t fSttParalDistance, fSttToMvdStripDistance;
167 
168  double fDeltaThetaRad;
169  // TSpectrum2 *s;
170  PndTrkLegendreTransform *legendre;
171  Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary, fInitDone;
172 
173  PndTrkConformalTransform *conform;
174  PndTrkConformalHitList *conformalhitlist;
175  PndTrkTools *tools;
176 
177  PndTrkHit *fRefHit;
178 
179  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
180 
181  std::vector<std::pair<double, double>> fFoundPeaks;
182  double fTime;
183  TStopwatch *fTimer;
184  PndTrkFitter *fFitter;
185  ClassDef(PndTrkLegendreSecTask2, 1);
186 };
187 
188 #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:40
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)