#ifndef ALIEMCALUNFOLDING_H
#define ALIEMCALUNFOLDING_H
#include "TObject.h"
class AliLog ;
class AliEMCALGeometry ;
class AliEMCALRecPoint ;
class AliEMCALDigit ;
class AliEMCALUnfolding : public TObject {
public:
AliEMCALUnfolding() ;
virtual ~AliEMCALUnfolding() ;
AliEMCALUnfolding(AliEMCALGeometry* geometry);
AliEMCALUnfolding(AliEMCALGeometry* geometry,Float_t ECALocMaxCut,Double_t *SSPars,Double_t *Par5,Double_t *Par6);
virtual void Init() ;
virtual void SetInput(Int_t numberOfECAClusters,TObjArray *recPoints,TClonesArray *digitsArr);
virtual void SetNumberOfECAClusters(Int_t n) { fNumberOfECAClusters = n; }
virtual Int_t GetNumberOfECAClusters() const { return fNumberOfECAClusters; }
virtual void SetRecPoints(TObjArray *rec) { fRecPoints = rec; }
virtual TObjArray * GetRecPoints() const { return fRecPoints; }
virtual void SetDigitsArr(TClonesArray *digit) { fDigitsArr = digit; }
virtual TClonesArray * GetDigitsArr() const { return fDigitsArr; }
virtual void SetECALocalMaxCut(Float_t cut) { fECALocMaxCut = cut ; }
virtual Float_t GetECALocalMaxCut() const { return fECALocMaxCut; }
virtual void SetThreshold(Float_t energy) { fThreshold = energy; }
virtual Float_t GetThreshold() const { return fThreshold; }
virtual void SetRejectBelowThreshold(Bool_t reject) { fRejectBelowThreshold = reject; }
virtual Bool_t GetRejectBelowThreshold() const { return fRejectBelowThreshold; }
virtual void MakeUnfolding();
static Double_t ShowerShapeV2(Double_t x, Double_t y) ;
static void UnfoldingChiSquareV2(Int_t & nPar, Double_t * Grad, Double_t & fret, Double_t * x, Int_t iflag) ;
virtual void SetShowerShapeParams(Double_t *pars) ;
virtual Double_t* GetShowerShapeParams() const { return fgSSPars ; }
virtual void SetPar5(Double_t *pars) ;
virtual Double_t* GetPar5() const { return fgPar5 ; }
virtual void SetPar6(Double_t *pars) ;
virtual Double_t* GetPar6() const { return fgPar6 ; }
virtual Int_t UnfoldOneCluster(AliEMCALRecPoint * iniTower,
Int_t nMax,
AliEMCALDigit ** maxAt,
Float_t * maxAtEnergy,
TObjArray *list);
protected:
Int_t fNumberOfECAClusters ;
Float_t fECALocMaxCut ;
Float_t fThreshold ;
Bool_t fRejectBelowThreshold ;
AliEMCALGeometry * fGeom;
TObjArray * fRecPoints;
TClonesArray * fDigitsArr;
private:
AliEMCALUnfolding(const AliEMCALUnfolding &);
AliEMCALUnfolding & operator = (const AliEMCALUnfolding &);
Bool_t UnfoldClusterV2(AliEMCALRecPoint * iniEmc, Int_t Nmax,
AliEMCALDigit ** maxAt,
Float_t * maxAtEnergy );
Bool_t UnfoldClusterV2old(AliEMCALRecPoint * iniEmc, Int_t Nmax,
AliEMCALDigit ** maxAt,
Float_t * maxAtEnergy );
Bool_t FindFitV2(AliEMCALRecPoint * emcRP, AliEMCALDigit ** MaxAt, const Float_t * maxAtEnergy,
Int_t NPar, Float_t * FitParametres) const;
static Double_t fgSSPars[8];
static Double_t fgPar5[3];
static Double_t fgPar6[3];
static void EvalPar5(Double_t phi);
static void EvalPar6(Double_t phi);
static void EvalParsPhiDependence(Int_t absId, const AliEMCALGeometry *geom);
ClassDef(AliEMCALUnfolding,3)
} ;
#endif // AliEMCALUNFOLDING_H