PYTHIA  8.303
Public Member Functions | List of all members
PowhegHooks Class Reference

Use userhooks to veto PYTHIA emissions above the POWHEG scale. More...

#include <PowhegHooks.h>

Inheritance diagram for PowhegHooks:
UserHooks PhysicsBase

Public Member Functions

 PowhegHooks ()
 Constructor and destructor.
 
bool initAfterBeams ()
 Initialize settings, detailing merging strategy to use.
 
double pTpythia (const Event &e, int RadAfterBranch, int EmtAfterBranch, int RecAfterBranch, bool FSR)
 Compute the Pythia pT separation. Based on pTLund function in History.cc. More...
 
double pTpowheg (const Event &e, int i, int j, bool FSR)
 Compute the POWHEG pT separation between i and j. More...
 
double pTcalc (const Event &e, int i, int j, int k, int r, int xSRin)
 
bool canVetoMPIStep ()
 
int numberVetoMPIStep ()
 Up to how many MPI steps should be checked.
 
bool doVetoMPIStep (int nMPI, const Event &e)
 
bool canVetoISREmission ()
 ISR veto.
 
bool doVetoISREmission (int, const Event &e, int iSys)
 
bool canVetoFSREmission ()
 FSR veto.
 
bool doVetoFSREmission (int, const Event &e, int iSys, bool)
 
bool canVetoMPIEmission ()
 MPI veto.
 
bool doVetoMPIEmission (int, const Event &e)
 
int getNISRveto ()
 Functions to return information.
 
int getNFSRveto ()
 
- Public Member Functions inherited from UserHooks
virtual ~UserHooks ()
 Destructor.
 
virtual bool canModifySigma ()
 Possibility to modify cross section of process.
 
virtual double multiplySigmaBy (const SigmaProcess *sigmaProcessPtr, const PhaseSpace *phaseSpacePtr, bool inEvent)
 Multiplicative factor modifying the cross section of a hard process. More...
 
virtual bool canBiasSelection ()
 Possibility to bias selection of events, compensated by a weight.
 
virtual double biasSelectionBy (const SigmaProcess *sigmaProcessPtr, const PhaseSpace *phaseSpacePtr, bool inEvent)
 Multiplicative factor in the phase space selection of a hard process. More...
 
virtual double biasedSelectionWeight ()
 Event weight to compensate for selection weight above.
 
virtual bool canVetoProcessLevel ()
 Possibility to veto event after process-level selection.
 
virtual bool doVetoProcessLevel (Event &)
 
virtual bool canVetoResonanceDecays ()
 Possibility to veto resonance decay chain.
 
virtual bool doVetoResonanceDecays (Event &)
 
virtual bool canVetoPT ()
 
virtual double scaleVetoPT ()
 Transverse-momentum scale for veto test.
 
virtual bool doVetoPT (int, const Event &)
 
virtual bool canVetoStep ()
 
virtual int numberVetoStep ()
 Up to how many ISR + FSR steps of hardest interaction should be checked.
 
virtual bool doVetoStep (int, int, int, const Event &)
 
virtual bool canVetoPartonLevelEarly ()
 
virtual bool doVetoPartonLevelEarly (const Event &)
 
virtual bool retryPartonLevel ()
 
virtual bool canVetoPartonLevel ()
 Possibility to veto event after parton-level selection.
 
virtual bool doVetoPartonLevel (const Event &)
 
virtual bool canSetResonanceScale ()
 Possibility to set initial scale in TimeShower for resonance decay.
 
virtual double scaleResonance (int, const Event &)
 
virtual bool canReconnectResonanceSystems ()
 Possibility to reconnect colours from resonance decay systems.
 
virtual bool doReconnectResonanceSystems (int, Event &)
 
virtual bool canEnhanceEmission ()
 Enhance emission rates (sec. 4 in EPJC (2013) 73).
 
virtual double enhanceFactor (string)
 
virtual double vetoProbability (string)
 
void setEnhancedEventWeight (double wt)
 
double getEnhancedEventWeight ()
 
virtual bool canEnhanceTrial ()
 
void setEnhancedTrial (double pTIn, double wtIn)
 
double getEnhancedTrialPT ()
 
double getEnhancedTrialWeight ()
 
virtual bool canChangeFragPar ()
 Can change fragmentation parameters.
 
virtual void setStringEnds (const StringEnd *, const StringEnd *, vector< int >)
 
virtual bool doChangeFragPar (StringFlav *, StringZ *, StringPT *, int, double, vector< int >, const StringEnd *)
 
virtual bool doVetoFragmentation (Particle, const StringEnd *)
 
virtual bool doVetoFragmentation (Particle, Particle, const StringEnd *, const StringEnd *)
 
virtual bool canSetImpactParameter () const
 Can set the overall impact parameter for the MPI treatment.
 
virtual double doSetImpactParameter ()
 Set the overall impact parameter for the MPI treatment.
 
- Public Member Functions inherited from PhysicsBase
void initInfoPtr (Info &infoPtrIn)
 This function is called from above for physics objects used in a run. More...
 
