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