herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
Herwig::HadronSelector Class Referenceabstract

This class selects the hadron flavours of a cluster decay. More...

#include <HadronSelector.h>

Inheritance diagram for Herwig::HadronSelector:

Classes

class  HadronInfo
 Class used to store all the hadron information for easy access. More...
 
class  Kupco
 Class designed to make STL routines easy to use. More...
 

Public Types

typedef map< pair< long, long >, KupcoDataHadronTable
 The hadron table type.
 
typedef set< HadronInfoKupcoData
 The helper classes. More...
 
- Public Types inherited from ThePEG::InterfacedBase
enum  InitState
 
- Public Types inherited from ThePEG::Pointer::ReferenceCounted
typedef unsigned int CounterType
 

Public Member Functions

 HadronSelector (unsigned int)
 The default constructor.
 
virtual pair< tcPDPtr, tcPDPtrchooseHadronPair (const Energy cluMass, tcPDPtr par1, tcPDPtr par2, tcPDPtr par3=PDPtr()) const =0
 Method to return a pair of hadrons given the PDG codes of two or three constituents. More...
 
tcPDPtr chooseSingleHadron (tcPDPtr par1, tcPDPtr par2, Energy mass) const
 Select the single hadron for a cluster decay return null pointer if not a single hadron decay. More...
 
pair< tcPDPtr, tcPDPtrlightestHadronPair (tcPDPtr ptr1, tcPDPtr ptr2, tcPDPtr ptr3=PDPtr()) const
 This returns the lightest pair of hadrons given by the flavours. More...
 
Energy massLightestHadronPair (tcPDPtr ptr1, tcPDPtr ptr2, tcPDPtr ptr3=PDPtr()) const
 Returns the mass of the lightest pair of hadrons with the given particles. More...
 
tcPDPtr lightestHadron (tcPDPtr ptr1, tcPDPtr ptr2, tcPDPtr ptr3=PDPtr()) const
 Returns the lightest hadron formed by the given particles. More...
 
vector< pair< tcPDPtr, double > > hadronsBelowThreshold (Energy threshold, tcPDPtr ptr1, tcPDPtr ptr2, tcPDPtr ptr3=PDPtr()) const
 Returns the hadrons below the constituent mass threshold formed by the given particles, together with their total weight. More...
 
Energy massLightestHadron (tcPDPtr ptr1, tcPDPtr ptr2, tcPDPtr ptr3=PDPtr()) const
 Return the nominal mass of the hadron returned by lightestHadron() More...
 
Energy massLightestBaryonPair (tcPDPtr ptr1, tcPDPtr ptr2) const
 Returns the mass of the lightest pair of baryons. More...
 
double pwtDquark () const
 Return the weights for the different quarks and diquarks. More...
 
double pwtUquark () const
 The up quark weight.
 
double pwtSquark () const
 The strange quark weight.
 
double pwtCquark () const
 The charm quark weight.
 
double pwtBquark () const
 The bottom quark weight.
 
double pwtDIquark () const
 The diquark weight.
 
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::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 IBPtr fullclone () const
 
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())
 
 Named (const Named &)=default
 
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::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

virtual void constructHadronTable ()
 Construct the table of hadron data This is the main method to initialize the hadron data (mainly the weights associated to each hadron, taking into account its spin, eventual isoscalar-octect mixing, singlet-decuplet factor). More...
 
const HadronTabletable () const
 Access to the table of hadrons.
 
const vector< PDPtr > & partons () const
 Access to the list of partons.
 
double pwt (long pid) const
 Access the parton weights.
 
double specialWeight (long id) const
 Calculates a special weight specific to a given hadron. More...
 
int signHadron (tcPDPtr ptr1, tcPDPtr ptr2, tcPDPtr hadron) const
 This method returns the proper sign ( > 0 hadron; < 0 anti-hadron ) for the input PDG id idHad > 0, suppose to be made by the two constituent particle pointers: par1 and par2 (both with proper sign).
 
Standard Interfaced functions.
virtual void doinit ()
 Initialize this object after the setup phase before saving an EventGenerator to disk. More...
 
