ZSelection

## z Selection

The `StringZ` class handles the choice of longitudinal lightcone fraction z.

- For light quark flavours, only the Lund Symmetric Fragmentation Function (or Lund FF for short) is available in PYTHIA, with several different options for parameterization and parameter values. See the section on light quark flavours below.
- For massive quarks (and exotic coloured particles), the Bowler modification to the Lund FF is the default choice, but the Peterson/SLAC fragmentation function is also available as an alternative. See the section on massive quark flavours below.

### The fragmentation function for light quark flavours

The Lund symmetric fragmentation function [And83] is the only option for light quark (and diquark) flavours and is of the form
f(z) = (1/z) * (1-z)^a * exp(-b m_T^2 / z)
with the two main free parameters a and b to be tuned to data. They are set with the following two parameters.

`parm` StringZ:aLund (`default = 0.68`; `minimum = 0.0`; `maximum = 2.0`)
The a parameter of the Lund symmetric fragmentation function.

`parm` StringZ:bLund (`default = 0.98`; `minimum = 0.2`; `maximum = 2.0`)
The b parameter of the Lund symmetric fragmentation function.

In principle, each flavour can have a different a. Then, for going from an old flavour i to a new j one the shape is
f(z) = (1/z) * z^{a_i} * ((1-z)/z)^{a_j} * exp(-b * m_T^2 / z)
This is only implemented for s quarks and diquarks relative to normal quarks:

`parm` StringZ:aExtraSQuark (`default = 0.0`; `minimum = -1.0`; `maximum = 2.0`)
allows a different a for s quarks, with total a = aLund + aExtraSQuark. For negative values, note that the resulting a for strange quarks is not allowed to be smaller than zero.

`parm` StringZ:aExtraDiquark (`default = 0.97`; `minimum = 0.0`; `maximum = 2.0`)
allows a larger a for diquarks, with total a = aLund + aExtraDiquark.

#### An important bug fix

`flag` StringZ:useOldAExtra (`default = off`)
flag which, when on, reproduces an old incorrect behavior of updating `aExtra`. This bug was introduced in the transition from Pythia 6 to Pythia 8, and fixed in Pythia 8.315, when also this flag was introduced. Inadvertently, the type of the old and new strange quark or diquark was flipped in the (1-z)^a factor when updating `aExtra` between string breaks. This flag has now been set to `on` for all past tunes distributed with Pythia, to ensure that these tunes still are valid, since they were tuned with this old behavior. All future tunes should be made with this flag set to `off` (the default value).
Note: If you are using an old custom tune file with Pythia 8.315 or beyond, you should include `StringZ:useOldAExtra = on` to ensure that such a tune remains valid. Conversely, if you are using an old tune but want to study how it would be impacted by a correct z selection, you need to set `StringZ:useOldAExtra = off` to annul the change from the default `off` to `on` when the tune is read.

#### An alternative way to set a and b

In the context of fits to experimental data, the a and b parameters typically exhibit a very high degree of correlation. An option for choosing alternative parameterizations of the Lund FF is therefore provided, whereby the user can specify a desired mean of the fragmentation function instead of the b parameter. Optionally, the a parameter can also be derived, from a user-specified root-mean-square (RMS) width of the FF. And, finally, the aExtraDiquark and aExtraSQuark parameters can also be recast in terms of multiplicative (rather than additive) parameters. These options can be enabled via the following switch:

`mode` StringZ:deriveLundPars (`default = 0`; `minimum = 0`; `maximum = 4`)
`option` 0 : The standard parameterization of the Lund FF is used, in terms of `aLund`, `bLund`, `aExtraDiquark`, and `aExtraSQuark`.
`option` 1 : The `avgZLund` parameter below is used. The `bLund` parameter is treated as a derived quantity which is determined during program initialization.
`option` 2 : The `avgZLund` and `rmsZLund` parameters below are used. Both `aLund` and `bLund` are treated as derived quantities which are determined during program initialization.
`option` 3 : As for option `2` but also the `facALundDiquark` parameter below is used instead of `aExtraDiquark`.
`option` 4 : As for option `3` but also the `facALundSQuark` parameter below is used instead of `aExtraSQuark`.

with parameters:

`parm` StringZ:avgZLund (`default = 0.550`; `minimum = 0.375`; `maximum = 0.615`)
For `StringZ:deriveLundPars >= 1`, this parameter specifies the average of the fragmentation function for primary rho mesons, evaluated at mT^2 = mRho^2 + 2`StringPT:sigma`^2. The appropriate b-parameter value is computed automatically during initialization and the `StringZ:bLund` parameter is updated accordingly. Note that the derived value is allowed to exceed the nominal limits given for `bLund` above. This is intended to allow fits to see the functional behaviour even outside the nominal limits.

`parm` StringZ:rmsZLund (`default = 0.197`; `minimum = 0.165`; `maximum = 0.225`)
For `StringZ:deriveLundPars >= 2`, this parameter specifies the width of the fragmentation function for primary rho mesons, in terms of the root-mean-square deviation (RMSD), rmsZ = sqrt( <z^2> - <z>^2 ), of the fragmentation function for primary rho mesons. The appropriate a-parameter value is computed automatically during initialization and the `StringZ:aLund` parameter is updated accordingly. Note that the derived value is allowed to exceed the nominal limits given for `aLund` above. This is intended to allow fits to see the functional behaviour even outside the nominal limits. Note however that the initialization step will produce an error if a value for `aLund` less than zero would be required for the requested combination of `avgZLund` and `rmsZLund`. The The `min` and `max` values for the `avgZLund` and `rmsZLund` parameters have been chosen such that this should not happen when these parameters are chosen inside their nominal ranges.

