X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDclusterizer.h;h=7a9414b6f76792502abe440734b2187a88f290e8;hb=a1c095f1e1c202ff3b6e939fd376eda2fcf33737;hp=ee10beaf3fe43fdc5f5bdd1d474c9bcd807af9d4;hpb=6cd9a21f113f01fb0e759ce8e417b01fdafebd72;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDclusterizer.h b/TRD/AliTRDclusterizer.h index ee10beaf3fe..7a9414b6f76 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,26 +40,30 @@ class AliTRDclusterizer : public TNamed public: // steering flags + // bits from 0-13 are reserved by ROOT (see TObject.h) enum{ - kIsHLT = BIT(12), // are we just in HLT? - kIsLUT = BIT(13), // are we using look up table for center of the cluster? - kOwner = BIT(14), // is the clusterizer owner of the clusters? - kAddLabels = BIT(15) // Should clusters have MC labels? + 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? + ,kTracksOwner = BIT(21) // toggle GTU track ownership }; struct MaxStruct { - Int_t Row; - Int_t Col; - Int_t Time; - UChar_t padStatus; - Short_t Signals[3]; - Bool_t FivePad; - MaxStruct():Row(-1),Col(0),Time(0),padStatus(0),FivePad(kFALSE) - {} + 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) - {Row=a.Row; Col=a.Col; Time=a.Time; padStatus=a.padStatus; FivePad=a.FivePad; - memcpy(Signals, a.Signals, 3*sizeof(Signals[0])); return *this;} + {memcpy(this, &a, sizeof(MaxStruct)); return *this;} }; AliTRDclusterizer(const AliTRDReconstructor *const rec = 0x0); @@ -71,7 +77,7 @@ class AliTRDclusterizer : public TNamed Bool_t Open(const Char_t *name, Int_t nEvent = 0); Bool_t OpenInput(Int_t nEvent = 0); Bool_t OpenOutput(); - Bool_t OpenOutput(TTree *clusterTree); + Bool_t OpenOutput(TTree *const clusterTree); Bool_t ReadDigits(); Bool_t ReadDigits(AliRawReader *rawReader); @@ -80,7 +86,8 @@ class AliTRDclusterizer : public TNamed Bool_t WriteClusters(Int_t det); void ResetRecPoints(); virtual TClonesArray *RecPoints(); - Bool_t WriteTracklets(Int_t det); + virtual TClonesArray *TrackletsArray(); + virtual TClonesArray *TracksArray(); Bool_t Raw2Clusters(AliRawReader *rawReader); Bool_t Raw2ClustersChamber(AliRawReader *rawReader); @@ -89,59 +96,64 @@ class AliTRDclusterizer : public TNamed Bool_t MakeClusters(Int_t det); Bool_t AddLabels(); - Bool_t SetAddLabels(const Bool_t kset) { SetBit(kAddLabels, kset); return TestBit(kAddLabels); } // should we assign labels to clusters + Bool_t SetUseLabels(const Bool_t kset) { SetBit(kLabels, kset); return TestBit(kLabels); } // should we assign labels to clusters void SetRawVersion(const Int_t iver) { fRawVersion = iver; } // set the expected raw data version void SetReconstructor(const AliTRDReconstructor *rec) {fReconstructor = rec;} static UChar_t GetStatus(Short_t &signal); - Int_t GetAddedClusters() {return fNoOfClusters;} + Int_t GetAddedClusters() const {return fNoOfClusters;} + Int_t GetNTimeBins() const {return fTimeTotal;} - Bool_t IsClustersOwner() const {return TestBit(kOwner);} - virtual void SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) {fRecPoints = 0x0; fNoOfClusters=0;} } + 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 SetTracksOwner(Bool_t own=kTRUE) {SetBit(kTracksOwner, own); if(!own) {fTracks = 0x0; } } + void SetSkipTransform(Bool_t b=kTRUE) {SetBit(kSkipTrafo, b); } - protected: +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, Double_t *padSignal) const; - Double_t GetCOG(Double_t signal[5]) const; - void FillLUT(); - Double_t LUTposition(Int_t ilayer, Double_t ampL, Double_t ampC, Double_t ampR) 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); + void SetPadStatus(const UChar_t status, UChar_t &encoding) const; UChar_t GetPadStatus(UChar_t encoding) const; Int_t GetCorruption(UChar_t encoding) const; 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); + + virtual void AddClusterToArray(AliTRDcluster* cluster); + +private: inline void CalcAdditionalInfo(const MaxStruct &Max, Short_t *const signals, Int_t &nPadCount); - virtual void AddClusterToArray(AliTRDcluster *cluster); +protected: const AliTRDReconstructor *fReconstructor; //! reconstructor AliRunLoader *fRunLoader; //! Run Loader TTree *fClusterTree; //! Tree with the cluster TClonesArray *fRecPoints; //! Array of clusters + TClonesArray *fTracklets; //! Array of online tracklets + TClonesArray *fTracks; //! Array of GTU tracks TTree *fTrackletTree; //! Tree for tracklets AliTRDdigitsManager *fDigitsManager; //! TRD digits manager UInt_t **fTrackletContainer; //! tracklet container + // legacy code to avoid breakint AliHLTTRDClusterizer + // but it's useless Int_t fRawVersion; // Expected raw version of the data - default is 2 AliTRDtransform *fTransform; //! Transforms the reconstructed space points - Int_t fLUTbin; // Number of bins of the LUT - Double_t *fLUT; //! The lookup table - AliTRDarrayADC *fDigits; // Array holding the digits AliTRDSignalIndex *fIndexes; // Array holding the indexes to the digits - Float_t fADCthresh; // ADC thresholds: There is no ADC threshold anymore, and simParam should not be used in clusterizer. KO - 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 @@ -157,6 +169,8 @@ class AliTRDclusterizer : public TNamed 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