herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.3.0
Hadronization
ClusterFissioner.h
1
// -*- C++ -*-
2
//
3
// ClusterFissioner.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4
// Copyright (C) 2002-2019 The Herwig Collaboration
5
//
6
// Herwig is licenced under version 3 of the GPL, see COPYING for details.
7
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8
//
9
#ifndef HERWIG_ClusterFissioner_H
10
#define HERWIG_ClusterFissioner_H
11
12
#include <ThePEG/Interface/Interfaced.h>
13
#include "CluHadConfig.h"
14
#include "HadronSelector.h"
15
#include "ClusterFissioner.fh"
16
#include "CheckId.h"
17
18
namespace
Herwig
{
19
using namespace
ThePEG
;
20
21
//class Cluster; // forward declaration
22
72
class
ClusterFissioner
:
public
Interfaced
{
73
74
public
:
75
81
ClusterFissioner
();
82
84
102
tPVector
fission
(
ClusterVector
& clusters,
bool
softUEisOn);
103
104
public
:
105
112
void
persistentOutput
(
PersistentOStream
& os)
const
;
113
119
void
persistentInput
(
PersistentIStream
& is,
int
version);
121
125
static
void
Init
();
126
127
protected
:
128
135
virtual
IBPtr
clone
()
const
;
136
141
virtual
IBPtr
fullclone
()
const
;
143
144
private
:
145
149
ClusterFissioner
&
operator=
(
const
ClusterFissioner
&) =
delete
;
150
170
void
cut
(stack<ClusterPtr> &,
171
ClusterVector
&,
tPVector
& finalhadrons,
bool
softUEisOn);
172
173
public
:
174
178
typedef
pair<PPtr,PPtr>
PPair
;
179
183
typedef
pair<PPair,PPair>
cutType
;
184
201
virtual
cutType
cutTwo
(ClusterPtr &,
tPVector
& finalhadrons,
bool
softUEisOn);
202
206
virtual
cutType
cutThree
(ClusterPtr &,
tPVector
& finalhadrons,
bool
softUEisOn);
208
public
:
209
216
PPair
produceHadron
(
tcPDPtr
hadron,
tPPtr
newPtr,
const
Lorentz5Momentum &a,
217
const
LorentzPoint &b)
const
;
218
219
protected
:
220
224
Energy2
clustermass
(
const
ClusterPtr & cluster)
const
;
225
230
virtual
void
drawNewFlavour
(
PPtr
& newPtr1,
PPtr
& newPtr2,
const
ClusterPtr & cluster)
const
{
231
if
(
_enhanceSProb
== 0){
232
drawNewFlavour
(newPtr1,newPtr2);
233
}
234
else
{
235
drawNewFlavourEnhanced
(newPtr1,newPtr2,
clustermass
(cluster));
236
}
237
}
238
244
virtual
pair<Energy,Energy>
drawNewMasses
(Energy Mc,
bool
soft1,
bool
soft2,
245
Lorentz5Momentum& pClu1, Lorentz5Momentum& pClu2,
246
tPPtr
ptrQ1, Lorentz5Momentum& pQ1,
247
tPPtr
, Lorentz5Momentum& pQone,
248
tPPtr
, Lorentz5Momentum& pQtwo,
249
tPPtr
ptrQ2, Lorentz5Momentum& pQ2)
const
{
250
251
pair<Energy,Energy> result;
252
253
double
exp1=_pSplitLight;
254
double
exp2=_pSplitLight;
255
256
if
(
CheckId::isExotic
(ptrQ1->dataPtr())) exp1 = _pSplitExotic;
257
else
if
(
CheckId::hasBottom
(ptrQ1->dataPtr()))exp1 = _pSplitBottom;
258
else
if
(
CheckId::hasCharm
(ptrQ1->dataPtr())) exp1 = _pSplitCharm;
259
260
if
(
CheckId::isExotic
(ptrQ2->dataPtr())) exp2 = _pSplitExotic;
261
else
if
(
CheckId::hasBottom
(ptrQ2->dataPtr())) exp2 = _pSplitBottom;
262
else
if
(
CheckId::hasCharm
(ptrQ2->dataPtr())) exp2 = _pSplitCharm;
263
264
result.first =
drawChildMass
(Mc,pQ1.mass(),pQ2.mass(),pQone.mass(),exp1,soft1);
265
result.second =
drawChildMass
(Mc,pQ2.mass(),pQ1.mass(),pQtwo.mass(),exp2,soft2);
266
267
pClu1.setMass(result.first);
268
pClu2.setMass(result.second);
269
270
return
result;
271
272
}
273
278
virtual
void
calculateKinematics
(
const
Lorentz5Momentum &pClu,
279
const
Lorentz5Momentum &p0Q1,
280
const
bool
toHadron1,
const
bool
toHadron2,
281
Lorentz5Momentum &pClu1, Lorentz5Momentum &pClu2,
282
Lorentz5Momentum &pQ1, Lorentz5Momentum &pQb,
283
Lorentz5Momentum &pQ2, Lorentz5Momentum &pQ2b)
const
;
284
285
protected
:
286
295
PPair
produceCluster
(
tPPtr
ptrQ,
tPPtr
newPtr,
const
Lorentz5Momentum &a,
296
const
LorentzPoint &b,
const
Lorentz5Momentum &c,
297
const
Lorentz5Momentum &d,
const
bool
rem,
298
tPPtr
spect=
tPPtr
(),
bool
remSpect=
false
)
const
;
299
305
void
drawNewFlavour
(
PPtr
& newPtrPos,
PPtr
& newPtrNeg)
const
;
306
313
void
drawNewFlavourEnhanced
(
PPtr
& newPtrPos,
PPtr
& newPtrNeg, Energy2 mass2)
const
;
314
315
342
Energy
drawChildMass
(
const
Energy M,
const
Energy m1,
const
Energy m2,
343
const
Energy m,
const
double
exp,
const
bool
soft)
const
;
344
352
void
calculatePositions
(
const
Lorentz5Momentum &pClu,
353
const
LorentzPoint & positionClu,
354
const
Lorentz5Momentum & pClu1,
355
const
Lorentz5Momentum & pClu2,
356
LorentzPoint & positionClu1,
357
LorentzPoint & positionClu2 )
const
;
358
359
protected
:
360
366
HadronSelectorPtr
hadronSelector
()
const
{
return
_hadronSelector
;}
367
371
Energy
btClM
()
const
{
return
_btClM
;}
372
376
double
pSplitLight
()
const
{
return
_pSplitLight;}
377
381
double
pSplitBottom
()
const
{
return
_pSplitBottom;}
382
386
double
pSplitCharm
()
const
{
return
_pSplitCharm;}
387
391
double
pSplitExotic
()
const
{
return
_pSplitExotic;}
393
394
private
:
395
401
bool
ProbablityFunction
(
double
scale,
double
threshold);
402
406
bool
isHeavy
(tcClusterPtr );
407
411
HadronSelectorPtr
_hadronSelector
;
412
418
Energy _clMaxLight;
419
Energy _clMaxBottom;
420
Energy _clMaxCharm;
421
Energy _clMaxExotic;
423
427
double
_clPowLight;
428
double
_clPowBottom;
429
double
_clPowCharm;
430
double
_clPowExotic;
432
436
double
_pSplitLight;
437
double
_pSplitBottom;
438
double
_pSplitCharm;
439
double
_pSplitExotic;
440
441
442
// weights for alternaive cluster fission
443
double
_fissionPwtUquark;
444
double
_fissionPwtDquark;
445
double
_fissionPwtSquark;
446
450
int
_fissionCluster
;
451
455
int
_kinematicThresholdChoice
;
456
458
462
Energy
_btClM
;
463
467
int
_iopRem
;
468
472
Tension
_kappa
;
473
478
int
_enhanceSProb
;
479
483
Energy
_m0Fission
;
484
489
int
_massMeasure
;
490
495
const
double
_maxScale
= 20.;
496
500
double
_probPowFactor
;
501
505
double
_probShift
;
506
510
Energy2
_kinThresholdShift
;
511
512
};
513
514
}
515
516
#endif
/* HERWIG_ClusterFissioner_H */
Herwig::ClusterFissioner
This class handles clusters which are too heavy.
Definition:
ClusterFissioner.h:72
Herwig::ClusterFissioner::pSplitLight
double pSplitLight() const
Cluster splitting paramater for light quarks.
Definition:
ClusterFissioner.h:376
Herwig::ClusterFissioner::_hadronSelector
HadronSelectorPtr _hadronSelector
A pointer to a Herwig::HadronSelector object for generating hadrons.
Definition:
ClusterFissioner.h:411
Herwig::ClusterFissioner::cutType
pair< PPair, PPair > cutType
Definition for use in the cut function.
Definition:
ClusterFissioner.h:183
Herwig::ClusterFissioner::cutTwo
virtual cutType cutTwo(ClusterPtr &, tPVector &finalhadrons, bool softUEisOn)
Splits the input cluster.
Herwig::ClusterFissioner::pSplitCharm
double pSplitCharm() const
Cluster splitting paramater for charm quarks.
Definition:
ClusterFissioner.h:386
Herwig::ClusterFissioner::_massMeasure
int _massMeasure
Flag that switches between mass measures used in strangeness enhancement: cluster mass,...
Definition:
ClusterFissioner.h:489
Herwig::ClusterFissioner::_iopRem
int _iopRem
Flag used to determine what distributions to use for the cluster masses.
Definition:
ClusterFissioner.h:467
Herwig::ClusterFissioner::persistentInput
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
Herwig::ClusterFissioner::cut
void cut(stack< ClusterPtr > &, ClusterVector &, tPVector &finalhadrons, bool softUEisOn)
This method directs the splitting of the heavy clusters.
Herwig::ClusterFissioner::_fissionCluster
int _fissionCluster
Flag used to determine between normal cluster fission and alternative cluster fission.
Definition:
ClusterFissioner.h:450
Herwig::ClusterFissioner::_kinThresholdShift
Energy2 _kinThresholdShift
Shifts from the kinetic threshold in ClausterFissioner.
Definition:
ClusterFissioner.h:510
Herwig::ClusterFissioner::Init
static void Init()
Standard Init function used to initialize the interfaces.
Herwig::ClusterFissioner::_probPowFactor
double _probPowFactor
Power factor in ClausterFissioner bell probablity function.
Definition:
ClusterFissioner.h:500
Herwig::ClusterFissioner::clustermass
Energy2 clustermass(const ClusterPtr &cluster) const
Function that returns either the cluster mass or the lambda measure.
Herwig::ClusterFissioner::drawNewMasses
virtual pair< Energy, Energy > drawNewMasses(Energy Mc, bool soft1, bool soft2, Lorentz5Momentum &pClu1, Lorentz5Momentum &pClu2, tPPtr ptrQ1, Lorentz5Momentum &pQ1, tPPtr, Lorentz5Momentum &pQone, tPPtr, Lorentz5Momentum &pQtwo, tPPtr ptrQ2, Lorentz5Momentum &pQ2) const
Calculate the masses and possibly kinematics of the cluster fission at hand; if claculateKineamtics i...
Definition:
ClusterFissioner.h:244
Herwig::ClusterFissioner::_probShift
double _probShift
Shifts from the center in ClausterFissioner bell probablity function.
Definition:
ClusterFissioner.h:505
Herwig::ClusterFissioner::calculateKinematics
virtual void calculateKinematics(const Lorentz5Momentum &pClu, const Lorentz5Momentum &p0Q1, const bool toHadron1, const bool toHadron2, Lorentz5Momentum &pClu1, Lorentz5Momentum &pClu2, Lorentz5Momentum &pQ1, Lorentz5Momentum &pQb, Lorentz5Momentum &pQ2, Lorentz5Momentum &pQ2b) const
Calculate the final kinematics of a heavy cluster decay C->C1 + C2, if not already performed by drawN...
Herwig::ClusterFissioner::produceHadron
PPair produceHadron(tcPDPtr hadron, tPPtr newPtr, const Lorentz5Momentum &a, const LorentzPoint &b) const
Produces a hadron and returns the flavour drawn from the vacuum.
Herwig::ClusterFissioner::persistentOutput
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
Herwig::ClusterFissioner::hadronSelector
HadronSelectorPtr hadronSelector() const
Access to the hadron selector.
Definition:
ClusterFissioner.h:366
Herwig::ClusterFissioner::operator=
ClusterFissioner & operator=(const ClusterFissioner &)=delete
Private and non-existent assignment operator.
Herwig::ClusterFissioner::_kinematicThresholdChoice
int _kinematicThresholdChoice
Flag to choose static or dynamic kinematic thresholds in cluster splittings.
Definition:
ClusterFissioner.h:455
Herwig::ClusterFissioner::_enhanceSProb
int _enhanceSProb
Flag that switches between no strangeness enhancement, scaling enhancement, and exponential enhanceme...
Definition:
ClusterFissioner.h:478
Herwig::ClusterFissioner::ClusterFissioner
ClusterFissioner()
Default constructor.
Herwig::ClusterFissioner::drawChildMass
Energy drawChildMass(const Energy M, const Energy m1, const Energy m2, const Energy m, const double exp, const bool soft) const
Produces the mass of a child cluster.
Herwig::ClusterFissioner::drawNewFlavour
virtual void drawNewFlavour(PPtr &newPtr1, PPtr &newPtr2, const ClusterPtr &cluster) const
Draw a new flavour for the given cluster; currently defaults to the default model.
Definition:
ClusterFissioner.h:230
Herwig::ClusterFissioner::calculatePositions
void calculatePositions(const Lorentz5Momentum &pClu, const LorentzPoint &positionClu, const Lorentz5Momentum &pClu1, const Lorentz5Momentum &pClu2, LorentzPoint &positionClu1, LorentzPoint &positionClu2) const
Determine the positions of the two children clusters.
Herwig::ClusterFissioner::clone
virtual IBPtr clone() const
Make a simple clone of this object.
Herwig::ClusterFissioner::fission
tPVector fission(ClusterVector &clusters, bool softUEisOn)
Splits the clusters which are too heavy.
Herwig::ClusterFissioner::pSplitExotic
double pSplitExotic() const
Cluster splitting paramater for exotic particles.
Definition:
ClusterFissioner.h:391
Herwig::ClusterFissioner::_m0Fission
Energy _m0Fission
Parameter that governs the strangeness enhancement scaling.
Definition:
ClusterFissioner.h:483
Herwig::ClusterFissioner::_btClM
Energy _btClM
Parameter used (2/b) for the beam cluster mass generation.
Definition:
ClusterFissioner.h:462
Herwig::ClusterFissioner::btClM
Energy btClM() const
Access to soft-cluster parameter.
Definition:
ClusterFissioner.h:371
Herwig::ClusterFissioner::_kappa
Tension _kappa
The string constant.
Definition:
ClusterFissioner.h:472
Herwig::ClusterFissioner::PPair
pair< PPtr, PPtr > PPair
Definition for easy passing of two particles.
Definition:
ClusterFissioner.h:178
Herwig::ClusterFissioner::drawNewFlavour
void drawNewFlavour(PPtr &newPtrPos, PPtr &newPtrNeg) const
Returns the new quark-antiquark pair needed for fission of a heavy cluster.
Herwig::ClusterFissioner::pSplitBottom
double pSplitBottom() const
Cluster splitting paramater for bottom quarks.
Definition:
ClusterFissioner.h:381
Herwig::ClusterFissioner::ProbablityFunction
bool ProbablityFunction(double scale, double threshold)
Smooth probability for dynamic threshold cuts: @scale the current scale, e.g.
Herwig::ClusterFissioner::drawNewFlavourEnhanced
void drawNewFlavourEnhanced(PPtr &newPtrPos, PPtr &newPtrNeg, Energy2 mass2) const
Returns the new quark-antiquark pair needed for fission of a heavy cluster.
Herwig::ClusterFissioner::isHeavy
bool isHeavy(tcClusterPtr)
Check if a cluster is heavy enough to split again.
Herwig::ClusterFissioner::produceCluster
PPair produceCluster(tPPtr ptrQ, tPPtr newPtr, const Lorentz5Momentum &a, const LorentzPoint &b, const Lorentz5Momentum &c, const Lorentz5Momentum &d, const bool rem, tPPtr spect=tPPtr(), bool remSpect=false) const
Produces a cluster from the flavours passed in.
Herwig::ClusterFissioner::fullclone
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Herwig::ClusterFissioner::cutThree
virtual cutType cutThree(ClusterPtr &, tPVector &finalhadrons, bool softUEisOn)
Split three-component cluster.
Herwig::ClusterFissioner::_maxScale
const double _maxScale
Constant variable which stops the scale from being to large, and not worth calculating.
Definition:
ClusterFissioner.h:495
ThePEG::Interfaced
ThePEG::PersistentIStream
ThePEG::PersistentOStream
Herwig::ClusterVector
vector< ClusterPtr > ClusterVector
This file contains the typedef declarations used in Hadronization.
Definition:
CluHadConfig.h:38
Herwig::CheckId::isExotic
bool isExotic(tcPDPtr par1, tcPDPtr par2=PDPtr(), tcPDPtr par3=PDPtr())
Return true, if any of the possible input particle pointer is an exotic quark, e.g.
Herwig::CheckId::hasCharm
bool hasCharm(tcPDPtr par1, tcPDPtr par2=PDPtr(), tcPDPtr par3=PDPtr())
Return true if any of the possible three input particles has c-flavour; false otherwise....
Herwig::CheckId::hasBottom
bool hasBottom(tcPDPtr par1, tcPDPtr par2=PDPtr(), tcPDPtr par3=PDPtr())
Return true if any of the possible three input particles has b-flavour; false otherwise.
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
ThePEG
ThePEG::tPPtr
ThePEG::Ptr< Particle >::transient_pointer tPPtr
ThePEG::IBPtr
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
ThePEG::tPVector
vector< tPPtr > tPVector
ThePEG::PPtr
ThePEG::Ptr< Particle >::pointer PPtr
ThePEG::tcPDPtr
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
Generated on Thu Jun 20 2024 17:50:52 for Herwig by
1.9.6