- Possibility to decay long lived particles restored
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 7 Jan 2010 17:23:52 +0000 (17:23 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 7 Jan 2010 17:23:52 +0000 (17:23 +0000)
- Optional forced decay Lambda0->p pi-

EVGEN/AliGenMC.cxx
PYTHIA6/AliDecayerPythia.cxx
PYTHIA6/AliDecayerPythia.h
PYTHIA8/AliDecayerPythia8.cxx

index 13339d7..6e29625 100644 (file)
@@ -157,7 +157,8 @@ void AliGenMC::Init()
         fChildSelect[1]= 11;
         break;
 
-    case kOmega:       
+    case kOmega:
+    case kLambda:      
     case kAll:
     case kAllMuonic:
     case kNoDecay:
index affa164..8f30e29 100644 (file)
@@ -58,7 +58,8 @@ Bool_t AliDecayerPythia::fgInit = kFALSE;
 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.;
@@ -69,7 +70,8 @@ AliDecayerPythia::AliDecayerPythia(const AliDecayerPythia &decayer):
     AliDecayer(decayer),
     fPythia(0),
     fDecay(kAll),
-    fHeavyFlavour(kTRUE)
+    fHeavyFlavour(kTRUE),
+    fLongLived(kFALSE)
 {
     // Copy Constructor
     decayer.Copy(*this);
@@ -114,16 +116,18 @@ void AliDecayerPythia::Init()
 */
 
     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();
 }
@@ -366,6 +370,8 @@ void AliDecayerPythia::ForceDecay()
        break;
     case kOmega:
        ForceOmega();
+    case kLambda:
+       ForceLambda();
     case kAll:
        break;
     case kNoDecay:
@@ -719,6 +725,26 @@ void  AliDecayerPythia::ForceOmega()
     } // 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)
index e048f04..45cd884 100644 (file)
@@ -29,6 +29,7 @@ public AliDecayer
       {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();
@@ -43,6 +44,7 @@ public AliDecayer
     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;
@@ -56,6 +58,7 @@ public AliDecayer
     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  
index 49308f1..b14a1a1 100644 (file)
@@ -528,6 +528,10 @@ void AliDecayerPythia8::ForceDecay()
        // Omega -> Lambda K
        TPythia8::Instance()->ReadString("3334:onMode = off");
        TPythia8::Instance()->ReadString("3334:onIfAll = 3122 321 ");
+    case kLambda:
+       // Lambda -> p pi-
+       TPythia8::Instance()->ReadString("3122:onMode = off");
+       TPythia8::Instance()->ReadString("3122:onIfAll = 2212 211 ");
     case kAll:
        break;
     case kNoDecay:
@@ -615,7 +619,7 @@ void AliDecayerPythia8::ForceHadronicD(Int_t optUse4Bodies)
 
     // D+/- -> K pi pi 
     TPythia8::Instance()->ReadString("411:onIfMatch = 321 211 211");
-    // D+/- -> K K* pi
+    // D+/- -> K* pi
     TPythia8::Instance()->ReadString("411:onIfMatch = 313 211");
     // D0 -> K pi
     TPythia8::Instance()->ReadString("421:onIfMatch = 321 211");