#include "AliDecayerPythia.h"
#include "AliPythia.h"
+#include "AliLog.h"
#include <TPDGCode.h>
#include <TLorentzVector.h>
#include <TClonesArray.h>
void AliDecayerPythia::Init()
{
+
// Initialisation
//
if (!fgInit) {
}
}
//...Switch off decay of pi0, K0S, Lambda, Sigma+-, Xi0-, Omega-.
-
+
+/*
if (fDecay != kNeutralPion) {
fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
} else {
fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
}
+*/
+ fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
fPythia->SetMDCY(fPythia->Pycomp(310) ,1,0);
fPythia->SetMDCY(fPythia->Pycomp(3122),1,0);
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
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+/-
Int_t iDeltaPP = 2224;
Int_t productsD[2] = {kProton, kPiPlus}, multD[2] = {1, 1};
ForceParticleDecay(iDeltaPP, productsD, multD, 2);
+ // for Lambda_c -> Lambda(1520) pi+ -> p K- pi+
+ Int_t iLambda_1520 = 3124;
+ Int_t productsL[2] = {kProton, kKMinus}, multL[2] = {1, 1};
+ ForceParticleDecay(iLambda_1520, productsL, multL, 2);
+ // for Lambda_c -> Lambda pi+
+ Int_t iLambda=3122;
+ //for Lambda_c -> antiK0 p
+ Int_t iK0bar=-311;
Int_t decayP1[kNHadrons][4] =
{-1 , -1 , -1 , -1},
{kProton , kKMinus, kPiPlus , 0}
};
+ // for Lambda_c -> Lambda_1520 pi+ -> p K- pi+, D0-> K*0 pi+ pi- -> K3pi
+ Int_t decayP4[kNHadrons][4] =
+ {
+ {-1 , -1 , -1 , -1},
+ {iKstarbar0 , kPiPlus , kPiMinus, 0},
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {iLambda_1520, kPiPlus , 0 , 0}
+ };
+ // for Lambda_c -> Lambda pi+
+ Int_t decayP5[kNHadrons][4] =
+ {
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {iLambda , kPiPlus, 0 , 0}
+ };
+
+ // for Lambda_c -> K0bar p
+ Int_t decayP6[kNHadrons][4] =
+ {
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {-1 , -1 , -1 , -1},
+ {kProton , iK0bar, 0 , 0}
+ };
+
if(optUse4Bodies==0){
for(Int_t iDau=0;iDau<4;iDau++){
decayP2[1][iDau]=-1;
decayP3[1][iDau]=-1;
+ decayP4[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;
+ Double_t norm = 0.;
+ for (channel=ifirst; channel<=ilast;channel++) norm+=fPythia->GetBRAT(channel);
+ if (norm < 1.-1.e-12 || norm > 1.+1.e-12) {
+ char pName[16];
+ fPythia->Pyname(hadron[ihadron],pName);
+ AliWarning(Form("Total branching ratio of %s (PDG code = %d) not equal to 1 (= %f)",pName,hadron[ihadron],norm));
+ }
+ fBraPart[kc] = norm;
+ fPythia->SetMDCY(kc,1,1);
for (channel = ifirst; channel <= ilast; channel++) {
if ((
fPythia->GetKFDP(channel,3) == decayP3[ihadron][2] &&
fPythia->GetKFDP(channel,4) == decayP3[ihadron][3] &&
fPythia->GetKFDP(channel,5) == 0
+ ) || (
+ fPythia->GetKFDP(channel,1) == decayP4[ihadron][0] &&
+ fPythia->GetKFDP(channel,2) == decayP4[ihadron][1] &&
+ fPythia->GetKFDP(channel,3) == decayP4[ihadron][2] &&
+ fPythia->GetKFDP(channel,4) == decayP4[ihadron][3] &&
+ fPythia->GetKFDP(channel,5) == 0
+ ) || (
+ fPythia->GetKFDP(channel,1) == decayP5[ihadron][0] &&
+ fPythia->GetKFDP(channel,2) == decayP5[ihadron][1] &&
+ fPythia->GetKFDP(channel,3) == decayP5[ihadron][2] &&
+ fPythia->GetKFDP(channel,4) == decayP5[ihadron][3] &&
+ fPythia->GetKFDP(channel,5) == 0
+ ) || (
+ fPythia->GetKFDP(channel,1) == decayP6[ihadron][0] &&
+ fPythia->GetKFDP(channel,2) == decayP6[ihadron][1] &&
+ fPythia->GetKFDP(channel,3) == decayP6[ihadron][2] &&
+ fPythia->GetKFDP(channel,4) == decayP6[ihadron][3] &&
+ fPythia->GetKFDP(channel,5) == 0
+
))
{
fBraPart[kc] -= fPythia->GetBRAT(channel);
} // selected channel ?
} // decay channels
+ if (norm > 0) fBraPart[kc] /= norm;
} // hadrons
}
fPythia->SetMDCY(kc,1,1);
Int_t ifirst=fPythia->GetMDCY(kc,2);
Int_t ilast=ifirst+fPythia->GetMDCY(kc,3)-1;
- fBraPart[kc] = 1;
+ Double_t norm = 0.;
+ for (Int_t channel=ifirst; channel<=ilast;channel++) norm+=fPythia->GetBRAT(channel);
+ if (norm < 1.-1.e-12 || norm > 1.+1.e-12) {
+ char pName[16];
+ fPythia->Pyname(particle,pName);
+ AliWarning(Form("Total branching ratio of %s (PDG code = %d) not equal to 1 (= %f)",pName,particle,norm));
+ }
+ fBraPart[kc] = norm;
//
// Loop over decay channels
for (Int_t channel=ifirst; channel<=ilast;channel++) {
fPythia->SetMDME(channel,1,1);
} else {
fPythia->SetMDME(channel,1,0);
- fBraPart[kc]-=fPythia->GetBRAT(channel);
+ fBraPart[kc] -= fPythia->GetBRAT(channel);
}
}
+ if (norm > 0.) fBraPart[kc] /= norm;
}
void AliDecayerPythia::ForceParticleDecay(Int_t particle, Int_t* products, Int_t* mult, Int_t npart)
fPythia->SetMDCY(kc,1,1);
Int_t ifirst=fPythia->GetMDCY(kc,2);
Int_t ilast=ifirst+fPythia->GetMDCY(kc,3)-1;
- fBraPart[kc] = 1;
+ Double_t norm = 0.;
+ for (Int_t channel=ifirst; channel<=ilast;channel++) norm+=fPythia->GetBRAT(channel);
+ if (norm < 1.-1.e-12 || norm > 1.+1.e-12) {
+ char pName[16];
+ fPythia->Pyname(particle,pName);
+ AliWarning(Form("Total branching ratio of %s (PDG code = %d) not equal to 1 (= %f)",pName,particle,norm));
+ }
+ fBraPart[kc] = norm;
//
// Loop over decay channels
for (Int_t channel = ifirst; channel <= ilast; channel++) {
fPythia->SetMDME(channel,1,1);
} else {
fPythia->SetMDME(channel,1,0);
- fBraPart[kc]-=fPythia->GetBRAT(channel);
+ fBraPart[kc] -= fPythia->GetBRAT(channel);
}
}
+ if (norm > 0.) fBraPart[kc] /= norm;
}
void AliDecayerPythia::DefineParticles()