#ifndef AliHMPIDReconHTA_h
#define AliHMPIDReconHTA_h
#include <TNamed.h> //base class
class TClonesArray;
class AliESDtrack;
class AliHMPIDParam;
class AliHMPIDReconHTA : public TNamed
{
public :
AliHMPIDReconHTA();
virtual ~AliHMPIDReconHTA();
void InitVars (Int_t n);
void DeleteVars ()const;
void InitDatabase ();
void FindBinDB (Double_t x,Double_t y,Int_t &binX,Int_t &binY);
Bool_t UniformDistrib ();
void FillZeroChan ()const;
Bool_t CkovHiddenTrk (AliESDtrack *pTrk,TClonesArray *pClu,Int_t index, Double_t nmean);
Bool_t CluPreFilter (TClonesArray *pClu );
Bool_t DoRecHiddenTrk ( );
Bool_t FindShape (Double_t &thTrkRec,Double_t &phiTrkRec,Double_t &thetaCRec);
Bool_t ShapeModel (Int_t np,Double_t *phiphot,Double_t *dist,Double_t &xA,Double_t &xB,Double_t &phiStart);
Double_t VertParab (Double_t x1,Double_t y1,Double_t x2, Double_t y2, Double_t x3, Double_t y3)const;
Bool_t FitFree (Double_t thTrkRec,Double_t phiTrkRec);
Bool_t FitRing (Double_t thTrkRec,Double_t phiTrkRec);
Double_t FindSimmPhi ();
Int_t r2 (Double_t *coef, Double_t &x1, Double_t &x2);
void SetNClu (Int_t nclu ) {fNClu=nclu;}
void SetClCk (Int_t i,Bool_t what ) {fClCk[i]=what;}
void SetCkovFit (Double_t ckov ) {fCkovFit=ckov;}
void SetCkovSig2 (Double_t rms ) {fCkovSig2=rms;}
void SetTrkFit (Double_t th,Double_t ph ) {fThTrkFit = th;fPhTrkFit = ph;}
void SetNCluFit (Int_t ncluFit ) {fNCluFit=ncluFit;}
void SetPhotAngles (Int_t i,Double_t th, Double_t ph ) {fPhiPhot[i]=ph;fThetaPhot[i]=th;}
void SetFitStatus (Bool_t status ) {fFitStatus = status;}
void SetRadXY (Double_t x,Double_t y ) {fRadX = x;fRadY = y;}
static void FunMinPhot(Int_t&,Double_t* ,Double_t &f,Double_t *par,Int_t iflag);
Int_t CompactDB (Int_t binX,Int_t binY) const {return fgDB[binX][binY];}
Int_t IdxMip ()const {return fIdxMip;}
Double_t MipX ()const {return fMipX;}
Double_t MipY ()const {return fMipY;}
Double_t MipQ ()const {return fMipQ;}
Double_t RadX ()const {return fRadX;}
Double_t RadY ()const {return fRadY;}
Int_t NClu ()const {return fNClu;}
Int_t NCluFit ()const {return fNCluFit;}
Double_t XClu (Int_t i)const {return fXClu[i];}
Double_t YClu (Int_t i)const {return fYClu[i];}
Bool_t ClCk (Int_t i)const {return fClCk[i];}
Double_t PhotPhi (Int_t i)const {return fPhiPhot[i];}
Double_t PhotTheta (Int_t i)const {return fThetaPhot[i];}
Bool_t FitStatus ()const {return fFitStatus;}
Double_t CkovFit ()const {return fCkovFit;}
Double_t ThTrkIn ()const {return fThTrkIn;}
Double_t PhTrkIn ()const {return fPhTrkIn;}
Double_t ThTrkFit ()const {return fThTrkFit;}
Double_t PhTrkFit ()const {return fPhTrkFit;}
protected:
Double_t fMipX;
Double_t fMipY;
Double_t fMipQ;
Double_t fRadX;
Double_t fRadY;
Int_t fIdxMip;
Int_t fNClu;
Double_t *fXClu;
Double_t *fYClu;
Double_t *fPhiPhot;
Double_t *fThetaPhot;
Bool_t *fClCk;
Double_t fThTrkIn;
Double_t fPhTrkIn;
Double_t fThTrkFit;
Double_t fPhTrkFit;
Double_t fCkovFit;
Int_t fNCluFit;
Double_t fCkovSig2;
Bool_t fFitStatus;
AliHMPIDParam *fParam;
static Int_t fgDB[500][150];
private:
AliHMPIDReconHTA(const AliHMPIDReconHTA& r);
AliHMPIDReconHTA &operator=(const AliHMPIDReconHTA& r);
ClassDef(AliHMPIDReconHTA,5)
};
#endif // #ifdef AliHMPIDReconHTA_cxx