]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PYTHIA6/AliGenPythia.cxx
Changes for #96521: AliGenPythia : Modification to trigger on hadrons in jet over...
[u/mrichter/AliRoot.git] / PYTHIA6 / AliGenPythia.cxx
index a6283061154c660b71ddaf4dbb925b265b3da90d..df51ddfe6f3186c961250d3c5ee0b593d5224e2a 100644 (file)
@@ -132,13 +132,14 @@ AliGenPythia::AliGenPythia():
     fRL(0),      
     fkFileName(0),
     fFragPhotonInCalo(kFALSE),
+    fHadronInCalo(kFALSE) ,
     fPi0InCalo(kFALSE) ,
     fPhotonInCalo(kFALSE),
     fEleInEMCAL(kFALSE),
     fCheckEMCAL(kFALSE),
     fCheckPHOS(kFALSE),
     fCheckPHOSeta(kFALSE),
-    fFragPhotonOrPi0MinPt(0), 
+    fTriggerParticleMinPt(0), 
     fPhotonMinPt(0), 
     fElectronMinPt(0), 
     fPHOSMinPhi(219.),
@@ -237,13 +238,14 @@ AliGenPythia::AliGenPythia(Int_t npart)
      fRL(0),      
      fkFileName(0),
      fFragPhotonInCalo(kFALSE),
+     fHadronInCalo(kFALSE) ,
      fPi0InCalo(kFALSE) ,
      fPhotonInCalo(kFALSE),
      fEleInEMCAL(kFALSE),
      fCheckEMCAL(kFALSE),
      fCheckPHOS(kFALSE),
      fCheckPHOSeta(kFALSE),
-     fFragPhotonOrPi0MinPt(0),
+     fTriggerParticleMinPt(0),
      fPhotonMinPt(0),
      fElectronMinPt(0),
      fPHOSMinPhi(219.),
@@ -940,39 +942,63 @@ Int_t  AliGenPythia::GenerateMB()
        }
     }
 
-    // Select jets with fragmentation photon or pi0 going to PHOS or EMCAL
-    if (fProcess == kPyJets && (fFragPhotonInCalo || fPi0InCalo) ) {
-
-      Bool_t ok = kFALSE;
-
-      Int_t pdg  = 0; 
-      if (fFragPhotonInCalo) pdg = 22   ; // Photon
-      else if (fPi0InCalo)   pdg = 111 ;    // Pi0
-
-      for (i=0; i< np; i++) {
-       TParticle* iparticle = (TParticle *) fParticles.At(i);
-       if(iparticle->GetStatusCode()==1 && iparticle->GetPdgCode()==pdg && 
-          iparticle->Pt() > fFragPhotonOrPi0MinPt){
-         Int_t imother = iparticle->GetFirstMother() - 1;
-         TParticle* pmother = (TParticle *) fParticles.At(imother);
-         if(pdg == 111 || 
-            (pdg == 22 && pmother->GetStatusCode() != 11)) //No photon from hadron decay
-           {
-             Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
-             Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax        
-             if((fCheckEMCAL && IsInEMCAL(phi,eta)) ||
-                (fCheckPHOS    && IsInPHOS(phi,eta)) )
-               ok =kTRUE;
-           }
-       }
+    // Select jets with fragmentation photon or pi0 or hadrons going to PHOS or EMCAL
+  if ( fProcess == kPyJets && 
+      (fFragPhotonInCalo || fPi0InCalo || fHadronInCalo) && 
+      (fCheckPHOS || fCheckEMCAL) ) {
+    
+    Bool_t ok = kFALSE;
+        
+    for (i=0; i< np; i++) {
+      
+      TParticle* iparticle = (TParticle *) fParticles.At(i);
+      
+      Int_t pdg    = iparticle->GetPdgCode();
+      Int_t status = iparticle->GetStatusCode();
+      ok = kFALSE;
+      
+      if (fFragPhotonInCalo && pdg == 22 && status == 1)
+      {
+        Int_t imother = iparticle->GetFirstMother() - 1;
+        TParticle* pmother = (TParticle *) fParticles.At(imother);
+        
+        if(pmother->GetStatusCode() != 11) ok = kTRUE ;  // No photon from hadron decay
       }
-      if(!ok) {
-         delete[] pParent;
-         return 0;
+      else if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
+      {
+        //printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
+        ok = kTRUE;
+      }
+      else if (fHadronInCalo && status == 1)
+      {
+        if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0 
+                                                            // (in case neutral mesons were declared stable)
+          ok = kTRUE;
       }
+      
+      if(ok && iparticle->Pt() > fTriggerParticleMinPt)
+      {
+          Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+          Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax   
+        
+          if((fCheckEMCAL && IsInEMCAL(phi,eta)) ||
+             (fCheckPHOS  && IsInPHOS (phi,eta)) )
+          {
+            ok =kTRUE;
+            AliDebug(1,Form("Selected trigger pdg %d, status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
+            break;
+          }
+      }
+      else ok = kFALSE;
     }
+    
+    if(!ok) {
+      delete[] pParent;
+      return 0;
+    }
+  }
 
-    // Select beauty jets with electron in EMCAL
+  // Select beauty jets with electron in EMCAL
     if (fProcess == kPyBeautyJets && fEleInEMCAL) {
 
       Bool_t ok = kFALSE;