X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDclusterizer.h;h=0b305f4978519bc06870b6b51f5ae0a9bb2a0384;hb=deae51a84fa11ec03d46ae80ab3bb054b0fa916a;hp=4e1bf41e8a41c85228bda67463910c64e89cf8e8;hpb=6b0d4ad5288c5698b74986c4c3f11f92a773d8df;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDclusterizer.h b/TRD/AliTRDclusterizer.h index 4e1bf41e8a4..0b305f49785 100644 --- a/TRD/AliTRDclusterizer.h +++ b/TRD/AliTRDclusterizer.h @@ -31,6 +31,8 @@ class AliTRDtransform; class AliTRDCalROC; class AliTRDReconstructor; class AliTRDCalSingleChamberStatus; +class AliTRDrawStream; +class AliTRDrecoParam; class AliTRDclusterizer : public TNamed { @@ -38,25 +40,27 @@ class AliTRDclusterizer : public TNamed public: // steering flags + // bits from 0-13 are reserved by ROOT (see TObject.h) enum{ - kTrOwner= BIT(13) // toggle online tracklets ownership - ,kClOwner= BIT(14) // toggle cluster ownership - ,kLabels = BIT(15) // toggle MC labels for clusters - ,kHLT = BIT(16) // HLT mode - ,kLUT = BIT(17) // using look up table for cluster's r-phi position - ,kGAUS = BIT(18) // using gauss approx. for cluster's r-phi position + kTrOwner = BIT(14) // toggle online tracklets ownership + ,kClOwner= BIT(15) // toggle cluster ownership + ,kLabels = BIT(16) // toggle MC labels for clusters + ,kSkipTrafo = BIT(17) // skip the coordinate transformation of clusters? + ,kLUT = BIT(18) // using look up table for cluster's r-phi position + ,kGAUS = BIT(19) // using gauss approx. for cluster's r-phi position + ,knewDM = BIT(20) // was the digitsmanger created by raw2clusters? }; struct MaxStruct { - Int_t Row; - Int_t Col; - Int_t Time; - Short_t Signals[3]; - UChar_t padStatus; - Bool_t FivePad; - MaxStruct():Row(-1),Col(0),Time(0),padStatus(0),FivePad(kFALSE) - {memset(Signals, 0, 3*sizeof(Short_t));} + Int_t row; // row of the current cluster candidate + Int_t col; // col of the current cluster candidate + Int_t time; // time -"- + Short_t signals[3]; // signals of the maximum pad and it's twon neigbours + UChar_t padStatus; // padStatus of the current cluster candidate + Bool_t fivePad; // is this cluster candidate part of a 5 pad cluster (two overlaping clusters)? + MaxStruct():row(-1),col(0),time(0),padStatus(0),fivePad(kFALSE) + {memset(signals, 0, 3*sizeof(Short_t));} MaxStruct &operator=(const MaxStruct &a) {memcpy(this, &a, sizeof(MaxStruct)); return *this;} }; @@ -73,7 +77,6 @@ class AliTRDclusterizer : public TNamed Bool_t OpenInput(Int_t nEvent = 0); Bool_t OpenOutput(); Bool_t OpenOutput(TTree *const clusterTree); - Bool_t OpenTrackletOutput(); Bool_t ReadDigits(); Bool_t ReadDigits(AliRawReader *rawReader); @@ -97,18 +100,19 @@ class AliTRDclusterizer : public TNamed void SetReconstructor(const AliTRDReconstructor *rec) {fReconstructor = rec;} static UChar_t GetStatus(Short_t &signal); Int_t GetAddedClusters() const {return fNoOfClusters;} + Int_t GetNTimeBins() const {return fTimeTotal;} - Bool_t IsClustersOwner() const {return TestBit(kClOwner);} + Bool_t IsClustersOwner() const {return TestBit(kClOwner);} virtual void SetClustersOwner(Bool_t own=kTRUE) {SetBit(kClOwner, own); if(!own) {fRecPoints = 0x0; fNoOfClusters=0;} } - void SetTrackletsOwner(Bool_t own=kTRUE) {SetBit(kTrOwner, own); if(!own) {fTracklets = 0x0; } } + void SetTrackletsOwner(Bool_t own=kTRUE) {SetBit(kTrOwner, own); if(!own) {fTracklets = 0x0; } } + void SetSkipTransform(Bool_t b=kTRUE) {SetBit(kSkipTrafo, b); } protected: - void DeConvExp (const Double_t *const source, Double_t *const target - ,const Int_t nTimeTotal, const Int_t nexp); - void TailCancelation(); + void DeConvExp (Short_t *const arr, const Int_t nTime, const Int_t nexp); + void TailCancelation(const AliTRDrecoParam* const recoParam); - Float_t Unfold(Double_t eps, Int_t layer, const Double_t *const padSignal) const; + Float_t Unfold(Double_t eps, Int_t layer, const Double_t *const padSignal) const; void SetPadStatus(const UChar_t status, UChar_t &encoding) const; UChar_t GetPadStatus(UChar_t encoding) const; @@ -117,10 +121,14 @@ protected: Bool_t IsMaximum(const MaxStruct &Max, UChar_t &padStatus, Short_t *const Signals); //for const correctness reasons not const parameters are given separately Bool_t FivePadCluster(MaxStruct &ThisMax, MaxStruct &NeighbourMax); void CreateCluster(const MaxStruct &Max); - inline void CalcAdditionalInfo(const MaxStruct &Max, Short_t *const signals, Int_t &nPadCount); + virtual void AddClusterToArray(AliTRDcluster* cluster); virtual void AddTrackletsToArray(); +private: + inline void CalcAdditionalInfo(const MaxStruct &Max, Short_t *const signals, Int_t &nPadCount); + +protected: const AliTRDReconstructor *fReconstructor; //! reconstructor AliRunLoader *fRunLoader; //! Run Loader TTree *fClusterTree; //! Tree with the cluster @@ -139,8 +147,9 @@ protected: AliTRDarrayADC *fDigits; // Array holding the digits AliTRDSignalIndex *fIndexes; // Array holding the indexes to the digits - Float_t fMaxThresh; // Threshold value for the maximum - Float_t fSigThresh; // Threshold value for the digit signal + Short_t fMaxThresh; // Threshold value for the maximum + Short_t fMaxThreshTest; // Threshold value for the maximum to test agains + Short_t fSigThresh; // Threshold value for the digit signal Float_t fMinMaxCutSigma; // Threshold value for the maximum (cut noise) Float_t fMinLeftRightCutSigma; // Threshold value for the sum pad (cut noise) Int_t fLayer; // Current layer of the detector @@ -156,6 +165,8 @@ protected: Int_t fClusterROC; // The index to the first cluster of a given ROC Int_t firstClusterROC; // The number of cluster in a given ROC Int_t fNoOfClusters; // Number of Clusters already processed and still owned by the clusterizer + Int_t fBaseline; // Baseline of the ADC values + AliTRDrawStream *fRawStream; // Raw data streamer ClassDef(AliTRDclusterizer,6) // TRD clusterfinder