]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDclusterizer.h
Introduce new digits structures by Hermes with ZS in digitzer stage
[u/mrichter/AliRoot.git] / TRD / AliTRDclusterizer.h
1 #ifndef ALITRDCLUSTERIZER_H
2 #define ALITRDCLUSTERIZER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ////////////////////////////////////////////////////////////////////////////
9 //                                                                        //
10 //  TRD cluster finder                                                    //
11 //                                                                        //
12 ////////////////////////////////////////////////////////////////////////////
13
14 #include <TNamed.h>
15
16 class TFile;
17 class TTree;
18 class TClonesArray;
19
20 class AliRunLoader;
21 class AliRawReader;
22
23 class AliTRD;
24 class AliTRDcluster;
25
26 class AliTRDarrayADC;
27 class AliTRDarraySignal;
28 class AliTRDdigitsManager;
29 class AliTRDSignalIndex;
30 class AliTRDtransform;
31 class AliTRDCalROC;
32 class AliTRDReconstructor;
33
34 class AliTRDclusterizer : public TNamed 
35 {
36
37  public:
38
39   // steering flags
40   enum{
41     kOwner = BIT(14)
42   };
43   
44   AliTRDclusterizer(AliTRDReconstructor *rec = 0x0);
45   AliTRDclusterizer(const Text_t* name, const Text_t* title, AliTRDReconstructor *rec = 0x0);
46   AliTRDclusterizer(const AliTRDclusterizer &c);
47   virtual         ~AliTRDclusterizer();
48   AliTRDclusterizer &operator=(const AliTRDclusterizer &c);
49
50   virtual void     Copy(TObject &c) const;
51
52   virtual Bool_t   Open(const Char_t *name, Int_t nEvent = 0);
53   virtual Bool_t   OpenInput(Int_t nEvent = 0);
54   virtual Bool_t   OpenOutput();
55   virtual Bool_t   OpenOutput(TTree *clusterTree);
56
57   virtual Bool_t   ReadDigits();
58   virtual Bool_t   ReadDigits(AliRawReader *rawReader);
59   virtual Bool_t   ReadDigits(TTree *digitsTree);
60
61   virtual Bool_t   WriteClusters(Int_t det);
62           void     ResetRecPoints();
63   TClonesArray       *RecPoints();
64           Bool_t   WriteTracklets(Int_t det);
65
66   virtual Bool_t   Raw2Clusters(AliRawReader *rawReader);
67   virtual Bool_t   Raw2ClustersChamber(AliRawReader *rawReader);
68
69   virtual Bool_t   MakeClusters();
70   virtual Bool_t   MakeClusters(Int_t det);
71
72   virtual Bool_t   AddLabels(Int_t idet, Int_t firstClusterROC, Int_t nClusterROC);
73   virtual Bool_t   SetAddLabels(Bool_t kset) { fAddLabels = kset; 
74             return fAddLabels;  } // should we assign labels to clusters
75   virtual void     SetRawVersion(Int_t iver) { fRawVersion = iver; } // set the expected raw data version
76   void             SetReconstructor(const AliTRDReconstructor *rec) {fReconstructor = rec;}
77   static UChar_t   GetStatus(Short_t &signal);
78
79   Bool_t           IsClustersOwner() const {return TestBit(kOwner);}
80   void             SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fRecPoints = 0x0;}
81
82  protected:
83
84   void             DeConvExp(Double_t *source, Double_t *target
85                            , Int_t nTimeTotal, Int_t nexp);
86   void             TailCancelation(AliTRDarrayADC *digitsIn
87                                  , AliTRDarraySignal *digitsOut 
88                                  , AliTRDSignalIndex *indexesIn
89                                  , AliTRDSignalIndex *indexesOut
90                                  , Int_t nTimeTotal
91                                  , Float_t ADCthreshold
92                                  , AliTRDCalROC *calGainFactorROC
93                                  , Float_t calGainFactorDetValue);
94   virtual Double_t Unfold(Double_t eps, Int_t layer, Double_t *padSignal);
95           Double_t GetCOG(Double_t signal[5]) const; 
96   void             FillLUT();
97           Double_t LUTposition(Int_t ilayer, Double_t ampL, Double_t ampC, Double_t ampR) const;
98   virtual void     ResetHelperIndexes(AliTRDSignalIndex *indexesIn);
99
100   const AliTRDReconstructor *fReconstructor;       //! reconstructor
101   AliRunLoader        *fRunLoader;           //! Run Loader
102   TTree               *fClusterTree;         //! Tree with the cluster
103   TClonesArray        *fRecPoints;           //! Array of clusters
104
105   TTree               *fTrackletTree;        //! Tree for tracklets
106
107   AliTRDdigitsManager *fDigitsManager;       //! TRD digits manager
108
109   UInt_t              **fTrackletContainer;  //! tracklet container
110
111   Bool_t               fAddLabels;           //  Should clusters have MC labels?
112   Int_t                fRawVersion;          //  Expected raw version of the data - default is 2
113
114   AliTRDSignalIndex   *fIndexesOut;          //! Helper indexes for clusterization
115   AliTRDSignalIndex   *fIndexesMaxima;       //! Helper indexes for clusterization
116
117   AliTRDtransform     *fTransform;           //! Transforms the reconstructed space points
118
119   Int_t                fLUTbin;              //  Number of bins of the LUT
120   Double_t            *fLUT;                 //! The lookup table
121
122   ClassDef(AliTRDclusterizer,6)              //  TRD clusterfinder
123
124 };
125
126 #endif