]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDReconstructor.h
Coding rules
[u/mrichter/AliRoot.git] / TRD / AliTRDReconstructor.h
index fefaa4eb272b4ca0b7e2d7b1895b3e023b47d0b5..81f8630abbc7b3c3836e8ab972a57ea2eaa36f24 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "AliReconstructor.h"
+#include "AliDetectorRecoParam.h"
+#include "AliTRDpidUtil.h"
+#include "AliTRDrecoParam.h"
 
+class TClonesArray;
+class TTreeSRedirector;
 class AliRawReader;
+class AliTRDReconstructor: public AliReconstructor 
+{
+public:
+  enum ETRDReconstructorSteer {
+    kDigitsConversion= BIT(0)
+    ,kTC             = BIT(1) // tail cancelation
+    ,kLUT            = BIT(2) // look up table for cluster position determination 
+    ,kGAUS           = BIT(3) // look up table for cluster position determination 
+    ,kClusterSharing = BIT(4) // Toggle cluster sharing
+    ,kSteerPID       = BIT(5)
+    ,kEightSlices    = BIT(6)
+    ,kWriteClusters  = BIT(7)
+    ,kWriteTracklets = BIT(8)
+    ,kDriftGas       = BIT(9)
+    ,kSeeding        = BIT(10)
+    ,kVertexConstrained = BIT(11) // Perform vertex constrained fit
+    ,kImproveTracklet   = BIT(12) // Improve tracklet in the SA TRD track finder 
+    ,kHLT            = BIT(13)
+    ,kCosmic         = BIT(14)
+    ,kProcTracklets  = BIT(15) // process online tracklets
+    ,kOwner          = BIT(16)
+    ,kNsteer         = 16       // number of tasks
+  };
+  enum ETRDReconstructorTask {
+    kRawReader    = 0
+    ,kClusterizer = 1
+    ,kTracker     = 2
+    ,kPID         = 3
+    ,kNtasks      = 4  // number of reconsruction tasks
+  };
+  enum ETRDReconstructorGas {
+    kXe = 0
+    ,kAr = 1
+  };
+
+  AliTRDReconstructor();
+  AliTRDReconstructor(const AliTRDReconstructor &r);
+  virtual ~AliTRDReconstructor();
+  AliTRDReconstructor& operator = (const AliTRDReconstructor&)          { return *this;}
+       
+       virtual void        Init();
 
-class AliTRDReconstructor: public AliReconstructor {
-
- public:
-
-  AliTRDReconstructor():AliReconstructor()                       { };
-  virtual ~AliTRDReconstructor()                                 { };
-
-  virtual Bool_t      HasDigitConversion() const                 { return kTRUE; };
   virtual void        ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
+  virtual AliTracker* CreateTracker() const;
+  TTreeSRedirector*   GetDebugStream(ETRDReconstructorTask task) const { return task < kNtasks ? fDebugStream[task] : 0x0; }
 
-  virtual Bool_t      HasLocalReconstruction() const             { return kTRUE; };
-  virtual void        Reconstruct(AliRunLoader *runLoader, AliRawReader *rawReader) const;
+  virtual void        FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd);                    }
+  virtual void        FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
+  static TClonesArray* GetClusters() {return fgClusters;}
+  static TClonesArray* GetTracklets() {return fgTracklets;}
+  Int_t               GetNdEdxSlices() const     { return (Int_t)AliTRDpidUtil::GetNdEdxSlices(GetPIDMethod());}
+  ETRDReconstructorGas GetDriftGas() const        { return fSteerParam&kDriftGas ? kAr : kXe;}
+  AliTRDpidUtil::ETRDPIDMethod       GetPIDMethod() const       { return fSteerParam&kSteerPID ? AliTRDpidUtil::kNN : AliTRDpidUtil::kLQ;}
+  static const AliTRDrecoParam* GetRecoParam() { return dynamic_cast<const AliTRDrecoParam*>(AliReconstructor::GetRecoParam(2)); }
+  Int_t               GetStreamLevel(ETRDReconstructorTask task) const    { return fStreamLevel[task];} 
+  inline void         GetTCParams(Double_t *par) const;
+  virtual Bool_t      HasDigitConversion() const { return fSteerParam&kDigitsConversion;  };
+  Bool_t              HasVertexConstrained() const { return fSteerParam&kVertexConstrained; }
+  Bool_t              HasImproveTracklets() const  { return fSteerParam&kImproveTracklet; }
+  Bool_t              IsWritingClusters() const  { return fSteerParam&kWriteClusters;}
+  Bool_t              IsWritingTracklets() const { return fSteerParam&kWriteTracklets;}
+  Bool_t              IsHLT() const              { return fSteerParam&kHLT;}
+  Bool_t              IsSeeding() const          { return fSteerParam&kSeeding;}
+  Bool_t              IsCosmic() const           { return fSteerParam&kCosmic;}
+  Bool_t              IsEightSlices() const      { return fSteerParam&kEightSlices;}
+  Bool_t              UseClusterSharing() const  { return fSteerParam&kClusterSharing;}
+  Bool_t              UseLUT() const             { return fSteerParam&kLUT;}
+  Bool_t              UseGAUS() const             { return fSteerParam&kGAUS;}
+  Bool_t              UseTailCancelation() const { return fSteerParam&kTC;}
+  Bool_t              IsProcessingTracklets() const { return fSteerParam&kProcTracklets;}
+  
+  static void         Options(UInt_t steer=0, UChar_t *stream=0x0);
   virtual void        Reconstruct(AliRawReader *rawReader, TTree *clusterTree) const;
   virtual void        Reconstruct(TTree *digitsTree, TTree *clusterTree) const;
