From 700b9416bad998ba9384ff75350d618b99c4a7c1 Mon Sep 17 00:00:00 2001 From: jgrosseo Date: Wed, 2 Apr 2008 08:52:45 +0000 Subject: [PATCH] adding trigger on high multiplicity events on the generator level --- PYTHIA6/AliGenPythia.cxx | 38 ++++++++++++++++++++++++++++++++++++++ PYTHIA6/AliGenPythia.h | 8 +++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/PYTHIA6/AliGenPythia.cxx b/PYTHIA6/AliGenPythia.cxx index 649e123b030..681569c6995 100644 --- a/PYTHIA6/AliGenPythia.cxx +++ b/PYTHIA6/AliGenPythia.cxx @@ -108,6 +108,8 @@ AliGenPythia::AliGenPythia(): fHFoff(kFALSE), fTriggerParticle(0), fTriggerEta(0.9), + fTriggerMultiplicity(0), + fTriggerMultiplicityEta(0), fCountMode(kCountAll), fHeader(0), fRL(0), @@ -195,6 +197,8 @@ AliGenPythia::AliGenPythia(Int_t npart) fHFoff(kFALSE), fTriggerParticle(0), fTriggerEta(0.9), + fTriggerMultiplicity(0), + fTriggerMultiplicityEta(0), fCountMode(kCountAll), fHeader(0), fRL(0), @@ -876,6 +880,40 @@ Int_t AliGenPythia::GenerateMB() return 0; } + // Check for minimum multiplicity + if (fTriggerMultiplicity > 0) { + Int_t multiplicity = 0; + for (i = 0; i < np; i++) { + TParticle * iparticle = (TParticle *) fParticles->At(i); + + Int_t statusCode = iparticle->GetStatusCode(); + + // Initial state particle + if (statusCode > 20) + continue; + + // skip quarks and gluons + Int_t pdgCode = TMath::Abs(iparticle->GetPdgCode()); + if (pdgCode <= 10 || pdgCode == 21) + continue; + + if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta) + continue; + + TParticlePDG* pdgPart = iparticle->GetPDG(); + if (pdgPart && pdgPart->Charge() == 0) + continue; + + ++multiplicity; + } + + if (multiplicity < fTriggerMultiplicity) { + delete [] pParent; + return 0; + } + + Printf("Triggered on event with multiplicity of %d > %d", multiplicity, fTriggerMultiplicity); + } // Select events with a photon pt > min pt going to PHOS eta acceptance or exactly PHOS eta phi if ((fProcess == kPyJets || fProcess == kPyDirectGamma) && fPhotonInCalo && (fCheckPHOSeta || fCheckPHOS)){ diff --git a/PYTHIA6/AliGenPythia.h b/PYTHIA6/AliGenPythia.h index 460c28266c7..41e08c5f3c1 100644 --- a/PYTHIA6/AliGenPythia.h +++ b/PYTHIA6/AliGenPythia.h @@ -97,6 +97,10 @@ class AliGenPythia : public AliGenMC virtual void SetPi0InPHOS(Bool_t b) {fCheckPHOS = b; fPi0InCalo = b;} virtual void SetPhotonInEMCAL(Bool_t b) {fCheckEMCAL = b; fPhotonInCalo = b;} virtual void SetPhotonInPHOS(Bool_t b) {fCheckPHOS = b; fPhotonInCalo = b;} + + // Trigger on a minimum multiplicity + virtual void SetTriggerChargedMultiplicity(Int_t multiplicity, Float_t etamax = 0) {fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax; } + 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;} @@ -243,6 +247,8 @@ class AliGenPythia : public AliGenMC Bool_t fHFoff; // Flag for switching heafy flavor production off Int_t fTriggerParticle; // Trigger on this particle ... Float_t fTriggerEta; // .. within |eta| < fTriggerEta + Int_t fTriggerMultiplicity; // Trigger on events with a minimum charged multiplicity + Float_t fTriggerMultiplicityEta; // in a given eta range CountMode_t fCountMode; // Options for counting when the event will be finished. // fCountMode = kCountAll --> All particles that end up in the // stack are counted @@ -277,7 +283,7 @@ class AliGenPythia : public AliGenMC AliGenPythia(const AliGenPythia &Pythia); AliGenPythia & operator=(const AliGenPythia & rhs); - ClassDef(AliGenPythia,6) // AliGenerator interface to Pythia + ClassDef(AliGenPythia,7) // AliGenerator interface to Pythia }; #endif -- 2.43.0