X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PYTHIA6%2FAliDecayerPythia.cxx;h=ae90baea9f387fd9a1409f251a83b810a7e0dec3;hb=54dcc35427a68a7d18d7aeba1c1799c5c07888b5;hp=3584f44e372ae29f7821bd94d38f782766ba23b5;hpb=1fefb2d47cf789aa2277b2cafe02bebae0ebac75;p=u%2Fmrichter%2FAliRoot.git diff --git a/PYTHIA6/AliDecayerPythia.cxx b/PYTHIA6/AliDecayerPythia.cxx index 3584f44e372..ae90baea9f3 100644 --- a/PYTHIA6/AliDecayerPythia.cxx +++ b/PYTHIA6/AliDecayerPythia.cxx @@ -28,6 +28,7 @@ #include #include #include +#include ClassImp(AliDecayerPythia) @@ -59,7 +60,8 @@ AliDecayerPythia::AliDecayerPythia(): fPythia(AliPythia::Instance()), fDecay(kAll), fHeavyFlavour(kTRUE), - fLongLived(kFALSE) + fLongLived(kFALSE), + fPatchOmegaDalitz(0) { // Default Constructor for (Int_t i=0; i< 501; i++) fBraPart[i]= 1.; @@ -71,10 +73,12 @@ AliDecayerPythia::AliDecayerPythia(const AliDecayerPythia &decayer): fPythia(0), fDecay(kAll), fHeavyFlavour(kTRUE), - fLongLived(kFALSE) + fLongLived(kFALSE), + fPatchOmegaDalitz(0) { // Copy Constructor decayer.Copy(*this); + for (Int_t i = 0; i < 501; i++) fBraPart[i] = 0.; } void AliDecayerPythia::Init() @@ -139,8 +143,15 @@ void AliDecayerPythia::Decay(Int_t idpart, TLorentzVector* p) Float_t energy = p->Energy(); Float_t theta = p->Theta(); Float_t phi = p->Phi(); - - Lu1Ent(0, idpart, energy, theta, phi); + if (!fPatchOmegaDalitz) { + Lu1Ent(0, idpart, energy, theta, phi); + } else { + fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0); + Lu1Ent(0, idpart, energy, theta, phi); + fPythia->DalitzDecays(); + fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1); + fPythia->Pyexec(); + } fPythia->GetPrimaries(); } @@ -148,7 +159,16 @@ Int_t AliDecayerPythia::ImportParticles(TClonesArray *particles) { // Import the decay products // - return fPythia->ImportParticles(particles, "All"); + const Float_t kconvT=0.001/2.999792458e8; // mm/c to seconds conversion + const Float_t kconvL=1./10; // mm to cm conversion + int np = fPythia->ImportParticles(particles, "All"); + // pythia assigns decay time in mm/c, convert to seconds + for (int ip=1;ipAt(ip); + if (!prod) continue; + prod->SetProductionVertex(prod->Vx()*kconvL,prod->Vy()*kconvL,prod->Vz()*kconvL,kconvT*prod->T()); + } + return np; } @@ -160,7 +180,6 @@ void AliDecayerPythia::ForceDecay() // Decay_t decay=fDecay; fPythia->SetMSTJ(21,2); - if (decay == kNoDecayHeavy) return; // // select mode @@ -250,6 +269,9 @@ void AliDecayerPythia::ForceDecay() ForceParticleDecay(100553,13,2);// Upsilon' ForceParticleDecay(200553,13,2);// Upsilon'' break; + case kJpsiDiMuon: + ForceParticleDecay( 443,13,2); // J/Psi + break; case kBSemiElectronic: ForceParticleDecay( 511,11,1); // B0 ForceParticleDecay( 521,11,1); // B+/- @@ -286,6 +308,14 @@ void AliDecayerPythia::ForceDecay() ForceParticleDecay(100553,11,2);// Upsilon' ForceParticleDecay(200553,11,2);// Upsilon'' break; + case kPsiPrimeJpsiDiElectron: + products[0] = 443; + products[1] = 211; + mult[0] = 1; + mult[1] = 2; + ForceParticleDecay( 100443, products, mult, 2, 1); + ForceParticleDecay( 443,11,2); + break; case kBJpsiDiMuon: products[0] = 443; @@ -320,6 +350,13 @@ void AliDecayerPythia::ForceDecay() ForceParticleDecay( 531,443,1); // B_s ForceParticleDecay( 5122,443,1); // Lambda_b break; + case kBJpsiUndecayed: + ForceParticleDecay( 511,443,1); // B0 + ForceParticleDecay( 521,443,1); // B+/- + ForceParticleDecay( 531,443,1); // B_s + ForceParticleDecay( 5122,443,1); // Lambda_b + fPythia->SetMDCY(fPythia->Pycomp(443),1,0); // switch-off J/psi + break; case kBPsiPrimeDiElectron: ForceParticleDecay( 511,100443,1); // B0 ForceParticleDecay( 521,100443,1); // B+/- @@ -370,8 +407,10 @@ void AliDecayerPythia::ForceDecay() break; case kOmega: ForceOmega(); + break; case kLambda: ForceLambda(); + break; case kAll: break; case kNoDecay: @@ -383,6 +422,33 @@ void AliDecayerPythia::ForceDecay() case kNoDecayBeauty: SwitchOffBDecay(); break; + case kElectronEM: + ForceParticleDecay( 111,11,1); // pi^0 + ForceParticleDecay( 221,11,1); // eta + ForceParticleDecay( 113,11,1); // rho + ForceParticleDecay( 223,11,1); // omega + ForceParticleDecay( 331,11,1); // etaprime + ForceParticleDecay( 333,11,1); // phi + break; + case kDiElectronEM: + ForceParticleDecay( 111,11,2); // pi^0 + ForceParticleDecay( 221,11,2); // eta + ForceParticleDecay( 113,11,2); // rho + ForceParticleDecay( 223,11,2); // omega + ForceParticleDecay( 331,11,2); // etaprime + ForceParticleDecay( 333,11,2); // phi + break; + case kGammaEM: + ForceParticleDecay( 111,22,1); // pi^0 + ForceParticleDecay( 221,22,1); // eta + ForceParticleDecay( 113,22,1); // rho + ForceParticleDecay( 223,22,1); // omega + ForceParticleDecay( 331,22,1); // etaprime + ForceParticleDecay( 333,22,1); // phi + break; + case kBeautyUpgrade: + ForceBeautyUpgrade(); + break; } } @@ -398,6 +464,34 @@ void AliDecayerPythia::SwitchOffHeavyFlavour() for (Int_t i = 156; i <= 160; i++) fPythia->SetMDME(i, 1, 0); } +void AliDecayerPythia::ForceBeautyUpgrade() +{ + // + // Force dedicated decay channels of signals ineresting + // for the ITS upgrade (Lb, Lc, Xi_c, B) + // + + // Lb: 50% of them in Lc pi+ and the rest with a Lc in final state + if(gRandom->Rndm()<0.50) { + const Int_t prod3[3]={4122,211,0}; + Int_t mult3[3]={1,1,1}; + ForceParticleDecay(5122,prod3,mult3,3,1); + } else { + ForceParticleDecay( 5122, 4122, 1); + } + // Xi_c + ForceParticleDecay( 4232, 3312, 1); + // B+ -> D0pi+ + const Int_t prod[2]={421,211}; + Int_t mult[2]={1,1}; + ForceParticleDecay(521,prod,mult,2,1); + // B0 -> D*-pi+ + const Int_t prod2[2]={413,211}; + ForceParticleDecay(511,prod2,mult,2,1); + // force charm hadronic decays (D mesons and Lc) + ForceHadronicD(0); +} + void AliDecayerPythia::Lu1Ent(Int_t flag, Int_t idpart, Double_t mom, Double_t theta, Double_t phi) { @@ -445,9 +539,9 @@ void AliDecayerPythia::ForceHadronicD(Int_t optUse4Bodies) 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 iLambda1520 = 3124; Int_t productsL[2] = {kProton, kKMinus}, multL[2] = {1, 1}; - ForceParticleDecay(iLambda_1520, productsL, multL, 2); + ForceParticleDecay(iLambda1520, productsL, multL, 2); // for Lambda_c -> Lambda pi+ Int_t iLambda=3122; //for Lambda_c -> antiK0 p @@ -472,7 +566,7 @@ void AliDecayerPythia::ForceHadronicD(Int_t optUse4Bodies) }; Int_t decayP3[kNHadrons][4] = { - {-1 , -1 , -1 , -1}, + {kPiPlus , iPhi , 0 , 0}, {kKMinus , kPiPlus, iRho0 , 0 }, {-1 , -1 , -1 , -1}, {-1 , -1 , -1 , -1}, @@ -481,11 +575,11 @@ void AliDecayerPythia::ForceHadronicD(Int_t optUse4Bodies) // 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 , kKPlus , 0 , 0}, {iKstarbar0 , kPiPlus , kPiMinus, 0}, {-1 , -1 , -1 , -1}, {-1 , -1 , -1 , -1}, - {iLambda_1520, kPiPlus , 0 , 0} + {iLambda1520 , kPiPlus , 0 , 0} }; // for Lambda_c -> Lambda pi+ Int_t decayP5[kNHadrons][4] = @@ -613,7 +707,7 @@ void AliDecayerPythia::ForceParticleDecay(Int_t particle, Int_t product, Int_t m if (norm > 0.) fBraPart[kc] /= norm; } -void AliDecayerPythia::ForceParticleDecay(Int_t particle, Int_t* products, Int_t* mult, Int_t npart) +void AliDecayerPythia::ForceParticleDecay(Int_t particle, const Int_t* products, Int_t* mult, Int_t npart, Bool_t flag) { // // Force decay of particle into products with multiplicity mult @@ -637,14 +731,17 @@ void AliDecayerPythia::ForceParticleDecay(Int_t particle, Int_t* products, Int_t for (Int_t i = 0; i < npart; i++) { nprod += (CountProducts(channel, products[i]) >= mult[i]); } - if (nprod) { + if ((nprod && !flag) || ((nprod == npart) && flag)) { fPythia->SetMDME(channel,1,1); - } else { + } else { // fPythia->SetMDME(channel,1,0); fBraPart[kc] -= fPythia->GetBRAT(channel); } } if (norm > 0.) fBraPart[kc] /= norm; + + + } void AliDecayerPythia::DefineParticles() @@ -750,7 +847,9 @@ void AliDecayerPythia::ForceLambda() } -void AliDecayerPythia::SwitchOffBDecay(){ +void AliDecayerPythia::SwitchOffBDecay() +{ +// Switch off B-decays Int_t heavyB[]={511,521,531,5122,5132,5232,5332}; for(int i=0;i<4;i++) { @@ -790,27 +889,6 @@ void AliDecayerPythia::ReadDecayTable() } -#ifdef never -void AliDecayerPythia::Streamer(TBuffer &R__b) -{ - // Stream an object of class AliDecayerPythia. - - if (R__b.IsReading()) { - Version_t R__v = R__b.ReadVersion(); if (R__v) { } - AliDecayer::Streamer(R__b); - (AliPythia::Instance())->Streamer(R__b); - R__b >> (Int_t&)fDecay; - R__b.ReadStaticArray(fBraPart); - } else { - R__b.WriteVersion(AliDecayerPythia::IsA()); - AliDecayer::Streamer(R__b); - R__b << fPythia; - R__b << (Int_t)fDecay; - R__b.WriteArray(fBraPart, 501); - } -} -#endif - void AliDecayerPythia::Copy(TObject &) const { //