For Heavy Flavor off: switching of QQbar splittings is responsibility of
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Sep 2007 10:38:19 +0000 (10:38 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Sep 2007 10:38:19 +0000 (10:38 +0000)
decayer.

PYTHIA6/AliDecayerPythia.cxx
PYTHIA6/AliDecayerPythia.h
PYTHIA6/AliGenPythia.cxx

index 6b32ee5..d4f3432 100644 (file)
@@ -56,7 +56,8 @@ Bool_t AliDecayerPythia::fgInit = kFALSE;
 
 AliDecayerPythia::AliDecayerPythia():
     fPythia(AliPythia::Instance()),
-    fDecay(kAll)
+    fDecay(kAll),
+    fHeavyFlavour(kTRUE)
 {
 // Default Constructor
     for (Int_t i=0; i< 501; i++) fBraPart[i]= 1.;
@@ -66,7 +67,8 @@ AliDecayerPythia::AliDecayerPythia():
 AliDecayerPythia::AliDecayerPythia(const AliDecayerPythia &decayer):
     AliDecayer(decayer),
     fPythia(0),
-    fDecay(kAll)
+    fDecay(kAll),
+    fHeavyFlavour(kTRUE)
 {
     // Copy Constructor
     decayer.Copy(*this);
@@ -102,9 +104,9 @@ void AliDecayerPythia::Init()
 //...Switch off decay of pi0, K0S, Lambda, Sigma+-, Xi0-, Omega-.
     
     if (fDecay != kNeutralPion) {
-       fPythia->SetMDCY(fPythia->Pycomp(111) ,1,0);
+       fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
     } else {
-       fPythia->SetMDCY(fPythia->Pycomp(111) ,1,1);
+       fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
     }
 
 
@@ -116,6 +118,7 @@ void AliDecayerPythia::Init()
     fPythia->SetMDCY(fPythia->Pycomp(3312),1,0);
     fPythia->SetMDCY(fPythia->Pycomp(3322),1,0);
     fPythia->SetMDCY(fPythia->Pycomp(3334),1,0);
+
 // .. Force decay channels
     ForceDecay();
 }
@@ -130,8 +133,6 @@ void AliDecayerPythia::Decay(Int_t idpart, TLorentzVector* p)
     
     Lu1Ent(0, idpart, energy, theta, phi);
     fPythia->GetPrimaries();
-//    fPythia->Pylist(1);
-    
 }
 
 Int_t AliDecayerPythia::ImportParticles(TClonesArray *particles)
@@ -145,6 +146,9 @@ Int_t AliDecayerPythia::ImportParticles(TClonesArray *particles)
 void AliDecayerPythia::ForceDecay()
 {
 // Force a particle decay mode
+// Switch heavy flavour production off if requested
+    if (!fHeavyFlavour) SwitchOffHeavyFlavour();
+//
     Decay_t decay=fDecay;
     fPythia->SetMSTJ(21,2);
     if (decay == kNoDecayHeavy) return;
@@ -350,6 +354,18 @@ void AliDecayerPythia::ForceDecay()
     }
 }
 
+void  AliDecayerPythia::SwitchOffHeavyFlavour()
+{
+    // Switch off heavy flavour production
+    //
+    // Maximum number of quark flavours used in pdf 
+    fPythia->SetMSTP(58, 3);
+    // Maximum number of flavors that can be used in showers
+    fPythia->SetMSTJ(45, 3);   
+    // Switch off g->QQbar splitting in decay table
+    for (Int_t i = 156; i <= 160; i++) fPythia->SetMDME(i, 1, 0);
+}
+
 void  AliDecayerPythia::Lu1Ent(Int_t flag, Int_t idpart, 
                      Double_t mom, Double_t theta, Double_t phi)
 {
index 3673f12..e048f04 100644 (file)
@@ -28,7 +28,7 @@ public AliDecayer
     virtual void    SetForceDecay(Int_t decay)
       {SetForceDecay((Decay_t) decay);}
     virtual void    ForceDecay();
-    
+    virtual void    HeavyFlavourOff() {fHeavyFlavour = kFALSE;}
     virtual Float_t GetPartialBranchingRatio(Int_t ipart);
     virtual Float_t GetLifetime(Int_t kf);
     virtual void    WriteDecayTable();
@@ -42,9 +42,10 @@ public AliDecayer
     void     ForceParticleDecay(Int_t particle, Int_t product, Int_t mult);
     void     ForceParticleDecay(Int_t particle, Int_t* products, Int_t* mult, Int_t npart);
     void     ForceHadronicD(Int_t optUser4Bodies=1);
-    void     ForceOmega();    
+    void     ForceOmega();
+    void     SwitchOffHeavyFlavour();
     Float_t  GetBraPart(Int_t kf);
-    void  Copy(TObject &decayer) const;
+    void     Copy(TObject &decayer) const;
 
     AliDecayerPythia &operator=(const AliDecayerPythia &decayer) 
     {decayer.Copy(*this);return(*this);}
@@ -52,11 +53,12 @@ public AliDecayer
     
  private:
     AliPythia*  fPythia;          //! Pointer to AliPythia
-    Decay_t     fDecay;           // Forced decay mode
+    Decay_t     fDecay;           //  Forced decay mode
     Float_t     fBraPart[501];    //! Branching ratios
+    Bool_t      fHeavyFlavour;    //! Flag for heavy flavors
     static Bool_t fgInit;         //! initialization flag 
     
-    ClassDef(AliDecayerPythia,2)  // AliDecayer implementation using Pythia  
+    ClassDef(AliDecayerPythia, 3) // AliDecayer implementation using Pythia  
 };
 #endif
 
index 8b2a360..1b7bbec 100644 (file)
@@ -353,14 +353,18 @@ void AliGenPythia::Init()
     fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc);
     //  Forward Paramters to the AliPythia object
     fDecayer->SetForceDecay(fForceDecay);    
-    fDecayer->Init();
 // Switch off Heavy Flavors on request  
     if (fHFoff) {
+       // Maximum number of quark flavours used in pdf 
        fPythia->SetMSTP(58, 3);
+       // Maximum number of flavors that can be used in showers
        fPythia->SetMSTJ(45, 3);        
-       for (Int_t i = 156; i <= 160; i++) fPythia->SetMDME(i, 1, 0);
+       // Switch off g->QQbar splitting in decay table
+       ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
     }
 
+    fDecayer->Init();
+
 
 //  Parent and Children Selection
     switch (fProcess)