Updates on hadronic decays of open charm. (A. Dainese, F. Prino)
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Jun 2007 17:27:32 +0000 (17:27 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Jun 2007 17:27:32 +0000 (17:27 +0000)
EVGEN/AliDecayer.h
EVGEN/AliGenMC.cxx
PYTHIA6/AliDecayerPythia.cxx
PYTHIA6/AliDecayerPythia.h

index 332bcc0..736c61f 100644 (file)
@@ -16,7 +16,7 @@ typedef enum
     kBSemiElectronic, kSemiElectronic, kDiElectron, kBSemiMuonic, kSemiMuonic, kDiMuon,
     kBJpsiDiMuon, kBJpsiDiElectron, 
     kBPsiPrimeDiMuon, kBPsiPrimeDiElectron, kPiToMu, kKaToMu, 
-    kNoDecay, kHadronicD, kOmega, kPhiKK, 
+    kNoDecay, kHadronicD, kHadronicDWithout4Bodies, kOmega, kPhiKK, 
     kAll, kNoDecayHeavy, kHardMuons, kBJpsi,
     kWToMuon,kWToCharm, kWToCharmToMuon, kZDiMuon, kNeutralPion, kAllMuonic
 } Decay_t;
index 914ee1c..a6f8963 100644 (file)
@@ -134,6 +134,7 @@ void AliGenMC::Init()
     case kWToCharm:
        break;
     case kHadronicD:
+    case kHadronicDWithout4Bodies:
        fChildSelect[0]=kPiPlus;
        fChildSelect[1]=kKPlus;
        break;
index 56980b6..81634a8 100644 (file)
@@ -326,7 +326,10 @@ void AliDecayerPythia::ForceDecay()
         ForceParticleDecay(  23, 13,2); // Z -> mu+ mu-
        break;
     case kHadronicD:
-       ForceHadronicD();
+       ForceHadronicD(1);
+       break;
+    case kHadronicDWithout4Bodies:
+       ForceHadronicD(0);
        break;
     case kPhiKK:
        ForceParticleDecay(333,321,2); // Phi->K+K-
@@ -366,70 +369,103 @@ Int_t AliDecayerPythia::CountProducts(Int_t channel, Int_t particle)
 }
 
 
