herwig is hosted by Hepforge, IPPP Durham
Herwig  7.1.4

This is the class definition for the UA5Handler. More...

#include <UA5Handler.h>

Inheritance diagram for Herwig::UA5Handler:

Public Member Functions

virtual void handle (EventHandler &eh, const tPVector &tagged, const Hint &hint)
 This is the routine that starts the algorithm. More...
 
Standard constructors and destructors.
 UA5Handler ()
 The default constructor.
 
Functions used by the persistent I/O system.
void persistentOutput (PersistentOStream &os) const
 Function used to write out object persistently. More...
 
void persistentInput (PersistentIStream &is, int version)
 Function used to read in object persistently. More...
 
- Public Member Functions inherited from ThePEG::StepHandler
tEHPtr eventHandler () const
 
void eventHandler (tEHPtr)
 
tStepPtr newStep ()
 
tStepPtr currentStep ()
 
tEHPtr eventHandler () const
 
void eventHandler (tEHPtr)
 
tStepPtr newStep ()
 
tStepPtr currentStep ()
 
- Public Member Functions inherited from HandlerBaseT< UseRandom >
double rnd () const
 
double rnd (double xu) const
 
double rnd (double xl, double xu) const
 
bool rndbool () const
 
bool rndbool (double p) const
 
bool rndbool (double p1, double p2) const
 
int rndsign (double p1, double p2, double p3) const
 
int rnd2 (double p0, double p1) const
 
int rnd3 (double p0, double p1, double p2) const
 
int rnd4 (double p0, double p1, double p2, double p3) const
 
long irnd (long xu=2) const
 
long irnd (long xl, long xu) const
 
const StandardModelBase & SM () const
 
tSMPtr standardModel () const
 
- Public Member Functions inherited from ThePEG::Interfaced
virtual bool defaultInit ()
 
PPtr getParticle (PID) const
 
PDPtr getParticleData (PID) const
 
bool used () const
 
void useMe () const
 
tEGPtr generator () const
 
void persistentOutput (PersistentOStream &os) const
 
void persistentInput (PersistentIStream &is, int version)
 
PPtr getParticle (PID) const
 
PDPtr getParticleData (PID) const
 
bool used () const
 
void useMe () const
 
tEGPtr generator () const
 
void persistentOutput (PersistentOStream &os) const
 
void persistentInput (PersistentIStream &is, int version)
 
- Public Member Functions inherited from ThePEG::InterfacedBase
string fullName () const
 
string name () const
 
string path () const
 
string comment () const
 
void setup (istream &is)
 
virtual void debugme () const
 
void update ()
 
void init ()
 
virtual bool preInitialize () const
 
void initrun ()
 
void finish ()
 
void touch ()
 
void reset ()
 
void clear ()
 
InitState state () const
 
bool locked () const
 
bool touched () const
 
void persistentOutput (PersistentOStream &os) const
 
void persistentInput (PersistentIStream &is, int version)
 
void update ()
 
void init ()
 
virtual bool preInitialize () const
 
void initrun ()
 
void finish ()
 
void touch ()
 
void reset ()
 
void clear ()
 
InitState state () const
 
bool locked () const
 
bool touched () const
 
void persistentOutput (PersistentOStream &os) const
 
void persistentInput (PersistentIStream &is, int version)
 
- Public Member Functions inherited from ThePEG::Base
void debug () const
 
- Public Member Functions inherited from ThePEG::Pointer::ReferenceCounted
CounterType referenceCount () const
 
- Public Member Functions inherited from ThePEG::Named
 Named (const string &newName=string())
 
const string & name () const
 
bool operator== (const Named &other) const
 
bool operator< (const Named &other) const
 

Static Public Member Functions

static void Init ()
 The standard Init function used to initialize the interfaces. More...
 
- Static Public Member Functions inherited from ThePEG::HadronizationHandler
static void Init ()
 
- Static Public Member Functions inherited from ThePEG::StepHandler
static void Init ()
 
- Static Public Member Functions inherited from ThePEG::HandlerBase
static void Init ()
 
- Static Public Member Functions inherited from ThePEG::Interfaced
static void Init ()
 
- Static Public Member Functions inherited from ThePEG::InterfacedBase
static void Init ()
 
- Static Public Member Functions inherited from ThePEG::Base
static void Init ()
 

Protected Member Functions

Clone Methods.
virtual IBPtr clone () const
 Make a simple clone of this object. More...
 
virtual IBPtr fullclone () const
 Make a clone of this object, possibly modifying the cloned object to make it sane. More...
 
