ROOT logo
#ifndef ALITRDRECONSTRUCTOR_H
#define ALITRDRECONSTRUCTOR_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Class for TRD reconstruction                                              //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "AliReconstructor.h"
#include "AliRecoParam.h"
#include "AliDetectorRecoParam.h"
#include "AliTRDpidUtil.h"
#include "AliTRDrecoParam.h"
#include "AliTRDdigitsParam.h"
#include "AliESDTrdTrigger.h"

class TClonesArray;
class TTreeSRedirector;
class AliRawReader;
class AliTRDclusterizer;
class AliTRDonlineTrackMatching;
class AliTRDReconstructor: public AliReconstructor 
{
public:
  enum ETRDReconstructorSteer {
    kDigitsConversion= BIT(0)
    ,kWriteClusters  = BIT(1)
    ,kWriteTracklets = BIT(2)
    ,kSeeding        = BIT(3)
    ,kHLT            = BIT(4)
    ,kProcTracklets  = BIT(5) // process online tracklets
    ,kDebug          = BIT(6)
    ,kClRadialCorr   = BIT(7) // toggle radial correction in clusters
    ,kOwner          = BIT(8)
    ,kNsteer         = 8      // number of tasks
  };
  AliTRDReconstructor();
  virtual ~AliTRDReconstructor();
	
	virtual void        Init();

  virtual void        ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
  virtual AliTracker* CreateTracker() const;
  TTreeSRedirector*   GetDebugStream(AliTRDrecoParam::ETRDReconstructionTask task) const { return task < AliTRDrecoParam::kTRDreconstructionTasks ? fDebugStream[task] : NULL; }

  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();
  static TClonesArray* GetTracklets(const char *trkltype = "");
  static TClonesArray* GetTracks();
  static Int_t        GetNTimeBins()             { return fgNTimeBins;}
  Int_t               GetNdEdxSlices() const     { return (Int_t)AliTRDpidUtil::GetNdEdxSlices(GetPIDMethod());}
  AliTRDpidUtil::ETRDPIDMethod       GetPIDMethod() const       { return GetRecoParam()->IsPIDNeuralNetwork() ? AliTRDpidUtil::kNN : AliTRDpidUtil::kLQ;}
  static const AliTRDrecoParam* GetRecoParam()   { return dynamic_cast<const AliTRDrecoParam*>(AliReconstructor::GetRecoParam(2)); }
  static Float_t      GetMinClustersInTrack()    { return fgkMinClustersInTrack;}
  static Float_t      GetLabelFraction()         { return fgkLabelFraction;}
  static Double_t     GetMaxChi2()               { return fgkMaxChi2;}
  static Double_t     GetMaxSnp()                { return fgkMaxSnp;}
  static Double_t     GetMaxStep()               { return fgkMaxStep;}
  static Double_t     GetEpsilon()               { return fgkEpsilon;}

  virtual Bool_t      HasDigitConversion() const { return fSteerParam&kDigitsConversion;  };
  Bool_t              IsCosmic() const           { return GetRecoParam()->GetEventSpecie() & AliRecoParam::kCosmic;}
  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              IsProcessingTracklets() const { return fSteerParam&kProcTracklets;}
  Bool_t              IsDebugStreaming() const   { return (fSteerParam&kDebug || AliTRDReconstructor::GetStreamLevel()>0);}
  Bool_t              UseClusterRadialCorrection() const { return fSteerParam&kClRadialCorr;}

  static void         Options(UInt_t steer=0);
  virtual void        Reconstruct(AliRawReader *rawReader, TTree *clusterTree) const;
  virtual void        Reconstruct(TTree *digitsTree, TTree *clusterTree) const;

 static void         SetClusters(TClonesArray *clusters)  { fgClusters = clusters;}
 static void         SetTracklets(TClonesArray *tracklets) { fgTracklets = tracklets;}
 static void         SetTracks(TClonesArray *tracks) { fgTracks = tracks;}
  void	              SetOption(Option_t *opt);
  static Int_t GetStreamLevel()               { return fgStreamLevel;}
  static void  SetStreamLevel(Int_t level) { fgStreamLevel = level;}

private:
  AliTRDReconstructor(const AliTRDReconstructor &r); //Not implemented
  AliTRDReconstructor& operator = (const AliTRDReconstructor&); //Not implemented
  void                ResetContainers() const;
  static Int_t               fgStreamLevel; // flag for streaming      - for TRD reconstruction

  static Char_t const *fgSteerNames[kNsteer];//! steering names
  static Char_t const *fgSteerFlags[kNsteer];//! steering flags
  static Char_t const   *fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks names
  static Char_t const   *fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks]; //! tasks flags
  UInt_t            fSteerParam;          // steering bits
  // configuration vars for tracking
  static const Double_t    fgkMaxChi2;                  // Max increment in track chi2
  static const Float_t     fgkMinClustersInTrack;       // Min number of clusters in track
  static const Float_t     fgkLabelFraction;            // Min fraction of same label
  static const Double_t    fgkMaxSnp;                   // Maximal snp for tracking
  static const Double_t    fgkMaxStep;                  // Maximal step for tracking
  static const Double_t    fgkEpsilon;                  // Precision of radial coordinate

  TTreeSRedirector *fDebugStream[AliTRDrecoParam::kTRDreconstructionTasks];// Debug Streamer container;
 
  static TClonesArray *fgClusters;    //  list of clusters for local reconstructor
  static TClonesArray *fgTracklets;   //  list of online tracklets for local reconstructor
  static TClonesArray *fgTracks;      //  list of GTU tracks for local reconstructor
  static Int_t         fgNTimeBins;   //  number of time bins as given by the clusterizer
  AliTRDclusterizer   *fClusterizer;  //! instance of TRD clusterizer
  static AliTRDonlineTrackMatching fgOnlineTrackMatcher; // track matcher between on-line and off-line track
  static AliESDTrdTrigger fgTriggerFlags; //  L1 trigger flags

  ClassDef(AliTRDReconstructor, 5)    //  Class for the TRD reconstruction

};



