#ifndef ALITRDCHECKTRK_H
#define ALITRDCHECKTRK_H
#ifndef ALITRDRESOLUTION_H
#include "AliTRDresolution.h"
#endif
class TObjArray;
class AliTRDtrackV1;
class AliTRDcheckTRK : public AliTRDresolution
{
public:
enum ETRDcheckTRKsteer {
kKalmanUpdate = 0
,kTrkltRefit
,kClRecalibrate
,kUseITS
};
enum ETRDcheckTRKconst {
kNptBins = 25
,kNSigmaBins = 25
,kNclusters = 19
,kNdim = 7
};
AliTRDcheckTRK();
AliTRDcheckTRK(char* name);
virtual ~AliTRDcheckTRK();
static Float_t GetKalmanStep() { return fgKalmanStep;}
static Bool_t HasClRecalibrate() { return TESTBIT(fgSteer, kClRecalibrate);}
static Bool_t HasKalmanUpdate() { return TESTBIT(fgSteer, kKalmanUpdate);}
static Bool_t HasTrkltRefit() { return TESTBIT(fgSteer, kTrkltRefit);}
virtual TObjArray* Histos();
TH1* PlotTrack(const AliTRDtrackV1 *t=NULL);
TH1* DoRoads(const AliTRDtrackV1 *t=NULL);
static Bool_t PropagateKalman(AliTRDtrackV1 &t, AliExternalTrackParam *ref);
static void SetKalmanStep(Float_t step) { fgKalmanStep=step;}
static void SetClRecalibrate(Bool_t s=kTRUE) { if(s){SETBIT(fgSteer, kClRecalibrate); SetTrkltRefit();} else CLRBIT(fgSteer, kClRecalibrate);}
static void SetKalmanUpdate(Bool_t s=kTRUE) { if(s) SETBIT(fgSteer, kKalmanUpdate); else CLRBIT(fgSteer, kKalmanUpdate);}
static void SetTrkltRefit(Bool_t s=kTRUE) { if(s) SETBIT(fgSteer, kTrkltRefit); else CLRBIT(fgSteer, kTrkltRefit);}
static void SetUseITS(Bool_t s=kTRUE) { if(s) SETBIT(fgSteer, kUseITS); else CLRBIT(fgSteer, kUseITS);}
static Bool_t UseITS() { return TESTBIT(fgSteer, kUseITS);}
private:
AliTRDcheckTRK(const AliTRDcheckTRK&);
AliTRDcheckTRK& operator=(const AliTRDcheckTRK&);
void MakePtCalib(Float_t pt0=0.3, Float_t dpt=0.002);
Int_t GetPtBinCalib(Float_t pt);
static UChar_t fgSteer;
static Float_t fgKalmanStep;
Float_t fPtBinCalib[kNptBins+1];
ClassDef(AliTRDcheckTRK, 1)
};
#endif