6b3027c6b737774c5cde6a2b8ed344600c993ade
[u/mrichter/AliRoot.git] / TRD / AliTRDReconstructor.h
1 #ifndef ALITRDRECONSTRUCTOR_H
2 #define ALITRDRECONSTRUCTOR_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 // Class for TRD reconstruction                                              //
11 //                                                                           //
12 ///////////////////////////////////////////////////////////////////////////////
13
14 #include "AliReconstructor.h"
15 #include "AliDetectorRecoParam.h"
16 #include "AliTRDrecoParam.h"
17
18 class TClonesArray;
19 class AliRawReader;
20 class AliTRDReconstructor: public AliReconstructor 
21 {
22 public:
23   enum AliTRDsteerParam {
24     kWriteClusters   = BIT(0)
25     ,kSeeding        = BIT(1)
26     ,kSteerPID       = BIT(2)
27     ,kWriteTracklets = BIT(3)
28     ,kDriftGas       = BIT(4)
29     ,kHLT            = BIT(5)
30   };
31   enum AliTRDReconstructorTask {
32     kClusterizer = 0
33     ,kTracker    = 1
34     ,kPID        = 2
35   };
36   enum AliTRDpidMethod {
37     kLQPID = 0,
38     kNNPID = 1
39   };
40   enum AliTRDdriftGas {
41     kXe = 0,
42     kAr = 1
43   };
44   enum{
45     kNNslices = 8
46    ,kLQslices = 3
47   };
48
49   AliTRDReconstructor();
50   AliTRDReconstructor(const AliTRDReconstructor &r);
51   virtual ~AliTRDReconstructor();
52   AliTRDReconstructor& operator = (const AliTRDReconstructor&)          { return *this;}
53         
54         virtual void        Init();
55
56   virtual void        ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
57   virtual AliTracker* CreateTracker() const;
58
59   virtual void        FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd);                    }
60   virtual void        FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
61   static TClonesArray* GetClusters() {return fgClusters;}
62   Int_t               GetNdEdxSlices() const     { return GetPIDMethod() == kNNPID ? kNNslices : kLQslices;}
63   AliTRDdriftGas      GetDriftGas() const        { return fSteerParam&kDriftGas ? kAr : kXe;}
64   AliTRDpidMethod     GetPIDMethod() const       { return fSteerParam&kSteerPID ? kNNPID : kLQPID;}
65   static const AliTRDrecoParam* GetRecoParam() { return dynamic_cast<const AliTRDrecoParam*>(AliReconstructor::GetRecoParam(2)); }
66   Int_t               GetStreamLevel(AliTRDReconstructorTask task) const    { return fStreamLevel[task];} 
67   inline void         GetTCParams(Double_t *par) const;
68   virtual Bool_t      HasDigitConversion() const                   { return kFALSE;           };
69   Bool_t              IsWritingClusters() const  { return fSteerParam&kWriteClusters;}
70   Bool_t              IsWritingTracklets() const { return fSteerParam&kWriteTracklets;}
71   Bool_t              IsHLT() const              { return fSteerParam&kHLT;}
72   Bool_t              IsSeeding() const          { return fSteerParam&kSeeding;}
73
74   virtual void        Reconstruct(AliRawReader *rawReader, TTree *clusterTree) const;
75   virtual void        Reconstruct(TTree *digitsTree, TTree *clusterTree) const;
76
77   static void         SetClusters(TClonesArray *clusters) {fgClusters = clusters;}
78   void                SetOption(Option_t *opt);
79   inline void         SetTCParams(Double_t *par);
80   void                SetStreamLevel(Int_t level, AliTRDReconstructorTask task= kTracker);
81
82 private:
83   UChar_t       fStreamLevel[5];      // stream level for each reconstruction task         
84   UInt_t        fSteerParam;          // steering flags
85   Double_t      fTCParams[8];         // Tail Cancellation parameters for drift gases 
86  
87   static TClonesArray *fgClusters;    // list of clusters for local reconstructor
88
89   ClassDef(AliTRDReconstructor, 1)    //  Class for the TRD reconstruction
90
91 };
92
93 //___________________________________________________
94 inline void AliTRDReconstructor::GetTCParams(Double_t *par) const
95 {
96   if(!par) return;
97   if(GetDriftGas()==kAr) memcpy(par, &fTCParams[4], 4*sizeof(Double_t));
98   else memcpy(par, &fTCParams[0], 4*sizeof(Double_t));
99 }
100
101 //___________________________________________________
102 inline void AliTRDReconstructor::SetTCParams(Double_t *par)
103 {
104   if(!par) return;
105   memcpy(fTCParams, par, 8*sizeof(Double_t));
106 }
107
108 #endif