Introduce new NtimeBin consistency checks
[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 "AliRecoParam.h"
16 #include "AliDetectorRecoParam.h"
17 #include "AliTRDpidUtil.h"
18 #include "AliTRDrecoParam.h"
19 #include "AliTRDdigitsParam.h"
20
21 class TClonesArray;
22 class TTreeSRedirector;
23 class AliRawReader;
24 class AliTRDReconstructor: public AliReconstructor 
25 {
26 public:
27   enum ETRDReconstructorSteer {
28     kDigitsConversion= BIT(0)
29     ,kWriteClusters  = BIT(1)
30     ,kWriteTracklets = BIT(2)
31     ,kSeeding        = BIT(3)
32     ,kHLT            = BIT(4)
33     ,kProcTracklets  = BIT(5) // process online tracklets
34     ,kDebug          = BIT(6)
35     ,kOwner          = BIT(7)
36     ,kNsteer         = 7       // number of tasks
37   };
38   AliTRDReconstructor();
39   virtual ~AliTRDReconstructor();
40         
41         virtual void        Init();
42
43   virtual void        ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
44   virtual AliTracker* CreateTracker() const;
45   TTreeSRedirector*   GetDebugStream(AliTRDrecoParam::ETRDReconstructionTask task) const { return task < AliTRDrecoParam::kTRDreconstructionTasks ? fDebugStream[task] : 0x0; }
46
47   virtual void        FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd);                    }
48   virtual void        FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
49   static TClonesArray* GetClusters() {return fgClusters;}
50   static TClonesArray* GetTracklets() {return fgTracklets;}
51   static Int_t        GetNTimeBins() {return fgNTimeBins;}
52   Int_t               GetNdEdxSlices() const     { return (Int_t)AliTRDpidUtil::GetNdEdxSlices(GetPIDMethod());}
53   AliTRDpidUtil::ETRDPIDMethod       GetPIDMethod() const       { return GetRecoParam()->IsPIDNeuralNetwork() ? AliTRDpidUtil::kNN : AliTRDpidUtil::kLQ;}
54   static AliTRDdigitsParam* GetDigitsParam() { return fgDigitsParam;}
55   static const AliTRDrecoParam* GetRecoParam() { return dynamic_cast<const AliTRDrecoParam*>(AliReconstructor::GetRecoParam(2)); }
56   virtual Bool_t      HasDigitConversion() const { return fSteerParam&kDigitsConversion;  };
57   Bool_t              HasDigitsParam() const { return Bool_t(fgDigitsParam);}
58   Bool_t              IsCosmic() const { return GetRecoParam()->GetEventSpecie() & AliRecoParam::kCosmic;}
59   Bool_t              IsWritingClusters() const  { return fSteerParam&kWriteClusters;}
60   Bool_t              IsWritingTracklets() const { return fSteerParam&kWriteTracklets;}
61   Bool_t              IsHLT() const              { return fSteerParam&kHLT;}
62   Bool_t              IsSeeding() const          { return fSteerParam&kSeeding;}
63   Bool_t              IsProcessingTracklets() const { return fSteerParam&kProcTracklets;}
64   Bool_t              IsDebugStreaming() const { return fSteerParam&kDebug;}
65
66   static void         Options(UInt_t steer=0);
67   virtual void        Reconstruct(AliRawReader *rawReader, TTree *clusterTree) const;
68   virtual void        Reconstruct(TTree *digitsTree, TTree *clusterTree) const;
69
70   static void         SetClusters(TClonesArray *clusters)  { fgClusters = clusters;} 
71   static void         SetTracklets(TClonesArray *tracklets) { fgTracklets = tracklets;}
72   static void         SetDigitsParam(AliTRDdigitsParam const *par);
73   void                SetOption(Option_t *opt);
74
75 private:
76   AliTRDReconstructor(const AliTRDReconstructor &r); //Not implemented
77   AliTRDReconstructor& operator = (const AliTRDReconstructor&); //Not implemented
78
79   static Char_t const *fgSteerNames[kNsteer];//! steering names
80   static Char_t const *fgSteerFlags[kNsteer];//! steering flags
81   static Char_t const   *fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks names
82   static Char_t const   *fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks flags
83   UInt_t            fSteerParam;          // steering bits
84   TTreeSRedirector *fDebugStream[AliTRDrecoParam::kTRDreconstructionTasks];// Debug Streamer container;
85  
86   static AliTRDdigitsParam *fgDigitsParam; // Digits Param information
87   static TClonesArray *fgClusters;    // list of clusters for local reconstructor
88   static TClonesArray *fgTracklets;   // list of online tracklets for local reconstructor
89   static Int_t         fgNTimeBins;   // number of time bins as given by the clusterizer
90
91   ClassDef(AliTRDReconstructor, 2)    //  Class for the TRD reconstruction
92
93 };
94
95
96
97 #endif