#ifndef ALIQUENCHINGWEIGHTS_H
#define ALIQUENCHINGWEIGHTS_H
#include <TMath.h>
#include <TObject.h>
class TH1F;
class AliQuenchingWeights : public TObject {
public:
enum kECMethod {kDefault=0,kReweight=1,kReweightCont=2};
AliQuenchingWeights();
AliQuenchingWeights(const AliQuenchingWeights& a);
AliQuenchingWeights& operator=(const AliQuenchingWeights& a)
{a.Copy(*this); return(*this);}
virtual ~AliQuenchingWeights();
void Init();
void Reset();
Int_t SampleEnergyLoss();
Int_t SampleEnergyLoss(Int_t ipart, Double_t r);
Double_t GetELossRandom(Int_t ipart, Double_t length, Double_t e=1.e10) const;
Double_t CalcQuenchedEnergy(Int_t ipart, Double_t length, Double_t e) const;
Double_t GetELossRandom(Int_t ipart, TH1F *hell, Double_t e=1.e10) const;
Double_t CalcQuenchedEnergy(Int_t ipart, TH1F *hell, Double_t e) const;
Double_t GetELossRandomK(Int_t ipart, Double_t I0, Double_t I1, Double_t e=1.e10);
Double_t CalcQuenchedEnergyK(Int_t ipart, Double_t I0, Double_t I1, Double_t e);
Double_t GetELossRandomKFast(Int_t ipart, Double_t I0, Double_t I1, Double_t e=1.e10);
Double_t GetELossRandomKFastR(Int_t ipart, Double_t r, Double_t wc, Double_t e=1.e10);
Double_t CalcQuenchedEnergyKFast(Int_t ipart, Double_t I0, Double_t I1, Double_t e);
Double_t GetDiscreteWeight(Int_t ipart, Double_t I0, Double_t I1);
Double_t GetDiscreteWeightR(Int_t ipart, Double_t r);
void GetZeroLossProb(Double_t &p,Double_t &prw,Double_t &prwcont,
Int_t ipart,Double_t I0,Double_t I1,Double_t e=1.e10);
void GetZeroLossProbR(Double_t &p,Double_t &prw, Double_t &prwcont,
Int_t ipart,Double_t r,Double_t wc,Double_t e=1.e10);
Int_t InitMult(const Char_t *contall="$(ALICE_ROOT)/FASTSIM/data/cont_mult.all",
const Char_t *discall="$(ALICE_ROOT)/FASTSIM/data/disc_mult.all");
Int_t InitSingleHard(const Char_t *contall="$(ALICE_ROOT)/FASTSIM/data/cont_lin.all",
const Char_t *discall="$(ALICE_ROOT)/FASTSIM/data/disc_lin.all");
Int_t CalcMult(Int_t ipart, Double_t rrrr,Double_t xxxx,
Double_t &continuous,Double_t &discrete) const;
Int_t CalcMult(Int_t ipart,
Double_t w, Double_t qtransp, Double_t length,
Double_t &continuous,Double_t &discrete) const;
Int_t CalcSingleHard(Int_t ipart, Double_t rrrr,Double_t xxxx,
Double_t &continuous,Double_t &discrete) const;
Int_t CalcSingleHard(Int_t ipart,
Double_t w, Double_t mu, Double_t length,
Double_t &continuous,Double_t &discrete) const;
Double_t CalcWC(Double_t q, Double_t l) const
{return 0.5*q*l*l*fgkConvFmToInvGeV;}
Double_t CalcWCbar(Double_t mu, Double_t l) const
{return 0.5*mu*mu*l*fgkConvFmToInvGeV;}
Double_t CalcWC(Double_t l) const
{if(fMultSoft) return CalcWC(fQTransport,l);
else return CalcWCbar(fMu,l);}
Double_t CalcWCk(Double_t I1) const
{if(fMultSoft) return CalcWCk(fK,I1);
else return -1;}
Double_t CalcWCk(Double_t k, Double_t I1) const
{if(fMultSoft) return k*I1/fgkConvFmToInvGeV;
else return -1;}
Double_t CalcR(Double_t wc, Double_t l) const;
Double_t CalcRk(Double_t I0, Double_t I1) const
{return CalcRk(fK,I0,I1);}
Double_t CalcRk(Double_t k, Double_t I0, Double_t I1) const;
Double_t CalcQk(Double_t I0, Double_t I1) const
{return CalcQk(fK,I0,I1);}
Double_t CalcQk(Double_t k, Double_t I0, Double_t I1) const
{return I0*I0/2./I1/fgkConvFmToInvGeV/fgkConvFmToInvGeV*k;}
Double_t CalcLk(Double_t i0, Double_t i1) const
{return 2.*i1/i0;}
Int_t CalcLengthMax(Double_t q) const
{Double_t l3max=fgkRMax/.5/q/fgkConvFmToInvGeV/fgkConvFmToInvGeV;
return (Int_t)TMath::Power(l3max,1./3.);}
const TH1F* GetHisto(Int_t ipart,Double_t length) const;
void SetMu(Double_t m=1.) {fMu=m;}
void SetQTransport(Double_t q=1.) {fQTransport=q;}
void SetK(Double_t k=4.e5) {fK=k;}
void SetECMethod(kECMethod type=kDefault);
void SetLengthMax(Int_t l=20) {fLengthMax=l;}
Float_t GetMu() const {return fMu;}
Float_t GetQTransport() const {return fQTransport;}
Float_t GetK() const {return fK;}
kECMethod GetECMethod() const {return fECMethod;}
Bool_t GetTablesLoaded() const {return fTablesLoaded;}
Bool_t GetMultSoft() const {return fMultSoft;}
Int_t GetLengthMax() const {return fLengthMax;}
TH1F* ComputeQWHisto (Int_t ipart,Double_t medval,Double_t length) const;
TH1F* ComputeQWHistoX(Int_t ipart,Double_t medval,Double_t length) const;
TH1F* ComputeQWHistoX(Int_t ipart,Double_t r) const;
TH1F* ComputeELossHisto(Int_t ipart,Double_t medval,Double_t l,Double_t e=1.e10) const;
TH1F* ComputeELossHisto(Int_t ipart,Double_t medval,TH1F *hEll,Double_t e=1.e10) const;
TH1F* ComputeELossHisto(Int_t ipart,Double_t r) const;
Double_t GetMeanELoss(Int_t ipart,Double_t medval,Double_t l) const;
Double_t GetMeanELoss(Int_t ipart,Double_t medval,TH1F *hEll) const;
Double_t GetMeanELoss(Int_t ipart,Double_t r) const;
void PlotDiscreteWeights(Double_t len=4,Double_t qm=5) const;
void PlotContWeights(Int_t itype,Double_t len) const;
void PlotContWeightsVsL(Int_t itype,Double_t medval) const;
void PlotAvgELoss(Double_t len,Double_t qm=5,Double_t e=1.e10) const;
void PlotAvgELoss(TH1F *hEll,Double_t e=1.e10) const;
void PlotAvgELossVsL(Double_t e=1.e10) const;
void PlotAvgELossVsPt(Double_t medval,Double_t len) const;
void PlotAvgELossVsPt(Double_t medval,TH1F *hEll) const;
protected:
Int_t GetIndex(Double_t len) const;
static const Double_t fgkConvFmToInvGeV;
static const Int_t fgkBins;
static const Double_t fgkMaxBin;
static const Double_t fgkRMax;
static Int_t fgCounter;
Int_t fInstanceNumber;
Bool_t fMultSoft;
kECMethod fECMethod;
Double_t fQTransport;
Double_t fMu;
Double_t fK;
Int_t fLengthMax;
Int_t fLengthMaxOld;
TH1F ***fHistos;
TH1F *fHisto;
Double_t fxx[400];
Double_t fxxg[400];
Double_t fdaq[34];
Double_t fdag[34];
Double_t fcaq[34][261];
Double_t fcag[34][261];
Double_t frrr[34];
Double_t frrrg[34];
Bool_t fTablesLoaded;
ClassDef(AliQuenchingWeights,1)
};
#endif
AliQuenchingWeights.h:100 AliQuenchingWeights.h:101 AliQuenchingWeights.h:102 AliQuenchingWeights.h:103 AliQuenchingWeights.h:104 AliQuenchingWeights.h:105 AliQuenchingWeights.h:106 AliQuenchingWeights.h:107 AliQuenchingWeights.h:108 AliQuenchingWeights.h:109 AliQuenchingWeights.h:110 AliQuenchingWeights.h:111 AliQuenchingWeights.h:112 AliQuenchingWeights.h:113 AliQuenchingWeights.h:114 AliQuenchingWeights.h:115 AliQuenchingWeights.h:116 AliQuenchingWeights.h:117 AliQuenchingWeights.h:118 AliQuenchingWeights.h:119 AliQuenchingWeights.h:120 AliQuenchingWeights.h:121 AliQuenchingWeights.h:122 AliQuenchingWeights.h:123 AliQuenchingWeights.h:124 AliQuenchingWeights.h:125 AliQuenchingWeights.h:126 AliQuenchingWeights.h:127 AliQuenchingWeights.h:128 AliQuenchingWeights.h:129 AliQuenchingWeights.h:130 AliQuenchingWeights.h:131 AliQuenchingWeights.h:132 AliQuenchingWeights.h:133 AliQuenchingWeights.h:134 AliQuenchingWeights.h:135 AliQuenchingWeights.h:136 AliQuenchingWeights.h:137 AliQuenchingWeights.h:138 AliQuenchingWeights.h:139 AliQuenchingWeights.h:140 AliQuenchingWeights.h:141 AliQuenchingWeights.h:142 AliQuenchingWeights.h:143 AliQuenchingWeights.h:144 AliQuenchingWeights.h:145 AliQuenchingWeights.h:146 AliQuenchingWeights.h:147 AliQuenchingWeights.h:148 AliQuenchingWeights.h:149 AliQuenchingWeights.h:150 AliQuenchingWeights.h:151 AliQuenchingWeights.h:152 AliQuenchingWeights.h:153 AliQuenchingWeights.h:154 AliQuenchingWeights.h:155 AliQuenchingWeights.h:156 AliQuenchingWeights.h:157 AliQuenchingWeights.h:158 AliQuenchingWeights.h:159 AliQuenchingWeights.h:160 AliQuenchingWeights.h:161 AliQuenchingWeights.h:162 AliQuenchingWeights.h:163 AliQuenchingWeights.h:164 AliQuenchingWeights.h:165 AliQuenchingWeights.h:166 AliQuenchingWeights.h:167 AliQuenchingWeights.h:168 AliQuenchingWeights.h:169 AliQuenchingWeights.h:170 AliQuenchingWeights.h:171 AliQuenchingWeights.h:172 AliQuenchingWeights.h:173 AliQuenchingWeights.h:174 AliQuenchingWeights.h:175 AliQuenchingWeights.h:176 AliQuenchingWeights.h:177 AliQuenchingWeights.h:178 AliQuenchingWeights.h:179 AliQuenchingWeights.h:180 AliQuenchingWeights.h:181 AliQuenchingWeights.h:182 AliQuenchingWeights.h:183 AliQuenchingWeights.h:184 AliQuenchingWeights.h:185 AliQuenchingWeights.h:186