PDC'06 configurations for charm and beauty added.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 18 Mar 2006 18:33:35 +0000 (18:33 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 18 Mar 2006 18:33:35 +0000 (18:33 +0000)
PYTHIA6/AliGenPythia.cxx
PYTHIA6/AliPythia.cxx
PYTHIA6/AliPythia.h

index 9d4b0b1..9d4725a 100644 (file)
@@ -65,10 +65,10 @@ AliGenPythia::AliGenPythia()
   SetJetEtRange();
   SetGammaPhiRange();
   SetGammaEtaRange();
-  SetTriggerParticle();
   SetPtKick();
   SetQuench();
   SetHadronisation();  
+  SetTriggerParticle();
   fSetNuclei = kFALSE;
   fNewMIS    = kFALSE;
   fHFoff     = kFALSE;
@@ -112,11 +112,11 @@ AliGenPythia::AliGenPythia(Int_t npart)
     SetJetEtRange();
     SetGammaPhiRange();
     SetGammaEtaRange();
-    SetTriggerParticle();
     SetJetReconstructionMode();
     SetQuench();
     SetHadronisation();
     SetPtKick();
+    SetTriggerParticle();
     // Options determining what to keep in the stack (Heavy flavour generation)
     fStackFillOpt = kFlavorSelection; // Keep particle with selected flavor
     fFeedDownOpt = kTRUE;             // allow feed down from higher family
@@ -286,8 +286,9 @@ void AliGenPythia::Init()
     case kPyCharm:
     case kPyCharmUnforced:
     case kPyCharmPbPbMNR:
-    case kPyCharmppMNR:
     case kPyCharmpPbMNR:
+    case kPyCharmppMNR:
+    case kPyCharmppMNRwmi:
        fParentSelect[0] =   411;
        fParentSelect[1] =   421;
        fParentSelect[2] =   431;
@@ -306,10 +307,17 @@ void AliGenPythia::Init()
        fParentSelect[0] =   411;
        fFlavorSelect    =   4; 
        break;
+    case kPyDPlusStrangePbPbMNR:
+    case kPyDPlusStrangepPbMNR:
+    case kPyDPlusStrangeppMNR:
+       fParentSelect[0] =   431;
+       fFlavorSelect    =   4; 
+       break;
     case kPyBeauty:
     case kPyBeautyPbPbMNR:
     case kPyBeautypPbMNR:
     case kPyBeautyppMNR:
+    case kPyBeautyppMNRwmi:
        fParentSelect[0]=  511;
        fParentSelect[1]=  521;
        fParentSelect[2]=  531;
