New class added.
[u/mrichter/AliRoot.git] / EVGEN / AliGenGSIlib.cxx
CommitLineData
014616eb 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 **************************************************************************/
fdcaa191 15
88cb7938 16/* $Id$ */
014616eb 17
fdcaa191 18/////////////////////////////////////////////////////////////////////////////
19// //
20// Implementation of AliGenlib to collect parametrisations used for //
21// GSI simulations. //
22// It is an extension of AliMUONLib providing in addition the option //
23// for different parametrisations of pt, y and ip for every particle type //
24// //
25// Responsible: Andres.Sandoval@cern.ch //
26// //
27/////////////////////////////////////////////////////////////////////////////
675e9664 28
65fb704d 29#include "TMath.h"
fdcaa191 30#include "TRandom.h"
65fb704d 31#include "TString.h"
014616eb 32#include "AliGenGSIlib.h"
014616eb 33
fdcaa191 34
014616eb 35ClassImp(AliGenGSIlib)
36
fdcaa191 37//==========================================================================
014616eb 38//
fdcaa191 39// Definition of Particle Distributions
40//
41//==========================================================================
014616eb 42//
fdcaa191 43// Upsilon
44//
45//--------------------------------------------------------------------------
46//
47// upsilon particle composition
48//
49//--------------------------------------------------------------------------
50Int_t AliGenGSIlib::IpUpsilon(TRandom *)
014616eb 51{
f4cd22aa 52// Return upsilon pdg code
fdcaa191 53
54 return 553;
55
56}
75e0cc59 57Double_t AliGenGSIlib::PtUpsilonFlat( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 58{
fdcaa191 59//--------------------------------------------------------------------------
60//
61// upsilon pt-distribution FLAT
62//
63//____________________________________________________________--------------
f4cd22aa 64
fdcaa191 65 const Double_t kptmin = 0.0;
66 const Double_t kptmax = 15.0;
014616eb 67 Double_t x=*px;
fdcaa191 68 Double_t weight = 0.;
69
f7b22746 70 if ((x > kptmin) && (x < kptmax)) weight = 1.;
fdcaa191 71
72 return weight;
73
74}
75e0cc59 75Double_t AliGenGSIlib::YUpsilonFlat(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 76{
fdcaa191 77//--------------------------------------------------------------------------
78//
79// upsilon y-distribution FLAT
80//
81//--------------------------------------------------------------------------
fdcaa191 82
83 const Double_t ky0 = 1.5;
84 const Double_t kb=1.;
85 Double_t yu;
86 Double_t y=TMath::Abs(*py);
87
88 if (y < ky0)
89 yu=kb;
90 else
91 yu = 0.;
92
93 return yu;
94
95}
75e0cc59 96Double_t AliGenGSIlib::PtUpsilonRitman( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 97{
fdcaa191 98//--------------------------------------------------------------------------
99//
100// upsilon pt-distribution RITMAN
101//
102//--------------------------------------------------------------------------
fdcaa191 103
014616eb 104 const Double_t kpt0 = 4.7;
105 const Double_t kxn = 3.5;
106 Double_t x=*px;
fdcaa191 107
014616eb 108 Double_t pass1 = 1.+((x*x)/(kpt0*kpt0));
fdcaa191 109
014616eb 110 return x/TMath::Power(pass1,kxn);
111
112}
75e0cc59 113Double_t AliGenGSIlib::YUpsilonRitman(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 114{
fdcaa191 115//--------------------------------------------------------------------------
014616eb 116//
fdcaa191 117// upsilon y-distribution RITMAN
014616eb 118//
fdcaa191 119//--------------------------------------------------------------------------
014616eb 120
fdcaa191 121 const Double_t ky0 = 3.;
122 const Double_t kb=1.;
123 Double_t yu;
124 Double_t y=TMath::Abs(*py);
014616eb 125
fdcaa191 126 if (y < ky0)
014616eb 127 yu=kb;
fdcaa191 128 else
014616eb 129 yu=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
fdcaa191 130
131 return yu;
132
014616eb 133}
75e0cc59 134Double_t AliGenGSIlib::PtUpsilonKarel( const Double_t */*px*/, const Double_t */*dummy*/ )
f4cd22aa 135{
fdcaa191 136//--------------------------------------------------------------------------
014616eb 137//
fdcaa191 138// upsilon pt-distribution kAREL
139//
140//--------------------------------------------------------------------------
f4cd22aa 141// to implement
014616eb 142
fdcaa191 143 return 0.1;
144
014616eb 145}
75e0cc59 146Double_t AliGenGSIlib::YUpsilonKarel(const Double_t */*py*/, const Double_t */*dummy*/)
f4cd22aa 147{
fdcaa191 148//--------------------------------------------------------------------------
014616eb 149//
fdcaa191 150// upsilon y-distribution KAREL
014616eb 151//
fdcaa191 152//--------------------------------------------------------------------------
014616eb 153
014616eb 154 //to implement
014616eb 155
fdcaa191 156 return 0.2;
014616eb 157
fdcaa191 158}
75e0cc59 159Double_t AliGenGSIlib::PtUpsilonMUON( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 160{
fdcaa191 161//--------------------------------------------------------------------------
162//
163// upsilon pt-distribution MUONlib
164//
165//--------------------------------------------------------------------------
fdcaa191 166
014616eb 167 const Double_t kpt0 = 5.3;
168 const Double_t kxn = 2.5;
169 Double_t x=*px;
fdcaa191 170
014616eb 171 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
fdcaa191 172
014616eb 173 return x/TMath::Power(pass1,kxn);
fdcaa191 174
014616eb 175}
75e0cc59 176Double_t AliGenGSIlib::YUpsilonMUON(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 177{
fdcaa191 178//--------------------------------------------------------------------------
014616eb 179//
fdcaa191 180// upsilon y-distribution MUONlib
014616eb 181//
fdcaa191 182//--------------------------------------------------------------------------
fdcaa191 183
014616eb 184 const Double_t ky0 = 3.;
185 const Double_t kb=1.;
186 Double_t yu;
187 Double_t y=TMath::Abs(*py);
fdcaa191 188
014616eb 189 if (y < ky0)
190 yu=kb;
191 else
192 yu=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
fdcaa191 193
014616eb 194 return yu;
fdcaa191 195
014616eb 196}
fdcaa191 197//--------------------------------------------------------------------------
198//
199// J/Psi
200//
f4cd22aa 201Int_t AliGenGSIlib::IpJpsi(TRandom *)
202{
fdcaa191 203//--------------------------------------------------------------------------
204//
205// J/Psi particle composition
014616eb 206//
fdcaa191 207//--------------------------------------------------------------------------
fdcaa191 208
209 return 443;
210
014616eb 211}
75e0cc59 212Double_t AliGenGSIlib::PtJpsiFlat( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 213{
fdcaa191 214//--------------------------------------------------------------------------
215//
216// J/Psi pt-distribution FLAT
217//
218//--------------------------------------------------------------------------
014616eb 219
fdcaa191 220 const Double_t kptmin = 0.0;
221 const Double_t kptmax = 15.0;
222 Double_t x=*px;
223 Double_t weight = 0.;
014616eb 224
f7b22746 225 if ((x > kptmin) && (x < kptmax)) weight = 1.;
014616eb 226
fdcaa191 227 return weight;
228
229}
75e0cc59 230Double_t AliGenGSIlib::YJpsiFlat(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 231{
fdcaa191 232//--------------------------------------------------------------------------
233//
234// J/Psi y-distribution FLAT
235//
236//--------------------------------------------------------------------------
fdcaa191 237
238 const Double_t ky0 = 1.5;
239 const Double_t kb=1.;
240 Double_t yu;
241 Double_t y=TMath::Abs(*py);
242
243 if (y < ky0)
244 yu=kb;
245 else
246 yu = 0.;
247
248 return yu;
249
250}
75e0cc59 251Double_t AliGenGSIlib::PtJpsiMUON( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 252{
fdcaa191 253//--------------------------------------------------------------------------
254//
255// J/Psi pt-distribution MUONlib
256//
257//--------------------------------------------------------------------------
fdcaa191 258
259 const Double_t kpt0 = 4.;
260 const Double_t kxn = 3.6;
261 Double_t x=*px;
262
263 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
264 return x/TMath::Power(pass1,kxn);
265
266}
75e0cc59 267Double_t AliGenGSIlib::PtJpsiRitman( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 268{
fdcaa191 269//--------------------------------------------------------------------------
270//
271// J/Psi pt-distribution Ritman
272//
273//--------------------------------------------------------------------------
fdcaa191 274
275 const Double_t kpt0 = 2.3;
276 const Double_t kxn = 3.5;
277 Double_t x=*px;
278
279 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
280
281 return x/TMath::Power(pass1,kxn);
282
283}
75e0cc59 284Double_t AliGenGSIlib::YJpsiMUON(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 285{
fdcaa191 286//--------------------------------------------------------------------------
287//
288// J/Psi y-distribution MUONlib
289//
290//--------------------------------------------------------------------------
fdcaa191 291
292 const Double_t ky0 = 4.;
293 const Double_t kb=1.;
294 Double_t yj;
295 Double_t y=TMath::Abs(*py);
296
297 if (y < ky0)
298 yj=kb;
299 else
300 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
301 return yj;
302
303}
304//--------------------------------------------------------------------------
305//
306// J/Psi pt-distribution by Sergei
307//
308//--------------------------------------------------------------------------
198bb1c7 309//Double_t AliGenGSIlib::PtJpsi( Double_t *px, Double_t */*dummy*/ )
fdcaa191 310//{
311
312// return x = gRandom->Rndm()*10.;
313
314//}
315//--------------------------------------------------------------------------
316//
317// J/Psi y-distribution by Sergei
318//
319//--------------------------------------------------------------------------
320/*Double_t AliGenGSIlib::YJpsi(Double_t *py, Double_t *dummy)
321{
322
323 const Double_t ky0 = 4.;
324 const Double_t kb=1.;
325 Double_t yj;
326 Double_t y=TMath::Abs(*py);
327 //
328 if (y < ky0)
329 yj=kb;
330 else
331 yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
332 return yj;
333
334}
335*/
336//--------------------------------------------------------------------------
337//
338// Charm
339//
340//--------------------------------------------------------------------------
f4cd22aa 341Int_t AliGenGSIlib::IpCharm(TRandom *ran)
342{
fdcaa191 343//
344// charm particle composition
345//
346//--------------------------------------------------------------------------
fdcaa191 347
348 Float_t random;
349 Int_t ip;
350 // 411,421,431,4122
351 random = ran->Rndm();
352 if (random < 0.5) {
353 ip=411;
354 } else if (random < 0.75) {
355 ip=421;
356 } else if (random < 0.90) {
357 ip=431;
358 } else {
359 ip=4122;
360 }
361 if (ran->Rndm() < 0.5) {ip=-ip;}
362
363 return ip;
364
365}
75e0cc59 366Double_t AliGenGSIlib::PtCharmFlat( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 367{
fdcaa191 368//--------------------------------------------------------------------------
369//
370// charm pt-distribution, FLAT
371//
372//--------------------------------------------------------------------------
fdcaa191 373
374 Double_t x=*px;
375
376 if (x>10.) x = 0.;
377 else x=1.;
378 return x ;
379
380}
75e0cc59 381Double_t AliGenGSIlib::PtCharmGSI( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 382{
fdcaa191 383//--------------------------------------------------------------------------
384//
385// charm pt-distribution, from Dariuzs Miskowiec
386//
387//--------------------------------------------------------------------------
f4cd22aa 388
fdcaa191 389 //Taken from PYTHIA with MRS D-' (3031 from PDFLIB), K=3.0
390 const Double_t kp1 = 1.3;
391 const Double_t kp2 = 0.39;
392 const Double_t kp3 = 0.018;
393 const Double_t kp4 = 0.91;
394 Double_t x=*px;
395
396 Double_t pass1 =TMath::Exp(-x/kp2) ;
397 Double_t pass2 =TMath::Exp(-x/kp4) ;
398 return TMath::Power(x,kp1) * (pass1 + kp3 * pass2);
399
400}
75e0cc59 401Double_t AliGenGSIlib::PtCharmMUON( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 402{
fdcaa191 403//--------------------------------------------------------------------------
404//
405// charm pt-distribution, from MUONlib
406//
407//--------------------------------------------------------------------------
fdcaa191 408
409 const Double_t kpt0 = 4.08;
410 const Double_t kxn = 9.40;
411 Double_t x=*px;
412
413 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
414
415 return x/TMath::Power(pass1,kxn);
416
417}
75e0cc59 418Double_t AliGenGSIlib::YCharm( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 419{
fdcaa191 420//--------------------------------------------------------------------------
421//
422// charm y-distribution
423//
424//--------------------------------------------------------------------------
fdcaa191 425
426 Double_t *dum=0;
427
428 return YJpsiMUON(px,dum);
429
430}
431//--------------------------------------------------------------------------
432//
433// Beauty
434//
435//--------------------------------------------------------------------------
f4cd22aa 436Int_t AliGenGSIlib::IpBeauty(TRandom *ran)
437{
fdcaa191 438//
439// beauty particle composition
440//
441//--------------------------------------------------------------------------
fdcaa191 442
443 Float_t random;
444 Int_t ip;
445 random = ran->Rndm();
446 if (random < 0.5) {
447 ip=511;
448 } else if (random < 0.75) {
449 ip=521;
450 } else if (random < 0.90) {
451 ip=531;
452 } else {
453 ip=5122;
454 }
455 if (ran->Rndm() < 0.5) {ip=-ip;}
456
457 return ip;
458}
75e0cc59 459Double_t AliGenGSIlib::PtBeautyFlat( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 460{
fdcaa191 461//--------------------------------------------------------------------------
462//
463// beauty pt-distribution, FLAT
464//
465//--------------------------------------------------------------------------
fdcaa191 466
467 Double_t x=*px;
468
469 if (x>10.) x=0.;
470 else x = 1.;
471 return x ;
472
473}
75e0cc59 474Double_t AliGenGSIlib::PtBeautyGSI( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 475{
fdcaa191 476//--------------------------------------------------------------------------
477//
478//
479// beauty pt-distribution, from D. Miskowiec
480//
481//--------------------------------------------------------------------------
f4cd22aa 482
fdcaa191 483 //Taken from PYTHIA with MRS D-' (3031 from PDFLIB), K=3.0
484 const Double_t kp1 = 1.3;
485 const Double_t kp2 = 1.78;
486 const Double_t kp3 = 0.0096;
487 const Double_t kp4 = 4.16;
488 Double_t x=*px;
489
490 Double_t pass1 =TMath::Exp(-x/kp2) ;
491 Double_t pass2 =TMath::Exp(-x/kp4) ;
492
493 return TMath::Power(x,kp1) * (pass1 + kp3 * pass2);
494
495}
75e0cc59 496Double_t AliGenGSIlib::PtBeautyMUON( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 497{
fdcaa191 498//--------------------------------------------------------------------------
499//
500// beauty pt-distribution, from MUONlib
501//
502//--------------------------------------------------------------------------
fdcaa191 503
504 const Double_t kpt0 = 4.;
505 const Double_t kxn = 3.6;
506 Double_t x=*px;
507
508 Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
509
510 return x/TMath::Power(pass1,kxn);
511
512}
75e0cc59 513Double_t AliGenGSIlib::YBeauty( const Double_t *px, const Double_t */*dummy*/)
f4cd22aa 514{
fdcaa191 515//--------------------------------------------------------------------------
516//
517// beauty y-distribution
518//
519//--------------------------------------------------------------------------
fdcaa191 520
521 Double_t *dum=0;
522
523 return YJpsiMUON(px,dum);
524
525}
526//--------------------------------------------------------------------------
527//
528// Eta
529//
530//--------------------------------------------------------------------------
f4cd22aa 531Int_t AliGenGSIlib::IpEta(TRandom *)
532{
fdcaa191 533//
534// eta particle composition
535//
536//--------------------------------------------------------------------------
fdcaa191 537
538 return 221;
539
540}
75e0cc59 541Double_t AliGenGSIlib::PtEtaPHOS( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 542{
fdcaa191 543//--------------------------------------------------------------------------
544//
545// eta pt-distribution
546//
547//____________________________________________________________--------------
fdcaa191 548
0db2f441 549 return PtScal(*px,2); // 2==> Eta in the PtScal function
fdcaa191 550
551}
75e0cc59 552Double_t AliGenGSIlib::YEtaPHOS(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 553{
fdcaa191 554//--------------------------------------------------------------------------
555//
556// eta y-distribution
557//
558//--------------------------------------------------------------------------
fdcaa191 559
560 const Double_t ka = 1000.;
561 const Double_t kdy = 4.;
562
563 Double_t y=TMath::Abs(*py);
564
565 Double_t ex = y*y/(2*kdy*kdy);
566
567 return ka*TMath::Exp(-ex);
568
569}
570//--------------------------------------------------------------------------
571//
572// Etaprime
573//
574//--------------------------------------------------------------------------
f4cd22aa 575Int_t AliGenGSIlib::IpEtaprime(TRandom *)
576{
fdcaa191 577//
578// etaprime particle composition
579//
580//--------------------------------------------------------------------------
fdcaa191 581
582 return 331;
583
584}
75e0cc59 585Double_t AliGenGSIlib::PtEtaprimePHOS( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 586{
fdcaa191 587//--------------------------------------------------------------------------
588//
589// etaprime pt-distribution
590//
591//____________________________________________________________--------------
fdcaa191 592
0db2f441 593 return PtScal(*px,4); // 4==> Etaprime in the PtScal function
fdcaa191 594
595}
75e0cc59 596Double_t AliGenGSIlib::YEtaprimePHOS(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 597{
fdcaa191 598//--------------------------------------------------------------------------
599//
600// etaprime y-distribution
601//
602//--------------------------------------------------------------------------
014616eb 603
fdcaa191 604 const Double_t ka = 1000.;
605 const Double_t kdy = 4.;
014616eb 606
fdcaa191 607 Double_t y=TMath::Abs(*py);
608
609 Double_t ex = y*y/(2*kdy*kdy);
610
611 return ka*TMath::Exp(-ex);
612
613}
614//--------------------------------------------------------------------------
615//
616// omega
617//
618//--------------------------------------------------------------------------
f4cd22aa 619Int_t AliGenGSIlib::IpOmega(TRandom *)
620{
fdcaa191 621//
622// omega particle composition
623//
624//--------------------------------------------------------------------------
fdcaa191 625
626 return 223;
627
628}
75e0cc59 629Double_t AliGenGSIlib::PtOmega( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 630{
fdcaa191 631//--------------------------------------------------------------------------
632//
633// omega pt-distribution
634//
635//____________________________________________________________--------------
fdcaa191 636
0db2f441 637 return PtScal(*px,3); // 3==> Omega in the PtScal function
fdcaa191 638
639}
75e0cc59 640Double_t AliGenGSIlib::YOmega(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 641{
fdcaa191 642//--------------------------------------------------------------------------
643//
644// omega y-distribution
645//
646//--------------------------------------------------------------------------
fdcaa191 647
648 const Double_t ka = 1000.;
649 const Double_t kdy = 4.;
650
651
652 Double_t y=TMath::Abs(*py);
653
654 Double_t ex = y*y/(2*kdy*kdy);
655
656 return ka*TMath::Exp(-ex);
657
658}
659//--------------------------------------------------------------------------
660//
661// Rho
662//
663//--------------------------------------------------------------------------
f4cd22aa 664
665Int_t AliGenGSIlib::IpRho(TRandom *)
666{
fdcaa191 667//
668// rho particle composition
669//
670//--------------------------------------------------------------------------
fdcaa191 671
672 return 113;
673
674}
75e0cc59 675Double_t AliGenGSIlib::PtRho( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 676{
fdcaa191 677//--------------------------------------------------------------------------
678//
679// rho pt-distribution
680//
681//____________________________________________________________--------------
fdcaa191 682
0db2f441 683 return PtScal(*px,10); // 10==> Rho in the PtScal function
fdcaa191 684
685}
75e0cc59 686Double_t AliGenGSIlib::YRho(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 687{
fdcaa191 688//--------------------------------------------------------------------------
689//
690// rho y-distribution
691//
692//--------------------------------------------------------------------------
f4cd22aa 693
fdcaa191 694 const Double_t ka = 1000.;
695 const Double_t kdy = 4.;
696
697
698 Double_t y=TMath::Abs(*py);
699
700 Double_t ex = y*y/(2*kdy*kdy);
701
702 return ka*TMath::Exp(-ex);
703
704}
705//--------------------------------------------------------------------------
706//
707// Pion
708//
709//--------------------------------------------------------------------------
f4cd22aa 710Int_t AliGenGSIlib::IpPionPHOS(TRandom *ran)
711{
fdcaa191 712//
713// particle composition pi+, pi0, pi-
714//
715//--------------------------------------------------------------------------
fdcaa191 716
717 Float_t random = ran->Rndm();
718
719 if ( (3.*random) < 1. )
720 {
721 return 211 ;
722 }
723 else
724 {
725 if ( (3.*random) >= 2.)
726 {
727 return -211 ;
728 }
729 else
730 {
731 return 111 ;
732 }
733 }
734}
75e0cc59 735Double_t AliGenGSIlib::PtPion( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 736{
fdcaa191 737//--------------------------------------------------------------------------
738//
739// pion pt-distribution
740//
741// Pion transverse momentum distribtuion as in AliGenMUONlib class,
742// version 3.01 of aliroot:
743// PT-PARAMETERIZATION CDF, PRL 61(88) 1819
744// POWER LAW FOR PT > 500 MEV
745// MT SCALING BELOW (T=160 MEV)
746//
747//____________________________________________________________--------------
fdcaa191 748
749 const Double_t kp0 = 1.3;
750 const Double_t kxn = 8.28;
751 const Double_t kxlim=0.5;
752 const Double_t kt=0.160;
753 const Double_t kxmpi=0.139;
754 const Double_t kb=1.;
755 Double_t y, y1, kxmpi2, ynorm, a;
756 Double_t x=*px;
757
758 y1=TMath::Power(kp0/(kp0+kxlim),kxn);
759 kxmpi2=kxmpi*kxmpi;
760 ynorm=kb*(TMath::Exp(-sqrt(kxlim*kxlim+kxmpi2)/kt));
761 a=ynorm/y1;
762 if (x > kxlim)
763 y=a*TMath::Power(kp0/(kp0+x),kxn);
764 else
765 y=kb*TMath::Exp(-sqrt(x*x+kxmpi2)/kt);
766 return y*x;
767
768}
75e0cc59 769Double_t AliGenGSIlib::YPion(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 770{
fdcaa191 771//--------------------------------------------------------------------------
772//
773// pion y-distribution
774//
775//--------------------------------------------------------------------------
fdcaa191 776
777 const Double_t ka = 7000.;
778 const Double_t kdy = 4.;
779
780 Double_t y=TMath::Abs(*py);
781
782 Double_t ex = y*y/(2*kdy*kdy);
783
784 return ka*TMath::Exp(-ex);
785
786}
f4cd22aa 787Int_t AliGenGSIlib::IpKaonPHOS(TRandom *ran)
788{
fdcaa191 789//--------------------------------------------------------------------------
790//
791//
792// Kaon
793//--------------------------------------------------------------------------
794//
795// kaon particle composition K+, K-, Ko_short, Ko_long
796//
797//--------------------------------------------------------------------------
fdcaa191 798
799 Float_t random = ran->Rndm();
800 Float_t random2 = ran->Rndm();
801 if (random2 < 0.5)
802 {
803 if (random < 0.5) {
804 return 321; // K+
805 } else {
806 return -321; // K-
807 }
808 }
809 else
810 {
811 if (random < 0.5) {
812 return 130; // K^0 short
813 } else {
814 return 310; // K^0 long
815 }
816 }
817}
75e0cc59 818Double_t AliGenGSIlib::PtKaonPHOS( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 819{
fdcaa191 820//--------------------------------------------------------------------------
821//
822// kaon pt-distribution
823//
824//____________________________________________________________--------------
fdcaa191 825
0db2f441 826 return PtScal(*px,1); // 1==> Kaon in the PtScal function
fdcaa191 827
828}
75e0cc59 829Double_t AliGenGSIlib::YKaonPHOS(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 830{
fdcaa191 831//--------------------------------------------------------------------------
832//
833// kaon y-distribution
834//
835//--------------------------------------------------------------------------
fdcaa191 836
837 const Double_t ka = 1000.;
838 const Double_t kdy = 4.;
839
840 Double_t y=TMath::Abs(*py);
841
842 Double_t ex = y*y/(2*kdy*kdy);
843
844 return ka*TMath::Exp(-ex);
845
846}
847//--------------------------------------------------------------------------
848//
849// Phi
850//
f4cd22aa 851Int_t AliGenGSIlib::IpPhi(TRandom *)
852{
fdcaa191 853//--------------------------------------------------------------------------
854//
855// particle composition
856//
857//--------------------------------------------------------------------------
fdcaa191 858
859 return 333;
860
861}
75e0cc59 862Double_t AliGenGSIlib::PtPhiPHOS( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 863{
fdcaa191 864//--------------------------------------------------------------------------
865//
866// phi pt-distribution
867//
868//____________________________________________________________--------------
fdcaa191 869
0db2f441 870 return PtScal(*px,5); // 5==> Phi in the PtScal function
fdcaa191 871
872}
75e0cc59 873Double_t AliGenGSIlib::YPhiPHOS(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 874{
fdcaa191 875//--------------------------------------------------------------------------
876//
877// phi y-distribution
878//
879//--------------------------------------------------------------------------
fdcaa191 880
881 const Double_t ka = 1000.;
882 const Double_t kdy = 4.;
883
884
885 Double_t y=TMath::Abs(*py);
886
887 Double_t ex = y*y/(2*kdy*kdy);
888
889 return ka*TMath::Exp(-ex);
890
891}
f4cd22aa 892Int_t AliGenGSIlib::IpBaryons(TRandom *ran)
893{
fdcaa191 894//--------------------------------------------------------------------------
895//
896// Baryons
897//
898//--------------------------------------------------------------------------
899//
900// baryons particle composition p, pbar, n, nbar
901//
902//--------------------------------------------------------------------------
fdcaa191 903
904 Float_t random = ran->Rndm();
905 Float_t random2 = ran->Rndm();
906 if (random2 < 0.5)
907 {
908 if (random < 0.5) {
909 return 2212; // p
910 } else {
911 return -2212; // pbar
912 }
913 }
914 else
915 {
916 if (random < 0.5) {
917 return 2112; // n
918 } else {
919 return -2112; // n bar
920 }
921 }
922}
75e0cc59 923Double_t AliGenGSIlib::PtBaryons( const Double_t *px, const Double_t */*dummy*/ )
f4cd22aa 924{
fdcaa191 925//--------------------------------------------------------------------------
926//
927// baryons pt-distribution
928//
929//____________________________________________________________--------------
fdcaa191 930
0db2f441 931 return PtScal(*px,6); // 6==> Baryon in the PtScal function
fdcaa191 932
933}
75e0cc59 934Double_t AliGenGSIlib::YBaryons(const Double_t *py, const Double_t */*dummy*/)
f4cd22aa 935{
fdcaa191 936//--------------------------------------------------------------------------
937//
938// baryons y-distribution
939//
940//--------------------------------------------------------------------------
fdcaa191 941
942 const Double_t ka = 1000.;
943 const Double_t kdy = 4.;
944
945 Double_t y=TMath::Abs(*py);
946
947 Double_t ex = y*y/(2*kdy*kdy);
948
949 return ka*TMath::Exp(-ex);
950
951}
952//=============================================================
953//
954// Mt-scaling as in AliGenPHOSlib
955//
956//=============================================================
957//
958 Double_t AliGenGSIlib::PtScal(Double_t pt, Int_t np)
959{
960// Function for the calculation of the Pt distribution for a
961// given particle np, from the pion Pt distribution using the
962// mt scaling.
963
964// It was taken from AliGenPHOSlib aliroot version 3.04, which
965// is an update of the one in AliGenMUONlib aliroot version 3.01
966// with an extension for Baryons but supressing Rhos
967// np = 1=>Pions 2=>Kaons 3=>Etas 4=>Omegas 5=>ETA' 6=>PHI
968// 7=>BARYONS-BARYONBARS
969
970// The present adds the Rhos
971
0db2f441 972// MASS 0=>PI, 1=>K, 2=>ETA, 3=>OMEGA, 4=>ETA', 5=>PHI
973// 6=>BARYON-BARYONBAR, 10==>RHO
fdcaa191 974
975 const Double_t khm[11] = {0.1396, 0.494, 0.547, 0.782, 0.957, 1.02,
976 0.938, 0. , 0., 0., 0.769};
977
978 // VALUE MESON/PI AT 5 GEV
979
980 const Double_t kfmax[11]={1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.};
981
fdcaa191 982 Double_t f5=TMath::Power(((sqrt(100.018215)+2.)/(sqrt(100.+khm[np]*khm[np])+2.0)),12.3);
983 Double_t kfmax2=f5/kfmax[np];
984 // PIONS
985 Double_t ptpion=100.*PtPion(&pt, (Double_t*) 0);
986 Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
987 (sqrt(pt*pt+khm[np]*khm[np])+2.0)),12.3)/ kfmax2;
988 return fmtscal*ptpion;
989}
990
991//==========================================================================
992//
993// Set Getters
994//
995//==========================================================================
996
75e0cc59 997typedef Double_t (*GenFunc) (const Double_t*, const Double_t*);
fdcaa191 998
999typedef Int_t (*GenFuncIp) (TRandom *);
014616eb 1000
f4cd22aa 1001GenFunc AliGenGSIlib::GetPt(Int_t param, const char * tname) const
014616eb 1002{
1003// Return pointer to pT parameterisation
fdcaa191 1004 GenFunc func=0;
1005 TString sname(tname);
1006
1007 switch (param)
014616eb 1008 {
34f60c01 1009 case kUpsilon:
fdcaa191 1010 if (sname=="FLAT"){
4facea7f 1011 func= PtUpsilonFlat;
1012 break;
fdcaa191 1013 }
014616eb 1014 if (sname=="MUON"){
4facea7f 1015 func= PtUpsilonMUON;
1016 break;
014616eb 1017 }
1018 if (sname=="RITMAN"){
4facea7f 1019 func=PtUpsilonRitman;
1020 break;
014616eb 1021 }
1022 if (sname=="KAREL"){
4facea7f 1023 func=PtUpsilonKarel;
1024 break;
014616eb 1025 }
4facea7f 1026 func=0;
1027 printf("<AliGenGSIlib::GetPt> unknown parametrisation\n");
014616eb 1028 break;
fdcaa191 1029
1030 case kJPsi:
1031 if (sname=="FLAT"){
4facea7f 1032 func= PtJpsiFlat;
1033 break;
fdcaa191 1034 }
1035 if (sname=="MUON"){
4facea7f 1036 func= PtJpsiMUON;
1037 break;
fdcaa191 1038 }
1039 // if (sname=="SERGEI"){
1040 // func= PtJpsi;
1041 // break;
1042 // }
4facea7f 1043 func=0;
1044 printf("<AliGenGSIlib::GetPt> unknown parametrisation\n");
fdcaa191 1045 break;
fdcaa191 1046
1047 case kCharm:
1048 if (sname=="FLAT"){
4facea7f 1049 func= PtCharmFlat;
1050 break;
fdcaa191 1051 }
1052
1053 if (sname=="MUON"){
4facea7f 1054 func= PtCharmMUON;
1055 break;
fdcaa191 1056 }
1057
1058 if (sname=="GSI"){
4facea7f 1059 func= PtCharmGSI;
1060 break;
fdcaa191 1061 }
4facea7f 1062 func=0;
1063 printf("<AliGenGSIlib::GetPt> unknown parametrisation\n");
fdcaa191 1064 break;
fdcaa191 1065
1066 case kBeauty:
1067 if (sname=="FLAT"){
4facea7f 1068 func= PtBeautyFlat;
1069 break;
fdcaa191 1070 }
1071 if (sname=="MUON"){
4facea7f 1072 func= PtBeautyMUON;
1073 break;
fdcaa191 1074 }
1075 if (sname=="GSI"){
4facea7f 1076 func= PtBeautyGSI;
1077 break;
fdcaa191 1078 }
4facea7f 1079 func=0;
1080 printf("<AliGenGSIlib::GetPt> unknown parametrisation\n");
fdcaa191 1081 break;
fdcaa191 1082
1083
1084 case kEta:
4facea7f 1085 func=PtEtaPHOS;
1086 break;
fdcaa191 1087
1088 case kEtaprime:
4facea7f 1089 func=PtEtaprimePHOS;
1090 break;
fdcaa191 1091
1092 case kOmega:
4facea7f 1093 func=PtOmega;
1094 break;
fdcaa191 1095
1096 case kRho:
4facea7f 1097 func=PtRho;
1098 break;
fdcaa191 1099
1100 case kKaon:
4facea7f 1101 func=PtKaonPHOS;
1102 break;
fdcaa191 1103
1104 case kPion:
4facea7f 1105 func=PtPion;
1106 break;
fdcaa191 1107
1108 case kPhi:
4facea7f 1109 func=PtPhiPHOS;
1110 break;
fdcaa191 1111
1112 // case kLambda:
1113 // func=PtLambda;
1114 // break;
1115
1116 case kBaryons:
4facea7f 1117 func=PtBaryons;
1118 break;
fdcaa191 1119
014616eb 1120 default:
4facea7f 1121 func=0;
1122 printf("<AliGenGSIlib::GetPt> unknown parametrisation\n");
014616eb 1123 }
4facea7f 1124 return func;
014616eb 1125}
1126
f4cd22aa 1127GenFunc AliGenGSIlib::GetY(Int_t param, const char * tname) const
014616eb 1128{
fdcaa191 1129// Return pointer to y- parameterisation
014616eb 1130 GenFunc func=0;
fdcaa191 1131 TString sname(tname);
1132
1133 switch (param)
014616eb 1134 {
34f60c01 1135 case kUpsilon:
fdcaa191 1136 if (sname=="FLAT"){
1137 func= YUpsilonFlat;
1138 break;
1139 }
014616eb 1140 if (sname=="MUON"){
1141 func= YUpsilonMUON;
1142 break;
1143 }
1144 if (sname=="RITMAN"){
1145 func=YUpsilonRitman;
1146 break;
1147 }
1148 if (sname=="KAREL"){
1149 func=YUpsilonKarel;
1150 break;
1151 }
1152 func=0;
1153 printf("<AliGenGSIlib::GetY> unknown parametrisation\n");
1154 break;
fdcaa191 1155
1156 case kJPsi:
1157 if (sname=="FLAT"){
1158 func= YJpsiFlat;
1159 break;
1160 }
1161 if (sname=="MUON"){
1162 func= YJpsiMUON;
1163 break;
1164 }
1165 // if (sname=="SERGEI"){
1166 // func= YJpsi;
1167 // break;
1168 // }
1169
1170 func=0;
1171 printf("<AliGenGSIlib::GetY> unknown parametrisation\n");
1172 break;
1173
1174 case kCharm:
1175 func= YCharm;
1176 break;
1177
1178 case kBeauty:
1179 func= YBeauty;
1180 break;
1181
1182 case kEta:
1183 func=YEtaPHOS;
1184 break;
1185
1186 case kEtaprime:
1187 func=YEtaprimePHOS;
1188 break;
1189
1190 case kOmega:
1191 func=YOmega;
1192 break;
1193
1194 case kRho:
1195 func=YRho;
1196 break;
1197
1198 case kKaon:
1199 func=YKaonPHOS;
1200 break;
1201
1202 case kPion:
1203 func=YPion;
1204 break;
1205
1206 case kPhi:
1207 func=YPhiPHOS;
1208 break;
1209
1210 // case kLambda:
1211 // func=YLambda;
1212 // break;
1213
1214 case kBaryons:
1215 func=YBaryons;
1216 break;
1217
014616eb 1218 default:
1219 func=0;
1220 printf("<AliGenGSIlib::GetY> unknown parametrisation\n");
1221 }
1222 return func;
1223}
1224
f4cd22aa 1225GenFuncIp AliGenGSIlib::GetIp(Int_t param, const char * tname) const
014616eb 1226{
1227// Return pointer to particle type parameterisation
fdcaa191 1228 GenFuncIp func=0;
1229 TString sname(tname);
1230
1231 switch (param)
014616eb 1232 {
34f60c01 1233 case kUpsilon:
fdcaa191 1234 func= IpUpsilon;
014616eb 1235 break;
fdcaa191 1236
1237 case kJPsi:
1238 func= IpJpsi;
014616eb 1239 break;
fdcaa191 1240
1241 case kCharm:
1242 func= IpCharm;
014616eb 1243 break;
fdcaa191 1244
1245 case kBeauty:
1246 func= IpBeauty;
1247 break;
1248
1249 case kEta:
1250 func=IpEta;
1251 break;
1252
1253 case kEtaprime:
1254 func=IpEtaprime;
1255 break;
1256
1257 case kOmega:
1258 func=IpOmega;
1259 break;
1260
1261 case kRho:
1262 func=IpRho;
1263 break;
1264
1265 case kKaon:
1266 func=IpKaonPHOS;
1267 break;
1268
1269 case kPion:
1270 func=IpPionPHOS;
1271 break;
1272
1273 case kPhi:
1274 func=IpPhi;
1275 break;
1276
1277 // case kLambda:
1278 // func=IpLambda;
1279 // break;
1280
1281 case kBaryons:
1282 func=IpBaryons;
1283 break;
1284
014616eb 1285 default:
1286 func=0;
1287 printf("<AliGenGSIlib::GetIp> unknown parametrisation\n");
1288 }
1289 return func;
1290}
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302