#ifndef AliHMPIDRecon_h
#define AliHMPIDRecon_h
#include <TNamed.h> //base class
#include <TVector3.h> //fields
class TClonesArray;
class AliESDtrack;
class AliHMPIDParam;
class AliHMPIDRecon : public TNamed
{
public :
AliHMPIDRecon();
virtual ~AliHMPIDRecon() {;}
void InitVars (Int_t n);
void DeleteVars ()const;
void CkovAngle (AliESDtrack *pTrk,TClonesArray *pCluLst,Int_t index,Double_t nmean,Float_t xRa,Float_t yRa );
Bool_t FindPhotCkov (Double_t cluX,Double_t cluY,Double_t &thetaCer,Double_t &phiCer );
Double_t FindRingCkov (Int_t iNclus );
void FindRingGeom (Double_t ckovAng,Int_t level=1 );
TVector2 IntWithEdge (TVector2 p1,TVector2 p2 )const;
Int_t FlagPhot (Double_t ckov,TClonesArray *pCluLst,AliESDtrack *pTrk );
Double_t HoughResponse( );
void Propagate (const TVector3 dir, TVector3 &pos,Double_t z )const;
void Refract ( TVector3 &dir, Double_t n1, Double_t n2)const;
TVector2 TracePhot (Double_t ckovTh,Double_t ckovPh )const;
void AddObjectToFriends(TClonesArray *pCluLst, Int_t photonIndex, AliESDtrack *pTrk );
TVector2 TraceForward (TVector3 dirCkov )const;
void Lors2Trs (TVector3 dirCkov,Double_t &thetaCer,Double_t &phiCer )const;
void Trs2Lors (TVector3 dirCkov,Double_t &thetaCer,Double_t &phiCer )const;
TVector2 GetMip ( )const
{return fMipPos;}
Double_t GetRingArea ( )const
{return fRingArea;}
Double_t GetRingAcc ( )const
{return fRingAcc;}
Double_t FindRingExt (Double_t ckov,Int_t ch,Double_t xPc,Double_t yPc,Double_t thRa,Double_t phRa);
void SetTrack (Double_t xRad,Double_t yRad,Double_t theta,Double_t phi )
{fTrkDir.SetMagThetaPhi(1,theta,phi); fTrkPos.Set(xRad,yRad);}
void SetImpPC (Double_t xPc,Double_t yPc )
{fPc.Set(xPc,yPc);}
void SetMip (Double_t xmip,Double_t ymip )
{fMipPos.Set(xmip,ymip);}
enum ETrackingFlags {kNotPerformed=-20,kMipDistCut=-9,kMipQdcCut=-5,kNoPhotAccept=-11,kNoRad = -22};
protected:
Int_t fPhotCnt;
Int_t *fPhotFlag;
Int_t *fPhotClusIndex;
Double_t *fPhotCkov;
Double_t *fPhotPhi;
Double_t *fPhotWei;
Double_t fCkovSigma2;
Bool_t fIsWEIGHT;
Float_t fDTheta;
Float_t fWindowWidth;
Double_t fRingArea;
Double_t fRingAcc;
TVector3 fTrkDir;
TVector2 fTrkPos;
TVector2 fMipPos;
TVector2 fPc;
AliHMPIDParam *fParam;
private:
AliHMPIDRecon(const AliHMPIDRecon& r);
AliHMPIDRecon &operator=(const AliHMPIDRecon& r);
ClassDef(AliHMPIDRecon,3)
};
#endif // #ifdef AliHMPIDRecon_cxx