- Protected Member Functions inherited from ThePEG::StepHandler
void createNewStep ()
 
- Protected Member Functions inherited from ThePEG::Interfaced
void reporeg (IBPtr object, string name) const
 
bool setDefaultReference (PtrT &ptr, string classname, string objectname)
 
 Interfaced (const string &newName)
 
 Interfaced (const Interfaced &i)
 
void setGenerator (tEGPtr generator)
 
- Protected Member Functions inherited from ThePEG::InterfacedBase
 InterfacedBase (string newName)
 
 InterfacedBase (const InterfacedBase &i)
 
virtual void readSetup (istream &is)
 
virtual void doupdate ()
 
virtual void doinit ()
 
virtual void doinitrun ()
 
virtual void dofinish ()
 
virtual IVector getReferences ()
 
virtual void rebind (const TranslationMap &)
 
virtual void readSetup (istream &is)
 
virtual void doupdate ()
 
virtual void doinit ()
 
virtual void doinitrun ()
 
virtual void dofinish ()
 
virtual IVector getReferences ()
 
virtual void rebind (const TranslationMap &)
 
- Protected Member Functions inherited from ThePEG::Pointer::ReferenceCounted
 ReferenceCounted (const ReferenceCounted &)
 
ReferenceCountedoperator= (const ReferenceCounted &)
 
 ReferenceCounted (const ReferenceCounted &)
 
ReferenceCountedoperator= (const ReferenceCounted &)
 
- Protected Member Functions inherited from ThePEG::Named
const Namedoperator= (const Named &other)
 
const string & name (const string &newName)
 

Private Member Functions

LorentzRotation rotate (const LorentzMomentum &p) const
 This returns the rotation matrix needed to rotate p into the z axis.
 
UA5Handleroperator= (const UA5Handler &)
 This is never defined and since it can never be called it isn't needed. More...
 
void performDecay (PPtr parent, int &totalcharge, int &numbercharge) const
 Members to decay the clusters and hadrons produced in their decay, and insert the output in the event record. More...
 
void decayCluster (ClusterPtr cluster, bool single) const
 Decay a cluster to two hadrons is sufficiently massive and to one if not. More...
 
void insertParticle (PPtr particle, StepPtr step, bool all) const
 Recursively add particle and decay products to the step. More...
 
double negativeBinomial (int N, double mean, double ek) const
 Members to generate the multiplicity according to a negative binomial distribution. More...
 
double meanMultiplicity (Energy E) const
 The value of the mean multiplicity for a given energy E. More...
 
unsigned int multiplicity (Energy E) const
 Generates a multiplicity for the energy E according to the negative binomial distribution. More...
 
void generateMomentum (tClusterPtr clu1, tClusterPtr clu2, const ClusterVector &clusters, Energy CME, const Lorentz5Momentum &cm) const
 Members to generate the momenta of the clusters. More...
 
void generateCylindricalPS (const ClusterVector &clusters, Energy CME) const
 The implementation of the cylindrical phase space. More...
 
template<typename T >
gaussDistribution (T mean, T stdev) const
 Various methods to generate random distributions. More...
 
double randUng (double A, double B) const
 This returns a random number with a flat distribution [-A,A] plus gaussian tail with stdev B TODO: Should move this to Utilities. More...
 
template<typename T >
void randAzm (T pt, T &px, T &py) const
 Generates a random azimuthal angle and puts x onto px and py TODO: Should move this to Utilities. More...
 
