Line data Source code
1 : #ifndef ALIQUENCHINGWEIGHTS_H
2 : #define ALIQUENCHINGWEIGHTS_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 : * See cxx source for full Copyright notice */
5 :
6 : /* $Id$ */
7 :
8 : //----------------------------------------------------------------------------
9 : // Implementation of the class to calculate the parton energy loss
10 : // Based on the "BDMPS" quenching weights by C.A.Salgado and U.A.Wiedemann
11 : //
12 : // References:
13 : // C.A.Salgado and U.A.Wiedemann, Phys.Rev.D68 (2003) 014008 [hep-ph/0302184]
14 : // A.Dainese, Eur.Phys.J.C, in press, [nucl-ex/0312005]
15 : //
16 : // Origin: C. Loizides constantin.loizides@cern.ch
17 : // A. Dainese andrea.dainese@pd.infn.it
18 : //----------------------------------------------------------------------------
19 :
20 : #include <TMath.h>
21 : #include <TObject.h>
22 : class TH1F;
23 :
24 : class AliQuenchingWeights : public TObject {
25 : public:
26 : enum kECMethod {kDefault=0,kReweight=1,kReweightCont=2};
27 :
28 : AliQuenchingWeights();
29 : AliQuenchingWeights(const AliQuenchingWeights& a);
30 : AliQuenchingWeights& operator=(const AliQuenchingWeights& a)
31 0 : {a.Copy(*this); return(*this);}
32 : virtual ~AliQuenchingWeights();
33 : void Init();
34 : void Reset();
35 : Int_t SampleEnergyLoss();
36 : Int_t SampleEnergyLoss(Int_t ipart, Double_t r);
37 :
38 : Double_t GetELossRandom(Int_t ipart, Double_t length, Double_t e=1.e10) const;
39 : Double_t CalcQuenchedEnergy(Int_t ipart, Double_t length, Double_t e) const;
40 : Double_t GetELossRandom(Int_t ipart, TH1F *hell, Double_t e=1.e10) const;
41 : Double_t CalcQuenchedEnergy(Int_t ipart, TH1F *hell, Double_t e) const;
42 : Double_t GetELossRandomK(Int_t ipart, Double_t I0, Double_t I1, Double_t e=1.e10);
43 : Double_t CalcQuenchedEnergyK(Int_t ipart, Double_t I0, Double_t I1, Double_t e);
44 : Double_t GetELossRandomKFast(Int_t ipart, Double_t I0, Double_t I1, Double_t e=1.e10);
45 : Double_t GetELossRandomKFastR(Int_t ipart, Double_t r, Double_t wc, Double_t e=1.e10);
46 : Double_t CalcQuenchedEnergyKFast(Int_t ipart, Double_t I0, Double_t I1, Double_t e);
47 :
48 : Double_t GetDiscreteWeight(Int_t ipart, Double_t I0, Double_t I1);
49 : Double_t GetDiscreteWeightR(Int_t ipart, Double_t r);
50 : void GetZeroLossProb(Double_t &p,Double_t &prw,Double_t &prwcont,
51 : Int_t ipart,Double_t I0,Double_t I1,Double_t e=1.e10);
52 : void GetZeroLossProbR(Double_t &p,Double_t &prw, Double_t &prwcont,
53 : Int_t ipart,Double_t r,Double_t wc,Double_t e=1.e10);
54 :
55 : //multiple soft scattering approximation
56 : Int_t InitMult(const Char_t *contall="$(ALICE_ROOT)/FASTSIM/data/cont_mult.all",
57 : const Char_t *discall="$(ALICE_ROOT)/FASTSIM/data/disc_mult.all");
58 :
59 : //single hard scattering approximation
60 : Int_t InitSingleHard(const Char_t *contall="$(ALICE_ROOT)/FASTSIM/data/cont_lin.all",
61 : const Char_t *discall="$(ALICE_ROOT)/FASTSIM/data/disc_lin.all");
62 :
63 : Int_t CalcMult(Int_t ipart, Double_t rrrr,Double_t xxxx,
64 : Double_t &continuous,Double_t &discrete) const;
65 : Int_t CalcMult(Int_t ipart,
66 : Double_t w, Double_t qtransp, Double_t length,
67 : Double_t &continuous,Double_t &discrete) const;
68 : Int_t CalcSingleHard(Int_t ipart, Double_t rrrr,Double_t xxxx,
69 : Double_t &continuous,Double_t &discrete) const;
70 : Int_t CalcSingleHard(Int_t ipart,
71 : Double_t w, Double_t mu, Double_t length,
72 : Double_t &continuous,Double_t &discrete) const;
73 :
74 : Double_t CalcWC(Double_t q, Double_t l) const
75 0 : {return 0.5*q*l*l*fgkConvFmToInvGeV;}
76 :
77 : Double_t CalcWCbar(Double_t mu, Double_t l) const
78 0 : {return 0.5*mu*mu*l*fgkConvFmToInvGeV;}
79 :
80 : Double_t CalcWC(Double_t l) const
81 0 : {if(fMultSoft) return CalcWC(fQTransport,l);
82 0 : else return CalcWCbar(fMu,l);}
83 :
84 : Double_t CalcWCk(Double_t I1) const
85 0 : {if(fMultSoft) return CalcWCk(fK,I1);
86 0 : else return -1;} //not implemented!
87 :
88 : Double_t CalcWCk(Double_t k, Double_t I1) const
89 0 : {if(fMultSoft) return k*I1/fgkConvFmToInvGeV;
90 0 : else return -1;} //not implemented!
91 :
92 : Double_t CalcR(Double_t wc, Double_t l) const;
93 :
94 : Double_t CalcRk(Double_t I0, Double_t I1) const
95 0 : {return CalcRk(fK,I0,I1);}
96 :
97 : Double_t CalcRk(Double_t k, Double_t I0, Double_t I1) const;
98 :
99 : Double_t CalcQk(Double_t I0, Double_t I1) const
100 0 : {return CalcQk(fK,I0,I1);}
101 :
102 : Double_t CalcQk(Double_t k, Double_t I0, Double_t I1) const
103 0 : {return I0*I0/2./I1/fgkConvFmToInvGeV/fgkConvFmToInvGeV*k;}
104 :
105 : Double_t CalcLk(Double_t i0, Double_t i1) const
106 0 : {return 2.*i1/i0;}
107 :
108 : Int_t CalcLengthMax(Double_t q) const
109 0 : {Double_t l3max=fgkRMax/.5/q/fgkConvFmToInvGeV/fgkConvFmToInvGeV;
110 0 : return (Int_t)TMath::Power(l3max,1./3.);}
111 :
112 : const TH1F* GetHisto(Int_t ipart,Double_t length) const;
113 :
114 0 : void SetMu(Double_t m=1.) {fMu=m;}
115 0 : void SetQTransport(Double_t q=1.) {fQTransport=q;}
116 0 : void SetK(Double_t k=4.e5) {fK=k;} //about 1 GeV^2/fm
117 : void SetECMethod(kECMethod type=kDefault);
118 0 : void SetLengthMax(Int_t l=20) {fLengthMax=l;}
119 :
120 0 : Float_t GetMu() const {return fMu;}
121 0 : Float_t GetQTransport() const {return fQTransport;}
122 0 : Float_t GetK() const {return fK;}
123 0 : kECMethod GetECMethod() const {return fECMethod;}
124 0 : Bool_t GetTablesLoaded() const {return fTablesLoaded;}
125 0 : Bool_t GetMultSoft() const {return fMultSoft;}
126 0 : Int_t GetLengthMax() const {return fLengthMax;}
127 :
128 : TH1F* ComputeQWHisto (Int_t ipart,Double_t medval,Double_t length) const;
129 : TH1F* ComputeQWHistoX(Int_t ipart,Double_t medval,Double_t length) const;
130 : TH1F* ComputeQWHistoX(Int_t ipart,Double_t r) const;
131 : TH1F* ComputeELossHisto(Int_t ipart,Double_t medval,Double_t l,Double_t e=1.e10) const;
132 : TH1F* ComputeELossHisto(Int_t ipart,Double_t medval,TH1F *hEll,Double_t e=1.e10) const;
133 : TH1F* ComputeELossHisto(Int_t ipart,Double_t r) const;
134 :
135 : Double_t GetMeanELoss(Int_t ipart,Double_t medval,Double_t l) const;
136 : Double_t GetMeanELoss(Int_t ipart,Double_t medval,TH1F *hEll) const;
137 : Double_t GetMeanELoss(Int_t ipart,Double_t r) const;
138 :
139 : void PlotDiscreteWeights(Double_t len=4,Double_t qm=5) const;
140 : void PlotContWeights(Int_t itype,Double_t len) const;
141 : void PlotContWeightsVsL(Int_t itype,Double_t medval) const;
142 : void PlotAvgELoss(Double_t len,Double_t qm=5,Double_t e=1.e10) const;
143 : void PlotAvgELoss(TH1F *hEll,Double_t e=1.e10) const;
144 : void PlotAvgELossVsL(Double_t e=1.e10) const;
145 : void PlotAvgELossVsPt(Double_t medval,Double_t len) const;
146 : void PlotAvgELossVsPt(Double_t medval,TH1F *hEll) const;
147 :
148 : protected:
149 : Int_t GetIndex(Double_t len) const;
150 :
151 : static const Double_t fgkConvFmToInvGeV; //conversion factor
152 : static const Int_t fgkBins; //number of bins for hists
153 : static const Double_t fgkMaxBin; //max. value of wc
154 : static const Double_t fgkRMax; //max. tabled value of R
155 :
156 : static Int_t fgCounter;//static instance counter
157 : Int_t fInstanceNumber; //instance number of class
158 :
159 : Bool_t fMultSoft; //approximation type
160 : kECMethod fECMethod; //energy constraint method
161 : Double_t fQTransport; //transport coefficient [GeV^2/fm]]
162 : Double_t fMu; //Debye screening mass
163 : Double_t fK; //proportional constant [fm]
164 : Int_t fLengthMax; //maximum length
165 : Int_t fLengthMaxOld; //maximum length used for histos
166 :
167 : //discrete and cont part of quenching for
168 : //both parton type and different lengths
169 : TH1F ***fHistos; //!
170 : TH1F *fHisto; //!
171 :
172 : // data strucs for tables
173 : Double_t fxx[400]; //sampled energy quark
174 : Double_t fxxg[400]; //sampled energy gluon
175 : Double_t fdaq[34]; //discrete weight quark
176 : Double_t fdag[34]; //discrete weight gluon
177 : Double_t fcaq[34][261]; //continuous weights quarks
178 : Double_t fcag[34][261]; //continuous weights gluons
179 : Double_t frrr[34]; //r value quark
180 : Double_t frrrg[34]; //r value gluon
181 : Bool_t fTablesLoaded; //tables loaded
182 :
183 12 : ClassDef(AliQuenchingWeights,1) // Base class for Quenching Weights
184 : };
185 :
186 : #endif
|