double probabilityMixing (const double angleMix, const int order) const
 Methods for the mixing of $I=0$ mesons. More...
 
virtual double mixingStateWeight (long id) const
 Returns the weight of given mixing state. More...
 
- 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
virtual IBPtr clone () const=0
 
 InterfacedBase (string newName)
 
 InterfacedBase (const InterfacedBase &i)
 
virtual void readSetup (istream &is)
 
virtual void doupdate ()
 
virtual void doinitrun ()
 
virtual void dofinish ()
 
virtual IVector getReferences ()
 
virtual void rebind (const TranslationMap &)
 
virtual void readSetup (istream &is)
 
virtual void doupdate ()
 
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 Types

enum  MesonMultiplets { Lmax = 3, Jmax = 4, Nmax = 4 }
 Enums so arrays can be statically allocated. More...
 

Private Member Functions

HadronSelectoroperator= (const HadronSelector &)=delete
 The assignment operator is private and must never be called. More...
 

Private Attributes

vector< PDPtr_partons
 The PDG codes of the constituent particles allowed.
 
vector< PDPtr_forbidden
 The PDG codes of the hadrons which cannot be produced in the hadronization.
 
vector< vector< vector< double > > > _repwt
 The weights for the excited meson multiplets.
 
HadronTable _table
 The table of hadron data.
 
unsigned int _topt
 Option for the construction of the tables.
 
unsigned int _trial
 Which particles to produce for debugging purposes.
 
unsigned int belowThreshold_
 Option for the selection of hadrons below the pair threshold.
 
double _pwtDquark
 The weights for the different quarks and diquarks. More...
 
double _pwtUquark
 The probability of producting an up quark.
 
double _pwtSquark
 The probability of producting a strange quark.
 
double _pwtCquark
 The probability of producting a charm quark.
 
double _pwtBquark
 The probability of producting a bottom quark.
 
double _pwtDIquark
 The probability of producting a diquark.
 
map< long, double > _pwt
 Weights for quarks and diquarks.
 
double _etamix
 The mixing angles for the $I=0$ mesons containing light quarks. More...
 
double _phimix
 The $\phi-\omega$ mixing angle.
 
double _h1mix
 The $h_1'-h_1$ mixing angle.
 
double _f0mix
 The $f_0(1710)-f_0(1370)$ mixing angle.
 
double _f1mix
 The $f_1(1420)-f_1(1285)$ mixing angle.
 
double _f2mix
 The $f'_2-f_2$ mixing angle.
 
double _eta2mix
 The $\eta_2(1870)-\eta_2(1645)$ mixing angle.
 
double _omhmix
 The $\phi(???)-\omega(1650)$ mixing angle.
 
double _ph3mix
 The $\phi_3-\omega_3$ mixing angle.
 
double _eta2Smix
 The $\eta(1475)-\eta(1295)$ mixing angle.
 
double _phi2Smix
 The $\phi(1680)-\omega(1420)$ mixing angle.
 
vector< double > _weight1S0
 The weights for the various meson multiplets to be used to supress the production of particular states. More...
 
vector< double > _weight3S1
 The weights for the $\phantom{1}^3S_1$ multiplets.
 
vector< double > _weight1P1
 The weights for the $\phantom{1}^1P_1$ multiplets.
 
vector< double > _weight3P0
 The weights for the $\phantom{1}^3P_0$ multiplets.
 
vector< double > _weight3P1
 The weights for the $\phantom{1}^3P_1$ multiplets.
 
vector< double > _weight3P2
 The weights for the $\phantom{1}^3P_2$ multiplets.
 
vector< double > _weight1D2
 The weights for the $\phantom{1}^1D_2$ multiplets.
 
vector< double > _weight3D1
 The weights for the $\phantom{1}^3D_1$ multiplets.
 
vector< double > _weight3D2
 The weights for the $\phantom{1}^3D_2$ multiplets.
 
vector< double > _weight3D3
 The weights for the $\phantom{1}^3D_3$ multiplets.
 
