]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FASTSIM/AliQuenchingWeights.h
covertity fix 24879
[u/mrichter/AliRoot.git] / FASTSIM / AliQuenchingWeights.h
index f87d96ecb85f374dd68b62e12f1fad14aa26d5e3..0f5d088afe7f7a1aff1f552ae200eeba9c6f97f5 100644 (file)
 //                     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",
@@ -55,75 +72,113 @@ class AliQuenchingWeights : public TObject {
                        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
 };