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