All the necessary for fast Chi_c generation. (P. Ladron de Guevara)
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 19 Dec 2007 16:49:06 +0000 (16:49 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 19 Dec 2007 16:49:06 +0000 (16:49 +0000)
EVGEN/AliDecayer.h
EVGEN/AliGenMC.cxx
EVGEN/AliGenMUONlib.cxx
EVGEN/AliGenMUONlib.h
PYTHIA6/AliDecayerPythia.cxx

index 095ccbd..8845a2f 100644 (file)
@@ -18,7 +18,8 @@ typedef enum
     kBPsiPrimeDiMuon, kBPsiPrimeDiElectron, kPiToMu, kKaToMu, 
     kNoDecay, kHadronicD, kHadronicDWithout4Bodies, kOmega, kPhiKK, 
     kAll, kNoDecayHeavy, kHardMuons, kBJpsi,
-    kWToMuon,kWToCharm, kWToCharmToMuon, kZDiMuon, kZDiElectron, kNeutralPion, kAllMuonic
+    kWToMuon,kWToCharm, kWToCharmToMuon, kZDiMuon, kZDiElectron, kNeutralPion, kAllMuonic,
+    kChiToJpsiGammaToMuonMuon, kChiToJpsiGammaToElectronElectron
 } Decay_t;
 #endif
 
index bba32cd..d2e374c 100644 (file)
@@ -146,8 +146,17 @@ void AliGenMC::Init()
        fChildSelect[0]=kKPlus;
        break;
     case kBJpsi:
-       fChildSelect[0]=443;
+       fChildSelect[0]= 443;
        break;
+   case kChiToJpsiGammaToMuonMuon:
+        fChildSelect[0]= 22;
+        fChildSelect[1]= 13;
+        break;
+    case kChiToJpsiGammaToElectronElectron:
+        fChildSelect[0]= 22;
+        fChildSelect[1]= 11;
+        break;
+
     case kOmega:       
     case kAll:
     case kAllMuonic:
index be21e4d..6b9b9a7 100644 (file)
@@ -954,6 +954,18 @@ GenFunc AliGenMUONlib::GetPt(Int_t param,  const char* tname) const
     case kKaon:
        func=PtKaon;
        break;
+    case kChi_c0:
+       func=PtChi_c0;
+       break;
+    case kChi_c1:
+       func=PtChi_c1;
+       break;
+    case kChi_c2:
+       func=PtChi_c2;
+       break;
+    case kChi_c:
+       func=PtChi_c;
+       break;
     default:
         func=0;
         printf("<AliGenMUONlib::GetPt> unknown parametrisation\n");
@@ -1029,12 +1041,171 @@ GenFunc AliGenMUONlib::GetY(Int_t param, const char* tname) const
     case kKaon:
        func=YKaon;
        break;
+    case kChi_c0:
+       func=YChi_c0;
+       break;
+    case kChi_c1:
+       func=YChi_c1;
+       break;
+    case kChi_c2:
+       func=YChi_c2;
+       break;
+    case kChi_c:
+       func=YChi_c;
+       break;
     default:
         func=0;
         printf("<AliGenMUONlib::GetY> unknown parametrisation\n");
     }
     return func;
 }
