L3 becomes HLT
[u/mrichter/AliRoot.git] / HLT / hough / AliHLTHoughTransformerRow.h
1 // @(#) $Id$
2
3 #ifndef ALIL3HOUGHTRANSFORMERROW_H
4 #define ALIL3HOUGHTRANSFORMERROW_H
5
6 #include "AliHLTRootTypes.h"
7 #include "AliHLTHoughBaseTransformer.h"
8
9 #define MAX_N_GAPS 5
10 #define MIN_TRACK_LENGTH 70
11
12 struct AliHLTEtaRow {
13   UChar_t fStartPad; //First pad in the cluster
14   UChar_t fEndPad; //Last pad in the cluster
15   Bool_t fIsFound; //Is the cluster already found
16 #ifdef do_mc
17   Int_t fMcLabels[MaxTrack]; //Array to store mc labels inside cluster
18 #endif
19 };
20
21 struct AliHLTPadHoughParams {
22   // Parameters which represent given pad in the hough space
23   // Used in order to avoid as much as possible floating
24   // point operations during the hough transform
25   Float_t fAlpha; // Starting value for the hough parameter alpha1
26   Float_t fDeltaAlpha; // Slope of alpha1
27   Int_t fFirstBin; // First alpha2 bin to be filled 
28   Int_t fLastBin; // Last alpha2 bin to be filled
29 };
30
31 class AliHLTDigitData;
32 class AliHLTHistogram;
33
34 class AliHLTHoughTransformerRow : public AliHLTHoughBaseTransformer {
35
36  public:
37   AliHLTHoughTransformerRow(); 
38   AliHLTHoughTransformerRow(Int_t slice,Int_t patch,Int_t netasegments,Bool_t DoMC=kFALSE,Float_t zvertex=0.0);
39   virtual ~AliHLTHoughTransformerRow();
40
41   void CreateHistograms(Float_t ptmin,Float_t ptmax,Float_t pres,Int_t nybin,Float_t psi) {
42     AliHLTHoughBaseTransformer::CreateHistograms(ptmin,ptmax,pres,nybin,psi);
43   }
44   void CreateHistograms(Int_t /*nxbin*/,Float_t /*ptmin*/,Int_t /*nybin*/,Float_t /*phimin*/,Float_t /*phimax*/)
45   {STDCERR<<"This method for creation of parameter space histograms is not supported for this Transformer!"<<STDENDL;}
46   void CreateHistograms(Int_t nxbin,Float_t xmin,Float_t xmax,
47                         Int_t nybin,Float_t ymin,Float_t ymax);
48   void Reset();
49   void TransformCircle();
50   void TransformCircle(Int_t *row_range,Int_t every) {
51     AliHLTHoughBaseTransformer::TransformCircle(row_range,every);
52   }
53
54   Int_t GetEtaIndex(Double_t eta) const;
55   AliHLTHistogram *GetHistogram(Int_t etaindex);
56   Double_t GetEta(Int_t etaindex,Int_t slice) const;
57   Int_t GetTrackID(Int_t etaindex,Double_t alpha1,Double_t alpha2) const;
58   Int_t GetTrackLength(Double_t alpha1,Double_t alpha2,Int_t *rows) const;
59   UChar_t *GetGapCount(Int_t etaindex) const { return fGapCount[etaindex]; }
60   UChar_t *GetCurrentRowCount(Int_t etaindex) const { return fCurrentRowCount[etaindex]; }
61   UChar_t *GetPrevBin(Int_t etaindex) const { return fPrevBin[etaindex]; }
62   UChar_t *GetNextBin(Int_t etaindex) const { return fNextBin[etaindex]; }
63   UChar_t *GetNextRow(Int_t etaindex) const { return fNextRow[etaindex]; }
64   UChar_t *GetTrackNRows() const { return fTrackNRows; }
65   UChar_t *GetTrackFirstRow() const { return fTrackFirstRow; }
66   UChar_t *GetTrackLastRow() const { return fTrackLastRow; }
67   static Float_t GetBeta1() {return fgBeta1;}
68   static Float_t GetBeta2() {return fgBeta2;}
69   static Float_t GetDAlpha() {return fgDAlpha;}
70   static Float_t GetDEta() {return fgDEta;}
71   static Double_t GetEtaCalcParam1() {return fgEtaCalcParam1;}
72   static Double_t GetEtaCalcParam2() {return fgEtaCalcParam2;}
73   static Double_t GetEtaCalcParam3() {return fgEtaCalcParam3;}
74
75   void SetTPCRawStream(AliTPCRawStream *rawstream) {fTPCRawStream=rawstream;}
76
77  private:
78
79   UChar_t **fGapCount; //!
80   UChar_t **fCurrentRowCount; //!
81 #ifdef do_mc
82   AliHLTTrackIndex **fTrackID; //!
83 #endif
84
85   UChar_t *fTrackNRows; //!
86   UChar_t *fTrackFirstRow; //!
87   UChar_t *fTrackLastRow; //!
88   UChar_t *fInitialGapCount; //!
89
90   UChar_t **fPrevBin; //!
91   UChar_t **fNextBin; //!
92   UChar_t **fNextRow; //!
93
94   AliHLTPadHoughParams **fStartPadParams; //!
95   AliHLTPadHoughParams **fEndPadParams; //!
96   Float_t **fLUTr; //!
97
98   Float_t *fLUTforwardZ; //!
99   Float_t *fLUTbackwardZ; //!
100
101   AliHLTHistogram **fParamSpace; //!
102
103   void TransformCircleFromDigitArray();
104   void TransformCircleFromRawStream();
105
106   void DeleteHistograms(); //Method to clean up the histograms containing Hough space
107
108   inline void FillClusterRow(UChar_t i,Int_t binx1,Int_t binx2,UChar_t *ngaps2,UChar_t *currentrow2,UChar_t *lastrow2
109 #ifdef do_mc
110                              ,AliHLTEtaRow etaclust,AliHLTTrackIndex *trackid
111 #endif
112                              );
113   inline void FillCluster(UChar_t i,Int_t etaindex,AliHLTEtaRow *etaclust,Int_t ilastpatch,Int_t firstbinx,Int_t lastbinx,Int_t nbinx,Int_t firstbiny);
114 #ifdef do_mc
115   inline void FillClusterMCLabels(AliHLTDigitData digpt,AliHLTEtaRow *etaclust);
116 #endif
117
118   void SetTransformerArrays(AliHLTHoughTransformerRow *tr);
119
120   static Float_t fgBeta1,fgBeta2; // Two curves which define the Hough space
121   static Float_t fgDAlpha, fgDEta; // Correlation factor between Hough space bin size and resolution
122   static Double_t fgEtaCalcParam1, fgEtaCalcParam2; // Parameters used for fast calculation of eta during the binning of Hough space
123   static Double_t fgEtaCalcParam3; // Parameter used during the eta binning of the Hough Space in order to account for finite track radii
124
125   AliTPCRawStream *fTPCRawStream; // Pointer to the raw stream in case of fast reading of the raw data (fast_raw flag)
126
127   ClassDef(AliHLTHoughTransformerRow,1) //TPC Rows Hough transformation class
128
129 };
130
131 typedef AliHLTHoughTransformerRow AliL3HoughTransformerRow; // for backward compatibility
132
133 #endif
134
135
136
137