ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//-----------------------------------------------------------------------------
//   Class: AliPythiaRndm
//   Responsibilities: Interface to Root random number generator 
//                     from Fortran (re-implements FINCTION PYR from PYTHIA)
//                     Very similar to AliHijingRndm
//   Collaborators: AliPythia and AliGenPythia classes
//   Example:
//
//   root> AliPythia::Instance();
//   root> AliPythiaRndm::SetPythiaRandom(new TRandom3()); 
//   root> AliPythiaRndm::GetPythiaRandom()->SetSeed(0);
//   root> cout<<"Seed "<< AliPythiaRndm::GetPythiaRandom()->GetSeed() <<endl;
//
//-----------------------------------------------------------------------------

#include <TMath.h>
#include <TRandom.h>

#include "AliPythiaRndm.h"

TRandom * AliPythiaRndm::fgPythiaRandom=0;

ClassImp(AliPythiaRndm)


//_______________________________________________________________________
void AliPythiaRndm::SetPythiaRandom(TRandom *ran) {
  //
  // Sets the pointer to an existing random numbers generator
  //
  if(ran) fgPythiaRandom=ran;
  else fgPythiaRandom=gRandom;
}

//_______________________________________________________________________
TRandom * AliPythiaRndm::GetPythiaRandom() {
  //
  // Retrieves the pointer to the random numbers generator
  //
  if (!fgPythiaRandom) fgPythiaRandom=gRandom;
  return fgPythiaRandom;
}

//_______________________________________________________________________
#define pyr        pyr_
#define pygauss    pygauss_
#define pyrset     pyrset_
#define pyrget     pyrget_

extern "C" {
    Double_t pyr(Int_t*) 
    {
	// Wrapper to FUNCTION 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*) {}
}
 AliPythiaRndm.cxx:1
 AliPythiaRndm.cxx:2
 AliPythiaRndm.cxx:3
 AliPythiaRndm.cxx:4
 AliPythiaRndm.cxx:5
 AliPythiaRndm.cxx:6
 AliPythiaRndm.cxx:7
 AliPythiaRndm.cxx:8
 AliPythiaRndm.cxx:9
 AliPythiaRndm.cxx:10
 AliPythiaRndm.cxx:11
 AliPythiaRndm.cxx:12
 AliPythiaRndm.cxx:13
 AliPythiaRndm.cxx:14
 AliPythiaRndm.cxx:15
 AliPythiaRndm.cxx:16
 AliPythiaRndm.cxx:17
 AliPythiaRndm.cxx:18
 AliPythiaRndm.cxx:19
 AliPythiaRndm.cxx:20
 AliPythiaRndm.cxx:21
 AliPythiaRndm.cxx:22
 AliPythiaRndm.cxx:23
 AliPythiaRndm.cxx:24
 AliPythiaRndm.cxx:25
 AliPythiaRndm.cxx:26
 AliPythiaRndm.cxx:27
 AliPythiaRndm.cxx:28
 AliPythiaRndm.cxx:29
 AliPythiaRndm.cxx:30
 AliPythiaRndm.cxx:31
 AliPythiaRndm.cxx:32
 AliPythiaRndm.cxx:33
 AliPythiaRndm.cxx:34
 AliPythiaRndm.cxx:35
 AliPythiaRndm.cxx:36
 AliPythiaRndm.cxx:37
 AliPythiaRndm.cxx:38
 AliPythiaRndm.cxx:39
 AliPythiaRndm.cxx:40
 AliPythiaRndm.cxx:41
 AliPythiaRndm.cxx:42
 AliPythiaRndm.cxx:43
 AliPythiaRndm.cxx:44
 AliPythiaRndm.cxx:45
 AliPythiaRndm.cxx:46
 AliPythiaRndm.cxx:47
 AliPythiaRndm.cxx:48
 AliPythiaRndm.cxx:49
 AliPythiaRndm.cxx:50
 AliPythiaRndm.cxx:51
 AliPythiaRndm.cxx:52
 AliPythiaRndm.cxx:53
 AliPythiaRndm.cxx:54
 AliPythiaRndm.cxx:55
 AliPythiaRndm.cxx:56
 AliPythiaRndm.cxx:57
 AliPythiaRndm.cxx:58
 AliPythiaRndm.cxx:59
 AliPythiaRndm.cxx:60
 AliPythiaRndm.cxx:61
 AliPythiaRndm.cxx:62
 AliPythiaRndm.cxx:63
 AliPythiaRndm.cxx:64
 AliPythiaRndm.cxx:65
 AliPythiaRndm.cxx:66
 AliPythiaRndm.cxx:67
 AliPythiaRndm.cxx:68
 AliPythiaRndm.cxx:69
 AliPythiaRndm.cxx:70
 AliPythiaRndm.cxx:71
 AliPythiaRndm.cxx:72
 AliPythiaRndm.cxx:73
 AliPythiaRndm.cxx:74
 AliPythiaRndm.cxx:75
 AliPythiaRndm.cxx:76
 AliPythiaRndm.cxx:77
 AliPythiaRndm.cxx:78
 AliPythiaRndm.cxx:79
 AliPythiaRndm.cxx:80
 AliPythiaRndm.cxx:81
 AliPythiaRndm.cxx:82
 AliPythiaRndm.cxx:83
 AliPythiaRndm.cxx:84
 AliPythiaRndm.cxx:85
 AliPythiaRndm.cxx:86
 AliPythiaRndm.cxx:87
 AliPythiaRndm.cxx:88
 AliPythiaRndm.cxx:89
 AliPythiaRndm.cxx:90
 AliPythiaRndm.cxx:91
 AliPythiaRndm.cxx:92
 AliPythiaRndm.cxx:93
 AliPythiaRndm.cxx:94