virtual ~PhysicsBase ()
 Empty virtual destructor.
 
bool flag (string key) const
 Shorthand to read settings values.
 
int mode (string key) const
 
double parm (string key) const
 
string word (string key) const
 

Additional Inherited Members

- Public Types inherited from PhysicsBase
enum  Status {
  INCOMPLETE = -1, COMPLETE = 0, CONSTRUCTOR_FAILED, INIT_FAILED,
  LHEF_END, LOWENERGY_FAILED, PROCESSLEVEL_FAILED, PROCESSLEVEL_USERVETO,
  MERGING_FAILED, PARTONLEVEL_FAILED, PARTONLEVEL_USERVETO, HADRONLEVEL_FAILED,
  CHECK_FAILED, OTHER_UNPHYSICAL, HEAVYION_FAILED
}
 Enumerate the different status codes the event generation can have.
 
- Protected Member Functions inherited from UserHooks
 UserHooks ()
 Constructor.
 
virtual void onInitInfoPtr () override
 After initInfoPtr, initialize workEvent. More...
 
void omitResonanceDecays (const Event &process, bool finalOnly=false)
 omitResonanceDecays omits resonance decay chains from process record. More...
 
void subEvent (const Event &event, bool isHardest=true)
 subEvent extracts currently resolved partons in the hard process. More...
 
- Protected Member Functions inherited from PhysicsBase
 PhysicsBase ()
 Default constructor.
 
virtual void onBeginEvent ()
 This function is called in the very beginning of each Pythia::next call.
 
virtual void onEndEvent (Status)
 
virtual void onStat ()
 This function is called from the Pythia::stat() call.
 
void registerSubObject (PhysicsBase &pb)
 Register a sub object that should have its information in sync with this.
 
- Protected Attributes inherited from UserHooks
Event workEvent = {}
 Have one event object around as work area.
 
double selBias = 1.
 User-imposed selection bias.
 
double enhancedEventWeight = {}
 Bookkept quantities for boosted event weights.
 
double pTEnhanced = {}
 
double wtEnhanced = {}
 
- Protected Attributes inherited from PhysicsBase
InfoinfoPtr = {}
 
SettingssettingsPtr = {}
 Pointer to the settings database.
 
ParticleDataparticleDataPtr = {}
 Pointer to the particle data table.
 
HadronWidthshadronWidthsPtr = {}
 Pointer to the hadron widths data table.
 
RndmrndmPtr = {}
 Pointer to the random number generator.
 
CoupSMcoupSMPtr = {}
 Pointers to SM and SUSY couplings.
 
CoupSUSYcoupSUSYPtr = {}
 
BeamParticlebeamAPtr = {}
 
BeamParticlebeamBPtr = {}
 
BeamParticlebeamPomAPtr = {}
 
BeamParticlebeamPomBPtr = {}
 
BeamParticlebeamGamAPtr = {}
 
BeamParticlebeamGamBPtr = {}
 
BeamParticlebeamVMDAPtr = {}
 
BeamParticlebeamVMDBPtr = {}
 
PartonSystemspartonSystemsPtr = {}
 Pointer to information on subcollision parton locations.
 
SigmaTotalsigmaTotPtr = {}
 Pointer to the total/elastic/diffractive cross sections.
 
set< PhysicsBase * > subObjects
 
UserHooksPtr userHooksPtr
 

Detailed Description

Use userhooks to veto PYTHIA emissions above the POWHEG scale.

Member Function Documentation

bool canVetoMPIStep ( )
inlinevirtual

Extraction of pThard based on the incoming event. Assume that all the final-state particles are in a continuous block at the end of the event and the final entry is the POWHEG emission. If there is no POWHEG emission, then pThard is set to SCALUP.

Reimplemented from UserHooks.

bool doVetoFSREmission ( int  ,
const Event ,
int  ,
bool   
)
inlinevirtual

Decide whether to veto current emission or not, based on event record. Usage: doVetoFSREmission( sizeOld, event, iSys, inResonance) where sizeOld is size of event record before current emission-to-be-scrutinized was added, iSys is the system of the radiation (according to PartonSystems), and inResonance is true if the emission takes place in a resonance decay.

Must be radiation from the hard system

If we already have accepted 'vetoCount' emissions in a row, do nothing

Pythia radiator (before and after), emitted and recoiler (after)

Behaviour based on pTemtMode: 0 - pT of emitted w.r.t. radiator before 1 - min(pT of emitted w.r.t. all incoming/outgoing) 2 - min(pT of all outgoing w.r.t. all incoming/outgoing)

When pTemtMode is 0 or 1, iEmt has been selected

Which parton is emitted, based on emittedMode: 0 - Pythia definition of emitted 1 - Pythia definition of radiated after emission 2 - Random selection of emitted or radiated after emission 3 - Try both emitted and radiated after emission

For emittedMode == 3, have tried iRadAft, now try iEmt

If pTemtMode is 2, then try all final-state partons as emitted

