added slewing correction by data
[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 #include "AliESDTrdTrigger.h"
21
22 class TClonesArray;
23 class TTreeSRedirector;
24 class AliRawReader;
25 class AliTRDclusterizer;
26 class AliTRDonlineTrackMatching;
27 class AliTRDReconstructor: public AliReconstructor 
28 {
29 public:
30   enum ETRDReconstructorSteer {
31     kDigitsConversion= BIT(0)
32     ,kWriteClusters  = BIT(1)
33     ,kWriteTracklets = BIT(2)
34     ,kSeeding        = BIT(3)
35     ,kHLT            = BIT(4)
36     ,kProcTracklets  = BIT(5) // process online tracklets
37     ,kDebug          = BIT(6)
38     ,kClRadialCorr   = BIT(7) // toggle radial correction in clusters
39     ,kOwner          = BIT(8)
40     ,kNsteer         = 8      // number of tasks
41   };
42   AliTRDReconstructor();
43   virtual ~AliTRDReconstructor();
44         
45         virtual void        Init();
46
47   virtual void        ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
48   virtual AliTracker* CreateTracker() const;
49   TTreeSRedirector*   GetDebugStream(AliTRDrecoParam::ETRDReconstructionTask task) const { return task < AliTRDrecoParam::kTRDreconstructionTasks ? fDebugStream[task] : NULL; }
50
51   virtual void        FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd);                    }
52   virtual void        FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
53   static TClonesArray* GetClusters();
54   static TClonesArray* GetTracklets(const char *trkltype = "");
55   static TClonesArray* GetTracks();
56   static Int_t        GetNTimeBins()             { return fgNTimeBins;}
57   Int_t               GetNdEdxSlices() const     { return (Int_t)AliTRDpidUtil::GetNdEdxSlices(GetPIDMethod());}
58   AliTRDpidUtil::ETRDPIDMethod       GetPIDMethod() const       { return GetRecoParam()->IsPIDNeuralNetwork() ? AliTRDpidUtil::kNN : AliTRDpidUtil::kLQ;}
59   static const AliTRDrecoParam* GetRecoParam()   { return dynamic_cast<const AliTRDrecoParam*>(AliReconstructor::GetRecoParam(2)); }
60   static Float_t      GetMinClustersInTrack()    { return fgkMinClustersInTrack;}
61   static Float_t      GetLabelFraction()         { return fgkLabelFraction;}
62   static Double_t     GetMaxChi2()               { return fgkMaxChi2;}
63   static Double_t     GetMaxSnp()                { return fgkMaxSnp;}
64   static Double_t     GetMaxStep()               { return fgkMaxStep;}
65   static Double_t     GetEpsilon()               { return fgkEpsilon;}
66
67   virtual Bool_t      HasDigitConversion() const { return fSteerParam&kDigitsConversion;  };
68   Bool_t              IsCosmic() const           { return GetRecoParam()->GetEventSpecie() & AliRecoParam::kCosmic;}
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   Bool_t              IsProcessingTracklets() const { return fSteerParam&kProcTracklets;}
74   Bool_t              IsDebugStreaming() const   { return fSteerParam&kDebug;}
75   Bool_t              UseClusterRadialCorrection() const { return fSteerParam&kClRadialCorr;}
76
77   static void         Options(UInt_t steer=0);
78   virtual void        Reconstruct(AliRawReader *rawReader, TTree *clusterTree) const;
79   virtual void        Reconstruct(TTree *digitsTree, TTree *clusterTree) const;
80
81  static void         SetClusters(TClonesArray *clusters)  { fgClusters = clusters;}
82  static void         SetTracklets(TClonesArray *tracklets) { fgTracklets = tracklets;}
83  static void         SetTracks(TClonesArray *tracks) { fgTracks = tracks;}
84   void                SetOption(Option_t *opt);
85
86 private:
87   AliTRDReconstructor(const AliTRDReconstructor &r); //Not implemented
88   AliTRDReconstructor& operator = (const AliTRDReconstructor&); //Not implemented
89   void                ResetContainers() const;
90
91   static Char_t const *fgSteerNames[kNsteer];//! steering names
92   static Char_t const *fgSteerFlags[kNsteer];//! steering flags
93   static Char_t const   *fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks names
94   static Char_t const   *fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks flags
95   UInt_t            fSteerParam;          // steering bits
96   // configuration vars for tracking
97   static const Double_t    fgkMaxChi2;                  // Max increment in track chi2
98   static const Float_t     fgkMinClustersInTrack;       // Min number of clusters in track
99   static const Float_t     fgkLabelFraction;            // Min fraction of same label
100   static const Double_t    fgkMaxSnp;                   // Maximal snp for tracking
101   static const Double_t    fgkMaxStep;                  // Maximal step for tracking
102   static const Double_t    fgkEpsilon;                  // Precision of radial coordinate
103
104   TTreeSRedirector *fDebugStream[AliTRDrecoParam::kTRDreconstructionTasks];// Debug Streamer container;
105  
106   static TClonesArray *fgClusters;    //  list of clusters for local reconstructor
107   static TClonesArray *fgTracklets;   //  list of online tracklets for local reconstructor
108   static TClonesArray *fgTracks;      //  list of GTU tracks for local reconstructor
109   static Int_t         fgNTimeBins;   //  number of time bins as given by the clusterizer
110   AliTRDclusterizer   *fClusterizer;  //! instance of TRD clusterizer
111   static AliTRDonlineTrackMatching fgOnlineTrackMatcher; // track matcher between on-line and off-line track
112   static AliESDTrdTrigger fgTriggerFlags; //  L1 trigger flags
113
114   ClassDef(AliTRDReconstructor, 5)    //  Class for the TRD reconstruction
115
116 };
117
118
119
120 #endif
121