// A. Dainese andrea.dainese@pd.infn.it
//----------------------------------------------------------------------------
+#include <TMath.h>
#include <TObject.h>
class TH1F;
class AliQuenchingWeights : public TObject {
public:
- enum kECMethod {kDefault=0,kReweight=1};
+ 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();
- Double_t GetELossRandom(Int_t ipart, Double_t length, Double_t e=1.e6) const;
+ 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.e6) 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);
//multiple soft scattering approximation
Int_t InitMult(const Char_t *contall="$(ALICE_ROOT)/FASTSIM/data/cont_mult.all",
Double_t &continuous,Double_t &discrete) const;
Double_t CalcWC(Double_t q, Double_t l) const
- {return 0.5*q*l*l*gkConvFmToInvGeV;}
+ {return 0.5*q*l*l*fgkConvFmToInvGeV;}
Double_t CalcWCbar(Double_t mu, Double_t l) const
- {return 0.5*mu*mu*l*gkConvFmToInvGeV;}
+ {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;} //not implemented!
+
+ Double_t CalcWCk(Double_t k, Double_t I1) const
+ {if(fMultSoft) return k*I1/fgkConvFmToInvGeV;
+ else return -1;} //not implemented!
+
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=gkRMax/.5/q/gkConvFmToInvGeV/gkConvFmToInvGeV;
+ {Double_t l3max=fgkRMax/.5/q/fgkConvFmToInvGeV/fgkConvFmToInvGeV;
return (Int_t)TMath::Power(l3max,1./3.);}
- const TH1F* GetHisto(Int_t ipart,Int_t l) const;
+ 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;} //about 1 GeV^2/fm
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;}
- Bool_t GetECMethod() const {return fECMethod;}
+ 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* ComputeELossHisto (Int_t ipart,Double_t medval,Double_t l,Double_t e=1.e6) const;
- TH1F* ComputeELossHisto (Int_t ipart,Double_t medval,TH1F *hEll,Double_t e=1.e6) 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(Int_t len=4) const;
- void PlotContWeights(Int_t itype,Int_t len) const;
- void PlotContWeights(Int_t itype,Double_t medval) const;
- void PlotAvgELoss(Int_t len ,Double_t e=1.e6) const;
- void PlotAvgELoss(TH1F *hEll,Double_t e=1.e6) const;
- void PlotAvgELossVsPt(Double_t medval,Int_t len) const;
- void PlotAvgELossVsPt(Double_t medval,TH1F *hEll) 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:
- static const Double_t gkConvFmToInvGeV;
- static const Double_t gkRMax;
- static Int_t gCounter;//static instance counter
- Int_t fInstanceNumber;//instance number of class
+ Int_t GetIndex(Double_t len) const;
+
+ static const Double_t fgkConvFmToInvGeV; //conversion factor
+ static const Int_t fgkBins; //number of bins for hists
+ static const Double_t fgkMaxBin; //max. value of wc
+ static const Double_t fgkRMax; //max. tabled value of R
+
+ static Int_t fgCounter;//static instance counter
+ Int_t fInstanceNumber; //instance number of class
Bool_t fMultSoft; //approximation type
- Bool_t fECMethod; //energy constraint method
- Double_t fQTransport; //transport coefficient
+ kECMethod fECMethod; //energy constraint method
+ Double_t fQTransport; //transport coefficient [GeV^2/fm]]
Double_t fMu; //Debye screening mass
+ Double_t fK; //proportional constant [fm]
Int_t fLengthMax; //maximum length
Int_t fLengthMaxOld; //maximum length used for histos
//discrete and cont part of quenching for
//both parton type and different lengths
TH1F ***fHistos; //!
+ TH1F *fHisto; //!
// data strucs for tables
- Double_t fxx[400];
- Double_t fxxg[400];
- Double_t fdaq[30];
- Double_t fdag[30];
- Double_t fcaq[30][261];
- Double_t fcag[30][261];
- Double_t frrr[30];
- Double_t frrrg[30];
- Bool_t fTablesLoaded;
+ Double_t fxx[400]; //sampled energy quark
+ Double_t fxxg[400]; //sampled energy gluon
+ Double_t fdaq[34]; //discrete weight quark
+ Double_t fdag[34]; //discrete weight gluon
+ Double_t fcaq[34][261]; //continuous weights quarks
+ Double_t fcag[34][261]; //continuous weights gluons
+ Double_t frrr[34]; //r value quark
+ Double_t frrrg[34]; //r value gluon
+ Bool_t fTablesLoaded; //tables loaded
ClassDef(AliQuenchingWeights,1) // Base class for Quenching Weights
};