10 #ifndef Pythia8_UserHooks_H 11 #define Pythia8_UserHooks_H 13 #include "Pythia8/Event.h" 14 #include "Pythia8/PartonSystems.h" 15 #include "Pythia8/PhysicsBase.h" 16 #include "Pythia8/PythiaStdlib.h" 17 #include "Pythia8/SigmaProcess.h" 47 const PhaseSpace* phaseSpacePtr,
bool inEvent);
54 const PhaseSpace* phaseSpacePtr,
bool inEvent);
198 double, vector<int>,
const StringEnd* ) {
return false;}
291 bool useSameAlphaSasMPIIn =
true) : pT20(0.) {isInit =
false;
292 pT0timesMPI = pT0timesMPIIn; numberAlphaS = numberAlphaSIn;
293 useSameAlphaSasMPI = useSameAlphaSasMPIIn;}
306 bool isInit, useSameAlphaSasMPI;
308 double pT0timesMPI, pT20;
334 int nCanSetResonanceScale = 0;
335 int nCanChangeFragPar = 0;
336 int nCanSetImpactParameter = 0;
337 int nCanSetEnhanceB = 0;
338 for (
int i = 0, N = hooks.size(); i < N; ++i ) {
346 if (nCanSetResonanceScale > 1) {
348 "multiple UserHooks with canSetResonanceScale() not allowed");
351 if (nCanChangeFragPar > 1) {
353 "multiple UserHooks with canChangeFragPar() not allowed");
356 if (nCanSetImpactParameter > 1) {
358 "multiple UserHooks with canSetImpactParameter() not allowed");
361 if (nCanSetEnhanceB > 1) {
363 "multiple UserHooks with canSetEnhanceB() not allowed");
371 for (
int i = 0, N = hooks.size(); i < N; ++i )
378 const PhaseSpace* phaseSpacePtr,
bool inEvent) {
380 for (
int i = 0, N = hooks.size(); i < N; ++i )
382 f *= hooks[i]->
multiplySigmaBy(sigmaProcessPtr, phaseSpacePtr,inEvent);
388 for (
int i = 0, N = hooks.size(); i < N; ++i )
395 const PhaseSpace* phaseSpacePtr,
bool inEvent) {
397 for (
int i = 0, N = hooks.size(); i < N; ++i )
407 for (
int i = 0, N = hooks.size(); i < N; ++i )
415 for (
int i = 0, N = hooks.size(); i < N; ++i )
423 for (
int i = 0, N = hooks.size(); i < N; ++i )
425 hooks[i]->doVetoProcessLevel(e) )
return true;
431 for (
int i = 0, N = hooks.size(); i < N; ++i )
439 for (
int i = 0, N = hooks.size(); i < N; ++i )
441 hooks[i]->doVetoResonanceDecays(e) )
return true;
448 for (
int i = 0, N = hooks.size(); i < N; ++i )
449 if ( hooks[i]->
canVetoPT() )
return true;
456 for (
int i = 0, N = hooks.size(); i < N; ++i )
466 for (
int i = 0, N = hooks.size(); i < N; ++i )
467 if ( hooks[i]->
canVetoPT() && hooks[i]->doVetoPT(iPos, e) )
return true;
474 for (
int i = 0, N = hooks.size(); i < N; ++i )
482 for (
int i = 0, N = hooks.size(); i < N; ++i )
491 for (
int i = 0, N = hooks.size(); i < N; ++i )
493 && hooks[i]->doVetoStep(iPos, nISR, nFSR, e) )
return true;
500 for (
int i = 0, N = hooks.size(); i < N; ++i )
508 for (
int i = 0, N = hooks.size(); i < N; ++i )
517 for (
int i = 0, N = hooks.size(); i < N; ++i )
518 if ( hooks[i]->
canVetoMPIStep() && hooks[i]->doVetoMPIStep(nMPI, e) )
526 for (
int i = 0, N = hooks.size(); i < N; ++i )
534 for (
int i = 0, N = hooks.size(); i < N; ++i )
536 && hooks[i]->doVetoPartonLevelEarly(e) )
return true;
544 for (
int i = 0, N = hooks.size(); i < N; ++i )
551 for (
int i = 0, N = hooks.size(); i < N; ++i )
559 for (
int i = 0, N = hooks.size(); i < N; ++i )
561 && hooks[i]->doVetoPartonLevel(e) )
return true;
567 for (
int i = 0, N = hooks.size(); i < N; ++i )
577 for (
int i = 0, N = hooks.size(); i < N; ++i )
585 for (
int i = 0, N = hooks.size(); i < N; ++i )
595 for (
int i = 0, N = hooks.size(); i < N; ++i )
597 && hooks[i]->doVetoISREmission(sizeOld, e, iSys) )
return true;
603 for (
int i = 0, N = hooks.size(); i < N; ++i )
615 int iSys,
bool inResonance =
false ) {
616 for (
int i = 0, N = hooks.size(); i < N; ++i )
618 && hooks[i]->doVetoFSREmission(sizeOld, e, iSys, inResonance) )
625 for (
int i = 0, N = hooks.size(); i < N; ++i )
634 for (
int i = 0, N = hooks.size(); i < N; ++i )
636 && hooks[i]->doVetoMPIEmission(sizeOld, e) )
643 for (
int i = 0, N = hooks.size(); i < N; ++i )
654 for (
int i = 0, N = hooks.size(); i < N; ++i )
656 && hooks[i]->doReconnectResonanceSystems(j, e) )
return true;
662 for (
int i = 0, N = hooks.size(); i < N; ++i )
672 for (
int i = 0, N = hooks.size(); i < N; ++i )
680 StringPT* ptIn,
int idIn,
double mIn, vector<int> parIn,
682 for (
int i = 0, N = hooks.size(); i < N; ++i )
684 && hooks[i]->doChangeFragPar(sfIn, zIn, ptIn, idIn,
685 mIn, parIn, endIn) )
return true;
690 for (
int i = 0, N = hooks.size(); i < N; ++i )
696 for (
int i = 0, N = hooks.size(); i < N; ++i )
698 && hooks[i]->doVetoFragmentation(p, nowEnd) )
return true;
704 for (
int i = 0, N = hooks.size(); i < N; ++i )
706 && hooks[i]->doVetoFragmentation(p1, p2, e1, e2) )
return true;
712 for (
int i = 0, N = hooks.size(); i < N; ++i )
714 && hooks[i]->doVetoFinalTwo(p1, p2, e1, e2) )
return true;
722 for (
int i = 0, N = hooks.size(); i < N; ++i )
729 for (
int i = 0, N = hooks.size(); i < N; ++i )
731 && hooks[i]->doVetoAfterHadronization(e) )
return true;
737 for (
int i = 0, N = hooks.size(); i < N; ++i )
744 for (
int i = 0, N = hooks.size(); i < N; ++i )
752 for (
int i = 0, N = hooks.size(); i < N; ++i )
759 for (
int i = 0, N = hooks.size(); i < N; ++i )
766 vector< shared_ptr<UserHooks> > hooks = {};
virtual bool canBiasSelection()
Possibility to bias selection of events, compensated by a weight.
Definition: UserHooks.h:50
virtual int numberVetoStep()
Up to how many ISR + FSR steps of hardest interaction should be checked.
Definition: UserHooks.h:480
virtual double scaleVetoPT()
Transverse-momentum scale for veto test.
Definition: UserHooks.h:87
virtual bool doVetoFinalTwo(Particle p1, Particle p2, const StringEnd *e1, const StringEnd *e2)
Definition: UserHooks.h:710
virtual int numberVetoStep()
Up to how many ISR + FSR steps of hardest interaction should be checked.
Definition: UserHooks.h:100
virtual bool canVetoPT()
Definition: UserHooks.h:447
virtual double scaleVetoPT()
Transverse-momentum scale for veto test.
Definition: UserHooks.h:454
virtual bool canVetoPartonLevelEarly()
Definition: UserHooks.h:120
virtual double multiplySigmaBy(const SigmaProcess *sigmaProcessPtr, const PhaseSpace *phaseSpacePtr, bool inEvent)
Multiplicative factor modifying the cross section of a hard process.
Definition: UserHooks.cc:27
Definition: StandardModel.h:23
UserHooksVector()
Definition: UserHooks.h:325
Definition: PhysicsBase.h:26
virtual bool canModifySigma()
Possibility to modify cross section of process.
Definition: UserHooks.h:296
void registerSubObject(PhysicsBase &pb)
Register a sub object that should have its information in sync with this.
Definition: PhysicsBase.cc:57
virtual double doSetImpactParameter()
Set the overall impact parameter for the MPI treatment.
Definition: UserHooks.h:743
virtual bool canSetEnhanceB() const
Can set the enhancement for the MPI treatment.
Definition: UserHooks.h:241
The Event class holds all info on the generated event.
Definition: Event.h:408
UserHooks()
Constructor.
Definition: UserHooks.h:252
virtual bool doVetoISREmission(int sizeOld, const Event &e, int iSys)
Definition: UserHooks.h:594
virtual bool retryPartonLevel()
Definition: UserHooks.h:129
virtual bool onEndHadronLevel(HadronLevel &, Event &)
Custom processing at the end of HadronLevel::next.
Definition: UserHooks.h:247
SigmaProcess is the base class for cross section calculations.
Definition: SigmaProcess.h:86
virtual bool doVetoPT(int iPos, const Event &e)
Definition: UserHooks.h:465
virtual bool doVetoPartonLevel(const Event &e)
Definition: UserHooks.h:558
virtual bool doVetoMPIStep(int nMPI, const Event &e)
Definition: UserHooks.h:516
virtual double biasedSelectionWeight()
Event weight to compensate for selection weight above.
Definition: UserHooks.h:405
virtual bool doChangeFragPar(StringFlav *, StringZ *, StringPT *, int, double, vector< int >, const StringEnd *)
Definition: UserHooks.h:197
virtual bool canVetoProcessLevel()
Possibility to veto event after process-level selection.
Definition: UserHooks.h:414
virtual void setStringEnds(const StringEnd *, const StringEnd *, vector< int >)
Definition: UserHooks.h:191
The StringPT class is used to select select transverse momenta.
Definition: FragmentationFlavZpT.h:300
virtual bool canVetoMPIEmission()
Possibility to veto an MPI.
Definition: UserHooks.h:624
virtual bool doVetoStep(int iPos, int nISR, int nFSR, const Event &e)
Definition: UserHooks.h:490
virtual bool canVetoStep()
Definition: UserHooks.h:473
virtual bool canVetoAfterHadronization()
Definition: UserHooks.h:721
virtual bool canSetResonanceScale()
Possibility to set initial scale in TimeShower for resonance decay.
Definition: UserHooks.h:139
virtual bool doVetoMPIStep(int, const Event &)
Definition: UserHooks.h:116
virtual bool doVetoFSREmission(int, const Event &, int, bool=false)
Definition: UserHooks.h:164
virtual bool doVetoPartonLevelEarly(const Event &)
Definition: UserHooks.h:124
virtual ~UserHooks()
Destructor.
Definition: UserHooks.h:37
virtual int numberVetoMPIStep()
Up to how many MPI steps should be checked.
Definition: UserHooks.h:112
virtual void setStringEnds(const StringEnd *pos, const StringEnd *neg, vector< int > iPart)
Definition: UserHooks.h:670
virtual bool doVetoFSREmission(int sizeOld, const Event &e, int iSys, bool inResonance=false)
Definition: UserHooks.h:614
virtual bool canSetEnhanceB() const
Can set the enhancement for the MPI treatment.
Definition: UserHooks.h:751
virtual bool doVetoResonanceDecays(Event &)
Definition: UserHooks.h:80
virtual bool doChangeFragPar(StringFlav *sfIn, StringZ *zIn, StringPT *ptIn, int idIn, double mIn, vector< int > parIn, const StringEnd *endIn)
Definition: UserHooks.h:679
virtual bool doVetoResonanceDecays(Event &e)
Definition: UserHooks.h:438
Definition: UserHooks.h:285
virtual double biasedSelectionWeight()
Event weight to compensate for selection weight above.
Definition: UserHooks.h:57
virtual bool doVetoPT(int, const Event &)
Definition: UserHooks.h:93
ParticleData * particleDataPtr
Pointer to the particle data table.
Definition: PhysicsBase.h:88
virtual bool doVetoAfterHadronization(const Event &e)
Do the actual veto after hadronization.
Definition: UserHooks.h:728
virtual bool initAfterBeams()
Definition: UserHooks.h:333
virtual bool canVetoISREmission()
Possibility to veto an emission in the ISR machinery.
Definition: UserHooks.h:147
The StringZ class is used to sample the fragmentation function f(z).
Definition: FragmentationFlavZpT.h:219
virtual bool canVetoResonanceDecays()
Possibility to veto resonance decay chain.
Definition: UserHooks.h:430
virtual double scaleResonance(int, const Event &)
Definition: UserHooks.h:144
virtual bool canVetoPartonLevel()
Possibility to veto event after parton-level selection.
Definition: UserHooks.h:550
Definition: HadronLevel.h:44
virtual bool canVetoMPIEmission()
Possibility to veto an MPI.
Definition: UserHooks.h:168
UserHooksPtr userHooksPtr
Definition: PhysicsBase.h:128
virtual void onInitInfoPtr() override
After initInfoPtr, initialize workEvent.
Definition: UserHooks.h:255
virtual bool doVetoFragmentation(Particle, const StringEnd *)
Definition: UserHooks.h:206
virtual bool canVetoResonanceDecays()
Possibility to veto resonance decay chain.
Definition: UserHooks.h:76
virtual bool doVetoProcessLevel(Event &e)
Definition: UserHooks.h:422
void omitResonanceDecays(const Event &process, bool finalOnly=false)
omitResonanceDecays omits resonance decay chains from process record.
Definition: UserHooks.cc:132
virtual bool canSetResonanceScale()
Possibility to set initial scale in TimeShower for resonance decay.
Definition: UserHooks.h:566
virtual bool doVetoPartonLevelEarly(const Event &e)
Definition: UserHooks.h:533
virtual bool canChangeFragPar()
Can change fragmentation parameters.
Definition: UserHooks.h:186
Definition: StringFragmentation.h:23
double selBias
User-imposed selection bias.
Definition: UserHooks.h:271
virtual bool doVetoFinalTwo(Particle, Particle, const StringEnd *, const StringEnd *)
Definition: UserHooks.h:222
virtual bool canVetoFragmentation()
Can veto hadrons in the fragmentation.
Definition: UserHooks.h:201
virtual bool canModifySigma()
Possibility to modify cross section of process.
Definition: UserHooks.h:370
virtual bool canModifySigma()
Possibility to modify cross section of process.
Definition: UserHooks.h:43
virtual bool doVetoFragmentation(Particle p, const StringEnd *nowEnd)
Do a veto on a hadron just before it is added to the final state.
Definition: UserHooks.h:695
virtual bool canReconnectResonanceSystems()
Possibility to reconnect colours from resonance decay systems.
Definition: UserHooks.h:176
virtual int numberVetoMPIStep()
Up to how many MPI steps should be checked.
Definition: UserHooks.h:506
SuppressSmallPT(double pT0timesMPIIn=1., int numberAlphaSIn=0, bool useSameAlphaSasMPIIn=true)
Constructor.
Definition: UserHooks.h:290
virtual bool doVetoFragmentation(Particle, Particle, const StringEnd *, const StringEnd *)
Definition: UserHooks.h:214
virtual bool canBiasSelection()
Possibility to bias selection of events, compensated by a weight.
Definition: UserHooks.h:387
virtual bool doReconnectResonanceSystems(int j, Event &e)
Definition: UserHooks.h:653
virtual double biasSelectionBy(const SigmaProcess *sigmaProcessPtr, const PhaseSpace *phaseSpacePtr, bool inEvent)
Multiplicative factor in the phase space selection of a hard process.
Definition: UserHooks.cc:79
virtual bool canSetLowEnergySigma(int, int) const
Definition: UserHooks.h:68
virtual ~UserHooksVector()
Destructor.
Definition: UserHooks.h:329
virtual bool canVetoProcessLevel()
Possibility to veto event after process-level selection.
Definition: UserHooks.h:60
virtual bool doVetoMPIEmission(int sizeOld, const Event &e)
Definition: UserHooks.h:633
virtual bool canSetImpactParameter() const
Can set the overall impact parameter for the MPI treatment.
Definition: UserHooks.h:235
virtual bool canVetoStep()
Definition: UserHooks.h:97
virtual bool canVetoPartonLevel()
Possibility to veto event after parton-level selection.
Definition: UserHooks.h:132
virtual bool doReconnectResonanceSystems(int, Event &)
Definition: UserHooks.h:183
virtual bool canChangeFragPar()
Can change fragmentation parameters.
Definition: UserHooks.h:661
double enhancedEventWeight
Bookkept quantities for boosted event weights.
Definition: UserHooks.h:274
virtual bool canVetoMPIStep()
Definition: UserHooks.h:499
virtual bool canVetoFSREmission()
Possibility to veto an emission in the FSR machinery.
Definition: UserHooks.h:602
Logger * loggerPtr
Pointer to logger.
Definition: PhysicsBase.h:91
virtual bool doVetoISREmission(int, const Event &, int)
Definition: UserHooks.h:153
virtual bool retryPartonLevel()
Definition: UserHooks.h:543
virtual bool canSetImpactParameter() const
Can set the overall impact parameter for the MPI treatment.
Definition: UserHooks.h:736
virtual bool canVetoPT()
Definition: UserHooks.h:84
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
The Pythia class contains the top-level routines to generate an event.
Definition: Pythia.h:72
virtual bool doVetoMPIEmission(int, const Event &)
Definition: UserHooks.h:173
virtual bool canVetoAfterHadronization()
Definition: UserHooks.h:229
Event workEvent
Have one event object around as work area.
Definition: UserHooks.h:268
UserHooksVector implements a vector of UserHooks and is itself a UserHooks.
Definition: UserHooks.h:319
The StringFlav class is used to select quark and hadron flavours.
Definition: FragmentationFlavZpT.h:76
UserHooks is base class for user access to program execution.
Definition: UserHooks.h:32
void subEvent(const Event &event, bool isHardest=true)
subEvent extracts currently resolved partons in the hard process.
Definition: UserHooks.cc:182
Definition: PhaseSpace.h:42
virtual bool canVetoFSREmission()
Possibility to veto an emission in the FSR machinery.
Definition: UserHooks.h:156
void init(string headerIn="", ParticleData *particleDataPtrIn=0, int startColTagIn=100)
Initialize header for event listing, particle data table, and colour.
Definition: Event.h:422
virtual bool initAfterBeams()
Initialisation after beams have been set by Pythia::init().
Definition: UserHooks.h:40
virtual double biasSelectionBy(const SigmaProcess *sigmaProcessPtr, const PhaseSpace *phaseSpacePtr, bool inEvent)
Multiplicative factor in the phase space selection of a hard process.
Definition: UserHooks.h:394
virtual double doSetEnhanceB()
Set the enhancement for the MPI treatment.
Definition: UserHooks.h:758
virtual double multiplySigmaBy(const SigmaProcess *sigmaProcessPtr, const PhaseSpace *phaseSpacePtr, bool inEvent)
Multiplicative factor modifying the cross section of a hard process.
Definition: UserHooks.h:377
virtual bool canReconnectResonanceSystems()
Possibility to reconnect colours from resonance decay systems.
Definition: UserHooks.h:642
virtual bool doVetoProcessLevel(Event &)
Definition: UserHooks.h:64
virtual bool canVetoMPIStep()
Definition: UserHooks.h:109
virtual bool doVetoStep(int, int, int, const Event &)
Definition: UserHooks.h:105
virtual double doSetEnhanceB()
Set the enhancement for the MPI treatment.
Definition: UserHooks.h:244
virtual bool doVetoPartonLevel(const Event &)
Definition: UserHooks.h:136
virtual bool canVetoFragmentation()
Can veto hadrons in the fragmentation.
Definition: UserHooks.h:689
virtual bool canVetoPartonLevelEarly()
Definition: UserHooks.h:525
virtual bool doVetoFragmentation(Particle p1, Particle p2, const StringEnd *e1, const StringEnd *e2)
Definition: UserHooks.h:702
virtual bool doVetoAfterHadronization(const Event &)
Do the actual veto after hadronization.
Definition: UserHooks.h:232
virtual bool canVetoISREmission()
Possibility to veto an emission in the ISR machinery.
Definition: UserHooks.h:584
virtual double scaleResonance(int iRes, const Event &e)
Definition: UserHooks.h:575
virtual double doSetLowEnergySigma(int, int, double, double, double) const
Definition: UserHooks.h:72
virtual double doSetImpactParameter()
Set the overall impact parameter for the MPI treatment.
Definition: UserHooks.h:238