#ifndef ALIMUONFASTTRACKING_H
#define ALIMUONFASTTRACKING_H
class TF1;
class TSpline3;
class TFile;
class AliMUONFastTrackingEntry;
#include <TObject.h>
enum LUTClusterType {kOld, kNew};
class AliMUONFastTracking : public TObject {
public:
static AliMUONFastTracking* Instance();
~AliMUONFastTracking(){;}
void Init(Float_t bkg);
void ReadLUT(TFile *file);
void GetBinning(Int_t &nbinp, Float_t &pmin, Float_t &pmax,
Int_t &nbintheta, Float_t &thetamin, Float_t &thetamax,
Int_t &nbinphi, Float_t &phimin, Float_t &phimax) const;
void GetIpIthetaIphi(Float_t p, Float_t theta, Float_t phi, Int_t charge,
Int_t &ip, Int_t &itheta, Int_t &iphi) const;
void GetSplit(Int_t ip, Int_t itheta, Int_t &nSplitP, Int_t &nSplitTheta) const;
Float_t Efficiency(Float_t p, Float_t theta, Float_t phi, Int_t charge);
Float_t Acceptance(Float_t p, Float_t theta, Float_t phi, Int_t charge);
Float_t MeanP(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t SigmaP(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t Sigma1P(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t NormG2(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t MeanG2(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t SigmaG2(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t MeanTheta(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t SigmaTheta(Float_t p, Float_t theta, Float_t phi, Int_t charge)const;
Float_t MeanPhi(Float_t p, Float_t theta, Float_t phi, Int_t charge) const;
Float_t SigmaPhi(Float_t p, Float_t theta, Float_t phi, Int_t charge);
void SetSpline();
Float_t GetBackground() const {return fBkg;}
void SetLUTClusterFinder(LUTClusterType clusterFinder) { fClusterFinder = clusterFinder;}
void SetBackground(Float_t bkg);
void UseSpline (Int_t splineSwitch=1) {fSpline = splineSwitch;}
TF1* GetFitP(Int_t ip, Int_t itheta, Int_t iphi);
protected:
Int_t fNbinp;
Float_t fPmin;
Float_t fPmax;
Float_t fDeltaP;
Int_t fNbintheta;
Float_t fThetamin;
Float_t fThetamax;
Float_t fDeltaTheta;
Int_t fNbinphi;
Float_t fPhimin;
Float_t fPhimax;
Float_t fDeltaPhi;
Int_t fPrintLevel;
Float_t fBkg;
TF1 *fFitp[20][20][20];
AliMUONFastTrackingEntry *fEntry[20][20][20][4];
AliMUONFastTrackingEntry *fCurrentEntry[20][20][20];
TSpline3 *fSplineEff[200][3];
TSpline3 *fSplineAcc[200][3];
TSpline3 *fSplineSigmap[200][3];
TSpline3 *fSplineSigma1p[200][3];
TSpline3 *fSplineSigmatheta[200][3];
TSpline3 *fSplineSigmaphi[200][3];
Int_t fSpline;
LUTClusterType fClusterFinder;
static AliMUONFastTracking* fgMUONFastTracking;
ClassDef(AliMUONFastTracking,1)
private:
AliMUONFastTracking();
AliMUONFastTracking(Float_t );
AliMUONFastTracking(const AliMUONFastTracking &ft);
void Copy(TObject &) const;
AliMUONFastTracking& operator=(const AliMUONFastTracking & rhs);
};
#endif