#ifndef ALITRDRECONSTRUCTOR_H
#define ALITRDRECONSTRUCTOR_H
#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)
,kDebug = BIT(6)
,kClRadialCorr = BIT(7)
,kOwner = BIT(8)
,kNsteer = 8
};
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);
AliTRDReconstructor& operator = (const AliTRDReconstructor&);
void ResetContainers() const;
static Int_t fgStreamLevel;
static Char_t const *fgSteerNames[kNsteer];
static Char_t const *fgSteerFlags[kNsteer];
static Char_t const *fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks];
static Char_t const *fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks];
UInt_t fSteerParam;
static const Double_t fgkMaxChi2;
static const Float_t fgkMinClustersInTrack;
static const Float_t fgkLabelFraction;
static const Double_t fgkMaxSnp;
static const Double_t fgkMaxStep;
static const Double_t fgkEpsilon;
TTreeSRedirector *fDebugStream[AliTRDrecoParam::kTRDreconstructionTasks];
static TClonesArray *fgClusters;
static TClonesArray *fgTracklets;
static TClonesArray *fgTracks;
static Int_t fgNTimeBins;
AliTRDclusterizer *fClusterizer;
static AliTRDonlineTrackMatching fgOnlineTrackMatcher;
static AliESDTrdTrigger fgTriggerFlags;
ClassDef(AliTRDReconstructor, 5)
};
#endif
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