#endif

 AliTRDReconstructor.h:1
 AliTRDReconstructor.h:2
 AliTRDReconstructor.h:3
 AliTRDReconstructor.h:4
 AliTRDReconstructor.h:5
 AliTRDReconstructor.h:6
 AliTRDReconstructor.h:7
 AliTRDReconstructor.h:8
 AliTRDReconstructor.h:9
 AliTRDReconstructor.h:10
 AliTRDReconstructor.h:11
 AliTRDReconstructor.h:12
 AliTRDReconstructor.h:13
 AliTRDReconstructor.h:14
 AliTRDReconstructor.h:15
 AliTRDReconstructor.h:16
 AliTRDReconstructor.h:17
 AliTRDReconstructor.h:18
 AliTRDReconstructor.h:19
 AliTRDReconstructor.h:20
 AliTRDReconstructor.h:21
 AliTRDReconstructor.h:22
 AliTRDReconstructor.h:23
 AliTRDReconstructor.h:24
 AliTRDReconstructor.h:25
 AliTRDReconstructor.h:26
 AliTRDReconstructor.h:27
 AliTRDReconstructor.h:28
 AliTRDReconstructor.h:29
 AliTRDReconstructor.h:30
 AliTRDReconstructor.h:31
 AliTRDReconstructor.h:32
 AliTRDReconstructor.h:33
 AliTRDReconstructor.h:34
 AliTRDReconstructor.h:35
 AliTRDReconstructor.h:36
 AliTRDReconstructor.h:37
 AliTRDReconstructor.h:38
 AliTRDReconstructor.h:39
 AliTRDReconstructor.h:40
 AliTRDReconstructor.h:41
 AliTRDReconstructor.h:42
 AliTRDReconstructor.h:43
 AliTRDReconstructor.h:44
 AliTRDReconstructor.h:45
 AliTRDReconstructor.h:46
 AliTRDReconstructor.h:47
 AliTRDReconstructor.h:48
 AliTRDReconstructor.h:49
 AliTRDReconstructor.h:50
 AliTRDReconstructor.h:51
 AliTRDReconstructor.h:52
 AliTRDReconstructor.h:53
 AliTRDReconstructor.h:54
 AliTRDReconstructor.h:55
 AliTRDReconstructor.h:56
 AliTRDReconstructor.h:57
 AliTRDReconstructor.h:58
 AliTRDReconstructor.h:59
 AliTRDReconstructor.h:60
 AliTRDReconstructor.h:61
 AliTRDReconstructor.h:62
 AliTRDReconstructor.h:63
 AliTRDReconstructor.h:64
 AliTRDReconstructor.h:65
 AliTRDReconstructor.h:66
 AliTRDReconstructor.h:67
 AliTRDReconstructor.h:68
 AliTRDReconstructor.h:69
 AliTRDReconstructor.h:70
 AliTRDReconstructor.h:71
 AliTRDReconstructor.h:72
 AliTRDReconstructor.h:73
 AliTRDReconstructor.h:74
 AliTRDReconstructor.h:75
 AliTRDReconstructor.h:76
 AliTRDReconstructor.h:77
 AliTRDReconstructor.h:78
 AliTRDReconstructor.h:79
 AliTRDReconstructor.h:80
 AliTRDReconstructor.h:81
 AliTRDReconstructor.h:82
 AliTRDReconstructor.h:83
 AliTRDReconstructor.h:84
 AliTRDReconstructor.h:85
 AliTRDReconstructor.h:86
 AliTRDReconstructor.h:87
 AliTRDReconstructor.h:88
 AliTRDReconstructor.h:89
 AliTRDReconstructor.h:90
 AliTRDReconstructor.h:91
 AliTRDReconstructor.h:92
 AliTRDReconstructor.h:93
 AliTRDReconstructor.h:94
 AliTRDReconstructor.h:95
 AliTRDReconstructor.h:96
 AliTRDReconstructor.h:97
 AliTRDReconstructor.h:98
 AliTRDReconstructor.h:99
 AliTRDReconstructor.h:100
 AliTRDReconstructor.h:101
 AliTRDReconstructor.h:102
 AliTRDReconstructor.h:103
 AliTRDReconstructor.h:104
 AliTRDReconstructor.h:105
 AliTRDReconstructor.h:106
 AliTRDReconstructor.h:107
 AliTRDReconstructor.h:108
 AliTRDReconstructor.h:109
 AliTRDReconstructor.h:110
 AliTRDReconstructor.h:111
 AliTRDReconstructor.h:112
 AliTRDReconstructor.h:113
 AliTRDReconstructor.h:114
 AliTRDReconstructor.h:115
 AliTRDReconstructor.h:116
 AliTRDReconstructor.h:117
 AliTRDReconstructor.h:118
 AliTRDReconstructor.h:119
 AliTRDReconstructor.h:120
 AliTRDReconstructor.h:121
 AliTRDReconstructor.h:122
 AliTRDReconstructor.h:123
 AliTRDReconstructor.h:124