double _sngWt
 Singlet and Decuplet weights. More...
 
double _decWt
 The decuplet weight.
 
A parameter used for determining when clusters are too light.

This parameter is used for setting the lower threshold, $ t $ as

\[ t' = t(1 + r B^1_{\rm lim}) \]

where $ r $ is a random number [0,1].

double _limBottom
 
double _limCharm
 
double _limExotic
 

Additional Inherited Members

- 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 class selects the hadron flavours of a cluster decay.

Author
Philip Stephens
Alberto Ribon
Peter Richardson

This is the base class for the selection of either a pair of hadrons, or in some cases a single hadron. The different approaches which were previously implemented in this class are now implemented in the HwppSelector and Hw64Selector which inherit from this class.

This class implements a number of methods which are needed by all models and in addition contains the weights for the different meson multiplets and mixing of the light $I=0$ mesons.

See also
The interfaces defined for HadronSelector.
HwppSelector
Hw64Selector

Definition at line 48 of file HadronSelector.h.

Member Typedef Documentation

◆ KupcoData

The helper classes.

The type is used to contain all the hadrons info of a given flavour.

Definition at line 214 of file HadronSelector.h.

Member Enumeration Documentation

◆ MesonMultiplets

Enums so arrays can be statically allocated.

Defines values for array sizes. L,J,N max values for excited mesons.

Definition at line 779 of file HadronSelector.h.

Member Function Documentation

◆ chooseHadronPair()

virtual pair<tcPDPtr,tcPDPtr> Herwig::HadronSelector::chooseHadronPair ( const Energy  cluMass,
tcPDPtr  par1,
tcPDPtr  par2,
tcPDPtr  par3 = PDPtr() 
) const
pure virtual

Method to return a pair of hadrons given the PDG codes of two or three constituents.

Parameters
cluMassThe mass of the cluster
par1The first constituent
par2The second constituent
par3The third constituent

Implemented in Herwig::HwppSelector, and Herwig::Hw64Selector.

◆ chooseSingleHadron()

tcPDPtr Herwig::HadronSelector::chooseSingleHadron ( tcPDPtr  par1,
tcPDPtr  par2,
Energy  mass 
) const

Select the single hadron for a cluster decay return null pointer if not a single hadron decay.

Parameters
par11st constituent
par22nd constituent
massMass of the cluster

◆ constructHadronTable()

virtual void Herwig::HadronSelector::constructHadronTable ( )
protectedvirtual

Construct the table of hadron data This is the main method to initialize the hadron data (mainly the weights associated to each hadron, taking into account its spin, eventual isoscalar-octect mixing, singlet-decuplet factor).

This is the method that one should update when new or updated hadron data is available.

This class implements the construction of the basic table but can be overridden if needed in inheriting classes.

The rationale for factors used for diquarks involving different quarks can be can be explained by taking a prototype example that in the exact SU(2) limit, in which:

\[m_u=m_d\]

\[M_p=M_n=M_\Delta\]

and we will have equal numbers of u and d quarks produced. Suppose that we weight 1 the diquarks made of the same quark and 1/2 those made of different quarks, the fractions of u and d baryons (p, n, Delta) we get are the following:

  • $\Delta^{++}$: 1 possibility only u uu with weight 1
  • $\Delta^- $: 1 possibility only d dd with weight 1
  • $p,\Delta^+ $: 2 possibilities u ud with weight 1/2 d uu with weight 1
  • $n,\Delta^0 $: 2 possibilities d ud with weight 1/2 u dd with weight 1 In the latter two cases, we have to take into account the fact that p and n have spin 1/2 whereas Delta+ and Delta0 have spin 3/2 therefore from phase space we get a double weight for Delta+ and Delta0 relative to p and n respectively. Therefore the relative amount of these baryons that is produced is the following:

    p = # n = ( 1/2 + 1 ) * 1/3 = 1/2

Delta++ = # Delta- = 1 = ( 1/2 + 1) * 2/3 # Delta+ = # Delta0

which is correct, and therefore the weight 1/2 for the diquarks of different types of quarks is justified (at least in this limit of exact SU(2) ).

◆ doinit()

virtual void Herwig::HadronSelector::doinit ( )
protectedvirtual

Initialize this object after the setup phase before saving an EventGenerator to disk.

The array _repwt is initialized using the interfaces to set different weights for different meson multiplets and the constructHadronTable() method called to complete the construction of the hadron tables.

Exceptions
InitExceptionif object could not be initialized properly.

Reimplemented from ThePEG::InterfacedBase.

Reimplemented in Herwig::HwppSelector.

◆ hadronsBelowThreshold()

vector<pair<tcPDPtr,double> > Herwig::HadronSelector::hadronsBelowThreshold ( Energy  threshold,
tcPDPtr  ptr1,
tcPDPtr  ptr2,
tcPDPtr  ptr3 = PDPtr() 
) const

Returns the hadrons below the constituent mass threshold formed by the given particles, together with their total weight.

Given the id of two (or three) constituents of a cluster, it returns the lightest hadron with proper flavour numbers. At the moment it does nothing in the case that also 'ptr3' present.

Parameters
thresholdThe theshold
ptr1is the first constituent
ptr2is the second constituent
ptr3is the third constituent

◆ Init()

static void Herwig::HadronSelector::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.

◆ lightestHadron()

tcPDPtr Herwig::HadronSelector::lightestHadron ( tcPDPtr  ptr1,
tcPDPtr  ptr2,
tcPDPtr  ptr3 = PDPtr() 
) const

Returns the lightest hadron formed by the given particles.

Given the id of two (or three) constituents of a cluster, it returns the lightest hadron with proper flavour numbers. At the moment it does nothing in the case that also 'ptr3' present.

Parameters
ptr1is the first constituent
ptr2is the second constituent
ptr3is the third constituent

◆ lightestHadronPair()

pair<tcPDPtr,tcPDPtr> Herwig::HadronSelector::lightestHadronPair ( tcPDPtr  ptr1,
tcPDPtr  ptr2,
tcPDPtr  ptr3 = PDPtr() 
) const

This returns the lightest pair of hadrons given by the flavours.

Given the two (or three) constituents of a cluster, it returns the two lightest hadrons with proper flavour numbers. Furthermore, the first of the two hadrons must have the constituent with par1, and the second must have the constituent with par2.

Todo:
At the moment it does nothing in the case that also par3 is present.

The method is implemented by calling twice lightestHadron, once with (par1,quarktopick->CC()) ,and once with (par2,quarktopick) where quarktopick is either the pointer to d or u quarks . In fact, the idea is that whatever the flavour of par1 and par2, no matter if (anti-)quark or (anti-)diquark, the lightest pair of hadrons containing flavour par1 and par2 will have either flavour d or u, being the lightest quarks. The method returns the pair (PDPtr(),PDPtr()) if anything goes wrong.

Todo:
The method assumes par3 == PDPtr() (otherwise we don't know how to proceed: a possible, trivial way would be to randomly select two of the three (anti-)quarks and treat them as a (anti-)diquark, reducing the problem to two components as treated below. In the normal (two components) situation, the strategy is the following: treat in the same way the two possibilities: (d dbar) (i=0) and (u ubar) (i=1) as the pair quark-antiquark necessary to form a pair of hadrons containing the input flavour par1 and par2; finally, select the one that produces the lightest pair of hadrons, compatible with the charge conservation constraint.

◆ massLightestBaryonPair()

Energy Herwig::HadronSelector::massLightestBaryonPair ( tcPDPtr  ptr1,
tcPDPtr  ptr2 
) const

Returns the mass of the lightest pair of baryons.

Parameters
ptr1is the first constituent
ptr2is the second constituent

◆ massLightestHadron()

Energy Herwig::HadronSelector::massLightestHadron ( tcPDPtr  ptr1,
tcPDPtr  ptr2,
tcPDPtr  ptr3 = PDPtr () 
) const
inline

Return the nominal mass of the hadron returned by lightestHadron()

Parameters
ptr1is the first constituent
ptr2is the second constituent
ptr3is the third constituent

Definition at line 331 of file HadronSelector.h.

References ThePEG::Exception::eventerror.

◆ massLightestHadronPair()

Energy Herwig::HadronSelector::massLightestHadronPair ( tcPDPtr  ptr1,
tcPDPtr  ptr2,
tcPDPtr  ptr3 = PDPtr () 
) const
inline

Returns the mass of the lightest pair of hadrons with the given particles.

Parameters
ptr1is the first constituent
ptr2is the second constituent
ptr3is the third constituent

Definition at line 288 of file HadronSelector.h.

References ZERO.

◆ mixingStateWeight()

virtual double Herwig::HadronSelector::mixingStateWeight ( long  id) const
protectedvirtual

Returns the weight of given mixing state.

Parameters
idThe PDG code of the meson

◆ operator=()

HadronSelector& Herwig::HadronSelector::operator= ( const HadronSelector )
privatedelete

The assignment operator is private and must never be called.

In fact, it should not even be implemented.

◆ persistentInput()

void Herwig::HadronSelector::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::HadronSelector::persistentOutput ( PersistentOStream os) const

Function used to write out object persistently.

Parameters
osthe persistent output stream written to.

◆ probabilityMixing()

double Herwig::HadronSelector::probabilityMixing ( const double  angleMix,
const int  order 
) const
inlineprotected

Methods for the mixing of $I=0$ mesons.

Return the probability of mixing for Octet-Singlet isoscalar mixing, the probability of the $\frac1{\sqrt{2}}(|u\bar{u}\rangle + |d\bar{d}\rangle)$ component is returned.

Parameters
angleMixThe mixing angle in degrees (not radians)
orderis 0 for no mixing, 1 for the first resonance of a pair, 2 for the second one. The mixing is defined so that for example with $\eta-\eta'$ mixing where the mixing angle is $\theta=-23^0$ with $\eta$ as the first particle and $\eta'$ the second one. The convention used is

\[\eta = \cos\theta|\eta_{\rm octet }\rangle -\sin\theta|\eta_{\rm singlet}\rangle\]

\[\eta' = \sin\theta|\eta_{\rm octet }\rangle -\cos\theta|\eta_{\rm singlet}\rangle\]

with

\[|\eta_{\rm singlet}\rangle = \frac1{\sqrt{3}} \left[|u\bar{u}\rangle + |d\bar{d}\rangle + |s\bar{s}\rangle\right]\]

\[|\eta_{\rm octet }\rangle = \frac1{\sqrt{6}} \left[|u\bar{u}\rangle + |d\bar{d}\rangle - 2|s\bar{s}\rangle\right]\]

Definition at line 540 of file HadronSelector.h.

References sqr(), and sqrt().

◆ pwtDquark()

double Herwig::HadronSelector::pwtDquark ( ) const
inline

Return the weights for the different quarks and diquarks.

The down quark weight.

Definition at line 366 of file HadronSelector.h.

◆ specialWeight()

double Herwig::HadronSelector::specialWeight ( long  id) const
protected

Calculates a special weight specific to a given hadron.

Parameters
idThe PDG code of the hadron

Member Data Documentation

◆ _etamix

double Herwig::HadronSelector::_etamix
private

The mixing angles for the $I=0$ mesons containing light quarks.

The $\eta-\eta'$ mixing angle

Definition at line 638 of file HadronSelector.h.

◆ _pwtDquark

double Herwig::HadronSelector::_pwtDquark
private

The weights for the different quarks and diquarks.

The probability of producting a down quark.

Definition at line 598 of file HadronSelector.h.

◆ _sngWt

double Herwig::HadronSelector::_sngWt
private

Singlet and Decuplet weights.

The singlet weight

Definition at line 759 of file HadronSelector.h.

◆ _weight1S0

vector<double> Herwig::HadronSelector::_weight1S0
private

The weights for the various meson multiplets to be used to supress the production of particular states.

The weights for the $\phantom{1}^1S_0$ multiplets

Definition at line 699 of file HadronSelector.h.


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