Use AliPythiaRndm for Gaussian random numbers.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jun 2004 14:34:43 +0000 (14:34 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jun 2004 14:34:43 +0000 (14:34 +0000)
PYTHIA6/AliPythiaRndm.cxx
PYTHIA6/pyquen.F

index c0368062bf7cbd302c91ee0f6e5fdd4f1a57ca49..7efc265efa2facea624eec050fabdf2cedbf4ae6 100644 (file)
@@ -57,20 +57,36 @@ TRandom * AliPythiaRndm::GetPythiaRandom() {
 }
 
 //_______________________________________________________________________
-#define pyr    pyr_
-#define pyrset pyrset_
-#define pyrget pyrget_
+#define pyr        pyr_
+#define pygauss    pygauss_
+#define pyrset     pyrset_
+#define pyrget     pyrget_
 
 extern "C" {
-  Double_t pyr(Int_t*) 
-  {
-    // Wrapper to FINCTION PYR from PYTHIA
-    // Uses static method to retrieve the pointer to the (C++) generator
-    Double_t r;
-    do r=AliPythiaRndm::GetPythiaRandom()->Rndm();
-    while(0 >= r || r >= 1);
-    return r;
-  }
-  void pyrset(Int_t*,Int_t*) {}
-  void pyrget(Int_t*,Int_t*) {}
+    Double_t pyr(Int_t*) 
+    {
+       // Wrapper to FINCTION PYR from PYTHIA
+       // Uses static method to retrieve the pointer to the (C++) generator
+       Double_t r;
+       do r=AliPythiaRndm::GetPythiaRandom()->Rndm();
+       while(0 >= r || r >= 1);
+       return r;
+    }
+    
+    Double_t pygauss(Double_t x0, Double_t sig)
+    {
+       Double_t s = 2.;
+       Double_t v1 = 0.;
+       Double_t v2 = 0.;
+       
+       while (s > 1.) {
+           v1 = 2. * pyr(0) - 1.;
+           v2 = 2. * pyr(0) - 1.;
+           s = v1 * v1 + v2 * v2;
+       }
+       return v1 * TMath::Sqrt(-2. * TMath::Log(s) / s) * sig + x0;
+    }
+
+    void pyrset(Int_t*,Int_t*) {}
+    void pyrget(Int_t*,Int_t*) {}
 }
index a00c8b940c29da8d09f7c50c49dcd2fa3273d1cd..8f97a49a6e915157ca418ae2fe7467a9a5c5e048 100644 (file)
       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
       IMPLICIT INTEGER(I-N)
       INTEGER PYK,PYCHGE,PYCOMP
-      external plthik, pln, plt, pls, gauss, gluang 
+      external plthik, pln, plt, pls, pygauss, gluang 
       external pyp,pyr,pyk 
       common /plpar1/ tau0,T0,TC,sigqq,AW,RA,mvisc,nf
       common /plpar2/ pln0,taupl,tauh,sigpl,sigh,sigplh,sigqqh,rg,rgn 
@@ -1019,18 +1019,18 @@ c      dc=1.d0                                         !massless parton
        end
 
 * function to generate gauss distribution
-      double precision function gauss(x0,sig)
-      IMPLICIT DOUBLE PRECISION(A-H, O-Z)
-      IMPLICIT INTEGER(I-N)
- 41   u1=pyr(0) 
-      u2=pyr(0)  
-      v1=2.d0*u1-1.d0
-      v2=2.d0*u2-1.d0 
-      s=v1**2+v2**2
-      if(s.gt.1) go to 41
-      gauss=v1*dsqrt(-2.d0*dlog(s)/s)*sig+x0
-      return
-      end    
+c      double precision function gauss(x0,sig)
+c      IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+c      IMPLICIT INTEGER(I-N)
+c 41   u1=pyr(0) 
+c      u2=pyr(0)  
+c      v1=2.d0*u1-1.d0
+c      v2=2.d0*u2-1.d0 
+c      s=v1**2+v2**2
+c      if(s.gt.1) go to 41
+c      gauss=v1*dsqrt(-2.d0*dlog(s)/s)*sig+x0
+c      return
+c      end    
       
 * function to calculate angular distribution of emitted gluons       
       double precision function gluang(x)