correct handling of multiple output data types
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCClusterFinder.h
CommitLineData
a38a7850 1// @(#) $Id$
4aa41877 2// Original: AliHLTClustFinderNew.h,v 1.13 2004/06/18 10:55:26 loizides
a38a7850 3
01f43166 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 */
a38a7850 9
01f43166 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
46b33a24 22
d8b2f74a 23#define UNSORTED 0
24
01f43166 25#include "AliHLTLogging.h"
26#include "AliHLTTPCPadArray.h"
a38a7850 27class AliHLTTPCSpacePointData;
28class AliHLTTPCDigitReader;
29
46b33a24 30class AliHLTTPCClusterFinder : public AliHLTLogging {
a38a7850 31
32 public:
33 struct AliClusterData
34 {
35 UInt_t fTotalCharge; //tot charge of cluster
36 UInt_t fPad; //pad value
37 UInt_t fTime; //time value
38 ULong64_t fPad2; //for error in XY direction
39 ULong64_t fTime2; //for error in Z direction
40 UInt_t fMean; //mean in time
41 UInt_t fFlags; //different flags
42 UInt_t fChargeFalling; //for deconvolution
43 UInt_t fLastCharge; //for deconvolution
44 UInt_t fLastMergedPad; //dont merge twice per pad
d8b2f74a 45 Int_t fRow; //row value
a38a7850 46 };
47 typedef struct AliClusterData AliClusterData; //!
48
49 private:
2a083ac4 50 AliHLTTPCSpacePointData *fSpacePointData; //! array of space points
51 AliHLTTPCDigitReader *fDigitReader; //! reader instance
a38a7850 52
2a083ac4 53 UChar_t* fPtr; //! pointer to packed block
a38a7850 54 unsigned long fSize; //packed block size
55 Bool_t fDeconvTime; //deconv in time direction
56 Bool_t fDeconvPad; //deconv in pad direction
57 Bool_t fStdout; //have print out in write clusters
58 Bool_t fCalcerr; //calculate centroid sigmas
59 Bool_t fRawSP; //store centroids in raw system
60
61
62 Int_t fFirstRow; //first row
63 Int_t fLastRow; //last row
64 Int_t fCurrentRow; //current active row
65 Int_t fCurrentSlice; //current slice
66 Int_t fCurrentPatch; //current patch
67 Int_t fMatch; //size of match
68 UInt_t fThreshold; //threshold for clusters
84645eb0 69 /** threshold for zero suppression (applied per bin) */
70 Int_t fSignalThreshold;
a38a7850 71 Int_t fNClusters; //number of found clusters
72 Int_t fMaxNClusters; //max. number of clusters
73 Float_t fXYErr; //fixed error in XY
74 Float_t fZErr; //fixed error in Z
5235c3e9 75
76 Float_t fOccupancyLimit; // Occupancy Limit
77
01f43166 78 AliHLTTPCPadArray * fPadArray; //! transient
79
a38a7850 80
81#ifdef do_mc
82 void GetTrackID(Int_t pad,Int_t time,Int_t *trackID);
83#endif
84
85 public:
46b33a24 86 /** standard constructor */
a38a7850 87 AliHLTTPCClusterFinder();
46b33a24 88 /** not a valid copy constructor, defined according to effective C++ style */
89 AliHLTTPCClusterFinder(const AliHLTTPCClusterFinder&);
90 /** not a valid assignment op, but defined according to effective C++ style */
91 AliHLTTPCClusterFinder& operator=(const AliHLTTPCClusterFinder&);
92 /** destructor */
a38a7850 93 virtual ~AliHLTTPCClusterFinder();
94
95 void Read(void* ptr,unsigned long size);
96
97 void InitSlice(Int_t slice,Int_t patch,Int_t firstrow, Int_t lastrow,Int_t maxpoints);
98 void InitSlice(Int_t slice,Int_t patch,Int_t maxpoints);
99 void ProcessDigits();
100
101 void SetOutputArray(AliHLTTPCSpacePointData *pt);
102 void WriteClusters(Int_t n_clusters,AliClusterData *list);
103
104 void SetXYError(Float_t f) {fXYErr=f;}
105 void SetZError(Float_t f) {fZErr=f;}
106 void SetDeconv(Bool_t f) {fDeconvPad=f; fDeconvTime=f;}
107 void SetThreshold(UInt_t i) {fThreshold=i;}
5235c3e9 108 void SetOccupancyLimit(Float_t f) {fOccupancyLimit=f;}
84645eb0 109 void SetSignalThreshold(Int_t i) {fSignalThreshold=i;}
a38a7850 110 void SetMatchWidth(UInt_t i) {fMatch=i;}
111 void SetSTDOutput(Bool_t f=kFALSE) {fStdout=f;}
112 void SetCalcErr(Bool_t f=kTRUE) {fCalcerr=f;}
113 void SetRawSP(Bool_t f=kFALSE) {fRawSP=f;}
114 void SetReader(AliHLTTPCDigitReader* f){fDigitReader = f;}
115 Int_t GetNumberOfClusters() const {return fNClusters;}
01f43166 116
117 //----------------------------------Methods for the new unsorted way of reading data ----------
118 void SetPadArray(AliHLTTPCPadArray *padArray);
119 void ReadDataUnsorted(void* ptr,unsigned long size);
120 void FindClusters();
121 void WriteClusters(Int_t nclusters,AliHLTTPCClusters *list);
a38a7850 122
01f43166 123 ClassDef(AliHLTTPCClusterFinder,1) //Fast cluster finder
a38a7850 124};
125#endif