+
+//
+//                    Chi
+//
+//
+//                pt-distribution
+//____________________________________________________________
+Double_t AliGenMUONlib::PtChi_c0( Double_t *px, Double_t */*dummy*/)
+{
+// Chi_c1 pT
+  const Double_t kpt0 = 4.;
+  const Double_t kxn  = 3.6;
+  Double_t x=*px;
+  //
+  Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
+  return x/TMath::Power(pass1,kxn);
+}
+Double_t AliGenMUONlib::PtChi_c1( Double_t *px, Double_t */*dummy*/)
+{
+// Chi_c1 pT
+  const Double_t kpt0 = 4.;
+  const Double_t kxn  = 3.6;
+  Double_t x=*px;
+  //
+  Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
+  return x/TMath::Power(pass1,kxn);
+}
+Double_t AliGenMUONlib::PtChi_c2( Double_t *px, Double_t */*dummy*/)
+{
+// Chi_c2 pT
+  const Double_t kpt0 = 4.;
+  const Double_t kxn  = 3.6;
+  Double_t x=*px;
+  //
+  Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
+  return x/TMath::Power(pass1,kxn);
+}
+Double_t AliGenMUONlib::PtChi_c( Double_t *px, Double_t */*dummy*/)
+{
+// Chi_c family pT
+  const Double_t kpt0 = 4.;
+  const Double_t kxn  = 3.6;
+  Double_t x=*px;
+  //
+  Double_t pass1 = 1.+(x/kpt0)*(x/kpt0);
+  return x/TMath::Power(pass1,kxn);
+}
+
+//
+//               y-distribution
+//____________________________________________________________
+Double_t AliGenMUONlib::YChi_c0(Double_t *py, Double_t */*dummy*/)
+{
+// Chi-1c y
+  const Double_t ky0 = 4.;
+ const Double_t kb=1.;
+  Double_t yj;
+  Double_t y=TMath::Abs(*py);
+  //
+  if (y < ky0)
+    yj=kb;
+  else
+    yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
+  return yj;
+}
+
+Double_t AliGenMUONlib::YChi_c1(Double_t *py, Double_t */*dummy*/)
+{
+// Chi-1c y
+  const Double_t ky0 = 4.;
+  const Double_t kb=1.;
+  Double_t yj;
+  Double_t y=TMath::Abs(*py);
+  //
+  if (y < ky0)
+    yj=kb;
+  else
+    yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
+  return yj;
+}
+
+Double_t AliGenMUONlib::YChi_c2(Double_t *py, Double_t */*dummy*/)
+{
+// Chi-2c y
+  const Double_t ky0 = 4.;
+  const Double_t kb=1.;
+  Double_t yj;
+  Double_t y=TMath::Abs(*py);
+  //
+  if (y < ky0)
+    yj=kb;
+  else
+    yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
+  return yj;
+}
+
+Double_t AliGenMUONlib::YChi_c(Double_t *py, Double_t */*dummy*/)
+{
+// Chi_c family y
+  const Double_t ky0 = 4.;
+  const Double_t kb=1.;
+  Double_t yj;
+  Double_t y=TMath::Abs(*py);
+  //
+  if (y < ky0)
+    yj=kb;
+  else
+    yj=kb*TMath::Exp(-(y-ky0)*(y-ky0)/2);
+  return yj;
+}
+
+//                 particle composition
+//
+Int_t AliGenMUONlib::IpChi_c0(TRandom *)
+{
+// Chi composition
+    return 10441;
+}
+//
+Int_t AliGenMUONlib::IpChi_c1(TRandom *)
+{
+// Chi composition
+    return 20443;
+}
+Int_t AliGenMUONlib::IpChi_c2(TRandom *)
+{
+// Chi_c2 prime composition
+    return 445;
+}
+Int_t AliGenMUONlib::IpChi_c(TRandom *)
+{
+// Chi composition
+  Int_t ip;
+  Float_t r = gRandom->Rndm();
+  if (r < 0.001) {
+    ip = 10441;
+  } else if( r < 0.377 ) {
+    ip = 20443;
+  } else {
+    ip = 445;
+  }
+  return ip;
+}
+
+
+//_____________________________________________________________
+
 typedef Int_t (*GenFuncIp) (TRandom *);
 GenFuncIp AliGenMUONlib::GetIp(Int_t param,  const char* /*tname*/) const
 {
@@ -1085,6 +1256,18 @@ GenFuncIp AliGenMUONlib::GetIp(Int_t param,  const char* /*tname*/) const
     case kKaon:
        func=IpKaon;
        break;
+    case kChi_c0:
+       func=IpChi_c0;
+       break;
+    case kChi_c1:
+       func=IpChi_c1;
+       break;
+    case kChi_c2:
+       func=IpChi_c2;
+       break;
+    case kChi_c:
+        func=IpChi_c;
+        break;
     default:
         func=0;
         printf("<AliGenMUONlib::GetIp> unknown parametrisation\n");
index 0e2f74d..f35a9c6 100644 (file)
@@ -18,7 +18,7 @@ class AliGenMUONlib :
 {
  public:
   enum constants{kPhi, kOmega, kEta, kJpsi, kJpsiFamily, kPsiP, kJpsiFromB, kUpsilon, kUpsilonFamily,
-                  kUpsilonP, kUpsilonPP, kCharm, kBeauty, kPion, kKaon};
+                  kUpsilonP, kUpsilonPP, kCharm, kBeauty, kPion, kKaon,kChi_c, kChi_c0, kChi_c1, kChi_c2 }; 
     
     GenFunc   GetPt(Int_t param, const char* tname=0) const;
     GenFunc   GetY (Int_t param, const char* tname=0) const;
@@ -95,6 +95,26 @@ class AliGenMUONlib :
     static Double_t YBeauty(Double_t *py, Double_t *dummy);
     static Int_t    IpBeauty(TRandom *ran);
 //
+
+   // Chi 1c 2c
+   static Double_t PtChi_c0( Double_t *px, Double_t *dummy);
+   static Double_t YChi_c0(Double_t *py, Double_t *dummy);
+   static Int_t    IpChi_c0(TRandom *ran);
+
+   static Double_t PtChi_c1( Double_t *px, Double_t *dummy);
+   static Double_t YChi_c1(Double_t *py, Double_t *dummy);
+   static Int_t    IpChi_c1(TRandom *ran);
+
+   static Double_t PtChi_c2( Double_t *px, Double_t *dummy);
+   static Double_t YChi_c2(Double_t *py, Double_t *dummy);
+   static Int_t    IpChi_c2(TRandom *ran);
+
+   static Double_t PtChi_c( Double_t *px, Double_t *dummy);
+   static Double_t YChi_c(Double_t *py, Double_t *dummy);
+   static Int_t    IpChi_c(TRandom *ran);
+
+//
+
     
     static Float_t Interpolate(Float_t x, Float_t* y, Float_t x0, 
                        Float_t dx,
index d4f3432..7579cfe 100644 (file)
@@ -177,8 +177,7 @@ void AliDecayerPythia::ForceDecay()
        ForceParticleDecay( 5232, products1, mult1, 3); 
        ForceParticleDecay( 5332, products1, mult1, 3); 
        ForceParticleDecay( 100443, 443, 1);  // Psi'  -> J/Psi X    
-       ForceParticleDecay(    443,  13, 2);  // J/Psi -> mu+ mu-   
-
+       ForceParticleDecay(    443,  13, 2);  // J/Psi -> mu+ mu-
        ForceParticleDecay(  411,13,1); // D+/-     
        ForceParticleDecay(  421,13,1); // D0     
        ForceParticleDecay(  431,13,1); // D_s     
@@ -187,6 +186,25 @@ void AliDecayerPythia::ForceDecay()
        ForceParticleDecay( 4232,13,1); // Sigma_c 
        ForceParticleDecay( 4332,13,1); // Omega_c     
        break;
+   case kChiToJpsiGammaToMuonMuon:
+       products[0] =    443;
+       products[1] =     22;
+       mult[0] = 1;
+       mult[1] = 1;
+       ForceParticleDecay( 20443, products, mult, 2);   // Chi_1c  -> J/Psi  Gamma
+       ForceParticleDecay(   445, products, mult, 2);   // Chi_2c  -> J/Psi  Gamma
+       ForceParticleDecay(   443, 13, 2);               // J/Psi -> mu+ mu-
+       break;
+    case kChiToJpsiGammaToElectronElectron:
+       products[0] =    443;
+       products[1] =     22;
+       mult[0] = 1;
+       mult[1] = 1;
+       ForceParticleDecay( 20443, products, mult, 2);   // Chi_1c  -> J/Psi  Gamma
+       ForceParticleDecay(   445, products, mult, 2);   // Chi_2c  -> J/Psi  Gamma
+       ForceParticleDecay(   443, 11, 2);               // J/Psi -> e+ e-
+       break;
+
     case kBSemiMuonic:
        ForceParticleDecay(  511,13,1); // B0     
        ForceParticleDecay(  521,13,1); // B+/-