Fixes for bug #50317: Correct AliGenPythia for B-jet studies (Jennifer)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 May 2009 07:02:03 +0000 (07:02 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 May 2009 07:02:03 +0000 (07:02 +0000)
PYTHIA6/AliGenPythia.cxx
PYTHIA6/AliGenPythia.h
PYTHIA6/AliPythia.cxx
PYTHIA6/PythiaProcesses.h

index 43f03ec..d7c462d 100644 (file)
@@ -121,11 +121,13 @@ AliGenPythia::AliGenPythia():
     fFragPhotonInCalo(kFALSE),
     fPi0InCalo(kFALSE) ,
     fPhotonInCalo(kFALSE),
+    fEleInEMCAL(kFALSE),
     fCheckEMCAL(kFALSE),
     fCheckPHOS(kFALSE),
     fCheckPHOSeta(kFALSE),
     fFragPhotonOrPi0MinPt(0), 
     fPhotonMinPt(0), 
+    fElectronMinPt(0), 
     fPHOSMinPhi(219.),
     fPHOSMaxPhi(321.),
     fPHOSEta(0.13),
@@ -213,11 +215,13 @@ AliGenPythia::AliGenPythia(Int_t npart)
      fFragPhotonInCalo(kFALSE),
      fPi0InCalo(kFALSE) ,
      fPhotonInCalo(kFALSE),
+     fEleInEMCAL(kFALSE),
      fCheckEMCAL(kFALSE),
      fCheckPHOS(kFALSE),
      fCheckPHOSeta(kFALSE),
      fFragPhotonOrPi0MinPt(0),
      fPhotonMinPt(0),
+     fElectronMinPt(0),
      fPHOSMinPhi(219.),
      fPHOSMaxPhi(321.),
      fPHOSEta(0.13),
@@ -424,6 +428,7 @@ void AliGenPythia::Init()
        fFlavorSelect    =   4; 
        break;
     case kPyBeauty:
+    case kPyBeautyJets:
     case kPyBeautyPbPbMNR:
     case kPyBeautypPbMNR:
     case kPyBeautyppMNR:
@@ -656,7 +661,8 @@ void AliGenPythia::Generate()
            fProcess != kPyW && 
            fProcess != kPyZ &&
            fProcess != kPyCharmppMNRwmi && 
