]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/AliHLTTPCConfMapper.h
Fixing memory leak (Christian)
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCConfMapper.h
1 // @(#) $Id$
2
3 #ifndef ALIHLTTPCCONFMAPPER_H
4 #define ALIHLTTPCCONFMAPPER_H
5
6 //
7 //Conformal mapping base class
8 //
9 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
10 //*-- Copyright &copy ALICE HLT Group
11
12
13 class AliHLTTPCConfMapPoint;
14 class AliHLTTPCConfMapTrack;
15 class AliHLTTPCVertex;
16 class AliHLTTPCTrackArray;
17 class AliHLTTPCSpacePointData;
18
19
20 class AliHLTTPCConfMapper {
21
22  public:
23
24   AliHLTTPCConfMapper();
25   //  AliHLTTPCConfMapper(AliTPCParam *param,AliHLTTPCVertex *vertex,Bool_t bench=(Bool_t)false);
26   virtual ~AliHLTTPCConfMapper();
27   
28   void InitVolumes();
29   void InitSector(Int_t sector,Int_t *rowrange=0,Float_t *etarange=0);
30   void SetVertex(AliHLTTPCVertex *vertex){fVertex = vertex;}
31   void MainVertexTracking_a();
32   void MainVertexTracking_b();
33   void MainVertexTracking();
34   void NonVertexTracking();
35   void MainVertexSettings(Int_t trackletlength, Int_t tracklength, 
36                           Int_t rowscopetracklet, Int_t rowscopetrack,Double_t maxphi=0.1,Double_t maxeta=0.1);
37   void NonVertexSettings(Int_t trackletlength, Int_t tracklength, 
38                          Int_t rowscopetracklet, Int_t rowscopetrack);
39   Bool_t ReadHits(UInt_t count, AliHLTTPCSpacePointData* hits );
40   void ClusterLoop();
41   void CreateTrack(AliHLTTPCConfMapPoint *hit);
42   AliHLTTPCConfMapPoint *GetNextNeighbor(AliHLTTPCConfMapPoint *start_hit,AliHLTTPCConfMapTrack *track=NULL);
43   Int_t EvaluateHit(AliHLTTPCConfMapPoint *start_hit,AliHLTTPCConfMapPoint *hit,AliHLTTPCConfMapTrack *track);
44
45   Double_t CalcDistance(const AliHLTTPCConfMapPoint *hit1,const AliHLTTPCConfMapPoint *hit2) const;
46   Double_t TrackletAngle(AliHLTTPCConfMapTrack *track,Int_t n=3) const;
47   Bool_t VerifyRange(const AliHLTTPCConfMapPoint *hit1,const AliHLTTPCConfMapPoint *hit2) const;
48   Int_t FillTracks();
49   
50   //getters
51   Int_t GetNumberOfTracks()    const {return fNTracks;}
52   AliHLTTPCTrackArray *GetTracks() const {return fTrack;}
53   Double_t GetMaxDca()         const {return fMaxDca;}
54   AliHLTTPCVertex* GetVertex()     const {return fVertex;}
55   Double_t CpuTime();
56
57   //setters
58   void SetTrackCuts(Double_t hitChi2Cut, Double_t goodHitChi2, Double_t trackChi2Cut, Int_t maxdist,Bool_t vertexconstraint); 
59   void SetTrackletCuts(Double_t maxangle,Double_t goodDist,Bool_t vc);    //Set cut of tracklet for the given vertex_constraint
60   void SetNSegments(Int_t f,Int_t g) {fNumPhiSegment=f,fNumEtaSegment=g;} //Set number of subvolumes (#segments in (phi,eta)
61   void SetMaxDca(Double_t f) {fMaxDca = f;}
62
63   //setter:
64   void SetMinPoints(Int_t f,Bool_t vconstraint) {fMinPoints[(Int_t)vconstraint] = f; }  
65   void SetVertexConstraint(Bool_t f) {fVertexConstraint =f;}
66   
67   void SetHitChi2Cut(Double_t f,Bool_t vert) {fHitChi2Cut[(Int_t)vert]=f;}
68   void SetGoodHitChi2(Double_t f,Bool_t vert) {fGoodHitChi2[(Int_t)vert]=f;}
69   void SetTrackChi2Cut(Double_t f,Bool_t vert) {fTrackChi2Cut[(Int_t)vert]=f;}
70   void SetMaxDist(Int_t f,Bool_t vert) {fMaxDist[(Int_t)vert]=f;}
71   void SetTrackletLength(Int_t f,Bool_t vert) {fTrackletLength[(Int_t)vert]=f;}
72   void SetRowScopeTrack(Int_t f, Bool_t vc){fRowScopeTrack[(Int_t)vc] = f;}
73   void SetRowScopeTracklet(Int_t f, Bool_t vc){fRowScopeTracklet[(Int_t)vc] = f;}
74   void SetMaxAngleTracklet(Double_t f, Bool_t vc){fMaxAngleTracklet[(Int_t)vc] = f;}
75
76   void SetPointers();
77   void SetParamDone(Bool_t vconstraint) {fParamSet[(Int_t)vconstraint] = kTRUE;}
78
79  private:
80
81   struct AliHLTTPCConfMapContainer 
82   {
83     void *first; // first track
84     void *last;  // last track
85   };
86
87   Bool_t fBench; //run-time measurements
88   Int_t fNTracks; //number of tracks build.
89
90   AliHLTTPCVertex *fVertex; //!
91   Bool_t fParamSet[2];  //!
92   Bool_t fVertexFinder; //Include vertexfinding or not 
93                         //(latter case vertex=(0,0,0))
94
95   AliHLTTPCConfMapPoint *fHit;  //!
96   AliHLTTPCTrackArray *fTrack;  //!
97   Double_t fMaxDca;      //cut value for momentum fit
98   
99   AliHLTTPCConfMapContainer *fVolume;  //!  Segment volume
100   AliHLTTPCConfMapContainer *fRow;     //!  Row volume
101
102    //Number of cells (segments)
103   Int_t  fNumRowSegment;          // Total number of padrows
104   Int_t  fNumPhiSegment;          // number of phi segments 
105   Int_t  fNumEtaSegment;          // number of eta segments
106   Int_t  fNumRowSegmentPlusOne;   // row+1
107   Int_t  fNumPhiSegmentPlusOne;   // phi+1
108   Int_t  fNumEtaSegmentPlusOne;   // eta+1
109   Int_t  fNumPhiEtaSegmentPlusOne;// phieta+1
110   Int_t  fBounds;                 // bounds
111   Int_t  fPhiHitsOutOfRange;      // phi hits out of range
112   Int_t  fEtaHitsOutOfRange;      // eta hits out of range
113
114   //tracking range:
115   Float_t fPhiMin; //MinPhi angle to consider
116   Float_t fPhiMax; //MaxPhi angle to consider
117   Float_t fEtaMin; //MinEta to consider
118   Float_t fEtaMax; //MaxEta to consider
119   Int_t fRowMin;   //Minimum row to consider
120   Int_t fRowMax;   //Maximum row to consider
121
122   Bool_t fVertexConstraint;       //vertex constraint (true or false)
123   Int_t fTrackletLength[2];       //minimal length of tracks 
124   Int_t fRowScopeTracklet[2];     //number of row segments to look for the next point of a tracklet
125   Int_t fRowScopeTrack[2];        //number of row segments to look for the next point of a track
126   Int_t fMinPoints[2];            //minimum number of points on one track
127   
128   // Cuts
129   Double_t fMaxAngleTracklet[2];  //limit of angle between to pieces of a tracklet
130   Int_t fMaxDist[2];              //maximum distance between two hits 
131   Double_t fHitChi2Cut[2];        //Maximum hit chi2
132   Double_t fGoodHitChi2[2];       //Chi2 to stop looking for next hit
133   Double_t fTrackChi2Cut[2];      //Maximum track chi2
134   Double_t fGoodDist;             //In segment building, distance consider good enough
135   Double_t fMaxPhi;               //Maximum phi
136   Double_t fMaxEta;               //Maximum eta
137
138   // Tracking informtion
139   Int_t fMainVertexTracks; //number of tracks coming from the main vertex
140   Int_t fClustersUnused;   //number of unused clusters
141
142   ClassDef(AliHLTTPCConfMapper,1) //Base class for conformal mapping tracking
143 };
144
145 #endif