/*
$Log$
+Revision 1.17 2003/01/31 16:54:38 morsch
+Use TPDCCode.h instead of AliPDG.
+
+Revision 1.16 2003/01/31 15:56:42 morsch
+Forcing of decay channels independent of order in decay table.
+
+Revision 1.15 2002/10/14 14:55:35 hristov
+Merging the VirtualMC branch to the main development branch (HEAD)
+
+Revision 1.14 2002/10/11 10:05:18 morsch
+pdg code for psi' corrected.
+
+Revision 1.10.6.3 2002/10/10 16:40:08 hristov
+Updating VirtualMC to v3-09-02
+
+Revision 1.13 2002/09/16 10:40:48 morsch
+Use correct pdg codes for Upsilon(2S) = 100553 and Upsilon(3S) = 200553.
+
+Revision 1.12 2002/06/05 14:05:46 morsch
+Decayer option kPhiKK for forced phi->K+K- decay added.
+
Revision 1.11 2002/04/26 10:32:59 morsch
Option kNoDecayHeavy added.
#include "AliDecayerPythia.h"
#include "AliPythia.h"
+#include <TPDGCode.h>
#include <TLorentzVector.h>
#include <TClonesArray.h>
ForceParticleDecay( 223,13,2); // omega
ForceParticleDecay( 333,13,2); // phi
ForceParticleDecay( 443,13,2); // J/Psi
- ForceParticleDecay(20443,13,2); // Psi'
+ ForceParticleDecay(100443,13,2); // Psi'
ForceParticleDecay( 553,13,2); // Upsilon
- ForceParticleDecay(20553,13,2); // Upsilon'
- ForceParticleDecay(30553,13,2); // Upsilon''
+ ForceParticleDecay(100553,13,2); // Upsilon'
+ ForceParticleDecay(200553,13,2); // Upsilon''
break;
case kSemiElectronic:
ForceParticleDecay( 411,11,1); // D+/-
ForceParticleDecay( 221,11,2); // eta
ForceParticleDecay( 223,11,2); // omega
ForceParticleDecay( 443,11,2); // J/Psi
- ForceParticleDecay(30443,11,2); // Psi'
+ ForceParticleDecay(100443,11,2); // Psi'
ForceParticleDecay( 553,11,2); // Upsilon
- ForceParticleDecay(30553,11,2); // Upsilon'
+ ForceParticleDecay(100553,11,2); // Upsilon'
+ ForceParticleDecay(200553,11,2); // Upsilon''
break;
case kBJpsiDiMuon:
ForceParticleDecay( 511,443,1); // B0
ForceParticleDecay( 521,30443,1); // B+/-
ForceParticleDecay( 531,30443,1); // B_s
ForceParticleDecay( 5122,30443,1); // Lambda_b
- ForceParticleDecay(30443,13,2); // Psi'
+ ForceParticleDecay(100443,13,2); // Psi'
break;
case kBJpsiDiElectron:
ForceParticleDecay( 511,443,1); // B0
ForceParticleDecay( 521,30443,1); // B+/-
ForceParticleDecay( 531,30443,1); // B_s
ForceParticleDecay( 5122,30443,1); // Lambda_b
- ForceParticleDecay(30443,11,2); // Psi'
+ ForceParticleDecay(100443,11,2); // Psi'
break;
case kPiToMu:
ForceParticleDecay(211,13,1); // pi->mu
void AliDecayerPythia::ForceHadronicD()
{
+//
// Force golden D decay modes
//
-
+ const Int_t kNHadrons = 4;
Int_t channel;
+ Int_t hadron[kNHadrons] = {411, 421, 431, 4112};
+ Int_t decayP[kNHadrons][3] =
+ {
+ {kKMinus, kPiPlus, kPiPlus},
+ {kKMinus, kPiPlus, 0 },
+ {-1 , -1 , -1 },
+ {-1 , -1 , -1 }
+ };
-// D+ -> K- pi+ pi+
- Int_t kc=fPythia->Pycomp(411);
- 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 (channel==837) {
- fPythia->SetMDME(channel,1,1);
- } else {
- fPythia->SetMDME(channel,1,0);
- fBraPart[kc]-=fPythia->GetBRAT(channel);
- }
- }
-// D0 -> K- pi+
- kc=fPythia->Pycomp(421);
- fPythia->SetMDCY(kc,1,1);
- ifirst=fPythia->GetMDCY(kc,2);
- ilast=ifirst+fPythia->GetMDCY(kc,3)-1;
- for (channel=ifirst; channel<=ilast;channel++) {
- if (channel==881) {
- fPythia->SetMDME(channel,1,1);
- } else {
- fPythia->SetMDME(channel,1,0);
- fBraPart[kc]-=fPythia->GetBRAT(channel);
- }
- }
-
-// no D_s decays
- kc=fPythia->Pycomp(431);
- fPythia->SetMDCY(kc,1,1);
- ifirst=fPythia->GetMDCY(kc,2);
- ilast=ifirst+fPythia->GetMDCY(kc,3)-1;
- for (channel=ifirst; channel<=ilast;channel++) {
- fPythia->SetMDME(channel,1,0);
- fBraPart[kc]-=fPythia->GetBRAT(channel);
- }
-
-// no Lambda_c decays
- kc=fPythia->Pycomp(4122);
- fPythia->SetMDCY(kc,1,1);
- ifirst=fPythia->GetMDCY(kc,2);
- ilast=ifirst+fPythia->GetMDCY(kc,3)-1;
- for (channel=ifirst; channel<=ilast;channel++) {
- fPythia->SetMDME(channel,1,0);
- fBraPart[kc]-=fPythia->GetBRAT(channel);
- }
+ 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) == decayP[ihadron][0] &&
+ fPythia->GetKFDP(channel,2) == decayP[ihadron][1] &&
+ fPythia->GetKFDP(channel,3) == decayP[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
+ } // hadrons
}
void AliDecayerPythia::ForceParticleDecay(Int_t particle, Int_t product, Int_t mult)
{
// Force Omega -> Lambda K- Decay
Int_t kc=fPythia->Pycomp(3334);
- fPythia->SetMDCY(kc,1,1);
- fPythia->SetMDME(1202,1,1);
- fPythia->SetMDME(1203,1,0);
- fPythia->SetMDME(1204,1,0);
- fPythia->SetMDME(1205,1,0);
+ fPythia->SetMDCY(kc,1,1);
+ Int_t ifirst = fPythia->GetMDCY(kc,2);
+ Int_t ilast = ifirst + fPythia->GetMDCY(kc,3)-1;
+ for (Int_t channel = ifirst; channel <= ilast; channel++) {
+ if (
+ fPythia->GetKFDP(channel,1) == kLambda0 &&
+ fPythia->GetKFDP(channel,2) == kKMinus &&
+ fPythia->GetKFDP(channel,3) == 0
+ )
+ {
+ fPythia->SetMDME(channel,1,1);
+ } else {
+ fPythia->SetMDME(channel,1,0);
+ } // selected channel ?
+ } // decay channels
}
{
//
// Read the decay table
+ printf("Reading Deacy table\n \n ");
+
Int_t lun = 15;
opendecaytable(lun);
fPythia->Pyupda(2,lun);