-           fProcess != kPyBeautyppMNRwmi) {
+           fProcess != kPyBeautyppMNRwmi &&
+           fProcess != kPyBeautyJets) {
            
            for (i = 0; i < np; i++) {
                TParticle* iparticle = (TParticle *) fParticles.At(i);
@@ -885,7 +891,10 @@ Int_t  AliGenPythia::GenerateMB()
 
     Int_t* pParent = new Int_t[np];
     for (i=0; i< np; i++) pParent[i] = -1;
-    if (fProcess == kPyJets || fProcess == kPyDirectGamma) {
+    //
+    //TO BE CHECKED:  Should we require this for Beauty Jets?
+    //
+    if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets) {
        TParticle* jet1 = (TParticle *) fParticles.At(6);
        TParticle* jet2 = (TParticle *) fParticles.At(7);
        if (!CheckTrigger(jet1, jet2)) {
@@ -923,6 +932,30 @@ Int_t  AliGenPythia::GenerateMB()
       if(!ok)
        return 0;
     }
+
+    // Select beauty jets with electron in EMCAL
+    if (fProcess == kPyBeautyJets && fEleInEMCAL) {
+
+      Bool_t ok = kFALSE;
+
+      Int_t pdg  = 11; //electron
+
+      Float_t pt, eta, phi;
+      for (i=0; i< np; i++) {
+       TParticle* iparticle = (TParticle *) fParticles.At(i);
+       if(iparticle->GetStatusCode()==1 && TMath::Abs(iparticle->GetPdgCode())==pdg && 
+          iparticle->Pt() > fElectronMinPt){
+         pt = iparticle->Pt();
+         phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+         eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax    
+         if(IsInEMCAL(phi,eta))
+           ok =kTRUE;
+       }
+      }
+      if(!ok)
+       return 0;
+      AliDebug(5,Form("Found an electron jet (pt,eta,phi) = (%f,%f,%f)",pt,eta,phi));
+    }
     
     // Check for minimum multiplicity
     if (fTriggerMultiplicity > 0) {
@@ -1013,7 +1046,10 @@ Int_t  AliGenPythia::GenerateMB()
 
     // 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) {
+    //
+    // TO BE CHECKED:  Should we require this for beauty jets?
+    //
+    if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
       TParticle *partCheck;
       TParticle *mother;
       Bool_t  theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
@@ -1077,7 +1113,10 @@ Int_t  AliGenPythia::GenerateMB()
        Int_t km = iparticle->GetFirstMother();
        if ((ks == 1  && kf!=0 && KinematicSelection(iparticle, 0)) ||
            (ks != 1) ||
-           (fProcess == kPyJets && ks == 21 && km == 0 && i>1)) {
+           //
+           //TO BE CHECKED:  Should we require this for beauty jets?
+           //
+           ((fProcess == kPyJets || fProcess == kPyBeautyJets) && ks == 21 && km == 0 && i>1)) {
            nc++;
            if (ks == 1) trackIt = 1;
            Int_t ipa = iparticle->GetFirstMother()-1;
@@ -1186,7 +1225,8 @@ void AliGenPythia::MakeHeader()
 //
 // Jets that have triggered
 
-    if (fProcess == kPyJets || fProcess == kPyDirectGamma)
+    //Need to store jets for b-jet studies too!
+    if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets)
     {
        Int_t ntrig, njet;
        Float_t jets[4][10];
@@ -1272,7 +1312,10 @@ Bool_t AliGenPythia::CheckTrigger(TParticle* jet1, TParticle* jet2)
     pdg[1] = jet2->GetPdgCode();    
     Bool_t   triggered = kFALSE;
 
-    if (fProcess == kPyJets) {
+    //
+    //TO BE CHECKED: If we call this method for kPyBeautyJets, we need it here
+    //
+    if (fProcess == kPyJets || fProcess == kPyBeautyJets) {
        Int_t njets = 0;
        Int_t ntrig = 0;
        Float_t jets[4][10];
index 0dfa1e5..6096f56 100644 (file)
@@ -98,6 +98,7 @@ class AliGenPythia : public AliGenMC
     virtual void  SetPi0InEMCAL(Bool_t b)        {fCheckEMCAL   = b; fPi0InCalo        = b;}
     virtual void  SetPi0InPHOS(Bool_t b)         {fCheckPHOS    = b; fPi0InCalo        = b;}
     virtual void  SetPhotonInEMCAL(Bool_t b)     {fCheckEMCAL   = b; fPhotonInCalo     = b;}
+    virtual void  SetElectronInEMCAL(Bool_t b)   {fEleInEMCAL   = b;}
     virtual void  SetPhotonInPHOS(Bool_t b)      {fCheckPHOS    = b; fPhotonInCalo     = b;}
 
     // Trigger on a minimum multiplicity
@@ -106,6 +107,7 @@ class AliGenPythia : public AliGenMC
     virtual void  SetPhotonInPHOSeta(Bool_t b)   {fCheckPHOSeta = b; fPhotonInCalo     = b;}
     virtual void  SetFragPhotonOrPi0MinPt(Float_t pt)      {fFragPhotonOrPi0MinPt = pt;}
     virtual void  SetPhotonMinPt(Float_t pt)     {fPhotonMinPt = pt;}
+    virtual void  SetElectronMinPt(Float_t pt)     {fElectronMinPt = pt;}
     // Trigger and rotate event 
     void RotatePhi(Int_t iphcand, Bool_t& okdd);
     // Trigger on a single particle
@@ -275,11 +277,13 @@ class AliGenPythia : public AliGenMC
     Bool_t fFragPhotonInCalo; // Option to ask for Fragmentation Photon in calorimeters acceptance
     Bool_t fPi0InCalo;        // Option to ask for Pi0 in calorimeters acceptance
     Bool_t fPhotonInCalo;     // Option to ask for Decay Photon in calorimeter acceptance
+    Bool_t fEleInEMCAL;       // Option to ask for Electron in EMCAL acceptance
     Bool_t fCheckEMCAL;       // Option to ask for FragPhoton or Pi0 in calorimeters EMCAL acceptance
     Bool_t fCheckPHOS;        // Option to ask for FragPhoton or Pi0 in calorimeters PHOS acceptance
     Bool_t fCheckPHOSeta;     // Option to ask for PHOS eta acceptance
     Float_t fFragPhotonOrPi0MinPt; // Minimum momentum of Fragmentation Photon or Pi0
     Float_t fPhotonMinPt;          // Minimum momentum of Photon 
+    Float_t fElectronMinPt;        // Minimum momentum of Electron 
     //Calorimeters eta-phi acceptance 
     Float_t fPHOSMinPhi;           // Minimum phi PHOS
     Float_t fPHOSMaxPhi;           // Maximum phi PHOS
@@ -292,7 +296,7 @@ class AliGenPythia : public AliGenMC
     AliGenPythia(const AliGenPythia &Pythia);
     AliGenPythia & operator=(const AliGenPythia & rhs);
 
-    ClassDef(AliGenPythia,8) // AliGenerator interface to Pythia
+    ClassDef(AliGenPythia,9) // AliGenerator interface to Pythia
 };
 #endif
 
index cc0b47e..d06a45c 100644 (file)
@@ -492,6 +492,7 @@ void AliPythia::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfun
        // Set b-quark mass
        SetPMAS(5,1,4.75);
       break;
+     case kPyBeautyJets:
      case kPyBeautyppMNRwmi:
       // Tuning of Pythia parameters aimed to get a resonable agreement
       // between with the NLO calculation by Mangano, Nason, Ridolfi for the
index 79519ff..ef3e816 100644 (file)
@@ -8,7 +8,7 @@ typedef enum
     kPyCharmPbPbMNR, kPyD0PbPbMNR, kPyDPlusPbPbMNR, kPyDPlusStrangePbPbMNR, kPyBeautyPbPbMNR,
     kPyCharmpPbMNR, kPyD0pPbMNR, kPyDPluspPbMNR, kPyDPlusStrangepPbMNR, kPyBeautypPbMNR,
     kPyCharmppMNR, kPyCharmppMNRwmi, kPyD0ppMNR, kPyDPlusppMNR, kPyDPlusStrangeppMNR, 
-    kPyBeautyppMNR, kPyBeautyppMNRwmi, kPyW, kPyZ, kPyMbMSEL1,
+    kPyBeautyppMNR, kPyBeautyppMNRwmi, kPyBeautyJets, kPyW, kPyZ, kPyMbMSEL1,
     kPyOldUEQ2ordered, kPyOldUEQ2ordered2, kPyOldPopcorn,
     kPyLhwgMb, kPyMbDefault
 }