AliDecayerPythia::AliDecayerPythia():
fPythia(AliPythia::Instance()),
fDecay(kAll),
- fHeavyFlavour(kTRUE)
+ fHeavyFlavour(kTRUE),
+ fLongLived(kFALSE)
{
// Default Constructor
for (Int_t i=0; i< 501; i++) fBraPart[i]= 1.;
AliDecayer(decayer),
fPythia(0),
fDecay(kAll),
- fHeavyFlavour(kTRUE)
+ fHeavyFlavour(kTRUE),
+ fLongLived(kFALSE)
{
// Copy Constructor
decayer.Copy(*this);
*/
fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
-
- fPythia->SetMDCY(fPythia->Pycomp(310) ,1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3122),1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3112),1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3212),1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3222),1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3312),1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3322),1,0);
- fPythia->SetMDCY(fPythia->Pycomp(3334),1,0);
-
+ Int_t isw = 0;
+ if (fLongLived) isw = 1;
+
+ fPythia->SetMDCY(fPythia->Pycomp(310) ,1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3122),1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3112),1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3212),1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3222),1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3312),1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3322),1, isw);
+ fPythia->SetMDCY(fPythia->Pycomp(3334),1, isw);
+
// .. Force decay channels
ForceDecay();
}
break;
case kOmega:
ForceOmega();
+ case kLambda:
+ ForceLambda();
case kAll:
break;
case kNoDecay:
} // decay channels
}
+void AliDecayerPythia::ForceLambda()
+{
+ // Force Lambda -> p pi-
+ Int_t kc=fPythia->Pycomp(3122);
+ 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) == kProton &&
+ fPythia->GetKFDP(channel,2) == kPiMinus &&
+ fPythia->GetKFDP(channel,3) == 0
+ )
+ {
+ fPythia->SetMDME(channel,1,1);
+ } else {
+ fPythia->SetMDME(channel,1,0);
+ } // selected channel ?
+ } // decay channels
+}
Float_t AliDecayerPythia::GetPartialBranchingRatio(Int_t kf)
{SetForceDecay((Decay_t) decay);}
virtual void ForceDecay();
virtual void HeavyFlavourOff() {fHeavyFlavour = kFALSE;}
+ virtual void DecayLongLivedParticles() {fLongLived = kTRUE;}
virtual Float_t GetPartialBranchingRatio(Int_t ipart);
virtual Float_t GetLifetime(Int_t kf);
virtual void WriteDecayTable();
void ForceParticleDecay(Int_t particle, Int_t* products, Int_t* mult, Int_t npart);
void ForceHadronicD(Int_t optUser4Bodies=1);
void ForceOmega();
+ void ForceLambda();
void SwitchOffHeavyFlavour();
Float_t GetBraPart(Int_t kf);
void Copy(TObject &decayer) const;
Decay_t fDecay; // Forced decay mode
Float_t fBraPart[501]; //! Branching ratios
Bool_t fHeavyFlavour; //! Flag for heavy flavors
+ Bool_t fLongLived; //! Flag for long lived particle decay
static Bool_t fgInit; //! initialization flag
ClassDef(AliDecayerPythia, 3) // AliDecayer implementation using Pythia