PandaRoot
PndSttHelixTrackFitter.h
Go to the documentation of this file.
1 
10 #ifndef PNDSTTHELIXTRACKFITTER
11 #define PNDSTTHELIXTRACKFITTER 1
12 
13 #include "PndSttTrack.h"
14 //#include "PndTrackCand.h"
15 //#include "PndSttPoint.h"
16 //#include "FairTrackParam.h"
17 #include "PndSttTrackFitter.h"
18 
19 //#include "TH2F.h"
20 //#include "TCanvas.h"
21 #include "TList.h"
22 
23 #include <map>
24 
25 class FairTrackParam;
26 class PndSttHit;
27 // class PndSttTrackFitter;
28 class TCanvas;
29 class TH2F;
30 class TH1F;
31 
32 void fcnHelix(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
33 void fcnHelix2(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
34 
36  private:
37  Int_t fEventCounter;
38 
39  PndSttTrack *fTrack;
40  PndTrackCand *fTrackCand;
41  PndSttTrack currentTrack;
42 
43  TClonesArray *fHitArray;
44  TClonesArray *fPointArray;
45  TObjArray *ZPointsArray;
46 
47  TH2F *h1, *h2, *h3, *h4, *houg;
48  TH1F *hougcon;
49  TCanvas *eventCanvas, *eventDetails;
50  Bool_t rootoutput;
51  Int_t fVerbose;
52 
53  public:
55  PndSttHelixTrackFitter(Int_t verbose);
57  void Init();
58 
59  // xy plane ----------------------
60  // intersection finder
61  Bool_t IntersectionFinder(PndTrackCand *pTrackCand);
62  // fit
63  Int_t XYFit(PndTrackCand *pTrackCand, Int_t whatToFit);
64  Int_t XYFitThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit);
65  Int_t MinuitFit(PndTrackCand *pTrackCand, Int_t whatToFit);
66  Int_t SetUpFitVector(PndTrackCand *pTrackCand, TMatrixT<Double32_t> &fitvect);
67 
68  // z track length plane ----------
69  // zfinder
70  Bool_t ZFinder(PndTrackCand *pTrackCand, Int_t whatToFit);
71  Bool_t ZFinderThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit);
72 
73  // hough
74  void Hough(TVector3 *choice, Double_t Phi0, Double_t x0, Double_t y0, Double_t R);
75  TVector3 GetHoughResponse();
76  void HoughThroughOrigin(TVector3 *choice, Double_t Phi0, Double_t x0, Double_t y0, Double_t R);
78 
79  // zfit
80  Int_t ZFit(PndTrackCand *pTrackCand, Int_t whatToFit);
81  Int_t ZFitThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit);
82  TVector3 FindCorrectZ(TObjArray *choices, Double_t x_0, Double_t y_0, Double_t x0, Double_t y0, Double_t R);
83  Int_t DoFit(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo = 211);
84  // plain = with no constraint
85  Int_t DoFitPlain(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo = 211);
86  // through origin = force the track to pass in 0, 0, 0.
87  // Int_t DoFitThroughOrigin(PndTrackCand* pTrackCand, PndSttTrack* pTrack, Int_t pidHypo = 211);
88 
89  // charge reconstruction from xy fit
90  Int_t GetCharge(Double_t dCenter, Double_t phiCenter, Double_t radius);
91  void OrderHitsByR(std::map<Double_t, Int_t> &hitMap);
92  Double_t GetHitAngle(Int_t hitNo, Double_t dCenter, Double_t phiCenter, Double_t radius);
93 
94  PndSttHit *GetHitFromCollections(Int_t hitCounter) const;
96  virtual void AddHitCollection(TClonesArray *mHitArray) { fHitCollectionList.Add(mHitArray); }
97 
98  virtual void Extrapolate(PndSttTrack *track, Double_t r, FairTrackParam *param);
99 
100  // all: kTRUE = also z param; kFALSE = only xy param
101  // void SetParameters(PndSttTrack* pTrack, Bool_t all); /* commented out by JGM, 16/01/2010 */
102 
103  // marray reset
104  void ResetMArray();
105 
106  PndSttTrack *GetTrack() const { return fTrack; };
107  PndTrackCand *GetTrackCand() const { return fTrackCand; };
108  TClonesArray *GetHitArray() const { return fHitArray; };
109 
110  void SetConstraint(Int_t con) { fConstraint = con; };
111  Int_t GetConstraint() { return fConstraint; };
112 
113  Double_t refAngle;
114 
115  // 0 = no contraint, 1 = the track passes through (0, 0, 0)
116  Int_t fConstraint;
117 
118  TClonesArray *fTubeArray;
119  void SetTubeArray(TClonesArray *tubeArray) { fTubeArray = tubeArray; };
120 
121  Int_t fDisplayLevel;
122  void SetDisplayLevel(Int_t display = 2) { fDisplayLevel = display; };
123  void InitEventDisplay();
124  Bool_t RunEventDisplay(PndTrackCand *trackCand);
125  void FinishEventDisplay(PndSttTrack *track);
126 
128 };
129 
130 #endif
Int_t XYFit(PndTrackCand *pTrackCand, Int_t whatToFit)
Double_t GetHitAngle(Int_t hitNo, Double_t dCenter, Double_t phiCenter, Double_t radius)
void Hough(TVector3 *choice, Double_t Phi0, Double_t x0, Double_t y0, Double_t R)
PndTrackCand * GetTrackCand() const
#define choice(c1, c2, c3)
Definition: PndCAMath.h:131
void HoughThroughOrigin(TVector3 *choice, Double_t Phi0, Double_t x0, Double_t y0, Double_t R)
Int_t ZFit(PndTrackCand *pTrackCand, Int_t whatToFit)
Bool_t RunEventDisplay(PndTrackCand *trackCand)
Int_t ZFitThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit)
TVector3 FindCorrectZ(TObjArray *choices, Double_t x_0, Double_t y_0, Double_t x0, Double_t y0, Double_t R)
Bool_t IntersectionFinder(PndTrackCand *pTrackCand)
void FinishEventDisplay(PndSttTrack *track)
virtual void Extrapolate(PndSttTrack *track, Double_t r, FairTrackParam *param)
TClonesArray * GetHitArray() const
PndSttTrack * GetTrack() const
virtual void AddHitCollection(TClonesArray *mHitArray)
void fcnHelix2(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
ClassDef(PndSttHelixTrackFitter, 1)
void SetTubeArray(TClonesArray *tubeArray)
Int_t DoFit(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo=211)
TVector3 GetHoughResponse()
void SetDisplayLevel(Int_t display=2)
void OrderHitsByR(std::map< Double_t, Int_t > &hitMap)
TVector3 GetHoughResponseThroughOrigin()
PndSttHit * GetHitFromCollections(Int_t hitCounter) const
float f
Definition: P4_F32vec4.h:20
void fcnHelix(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
Int_t DoFitPlain(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo=211)
Bool_t ZFinderThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit)
Int_t XYFitThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit)
Bool_t ZFinder(PndTrackCand *pTrackCand, Int_t whatToFit)
Int_t MinuitFit(PndTrackCand *pTrackCand, Int_t whatToFit)
Int_t GetCharge(Double_t dCenter, Double_t phiCenter, Double_t radius)
Int_t SetUpFitVector(PndTrackCand *pTrackCand, TMatrixT< Double32_t > &fitvect)