Energy randExt (Energy AM0, InvEnergy B) const
 This returns random number from $dN/dp_T^2=exp(-p_{1,2,3}m_T$ distribution, where $m_T=\sqrt{p_T^2+M^2}$. More...
 

Private Attributes

ClusterFissionerPtr clusterFissioner
 Reference to the ClusterFissioner object.
 
ClusterDecayerPtr clusterDecayer
 Reference to the cluster decayer object.
 
double _probSoft
 This is the probability of having a soft underlying event.
 
double _enhanceCM
 This is a parameter used to enhance the CM energy used to generate the multiplicity distribution.
 
unsigned int _maxtries
 The maximum number of attempts to generate the distribution.
 
bool _needWarning
 Whether to warn about using UA5 and MPI simultaneously.
 
double _n1
 Parameters for the mean multiplicity $\bar n =n_1s^{n_2}+n_3$. More...
 
double _n2
 The parameter $n_2$.
 
double _n3
 The parameter $n_3$.
 
double _k1
 Parameters for $k$ in the negative binomial distribution given by $1/k =k_1\ln s+k_2$. More...
 
double _k2
 The parameter $k_2$.
 
Energy _m1
 Parameters for the cluster mass distribution, $M = m_{q1}+m_{q2}+m_1-\log(r_1 r_2)/m_2$. More...
 
InvEnergy _m2
 The parameter $m_2$.
 
InvEnergy _p1
 Parameters for the transverpse momentum of the soft distribution, $P(p_T) \propto p_T*exp(-p_i\sqrt{p_T^2+M^2}$. More...
 
InvEnergy _p2
 The parameter $p_2$ for strange and charm quarks.
 
InvEnergy _p3
 The parameter $p_3$ for diquarks.
 

Static Private Attributes

static ClassDescription< UA5HandlerinitUA5Handler
 The static object used to initialize the description of this class. More...
 

Additional Inherited Members

- Public Types inherited from ThePEG::InterfacedBase
enum  InitState
 
- Public Types inherited from ThePEG::Pointer::ReferenceCounted
typedef unsigned int CounterType
 
- Public Attributes inherited from ThePEG::InterfacedBase
 initializing
 
 uninitialized
 
 initialized
 
 runready
 
- Public Attributes inherited from ThePEG::Pointer::ReferenceCounted
const unsigned long uniqueId
 
- Static Protected Member Functions inherited from ThePEG::Interfaced
static void registerRepository (IBPtr)
 
static void registerRepository (IBPtr, string newName)
 

Detailed Description

This is the class definition for the UA5Handler.

This class is designed to generate an underlying event based on the UA5 model. This is intended as a basic underlying event model which will be superceded by a new model in Herwig.

This class interfaces with the cluster hadronization. To that end there is an interface set up with the ClusterFissioner class and with the ClusterDecayer class.

The Hadronization is responsible for the formation of the beam clusters. In this step the colour connection between the spectators and the initial-state parton showers is cut by the forced emission of a soft quark-antiquark pair. The underlying soft event in a hard hadron-hadron collision is then assumed to be a soft collision between these two beam clusters.

The model used for the underlying event is based on the minimum-bias $p\bar{p}$ event generator of the UA5 Collaboration, UA5 Collaboration, G.J. Alner et al., Nucl. Phys. B291 (1987) 445, modified to make use of our cluster fragmentation algorithm.

The parameter ProbSoft enables one to produce an underlying event in only a fraction ProbSoft of events (default=1.0).

The UA5 model starts from a parametrization of the $p\bar{p}$ inelastic charged multiplicity distribution as a negative binomial distribution,

\[P(n) = \frac{\Gamma(n+k)}{n!\,\Gamma(k)} \frac{(\bar n/k)^n}{(1+\bar n/k)^{n+k}}\;.\]

The parameter $k$ is given by

\[1/k =k_1\ln s+k_2,\]

and $\bar n$ is given by

\[\bar n =n_1s^{n_2}+n_3\]

As an option, for underlying events the value of $\sqrt{s}$ used to choose the multiplicity $n$ may be increased by a factor EnhanceCM to allow for an enhanced underlying activity in hard events.

Once a charged multiplicity has been selected from the above distribution, `softclusters' are generated with flavours $(f_1,f_2) = (q_{n-1},\bar q_n)$ by drawing $q_n\bar q_n = u\bar u$ or $d\bar d$ randomly from the vacuum. Soft cluster masses are assigned as

\[M = m_{q1}+m_{q2}+m_1-\log(r_1 r_2)/m_2 \]

where $r_{1,2}$ are random numbers, which gives a (shifted) exponential distribution of $M^2$. The parameters $m_1$ and $m_2$ control the distribution and $m_{q1,2}$ are the masses of the quarks in the cluster.

As each soft cluster is generated, it is decayed to stable hadrons using the cluster hadronization model (without cluster fission) and the accumulated charged multiplicity is computed. Once the preselected charged multiplicity is exactly reached, cluster generation is stopped. If it is exceeded, all clusters are rejected and new ones are generated until the exact value is reached. In this way the multiplicity distribution of stable charged hadrons is generated exactly as prescribed.

At this stage (to save time) the kinematic distribution of the soft clusters has not yet been generated. The decay products of each cluster are stored in its rest frame. Now the transverse momenta of the clusters are generated with the distribution

\[P(p_t)\propto p_t\exp\left(-p_{1,2,3}\sqrt{p_t^2+M^2}\right)\]

where the slope parameter $p_{1,2,3}$ depends as indicated on the flavour of the quark or diquark pair created in the primary cluster decay, $p_1$ for light quarks, $p_2$ for the strange and charm quarks and $p_3$ for diquarks. Next the clusters are given a flat rapidity distribution with Gaussian shoulders. The `reduced rapidities' $\xi_i$ are generated first by drawing from a distribution

\[P(\xi) = N\;\;\;\mbox{for}\;|\xi|<0.6\]

\[P(\xi) = N\,e^{-(\xi-0.6)^2/2} \;\;\;\mbox{for}\;\xi>0.6\]

\[P(\xi) = N\,e^{-(\xi+0.6)^2/2} \;\;\;\mbox{for}\;\xi<-0.6\]

where $N=1/(1.2+\sqrt{2\pi})$ is the normalization. Next a scaling factor $Y$ is computed such that the scaled cluster rapidities $y_i=Y\xi_i$, their masses and transverse momenta satisfy momentum conservation when compared to the total energy of the underlying event. Thus the soft cluster rapidity distribution retains its overall shape but becomes higher and wider as the energy of the underlying event increases.

Finally the decay products of each cluster are boosted from its rest frame into the lab frame and added to the event record.

See also
The interfaces defined for UA5Handler..

Definition at line 109 of file UA5Handler.h.

Member Function Documentation

◆ clone()

virtual IBPtr Herwig::UA5Handler::clone ( ) const
protectedvirtual

Make a simple clone of this object.

Returns
a pointer to the new object.

Implements ThePEG::InterfacedBase.

◆ decayCluster()

void Herwig::UA5Handler::decayCluster ( ClusterPtr  cluster,
bool  single 
) const
private

Decay a cluster to two hadrons is sufficiently massive and to one if not.

Parameters
clusterThe cluster to decay
singleWhether or not ot allow decays to

◆ fullclone()

virtual IBPtr Herwig::UA5Handler::fullclone ( ) const
protectedvirtual

Make a clone of this object, possibly modifying the cloned object to make it sane.

Returns
a pointer to the new object.

Reimplemented from ThePEG::InterfacedBase.

◆ gaussDistribution()

template<typename T >
T Herwig::UA5Handler::gaussDistribution ( mean,
stdev 
) const
inlineprivate

Various methods to generate random distributions.

Gaussian distribution

Parameters
meanthe mean of the distribution
stdevthe standard deviation of the distribution
Returns
Arandom value from the gaussian distribution

◆ generateCylindricalPS()

void Herwig::UA5Handler::generateCylindricalPS ( const ClusterVector clusters,
Energy  CME 
) const
private

The implementation of the cylindrical phase space.

Parameters
clustersThe list of clusters to generate the momentum for
CMEThe center of mass energy

◆ generateMomentum()

void Herwig::UA5Handler::generateMomentum ( tClusterPtr  clu1,
tClusterPtr  clu2,
const ClusterVector clusters,
Energy  CME,
const Lorentz5Momentum &  cm 
) const
private

Members to generate the momenta of the clusters.

This generates the momentum of the produced particles according to the cylindrical phase space algorithm given in Computer Physics Communications 9 (1975) 297-304 by S. Jadach.

Parameters
clu1The first incoming cluster
clu2The second incoming cluster
clustersThe list of clusters produced
CMEThe center of mass energy
cmThe center of mass momentum (of the underlying event)

◆ handle()

virtual void Herwig::UA5Handler::handle ( EventHandler eh,
const tPVector tagged,
const Hint hint 
)
virtual

This is the routine that starts the algorithm.

Parameters
ehthe EventHandler in charge of the generation.
taggedthe vector of particles to consider. If empty, all final state particles in the current Step is considered.
hinta possible Hint which is ignored in this implementation

Implements ThePEG::StepHandler.

◆ Init()

static void Herwig::UA5Handler::Init ( )
static

The standard Init function used to initialize the interfaces.

Called exactly once for each class by the class description system before the main function starts or when this class is dynamically loaded.

◆ insertParticle()

void Herwig::UA5Handler::insertParticle ( PPtr  particle,
StepPtr  step,
bool  all 
) const
private

Recursively add particle and decay products to the step.

Parameters
particleThe particle
stepThe step
allInsert this particle as well as children

◆ meanMultiplicity()

double Herwig::UA5Handler::meanMultiplicity ( Energy  E) const
inlineprivate

The value of the mean multiplicity for a given energy E.

This is $n_1E^{2n_2}+n_3$ wher $n_1$, $n_2$ and $n_3$ are parameters.

Parameters
Ethe energy to calculate the mean multiplicity for
Returns
the mean multiplicity

◆ multiplicity()

unsigned int Herwig::UA5Handler::multiplicity ( Energy  E) const
private

Generates a multiplicity for the energy E according to the negative binomial distribution.

Parameters
EThe energy to generate for
Returns
the randomly generated multiplicity for the energy given

◆ negativeBinomial()

double Herwig::UA5Handler::negativeBinomial ( int  N,
double  mean,
double  ek 
) const
inlineprivate

Members to generate the multiplicity according to a negative binomial distribution.

Calculate the negative binomial probability given the mean $\bar n$, the multiplicity and $1/k$.

Parameters
NThe multplicity for which to calculate the probability
meanThe mean multiplicity $\bar n$
ek$1/k$
Returns
a value distributed according the negative binomial distribution

◆ operator=()

UA5Handler& Herwig::UA5Handler::operator= ( const UA5Handler )
private

This is never defined and since it can never be called it isn't needed.

The prototype is defined so the compiler doesn't use the default = operator.

◆ performDecay()

void Herwig::UA5Handler::performDecay ( PPtr  parent,
int &  totalcharge,
int &  numbercharge 
) const
private

Members to decay the clusters and hadrons produced in their decay, and insert the output in the event record.

Perform the decay of an unstable hadron.

Parameters
parentthe decaying particle
totalchargeThe totalcharge of the decay proiducts
numberchargeThe number of stabel charged decay products

◆ persistentInput()

void Herwig::UA5Handler::persistentInput ( PersistentIStream is,
int  version 
)

Function used to read in object persistently.

Parameters
isthe persistent input stream read from.
versionthe version number of the object when written.

◆ persistentOutput()

void Herwig::UA5Handler::persistentOutput ( PersistentOStream os) const

Function used to write out object persistently.

Parameters
osthe persistent output stream written to.

◆ randAzm()

template<typename T >
void Herwig::UA5Handler::randAzm ( pt,
T &  px,
T &  py 
) const
inlineprivate

Generates a random azimuthal angle and puts x onto px and py TODO: Should move this to Utilities.

Parameters
ptThe magnitude of the transverse momentum
pxThe x component after random rotation
pyThe y component after random rotation

◆ randExt()

Energy Herwig::UA5Handler::randExt ( Energy  AM0,
InvEnergy  B 
) const
inlineprivate

This returns random number from $dN/dp_T^2=exp(-p_{1,2,3}m_T$ distribution, where $m_T=\sqrt{p_T^2+M^2}$.

It uses Newton's method to solve $F-R=0$

Parameters
AM0The mass $M$.
BThe slope
Returns
the value distributed from $dN/dp_T^2=exp(-p_{1,2,3}m_T$ with mean av

◆ randUng()

double Herwig::UA5Handler::randUng ( double  A,
double  B 
) const
inlineprivate

This returns a random number with a flat distribution [-A,A] plus gaussian tail with stdev B TODO: Should move this to Utilities.

Parameters
AThe width of the flat part
BThe standard deviation of the gaussian tail
Returns
the randomly generated value

Member Data Documentation

◆ _k1

double Herwig::UA5Handler::_k1
private

Parameters for $k$ in the negative binomial distribution given by $1/k =k_1\ln s+k_2$.

The parameter $k_1$

Definition at line 371 of file UA5Handler.h.

◆ _m1

Energy Herwig::UA5Handler::_m1
private

Parameters for the cluster mass distribution, $M = m_{q1}+m_{q2}+m_1-\log(r_1 r_2)/m_2$.

The parameter $m_1$

Definition at line 387 of file UA5Handler.h.

◆ _n1

double Herwig::UA5Handler::_n1
private

Parameters for the mean multiplicity $\bar n =n_1s^{n_2}+n_3$.

The parameter $n_1$

Definition at line 350 of file UA5Handler.h.

◆ _p1

InvEnergy Herwig::UA5Handler::_p1
private

Parameters for the transverpse momentum of the soft distribution, $P(p_T) \propto p_T*exp(-p_i\sqrt{p_T^2+M^2}$.

The parameter $p_1$ for light quarks

Definition at line 403 of file UA5Handler.h.

◆ initUA5Handler

ClassDescription<UA5Handler> Herwig::UA5Handler::initUA5Handler
staticprivate

The static object used to initialize the description of this class.

Indicates that this is a concrete class with persistent data.

Definition at line 322 of file UA5Handler.h.


The documentation for this class was generated from the following file: