const added.
[u/mrichter/AliRoot.git] / EVGEN / AliGenPMDlib.cxx
CommitLineData
0ed0a0a2 1/**************************************************************************
2 * Copyright(c) 1998-1999, 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/*
17$Log$
d5b6b483 18Revision 1.3 2001/03/09 13:01:41 morsch
19- enum constants for paramterisation type (particle family) moved to AliGen*lib.h
20- use AliGenGSIlib::kUpsilon, AliGenPHOSlib::kEtaPrime to access the constants
21
34f60c01 22Revision 1.2 2000/11/30 07:12:50 alibrary
23Introducing new Rndm and QA classes
24
65fb704d 25Revision 1.1 2000/09/08 15:37:58 morsch
26pt and y-parameterisations for PMD physics simulation.
27THIS VERSION IS JUST A TEMPLATE THE PT AND Y DISTRIBUTIONS HAVE TO BE CORRECTED !!!!.
28
0ed0a0a2 29*/
30
31#include "AliGenPMDlib.h"
0ed0a0a2 32#include "AliPDG.h"
65fb704d 33#include "TMath.h"
0ed0a0a2 34
35ClassImp(AliGenPMDlib)
36//
37// Neutral Pions
38
39Double_t AliGenPMDlib::PtPi0(Double_t *px, Double_t *dummy)
40{
41//
42// PT-PARAMETERIZATION CDF, PRL 61(88) 1819
43// POWER LAW FOR PT > 500 MEV
44// MT SCALING BELOW (T=160 MEV)
45//
46 const Double_t kp0 = 1.3;
47 const Double_t kxn = 8.28;
48 const Double_t kxlim=0.5;
49 const Double_t kt=0.160;
50 const Double_t kxmpi=0.139;
51 const Double_t kb=1.;
52 Double_t y, y1, xmpi2, ynorm, a;
53 Double_t x=*px;
54 //
55 y1=TMath::Power(kp0/(kp0+kxlim),kxn);
56 xmpi2=kxmpi*kxmpi;
57 ynorm=kb*(TMath::Exp(-sqrt(kxlim*kxlim+xmpi2)/kt));
58 a=ynorm/y1;
59 if (x > kxlim)
60 y=a*TMath::Power(kp0/(kp0+x),kxn);
61 else
62 y=kb*TMath::Exp(-sqrt(x*x+xmpi2)/kt);
63 return y*x;
64}
65
66//
67// y-distribution
68//
69Double_t AliGenPMDlib::YPi0( Double_t *py, Double_t *dummy)
70{
71 //
72 // y parametrisation for pi0
73 //
74 const Double_t ka1 = 4913.;
75 const Double_t ka2 = 1819.;
76 const Double_t keta1 = 0.22;
77 const Double_t keta2 = 3.66;
78 const Double_t kdeta1 = 1.47;
79 const Double_t kdeta2 = 1.51;
80 Double_t y=TMath::Abs(*py);
81 //
82 Double_t ex1 = (y-keta1)*(y-keta1)/(2*kdeta1*kdeta1);
83 Double_t ex2 = (y-keta2)*(y-keta2)/(2*kdeta2*kdeta2);
84 return ka1*TMath::Exp(-ex1)+ka2*TMath::Exp(-ex2);
85}
86
87// particle composition
88//
65fb704d 89Int_t AliGenPMDlib::IpPi0(TRandom *)
0ed0a0a2 90{
91// Pi0
92 return kPi0;
93}
94
95//____________________________________________________________
96//
97// Mt-scaling
98
99Double_t AliGenPMDlib::PtScal(Double_t pt, Int_t np)
100{
101 // SCALING EN MASSE PAR RAPPORT A PTPI
102 // MASS PI,K,ETA,RHO,OMEGA,ETA',PHI
103 const Double_t khm[10] = {.13957,.493,.5488,.769,.7826,.958,1.02,0,0,0};
104 // VALUE MESON/PI AT 5 GEV
105 const Double_t kfmax[10]={1.,0.3,0.55,1.0,1.0,1.0,1.0,0,0,0};
106 np--;
107 Double_t f5=TMath::Power(((sqrt(100.018215)+2.)/(sqrt(100.+khm[np]*khm[np])+2.0)),12.3);
108 Double_t fmax2=f5/kfmax[np];
109 // PIONS
110 Double_t ptpion=100.*PtPi0(&pt, (Double_t*) 0);
111 Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
112 (sqrt(pt*pt+khm[np]*khm[np])+2.0)),12.3)/ fmax2;
113 return fmtscal*ptpion;
114}
115//
116// kaon
117//
118// pt-distribution
119//____________________________________________________________
120
121Double_t AliGenPMDlib::PtEta( Double_t *px, Double_t *dummy)
122{
123// Kaon pT
124 return PtScal(*px,3);
125}
126
127// y-distribution
128//____________________________________________________________
129Double_t AliGenPMDlib::YEta( Double_t *py, Double_t *dummy)
130{
131 //
132 // y parametrisation for etas
133 //
134 const Double_t ka1 = 4913.;
135 const Double_t ka2 = 1819.;
136 const Double_t keta1 = 0.22;
137 const Double_t keta2 = 3.66;
138 const Double_t kdeta1 = 1.47;
139 const Double_t kdeta2 = 1.51;
140 Double_t y=TMath::Abs(*py);
141 //
142 Double_t ex1 = (y-keta1)*(y-keta1)/(2*kdeta1*kdeta1);
143 Double_t ex2 = (y-keta2)*(y-keta2)/(2*kdeta2*kdeta2);
144 return ka1*TMath::Exp(-ex1)+ka2*TMath::Exp(-ex2);
145}
146
147// particle composition
148//
65fb704d 149Int_t AliGenPMDlib::IpEta(TRandom *)
0ed0a0a2 150{
151 return 221;
152}
153
154
155typedef Double_t (*GenFunc) (Double_t*, Double_t*);
d5b6b483 156GenFunc AliGenPMDlib::GetPt(Int_t param, const char* tname) const
0ed0a0a2 157{
158// Return pointer to pT parameterisation
159 GenFunc func=NULL;
160 switch (param)
161 {
34f60c01 162 case kPion:
0ed0a0a2 163 func=PtPi0;
164 break;
34f60c01 165 case kEta:
0ed0a0a2 166 func=PtEta;
167 break;
168 default:
169 func=0;
170 printf("<AliGenPMDlib::GetPt> unknown parametrisation\n");
171 }
172 return func;
173}
174
d5b6b483 175GenFunc AliGenPMDlib::GetY(Int_t param, const char* tname) const
0ed0a0a2 176{
177// Return pointer to y- parameterisation
178 GenFunc func=NULL;
179 switch (param)
180 {
34f60c01 181 case kPion:
0ed0a0a2 182 func=YPi0;
183 break;
34f60c01 184 case kEta:
0ed0a0a2 185 func=YEta;
186 break;
187 default:
188 func=0;
189 printf("<AliGenPMDlib::GetY> unknown parametrisation\n");
190 }
191 return func;
192
193}
65fb704d 194typedef Int_t (*GenFuncIp) (TRandom *);
d5b6b483 195GenFuncIp AliGenPMDlib::GetIp(Int_t param, const char* tname) const
0ed0a0a2 196{
197// Return pointer to particle type parameterisation
198 GenFuncIp func=NULL;
199 switch (param)
200 {
34f60c01 201 case kPion:
0ed0a0a2 202 func=IpPi0;
203 break;
34f60c01 204 case kEta:
0ed0a0a2 205 func=IpEta;
206 break;
207 default:
208 printf("<AliGenPMDlib::GetIp> unknown parametrisation\n");
209 }
210 return func;
211}
212
213
214
215