#ifndef ALITPCRECONSTRUCTOR_H
#define ALITPCRECONSTRUCTOR_H
#include "AliReconstructor.h"
#include "AliTPCRecoParam.h"
class AliTPCParam;
class AliTPCclusterer;
class AliTPCtracker;
class AliTPCAltroEmulator;
class TObjArray;
class AliTPCReconstructor: public AliReconstructor {
public:
AliTPCReconstructor();
virtual ~AliTPCReconstructor();
virtual void Reconstruct(TTree* digitsTree, TTree* clustersTree) const;
virtual void Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const;
virtual AliTracker* CreateTracker() const;
virtual void FillESD(TTree* , TTree* ,
AliESDEvent* esd) const;
virtual void FillESD(AliRawReader* , TTree* ,
AliESDEvent* esd) const
{FillESD((TTree*)NULL,(TTree*)NULL,esd);}
static const AliTPCRecoParam* GetRecoParam() { return dynamic_cast<const AliTPCRecoParam*>(AliReconstructor::GetRecoParam(1)); }
virtual void GetPidSettings(AliESDpid *esdPID);
static Double_t GetCtgRange() { return GetRecoParam()->GetCtgRange();}
static Double_t GetMaxSnpTracker(){ return GetRecoParam()->GetMaxSnpTracker();}
static Double_t GetMaxSnpTrack() { return GetRecoParam()->GetMaxSnpTrack();}
static Int_t StreamLevel() { return fgStreamLevel;}
static void SetStreamLevel(Int_t level) { fgStreamLevel = level;}
static void SetAltroEmulator(AliTPCAltroEmulator *altro) { fAltroEmulator=altro;}
static AliTPCAltroEmulator * GetAltroEmulator() { return fAltroEmulator;}
void ParseOptions(AliTPCtracker* tracker) const;
private:
AliTPCReconstructor(const AliTPCReconstructor&);
AliTPCReconstructor& operator=(const AliTPCReconstructor&);
AliTPCParam* GetTPCParam() const;
static Int_t fgStreamLevel;
AliTPCclusterer* fClusterer;
static AliTPCAltroEmulator * fAltroEmulator;
TObjArray *fArrSplines;
void SetSplinesFromOADB(const char* tmplt, AliESDpid *esdPID);
ClassDef(AliTPCReconstructor, 0)
};
#endif