PandaRoot
PndTrkTrackFinder.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 PNDTRKTRACKFINDER_H
14 #define PNDTRKTRACKFINDER_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 "PndTrkSciTHitList.h"
30 #include "PndTrkGemHitList.h"
31 #include "PndTrkCluster.h"
32 #include "PndTrkClusterList.h"
33 #include "PndTrkTrack.h"
34 #include "PndTrkTrackList.h"
35 #include "PndTrkConformalHitList.h"
36 #include "PndTrkSkewHitList.h"
37 #include "PndTrkFitter.h"
38 #include "PndTrkNeighboringMap.h"
39 #include "PndTrkGemCombinatorial.h"
40 
41 // ROOT
42 #include "TH2F.h"
43 #include "TCanvas.h"
44 #include <TStopwatch.h>
45 
46 #define MAXNOFHITS 1000 // CHECK
47 
48 class TClonesArray;
49 class TObjectArray;
52 class PndTrkTrackFinder : public FairTask {
53 
54  public:
57  PndTrkTrackFinder(int verbose);
58 
61 
63  virtual InitStatus Init();
64 
66  virtual void Exec(Option_t *opt);
67 
68  void SetParContainers();
69 
70  // void Apollonius(PndTrkCluster *cluster, double *X, double *Y, double *R);
71  void Apollonius(PndTrkCluster *cluster, std::vector<double> &X, std::vector<double> &Y, std::vector<double> &R);
72  void Apollonius(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, std::vector<double> &X, std::vector<double> &Y, std::vector<double> &R);
73  void CircleBy3Points(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, double &X, double &Y, double &R);
74 
75  void Initialize();
76  void Reset();
77 
78  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
79  void DrawGeometry();
80  void DrawHits(PndTrkHitList *hitlist);
81  void DrawLists();
82  void DrawNeighborings();
84  void Refresh();
85  void RefreshConf();
86  void DrawGeometryConf(double x1, double x2, double y1, double y2);
87  void DrawConfHit(double x, double y, double r, int marker = 2);
88 
89  void LightCluster(PndTrkCluster *cluster);
90  void DrawLegendreHisto();
91 
93 
94  Int_t FillConformalHitList(PndTrkCluster *cluster);
95  void FillLegendreHisto(PndTrkCluster *cluster);
96  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
103 
104  void RePrepareLegendre(PndTrkCluster *cluster);
105  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
106  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
107 
108  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
109  void FromConformalToRealTrackParabola(double fita, double fitb, double fitc, double &x0, double &y0, double &R, double &epsilon);
110  void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp);
111 
112  void SearchSecondaryTracks() { fSecondary = kTRUE; }
113 
115  // PndTrkClusterList CreateFullClusterization2();
116 
117  Int_t CountTracksInCluster(PndTrkCluster *cluster);
118  Int_t CountTracksInSkewSector(PndTrkCluster *cluster);
119  Int_t CountTracksInCluster(PndTrkCluster *cluster, Int_t where);
120  Int_t CountPossibleTracks();
121 
122  Int_t ClusterToConformal(PndTrkCluster *cluster);
125 
126  Bool_t AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq);
127  void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2);
128  Bool_t AnalyticalParabolaFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fita, double &fitb, Double_t &fitc, Double_t &epsilon);
129 
130  void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R);
131  void IntersectionFinder(PndTrkConformalHit *chit, double fitm, double fitp);
132 
133  void FillHitMap();
134 
137  void DrawZGeometry(double phimin = 0, double phimax = 360, double zmin = -43, double zmax = 113);
138 
139  Bool_t MinuitFit(PndTrkCluster *cluster, double mstart, double qstart, double &fitm, double &fitq);
140  Bool_t MinuitFit2(PndTrkCluster *cluster, double xstart, double ystart, double rstart, double &xc, double &yc, double &R, double &sign);
141 
142  void DeletePrimaryHits() { fDelPrim = kTRUE; }
143  Int_t RecreateHitArrays(std::map<int, std::vector<int>> &det_to_hitids);
144  std::map<int, bool> PrimaryCheck(Int_t detid, std::map<int, std::vector<int>> &det_to_hitids);
145 
146  private:
147  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits, fNofSciTHits, fNofGemHits;
148 
150  TClonesArray *fSttPointArray;
152  TClonesArray *fSttHitArray;
153 
155  TClonesArray *fMvdPixelHitArray;
157  TClonesArray *fMvdStripHitArray;
158 
160  TClonesArray *fSciTHitArray;
162  TClonesArray *fGemHitArray;
163 
164  TClonesArray *fTrackArray, *fTrackCandArray, *fTrkTrackArray, *fPrimaryTrackArray;
165 
166  TClonesArray *fTubeArray;
167 
168  PndGeoSttPar *fSttParameters; // CHECK added
169  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200], fSciTBranch[200], fGemBranch[200];
170 
171  PndSttMapCreator *fMapper;
172 
173  Int_t fEventCounter; // , fVerbose;
174 
175  PndTrkGemCombinatorial *fCombiFinder;
176 
177  PndTrkSttHitList *stthitlist;
178  PndTrkSdsHitList *mvdpixhitlist;
179  PndTrkSdsHitList *mvdstrhitlist;
180  PndTrkSciTHitList *scithitlist;
181  PndTrkGemHitList *gemhitlist;
182  Double_t fSttParalDistance, fSttToMvdStripDistance;
183 
184  double fDeltaThetaRad;
185  // TSpectrum2 *s;
186  PndTrkLegendreTransform *legendre;
187  Bool_t fDisplayOn, fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fUseSCIT, fUseGEM, fSecondary, fInitDone;
188  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
189  double fUmin, fUmax, fVmin, fVmax, fRmin, fRmax, fThetamin, fThetamax;
190  PndTrkHit *fRefHit;
191  Bool_t fDelPrim;
192  Int_t fNofPrimaries;
193 
194  PndTrkConformalTransform *conform;
195  PndTrkConformalHitList *fConformalHitList;
196  PndTrkTools *tools;
197 
198  std::vector<std::pair<double, double>> fFoundPeaks;
199  double fTime;
200  TStopwatch *fTimer;
201  PndTrkFitter *fFitter;
202 
203  PndTrkNeighboringMap *fHitMap;
204 
205  // display
206  TH2F *hxy, *hxz, *hzphi;
207  TCanvas *display;
208  TH2F *huv;
209  TH2F *fLineHisto;
210  PndTrkCluster *fCluster;
211  PndTrkCluster *fFinalCluster;
212  PndTrkCluster *fIndivCluster;
213  PndTrkCluster *fSkewCluster;
214  PndTrkCluster *fFinalSkewCluster;
215  PndTrkCluster *fIndivisibleHitList;
216 
217  PndTrkTrackList *fTrackList;
218 
219  ClassDef(PndTrkTrackFinder, 1);
220 };
221 
222 #endif
PndTrkCluster CleanUpSkewHitList(PndTrkCluster *skewhitlist)
PndTrkClusterList CreateFullClusterization()
virtual void Exec(Option_t *opt)
void DrawLegendreHisto()
Int_t RecreateHitArrays(std::map< int, std::vector< int >> &det_to_hitids)
void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2)
void DrawNeighboringsToHit(PndTrkHit *hit)
Bool_t AnalyticalParabolaFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fita, double &fitb, Double_t &fitc, Double_t &epsilon)
std::map< int, bool > PrimaryCheck(Int_t detid, std::map< int, std::vector< int >> &det_to_hitids)
void DrawConfHit(double x, double y, double r, int marker=2)
Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max)
void LightCluster(PndTrkCluster *cluster)
PndTrkHit * FindMvdReferenceHit()
virtual InitStatus Init()
int isec
Definition: f_Init.h:40
Bool_t MinuitFit(PndTrkCluster *cluster, double mstart, double qstart, double &fitm, double &fitq)
Bool_t MinuitFit2(PndTrkCluster *cluster, double xstart, double ystart, double rstart, double &xc, double &yc, double &R, double &sign)
PndTrkCluster CreateSkewHitList(PndTrkTrack *track)
void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R)
void FillLegendreHisto(PndTrkCluster *cluster)
Int_t CountTracksInCluster(PndTrkCluster *cluster)
void DrawZGeometry(double phimin=0, double phimax=360, double zmin=-43, double zmax=113)
void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp)
Int_t CountPossibleTracks()
void Apollonius(PndTrkCluster *cluster, std::vector< double > &X, std::vector< double > &Y, std::vector< double > &R)
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
void DrawGeometryConf(double x1, double x2, double y1, double y2)
void CircleBy3Points(PndTrkHit *hit1, PndTrkHit *hit2, PndTrkHit *hit3, double &X, double &Y, double &R)
PndTrkHit * FindReferenceHit()
PndTrkHit * FindSttReferenceHit(int isec=-1)
void ComputePlaneExtremities(PndTrkCluster *cluster)
void DrawHits(PndTrkHitList *hitlist)
void RePrepareLegendre(PndTrkCluster *cluster)
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
Int_t ClusterToConformal(PndTrkCluster *cluster)
PndTrkHit * FindMvdStripReferenceHit()
void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R)
void FromConformalToRealTrackParabola(double fita, double fitb, double fitc, double &x0, double &y0, double &R, double &epsilon)
PndTrkCluster * CreateClusterAroundTrack(PndTrkTrack *track)
int sign(T val)
Definition: PndCADef.h:61
Int_t FillConformalHitList(PndTrkCluster *cluster)
Bool_t AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq)
Int_t CountTracksInSkewSector(PndTrkCluster *cluster)
PndTrkTrack * LegendreFit(PndTrkCluster *cluster)
PndTrkHit * FindMvdPixelReferenceHit()