Additional software trigger posiibilities for pions and gammas (G. Conesa)
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 19 Dec 2006 10:15:22 +0000 (10:15 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 19 Dec 2006 10:15:22 +0000 (10:15 +0000)
PYTHIA6/AliGenPythia.cxx
PYTHIA6/AliGenPythia.h

index 2bc4744..3a3fd63 100644 (file)
@@ -110,7 +110,19 @@ AliGenPythia::AliGenPythia():
     fCountMode(kCountAll),      
     fHeader(0),  
     fRL(0),      
-    fFileName(0)
+    fFileName(0),
+    fBremssInCalo(kFALSE),
+    fPi0InCalo(kFALSE) ,
+    fBremssPi0InEMCAL(kFALSE),
+    fBremssPi0InPHOS(kFALSE),
+    fBremssPi0MinPt(0), 
+    fPHOSMinPhi(220.),
+    fPHOSMaxPhi(320.),
+    fPHOSEta(0.12),
+    fEMCALMinPhi(80.),
+    fEMCALMaxPhi(190.),
+    fEMCALEta(0.7)
+
 {
 // Default Constructor
   SetNuclei(0,0);
@@ -182,7 +194,18 @@ AliGenPythia::AliGenPythia(Int_t npart)
      fCountMode(kCountAll),      
      fHeader(0),  
      fRL(0),      
-     fFileName(0)  
+     fFileName(0),
+     fBremssInCalo(kFALSE),
+     fPi0InCalo(kFALSE) ,
+     fBremssPi0InEMCAL(kFALSE),
+     fBremssPi0InPHOS(kFALSE),
+     fBremssPi0MinPt(0),
+     fPHOSMinPhi(220.),
+     fPHOSMaxPhi(320.),
+     fPHOSEta(0.12),
+     fEMCALMinPhi(80.),
+     fEMCALMaxPhi(190.),
+     fEMCALEta(0.7)
 {
 // default charm production at 5. 5 TeV
 // semimuonic decay
@@ -262,7 +285,18 @@ AliGenPythia::AliGenPythia(const AliGenPythia & Pythia)
      fCountMode(kCountAll),      
      fHeader(0),  
      fRL(0),      
-     fFileName(0)  
+     fFileName(0),
+     fBremssInCalo(kFALSE),
+     fPi0InCalo(kFALSE) ,
+     fBremssPi0InEMCAL(kFALSE),
+     fBremssPi0InPHOS(kFALSE),
+     fBremssPi0MinPt(0),
+     fPHOSMinPhi(220.),
+     fPHOSMaxPhi(320.),
+     fPHOSEta(0.12),
+     fEMCALMinPhi(80.),
+     fEMCALMaxPhi(190.),
+     fEMCALEta(0.7)   
 {
 // copy constructor
     Pythia.Copy(*this);
@@ -874,6 +908,30 @@ Int_t  AliGenPythia::GenerateMB()
        }
     }
 
+    // Select jets with bremsstrahlung or pi0 going to PHOS or EMCAL
+    if (fProcess == kPyJets && (fBremssInCalo || fPi0InCalo) ) {
+
+      Bool_t ok = kFALSE;
+
+      Int_t pdg  = 0; 
+      if (fBremssInCalo) 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() > fBremssPi0MinPt){
+         Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
+         Float_t eta =TMath::Abs(iparticle->Eta());//in calos etamin=-etamax     
+         if((fBremssPi0InEMCAL && IsInEMCAL(phi,eta)) ||
+             fBremssPi0InPHOS    && IsInPHOS(phi,eta)) 
+           ok =kTRUE;  
+       }
+      }
+      if(!ok)
+       return 0;
+    }
+    
     if (fTriggerParticle) {
        Bool_t triggered = kFALSE;
        for (i = 0; i < np; i++) {
@@ -1360,6 +1418,32 @@ void AliGenPythia::GetSubEventTime()
   return;
 }
 
+Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta)
+{
+  // Is particle in EMCAL acceptance? 
+  // Acceptance slightly larger considered.
+  // phi in degrees, etamin=-etamax
+  if(phi > fEMCALMinPhi-0.1  && phi < fEMCALMaxPhi+0.1 && 
+     eta < fEMCALEta+0.01   ) 
+    return kTRUE;
+  else 
+    return kFALSE;
+}
+
+Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta)
+{
+  // Is particle in PHOS acceptance? 
+  // Acceptance slightly larger considered.
+  // phi in degrees, etamin=-etamax
+  if(phi > fPHOSMinPhi-0.1  && phi < fPHOSMaxPhi+0.1 && 
+     eta < fPHOSEta+0.01   ) 
+    return kTRUE;
+  else 
+    return kFALSE;
+}
+
+
+
 #ifdef never
 void AliGenPythia::Streamer(TBuffer &R__b)
 {
index 5a21ddd..48eb0a2 100644 (file)
@@ -77,6 +77,13 @@ class AliGenPythia : public AliGenMC
     virtual void    SetGammaPhiRange(Float_t phimin = 0., Float_t phimax = 360.)
        {fPhiMinGamma = TMath::Pi()*phimin/180.; fPhiMaxGamma = TMath::Pi()*phimax/180.;}
 
+   // Select jets with bremsstrahlung or pi0 going to PHOS or EMCAL
+    virtual void  SetBremssInCalo(Bool_t b)           {fBremssInCalo = b;}
+    virtual void  SetPi0InCalo       (Bool_t b)           {fPi0InCalo = b;}
+    virtual void  SetBremssPi0InPHOS(Bool_t b)    {fBremssPi0InPHOS = b;}
+    virtual void  SetBremssPi0InEMCAL(Bool_t b)  {fBremssPi0InEMCAL = b;}
+    virtual void  SetBremsPi0MinPt(Float_t pt)      {fBremssPi0MinPt=pt;}
+  
     // Trigger on a particle
     virtual void    SetTriggerParticle(Int_t particle = 0, Float_t etamax = 0.9) 
        {fTriggerParticle = particle; fTriggerEta = etamax;}
@@ -101,7 +108,8 @@ class AliGenPythia : public AliGenMC
     virtual void SetQuench(Int_t flag = 0) {fQuench = flag;}
     virtual void SetHadronisation(Int_t flag = 1) {fHadronisation = flag;}
     virtual void SetReadFromFile(const Text_t *filname) {fFileName = filname;  fReadFromFile = 1;}    
-    // Get interaction rate for pileup studies
+  // Get interaction rate for pileup studies
     virtual void    SetInteractionRate(Float_t rate,Float_t timewindow = 90.e-6);
     virtual Float_t GetInteractionRate() const {return fInteractionRate;}
     // get cross section of process
@@ -131,6 +139,9 @@ class AliGenPythia : public AliGenMC
     virtual void         GetGammaPhiRange(Float_t& phimin, Float_t& phimax) const
        {phimin = fPhiMinGamma*180./TMath::Pi(); phimax = fPhiMaxGamma*180./TMath::Pi();}
     //
+    Bool_t IsInEMCAL(Float_t phi, Float_t eta);
+    Bool_t IsInPHOS(Float_t phi, Float_t eta);
+    //
     virtual void FinishRun();
     Bool_t CheckTrigger(TParticle* jet1, TParticle* jet2);
 
@@ -223,6 +234,20 @@ class AliGenPythia : public AliGenMC
     // fCountMode = kCountTrackabless --> Only particles flagged for tracking
     //                                     are counted
     //
+
+    Bool_t fBremssInCalo ; // Option ask for Bremsstrahlung in calorimeters acceptance
+    Bool_t fPi0InCalo ; // Option ask for Pi0 in calorimeters acceptance
+    Bool_t fBremssPi0InEMCAL ; //  Option ask for Bremss or Pi0 in calorimeters EMCAL acceptance
+    Bool_t fBremssPi0InPHOS ; //  Option ask for Bremss or Pi0 in calorimeters PHOS acceptance
+    Float_t fBremssPi0MinPt ; // Minimum momentum of Bremsstrahlung or Pi0 
+    //Calorimeters eta-phi acceptance 
+    Float_t fPHOSMinPhi ;
+    Float_t fPHOSMaxPhi ;
+    Float_t fPHOSEta ;
+    Float_t fEMCALMinPhi ;
+    Float_t fEMCALMaxPhi ;
+    Float_t fEMCALEta ;
+
     ClassDef(AliGenPythia,5) // AliGenerator interface to Pythia
 };
 #endif