bug #103052: Modification of AliGenDPMJet.cxx, .h
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Nov 2013 15:23:09 +0000 (15:23 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Nov 2013 15:23:09 +0000 (15:23 +0000)
to allow for triggering on particle species
https://savannah.cern.ch/bugs/?103052
  David Dobrigkeit Chinellato

TDPMjet/AliGenDPMjet.cxx
TDPMjet/AliGenDPMjet.h

index 2b9cef5..e2cf80b 100644 (file)
@@ -63,6 +63,10 @@ AliGenDPMjet::AliGenDPMjet()
      fDecayAll(0),
      fGenImpPar(0.),
      fProcess(kDpmMb),
+     fTriggerParticle(0),
+     fTriggerEta(0.9),     
+     fTriggerMinPt(-1),  
+     fTriggerMaxPt(1000),  
      fTriggerMultiplicity(0),
      fTriggerMultiplicityEta(0),
      fTriggerMultiplicityPtMin(0),
@@ -98,6 +102,10 @@ AliGenDPMjet::AliGenDPMjet(Int_t npart)
      fDecayAll(0),
      fGenImpPar(0.),
      fProcess(kDpmMb),
+     fTriggerParticle(0),
+     fTriggerEta(0.9),     
+     fTriggerMinPt(-1),  
+     fTriggerMaxPt(1000),  
      fTriggerMultiplicity(0),
      fTriggerMultiplicityEta(0),
      fTriggerMultiplicityPtMin(0),
@@ -138,6 +146,10 @@ AliGenDPMjet::AliGenDPMjet(const AliGenDPMjet &/*Dpmjet*/)
      fDecayAll(0),
      fGenImpPar(0.),
      fProcess(kDpmMb),
+     fTriggerParticle(0),
+     fTriggerEta(0.9),     
+     fTriggerMinPt(-1),  
+     fTriggerMaxPt(1000),  
      fTriggerMultiplicity(0),
      fTriggerMultiplicityEta(0),
      fTriggerMultiplicityPtMin(0),
@@ -259,6 +271,21 @@ void AliGenDPMjet::Generate()
        Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
       }    
 
+  //Trigger on the presence of a given particle in some phase space
+    if (fTriggerParticle) {
+       Bool_t triggered = kFALSE;
+           for (Long_t i = 0; i < np; i++) {
+               TParticle *  iparticle = (TParticle *) fParticles.At(i);
+               kf = CheckPDGCode(iparticle->GetPdgCode());
+               if (kf != fTriggerParticle) continue;
+               if (iparticle->Pt() == 0.) continue;
+               if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
+               if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
+               triggered = kTRUE;
+               break;
+           }
+      if (!triggered) continue; 
+    }
 
       if(fkTuneForDiff && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
        if(!CheckDiffraction() ) continue;
index c65e1e3..5c6e726 100644 (file)
@@ -53,6 +53,11 @@ class AliGenDPMjet : public AliGenMC
 
     virtual void    SetGenImpPar(Float_t bValue) {fGenImpPar=bValue;}
     virtual Float_t GetGenImpPar() {return fGenImpPar;}
+
+    // Trigger on a single particle (not related to calorimeter trigger above)
+    virtual void    SetTriggerParticle(Int_t particle = 0, Float_t etamax = 0.9, Float_t ptmin = -1, Float_t ptmax = 1000) 
+       {fTriggerParticle = particle; fTriggerEta = etamax; fTriggerMinPt = ptmin; fTriggerMaxPt = ptmax;}
+
     virtual void    SetTriggerChargedMultiplicity(Int_t multiplicity, 
                                                  Float_t etamax = 0, Float_t ptmin = -1.) 
     {fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax; 
@@ -88,6 +93,10 @@ class AliGenDPMjet : public AliGenMC
     Int_t         fDecayAll;       // Flag to switch on long-lived particle decays
     Float_t      fGenImpPar;      // GeneratedImpactParameter
     DpmProcess_t  fProcess;        // Process type
+    Int_t   fTriggerParticle;       // Trigger on this particle ...
+    Float_t fTriggerEta;            // .. within |eta| < fTriggerEta
+    Float_t fTriggerMinPt;          // .. within pt > fTriggerMinPt
+    Float_t fTriggerMaxPt;          // .. within pt < fTriggerMaxPt
     // Multiplicity Trigger
     Int_t         fTriggerMultiplicity;      // Triggered multiplicity
     Float_t       fTriggerMultiplicityEta;   // Triggered multiplicity eta cut