Setter for calling Generate n-times
[u/mrichter/AliRoot.git] / EVGEN / AliGenPHOSlib.cxx
index b4cc499..9a97f51 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.2  1999/11/04 11:30:48  fca
-Improve comments
-
-Revision 1.1  1999/11/03 17:43:20  fca
-New version from G.Martinez & A.Morsch
-
-*/
+/* $Id$ */
 
 //======================================================================
 //  AliGenPHOSlib class contains parameterizations of the
@@ -43,11 +35,16 @@ New version from G.Martinez & A.Morsch
 //      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 "AliGenPHOSlib.h"
 #include "TMath.h"
-#include "AliRun.h"
+#include "TRandom.h"
+
+#include "AliGenPHOSlib.h"
 
 ClassImp(AliGenPHOSlib)
 
@@ -58,7 +55,7 @@ ClassImp(AliGenPHOSlib)
 //    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
@@ -85,7 +82,7 @@ ClassImp(AliGenPHOSlib)
     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
@@ -100,31 +97,70 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpPion()
+Int_t AliGenPHOSlib::IpPion(TRandom */*ran*/)
 {
 //                 particle composition pi+, pi0, pi-
 //
 
-    Float_t random[1];
-    gMC->Rndm(random,1);
-
-    if ( (3.*random[0])  < 1. ) 
-    {
-          return 211 ;
-    } 
-    else
-    {  
-      if ( (3.*random[0]) >= 2.)
-      {
-         return -211 ;
-      }
-      else 
-      {
         return 111  ;
-      }
-    }
 }
-// End Pions
+ Int_t AliGenPHOSlib::IpChargedPion(TRandom *ran)
+{
+//                 particle composition pi+, pi0, pi-
+//
+
+     Float_t random = ran->Rndm();
+
+     if ( (2.*random)  < 1. ) 
+       {
+        return 211 ;
+       } 
+     else
+       {  
+        return -211 ;
+       }
+}
+
+//End Pions
+//======================================================================
+//    Pi 0 Flat Distribution
+//    Transverse momentum distribution PtPi0Flat
+//    Rapidity distribution YPi0Flat
+//    Particle distribution IdPi0Flat  111 (pi0)
+//
+
+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 
+
+return 1;
+
+}
+
+Double_t AliGenPHOSlib::YPi0Flat( const Double_t */*py*/, const Double_t *)
+{
+
+// pion y-distribution
+//
+  return 1.;
+}
+
+ Int_t AliGenPHOSlib::IpPi0Flat(TRandom *)
+{
+
+//                 particle composition pi0
+//
+        return 111 ;
+}
+// End Pi0Flat
 //============================================================= 
 //
  Double_t AliGenPHOSlib::PtScal(Double_t pt, Int_t np)
@@ -138,13 +174,12 @@ ClassImp(AliGenPHOSlib)
 //      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
@@ -152,20 +187,21 @@ ClassImp(AliGenPHOSlib)
   Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
                                  (sqrt(pt*pt+khm[np]*khm[np])+2.0)),12.3)/ kfmax2;
   return fmtscal*ptpion;
+
 }
 // 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
 //____________________________________________________________