-  virtual void        Reconstruct(AliRunLoader *runLoader) const;
-
-  virtual AliTracker *CreateTracker(AliRunLoader *runLoader) const;
-
-  virtual void        FillESD(AliRunLoader *runLoader, AliRawReader *rawReader, AliESDEvent *esd) const;
-  virtual void        FillESD(AliRawReader *rawReader, TTree *clusterTree, AliESDEvent *esd) const;
-  virtual void        FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
-  virtual void        FillESD(AliRunLoader *runLoader, AliESDEvent *esd) const;
-
-  static  void        SetSeedingOn(Bool_t seeding)               { fgkSeedingOn  = seeding; }  
-  static  void        SetStreamLevel(Int_t level)                { fgStreamLevel = level;   }
-
-  static  Bool_t      SeedingOn()                                { return fgkSeedingOn;     }
-  static  Int_t       StreamLevel()                              { return fgStreamLevel;    }
 
- private:
-
-  static  Bool_t   fgkSeedingOn;  //  Set flag for seeding during reconstruction
-  static  Int_t    fgStreamLevel; //  Flag for streaming
-
-  ClassDef(AliTRDReconstructor,0) //  Class for the TRD reconstruction
+  static void         SetClusters(TClonesArray *clusters) {fgClusters = clusters;} 
+  static void         SetTracklets(TClonesArray *tracklets) {fgTracklets = tracklets;}
+  void               SetOption(Option_t *opt);
+  inline void         SetTCParams(Double_t *par);
+  void                SetStreamLevel(Int_t level, ETRDReconstructorTask task= kTracker);
+
+private:
+  static Char_t    *fgSteerNames[kNsteer];//! steering names
+  static Char_t    *fgSteerFlags[kNsteer];//! steering flags
+  static Char_t    *fgTaskNames[kNtasks]; //! tasks names
+  static Char_t    *fgTaskFlags[kNtasks]; //! tasks flags
+  UChar_t           fStreamLevel[kNtasks];// stream level for each reconstruction task
+  UInt_t            fSteerParam;          // steering bits
+  Double_t          fTCParams[8];         // Tail Cancellation parameters for drift gases 
+  TTreeSRedirector *fDebugStream[kNtasks];// Debug Streamer container;
+  static TClonesArray *fgClusters;    // list of clusters for local reconstructor
+  static TClonesArray *fgTracklets;   // list of online tracklets for local reconstructor
+
+  ClassDef(AliTRDReconstructor, 2)    //  Class for the TRD reconstruction
 
 };
 
+//___________________________________________________
+inline void AliTRDReconstructor::GetTCParams(Double_t *par) const
+{
+  if(!par) return;
+  if(GetDriftGas()==kAr) memcpy(par, &fTCParams[4], 4*sizeof(Double_t));
+  else memcpy(par, &fTCParams[0], 4*sizeof(Double_t));
+}
+
+//___________________________________________________
+inline void AliTRDReconstructor::SetTCParams(Double_t *par)
+{
+  if(!par) return;
+  memcpy(fTCParams, par, 8*sizeof(Double_t));
+}
+
 #endif