#ifndef ALIPHOSTENDERSUPPLY_H
#define ALIPHOSTENDERSUPPLY_H
#include <AliTenderSupply.h>
class TVector3;
class AliPHOSGeometry;
class AliPHOSCalibData ;
class TH2I ;
class AliVCluster ;
class AliVCaloCells ;
class AliAnalysisTaskSE ;
class AliPHOSTenderSupply: public AliTenderSupply {
public:
AliPHOSTenderSupply();
AliPHOSTenderSupply(const char *name, const AliTender *tender=NULL);
virtual ~AliPHOSTenderSupply();
virtual void Init(){}
virtual void ProcessEvent();
void SetTask(AliAnalysisTaskSE * task){fTask=task;}
void SetNonlinearityVersion(const char * ver="Gustavo2005"){fNonlinearityVersion=ver;}
void SetNonlinearityParams(Int_t n, const Double_t * par){
if(n>10){printf("Only 10 parameters allowed \n"); return ;}
for(Int_t i=0;i<n;i++)fNonlinearityParams[i]=par[i]; }
void SetReconstructionPass(Int_t ipass=2){fRecoPass=ipass;}
void SetMCProduction(const char * name ="LHC13_b2"){fIsMC=kTRUE ; fMCProduction=name ;}
void ForceUsingBadMap(const char * filename="alien:///alice/cern.ch/user/p/prsnko/BadMaps/BadMap_LHC10b.root") ;
void ForceUsingCalibration(const char * filename="alien:///alice/cern.ch/user/p/prsnko/Recalibrations/LHC10b_pass1.root") ;
void InitTender();
protected:
AliPHOSTenderSupply(const AliPHOSTenderSupply&c);
AliPHOSTenderSupply& operator= (const AliPHOSTenderSupply&c);
void FindTrackMatching(Int_t mod,TVector3 *locpos,Double_t &dx, Double_t &dz, Double_t &pttrack, Int_t &charge);
Float_t CorrectNonlinearity(Float_t en) ;
Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge) ;
Double_t TestCoreLambda(Double_t pt,Double_t l1,Double_t l2) ;
Double_t TestFullLambda(Double_t pt,Double_t l1,Double_t l2) ;
Bool_t IsGoodChannel(Int_t mod, Int_t ix, Int_t iz) ;
void CorrectPHOSMisalignment(TVector3 & globalPos, Int_t module);
void EvalLambdas(AliVCluster * clu, Double_t &m02, Double_t &m20) ;
Double_t CoreEnergy(AliVCluster * clu) ;
Double_t EvalEcross(AliVCluster * clu) ;
Double_t EvalTOF(AliVCluster * clu,AliVCaloCells * cells);
Double_t CalibrateTOF(Double_t tof, Int_t absId, Bool_t isHG);
void DistanceToBadChannel(Int_t mod, TVector3 * locPos, Double_t &minDist) ;
private:
TString fOCDBpass ;
TString fNonlinearityVersion;
AliPHOSGeometry *fPHOSGeo;
Double_t fNonlinearityParams[10] ;
TH2I * fPHOSBadMap[5] ;
Int_t fRecoPass ;
Bool_t fUsePrivateBadMap ;
Bool_t fUsePrivateCalib ;
AliPHOSCalibData *fPHOSCalibData;
AliAnalysisTaskSE *fTask;
Bool_t fIsMC;
TString fMCProduction ;
ClassDef(AliPHOSTenderSupply, 2);
};
#endif