If a Born configuration, and a photon, and QEDvetoMode=2, then don't veto photons, W's or Z's harder than pThard

Veto if pTemt > pThard

Don't veto ANY emissions afterwards

Else mark that an emission has been accepted and continue

Reimplemented from UserHooks.

bool doVetoISREmission ( int  ,
const Event ,
int   
)
inlinevirtual

Decide whether to veto current emission or not, based on event record. Usage: doVetoISREmission( sizeOld, event, iSys) where sizeOld is size of event record before current emission-to-be-scrutinized was added, and iSys is the system of the radiation (according to PartonSystems).

Must be radiation from the hard system

If we already have accepted 'vetoCount' emissions in a row, do nothing

Pythia radiator after, emitted and recoiler after.

pTemtMode == 0: pT of emitted w.r.t. radiator pTemtMode == 1: min(pT of emitted w.r.t. all incoming/outgoing) pTemtMode == 2: min(pT of all outgoing w.r.t. all incoming/outgoing)

If a Born configuration, and a photon, and QEDvetoMode=2, then don't veto photons, W, or Z harder than pThard

Veto if pTemt > pThard

Don't veto ANY emissions afterwards

Else mark that an emission has been accepted and continue

Reimplemented from UserHooks.

bool doVetoMPIEmission ( int  ,
const Event  
)
inlinevirtual

Decide whether to veto an MPI based on event record. Usage: doVetoMPIEmission( sizeOld, event) where sizeOld is size of event record before the current MPI.

Reimplemented from UserHooks.

bool doVetoMPIStep ( int  ,
const Event  
)
inlinevirtual

Decide whether to veto current event or not, based on event record. Usage: doVetoMPIStep( nMPI, event), where nMPI is number of MPI's so far.

Extra check on nMPI

Find if there is a POWHEG emission. Go backwards through the event record until there is a non-final particle. Also sum pT and find pT_1 for possible MPI vetoing

Extra check that we have the correct final state

Flag if POWHEG radiation present and index

If there is no radiation or if pThardMode is 0 then set pThard = SCALUP.

If pThardMode is 1 then the pT of the POWHEG emission is checked against all other incoming and outgoing partons, with the minimal value taken

If pThardMode is 2, then the pT of all final-state partons is checked against all other incoming and outgoing partons, with the minimal value taken

Find MPI veto pT if necessary

Initialise other variables

Do not veto the event

Reimplemented from UserHooks.

double pTcalc ( const Event e,
int  i,
int  j,
int  k,
int  r,
int  xSRin 
)
inline

Calculate pT for a splitting based on pTdefMode. If j is -1, all final-state partons are tried. If i, k, r and xSR are -1, then all incoming and outgoing partons are tried. xSR set to 0 means ISR, while xSR set to 1 means FSR

Loop over ISR and FSR if necessary

FSR flag

If all necessary arguments have been given, then directly calculate. POWHEG ISR and FSR, need i and j.

Pythia ISR, need i, j and r.

Pythia FSR, need k, j and r.

Otherwise need to try all possible combinations.

Start by finding incoming legs to the hard system after branching (radiator after branching, i for ISR). Use partonSystemsPtr to find incoming just prior to the branching and track mothers.

If we do not have j, then try all final-state partons

Final-state only

Exclude photons (and W/Z!)

POWHEG

ISR - only done once as just kinematical pT

FSR - try all outgoing partons from system before branching as i. Note that for the hard system, there is no "before branching" information.

i != jNow and no carbon copies

Exclude photons (and W/Z!)

for (iMem)

if (!FSR)

Pythia

ISR - other incoming as recoiler

FSR - try all final-state coloured partons as radiator after emission (k).

For this kNow, need to have a recoiler. Try two incoming.

Try all other outgoing.

for (rNow)

for (kNow)

if (!FSR)

if (pTdefMode)

for (j)

for (xSR)

double pTpowheg ( const Event e,
int  i,
int  j,
bool  FSR 
)
inline

Compute the POWHEG pT separation between i and j.

pT value for FSR and ISR

POWHEG d_ij (in CM frame). Note that the incoming beams have not been updated in the parton systems pointer yet (i.e. prior to any potential recoil).

POWHEG pT_ISR is just kinematic pT

Check result

double pTpythia ( const Event e,
int  RadAfterBranch,
int  EmtAfterBranch,
int  RecAfterBranch,
bool  FSR 
)
inline

Compute the Pythia pT separation. Based on pTLund function in History.cc.

Routines to calculate the pT (according to pTdefMode) in a splitting: ISR: i (radiator after) -> j (emitted after) k (radiator before) FSR: i (radiator before) -> j (emitted after) k (radiator after) For the Pythia pT definition, a recoiler (after) must be specified.

Convenient shorthands for later

Calculate virtuality of splitting

Mass term of radiator

z values for FSR and ISR

Construct 2 -> 3 variables

Construct dipoles before/after splitting

Virtuality with correct sign

Can get negative pT for massive splittings

Return pT


The documentation for this class was generated from the following file: