new flag for HLT tracking
[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
45   AliTRDReconstructor();
46   AliTRDReconstructor(const AliTRDReconstructor &r);
47   virtual ~AliTRDReconstructor() {;}
48   AliTRDReconstructor& operator = (const AliTRDReconstructor&)          { return *this;}
49         
50         virtual void        Init();
51
52   virtual void        ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
53   virtual AliTracker* CreateTracker() const;
54
55   virtual void        FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd);                    }
56   virtual void        FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
57   static TClonesArray* GetClusters() {return fgClusters;}
58   Int_t               GetNdEdxSlices() const     { return GetPIDMethod() == kNNPID ? kNNslices : kLQslices;}
59   AliTRDdriftGas      GetDriftGas() const        { return fSteerParam&kDriftGas ? kAr : kXe;}
60   AliTRDpidMethod     GetPIDMethod() const       { return fSteerParam&kSteerPID ? kNNPID : kLQPID;}
61   static const AliTRDrecoParam* GetRecoParam() { return dynamic_cast<const AliTRDrecoParam*>(AliReconstructor::GetRecoParam(2)); }
62   Int_t               GetStreamLevel(AliTRDReconstructorTask task) const    { return fStreamLevel[task];} 
63   inline void         GetTCParams(Double_t *par) const;
64   virtual Bool_t      HasDigitConversion() const                   { return kFALSE;           };
65   Bool_t              IsWritingClusters() const  { return fSteerParam&kWriteClusters;}
66   Bool_t              IsWritingTracklets() const { return fSteerParam&kWriteTracklets;}
67   Bool_t              IsHLT() const              { return fSteerParam&kHLT;}
68   Bool_t              IsSeeding() const          { return fSteerParam&kSeeding;}
69
70   virtual void        Reconstruct(AliRawReader *rawReader, TTree *clusterTree) const;
71   virtual void        Reconstruct(TTree *digitsTree, TTree *clusterTree) const;
72
73   static void         SetClusters(TClonesArray *clusters) {fgClusters = clusters;}
74   void                SetOption(Option_t *opt);
75   inline void         SetTCParams(Double_t *par);
76   void                SetStreamLevel(Int_t level, AliTRDReconstructorTask task= kTracker);
77
78 private:
79   enum{
80     kNNslices = 8
81    ,kLQslices = 3
82   };
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