]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/hough/AliL3Hough.h
Since there is no PID in HT TPC tracking, assume all the tracks are pions.
[u/mrichter/AliRoot.git] / HLT / hough / AliL3Hough.h
index 0f6e50b062daf034708f2c5d01c20c7b50032fa3..67a6f600418889d8afc59fba994aadc5b34fe83c 100644 (file)
-#ifndef ALIL3_HOUGH
-#define ALIL3_HOUGH
+// @(#) $Id$
+
+#ifndef ALIL3HOUGH_H
+#define ALIL3HOUGH_H
 
 #include "AliL3RootTypes.h"
 
 class AliL3HoughMaxFinder;
-class AliL3HoughTransformer;
+class AliL3HoughBaseTransformer;
 class AliL3Histogram;
+class AliL3MemHandler;
 class AliL3FileHandler;
 class AliL3HoughEval;
-class AliL3Transform;
 class AliL3TrackArray;
 class AliL3HoughMerger;
 class AliL3HoughIntMerger;
 class AliL3HoughGlobalMerger;
+class AliL3Benchmark;
 
-class AliL3Hough {
-  
- private:
-  Char_t fPath[256];
-  Bool_t fBinary;
-  Bool_t fAddHistograms;
-  Bool_t fDoIterative;
-  Bool_t fWriteDigits;
-  Int_t fNEtaSegments;
-  Int_t fNPatches;
-  AliL3FileHandler **fMemHandler; //!
-  AliL3HoughTransformer **fHoughTransformer; //!
-  AliL3HoughEval **fEval; //!
-  AliL3HoughMaxFinder *fPeakFinder; //!
-  AliL3TrackArray **fTracks; //!
-  AliL3HoughMerger *fMerger; //!
-  AliL3HoughIntMerger *fInterMerger; //!
-  AliL3HoughGlobalMerger *fGlobalMerger; //!
+#include "TThread.h"
+#ifdef use_newio
+#include <AliRunLoader.h>
+#include <../RAW/AliRawEvent.h>
+#endif
+#ifdef use_aliroot
+#include <AliESD.h>
+#include <AliESDHLTtrack.h>
+#endif
 
-  void CleanUp();
-  void Init();
-  
+class AliL3Hough {
  public:
   
   AliL3Hough(); 
-  AliL3Hough(Char_t *path,Bool_t binary,Int_t n_eta_segments=100);
+  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);
   virtual ~AliL3Hough();
-  
+
+#ifdef use_newio  
+  void SetRunLoader(AliRunLoader *runloader) {fRunLoader = runloader;}
+#endif
+
+  void Init(Int_t netasegments,Int_t tv,AliRawEvent *rawevent,Float_t zvertex=0.0);
+  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);
+  void Init(Bool_t doit=kFALSE, Bool_t addhists=kFALSE);
+
   void Process(Int_t minslice,Int_t maxslice);
-  void ReadData(Int_t slice);
-  void Transform();
+  void ReadData(Int_t slice,Int_t eventnr=0);
+  void Transform(Int_t *rowrange = 0);
   void ProcessSliceIter();
   void ProcessPatchIter(Int_t patch);
   void MergePatches();
   void MergeInternally();
+  void MergeEtaSlices();
 
   void FindTrackCandidates();
+  void FindTrackCandidatesRow();
   void AddAllHistograms();
-  void Evaluate(Int_t road_width=1);
-  void EvaluateWithEta();
-  void WriteTracks();
+  void AddAllHistogramsRows();
+  void PrepareForNextPatch(Int_t nextpatch);
+  Int_t Evaluate(Int_t roadwidth=1,Int_t nrowstomiss=1);
+  void EvaluatePatch(Int_t i,Int_t roadwidth,Int_t nrowstomiss);
+  void WriteTracks(Int_t slice,Char_t *path="./");
+  void WriteTracks(Char_t *path);
+#ifdef use_aliroot
+  Int_t FillESD(AliESD *esd);
+#endif
   void WriteDigits(Char_t *outfile="output_digits.root");
+  void InitEvaluate();
+  void DoBench(Char_t *filename);
+  void AddTracks();
   
   //Setters
   void SetNEtaSegments(Int_t i) {fNEtaSegments = i;}
   void SetAddHistograms() {fAddHistograms = kTRUE;}
   void DoIterative() {fDoIterative = kTRUE;}
   void SetWriteDigits() {fWriteDigits = kTRUE;}
+  void SetTransformerParams(Float_t ptres=0,Float_t ptmin=0,Float_t ptmax=0,Int_t ny=0,Int_t patch=-1);
+  //{fPtRes=ptres;fNBinY=ny;fLowPt=ptmin;fUpperPt=ptmax;fPhi=psi;}
+  void SetTransformerParams(Int_t nx,Int_t ny,Float_t lpt,Int_t patch);
+  void CalcTransformerParams(Float_t lpt);
+  void SetTransformerParams(Int_t nx,Int_t ny,Float_t lpt,Float_t phi);
+  //{fNBinX=nx;fNBinY=ny;fLowPt=lpt;fPhi=phi;}
+  void SetThreshold(Int_t t=3,Int_t patch=-1);
+  void SetNSaveIterations(Int_t t=10) {fNSaveIterations=t;}
+  void SetPeakThreshold(Int_t threshold=0,Int_t patch=-1);
+  
+  void SetPeakParameters(Int_t kspread,Float_t pratio) {fKappaSpread=kspread; fPeakRatio=pratio;}
   
   //Getters