@@ -481,7 +489,8 @@ void AliGenPythia::Generate()
        if (fProcess != kPyMb && fProcess != kPyJets && 
            fProcess != kPyDirectGamma &&
            fProcess != kPyMbNonDiffr  &&
-           fProcess != kPyW && fProcess != kPyZ ) {
+           fProcess != kPyW && fProcess != kPyZ &&
+           fProcess != kPyCharmppMNRwmi && fProcess != kPyBeautyppMNRwmi) {
            
            for (i = 0; i < np; i++) {
                TParticle* iparticle = (TParticle *) fParticles->At(i);
@@ -670,6 +679,7 @@ void AliGenPythia::Generate()
          }
            if (jev >= fNpart || fNpart == -1) {
                fKineBias=Float_t(fNpart)/Float_t(fTrials);
+               
                fQ  += fPythia->GetVINT(51);
                fX1 += fPythia->GetVINT(41);
                fX2 += fPythia->GetVINT(42);
@@ -700,9 +710,12 @@ Int_t  AliGenPythia::GenerateMB()
 //  converts from mm/c to s
     const Float_t kconv=0.001/2.999792458e8;
     
+
+    
     Int_t np = (fHadronisation) ? fParticles->GetEntriesFast() : fNpartons;
 
 
+
     Int_t* pParent = new Int_t[np];
     for (i=0; i< np; i++) pParent[i] = -1;
     if (fProcess == kPyJets || fProcess == kPyDirectGamma) {
@@ -710,7 +723,7 @@ Int_t  AliGenPythia::GenerateMB()
        TParticle* jet2 = (TParticle *) fParticles->At(7);
        if (!CheckTrigger(jet1, jet2)) return 0;
     }
-    
+
     if (fTriggerParticle) {
        Bool_t triggered = kFALSE;
        for (i = 0; i < np; i++) {
@@ -724,7 +737,29 @@ Int_t  AliGenPythia::GenerateMB()
        }
        if (!triggered) return 0;
     }
-    
+       
+
+    // Check if there is a ccbar or bbbar pair with at least one of the two
+    // in fYMin < y < fYMax
+    if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi) {
+      TParticle *hvq;
+      Bool_t  theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
+      Float_t yQ;  
+      Int_t   pdgQ;
+      for(i=0; i<np; i++) {
+       hvq = (TParticle*)fParticles->At(i);
+       pdgQ = hvq->GetPdgCode();  
+       if(TMath::Abs(pdgQ) != fFlavorSelect) continue; 
+       if(pdgQ>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
+       yQ = 0.5*TMath::Log((hvq->Energy()+hvq->Pz()+1.e-13)/
+                           (hvq->Energy()-hvq->Pz()+1.e-13));
+       if(yQ>fYMin && yQ<fYMax) inYcut=kTRUE;
+      }
+      if (!theQ || !theQbar || !inYcut) {
+       if (pParent) delete[] pParent;
+       return 0;
+      }
+    }
 
     //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
     if ( (fProcess == kPyW || fProcess == kPyZ || fProcess == kPyMb || fProcess == kPyMbNonDiffr)  
@@ -736,7 +771,6 @@ Int_t  AliGenPythia::GenerateMB()
     }
   
 
-    
     for (i = 0; i < np; i++) {
        Int_t trackIt = 0;
        TParticle *  iparticle = (TParticle *) fParticles->At(i);
@@ -793,6 +827,7 @@ Int_t  AliGenPythia::GenerateMB()
     } // particle loop 
 
     if (pParent) delete[] pParent;
+    
     return 1;
 }
 
index cd1c213..3df3270 100644 (file)
@@ -146,17 +146,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        SetMSTP(88,2); 
 // (D=1)see can be used to form  baryons (BARYON JUNCTION)
        SetMSTJ(1,1);  
-       SetMSTP(51,kCTEQ5L);// CTEQ 5L        ! CTEQ5L pdf
-       SetMSTP(81,1);      // Multiple Interactions ON
-       SetMSTP(82,4);      // Double Gaussian Model         
-       SetPARP(82,1.8);    // [GeV]    PT_min at Ref. energy
-       SetPARP(89,1000.);  // [GeV]   Ref. energy
-       SetPARP(90,0.16);   // 2*epsilon (exponent in power law)
-       SetPARP(83,0.5);    // Core density in proton matter dist. (def.value)
-       SetPARP(84,0.5);    // Core radius
-       SetPARP(85,0.33);   // Regulates gluon prod. mechanism
-       SetPARP(86,0.66);   // Regulates gluon prod. mechanism
-       SetPARP(67,1);      // Regulate gluon prod. mechanism
+       AtlasTuning();
        break;
     case kPyCharm:
        SetMSEL(4);
@@ -221,22 +211,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        SetMSUB(94,1);             // double diffraction
        SetMSUB(95,1);             // low pt production
 
-//
-// ATLAS Tuning
-//
-       
-        SetMSTP(51, kCTEQ5L);      // CTEQ5L pdf
-       SetMSTP(81,1);             // Multiple Interactions ON
-       SetMSTP(82,4);             // Double Gaussian Model
-
-       SetPARP(82,1.8);           // [GeV]    PT_min at Ref. energy
-       SetPARP(89,1000.);         // [GeV]   Ref. energy
-       SetPARP(90,0.16);          // 2*epsilon (exponent in power law)
-       SetPARP(83,0.5);           // Core density in proton matter distribution (def.value)
-       SetPARP(84,0.5);           // Core radius
-       SetPARP(85,0.33);          // Regulates gluon prod. mechanism
-       SetPARP(86,0.66);          // Regulates gluon prod. mechanism
-       SetPARP(67,1);             // Regulates Initial State Radiation
+       AtlasTuning();
        break;
     case kPyMbNonDiffr:
 // Minimum Bias pp-Collisions
@@ -246,22 +221,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        SetMSEL(0);
        SetMSUB(95,1);             // low pt production
 
-//
-// ATLAS Tuning
-//
-       
-       SetMSTP(51,kCTEQ5L);       // CTEQ5L pdf
-       SetMSTP(81,1);             // Multiple Interactions ON
-       SetMSTP(82,4);             // Double Gaussian Model
-
-       SetPARP(82,1.8);           // [GeV]    PT_min at Ref. energy
-       SetPARP(89,1000.);         // [GeV]   Ref. energy
-       SetPARP(90,0.16);          // 2*epsilon (exponent in power law)
-       SetPARP(83,0.5);           // Core density in proton matter distribution (def.value)
-       SetPARP(84,0.5);           // Core radius
-       SetPARP(85,0.33);          // Regulates gluon prod. mechanism
-       SetPARP(86,0.66);          // Regulates gluon prod. mechanism
-       SetPARP(67,1);             // Regulates Initial State Radiation
+       AtlasTuning();
        break;
     case kPyJets:
 //
@@ -285,6 +245,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
     case kPyCharmPbPbMNR:
     case kPyD0PbPbMNR:
     case kPyDPlusPbPbMNR:
+    case kPyDPlusStrangePbPbMNR:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
       // c-cbar single inclusive and double differential distributions.
@@ -303,6 +264,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
     case kPyCharmpPbMNR:
     case kPyD0pPbMNR:
     case kPyDPluspPbMNR:
+    case kPyDPlusStrangepPbMNR:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
       // c-cbar single inclusive and double differential distributions.
@@ -322,6 +284,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
     case kPyCharmppMNR:
     case kPyD0ppMNR:
     case kPyDPlusppMNR:
+    case kPyDPlusStrangeppMNR:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
       // c-cbar single inclusive and double differential distributions.
@@ -338,6 +301,33 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
       // Set c-quark mass
        SetPMAS(4,1,1.2);
       break;
+    case kPyCharmppMNRwmi:
+      // Tuning of Pythia parameters aimed to get a resonable agreement
+      // between with the NLO calculation by Mangano, Nason, Ridolfi for the
+      // c-cbar single inclusive and double differential distributions.
+      // This parameter settings are meant to work with pp collisions
+      // and with kCTEQ5L PDFs.
+      // Added multiple interactions according to ATLAS tune settings.
+      // To get a "reasonable" agreement with MNR results, events have to be 
+      // generated with the minimum ptHard (AliGenPythia::SetPtHard)
+      // set to 2.76 GeV.
+      // To get a "perfect" agreement with MNR results, events have to be 
+      // generated in four ptHard bins with the following relative 
+      // normalizations:
+      // 2.76-3 GeV: 25%
+      //    3-4 GeV: 40%
+      //    4-8 GeV: 29%
+      //     >8 GeV:  6%
+       ConfigHeavyFlavor();
+      // Intrinsic <kT^2>
+       SetMSTP(91,1);
+       SetPARP(91,1.);
+       SetPARP(93,5.);
+
+      // Set c-quark mass
+       SetPMAS(4,1,1.2);
+       AtlasTuning();
+       break;
     case kPyBeautyPbPbMNR:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
@@ -397,7 +387,38 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        // Set b-quark mass
        SetPMAS(5,1,4.75);
       break;
+     case kPyBeautyppMNRwmi:
+      // Tuning of Pythia parameters aimed to get a resonable agreement
+      // between with the NLO calculation by Mangano, Nason, Ridolfi for the
+      // b-bbar single inclusive and double differential distributions.
+      // This parameter settings are meant to work with pp collisions
+      // and with kCTEQ5L PDFs.
+      // Added multiple interactions according to ATLAS tune settings.
+      // To get a "reasonable" agreement with MNR results, events have to be 
+      // generated with the minimum ptHard (AliGenPythia::SetPtHard)
+      // set to 2.76 GeV.
+      // To get a "perfect" agreement with MNR results, events have to be 
+      // generated in four ptHard bins with the following relative 
+      // normalizations:
+      // 2.76-4 GeV:  5% 
+      //    4-6 GeV: 31%
+      //    6-8 GeV: 28%
+      //     >8 GeV: 36%
+        ConfigHeavyFlavor();
+      // QCD scales
+        SetPARP(67,1.0);
+        SetPARP(71,1.0);
+        
+        // Intrinsic <kT>
+        SetMSTP(91,1);
+        SetPARP(91,1.);
+        SetPARP(93,5.);
+
+      // Set b-quark mass
+        SetPMAS(5,1,4.75);
+
+        AtlasTuning();
+        break; 
     case kPyW:
 
       //Inclusive production of W+/-
@@ -1151,3 +1172,20 @@ void AliPythia::ConfigHeavyFlavor()
     SetMSTP(32,2);
     SetPARP(34,1.0);
 }
