-
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
// GPS @ SUBATECH, Nantes , France (October 1999)
// http://www-subatech.in2p3.fr/~photons/subatech
// martinez@subatech.in2p3.fr
+// Additional particle species simulation options has been added:
+// Charged Pion, Charged Kaons, KLong Proton, Anti-Proton, Neutron,
+// Anti-Neutron --> Changes made by Gustavo Conesa in November 2004
+// Add flat Omega(782) distribution in Nov. 2010 by Renzhuo WAN
//======================================================================
#include "TMath.h"
// Rapidity distribution YPion
// Particle distribution IdPion 111, 211 and -211 (pi0, pi+ and pi-)
//
- Double_t AliGenPHOSlib::PtPion(Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtPion(const Double_t *px, const Double_t *)
{
// Pion transverse momentum distribtuion taken
// from AliGenMUONlib class, version 3.01 of aliroot
y=kb*TMath::Exp(-sqrt(x*x+kxmpi2)/kt);
return y*x;
}
- Double_t AliGenPHOSlib::YPion( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YPion( const Double_t *py, const Double_t *)
{
//
// pion y-distribution
return ka*TMath::Exp(-ex);
}
- Int_t AliGenPHOSlib::IpPion(TRandom *ran)
+Int_t AliGenPHOSlib::IpPion(TRandom */*ran*/)
+{
+// particle composition pi+, pi0, pi-
+//
+
+ return 111 ;
+}
+ Int_t AliGenPHOSlib::IpChargedPion(TRandom *ran)
{
// particle composition pi+, pi0, pi-
//
Float_t random = ran->Rndm();
- if ( (3.*random) < 1. )
- {
- return 211 ;
- }
- else
- {
- if ( (3.*random) >= 2.)
+ if ( (2.*random) < 1. )
{
- return -211 ;
+ return 211 ;
+ }
+ else
+ {
+ return -211 ;
}
- else
- {
- return 111 ;
- }
- }
}
//End Pions
// Particle distribution IdPi0Flat 111 (pi0)
//
-Double_t AliGenPHOSlib::PtPi0Flat(Double_t */*px*/, Double_t *)
+Double_t AliGenPHOSlib::PtPi0(const Double_t * px, const Double_t *)
+{
+// Pion transverse momentum
+ const Double_t kp0 =1.35;
+ const Double_t kxn= 6.18;
+ return TMath::Power(kp0 /(kp0 + px[0]), kxn);
+}
+
+Double_t AliGenPHOSlib::PtPi0Flat(const Double_t */*px*/, const Double_t *)
{
// Pion transverse momentum flat distribution
}
-Double_t AliGenPHOSlib::YPi0Flat( Double_t */*py*/, Double_t *)
+Double_t AliGenPHOSlib::YPi0Flat( const Double_t */*py*/, const Double_t *)
{
// pion y-distribution
// 7=>BARYONS-BARYONBARS
// SCALING EN MASSE PAR RAPPORT A PTPI
- // MASS 1=>PI, 2=>K, 3=>ETA, 4=>OMEGA, 5=>ETA',6=>PHI
+ // MASS 0=>PI, 1=>K, 2=>ETA, 3=>OMEGA, 4=>ETA',5=>PHI
const Double_t khm[10] = {0.1396, 0.494, 0.547, 0.782, 0.957, 1.02,
- // MASS 7=>BARYON-BARYONBAR
+ // MASS 6=>BARYON-BARYONBAR
0.938, 0. , 0., 0.};
// VALUE MESON/PI AT 5 GEV
const Double_t kfmax[10]={1., 1., 1., 1., 1., 1., 1., 1., 1., 1.};
- np--;
Double_t f5=TMath::Power(((sqrt(100.018215)+2.)/(sqrt(100.+khm[np]*khm[np])+2.0)),12.3);
Double_t kfmax2=f5/kfmax[np];
// PIONS
// End Scaling
//============================================================================
// K A O N S
- Double_t AliGenPHOSlib::PtKaon( Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtKaon( const Double_t *px, const Double_t *)
{
// kaon
// pt-distribution
//____________________________________________________________
- return PtScal(*px,2); // 2==> Kaon in the PtScal function
+ return PtScal(*px,1); // 1==> Kaon in the PtScal function
}
- Double_t AliGenPHOSlib::YKaon( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YKaon( const Double_t *py, const Double_t *)
{
// y-distribution
//____________________________________________________________
}
}
}
+
+ Int_t AliGenPHOSlib::IpChargedKaon(TRandom *ran)
+{
+// particle composition
+//
+
+ Float_t random = ran->Rndm();
+
+ if (random < 0.5) {
+ return 321; // K+
+ } else {
+ return -321; // K-
+ }
+
+
+}
+Int_t AliGenPHOSlib::IpKaon0L(TRandom *)
+{
+ // particle composition
+ //
+
+ return 130; // K^0 long
+}
// End Kaons
//============================================================================
//============================================================================
// E T A S
- Double_t AliGenPHOSlib::PtEta( Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtEta( const Double_t *px, const Double_t *)
{
// etas
// pt-distribution
//____________________________________________________________
- return PtScal(*px,3); // 3==> Eta in the PtScal function
+ return PtScal(*px,2); // 2==> Eta in the PtScal function
}
- Double_t AliGenPHOSlib::YEta( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YEta( const Double_t *py, const Double_t *)
{
// y-distribution
//____________________________________________________________
// Particle distribution IdEtaFlat 111 (pi0)
//
-Double_t AliGenPHOSlib::PtEtaFlat(Double_t */*px*/, Double_t *)
+Double_t AliGenPHOSlib::PtEtaFlat(const Double_t */*px*/, const Double_t *)
{
// Eta transverse momentum flat distribution
}
-Double_t AliGenPHOSlib::YEtaFlat( Double_t */*py*/, Double_t *)
+Double_t AliGenPHOSlib::YEtaFlat( const Double_t */*py*/, const Double_t *)
{
//
// pion y-distribution
//
return 221 ;
}
-// End Pi0Flat
+// End EtaFlat
//============================================================================
//============================================================================
// O M E G A S
- Double_t AliGenPHOSlib::PtOmega( Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtOmega( const Double_t *px, const Double_t *)
{
// omegas
// pt-distribution
//____________________________________________________________
- return PtScal(*px,4); // 4==> Omega in the PtScal function
+ return PtScal(*px,3); // 3==> Omega in the PtScal function
}
- Double_t AliGenPHOSlib::YOmega( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YOmega( const Double_t *py, const Double_t *)
{
// y-distribution
//____________________________________________________________
}
// End Omega
//============================================================================
+//======================================================================
+// Omega(782) Flat Distribution
+// Transverse momentum distribution PtOmegaFlat
+// Rapidity distribution YOmegaFlat
+// Particle distribution IdOmegaFlat 223(0mega)
+//
+
+Double_t AliGenPHOSlib::PtOmegaFlat(const Double_t */*px*/, const Double_t *)
+{
+// omega transverse momentum flat distribution
+
+return 1;
+
+}
+
+Double_t AliGenPHOSlib::YOmegaFlat( const Double_t */*py*/, const Double_t *)
+{
+
+// omega y-distribution
+//
+ return 1.;
+}
+
+ Int_t AliGenPHOSlib::IpOmegaFlat(TRandom *)
+{
+
+// particle composition omega
+//
+ return 223 ;
+}
+// End OmegaFlat
+
+
//============================================================================
// E T A P R I M E
- Double_t AliGenPHOSlib::PtEtaprime( Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtEtaprime( const Double_t *px, const Double_t *)
{
// etaprime
// pt-distribution
//____________________________________________________________
- return PtScal(*px,5); // 5==> Etaprime in the PtScal function
+ return PtScal(*px,4); // 4==> Etaprime in the PtScal function
}
- Double_t AliGenPHOSlib::YEtaprime( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YEtaprime( const Double_t *py, const Double_t *)
{
// y-distribution
//____________________________________________________________
//===================================================================
//============================================================================
// P H I S
- Double_t AliGenPHOSlib::PtPhi( Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtPhi( const Double_t *px, const Double_t *)
{
// phi
// pt-distribution
//____________________________________________________________
- return PtScal(*px,6); // 6==> Phi in the PtScal function
+ return PtScal(*px,5); // 5==> Phi in the PtScal function
}
- Double_t AliGenPHOSlib::YPhi( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YPhi( const Double_t *py, const Double_t *)
{
// y-distribution
//____________________________________________________________
//===================================================================
//============================================================================
// B A R Y O N S == protons, protonsbar, neutrons, and neutronsbars
- Double_t AliGenPHOSlib::PtBaryon( Double_t *px, Double_t *)
+ Double_t AliGenPHOSlib::PtBaryon( const Double_t *px, const Double_t *)
{
// baryons
// pt-distribution
//____________________________________________________________
- return PtScal(*px,7); // 7==> Baryon in the PtScal function
+ return PtScal(*px,6); // 6==> Baryon in the PtScal function
}
- Double_t AliGenPHOSlib::YBaryon( Double_t *py, Double_t *)
+ Double_t AliGenPHOSlib::YBaryon( const Double_t *py, const Double_t *)
{
// y-distribution
//____________________________________________________________
return -2112; // n bar
}
}
+}
+
+ Int_t AliGenPHOSlib::IpProton(TRandom *)
+{
+// particle composition
+//
+ return 2212; // p
+
+}
+ Int_t AliGenPHOSlib::IpAProton(TRandom *)
+{
+// particle composition
+//
+ return -2212; // p bar
+
+}
+
+ Int_t AliGenPHOSlib::IpNeutron(TRandom *)
+{
+// particle composition
+//
+ return 2112; // n
+
+}
+ Int_t AliGenPHOSlib::IpANeutron(TRandom *)
+{
+// particle composition
+//
+ return -2112; // n
+
}
// End Baryons
//===================================================================
-
-typedef Double_t (*GenFunc) (Double_t*, Double_t*);
+typedef Double_t (*GenFunc) (const Double_t*, const Double_t*);
GenFunc AliGenPHOSlib::GetPt(Int_t param, const char* /*tname*/) const
{
// Return pinter to pT parameterisation
GenFunc func;
switch (param)
- {
- case kPion:
+ {
+ case kPion:
func=PtPion;
break;
- case kPi0Flat:
+ case kPi0:
+ func=PtPi0;
+ break;
+ case kPi0Flat:
func=PtPi0Flat;
break;
- case kKaon:
+ case kKaon:
func=PtKaon;
break;
- case kEta:
+ case kEta:
func=PtEta;
break;
- case kEtaFlat:
+ case kEtaFlat:
func=PtEtaFlat;
break;
- case kOmega:
+ case kOmega:
func=PtOmega;
break;
- case kEtaPrime:
+ case kOmegaFlat:
+ func=PtOmegaFlat;
+ break;
+ case kEtaPrime:
func=PtEtaprime;
break;
- case kBaryon:
+ case kBaryon:
func=PtBaryon;
break;
- default:
+ default:
func=0;
printf("<AliGenPHOSlib::GetPt> unknown parametrisationn");
- }
+ }
return func;
}
GenFunc AliGenPHOSlib::GetY(Int_t param, const char* /*tname*/) const
{
-// Return pointer to Y parameterisation
- GenFunc func;
- switch (param)
+ // Return pointer to Y parameterisation
+ GenFunc func;
+ switch (param)
{
case kPion:
- func=YPion;
- break;
+ func=YPion;
+ break;
+ case kPi0:
case kPi0Flat:
- func=YPi0Flat;
- break;
+ func=YPi0Flat;
+ break;
case kKaon:
- func=YKaon;
- break;
+ func=YKaon;
+ break;
case kEta:
- func=YEta;
- break;
- case kEtaFlat:
- func=YEtaFlat;
- break;
+ func=YEta;
+ break;
+ case kEtaFlat:
+ func=YEtaFlat;
+ break;
case kOmega:
- func=YOmega;
- break;
+ func=YOmega;
+ break;
+ case kOmegaFlat:
+ func=YOmegaFlat;
+ break;
case kEtaPrime:
- func=YEtaprime;
- break;
+ func=YEtaprime;
+ break;
case kPhi:
- func=YPhi;
- break;
+ func=YPhi;
+ break;
case kBaryon:
- func=YBaryon;
- break;
+ func=YBaryon;
+ break;
default:
- func=0;
- printf("<AliGenPHOSlib::GetY> unknown parametrisationn");
+ func=0;
+ printf("<AliGenPHOSlib::GetY> unknown parametrisationn");
}
- return func;
+ return func;
}
typedef Int_t (*GenFuncIp) (TRandom *);
GenFuncIp AliGenPHOSlib::GetIp(Int_t param, const char* /*tname*/) const
{
-// Return pointer to particle composition
- GenFuncIp func;
- switch (param)
+ // Return pointer to particle composition
+ GenFuncIp func;
+ switch (param)
{
case kPion:
- func=IpPion;
- break;
+ func=IpPion;
+ break;
+ case kChargedPion:
+ func=IpChargedPion;
+ break;
+ case kPi0:
case kPi0Flat:
- func=IpPi0Flat;
- break;
+ func=IpPi0Flat;
+ break;
case kKaon:
- func=IpKaon;
- break;
+ func=IpKaon;
+ break;
+ case kChargedKaon:
+ func=IpChargedKaon;
+ break;
+ case kKaon0L:
+ func=IpKaon0L;
+ break;
case kEta:
- func=IpEta;
- break;
+ func=IpEta;
+ break;
case kEtaFlat:
- func=IpEtaFlat;
- break;
-
+ func=IpEtaFlat;
+ break;
+
case kOmega:
- func=IpOmega;
- break;
+ func=IpOmega;
+ break;
+ case kOmegaFlat:
+ func=IpOmegaFlat;
+ break;
case kEtaPrime:
- func=IpEtaprime;
- break;
+ func=IpEtaprime;
+ break;
case kPhi:
- func=IpPhi;
- break;
+ func=IpPhi;
+ break;
case kBaryon:
- func=IpBaryon;
- break;
+ func=IpBaryon;
+ break;
+ case kProton:
+ func=IpProton;
+ break;
+ case kAProton:
+ func=IpAProton;
+ break;
+ case kNeutron:
+ func=IpNeutron;
+ break;
+ case kANeutron:
+ func=IpANeutron;
+ break;
+
default:
- func=0;
- printf("<AliGenPHOSlib::GetIp> unknown parametrisationn");
+ func=0;
+ printf("<AliGenPHOSlib::GetIp> unknown parametrisationn");
}
- return func;
+ return func;
}