PYTHIA
8.312
|
#include <StringFragmentation.h>
Public Member Functions | |
StringFragmentation () | |
Constructor. | |
void | init (StringFlav *flavSelPtrIn, StringPT *pTSelPtrIn, StringZ *zSelPtrIn, FragModPtr fragModPtrIn=nullptr) |
Initialize and save pointers. More... | |
bool | fragment (int iSub, const ColConfig &colConfig, Event &event) |
Do the fragmentation: driver routine. More... | |
Vec4 | junctionRestFrame (const Vec4 &p0, const Vec4 &p1, const Vec4 &p2, const bool angleCheck=true) const |
Find the boost matrix to the rest frame of a junction. More... | |
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 |
Public Attributes | |
StringFlav | flavSelNow |
Local copy of flavSelPtr for modified flavour selection. | |
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 PhysicsBase | |
PhysicsBase () | |
Default constructor. | |
virtual void | onInitInfoPtr () |
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 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 |
The StringFragmentation class contains the top-level routines to fragment a colour singlet partonic system.
Do the fragmentation: driver routine.
Perform the fragmentation.
Find partons and their total four-momentum.
Set default values.
Rapidity pairs [yCol, yAcol] of string piece ends.
Reset the local event record and vertex arrays.
Keep track of the string breaks of this string.
For closed gluon string: pick first breakup region.
For junction topology: fragment off two of the string legs. Then iParton overwritten to remaining leg + leftover diquark.
Set up kinematics of string evolution ( = motion).
Fallback loop, when joining in the middle fails. Bailout if stuck.
After several failed tries join some (extra) nearby partons.
After several failed tries gradually allow larger stop mass.
Set up flavours of two string ends, and reset other info.
Begin fragmentation loop, interleaved from the two ends.
Variables used to help identifying baryons from junction splittings.
Keep track of the momentum of hadrons taken from left and right.
Inform the UserHooks about the string to he hadronised.
Take a step either from the positive or the negative end.
Check how many nearby string pieces there are for the next hadron.
The FlavourRope treatment changes the fragmentation parameters.
Possibility for a user to change the fragmentation parameters.
Check whether to use special hard diquark handling in beam remnant.
Optionally allow for strangeness enhancement around the junction.
Construct trial hadron and check that energy remains.
Break out of fragmentation loop if no pearl or pearl is processed.
Unprocessed pearls require no diquarks next to the pearl. Redo previous step if was a diquark or want strangeness enhancement.
Redo current step if is a diquark or want strangeness enhancement.
Make the pearl baryon and use in finalTwo joining.
Cannot process a system with diquark endpoint close to pearl. Try combining the pearl with the other end if possible.
Check if other string end is also a diquark.
Swap ends to the non-diquark end if possible.
Optionally allow a hard baryon fragmentation in beam remnant.
Construct kinematics of the new hadron.
Check if stepping over the pearl. If not, make the hadron.
If steppng over the pearl, make the junction baryon.
Unprocessed pearls require no diquarks next to the pearl. Redo previous step if was a diquark or want strangeness enhancement.
Redo current step if is a diquark or want strangeness enhancement.
Check again if stepped over pearl. If not, make the hadron.
Construct hadron including pearl quark. Once junction baryon is made, go to regular q-qbar fragmentation.
Cannot process a system with diquark endpoint close to pearl.
Construct pearl baryon.
Assign status code 87 for regular junction baryons. Temporarily use 871 and 872 to distinguish pos and neg end.
Possibility for a user to veto the hadron production.
Provide full particle info for veto decision.
Bookkeeping of momentum taken away.
Append new vertex.
Append produced hadron and string break.
Update string end and remaining momentum.
End of fragmentation loop.
Check how many nearby string pieces there are for the last hadron.
When done, join in the middle. If this works, then really done.
Else remove produced particles (except from first two junction legs) and start all over.
Junctions & extra joins: remove fictitious end/pearl, restore original partons.
Store the hadrons in the normal event record, ordered from one end.
Store the string breaks in the event record.
Store hadron production space-time vertices.
Done.
void init | ( | StringFlav * | flavSelPtrIn, |
StringPT * | pTSelPtrIn, | ||
StringZ * | zSelPtrIn, | ||
FragModPtr | fragModPtrIn = nullptr |
||
) |
Initialize and save pointers.
Save pointers.
Local copy of flavSel for possible dynamical modifications.
Initialize the StringFragmentation class.
Calculation and definition of hadron space-time production vertices.
Tracing of colours for primary hadrons.
Joining of nearby partons along the string.
Initialize the b parameter of the z spectrum, used when joining jets.
Charm and bottom quark masses used for space-time offset.
MPI pT0, used for calculating effective number of strings.
Initialize the hadrons instance of an event record.
Send on pointers to the two StringEnd instances.
Optionally allow for closepacking and reduced diquark formation.
Optionally hard baryon in beam remnant handling.
Optionally allow pearl fragmentation.
Optionally allow strangeness enhancement around the junction.
Vec4 junctionRestFrame | ( | const Vec4 & | p0, |
const Vec4 & | p1, | ||
const Vec4 & | p2, | ||
const bool | angleCheck = true |
||
) | const |
Find the boost matrix to the rest frame of a junction.
Find the boost matrix to the mercedes rest frame of a junction.
Calculate masses and other invariants.
Check angle between partons in rest frame of each parton. If more than 120 degrees, use the rest frame as the initial JRF. Note: only call for CR methods, not for iterative JRF finding procedure.
Only consider partons with mass.
Store momentum of legs j and k in rest frame of parton i.
Check if the angle between j and k is greater than 120 degrees. If so, use the rest frame of i as the initial time JRF.
Requirement (eiMax)_j = pi*pj/mj < (eiMax)_k = pi*pk/mk, used below, here rewritten as pi*pj * mk < pi*pk * mj and squared.
Initially pick i to be the most massive parton. but allow other tries.
Pick j to give minimal eiMax, and k the third vector.
Alternative names according to i, j, k conventions.
Trivial to find new parton energies if all three partons are massless.
Else find three-momentum range for parton i and values at extremes.
Minimum when i is at rest.
Maximum estimated when j + k is at rest, alternatively j at rest.
If unexpected values at upper endpoint then pick another parton.
Start binary + linear search to find solution inside range.
Derive momentum of other two partons and distance to root.
Replace lower or upper bound by new value.
Pick next i momentum to explore, hopefully closer to root.
If arrived here then either succeeded or exhausted possibilities.
Now we know the energies in the junction rest frame.
Boost (copy of) partons to their rest frame.
Construct difference vectors and the boost to junction rest frame.
Add two boosts to give final result.