@@ -180,17 +216,16 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpKaon()
+ Int_t AliGenPHOSlib::IpKaon(TRandom *ran)
 {
 //                 particle composition
 //
 
-    Float_t random[1],random2[1];
-    gMC->Rndm(random,1);
-    gMC->Rndm(random2,1);
-    if (random2[0] < 0.5) 
+    Float_t random = ran->Rndm();
+    Float_t random2 = ran->Rndm();
+    if (random2 < 0.5) 
     {
-      if (random[0] < 0.5) {       
+      if (random < 0.5) {       
         return  321;   //   K+
       } else {
         return -321;   // K-
@@ -198,27 +233,50 @@ ClassImp(AliGenPHOSlib)
     }
     else
     {  
-      if (random[0] < 0.5) {       
+      if (random < 0.5) {       
         return  130;   // K^0 short
       } else {  
         return  310;   // K^0 long
       }
     }
 }
+
+ 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
 //____________________________________________________________
@@ -233,7 +291,7 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpEta()
+ Int_t AliGenPHOSlib::IpEta(TRandom *)
 {
 //                 particle composition
 //
@@ -241,19 +299,51 @@ ClassImp(AliGenPHOSlib)
         return  221;   //   eta
 }
 // End Etas
+
+//======================================================================
+//    Eta Flat Distribution
+//    Transverse momentum distribution PtEtaFlat
+//    Rapidity distribution YEtaFlat
+//    Particle distribution IdEtaFlat  111 (pi0)
+//
+
+Double_t AliGenPHOSlib::PtEtaFlat(const Double_t */*px*/, const Double_t *)
+{
+//     Eta transverse momentum flat distribution 
+
+  return 1;
+
+}
+
+Double_t AliGenPHOSlib::YEtaFlat( const Double_t */*py*/, const Double_t *)
+{
+//
+// pion y-distribution
+//
+  return 1.;
+}
+
+ Int_t AliGenPHOSlib::IpEtaFlat(TRandom *)
+{
+//
+//                 particle composition eta
+//
+        return 221 ;
+}
+// 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
 //____________________________________________________________
@@ -268,7 +358,7 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpOmega()
+ Int_t AliGenPHOSlib::IpOmega(TRandom *)
 {
 //                 particle composition
 //
@@ -277,18 +367,51 @@ ClassImp(AliGenPHOSlib)
 }
 // 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
 //____________________________________________________________
@@ -303,7 +426,7 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpEtaprime()
+ Int_t AliGenPHOSlib::IpEtaprime(TRandom *)
 {
 //                 particle composition
 //
@@ -314,16 +437,16 @@ ClassImp(AliGenPHOSlib)
 //===================================================================
 //============================================================================
 //    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
 //____________________________________________________________
@@ -338,7 +461,7 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpPhi()
+ Int_t AliGenPHOSlib::IpPhi(TRandom *)
 {
 //                 particle composition
 //
@@ -349,16 +472,16 @@ ClassImp(AliGenPHOSlib)
 //===================================================================
 //============================================================================
 //    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
 //____________________________________________________________
@@ -373,17 +496,16 @@ ClassImp(AliGenPHOSlib)
   return ka*TMath::Exp(-ex);
 }
 
- Int_t AliGenPHOSlib::IpBaryon()
+ Int_t AliGenPHOSlib::IpBaryon(TRandom *ran)
 {
 //                 particle composition
 //
 
-    Float_t random[1],random2[1];
-    gMC->Rndm(random,1);
-    gMC->Rndm(random2,1);
-    if (random2[0] < 0.5) 
+    Float_t random = ran->Rndm();
+    Float_t random2 = ran->Rndm();
+    if (random2 < 0.5) 
     {
-      if (random[0] < 0.5) {       
+      if (random < 0.5) {       
         return  2212;   //   p
       } else {
         return -2212;   // pbar
@@ -391,116 +513,199 @@ ClassImp(AliGenPHOSlib)
     }
     else
     {  
-      if (random[0] < 0.5) {       
+      if (random < 0.5) {       
         return  2112;   // n
       } else {  
         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*);
- GenFunc AliGenPHOSlib::GetPt(Param_t param)
+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 Pion:     
+      {
+      case kPion:     
         func=PtPion;
         break;
-    case Kaon:
+      case kPi0:     
+        func=PtPi0;
+        break;
+      case kPi0Flat:     
+        func=PtPi0Flat;
+        break;
+      case kKaon:
         func=PtKaon;
         break;
-    case Eta:
+      case kEta:
         func=PtEta;
         break;
-    case Omega:
+      case kEtaFlat:
+        func=PtEtaFlat;
+        break;
+      case kOmega:
         func=PtOmega;
         break;
-    case Etaprime:
+      case kOmegaFlat:
+        func=PtOmegaFlat;
+      break;
+      case kEtaPrime:
         func=PtEtaprime;
         break;
-    case Baryon:
+      case kBaryon:
         func=PtBaryon;
         break;
-    default:
+      default:
         func=0;
         printf("<AliGenPHOSlib::GetPt> unknown parametrisationn");
-    }
+      }
     return func;
 }
 
- GenFunc AliGenPHOSlib::GetY(Param_t param)
+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 Pion:
-        func=YPion;
-        break;
-    case Kaon:
-        func=YKaon;
-        break;
-    case Eta:
-        func=YEta;
-        break;
-    case Omega:
-        func=YOmega;
-        break;
-    case Etaprime:
-        func=YEtaprime;
-        break;
-    case Phi:
-        func=YPhi;
-        break;
-    case Baryon:
-        func=YBaryon;
-        break;
+    case kPion:
+      func=YPion;
+      break;
+    case kPi0:     
+    case kPi0Flat:
+      func=YPi0Flat;
+      break;
+    case kKaon:
+      func=YKaon;
+      break;
+    case kEta:
+      func=YEta;
+      break;
+    case kEtaFlat:
+      func=YEtaFlat;
+      break;
+    case kOmega:
+      func=YOmega;
+      break;
+    case kOmegaFlat:
+      func=YOmegaFlat;
+      break;
+    case kEtaPrime:
+      func=YEtaprime;
+      break;
+    case kPhi:
+      func=YPhi;
+      break;
+    case kBaryon:
+      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) ();
- GenFuncIp AliGenPHOSlib::GetIp(Param_t param)
+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 Pion:
-        
-        func=IpPion;
-        break;
-    case Kaon:
-        func=IpKaon;
-        break;
-    case Eta:
-        func=IpEta;
-        break;
-    case Omega:
-        func=IpOmega;
-        break;
-    case Etaprime:
-        func=IpEtaprime;
-        break;
-    case Phi:
-        func=IpPhi;
-        break;
-    case Baryon:
-        func=IpBaryon;
-        break;
+    case kPion:       
+      func=IpPion;
+      break;
+    case kChargedPion:       
+      func=IpChargedPion;
+      break;
+    case kPi0:     
+    case kPi0Flat:       
+      func=IpPi0Flat;
+      break;
+    case kKaon:
+      func=IpKaon;
+      break;
+    case kChargedKaon:
+      func=IpChargedKaon;
+      break;
+    case kKaon0L:
+      func=IpKaon0L;
+      break;
+    case kEta:
+      func=IpEta;
+      break;
+    case kEtaFlat:
+      func=IpEtaFlat;
+      break;
+      
+    case kOmega:
+      func=IpOmega;
+      break;
+    case kOmegaFlat:
+      func=IpOmegaFlat;
+      break;
+    case kEtaPrime:
+      func=IpEtaprime;
+      break;
+    case kPhi:
+      func=IpPhi;
+      break;
+    case kBaryon:
+      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;
 }