-  AliL3HoughTransformer *GetTransformer(Int_t i) {if(!fHoughTransformer[i]) return 0; return fHoughTransformer[i];}
+  AliL3HoughBaseTransformer *GetTransformer(Int_t i) {if(!fHoughTransformer[i]) return 0; return fHoughTransformer[i];}
   AliL3TrackArray *GetTracks(Int_t i) {if(!fTracks[i]) return 0; return fTracks[i];}
   AliL3HoughEval *GetEval(Int_t i) {if(!fEval[i]) return 0; return fEval[i];}
   AliL3HoughMerger *GetMerger() {if(!fMerger) return 0; return fMerger;}
   AliL3HoughIntMerger *GetInterMerger() {if(!fInterMerger) return 0; return fInterMerger;}
-  AliL3FileHandler *GetMemHandler(Int_t i) {if(!fMemHandler[i]) return 0; return fMemHandler[i];}
+  AliL3MemHandler *GetMemHandler(Int_t i) {if(!fMemHandler[i]) return 0; return fMemHandler[i];}
+  AliL3HoughMaxFinder *GetMaxFinder() {return fPeakFinder;}
 
-  ClassDef(AliL3Hough,1) //Hough transform base class
+  //Special methods for executing Hough Transform as a thread
+  static void *ProcessInThread(void *args);
+  void StartProcessInThread(Int_t minslice,Int_t maxslice);
+  Int_t WaitForThreadFinish();
+  void SetMinMaxSlices(Int_t minslice,Int_t maxslice) {fMinSlice = minslice; fMaxSlice = maxslice;} 
+  Int_t GetMinSlice() {return fMinSlice;}
+  Int_t GetMaxSlice() {return fMaxSlice;}
+  
+ private:
+  Char_t *fInputFile;//!
+  Char_t *fInputPtr;//!
+  AliRawEvent *fRawEvent;//!
+  Char_t fPath[1024]; // Path to the files
+  Bool_t fBinary; // Is input binary
+  Bool_t fAddHistograms; // Add all patch histograms at the end or not
+  Bool_t fDoIterative; // Iterative or not
+  Bool_t fWriteDigits; // Write Digits or not
+  Bool_t fUse8bits; // Use 8 bits or not
+  Int_t fNEtaSegments; // Number of eta slices
+  Int_t fNPatches; // Number of patches
+  Int_t fLastPatch; //The index of the last processed patch
+  Int_t fVersion; //which HoughTransformer to use
+  Int_t fCurrentSlice; // Current TPC slice (sector)
+  Int_t fEvent; // Current event number
 
+  Int_t fPeakThreshold[6]; // Threshold for the peak finder
+  Float_t fLowPt[6]; // Lower limit on Pt
+  Float_t fUpperPt[6]; // Upper limit on Pt
+  Float_t fPtRes[6]; // Desired Pt resolution
+  Float_t fPhi[6]; // Limit on the emission angle
+  Int_t fNBinX[6]; // Number of bins in the Hough space
+  Int_t fNBinY[6]; // Number of bins in the Hough space
+  Int_t fThreshold[6]; // Threshold for digits
+  Int_t fNSaveIterations; //for HoughtransformerVhdl
+  
+  //parameters for the peak finder:
+  Int_t fKappaSpread; // Kappa spread
+  Float_t fPeakRatio; // Peak ratio
+
+  Float_t fZVertex; // Z position of the primary vertex
+
+  Int_t fMinSlice; // First TPC slice (sector) to process while running in a thread
+  Int_t fMaxSlice; // Last TPC slice (sector) to process while running in a thread
+
+  AliL3MemHandler **fMemHandler; //!
+  AliL3HoughBaseTransformer **fHoughTransformer; //!
+  AliL3HoughEval **fEval; //!
+  AliL3HoughMaxFinder *fPeakFinder; //!
+  AliL3TrackArray **fTracks; //!
+  AliL3TrackArray *fGlobalTracks; //!
+  AliL3HoughMerger *fMerger; //!
+  AliL3HoughIntMerger *fInterMerger; //!
+  AliL3HoughGlobalMerger *fGlobalMerger; //!
+  AliL3Benchmark *fBenchmark; //!
+
+#ifdef use_newio
+  AliRunLoader *fRunLoader; // Run Loader
+#endif
+
+  void CleanUp();
+  Double_t GetCpuTime();
+
+  TThread *fThread; // Pointer to the TThread object in case of running in a thread
+
+  ClassDef(AliL3Hough,1) //Hough transform base class
 };
 
 #endif
+
+
+
+
+
+
+