PandaRoot
PndTrkCombiLegendreTask.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 PNDTRKCOMBILEGENDRETASK_H
14 #define PNDTRKCOMBILEGENDRETASK_H
15 
18 // fairroot
19 #include "FairTask.h"
20 // pandaroot
21 #include "PndTrack.h"
22 #include "PndMCTrack.h"
23 // stt
24 #include "PndGeoSttPar.h"
25 #include "PndSttHit.h"
26 #include "PndSttMapCreator.h"
27 // tracking
28 #include "PndTrkSttHitList.h"
29 #include "PndTrkSdsHitList.h"
30 #include "PndTrkCluster.h"
31 #include "PndTrkClusterList.h"
32 #include "PndTrkTrack.h"
33 #include "PndTrkConformalHitList.h"
34 #include "PndTrkFitter.h"
35 #include "PndTrkNeighboringMap.h"
36 
37 // ROOT
38 #include "TH2F.h"
39 #include "TCanvas.h"
40 
41 #define MAXNOFHITS 1000 // CHECK
42 
43 class TClonesArray;
44 class TObjectArray;
48 class PndTrkCombiLegendreTask : public FairTask {
49 
50  public:
53  PndTrkCombiLegendreTask(int verbose);
54 
57 
59  virtual InitStatus Init();
60 
62  virtual void Exec(Option_t *opt);
63 
64  void SetParContainers();
65 
66  void Initialize();
67  void Reset();
68 
69  inline void SwitchOnDisplay() { fDisplayOn = kTRUE; }
70  inline void SwitchOnSeeMC() { fSeeMC = kTRUE; }
71  void DrawGeometry(int cpad = 1);
72  void DrawSttGeometry();
73  void DrawHits(PndTrkHitList *hitlist);
74  void DrawLists();
75  void DrawNeighborings();
77  void Refresh();
78  void RefreshConf();
79  void DrawGeometryConf(double x1, double x2, double y1, double y2);
80  void DrawConfHit(double x, double y, double r, int marker = 2);
81 
82  void LightCluster(PndTrkCluster *cluster);
83  void DrawLegendreHisto();
84 
86 
87  Int_t FillConformalHitList(PndTrkCluster *cluster);
88  void FillLegendreHisto(PndTrkCluster *cluster);
89  void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2]);
95  PndTrkHit *FindReferenceHit(PndTrkCluster *cluster, bool keeprefhit);
96 
97  void RePrepareLegendre(PndTrkCluster *cluster);
98  /* void PrepareLegendre(); */
99  /* Int_t ApplyLegendre(double &theta_max, double &r_max); */
100  Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max);
101  Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max);
102 
103  void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R);
104  void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp);
105 
106  void SearchSecondaryTracks() { fSecondary = kTRUE; }
107 
110 
111  Int_t CountTracksInCluster(PndTrkCluster *cluster, int *noftracksinlayer);
112  Int_t CountTracksInSkewSector(PndTrkCluster *cluster, int *noftracksinlayer);
113  Int_t CountTracksInCluster(PndTrkCluster *cluster, Int_t where, int *noftracksinlayer);
114 
115  Int_t ClusterToConformal(PndTrkCluster *cluster, bool samerefhit);
121 
122  Bool_t DoesBelong(PndTrkHit *hit, double xc, double yc, double R);
123 
124  void AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq);
125  void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2);
126  void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R);
127  void IntersectionFinder(PndTrkConformalHit *chit, double fitm, double fitp);
128  Double_t ComputePerpendicularChi2(PndTrkCluster *cluster, double fitm, double fitp);
129 
130  void FillHitMap();
131 
132  void FillPeakCouplesHisto(PndTrkCluster *cluster);
134 
136 
137  void CleanTrack(PndTrkTrack *track);
138 
139  private:
140  Int_t fNofMvdPixHits, fNofMvdStrHits, fNofSttHits, fNofTriplets, fNofHits;
141 
143  TClonesArray *fSttPointArray;
145  TClonesArray *fSttHitArray;
146 
148  TClonesArray *fMvdPointArray;
150  TClonesArray *fMvdPixelHitArray;
152  TClonesArray *fMvdStripHitArray;
153 
154  TClonesArray *fTrackArray, *fTrackCandArray;
155 
156  TClonesArray *fTubeArray;
157 
158  PndGeoSttPar *fSttParameters; // CHECK added
159  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
160 
161  PndSttMapCreator *fMapper;
162 
163  Int_t fEventCounter; // , fVerbose;
164 
165  PndTrkSttHitList *stthitlist;
166  PndTrkSdsHitList *mvdpixhitlist;
167  PndTrkSdsHitList *mvdstrhitlist;
168  Double_t fSttParalDistance, fSttToMvdStripDistance;
169 
170  double fDeltaThetaRad;
171  // TSpectrum2 *s;
172  PndTrkLegendreTransform *legendre;
173  PndTrkCombiLegendreTransform *legendrecombi;
174  Bool_t fPersistence, fUseMVDPix, fUseMVDStr, fUseSTT, fSecondary, fInitDone;
175  Int_t fRecoverIteration;
176 
177  PndTrkConformalTransform *conform;
178  PndTrkConformalHitList *conformalhitlist;
179  PndTrkTools *tools;
180 
181  PndTrkHit *fRefHit;
182 
183  Double_t fMvdPix_RealDistLimit, fMvdStr_RealDistLimit, fStt_RealDistLimit, fMvdPix_ConfDistLimit, fMvdStr_ConfDistLimit, fStt_ConfDistLimit;
184 
185  std::vector<std::pair<double, double>> fFoundPeaks;
186  double fTime;
187  TStopwatch *fTimer;
188  PndTrkFitter *fFitter;
189 
190  PndTrkNeighboringMap *fHitMap;
191  double fUmin, fUmax, fVmin, fVmax, fRmin, fRmax, fThetamin, fThetamax;
192 
193  // display
194  Bool_t fDisplayOn;
195  Bool_t fSeeMC;
196  TH2F *hxy, *hxz, *hzphi;
197  TCanvas *display;
198  TH2F *huv;
199 
200  ClassDef(PndTrkCombiLegendreTask, 1);
201 };
202 
203 #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:40
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()