`parm` StringZ:facALundDiquark (`default = 2.430`; `minimum = 1.000`; `maximum = 4.000`)
For `StringZ:deriveLundPars >= 3`, this parameter specifies the ratio of the Lund a parameter for diquarks to that for quarks. The appropriate aExtraDiquark-parameter value is computed automatically during initialization and the `StringZ:aExtraDiquark` parameter is updated accordingly. Note that the derived value is allowed to exceed the nominal limits given for `aExtraDiquark` above. This is intended to allow fits to see the functional behaviour even outside the nominal limits.

`parm` StringZ:facALundSQuark (`default = 1.0`; `minimum = 0.0`; `maximum = 2.0`)
For `StringZ:deriveLundPars = 4`, this parameter specifies the ratio of the Lund a parameter for strange quarks to that for up and down quarks. The appropriate aExtraSQuark-parameter value is computed automatically during initialization and the `StringZ:aExtraSQuark` parameter is updated accordingly. Note that the derived value is allowed to exceed the nominal limits given for `aExtraSQuark` above. This is intended to allow fits to see the functional behaviour even outside the nominal limits.

### Fragmentation functions for massive quarks and exotics

#### The Lund-Bowler FF for massive quark flavours

The Bowler modification [Bow81] introduces an extra factor
1/z^{r_Q * b * m_Q^2}
on the Lund FF for heavy quarks (and/or exotic coloured particles). To keep some flexibility, a multiplicative factor r_Q is introduced, which ought to be unity (provided that quark masses were uniquely defined) but can be set in

`parm` StringZ:rFactC (`default = 1.32`; `minimum = 0.0`; `maximum = 2.0`)
r_c, i.e. the above parameter for c quarks.

`parm` StringZ:rFactB (`default = 0.855`; `minimum = 0.0`; `maximum = 2.0`)
r_b, i.e. the above parameter for b quarks.

`parm` StringZ:rFactH (`default = 1.0`; `minimum = 0.0`; `maximum = 2.0`)
r_h, i.e. the above parameter for heavier hypothetical quarks, or in general any new coloured particle long-lived enough to hadronize.

#### Options for non-universal bLund parameters for massive quark flavours

Within the string framework, the b parameter is universal, i.e. common for all flavours. Nevertheless, for fits to experimental data, better agreement can be obtained if both a_Q and b_Q can be set freely in a general expression
f(z) = 1/z^{1 + r_Q * b_Q * m_Q^2} * (1-z)^a_Q * exp(-b_Q m_T^2 / z)
The below switches and values can be used to achieve this. They should be used with caution and constitute clear deviations from the Lund philosophy.

`flag` StringZ:useNonstandardC (`default = off`)
use the above nonstandard Lund ansatz for c quarks.

`flag` StringZ:useNonstandardB (`default = off`)
use the above nonstandard Lund ansatz for b quarks.

`flag` StringZ:useNonstandardH (`default = off`)
use the above nonstandard Lund ansatz for hypothetical heavier coloured particles.

`parm` StringZ:aNonstandardC (`default = 0.3`; `minimum = 0.0`; `maximum = 2.0`)
The a parameter in the nonstandard Lund ansatz for c quarks.

`parm` StringZ:aNonstandardB (`default = 0.3`; `minimum = 0.0`; `maximum = 2.0`)
The a parameter in the nonstandard Lund ansatz for b quarks.

`parm` StringZ:aNonstandardH (`default = 0.3`; `minimum = 0.0`; `maximum = 2.0`)
The a parameter in the nonstandard Lund ansatz for hypothetical heavier coloured particles.

`parm` StringZ:bNonstandardC (`default = 0.8`; `minimum = 0.2`; `maximum = 2.0`)
The b parameter in the nonstandard Lund ansatz for c quarks.

`parm` StringZ:bNonstandardB (`default = 0.8`; `minimum = 0.2`; `maximum = 2.0`)
The b parameter in the nonstandard Lund ansatz for b quarks.

`parm` StringZ:bNonstandardH (`default = 0.8`; `minimum = 0.2`; `maximum = 2.0`)
The b parameter in the nonstandard Lund ansatz for hypothetical heavier coloured particles.

#### The Peterson/SLAC FF for massive quark flavours

As another nonstandard alternative, it is possible to switch over to the Peterson/SLAC formula [Pet83]
f(z) = 1 / ( z * (1 - 1/z - epsilon/(1-z))^2 )
for charm, bottom and heavier (defined as above) by the three flags

`flag` StringZ:usePetersonC (`default = off`)
use Peterson for c quarks.

`flag` StringZ:usePetersonB (`default = off`)
use Peterson for b quarks.

`flag` StringZ:usePetersonH (`default = off`)
use Peterson for hypothetical heavier coloured particles.

When switched on, the corresponding epsilon values are chosen to be

`parm` StringZ:epsilonC (`default = 0.05`; `minimum = 0.01`; `maximum = 0.25`)
epsilon_c, i.e. the above parameter for c quarks.

`parm` StringZ:epsilonB (`default = 0.005`; `minimum = 0.001`; `maximum = 0.025`)
epsilon_b, i.e. the above parameter for b quarks.

`parm` StringZ:epsilonH (`default = 0.005`; `minimum = 0.0001`; `maximum = 0.25`)
epsilon_h, i.e. the above parameter for hypothetical heavier (and exotic) flavours, normalized to the case where m_h = m_b. The actually used parameter is then epsilon = epsilon_h * (m_b^2 / m_h^2). This allows a sensible scaling to a particle with an unknown higher mass without the need for a user intervention.