Changes for #96521: AliGenPythia : Modification to trigger on hadrons in jet over...
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 7 Aug 2012 15:47:23 +0000 (15:47 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 7 Aug 2012 15:47:23 +0000 (15:47 +0000)
PYTHIA6/AliGenPythia.cxx
PYTHIA6/AliGenPythia.h

index a628306..df51ddf 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;
index 8ccb53f..d002720 100644 (file)
@@ -90,12 +90,15 @@ class AliGenPythia : public AliGenMC
        {fPhiMinGamma = TMath::Pi()*phimin/180.; fPhiMaxGamma = TMath::Pi()*phimax/180.;}
    // Select jets with fragmentation photon or pi0 going to PHOS or EMCAL
     virtual void  SetFragPhotonInCalo(Bool_t b)  {fFragPhotonInCalo = b;}
+    virtual void  SetHadronInCalo    (Bool_t b)  {fHadronInCalo = b;}
     virtual void  SetPi0InCalo       (Bool_t b)  {fPi0InCalo    = b;}
     virtual void  SetPhotonInCalo(Bool_t b)      {fPhotonInCalo = b;}
     virtual void  SetCheckPHOS (Bool_t b)        {fCheckPHOS    = b;}
     virtual void  SetCheckEMCAL(Bool_t b)        {fCheckEMCAL   = b;}
     virtual void  SetFragPhotonInEMCAL(Bool_t b) {fCheckEMCAL   = b; fFragPhotonInCalo = b;}
     virtual void  SetFragPhotonInPHOS(Bool_t b)  {fCheckPHOS    = b; fFragPhotonInCalo = b;}
+    virtual void  SetHadronInEMCAL(Bool_t b)     {fCheckEMCAL   = b; fHadronInCalo     = b;}
+    virtual void  SetHadronInPHOS(Bool_t b)      {fCheckPHOS    = b; fHadronInCalo     = b;}
     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;}
@@ -107,10 +110,15 @@ class AliGenPythia : public AliGenMC
     {fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax; 
       fTriggerMultiplicityPtMin = ptmin;}
        
-    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;}
+    // Calorimeters acceptance
+    // Set Phi in degrees, and Eta coverage, should not be negative
+    virtual void  SetEMCALAcceptance(Float_t phimin, Float_t phimax, Float_t deta) {fEMCALMinPhi = phimin ; fEMCALMaxPhi = phimax ; fEMCALEta = deta ; }
+    virtual void  SetPHOSAcceptance (Float_t phimin, Float_t phimax, Float_t deta) {fPHOSMinPhi  = phimin ; fPHOSMaxPhi  = phimax ; fPHOSEta  = deta ; }
+
+    virtual void  SetPhotonInPHOSeta(Bool_t b)        {fCheckPHOSeta = b; fPhotonInCalo     = b;}
+    virtual void  SetTriggerParticleMinPt(Float_t pt) {fTriggerParticleMinPt = 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
@@ -297,22 +305,23 @@ class AliGenPythia : public AliGenMC
 
 
     Bool_t fFragPhotonInCalo; // Option to ask for Fragmentation Photon in calorimeters acceptance
+    Bool_t fHadronInCalo;     // Option to ask for hadron (not pi0) 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 fTriggerParticleMinPt; // Minimum momentum of Fragmentation Photon or Pi0 or other hadron
     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
-    Float_t fPHOSEta;              // Minimum eta PHOS
-    Float_t fEMCALMinPhi;          // Minimum phi EMCAL
-    Float_t fEMCALMaxPhi;          // Maximum phi EMCAL
-    Float_t fEMCALEta;             // Maximum eta EMCAL
+    Float_t fPHOSMinPhi;           // Minimum phi PHOS, degrees
+    Float_t fPHOSMaxPhi;           // Maximum phi PHOS, degrees
+    Float_t fPHOSEta;              // Minimum eta PHOS, coverage delta eta
+    Float_t fEMCALMinPhi;          // Minimum phi EMCAL, degrees
+    Float_t fEMCALMaxPhi;          // Maximum phi EMCAL, degrees
+    Float_t fEMCALEta;             // Maximum eta EMCAL, coverage delta eta
 
     Bool_t fkTuneForDiff;    // Pythia tune 
     Int_t  fProcDiff;
@@ -325,7 +334,7 @@ class AliGenPythia : public AliGenMC
     Bool_t GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax, 
                                               Double_t &wSD, Double_t &wDD, Double_t &wND);
 
-    ClassDef(AliGenPythia, 12) // AliGenerator interface to Pythia
+    ClassDef(AliGenPythia, 13) // AliGenerator interface to Pythia
 };
 #endif