PYTHIA
8.312
|
Use userhooks to veto PYTHIA emissions above the POWHEG scale. More...
#include <PowhegHooks.h>
Public Member Functions | |
PowhegHooks () | |
Constructors and destructor. | |
PowhegHooks (Pythia *, Settings *, Logger *) | |
bool | initAfterBeams () |
Initialize settings, detailing merging strategy to use. | |
double | pT (const Event &e, int RadAfterBranch, int EmtAfterBranch, int RecAfterBranch, bool FSR) |
Top-level wrapper for shower pTs. More... | |
double | pTpythia (const Event &e, int RadAfterBranch, int EmtAfterBranch, int RecAfterBranch, bool FSR) |
double | pTvincia (const Event &event, int i1, int i3, int i2) |
double | pTdire (const Event &event, int iRad, int iEmt, int iRec) |
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 | canSetLowEnergySigma (int, int) const |
virtual double | doSetLowEnergySigma (int, int, double, double, double) const |
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 | 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 | canVetoAfterHadronization () |
virtual bool | doVetoAfterHadronization (const Event &) |
Do the actual veto after hadronization. | |
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. | |
virtual bool | onEndHadronLevel (HadronLevel &, Event &) |
Custom processing at the end of HadronLevel::next. | |
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 |
vector< bool > | fvec (string key) const |
vector< int > | mvec (string key) const |
vector< double > | pvec (string key) const |
vector< string > | wvec (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, HADRONLEVEL_USERVETO } |
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 | |
Info * | infoPtr = {} |
Settings * | settingsPtr = {} |
Pointer to the settings database. | |
ParticleData * | particleDataPtr = {} |
Pointer to the particle data table. | |
Logger * | loggerPtr = {} |
Pointer to logger. | |
HadronWidths * | hadronWidthsPtr = {} |
Pointer to the hadron widths data table. | |
Rndm * | rndmPtr = {} |
Pointer to the random number generator. | |
CoupSM * | coupSMPtr = {} |
Pointers to SM and SUSY couplings. | |
CoupSUSY * | coupSUSYPtr = {} |
BeamSetup * | beamSetupPtr = {} |
BeamParticle * | beamAPtr = {} |
BeamParticle * | beamBPtr = {} |
BeamParticle * | beamPomAPtr = {} |
BeamParticle * | beamPomBPtr = {} |
BeamParticle * | beamGamAPtr = {} |
BeamParticle * | beamGamBPtr = {} |
BeamParticle * | beamVMDAPtr = {} |
BeamParticle * | beamVMDBPtr = {} |
PartonSystems * | partonSystemsPtr = {} |
Pointer to information on subcollision parton locations. | |
SigmaTotal * | sigmaTotPtr = {} |
Pointers to the total/elastic/diffractive cross sections. | |
SigmaCombined * | sigmaCmbPtr = {} |
set< PhysicsBase * > | subObjects |
UserHooksPtr | userHooksPtr |
Use userhooks to veto PYTHIA emissions above the POWHEG scale.
|
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.
|
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.
|
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.
Dire.
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.
|
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.
|
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
When nFinal is set, be strict about comparing the number of final-state particles with expectation from Born and single-real emission states. (Note: the default from 8.309 onwards is nFinal = -1).
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 nFinal == -1, then go through the event and extract only the information on the emission and its pT, but do not enforce strict comparisons of final state multiplicity.
Flag whether POWHEG radiation is present, and save index of emission.
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.
|
inline |
Top-level wrapper for shower pTs.
Routines to calculate the pT (according to pTdefMode) in a branching: ISR: i (radiator after) -> j (emitted after) k (radiator before) FSR: i (radiator before) -> j (emitted after) k (radiator after) For the Pythia pT definitions, a recoiler (after) must be specified.
VINCIA pT definition.
DIRE pT definition.
|
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)
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)
|
inline |
Compute the Dire pT as in DireTimes::pT2_FF, DireTimes::pT2_FI, DireSpace::pT2_IF, DireSpace::pT2_II.
Shorthands.
Calculate pT2 depending on dipole configuration.
FF – copied from DireTimes::pT2_FF.
FI.
IF.
II.
Sanity check.
Return pT.
|
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.
|
inline |
Compute the Pythia pT separation. Based on pTLund function in History.cc and identical to pTevol.
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
|
inline |
Compute the Vincia pT as in Eq. (2.63)-(2.66) in arXiv:2003.00702. Branching is assumed to be {13} {23} -> 1 3 2.
Shorthands.
Fetch mothers of 1 and 2.
Invariants defined as in Eq. (5) in arXiv:2008.09468.
Normalisation as in Eq. (6) in arXiv:2008.09468.
FF.
RF or IF.
FR or FI.
II.
Calculate pT2 as in Eq. (5) in arXiv:2008.09468.
Sanity check.
Return pT.