/* $Id$ */
+////////////////////////////////////////////////////////////////////////////
+// //
+// TRD cluster finder //
+// //
+////////////////////////////////////////////////////////////////////////////
+
#include <TNamed.h>
class TFile;
+class TTree;
+class TClonesArray;
-///////////////////////////////////////////////////////
-// Finds and handles cluster //
-///////////////////////////////////////////////////////
-
-class AliTRDclusterizer : public TNamed {
-
- public:
+class AliRunLoader;
+class AliRawReader;
- AliTRDclusterizer();
- AliTRDclusterizer(const Text_t* name, const Text_t* title);
+class AliTRD;
+class AliTRDcluster;
+class AliTRDdataArrayS;
+class AliTRDdataArrayDigits;
+class AliTRDdataArrayF;
+class AliTRDdigitsManager;
+class AliTRDSignalIndex;
+class AliTRDtransform;
+class AliTRDCalROC;
+class AliTRDReconstructor;
+class AliTRDclusterizer : public TNamed
+{
+public:
+ // steering flags
+ enum{
+ kOwner = BIT(14)
+ };
+
+ AliTRDclusterizer(AliTRDReconstructor *rec = 0x0);
+ AliTRDclusterizer(const Text_t* name, const Text_t* title, AliTRDReconstructor *rec = 0x0);
AliTRDclusterizer(const AliTRDclusterizer &c);
- virtual ~AliTRDclusterizer();
+ virtual ~AliTRDclusterizer();
AliTRDclusterizer &operator=(const AliTRDclusterizer &c);
- virtual void Copy(TObject &c);
- virtual void Init();
- virtual Bool_t Open(const Char_t *name, Int_t nEvent = 0);
- virtual Bool_t MakeClusters() = 0;
- virtual Bool_t WriteClusters(Int_t det);
+ virtual void Copy(TObject &c) const;
- protected:
+ virtual Bool_t Open(const Char_t *name, Int_t nEvent = 0);
+ virtual Bool_t OpenInput(Int_t nEvent = 0);
+ virtual Bool_t OpenOutput();
+ virtual Bool_t OpenOutput(TTree *clusterTree);
- TFile *fInputFile; //! AliROOT input file
-
- Int_t fEvent; //! Event number
+ virtual Bool_t ReadDigits();
+ virtual Bool_t ReadDigits(AliRawReader *rawReader);
+ virtual Bool_t ReadDigits(TTree *digitsTree);
+
+ virtual Bool_t WriteClusters(Int_t det);
+ void ResetRecPoints();
+ TClonesArray *RecPoints();
+ Bool_t WriteTracklets(Int_t det);
+
+ virtual Bool_t Raw2Clusters(AliRawReader *rawReader);
+ virtual Bool_t Raw2ClustersChamber(AliRawReader *rawReader);
+
+ virtual Bool_t MakeClusters();
+ virtual Bool_t MakeClusters(Int_t det);
+
+ virtual Bool_t AddLabels(Int_t idet, Int_t firstClusterROC, Int_t nClusterROC);
+ virtual Bool_t SetAddLabels(Bool_t kset) { fAddLabels = kset;
+ return fAddLabels; } // should we assign labels to clusters
+ virtual void SetRawVersion(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);
+
+ Bool_t IsClustersOwner() const {return TestBit(kOwner);}
+ void SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fRecPoints = 0x0;}
+
+protected:
+ void DeConvExp(Double_t *source, Double_t *target
+ , Int_t nTimeTotal, Int_t nexp);
+ void TailCancelation(AliTRDdataArrayDigits *digitsIn
+ , AliTRDdataArrayF *digitsOut
+ , AliTRDSignalIndex *indexesIn
+ , AliTRDSignalIndex *indexesOut
+ , Int_t nTimeTotal
+ , Float_t ADCthreshold
+ , AliTRDCalROC *calGainFactorROC
+ , Float_t calGainFactorDetValue);
+ virtual Double_t Unfold(Double_t eps, Int_t layer, Double_t *padSignal);
+ 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;
+ virtual void ResetHelperIndexes(AliTRDSignalIndex *indexesIn);
+
+protected:
+ const AliTRDReconstructor *fReconstructor; //! reconstructor
+ AliRunLoader *fRunLoader; //! Run Loader
+ TTree *fClusterTree; //! Tree with the cluster
+ TClonesArray *fRecPoints; //! Array of clusters
+
+ TTree *fTrackletTree; //! Tree for tracklets
+
+ AliTRDdigitsManager *fDigitsManager; //! TRD digits manager
+
+ UInt_t **fTrackletContainer; //! tracklet container
+
+ Bool_t fAddLabels; // Should clusters have MC labels?
+ Int_t fRawVersion; // Expected raw version of the data - default is 2
+
+ AliTRDSignalIndex *fIndexesOut; //! Helper indexes for clusterization
+ AliTRDSignalIndex *fIndexesMaxima; //! Helper indexes for clusterization
+
+ AliTRDtransform *fTransform; //! Transforms the reconstructed space points
+
+ Int_t fLUTbin; // Number of bins of the LUT
+ Double_t *fLUT; //! The lookup table
- ClassDef(AliTRDclusterizer,1) // TRD-Cluster manager base class
+ ClassDef(AliTRDclusterizer,6) // TRD clusterfinder
};