]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/hough/AliL3Hough.h
Time performance improvements in HLT hough transform and huffman decompression of...
[u/mrichter/AliRoot.git] / HLT / hough / AliL3Hough.h
1 // @(#) $Id$
2
3 #ifndef ALIL3HOUGH_H
4 #define ALIL3HOUGH_H
5
6 #include "AliL3RootTypes.h"
7
8 class AliL3HoughMaxFinder;
9 class AliL3HoughBaseTransformer;
10 class AliL3Histogram;
11 class AliL3MemHandler;
12 class AliL3FileHandler;
13 class AliL3HoughEval;
14 class AliL3TrackArray;
15 class AliL3HoughMerger;
16 class AliL3HoughIntMerger;
17 class AliL3HoughGlobalMerger;
18 class AliL3Benchmark;
19
20 #include "TThread.h"
21 //class TThread;
22 #ifdef use_newio
23 #include <AliRunLoader.h>
24 #endif
25
26 class AliL3Hough {
27  public:
28   
29   AliL3Hough(); 
30   AliL3Hough(Char_t *path,Bool_t binary,Int_t netasegments=100,Bool_t bit8=kFALSE,Int_t tv=0,Char_t *infile=0,Char_t *ptr=0);
31   virtual ~AliL3Hough();
32
33 #ifdef use_newio  
34   void SetRunLoader(AliRunLoader *runloader) {fRunLoader = runloader;}
35 #endif
36
37   void Init(Char_t *path,Bool_t binary,Int_t netasegments=100,Bool_t bit8=kFALSE,Int_t tv=0,Char_t *infile=0,Char_t *ptr=0,Float_t zvertex=0.0);
38   void Init(Bool_t doit=kFALSE, Bool_t addhists=kFALSE);
39
40   void Process(Int_t minslice,Int_t maxslice);
41   void ReadData(Int_t slice,Int_t eventnr=0);
42   void Transform(Int_t *rowrange = 0);
43   void ProcessSliceIter();
44   void ProcessPatchIter(Int_t patch);
45   void MergePatches();
46   void MergeInternally();
47   void MergeEtaSlices();
48
49   void FindTrackCandidates();
50   void FindTrackCandidatesRow();
51   void AddAllHistograms();
52   void AddAllHistogramsRows();
53   void PrepareForNextPatch(Int_t nextpatch);
54   Int_t Evaluate(Int_t roadwidth=1,Int_t nrowstomiss=1);
55   void EvaluatePatch(Int_t i,Int_t roadwidth,Int_t nrowstomiss);
56   void WriteTracks(Int_t slice,Char_t *path="./");
57   void WriteTracks(Char_t *path);
58   void WriteDigits(Char_t *outfile="output_digits.root");
59   void InitEvaluate();
60   void DoBench(Char_t *filename);
61   void AddTracks();
62   
63   //Setters
64   void SetNEtaSegments(Int_t i) {fNEtaSegments = i;}
65   void SetAddHistograms() {fAddHistograms = kTRUE;}
66   void DoIterative() {fDoIterative = kTRUE;}
67   void SetWriteDigits() {fWriteDigits = kTRUE;}
68   void SetTransformerParams(Float_t ptres=0,Float_t ptmin=0,Float_t ptmax=0,Int_t ny=0,Int_t patch=-1);
69   //{fPtRes=ptres;fNBinY=ny;fLowPt=ptmin;fUpperPt=ptmax;fPhi=psi;}
70   void SetTransformerParams(Int_t nx,Int_t ny,Float_t lpt,Int_t patch);
71   void SetTransformerParams(Int_t nx,Int_t ny,Float_t lpt,Float_t phi);
72   //{fNBinX=nx;fNBinY=ny;fLowPt=lpt;fPhi=phi;}
73   void SetThreshold(Int_t t=3,Int_t patch=-1);
74   void SetNSaveIterations(Int_t t=10) {fNSaveIterations=t;}
75   void SetPeakThreshold(Int_t threshold=0,Int_t patch=-1);
76   
77   void SetPeakParameters(Int_t kspread,Float_t pratio) {fKappaSpread=kspread; fPeakRatio=pratio;}
78   
79   //Getters
80   AliL3HoughBaseTransformer *GetTransformer(Int_t i) {if(!fHoughTransformer[i]) return 0; return fHoughTransformer[i];}
81   AliL3TrackArray *GetTracks(Int_t i) {if(!fTracks[i]) return 0; return fTracks[i];}
82   AliL3HoughEval *GetEval(Int_t i) {if(!fEval[i]) return 0; return fEval[i];}
83   AliL3HoughMerger *GetMerger() {if(!fMerger) return 0; return fMerger;}
84   AliL3HoughIntMerger *GetInterMerger() {if(!fInterMerger) return 0; return fInterMerger;}
85   AliL3MemHandler *GetMemHandler(Int_t i) {if(!fMemHandler[i]) return 0; return fMemHandler[i];}
86   AliL3HoughMaxFinder *GetMaxFinder() {return fPeakFinder;}
87
88   //Special methods for executing Hough Transform as a thread
89   static void *ProcessInThread(void *args);
90   void StartProcessInThread(Int_t minslice,Int_t maxslice);
91   Int_t WaitForThreadFinish();
92   void SetMinMaxSlices(Int_t minslice,Int_t maxslice) {fMinSlice = minslice; fMaxSlice = maxslice;} 
93   Int_t GetMinSlice() {return fMinSlice;}
94   Int_t GetMaxSlice() {return fMaxSlice;}
95   
96  private:
97   Char_t *fInputFile;//!
98   Char_t *fInputPtr;//!
99   Char_t fPath[1024]; // Path to the files
100   Bool_t fBinary; // Is input binary
101   Bool_t fAddHistograms; // Add all patch histograms at the end or not
102   Bool_t fDoIterative; // Iterative or not
103   Bool_t fWriteDigits; // Write Digits or not
104   Bool_t fUse8bits; // Use 8 bits or not
105   Int_t fNEtaSegments; // Number of eta slices
106   Int_t fNPatches; // Number of patches
107   Int_t fLastPatch; //The index of the last processed patch
108   Int_t fVersion; //which HoughTransformer to use
109   Int_t fCurrentSlice; // Current TPC slice (sector)
110   Int_t fEvent; // Current event number
111
112   Int_t fPeakThreshold[6]; // Threshold for the peak finder
113   Float_t fLowPt[6]; // Lower limit on Pt
114   Float_t fUpperPt[6]; // Upper limit on Pt
115   Float_t fPtRes[6]; // Desired Pt resolution
116   Float_t fPhi[6]; // Limit on the emission angle
117   Int_t fNBinX[6]; // Number of bins in the Hough space
118   Int_t fNBinY[6]; // Number of bins in the Hough space
119   Int_t fThreshold[6]; // Threshold for digits
120   Int_t fNSaveIterations; //for HoughtransformerVhdl
121   
122   //parameters for the peak finder:
123   Int_t fKappaSpread; // Kappa spread
124   Float_t fPeakRatio; // Peak ratio
125
126   Float_t fZVertex; // Z position of the primary vertex
127
128   Int_t fMinSlice;
129   Int_t fMaxSlice;
130
131   AliL3MemHandler **fMemHandler; //!
132   AliL3HoughBaseTransformer **fHoughTransformer; //!
133   AliL3HoughEval **fEval; //!
134   AliL3HoughMaxFinder *fPeakFinder; //!
135   AliL3TrackArray **fTracks; //!
136   AliL3TrackArray *fGlobalTracks; //!
137   AliL3HoughMerger *fMerger; //!
138   AliL3HoughIntMerger *fInterMerger; //!
139   AliL3HoughGlobalMerger *fGlobalMerger; //!
140   AliL3Benchmark *fBenchmark; //!
141
142 #ifdef use_newio
143   AliRunLoader *fRunLoader; // Run Loader
144 #endif
145
146   void CleanUp();
147   Double_t GetCpuTime();
148
149   TThread *fThread;
150
151   ClassDef(AliL3Hough,1) //Hough transform base class
152 };
153
154 #endif
155
156
157
158
159
160
161