-void AliDecayerPythia::ForceHadronicD()
+void AliDecayerPythia::ForceHadronicD(Int_t optUse4Bodies)
 {
 //
 // Force golden D decay modes
 //
-    const Int_t kNHadrons = 4;
-    Int_t channel;
-    Int_t hadron[kNHadrons] = {411,  421, 431, 4112};
-    // for D+ -> K0* (-> K- pi+) pi+
-    Int_t iKstar0    =  313;
-    Int_t iKstarbar0 = -313;
-    Int_t products[2] = {kKPlus, kPiMinus}, mult[2] = {1, 1};
-    ForceParticleDecay(iKstar0, products, mult, 2);
-    // for Ds -> Phi pi+
-    Int_t iPhi=333;
-    ForceParticleDecay(iPhi,kKPlus,2); // Phi->K+K-
-    Int_t decayP1[kNHadrons][3] = 
-
-       { 
-           {kKMinus, kPiPlus,    kPiPlus},
-           {kKMinus, kPiPlus,    0      },
-           {kKPlus , iKstarbar0, 0     },
-           {-1     , -1        , -1        }
-       };
-    Int_t decayP2[kNHadrons][3] = 
-       { 
-           {iKstarbar0, kPiPlus, 0   },
-           {-1        , -1     , -1  },
-           {iPhi      , kPiPlus, 0  },
-           {-1        , -1     , -1  }
-       };
-    
-
-    for (Int_t ihadron = 0; ihadron < kNHadrons; ihadron++)
+  const Int_t kNHadrons = 5;
+  Int_t channel;
+  Int_t hadron[kNHadrons] = {411,  421, 431, 4112, 4122};
+
+  // for D+ -> K0* (-> K- pi+) pi+
+  Int_t iKstar0    =  313;
+  Int_t iKstarbar0 = -313;
+  Int_t products[2] = {kKPlus, kPiMinus}, mult[2] = {1, 1};
+  ForceParticleDecay(iKstar0, products, mult, 2);
+  // for Ds -> Phi pi+
+  Int_t iPhi=333;
+  ForceParticleDecay(iPhi,kKPlus,2); // Phi->K+K-
+  // for D0 -> rho0 pi+ k-
+  Int_t iRho0=113;
+  ForceParticleDecay(iRho0,kPiPlus,2); // Rho0->pi+pi-
+  // for Lambda_c -> Delta++ K-
+  Int_t iDeltaPP = 2224;
+  Int_t productsD[2] = {kProton, kPiPlus}, multD[2] = {1, 1};
+  ForceParticleDecay(iDeltaPP, productsD, multD, 2);
+
+
+  Int_t decayP1[kNHadrons][4] = 
+    { 
+      {kKMinus, kPiPlus,    kPiPlus, 0},
+      {kKMinus, kPiPlus,    0      , 0},
+      {kKPlus , iKstarbar0, 0      , 0},
+      {-1     , -1        , -1     , -1},
+      {kProton, iKstarbar0, 0      , 0}
+    };
+  Int_t decayP2[kNHadrons][4] = 
+    { 
+      {iKstarbar0, kPiPlus, 0      , 0},
+      {kKMinus   , kPiPlus, kPiPlus, kPiMinus},
+      {iPhi      , kPiPlus, 0      , 0},
+      {-1        , -1     , -1     , -1},
+      {iDeltaPP  , kKMinus, 0      , 0}
+    };
+  Int_t decayP3[kNHadrons][4] = 
+    { 
+      {-1        , -1     , -1      , -1},
+      {kKMinus   , kPiPlus, iRho0   , 0 },
+      {-1        , -1     , -1      , -1},
+      {-1        , -1     , -1      , -1},
+      {kProton   , kKMinus, kPiPlus , 0}
+    };
+  if(optUse4Bodies==0){
+    for(Int_t iDau=0;iDau<4;iDau++){
+      decayP2[1][iDau]=-1;
+      decayP3[1][iDau]=-1;
+    }
+  }  
+  
+  for (Int_t ihadron = 0; ihadron < kNHadrons; ihadron++)
     {
-       Int_t kc = fPythia->Pycomp(hadron[ihadron]);    
-       fPythia->SetMDCY(kc,1,1);       
-       Int_t ifirst = fPythia->GetMDCY(kc,2);
-       Int_t ilast  = ifirst + fPythia->GetMDCY(kc,3)-1;
-
-       for (channel = ifirst; channel <= ilast; channel++) {
-           if ((
-               fPythia->GetKFDP(channel,1) == decayP1[ihadron][0] &&
-               fPythia->GetKFDP(channel,2) == decayP1[ihadron][1] &&
-               fPythia->GetKFDP(channel,3) == decayP1[ihadron][2] &&
-               fPythia->GetKFDP(channel,4) == 0
-               ) || (
-               fPythia->GetKFDP(channel,1) == decayP2[ihadron][0] &&
-               fPythia->GetKFDP(channel,2) == decayP2[ihadron][1] &&
-               fPythia->GetKFDP(channel,3) == decayP2[ihadron][2] &&
-               fPythia->GetKFDP(channel,4) == 0
-               ))
-
-           {
-               fPythia->SetMDME(channel,1,1);
-           } else {
-               fPythia->SetMDME(channel,1,0);
-               fBraPart[kc] -= fPythia->GetBRAT(channel);
-           } // selected channel ?
-       } // decay channels
+      Int_t kc = fPythia->Pycomp(hadron[ihadron]);     
+      fPythia->SetMDCY(kc,1,1);        
+      Int_t ifirst = fPythia->GetMDCY(kc,2);
+      Int_t ilast  = ifirst + fPythia->GetMDCY(kc,3)-1;
+
+      for (channel = ifirst; channel <= ilast; channel++) {
+       if ((
+            fPythia->GetKFDP(channel,1) == decayP1[ihadron][0] &&
+            fPythia->GetKFDP(channel,2) == decayP1[ihadron][1] &&
+            fPythia->GetKFDP(channel,3) == decayP1[ihadron][2] &&
+            fPythia->GetKFDP(channel,4) == decayP1[ihadron][3] &&
+            fPythia->GetKFDP(channel,5) == 0
+       ) || (
+            fPythia->GetKFDP(channel,1) == decayP2[ihadron][0] &&
+            fPythia->GetKFDP(channel,2) == decayP2[ihadron][1] &&
+            fPythia->GetKFDP(channel,3) == decayP2[ihadron][2] &&
+            fPythia->GetKFDP(channel,4) == decayP2[ihadron][3] &&
+            fPythia->GetKFDP(channel,5) == 0
+       ) || (
+             fPythia->GetKFDP(channel,1) == decayP3[ihadron][0] &&
+             fPythia->GetKFDP(channel,2) == decayP3[ihadron][1] &&
+             fPythia->GetKFDP(channel,3) == decayP3[ihadron][2] &&
+             fPythia->GetKFDP(channel,4) == decayP3[ihadron][3] &&
+             fPythia->GetKFDP(channel,5) == 0
+             ))
+         
+         {
+           fPythia->SetMDME(channel,1,1);
+         } else {
+           fPythia->SetMDME(channel,1,0);
+           fBraPart[kc] -= fPythia->GetBRAT(channel);
+         } // selected channel ?
+      } // decay channels
     } // hadrons
 }
 
 
+
 void AliDecayerPythia::ForceParticleDecay(Int_t particle, Int_t product, Int_t mult)
 {
 //
index 6c469bd..3673f12 100644 (file)
@@ -41,7 +41,7 @@ public AliDecayer
     Int_t    CountProducts(Int_t channel, Int_t particle);
     void     ForceParticleDecay(Int_t particle, Int_t product, Int_t mult);
     void     ForceParticleDecay(Int_t particle, Int_t* products, Int_t* mult, Int_t npart);
-    void     ForceHadronicD();
+    void     ForceHadronicD(Int_t optUser4Bodies=1);
     void     ForceOmega();    
     Float_t  GetBraPart(Int_t kf);
     void  Copy(TObject &decayer) const;