]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/AliHLTTPCClusterFinder.h
new TPC cluster finder algorithm based on channel/bunch access added (Kenneth)
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCClusterFinder.h
1 // @(#) $Id$
2 // Original: AliHLTClustFinderNew.h,v 1.13 2004/06/18 10:55:26 loizides 
3
4 #ifndef AliHLTTPC_CLUSTERFINDER
5 #define AliHLTTPC_CLUSTERFINDER
6 /* This file is property of and copyright by the ALICE HLT Project        * 
7  * ALICE Experiment at CERN, All rights reserved.                         *
8  * See cxx source for full Copyright notice                               */
9
10 /** @file   AliHLTTPCClusterFinder.h
11     @author Anders Vestbo, Constantin Loizides, Jochen Thaeder
12             Kenneth Aamodt kenneth.aamodt@student.uib.no
13     @date   
14     @brief  Cluster Finder for the TPC
15 */
16
17 // see below for class documentation
18 // or
19 // refer to README to build package
20 // or
21 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
22
23
24 #include "AliHLTLogging.h"
25 #include "AliHLTTPCPadArray.h"
26 class AliHLTTPCSpacePointData;
27 class AliHLTTPCDigitReader;
28
29 class AliHLTTPCClusterFinder : public AliHLTLogging {
30
31  public:
32   struct AliClusterData
33   {
34     UInt_t fTotalCharge;   //tot charge of cluster
35     UInt_t fPad;           //pad value
36     UInt_t fTime;          //time value
37     ULong64_t fPad2;       //for error in XY direction
38     ULong64_t fTime2;      //for error in Z  direction
39     UInt_t fMean;          //mean in time
40     UInt_t fFlags;         //different flags
41     UInt_t fChargeFalling; //for deconvolution
42     UInt_t fLastCharge;    //for deconvolution
43     UInt_t fLastMergedPad; //dont merge twice per pad
44     Int_t fRow;             //row value
45   };
46   typedef struct AliClusterData AliClusterData; //!
47
48   /** standard constructor */
49   AliHLTTPCClusterFinder();
50   /** destructor */
51   virtual ~AliHLTTPCClusterFinder();
52
53   void Read(void* ptr,unsigned long size);
54
55   void InitSlice(Int_t slice,Int_t patch,Int_t firstrow, Int_t lastrow,Int_t maxpoints);
56   void InitSlice(Int_t slice,Int_t patch,Int_t maxpoints);
57   void ProcessDigits();
58
59   void SetOutputArray(AliHLTTPCSpacePointData *pt);
60   void WriteClusters(Int_t n_clusters,AliClusterData *list);
61   void PrintClusters();
62   void SetXYError(Float_t f) {fXYErr=f;}
63   void SetZError(Float_t f) {fZErr=f;}
64   void SetDeconv(Bool_t f) {fDeconvPad=f; fDeconvTime=f;}
65   void SetThreshold(UInt_t i) {fThreshold=i;}
66   void SetOccupancyLimit(Float_t f) {fOccupancyLimit=f;}
67   void SetSignalThreshold(Int_t i) {fSignalThreshold=i;}
68   void SetNSigmaThreshold(Double_t d) {fNSigmaThreshold=d;}
69   void SetMatchWidth(UInt_t i) {fMatch=i;}
70   void SetSTDOutput(Bool_t f=kFALSE) {fStdout=f;}  
71   void SetCalcErr(Bool_t f=kTRUE) {fCalcerr=f;}
72   void SetRawSP(Bool_t f=kFALSE) {fRawSP=f;}
73   void SetReader(AliHLTTPCDigitReader* f){fDigitReader = f;}
74   Int_t GetNumberOfClusters() const {return fNClusters;}
75
76   //----------------------------------Methods for the new unsorted way of reading data ----------
77   void SetPadArray(AliHLTTPCPadArray *padArray);
78   void ReadDataUnsorted(void* ptr,unsigned long size, Int_t mode);
79   void FindClusters();
80   //  Int_t GetActivePads(AliHLTTPCPadArray::AliHLTTPCActivePads* activePads,Int_t maxActivePads);
81   void WriteClusters(Int_t nclusters,AliHLTTPCClusters *list);
82   void SetUnsorted(Int_t unsorted){fUnsorted=unsorted;}
83   void SetPatch(Int_t patch){fCurrentPatch=patch;}
84   void InitializePadArray();
85   Int_t DeInitializePadArray();
86   Bool_t ComparePads(AliHLTTPCPad *nextPad,AliHLTTPCClusters* candidate,Int_t nextPadToRead);
87  private: 
88   /** copy constructor prohibited */
89   AliHLTTPCClusterFinder(const AliHLTTPCClusterFinder&);
90   /** assignment operator prohibited */
91   AliHLTTPCClusterFinder& operator=(const AliHLTTPCClusterFinder&);
92
93   AliHLTTPCSpacePointData *fSpacePointData; //! array of space points
94   AliHLTTPCDigitReader *fDigitReader;       //! reader instance
95
96   UChar_t* fPtr;   //! pointer to packed block
97   unsigned long fSize; //packed block size
98   Bool_t fDeconvTime; //deconv in time direction
99   Bool_t fDeconvPad;  //deconv in pad direction
100   Bool_t fStdout;     //have print out in write clusters
101   Bool_t fCalcerr;    //calculate centroid sigmas
102   Bool_t fRawSP;      //store centroids in raw system
103
104
105   Int_t fFirstRow;       //first row
106   Int_t fLastRow;        //last row
107   Int_t fCurrentRow;     //current active row
108   Int_t fCurrentSlice;   //current slice
109   Int_t fCurrentPatch;   //current patch
110   Int_t fMatch;          //size of match
111   UInt_t fThreshold;     //threshold for clusters
112   /** threshold for zero suppression (applied per bin) */
113   Int_t fSignalThreshold;// see above
114   /** threshold for zero suppression 2007 December run */
115   Double_t fNSigmaThreshold; // see above
116   Int_t fNClusters;      //number of found clusters
117   Int_t fMaxNClusters;   //max. number of clusters
118   Float_t fXYErr;        //fixed error in XY
119   Float_t fZErr;         //fixed error in Z
120   
121   Float_t fOccupancyLimit; // Occupancy Limit
122
123   AliHLTTPCPadArray * fPadArray; //! transient
124
125   Int_t fUnsorted;       // enable for processing of unsorted digit data
126   Bool_t fVectorInitialized;
127
128   typedef vector<AliHLTTPCPad*> AliHLTTPCPadVector;
129
130   vector<AliHLTTPCPadVector> fRowPadVector;                        //! transient
131
132   vector<AliHLTTPCClusters> fClusters;                             //! transient
133   
134   UInt_t* fNumberOfPadsInRow;                                      //! transient
135   
136   UInt_t fNumberOfRows;                                            //! transient
137   
138   UInt_t fRowOfFirstCandidate;
139
140   /** list of active pads if PadArray is not used */
141   vector<AliHLTTPCPadArray::AliHLTTPCActivePads> fActivePads; //!transient
142
143 #ifdef do_mc
144   void GetTrackID(Int_t pad,Int_t time,Int_t *trackID);
145 #endif
146   
147   ClassDef(AliHLTTPCClusterFinder,4) //Fast cluster finder
148 };
149 #endif