This is the declaration of the ClusterFissioner class.
This class does the job of chopping up either heavy clusters or beam
clusters in two lighter ones. The procedure is repeated recursively until
all of the cluster children have masses below some threshold values.
For the beam remnant clusters, at the moment what is done is the following.
In the case that the soft underlying event is switched on, the
beam remnant clusters are tagged as not available,
therefore they will not be treated at all during the hadronization.
In the case instead that the soft underlying event is switched off,
then the beam remnant clusters are treated exactly as "normal" clusters,
with the only exception of the mass spectrum used to generate the
cluster children masses. For non-beam clusters, the masses of the cluster
children are drawn from a power-like mass distribution; for beam clusters,
according to the value of the flag _IOpRem, either both
children masses are drawn from a fast-decreasing exponential mass
distribution (case _IOpRem == 0, or, indendently by
_IOpRem, in the special case that the beam cluster contains two
beam remnants), or one mass from the exponential distribution (corresponding
of the cluster child with the beam remnant) and the other with the usual
power-like distribution (case _IOpRem == 1, which is the
default one, as in Herwig 6.3).
The reason behind the use of a fast-decreasing exponential distribution
is that to avoid a large transverse energy from the many sequential
fissions that would otherwise occur due to the typical large cluster
mass of beam clusters. Using instead an exponential distribution
the masses of the two cluster children will be very small (order of
GeV).
The rationale behind the implementation of the splitting of clusters has been to preserve *all* of the information about such splitting process. More explicitly, at the end of the full splitting, the container of cluster (pointers) _collecCluPtr (which is passed to this class ClusterFissioner by the main one ClusterHadronizationHandler) does not have only the final cluster products (the onces not heavy and therefore that not need split, and that are ready to be decayed in hadrons) but all of the clusters, including the initial ones, formed during the cluster finding stage, and all of the intermediate heavy clusters that have been split. This approach has the twofold advantage to provide all of the information that could be needed (expecially in future developments), without any information loss, and furthermore it allows a better debugging. There is, however, a small price to pay: in the following stage, that is the decay of clusters into hadrons, we have to iterate over all of the clusters, and not directly to the final ones, although we strictly need to work only on the latter. We think this is a minimal overhead.
class Cluster; // forward declaration
CLASS
ClusterFissioner: