/* $Id$ */
+////////////////////////////////////////////////////////////////////////////
+// //
+// TRD cluster finder //
+// //
+////////////////////////////////////////////////////////////////////////////
+
#include <TNamed.h>
-#include <TObjArray.h>
class TFile;
class TTree;
+class TClonesArray;
+
class AliRunLoader;
-class AliTRDparameter;
+class AliRawReader;
+
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();
+ AliTRDclusterizer &operator=(const AliTRDclusterizer &c);
-///////////////////////////////////////////////////////
-// Finds and handles cluster //
-///////////////////////////////////////////////////////
+ virtual void Copy(TObject &c) const;
-class AliTRDclusterizer : public TNamed {
+ 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);
- public:
+ virtual Bool_t ReadDigits();
+ virtual Bool_t ReadDigits(AliRawReader *rawReader);
+ virtual Bool_t ReadDigits(TTree *digitsTree);
- AliTRDclusterizer();
- AliTRDclusterizer(const Text_t* name, const Text_t* title);
- AliTRDclusterizer(const AliTRDclusterizer &c);
- virtual ~AliTRDclusterizer();
- AliTRDclusterizer &operator=(const AliTRDclusterizer &c);
+ virtual Bool_t WriteClusters(Int_t det);
+ void ResetRecPoints();
+ TClonesArray *RecPoints();
+ Bool_t WriteTracklets(Int_t det);
- virtual void Copy(TObject &c);
- 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 MakeClusters() = 0;
- virtual Bool_t WriteClusters(Int_t det);
- virtual void SetParameter(AliTRDparameter *par) { fPar = par; };
- void SetVerbose(Int_t v = 1) { fVerbose = v; };
+ virtual Bool_t Raw2Clusters(AliRawReader *rawReader);
+ virtual Bool_t Raw2ClustersChamber(AliRawReader *rawReader);
- AliTRDparameter *GetParameter() const { return fPar; };
+ virtual Bool_t MakeClusters();
+ virtual Bool_t MakeClusters(Int_t det);
- TObjArray* RecPoints() {if (!fRecPoints) fRecPoints = new TObjArray(400); return fRecPoints;}
- virtual void AddCluster(Float_t *pos, Int_t det, Float_t amp, Int_t *tracks
- , Float_t *sig, Int_t iType);
- void ResetRecPoints() {if (fRecPoints) fRecPoints->Delete();}
+ 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:
+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);
- AliRunLoader * fRunLoader; //! Run Loader
-
- TTree *fClusterTree; //! Tree with the cluster
- AliTRDparameter *fPar; // TRD digitization parameter object
+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
- TObjArray* fRecPoints; //! Array of clusters
- Int_t fVerbose; // Sets the verbose level
+ Int_t fLUTbin; // Number of bins of the LUT
+ Double_t *fLUT; //! The lookup table
- ClassDef(AliTRDclusterizer,3) // TRD-Cluster manager base class
+ ClassDef(AliTRDclusterizer,6) // TRD clusterfinder
};