ThermalFragmentation

## Thermal String Fragmentation

The thermal model [Fis16] is an attempt to combine global flavour and pT concepts familiar from the heavy-ion community with the local conservation rules obtained in a string framework. To replace the standard Lund fragmentation model with the thermal one you need to set `Fragmentation:model = 1` in your main program.

One can give at least three arguments why it is not a completely crazy variation of the standard Lund fragmentation setup. Firstly, low-energy low-pT data for many hadron species are empirically well described by pT spectra of the shape exp(-6 mT), where mT is the hadron transverse mass. Secondly, Hagedorn's thermodynamical arguments suggest that indeed hadron pT spectra should be of the shape exp(-mT / T), where T is the temperature of the particle-producing source. Thirdly, one could imagine that a string is fluctuating along its length, where a contraction leads to an increased string tension, and vice versa. Bialas showed that a reasonable ansatz for such fluctuations can turn a Gaussian pT distribution into an exponential one.

The current framework keeps most of the string fragmentation code unchanged. The big differences are that the new derived classes `ThermalStringFlav` and `ThermalStringpT` take care of flavour and pT selection, with free parameters as described below. The longitudinal selection in `StringZ` remains unchanged, so the settings on the z Selection page can be used also here.

In the thermal fragmentation, as implemented here, the pT selection has to be done before the flavour one, which is opposite to the order in normal string fragmentation. (Although of less relevance there.) To cover both possibilities, the `StringFragmentation` class has a method `setFlavBeforePT` to fix the order. In either option the z selection occurs last.

### Transverse momentum selection

The quark pT is generated according to a complicated expression (involving the Bessel K_{1/4} function), such that the resulting hadron pT follows a thermal distribution
d(Prob) = exp( -pT_had/T) d^2pT_had
with temperature T, whose value is given by

`parm` StringPT:temperature (`default = 0.21`; `minimum = 0.1`; `maximum = 0.5`)
the temperature T in the fragmentation process, in units of GeV.

`parm` StringPT:tempPreFactor (`default = 1.21`; `minimum = 1.0`; `maximum = 1.5`)
Temperature prefactor for strange quarks and diquarks. Default is determined so as to give the same average pT in u/d → s and s → u/d transitions, which also is the reason this parameter has been introduced.

### Flavour selection

With the hadronic pT generated according to the thermal distribution, the choice of a new flavour in the fragmentation process, and the production of a new hadron from a set of input flavours, depends mainly on the hadron mass [Fis16]. For a given pT value the new flavour is chosen according to
exp( -mT_had/T) = exp( - sqrt( pT_had^2 + mT_had^2 )/T).
Here T is primarily given by `StringPT:temperature`, but can be further modified in the context of closely packed strings, `ClosePacking:doClosePacking = on`.

Additional factors are included from theory arguments, for instance the ratio of vector-to-pseudocalar meson production is set according to spin-counting rules. The octet-singlet mixing angles in the light-quark meson nonets are taken the same as for Lund strings. Currently popcorn production has not been implemented, i.e. a baryon and an antibaryon are nearest neighbours in the flavour fragmentation chain, and share the flavours of one diquark. In addition the following two factors are introduced to provide an improved description of the flavour composition, although not as good as obtained in the default Gaussian scenario, with its bigger selection of free parameters.

`parm` StringFlav:BtoMratio (`default = 0.357`; `minimum = 0.1`; `maximum = 10.0`)
Ratio of the relative rate of baryon to meson production, i.e. every baryon Clebsch-Gordan coefficient gets multiplied by this factor.

`parm` StringFlav:StrangeSuppression (`default = 0.5`; `minimum = 0.01`; `maximum = 1.0`)
Extra suppression factor for strange quarks. Note that in case of more than one strange quark in the hadron the factor gets squared or tripled respectively.

The following parameters are used to determine which hadrons to choose from. By default only the pseudoscalar and vector meson nonet (L=0) and baryons with u/d/s quarks are included. For an already-existing heavier flavour, say c or b, this corresponds to picking only u/d/s for the new quark(s).
Note: The computer time for selecting the flavour of new hadrons goes linearly with the number of hadrons included. Therefore we recommend sticking to the default options as heavier hadrons are produced less likely anyway.

`mode` StringFlav:nQuark (`default = 3`; `minimum = 3`; `maximum = 5`)
Selects the newly produced quark flavours that may be included in hadrons. The default corresponds to only include u/d/s quarks.

`flag` StringFlav:mesonNonetL1 (`default = off`)
Switch on to include the pseudovector, scalar, pseudovector, and tensor nonet (L=1).