+
+void AliPythia::AtlasTuning()
+{
+    //
+    // Configuration for the ATLAS tuning
+        SetMSTP(51, kCTEQ5L);      // CTEQ5L pdf
+       SetMSTP(81,1);             // Multiple Interactions ON
+       SetMSTP(82,4);             // Double Gaussian Model
+       SetPARP(82,1.8);           // [GeV]    PT_min at Ref. energy
+       SetPARP(89,1000.);         // [GeV]   Ref. energy
+       SetPARP(90,0.16);          // 2*epsilon (exponent in power law)
+       SetPARP(83,0.5);           // Core density in proton matter distribution (def.value)
+       SetPARP(84,0.5);           // Core radius
+       SetPARP(85,0.33);          // Regulates gluon prod. mechanism
+       SetPARP(86,0.66);          // Regulates gluon prod. mechanism
+       SetPARP(67,1);             // Regulates Initial State Radiation
+}
index 82b9abd..0cb2e60 100644 (file)
 typedef enum
 {kPyCharm, kPyBeauty, kPyCharmUnforced, kPyBeautyUnforced,
  kPyJpsi, kPyJpsiChi, kPyMb, kPyMbNonDiffr, kPyJets, kPyDirectGamma,
- kPyCharmPbPbMNR, kPyD0PbPbMNR, kPyDPlusPbPbMNR, kPyBeautyPbPbMNR,
- kPyCharmpPbMNR, kPyD0pPbMNR, kPyDPluspPbMNR, kPyBeautypPbMNR,
- kPyCharmppMNR, kPyD0ppMNR, kPyDPlusppMNR, kPyBeautyppMNR, kPyW, kPyZ,
+ kPyCharmPbPbMNR, kPyD0PbPbMNR, kPyDPlusPbPbMNR, kPyDPlusStrangePbPbMNR, kPyBeautyPbPbMNR,
+ kPyCharmpPbMNR, kPyD0pPbMNR, kPyDPluspPbMNR, kPyDPlusStrangepPbMNR, kPyBeautypPbMNR,
+ kPyCharmppMNR, kPyCharmppMNRwmi, kPyD0ppMNR, kPyDPlusppMNR, kPyDPlusStrangeppMNR, 
+ kPyBeautyppMNR, kPyBeautyppMNRwmi, kPyW, kPyZ,
  kPyOldUEQ2ordered, kPyOldUEQ2ordered2, kPyOldPopcorn}
 Process_t;
 /*
@@ -79,7 +80,7 @@ class AliPythia : public TPythia6, public AliRndm
  private: 
     AliPythia();
     void ConfigHeavyFlavor();
-    
+    void AtlasTuning();
     ClassDef(AliPythia,1) //ALICE UI to PYTHIA
 };