move macro to macro dir
[u/mrichter/AliRoot.git] / TEPEMGEN / TEpEmGen.cxx
CommitLineData
c9c6bd3b 1/**************************************************************************
2 * Copyright(c) 1998-2002, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 * *
15 * *
16 * Copyright(c) 1997, 1998, 2002, Adrian Alscher and Kai Hencken *
17 * See $ALICE_ROOT/EpEmGen/diffcross.f for full Copyright notice *
18 * *
19 * *
20 * Copyright(c) 2002 Kai Hencken, Yuri Kharlov, Serguei Sadovsky *
21 * See $ALICE_ROOT/EpEmGen/epemgen.f for full Copyright notice *
22 * *
23 **************************************************************************/
24//------------------------------------------------------------------------
25// TEpEmGen is an interface class to fortran event generator of
26// single e+e- pair production in ultraperipheral PbPb collisions
27// at 5.5 GeV/c
28//%
29// Yuri.Kharlov@cern.ch
30// 9 October 2002
31//------------------------------------------------------------------------
32
63e30ba9 33#include "TRandom.h"
34
c9c6bd3b 35#include "TEpEmGen.h"
36#include "TClonesArray.h"
37#include "TParticle.h"
38#include "TEcommon.h"
39
40#ifndef WIN32
41# define ee_init ee_init_
42# define ee_event ee_event_
63e30ba9 43# define eernd eernd_
c9c6bd3b 44#else
45# define ee_init EE_INIT
46# define ee_event EE_EVENT
63e30ba9 47# define eernd EERND
c9c6bd3b 48#endif
49
50extern "C" {
51 void ee_init (Double_t &ymin, Double_t &ymax, Double_t &xmin, Double_t &xmax);
52 void ee_event (Double_t &ymin, Double_t &ymax, Double_t &xmin, Double_t &xmax,
53 Double_t &yE, Double_t &yP, Double_t &xE, Double_t &xP,
54 Double_t &phi, Double_t &w);
63e30ba9 55 Double_t eernd(Int_t*) {
56 Double_t r;
57 do r=gRandom->Rndm(); while(0 >= r || r >= 1);
58 return r;
59 }
c9c6bd3b 60}
61
62ClassImp(TEpEmGen)
63
64//------------------------------------------------------------------------------
65TEpEmGen::TEpEmGen() : TGenerator("TEpEmGen","TEpEmGen")
66{
67// TEpEmGen constructor: creates a TClonesArray in which it will store all
68// particles. Note that there may be only one functional TEpEmGen object
69// at a time, so it's not use to create more than one instance of it.
70
71 delete fParticles; // was allocated as TObjArray in TGenerator
72 fParticles = new TClonesArray("TParticle",2);
73
74}
75
76//------------------------------------------------------------------------------
77TEpEmGen::~TEpEmGen()
78{
79 // Destroys the object, deletes and disposes all TParticles currently on list.
80 if (fParticles) {
81 fParticles->Delete();
82 delete fParticles;
83 fParticles = 0;
84 }
85}
86
87//______________________________________________________________________________
88void TEpEmGen::GenerateEvent(Double_t ymin, Double_t ymax, Double_t ptmin, Double_t ptmax,
89 Double_t &yElectron, Double_t &yPositron,
90 Double_t &xElectron, Double_t &xPositron,
91 Double_t &phi12, Double_t &weight)
92{
93 //produce one event
94 ee_event(ymin,ymax,ptmin,ptmax,
95 yElectron,yPositron,xElectron,xPositron,
96 phi12,weight);
97}
98
99//______________________________________________________________________________
100void TEpEmGen::Initialize(Double_t ymin, Double_t ymax, Double_t ptmin, Double_t ptmax)
101{
102 // Initialize EpEmGen
103 Double_t ptminMeV = ptmin*1000;
104 Double_t ptmaxMeV = ptmax*1000;
105 ee_init(ymin,ymax,ptminMeV,ptmaxMeV);
106}
107
108//______________________________________________________________________________
109Double_t TEpEmGen::GetXsection()
110{
111 // Return cross section accumulated so far
112 return EEVENT.Xsecttot;
113}
114
115//______________________________________________________________________________
116Double_t TEpEmGen::GetDsection()
117{
118 // Return cross section error accumulated so far
119 return EEVENT.Dsecttot;
120}