// @(#) $Id$ #ifndef AliL3_ClustFinderNew #define AliL3_ClustFinderNew class AliL3DigitRowData; class AliL3SpacePointData; class AliL3ClustFinderNew { public: struct AliClusterData { UInt_t fTotalCharge; //tot charge of cluster UInt_t fPad; //pad value UInt_t fTime; //time value ULong64_t fPad2; //for error in XY direction ULong64_t fTime2; //for error in Z direction UInt_t fMean; //mean in time UInt_t fFlags; //different flags UInt_t fChargeFalling; //for deconvolution UInt_t fLastCharge; //for deconvolution UInt_t fLastMergedPad; //dont merge twice per pad }; typedef struct AliClusterData AliClusterData; //! private: AliL3DigitRowData *fDigitRowData; //! AliL3SpacePointData *fSpacePointData; //! Bool_t fDeconvTime; //deconv in time direction Bool_t fDeconvPad; //deconv in pad direction Bool_t fStdout; //have print out in write clusters Bool_t fCalcerr; //calculate centroid sigmas Bool_t fRawSP; //store centroids in raw system UInt_t fNDigitRowData; //ndigts on row Int_t fFirstRow; //first row Int_t fLastRow; //last row Int_t fCurrentRow; //current active row Int_t fCurrentSlice; //current slice Int_t fCurrentPatch; //current patch Int_t fMatch; //size of match UInt_t fThreshold; //threshold for clusters Int_t fNClusters; //number of found clusters Int_t fMaxNClusters; //max. number of clusters Float_t fXYErr; //fixed error in XY Float_t fZErr; //fixed error in Z #ifdef do_mc void GetTrackID(Int_t pad,Int_t time,Int_t *trackID); #endif public: AliL3ClustFinderNew(); virtual ~AliL3ClustFinderNew(); void Read(UInt_t ndigits,AliL3DigitRowData *ptr); void InitSlice(Int_t slice,Int_t patch,Int_t firstrow, Int_t lastrow,Int_t maxpoints); void InitSlice(Int_t slice,Int_t patch,Int_t maxpoints); void ProcessDigits(); void ProcessRow(AliL3DigitRowData *tempPt); void SetOutputArray(AliL3SpacePointData *pt); void WriteClusters(Int_t n_clusters,AliClusterData *list); void SetXYError(Float_t f) {fXYErr=f;} void SetZError(Float_t f) {fZErr=f;} void SetDeconv(Bool_t f) {fDeconvPad=f; fDeconvTime=f;} void SetThreshold(UInt_t i) {fThreshold=i;} void SetMatchWidth(UInt_t i) {fMatch=i;} void SetSTDOutput(Bool_t f=kFALSE) {fStdout=f;} void SetCalcErr(Bool_t f=kTRUE) {fCalcerr=f;} void SetRawSP(Bool_t f=kFALSE) {fRawSP=f;} Int_t GetNumberOfClusters() const {return fNClusters;} ClassDef(AliL3ClustFinderNew,1) //Fast cluster finder }; #endif