Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8309417
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
197 KB
Subscribers
None
View Options
diff
--
git
a
/
MatrixElement
/
MEMinBias
.
cc
b
/
MatrixElement
/
MEMinBias
.
cc
---
a
/
MatrixElement
/
MEMinBias
.
cc
+++
b
/
MatrixElement
/
MEMinBias
.
cc
@@
-
1
,
279
+
1
,
295
@@
//
-*-
C
++
-*-
//
//
This
is
the
implementation
of
the
non
-
inlined
,
non
-
templated
member
//
functions
of
the
MEMinBias
class
.
//
#include "MEMinBias.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Utilities/SimplePhaseSpace.h"
//
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Handlers/StandardXComb.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Handlers/SamplerBase.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using
namespace
Herwig
;
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/MatrixElement/Tree2toNDiagram.h"
inline
bool
checkValence
(
int
i
,
int
side
,
Ptr
<
StandardEventHandler
>
::
tptr
eh
){
//
Inline
function
to
check
for
valence
quarks
of
the
beam
.
//
i
:
pdgid
of
quark
//
side
:
beam
side
//
eh
:
pointer
to
the
eventhandler
int
beam
=
(
side
==
0
)
?
eh
->
incoming
()
.
first
->
id
()
:
eh
->
incoming
()
.
second
->
id
();
vector
<
int
>
val
;
-
if
(
beam
==
ParticleID
::
pplus
||
beam
==
ParticleID
::
n0
)
val
=
{
1
,
2
};
-
if
(
beam
==
ParticleID
::
pbarminus
||
beam
==
ParticleID
::
nbar0
)
val
=
{
-
1
,
-
2
};
-
if
(
val
.
size
()
==
0
)
-
{
cerr
<<
"
\n\n
MEMinBias: Valence Quarks not defined for pid "
<<
beam
;
assert
(
false
);}
-
for
(
auto
v
:
val
)
if
(
v
==
i
)
return
true
;
+
switch
(
beam
)
{
+
case
ParticleID
::
pplus
:
+
case
ParticleID
::
n0
:
+
val
=
{
1
,
2
};
+
break
;
+
case
ParticleID
::
pbarminus
:
+
case
ParticleID
::
nbar0
:
+
val
=
{
-
1
,
-
2
};
+
break
;
+
case
ParticleID
::
piplus
:
+
val
=
{
-
1
,
2
};
+
break
;
+
case
ParticleID
::
piminus
:
+
val
=
{
1
,
-
2
};
+
break
;
+
default
:
+
cerr
<<
"
\n\n
MEMinBias: Valence Quarks not defined for pid "
<<
beam
;
+
assert
(
false
);
+
};
+
for
(
const
int
&
v
:
val
)
+
if
(
v
==
i
)
return
true
;
return
false
;
}
void
MEMinBias
::
getDiagrams
()
const
{
int
maxflav
(
2
);
//
Pomeron
data
tcPDPtr
pom
=
getParticleData
(
990
);
Ptr
<
StandardEventHandler
>
::
tptr
eh
=
dynamic_ptr_cast
<
Ptr
<
StandardEventHandler
>
::
tptr
>
(
generator
()
->
eventHandler
());
for
(
int
i
=
1
;
i
<=
maxflav
;
++
i
)
{
for
(
int
j
=
1
;
j
<=
i
;
++
j
){
tcPDPtr
q1
=
getParticleData
(
i
);
tcPDPtr
q1b
=
q1
->
CC
();
tcPDPtr
q2
=
getParticleData
(
j
);
tcPDPtr
q2b
=
q2
->
CC
();
//
For
each
flavour
we
add
:
//
qq
->
qq
if
(
!
onlyValQuarks_
)
add
(
new_ptr
((
Tree2toNDiagram
(
3
),
q1
,
pom
,
q2
,
1
,
q1
,
2
,
q2
,
-
1
)));
else
if
(
checkValence
(
i
,
0
,
eh
)
&&
checkValence
(
j
,
1
,
eh
)
)
add
(
new_ptr
((
Tree2toNDiagram
(
3
),
q1
,
pom
,
q2
,
1
,
q1
,
2
,
q2
,
-
1
)));
//
qqb
->
qqb
if
(
!
onlyValQuarks_
)
add
(
new_ptr
((
Tree2toNDiagram
(
3
),
q1
,
pom
,
q2b
,
1
,
q1
,
2
,
q2b
,
-
2
)));
else
if
(
checkValence
(
i
,
0
,
eh
)
&&
checkValence
(
-
j
,
1
,
eh
)
)
add
(
new_ptr
((
Tree2toNDiagram
(
3
),
q1
,
pom
,
q2b
,
1
,
q1
,
2
,
q2b
,
-
2
)));
//
qbqb
->
qbqb
if
(
!
onlyValQuarks_
)
add
(
new_ptr
((
Tree2toNDiagram
(
3
),
q1b
,
pom
,
q2b
,
1
,
q1b
,
2
,
q2b
,
-
3
)));
else
if
(
checkValence
(
-
i
,
0
,
eh
)
&&
checkValence
(
-
j
,
1
,
eh
)
)
add
(
new_ptr
((
Tree2toNDiagram
(
3
),
q1b
,
pom
,
q2b
,
1
,
q1b
,
2
,
q2b
,
-
3
)));
}
}
}
Energy2
MEMinBias
::
scale
()
const
{
return
sqr
(
Scale_
);
}
int
MEMinBias
::
nDim
()
const
{
return
0
;
}
void
MEMinBias
::
setKinematics
()
{
HwMEBase
::
setKinematics
();
//
Always
call
the
base
class
method
first
.
}
bool
MEMinBias
::
generateKinematics
(
const
double
*
)
{
//
generate
the
masses
of
the
particles
for
(
int
i
=
2
,
N
=
meMomenta
()
.
size
();
i
<
N
;
++
i
)
{
meMomenta
()[
i
]
=
Lorentz5Momentum
(
mePartonData
()[
i
]
->
constituentMass
());
}
Energy
q
=
ZERO
;
try
{
q
=
SimplePhaseSpace
::
getMagnitude
(
sHat
(),
meMomenta
()[
2
]
.
mass
(),
meMomenta
()[
3
]
.
mass
());
}
catch
(
ImpossibleKinematics
&
e
)
{
return
false
;
}
Energy
pt
=
ZERO
;
meMomenta
()[
2
]
.
setVect
(
Momentum3
(
pt
,
pt
,
q
));
meMomenta
()[
3
]
.
setVect
(
Momentum3
(
-
pt
,
-
pt
,
-
q
));
meMomenta
()[
2
]
.
rescaleEnergy
();
meMomenta
()[
3
]
.
rescaleEnergy
();
jacobian
(
1.0
);
return
true
;
}
double
MEMinBias
::
correctionweight
()
const
{
//
Here
we
calculate
the
weight
to
restore
the
inelastic
-
diffractiveXSec
//
given
by
the
MPIHandler
.
//
First
get
the
eventhandler
to
get
the
current
cross
sections
.
Ptr
<
StandardEventHandler
>
::
tptr
eh
=
dynamic_ptr_cast
<
Ptr
<
StandardEventHandler
>
::
tptr
>
(
generator
()
->
eventHandler
());
//
All
diffractive
processes
make
use
of
this
ME
.
//
The
static
map
can
be
used
to
collect
all
the
sumOfWeights
.
static
map
<
XCombPtr
,
double
>
weightsmap
;
weightsmap
[
lastXCombPtr
()]
=
lastXComb
()
.
stats
()
.
sumWeights
();
//
Define
static
variable
to
keep
trac
of
reweighting
static
double
rew_
=
1.
;
static
int
countUpdateWeight
=
50
;
static
double
sumRew
=
0.
;
static
double
countN
=
0
;
//
if
we
produce
events
we
count
if
(
eh
->
integratedXSec
()
>
ZERO
)
sumRew
+=
rew_
;
if
(
eh
->
integratedXSec
()
>
ZERO
)
countN
+=
1.
;
if
(
countUpdateWeight
<
countN
){
//
Summing
all
diffractive
processes
(
various
initial
states
)
double
sum
=
0.
;
for
(
auto
xx
:
weightsmap
){
sum
+=
xx
.
second
;
}
double
avRew
=
sumRew
/
countN
;
CrossSection
XS_have
=
eh
->
sampler
()
->
maxXSec
()
/
eh
->
sampler
()
->
attempts
()
*
sum
;
CrossSection
XS_wanted
=
MPIHandler_
->
nonDiffractiveXSec
();
double
deltaN
=
50
;
//
Cross
section
without
reweighting
:
XS_norew
//
XS_have
=
avcsNorm2
*
XS_norew
(
for
large
N
)
//
We
want
to
determine
the
rew
that
allows
to
get
the
wanted
XS
.
//
In
deltaN
points
we
want
(
left
)
and
we
get
(
right
):
//
XS_wanted
*
(
countN
+
deltaN
)
=
XS_have
*
countN
+
rew
*
deltaN
*
XS_norew
//
Solve
for
rew
:
rew_
=
avRew
*
(
XS_wanted
*
(
countN
+
deltaN
)
-
XS_have
*
countN
)
/
(
XS_have
*
deltaN
);
countUpdateWeight
+=
deltaN
;
}
//
Make
sure
we
dont
produce
negative
weights
.
//
TODO
:
write
finalize
method
that
checks
if
reweighting
was
performed
correctly
.
rew_
=
max
(
rew_
,
0.000001
);
rew_
=
min
(
rew_
,
10000.0
);
return
rew_
;
}
double
MEMinBias
::
me2
()
const
{
//
tuned
so
it
gives
the
correct
normalization
for
xmin
=
0.11
return
csNorm_
*
(
sqr
(
generator
()
->
maximumCMEnergy
())
/
GeV2
);
}
CrossSection
MEMinBias
::
dSigHatDR
()
const
{
return
me2
()
*
jacobian
()
/
sHat
()
*
sqr
(
hbarc
)
*
correctionweight
();
}
unsigned
int
MEMinBias
::
orderInAlphaS
()
const
{
return
2
;
}
unsigned
int
MEMinBias
::
orderInAlphaEW
()
const
{
return
0
;
}
Selector
<
MEBase
::
DiagramIndex
>
MEMinBias
::
diagrams
(
const
DiagramVector
&
diags
)
const
{
Selector
<
DiagramIndex
>
sel
;
for
(
DiagramIndex
i
=
0
;
i
<
diags
.
size
();
++
i
)
sel
.
insert
(
1.0
,
i
);
return
sel
;
}
Selector
<
const
ColourLines
*>
MEMinBias
::
colourGeometries
(
tcDiagPtr
diag
)
const
{
static
ColourLines
qq
(
"1 4, 3 5"
);
static
ColourLines
qqb
(
"1 4, -3 -5"
);
static
ColourLines
qbqb
(
"-1 -4, -3 -5"
);
Selector
<
const
ColourLines
*>
sel
;
switch
(
diag
->
id
()){
case
-
1
:
sel
.
insert
(
1.0
,
&
qq
);
break
;
case
-
2
:
sel
.
insert
(
1.0
,
&
qqb
);
break
;
case
-
3
:
sel
.
insert
(
1.0
,
&
qbqb
);
break
;
}
return
sel
;
}
IBPtr
MEMinBias
::
clone
()
const
{
return
new_ptr
(
*
this
);
}
IBPtr
MEMinBias
::
fullclone
()
const
{
return
new_ptr
(
*
this
);
}
//
The
following
static
variable
is
needed
for
the
type
//
description
system
in
ThePEG
.
DescribeClass
<
MEMinBias
,
HwMEBase
>
describeHerwigMEMinBias
(
"Herwig::MEMinBias"
,
"HwMEHadron.so"
);
void
MEMinBias
::
persistentOutput
(
PersistentOStream
&
os
)
const
{
os
<<
csNorm_
<<
ounit
(
Scale_
,
GeV
)
<<
MPIHandler_
;
}
void
MEMinBias
::
persistentInput
(
PersistentIStream
&
is
,
int
)
{
is
>>
csNorm_
>>
iunit
(
Scale_
,
GeV
)
>>
MPIHandler_
;
}
void
MEMinBias
::
Init
()
{
static
ClassDocumentation
<
MEMinBias
>
documentation
(
"There is no documentation for the MEMinBias class"
);
static
Parameter
<
MEMinBias
,
double
>
interfacecsNorm
(
"csNorm"
,
"Normalization of the min-bias cross section."
,
&
MEMinBias
::
csNorm_
,
1.0
,
0.0
,
100.0
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
MEMinBias
,
Energy
>
interfaceScale
(
"Scale"
,
"Scale for the Min Bias matrix element."
,
&
MEMinBias
::
Scale_
,
GeV
,
2.0
*
GeV
,
0.0
*
GeV
,
100.0
*
GeV
,
false
,
false
,
Interface
::
limited
);
static
Reference
<
MEMinBias
,
UEBase
>
interfaceMPIHandler
(
"MPIHandler"
,
"The object that administers all additional scatterings."
,
&
MEMinBias
::
MPIHandler_
,
false
,
false
,
true
,
true
);
static
Switch
<
MEMinBias
,
bool
>
interfaceOnlyVal
(
"OnlyValence"
,
"Allow the dummy process to only extract valence quarks."
,
&
MEMinBias
::
onlyValQuarks_
,
false
,
false
,
false
);
static
SwitchOption
interfaceOnlyValYes
(
interfaceOnlyVal
,
"Yes"
,
""
,
true
);
static
SwitchOption
interfaceOnlyValNo
(
interfaceOnlyVal
,
"No"
,
""
,
false
);
}
diff
--
git
a
/
PDF
/
HwRemDecayer
.
cc
b
/
PDF
/
HwRemDecayer
.
cc
---
a
/
PDF
/
HwRemDecayer
.
cc
+++
b
/
PDF
/
HwRemDecayer
.
cc
@@
-
1
,
2020
+
1
,
2028
@@
//
-*-
C
++
-*-
//
//
HwRemDecayer
.
cc
is
a
part
of
Herwig
-
A
multi
-
purpose
Monte
Carlo
event
generator
//
Copyright
(
C
)
2002
-
2019
The
Herwig
Collaboration
//
//
Herwig
is
licenced
under
version
3
of
the
GPL
,
see
COPYING
for
details
.
//
Please
respect
the
MCnet
academic
guidelines
,
see
GUIDELINES
for
details
.
//
//
//
This
is
the
implementation
of
the
non
-
inlined
,
non
-
templated
member
//
functions
of
the
HwRemDecayer
class
.
//
#include "HwRemDecayer.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Utilities/UtilityBase.h"
#include "ThePEG/Utilities/SimplePhaseSpace.h"
#include "ThePEG/Utilities/Throw.h"
#include "Herwig/Utilities/EnumParticles.h"
#include "Herwig/Shower/ShowerHandler.h"
using
namespace
Herwig
;
namespace
{
const
bool
dbg
=
false
;
void
reShuffle
(
Lorentz5Momentum
&
p1
,
Lorentz5Momentum
&
p2
,
Energy
m1
,
Energy
m2
){
Lorentz5Momentum
ptotal
(
p1
+
p2
);
ptotal
.
rescaleMass
();
if
(
ptotal
.
m
()
<
m1
+
m2
)
{
if
(
dbg
)
cerr
<<
"Not enough energy to perform reshuffling
\n
"
;
throw
HwRemDecayer
::
ExtraSoftScatterVeto
();
}
Boost
boostv
=
-
ptotal
.
boostVector
();
ptotal
.
boost
(
boostv
);
p1
.
boost
(
boostv
);
//
set
the
masses
and
energies
,
p1
.
setMass
(
m1
);
p1
.
setE
(
0.5
/
ptotal
.
m
()
*
(
ptotal
.
m2
()
+
sqr
(
m1
)
-
sqr
(
m2
)));
p1
.
rescaleRho
();
//
boost
back
to
the
lab
p1
.
boost
(
-
boostv
);
p2
.
boost
(
boostv
);
//
set
the
masses
and
energies
,
p2
.
setMass
(
m2
);
p2
.
setE
(
0.5
/
ptotal
.
m
()
*
(
ptotal
.
m2
()
+
sqr
(
m2
)
-
sqr
(
m1
)));
p2
.
rescaleRho
();
//
boost
back
to
the
lab
p2
.
boost
(
-
boostv
);
}
}
void
HwRemDecayer
::
initialize
(
pair
<
tRemPPtr
,
tRemPPtr
>
rems
,
tPPair
beam
,
Step
&
step
,
Energy
forcedSplitScale
)
{
//
the
step
thestep
=
&
step
;
//
valence
content
of
the
hadrons
theContent
.
first
=
getHadronContent
(
beam
.
first
);
theContent
.
second
=
getHadronContent
(
beam
.
second
);
//
momentum
extracted
from
the
hadrons
theUsed
.
first
=
Lorentz5Momentum
();
theUsed
.
second
=
Lorentz5Momentum
();
theMaps
.
first
.
clear
();
theMaps
.
second
.
clear
();
theX
.
first
=
0.0
;
theX
.
second
=
0.0
;
theRems
=
rems
;
_forcedSplitScale
=
forcedSplitScale
;
//
check
remnants
attached
to
the
right
hadrons
if
(
(
theRems
.
first
&&
parent
(
theRems
.
first
)
!=
beam
.
first
)
||
(
theRems
.
second
&&
parent
(
theRems
.
second
)
!=
beam
.
second
)
)
throw
Exception
()
<<
"Remnant order wrong in "
<<
"HwRemDecayer::initialize(...)"
<<
Exception
::
runerror
;
return
;
}
void
HwRemDecayer
::
split
(
tPPtr
parton
,
HadronContent
&
content
,
tRemPPtr
rem
,
Lorentz5Momentum
&
used
,
PartnerMap
&
partners
,
tcPDFPtr
pdf
,
bool
first
)
{
theBeam
=
parent
(
rem
);
theBeamData
=
dynamic_ptr_cast
<
Ptr
<
BeamParticleData
>
::
const_pointer
>
(
theBeam
->
dataPtr
());
double
currentx
=
parton
->
momentum
()
.
rho
()
/
theBeam
->
momentum
()
.
rho
();
double
check
=
rem
==
theRems
.
first
?
theX
.
first
:
theX
.
second
;
check
+=
currentx
;
if
(
1.0
-
check
<
1e-3
)
throw
ShowerHandler
::
ExtraScatterVeto
();
bool
anti
;
Lorentz5Momentum
lastp
(
parton
->
momentum
());
int
lastID
(
parton
->
id
());
Energy
oldQ
(
_forcedSplitScale
);
_pdf
=
pdf
;
-
//
do
nothing
if
already
valence
quark
+
//
do
nothing
if
already
valence
quark
if
(
first
&&
content
.
isValenceQuark
(
parton
))
{
//
set
the
extracted
value
,
because
otherwise
no
RemID
could
be
generated
.
content
.
extract
(
lastID
);
//
add
the
particle
to
the
colour
partners
partners
.
push_back
(
make_pair
(
parton
,
tPPtr
()));
//
set
the
sign
anti
=
parton
->
hasAntiColour
()
&&
parton
->
id
()
!=
ParticleID
::
g
;
if
(
rem
==
theRems
.
first
)
theanti
.
first
=
anti
;
else
theanti
.
second
=
anti
;
//
add
the
x
and
return
if
(
rem
==
theRems
.
first
)
theX
.
first
+=
currentx
;
else
theX
.
second
+=
currentx
;
return
;
}
//
or
gluon
for
secondaries
else
if
(
!
first
&&
lastID
==
ParticleID
::
g
)
{
partners
.
push_back
(
make_pair
(
parton
,
tPPtr
()));
//
add
the
x
and
return
if
(
rem
==
theRems
.
first
)
theX
.
first
+=
currentx
;
else
theX
.
second
+=
currentx
;
return
;
}
//
if
a
sea
quark
.
antiquark
forced
splitting
to
a
gluon
//
Create
the
new
parton
with
its
momentum
and
parent
/
child
relationship
set
PPtr
newSea
;
if
(
!
(
lastID
==
ParticleID
::
g
||
lastID
==
ParticleID
::
gamma
)
)
{
newSea
=
forceSplit
(
rem
,
-
lastID
,
oldQ
,
currentx
,
lastp
,
used
,
content
);
ColinePtr
cl
=
new_ptr
(
ColourLine
());
if
(
newSea
->
dataPtr
()
->
coloured
())
{
if
(
newSea
->
id
()
>
0
)
cl
->
addColoured
(
newSea
);
else
cl
->
addAntiColoured
(
newSea
);
}
//
if
a
secondard
scatter
finished
so
return
if
(
!
first
||
content
.
isValenceQuark
(
ParticleID
::
g
)
){
partners
.
push_back
(
make_pair
(
parton
,
newSea
));
//
add
the
x
and
return
if
(
rem
==
theRems
.
first
)
theX
.
first
+=
currentx
;
else
theX
.
second
+=
currentx
;
if
(
first
)
content
.
extract
(
ParticleID
::
g
);
return
;
}
}
//
otherwise
evolve
back
to
valence
//
final
valence
splitting
PPtr
newValence
=
forceSplit
(
rem
,
lastID
!=
ParticleID
::
gamma
?
ParticleID
::
g
:
ParticleID
::
gamma
,
oldQ
,
currentx
,
lastp
,
used
,
content
);
//
extract
from
the
hadron
to
allow
remnant
to
be
determined
content
.
extract
(
newValence
->
id
());
//
case
of
a
gluon
going
into
the
hard
subprocess
if
(
lastID
==
ParticleID
::
g
)
{
partners
.
push_back
(
make_pair
(
parton
,
tPPtr
()));
anti
=
newValence
->
hasAntiColour
();
if
(
rem
==
theRems
.
first
)
theanti
.
first
=
anti
;
else
theanti
.
second
=
anti
;
parton
->
colourLine
(
!
anti
)
->
addColoured
(
newValence
,
anti
);
return
;
}
else
if
(
!
parton
->
coloured
())
{
partners
.
push_back
(
make_pair
(
parton
,
newValence
));
anti
=
newValence
->
hasAntiColour
();
ColinePtr
newLine
(
new_ptr
(
ColourLine
()));
newLine
->
addColoured
(
newValence
,
anti
);
if
(
rem
==
theRems
.
first
)
theanti
.
first
=
anti
;
else
theanti
.
second
=
anti
;
//
add
the
x
and
return
if
(
rem
==
theRems
.
first
)
theX
.
first
+=
currentx
;
else
theX
.
second
+=
currentx
;
return
;
}
//
The
valence
quark
will
always
be
connected
to
the
sea
quark
with
opposite
sign
tcPPtr
particle
;
if
(
lastID
*
newValence
->
id
()
<
0
){
particle
=
parton
;
partners
.
push_back
(
make_pair
(
newSea
,
tPPtr
()));
}
else
{
particle
=
newSea
;
partners
.
push_back
(
make_pair
(
parton
,
tPPtr
()));
}
anti
=
newValence
->
hasAntiColour
();
if
(
rem
==
theRems
.
first
)
theanti
.
first
=
anti
;
else
theanti
.
second
=
anti
;
if
(
particle
->
colourLine
())
particle
->
colourLine
()
->
addAntiColoured
(
newValence
);
if
(
particle
->
antiColourLine
())
particle
->
antiColourLine
()
->
addColoured
(
newValence
);
//
add
the
x
and
return
if
(
rem
==
theRems
.
first
)
theX
.
first
+=
currentx
;
else
theX
.
second
+=
currentx
;
return
;
}
void
HwRemDecayer
::
doSplit
(
pair
<
tPPtr
,
tPPtr
>
partons
,
pair
<
tcPDFPtr
,
tcPDFPtr
>
pdfs
,
bool
first
)
{
if
(
theRems
.
first
)
{
ParticleVector
children
=
theRems
.
first
->
children
();
for
(
unsigned
int
ix
=
0
;
ix
<
children
.
size
();
++
ix
)
{
if
(
children
[
ix
]
->
dataPtr
()
==
theRems
.
first
->
dataPtr
())
theRems
.
first
=
dynamic_ptr_cast
<
RemPPtr
>
(
children
[
ix
]);
}
}
if
(
theRems
.
second
)
{
ParticleVector
children
=
theRems
.
second
->
children
();
for
(
unsigned
int
ix
=
0
;
ix
<
children
.
size
();
++
ix
)
{
if
(
children
[
ix
]
->
dataPtr
()
==
theRems
.
second
->
dataPtr
())
theRems
.
second
=
dynamic_ptr_cast
<
RemPPtr
>
(
children
[
ix
]);
}
}
//
forced
splitting
for
first
parton
-
if
(
isPartonic
(
partons
.
first
))
{
+
if
(
isPartonic
(
partons
.
first
))
{
try
{
split
(
partons
.
first
,
theContent
.
first
,
theRems
.
first
,
theUsed
.
first
,
theMaps
.
first
,
pdfs
.
first
,
first
);
}
catch
(
ShowerHandler
::
ExtraScatterVeto
)
{
throw
ShowerHandler
::
ExtraScatterVeto
();
}
}
//
forced
splitting
for
second
parton
if
(
isPartonic
(
partons
.
second
))
{
try
{
split
(
partons
.
second
,
theContent
.
second
,
theRems
.
second
,
theUsed
.
second
,
theMaps
.
second
,
pdfs
.
second
,
first
);
//
additional
check
for
the
remnants
//
if
can
't do the rescale veto the emission
if
(
!
first
&&
partons
.
first
->
data
()
.
coloured
()
&&
partons
.
second
->
data
()
.
coloured
())
{
Lorentz5Momentum
pnew
[
2
]
=
{
theRems
.
first
->
momentum
()
-
theUsed
.
first
-
partons
.
first
->
momentum
(),
theRems
.
second
->
momentum
()
-
theUsed
.
second
-
partons
.
second
->
momentum
()};
pnew
[
0
]
.
setMass
(
getParticleData
(
theContent
.
first
.
RemID
())
->
constituentMass
());
pnew
[
0
]
.
rescaleEnergy
();
pnew
[
1
]
.
setMass
(
getParticleData
(
theContent
.
second
.
RemID
())
->
constituentMass
());
pnew
[
1
]
.
rescaleEnergy
();
for
(
unsigned
int
iy
=
0
;
iy
<
theRems
.
first
->
children
()
.
size
();
++
iy
)
pnew
[
0
]
+=
theRems
.
first
->
children
()[
iy
]
->
momentum
();
for
(
unsigned
int
iy
=
0
;
iy
<
theRems
.
second
->
children
()
.
size
();
++
iy
)
pnew
[
1
]
+=
theRems
.
second
->
children
()[
iy
]
->
momentum
();
Lorentz5Momentum
ptotal
=
theRems
.
first
->
momentum
()
-
partons
.
first
->
momentum
()
+
theRems
.
second
->
momentum
()
-
partons
.
second
->
momentum
();
//
add
x
limits
if
(
ptotal
.
m
()
<
(
pnew
[
0
]
.
m
()
+
pnew
[
1
]
.
m
())
)
{
if
(
partons
.
second
->
id
()
!=
ParticleID
::
g
){
if
(
partons
.
second
==
theMaps
.
second
.
back
()
.
first
)
theUsed
.
second
-=
theMaps
.
second
.
back
()
.
second
->
momentum
();
else
theUsed
.
second
-=
theMaps
.
second
.
back
()
.
first
->
momentum
();
thestep
->
removeParticle
(
theMaps
.
second
.
back
()
.
first
);
thestep
->
removeParticle
(
theMaps
.
second
.
back
()
.
second
);
}
theMaps
.
second
.
pop_back
();
theX
.
second
-=
partons
.
second
->
momentum
()
.
rho
()
/
parent
(
theRems
.
second
)
->
momentum
()
.
rho
();
throw
ShowerHandler
::
ExtraScatterVeto
();
}
}
}
catch
(
ShowerHandler
::
ExtraScatterVeto
){
if
(
!
partons
.
first
||
!
partons
.
second
||
!
theRems
.
first
||
!
theRems
.
second
)
throw
ShowerHandler
::
ExtraScatterVeto
();
//
case
of
the
first
forcedSplitting
worked
fine
theX
.
first
-=
partons
.
first
->
momentum
()
.
rho
()
/
parent
(
theRems
.
first
)
->
momentum
()
.
rho
();
//
case
of
the
first
interaction
//
throw
veto
immediately
,
because
event
get
rejected
anyway
.
if
(
first
)
throw
ShowerHandler
::
ExtraScatterVeto
();
//
secondary
interactions
have
to
end
on
a
gluon
,
if
parton
//
was
NOT
a
gluon
,
the
forced
splitting
particles
must
be
removed
if
(
partons
.
first
->
id
()
!=
ParticleID
::
g
)
{
if
(
partons
.
first
==
theMaps
.
first
.
back
()
.
first
)
theUsed
.
first
-=
theMaps
.
first
.
back
()
.
second
->
momentum
();
else
theUsed
.
first
-=
theMaps
.
first
.
back
()
.
first
->
momentum
();
thestep
->
removeParticle
(
theMaps
.
first
.
back
()
.
first
);
thestep
->
removeParticle
(
theMaps
.
first
.
back
()
.
second
);
}
theMaps
.
first
.
pop_back
();
throw
ShowerHandler
::
ExtraScatterVeto
();
}
}
//
veto
if
not
enough
energy
for
extraction
if
(
!
first
&&
(
theRems
.
first
->
momentum
()
.
e
()
-
partons
.
first
->
momentum
()
.
e
()
<
1.0e-3
*
MeV
||
theRems
.
second
->
momentum
()
.
e
()
-
partons
.
second
->
momentum
()
.
e
()
<
1.0e-3
*
MeV
))
{
if
(
partons
.
first
->
id
()
!=
ParticleID
::
g
)
{
if
(
partons
.
first
==
theMaps
.
first
.
back
()
.
first
)
theUsed
.
first
-=
theMaps
.
first
.
back
()
.
second
->
momentum
();
else
theUsed
.
first
-=
theMaps
.
first
.
back
()
.
first
->
momentum
();
thestep
->
removeParticle
(
theMaps
.
first
.
back
()
.
first
);
thestep
->
removeParticle
(
theMaps
.
first
.
back
()
.
second
);
}
theMaps
.
first
.
pop_back
();
if
(
partons
.
second
->
id
()
!=
ParticleID
::
g
)
{
if
(
partons
.
second
==
theMaps
.
second
.
back
()
.
first
)
theUsed
.
second
-=
theMaps
.
second
.
back
()
.
second
->
momentum
();
else
theUsed
.
second
-=
theMaps
.
second
.
back
()
.
first
->
momentum
();
thestep
->
removeParticle
(
theMaps
.
second
.
back
()
.
first
);
thestep
->
removeParticle
(
theMaps
.
second
.
back
()
.
second
);
}
theMaps
.
second
.
pop_back
();
throw
ShowerHandler
::
ExtraScatterVeto
();
}
}
void
HwRemDecayer
::
mergeColour
(
tPPtr
pold
,
tPPtr
pnew
,
bool
anti
)
const
{
ColinePtr
clnew
,
clold
;
//
save
the
corresponding
colour
lines
clold
=
pold
->
colourLine
(
anti
);
clnew
=
pnew
->
colourLine
(
!
anti
);
assert
(
clold
);
//
There
is
already
a
colour
line
(
not
the
final
diquark
)
if
(
clnew
){
if
(
(
clnew
->
coloured
()
.
size
()
+
clnew
->
antiColoured
()
.
size
())
>
1
){
if
(
(
clold
->
coloured
()
.
size
()
+
clold
->
antiColoured
()
.
size
())
>
1
){
//
join
the
colour
lines
//
I
don
't use the join method, because potentially only (anti)coloured
//
particles
belong
to
one
colour
line
if
(
clold
!=
clnew
){
//
procs
are
not
already
connected
while
(
!
clnew
->
coloured
()
.
empty
()
)
{
tPPtr
p
=
clnew
->
coloured
()[
0
];
clnew
->
removeColoured
(
p
);
clold
->
addColoured
(
p
);
}
while
(
!
clnew
->
antiColoured
()
.
empty
()
)
{
tPPtr
p
=
clnew
->
antiColoured
()[
0
];
clnew
->
removeAntiColoured
(
p
);
clold
->
addAntiColoured
(
p
);
}
}
}
else
{
//
if
pold
is
the
only
member
on
it
's
//
colour
line
,
remove
it
.
clold
->
removeColoured
(
pold
,
anti
);
//
and
add
it
to
clnew
clnew
->
addColoured
(
pold
,
anti
);
}
}
else
{
//
pnnew
is
the
only
member
on
it
's colour line.
clnew
->
removeColoured
(
pnew
,
!
anti
);
clold
->
addColoured
(
pnew
,
!
anti
);
}
}
else
{
//
there
is
no
coline
at
all
for
pnew
clold
->
addColoured
(
pnew
,
!
anti
);
}
}
void
HwRemDecayer
::
fixColours
(
PartnerMap
partners
,
bool
anti
,
double
colourDisrupt
)
const
{
PartnerMap
::
iterator
prev
;
tPPtr
pnew
,
pold
;
assert
(
partners
.
size
()
>=
2
);
PartnerMap
::
iterator
it
=
partners
.
begin
();
while
(
it
!=
partners
.
end
())
{
//
skip
the
first
one
to
have
a
partner
if
(
it
==
partners
.
begin
()){
it
++
;
continue
;
}
prev
=
it
-
1
;
//
determine
the
particles
to
work
with
pold
=
prev
->
first
;
if
(
prev
->
second
)
{
if
(
!
pold
->
coloured
())
pold
=
prev
->
second
;
else
if
(
pold
->
hasAntiColour
()
!=
anti
)
pold
=
prev
->
second
;
}
assert
(
pold
);
pnew
=
it
->
first
;
if
(
it
->
second
)
{
if
(
it
->
second
->
colourLine
(
!
anti
))
//
look
for
the
opposite
colour
pnew
=
it
->
second
;
}
assert
(
pnew
);
//
Implement
the
disruption
of
colour
connections
if
(
it
!=
partners
.
end
()
-
1
)
{
//
last
one
is
diquark
-
has
to
be
connected
//
has
to
be
inside
the
if
statement
,
so
that
the
probability
is
//
correctly
counted
:
if
(
UseRandom
::
rnd
()
<
colourDisrupt
){
if
(
!
it
->
second
){
//
check
,
whether
we
have
a
gluon
mergeColour
(
pnew
,
pnew
,
anti
);
}
else
{
if
(
pnew
==
it
->
first
)
//
be
careful
about
the
order
mergeColour
(
it
->
second
,
it
->
first
,
anti
);
else
mergeColour
(
it
->
first
,
it
->
second
,
anti
);
}
it
=
partners
.
erase
(
it
);
continue
;
}
}
//
regular
merging
mergeColour
(
pold
,
pnew
,
anti
);
//
end
of
loop
it
++
;
}
return
;
}
PPtr
HwRemDecayer
::
forceSplit
(
const
tRemPPtr
rem
,
long
child
,
Energy
&
lastQ
,
double
&
lastx
,
Lorentz5Momentum
&
pf
,
Lorentz5Momentum
&
p
,
HadronContent
&
content
)
const
{
static
const
double
eps
=
1e-6
;
//
beam
momentum
Lorentz5Momentum
beam
=
theBeam
->
momentum
();
//
the
last
scale
is
minimum
of
last
value
and
upper
limit
Energy
minQ
=
_range
*
_kinCutoff
*
sqrt
(
lastx
)
/
(
1
-
lastx
);
if
(
minQ
>
lastQ
)
lastQ
=
minQ
;
//
generate
the
new
value
of
qtilde
//
weighted
towards
the
lower
value
:
dP
/
dQ
=
1
/
Q
->
Q
(
R
)
=
//
Q0
(
Qmax
/
Q0
)
^
R
Energy
q
;
unsigned
int
ntry
=
0
,
maxtry
=
100
;
double
xExtracted
=
rem
==
theRems
.
first
?
theX
.
first
:
theX
.
second
;
double
zmin
=
lastx
/
(
1.
-
xExtracted
)
,
zmax
,
yy
;
if
(
1
-
lastx
<
eps
)
throw
ShowerHandler
::
ExtraScatterVeto
();
do
{
q
=
minQ
*
pow
(
lastQ
/
minQ
,
UseRandom
::
rnd
());
yy
=
1.
+
0.5
*
sqr
(
_kinCutoff
/
q
);
zmax
=
yy
-
sqrt
(
sqr
(
yy
)
-
1.
);
++
ntry
;
}
while
(
zmax
<
zmin
&&
ntry
<
maxtry
);
if
(
ntry
==
maxtry
)
throw
ShowerHandler
::
ExtraScatterVeto
();
if
(
zmax
-
zmin
<
eps
)
throw
ShowerHandler
::
ExtraScatterVeto
();
//
now
generate
z
as
in
FORTRAN
HERWIG
//
use
y
=
ln
(
z
/
(
1
-
z
))
as
integration
variable
double
ymin
=
log
(
zmin
/
(
1.
-
zmin
));
double
ymax
=
log
(
zmax
/
(
1.
-
zmax
));
double
dely
=
ymax
-
ymin
;
unsigned
int
nz
=
_nbinmax
;
dely
/=
nz
;
yy
=
ymin
+
0.5
*
dely
;
vector
<
int
>
ids
;
bool
qed
=
child
==
22
;
if
(
child
==
21
||
child
==
22
)
{
ids
=
content
.
flav
;
for
(
unsigned
int
ix
=
0
;
ix
<
ids
.
size
();
++
ix
)
ids
[
ix
]
*=
content
.
sign
;
}
else
if
(
abs
(
child
)
<=
6
)
{
ids
.
push_back
(
ParticleID
::
g
);
}
else
{
ids
.
push_back
(
ParticleID
::
gamma
);
qed
=
true
;
}
//
probabilities
of
the
different
types
of
possible
splitting
map
<
long
,
pair
<
double
,
vector
<
double
>
>
>
partonprob
;
double
ptotal
(
0.
);
for
(
unsigned
int
iflav
=
0
;
iflav
<
ids
.
size
();
++
iflav
)
{
//
only
do
each
parton
once
if
(
partonprob
.
find
(
ids
[
iflav
])
!=
partonprob
.
end
())
continue
;
//
particle
data
object
tcPDPtr
in
=
getParticleData
(
ids
[
iflav
]);
double
psum
(
0.
);
vector
<
double
>
prob
;
for
(
unsigned
int
iz
=
0
;
iz
<
nz
;
++
iz
)
{
double
ez
=
exp
(
yy
);
double
wr
=
1.
+
ez
;
double
zr
=
wr
/
ez
;
double
wz
=
1.
/
wr
;
double
zz
=
wz
*
ez
;
double
coup
=
!
qed
?
_alphaS
->
value
(
sqr
(
max
(
wz
*
q
,
_kinCutoff
)))
:
_alphaEM
->
value
(
sqr
(
max
(
wz
*
q
,
_kinCutoff
)));
double
az
=
wz
*
zz
*
coup
;
//
g
->
q
qbar
if
(
ids
[
iflav
]
==
ParticleID
::
g
||
ids
[
iflav
]
==
ParticleID
::
gamma
)
{
//
calculate
splitting
function
//
SP
as
q
is
always
less
than
forcedSplitScale
,
the
pdf
scale
is
fixed
//
pdfval
=
_pdf
->
xfx
(
theBeamData
,
in
,
sqr
(
q
),
lastx
*
zr
);
double
pdfval
=
_pdf
->
xfx
(
theBeamData
,
in
,
sqr
(
_forcedSplitScale
),
lastx
*
zr
);
if
(
pdfval
>
0.
)
psum
+=
pdfval
*
az
*
0.5
*
(
sqr
(
zz
)
+
sqr
(
wz
));
}
//
q
->
q
g
else
{
//
calculate
splitting
function
//
SP
as
q
is
always
less
than
forcedSplitScale
,
the
pdf
scale
is
fixed
//
pdfval
=
_pdf
->
xfx
(
theBeamData
,
in
,
sqr
(
q
),
lastx
*
zr
);
double
pdfval
=
_pdf
->
xfx
(
theBeamData
,
in
,
sqr
(
_forcedSplitScale
),
lastx
*
zr
);
if
(
pdfval
>
0.
)
psum
+=
pdfval
*
az
*
4.
/
3.
*
(
1.
+
sqr
(
wz
))
*
zr
;
}
if
(
psum
>
0.
)
prob
.
push_back
(
psum
);
yy
+=
dely
;
}
if
(
psum
>
0.
)
partonprob
[
ids
[
iflav
]]
=
make_pair
(
psum
,
prob
);
ptotal
+=
psum
;
}
//
select
the
flavour
if
(
ptotal
==
0.
)
throw
ShowerHandler
::
ExtraScatterVeto
();
ptotal
*=
UseRandom
::
rnd
();
map
<
long
,
pair
<
double
,
vector
<
double
>
>
>
::
const_iterator
pit
;
for
(
pit
=
partonprob
.
begin
();
pit
!=
partonprob
.
end
();
++
pit
)
{
if
(
pit
->
second
.
first
>=
ptotal
)
break
;
else
ptotal
-=
pit
->
second
.
first
;
}
if
(
pit
==
partonprob
.
end
())
throw
Exception
()
<<
"Can't select parton for forced backward evolution in "
<<
"HwRemDecayer::forceSplit"
<<
Exception
::
eventerror
;
//
select
z
unsigned
int
iz
=
0
;
for
(;
iz
<
pit
->
second
.
second
.
size
();
++
iz
)
{
if
(
pit
->
second
.
second
[
iz
]
>
ptotal
)
break
;
}
if
(
iz
==
pit
->
second
.
second
.
size
())
--
iz
;
double
ey
=
exp
(
ymin
+
dely
*
(
float
(
iz
+
1
)
-
UseRandom
::
rnd
()));
double
z
=
ey
/
(
1.
+
ey
);
Energy2
pt2
=
sqr
((
1.
-
z
)
*
q
)
-
z
*
sqr
(
_kinCutoff
);
//
create
the
particle
if
(
pit
->
first
!=
ParticleID
::
g
&&
pit
->
first
!=
ParticleID
::
gamma
)
child
=
pit
->
first
;
PPtr
parton
=
getParticleData
(
child
)
->
produceParticle
();
Energy2
emittedm2
=
sqr
(
parton
->
dataPtr
()
->
constituentMass
());
//
Now
boost
pcm
and
pf
to
z
only
frame
Lorentz5Momentum
p_ref
=
Lorentz5Momentum
(
ZERO
,
beam
.
vect
());
Lorentz5Momentum
n_ref
=
Lorentz5Momentum
(
ZERO
,
-
beam
.
vect
());
//
generate
phi
and
compute
pt
of
branching
double
phi
=
Constants
::
twopi
*
UseRandom
::
rnd
();
Energy
pt
=
sqrt
(
pt2
);
Lorentz5Momentum
qt
=
LorentzMomentum
(
pt
*
cos
(
phi
),
pt
*
sin
(
phi
),
ZERO
,
ZERO
);
Axis
axis
(
p_ref
.
vect
()
.
unit
());
if
(
axis
.
perp2
()
>
0.
)
{
LorentzRotation
rot
;
double
sinth
(
sqrt
(
sqr
(
axis
.
x
())
+
sqr
(
axis
.
y
())));
rot
.
setRotate
(
acos
(
axis
.
z
()),
Axis
(
-
axis
.
y
()
/
sinth
,
axis
.
x
()
/
sinth
,
0.
));
qt
.
transform
(
rot
);
}
//
compute
alpha
for
previous
particle
Energy2
p_dot_n
=
p_ref
*
n_ref
;
double
lastalpha
=
pf
*
n_ref
/
p_dot_n
;
Lorentz5Momentum
qtout
=
qt
;
Energy2
qtout2
=-
qt
*
qt
;
double
alphaout
=
(
1.
-
z
)
/
z
*
lastalpha
;
double
betaout
=
0.5
*
(
emittedm2
+
qtout2
)
/
alphaout
/
p_dot_n
;
Lorentz5Momentum
k
=
alphaout
*
p_ref
+
betaout
*
n_ref
+
qtout
;
k
.
rescaleMass
();
parton
->
set5Momentum
(
k
);
pf
+=
k
;
lastQ
=
q
;
lastx
/=
z
;
p
+=
parton
->
momentum
();
thestep
->
addDecayProduct
(
rem
,
parton
,
false
);
return
parton
;
}
void
HwRemDecayer
::
setRemMasses
(
PPair
diquarks
)
const
{
//
get
the
masses
of
the
remnants
Energy
mrem
[
2
];
Lorentz5Momentum
ptotal
,
pnew
[
2
];
vector
<
tRemPPtr
>
theprocessed
;
theprocessed
.
push_back
(
theRems
.
first
);
theprocessed
.
push_back
(
theRems
.
second
);
//
one
remnant
in
e
.
g
.
DIS
if
(
!
theprocessed
[
0
]
||
!
theprocessed
[
1
])
{
tRemPPtr
rem
=
theprocessed
[
0
]
?
theprocessed
[
0
]
:
theprocessed
[
1
];
Lorentz5Momentum
deltap
(
rem
->
momentum
());
//
find
the
diquark
and
momentum
we
still
need
in
the
energy
tPPtr
diquark
=
theprocessed
[
0
]
?
diquarks
.
first
:
diquarks
.
second
;
vector
<
PPtr
>
progenitors
;
for
(
unsigned
int
ix
=
0
;
ix
<
rem
->
children
()
.
size
();
++
ix
)
{
if
(
rem
->
children
()[
ix
]
==
diquark
)
continue
;
progenitors
.
push_back
(
rem
->
children
()[
ix
]);
deltap
-=
rem
->
children
()[
ix
]
->
momentum
();
}
//
now
find
the
total
momentum
of
the
hadronic
final
-
state
to
//
reshuffle
against
//
find
the
hadron
for
this
remnant
tPPtr
hadron
=
rem
;
do
hadron
=
hadron
->
parents
()[
0
];
while
(
!
hadron
->
parents
()
.
empty
());
//
find
incoming
parton
to
hard
process
from
this
hadron
tPPtr
hardin
=
generator
()
->
currentEvent
()
->
primaryCollision
()
->
incoming
()
.
first
==
hadron
?
generator
()
->
currentEvent
()
->
primarySubProcess
()
->
incoming
()
.
first
:
generator
()
->
currentEvent
()
->
primarySubProcess
()
->
incoming
()
.
second
;
hadron
=
rem
->
parents
()[
0
];
while
(
hadron
->
id
()
==
ParticleID
::
Remnant
)
hadron
=
hadron
->
parents
()[
0
];
tPPtr
parent
=
hardin
;
vector
<
PPtr
>
tempprog
;
//
find
the
outgoing
particles
emitted
from
the
backward
shower
do
{
assert
(
!
parent
->
parents
()
.
empty
());
tPPtr
newparent
=
parent
->
parents
()[
0
];
if
(
newparent
==
hadron
)
break
;
for
(
unsigned
int
ix
=
0
;
ix
<
newparent
->
children
()
.
size
();
++
ix
)
{
if
(
newparent
->
children
()[
ix
]
!=
parent
)
findChildren
(
newparent
->
children
()[
ix
],
tempprog
);
}
parent
=
newparent
;
}
while
(
parent
!=
hadron
);
//
add
to
list
of
potential
particles
to
reshuffle
against
in
right
order
for
(
unsigned
int
ix
=
tempprog
.
size
();
ix
>
0
;
--
ix
)
progenitors
.
push_back
(
tempprog
[
ix
-
1
]);
//
final
-
state
particles
which
are
colour
connected
tColinePair
lines
=
make_pair
(
hardin
->
colourLine
(),
hardin
->
antiColourLine
());
vector
<
PPtr
>
others
;
for
(
ParticleVector
::
const_iterator
cit
=
generator
()
->
currentEvent
()
->
primarySubProcess
()
->
outgoing
()
.
begin
();
cit
!=
generator
()
->
currentEvent
()
->
primarySubProcess
()
->
outgoing
()
.
end
();
++
cit
)
{
//
colour
connected
if
(
lines
.
first
&&
lines
.
first
==
(
**
cit
)
.
colourLine
())
{
findChildren
(
*
cit
,
progenitors
);
continue
;
}
//
anticolour
connected
if
(
lines
.
second
&&
lines
.
second
==
(
**
cit
)
.
antiColourLine
())
{
findChildren
(
*
cit
,
progenitors
);
continue
;
}
//
not
connected
for
(
unsigned
int
ix
=
0
;
ix
<
(
**
cit
)
.
children
()
.
size
();
++
ix
)
others
.
push_back
((
**
cit
)
.
children
()[
ix
]);
}
//
work
out
how
much
of
the
system
needed
for
rescaling
unsigned
int
iloc
=
0
;
Lorentz5Momentum
psystem
,
ptotal
;
do
{
psystem
+=
progenitors
[
iloc
]
->
momentum
();
ptotal
=
psystem
+
deltap
;
ptotal
.
rescaleMass
();
psystem
.
rescaleMass
();
++
iloc
;
if
(
ptotal
.
mass
()
>
psystem
.
mass
()
+
diquark
->
mass
()
&&
psystem
.
mass
()
>
1
*
MeV
&&
DISRemnantOpt_
<
2
&&
ptotal
.
e
()
>
0.
*
GeV
)
break
;
}
while
(
iloc
<
progenitors
.
size
());
if
(
ptotal
.
mass
()
>
psystem
.
mass
()
+
diquark
->
mass
())
--
iloc
;
if
(
iloc
==
progenitors
.
size
())
{
//
try
touching
the
lepton
in
dis
as
a
last
restort
for
(
unsigned
int
ix
=
0
;
ix
<
others
.
size
();
++
ix
)
{
progenitors
.
push_back
(
others
[
ix
]);
psystem
+=
progenitors
[
iloc
]
->
momentum
();
ptotal
=
psystem
+
deltap
;
ptotal
.
rescaleMass
();
psystem
.
rescaleMass
();
++
iloc
;
}
--
iloc
;
if
(
ptotal
.
mass
()
>
psystem
.
mass
()
+
diquark
->
mass
())
{
if
(
DISRemnantOpt_
==
0
||
DISRemnantOpt_
==
2
)
Throw
<
Exception
>
()
<<
"Warning had to adjust the momentum of the"
<<
" non-colour connected"
<<
" final-state, e.g. the scattered lepton in DIS"
<<
Exception
::
warning
;
else
throw
Exception
()
<<
"Can't set remnant momentum without adjusting "
<<
"the momentum of the"
<<
" non-colour connected"
<<
" final-state, e.g. the scattered lepton in DIS"
<<
" vetoing event"
<<
Exception
::
eventerror
;
}
else
{
throw
Exception
()
<<
"Can't put the remnant on-shell in HwRemDecayer::setRemMasses()"
<<
Exception
::
eventerror
;
}
}
psystem
.
rescaleMass
();
LorentzRotation
R
=
Utilities
::
getBoostToCM
(
make_pair
(
psystem
,
deltap
));
Energy
pz
=
SimplePhaseSpace
::
getMagnitude
(
sqr
(
ptotal
.
mass
()),
psystem
.
mass
(),
diquark
->
mass
());
LorentzRotation
Rs
(
-
(
R
*
psystem
)
.
boostVector
());
Rs
.
boost
(
0.0
,
0.0
,
pz
/
sqrt
(
sqr
(
pz
)
+
sqr
(
psystem
.
mass
())));
Rs
=
Rs
*
R
;
//
put
remnant
on
shell
deltap
.
transform
(
R
);
deltap
.
setMass
(
diquark
->
mass
());
deltap
.
setE
(
sqrt
(
sqr
(
diquark
->
mass
())
+
sqr
(
pz
)));
deltap
.
rescaleRho
();
R
.
invert
();
deltap
.
transform
(
R
);
Rs
=
R
*
Rs
;
//
apply
transformation
to
required
particles
to
absorb
recoil
for
(
unsigned
int
ix
=
0
;
ix
<=
iloc
;
++
ix
)
{
progenitors
[
ix
]
->
deepTransform
(
Rs
);
}
diquark
->
set5Momentum
(
deltap
);
}
//
two
remnants
else
{
for
(
unsigned
int
ix
=
0
;
ix
<
2
;
++
ix
)
{
if
(
!
theprocessed
[
ix
])
continue
;
pnew
[
ix
]
=
Lorentz5Momentum
();
for
(
unsigned
int
iy
=
0
;
iy
<
theprocessed
[
ix
]
->
children
()
.
size
();
++
iy
)
{
pnew
[
ix
]
+=
theprocessed
[
ix
]
->
children
()[
iy
]
->
momentum
();
}
mrem
[
ix
]
=
sqrt
(
pnew
[
ix
]
.
m2
());
}
//
now
find
the
remnant
remnant
cmf
frame
Lorentz5Momentum
prem
[
2
]
=
{
theprocessed
[
0
]
->
momentum
(),
theprocessed
[
1
]
->
momentum
()};
ptotal
=
prem
[
0
]
+
prem
[
1
];
ptotal
.
rescaleMass
();
//
boost
momenta
to
this
frame
if
(
ptotal
.
m
()
<
(
pnew
[
0
]
.
m
()
+
pnew
[
1
]
.
m
()))
throw
Exception
()
<<
"Not enough energy in both remnants in "
<<
"HwRemDecayer::setRemMasses() "
<<
Exception
::
eventerror
;
Boost
boostv
(
-
ptotal
.
boostVector
());
ptotal
.
boost
(
boostv
);
for
(
unsigned
int
ix
=
0
;
ix
<
2
;
++
ix
)
{
prem
[
ix
]
.
boost
(
boostv
);
//
set
the
masses
and
energies
,
prem
[
ix
]
.
setMass
(
mrem
[
ix
]);
prem
[
ix
]
.
setE
(
0.5
/
ptotal
.
m
()
*
(
sqr
(
ptotal
.
m
())
+
sqr
(
mrem
[
ix
])
-
sqr
(
mrem
[
1
-
ix
])));
prem
[
ix
]
.
rescaleRho
();
//
boost
back
to
the
lab
prem
[
ix
]
.
boost
(
-
boostv
);
//
set
the
momenta
of
the
remnants
theprocessed
[
ix
]
->
set5Momentum
(
prem
[
ix
]);
}
//
boost
the
decay
products
Lorentz5Momentum
ptemp
;
for
(
unsigned
int
ix
=
0
;
ix
<
2
;
++
ix
)
{
Boost
btorest
(
-
pnew
[
ix
]
.
boostVector
());
Boost
bfmrest
(
prem
[
ix
]
.
boostVector
());
for
(
unsigned
int
iy
=
0
;
iy
<
theprocessed
[
ix
]
->
children
()
.
size
();
++
iy
)
{
ptemp
=
theprocessed
[
ix
]
->
children
()[
iy
]
->
momentum
();
ptemp
.
boost
(
btorest
);
ptemp
.
boost
(
bfmrest
);
theprocessed
[
ix
]
->
children
()[
iy
]
->
set5Momentum
(
ptemp
);
}
}
}
}
void
HwRemDecayer
::
initSoftInteractions
(
Energy
ptmin
,
InvEnergy2
beta
){
ptmin_
=
ptmin
;
beta_
=
beta
;
}
Energy
HwRemDecayer
::
softPt
()
const
{
Energy2
pt2
(
ZERO
);
double
xmin
(
0.0
),
xmax
(
1.0
),
x
(
0
);
if
(
beta_
==
ZERO
){
return
UseRandom
::
rnd
(
0.0
,(
double
)(
ptmin_
/
GeV
))
*
GeV
;
}
if
(
beta_
<
ZERO
){
xmin
=
1.0
;
xmax
=
exp
(
-
beta_
*
sqr
(
ptmin_
)
);
}
else
{
xmin
=
exp
(
-
beta_
*
sqr
(
ptmin_
)
);
xmax
=
1.0
;
}
x
=
UseRandom
::
rnd
(
xmin
,
xmax
);
pt2
=
1.0
/
beta_
*
log
(
1
/
x
);
if
(
pt2
<
ZERO
||
pt2
>
sqr
(
ptmin_
)
)
throw
Exception
()
<<
"HwRemDecayer::softPt generation of pt "
<<
"outside allowed range [0,"
<<
ptmin_
/
GeV
<<
"]."
<<
Exception
::
runerror
;
//
ofstream
myfile2
(
"softPt.txt"
,
ios
::
app
);
//
myfile2
<<
pt2
/
GeV2
<<
" "
<<
sqrt
(
pt2
)
/
GeV
<<
endl
;
//
myfile2
.
close
();
return
sqrt
(
pt2
);
}
void
HwRemDecayer
::
softKinematics
(
Lorentz5Momentum
&
r1
,
Lorentz5Momentum
&
r2
,
Lorentz5Momentum
&
g1
,
Lorentz5Momentum
&
g2
)
const
{
g1
=
Lorentz5Momentum
();
g2
=
Lorentz5Momentum
();
//
All
necessary
variables
for
the
two
soft
gluons
Energy
pt
(
softPt
()),
pz
(
ZERO
);
Energy2
pz2
(
ZERO
);
double
phi
(
UseRandom
::
rnd
(
2.
*
Constants
::
pi
));
double
x_g1
(
0.0
),
x_g2
(
0.0
);
//
Get
the
external
momenta
tcPPair
beam
(
generator
()
->
currentEventHandler
()
->
currentCollision
()
->
incoming
());
Lorentz5Momentum
P1
(
beam
.
first
->
momentum
()),
P2
(
beam
.
second
->
momentum
());
if
(
dbg
){
cerr
<<
"new event --------------------
\n
"
<<
*
(
beam
.
first
)
<<
*
(
softRems_
.
first
)
<<
"-------------------
\n
"
<<
*
(
beam
.
second
)
<<
*
(
softRems_
.
second
)
<<
endl
;
}
//
parton
mass
Energy
mp
;
if
(
quarkPair_
){
mp
=
getParticleData
(
ParticleID
::
u
)
->
constituentMass
();
}
else
{
mp
=
mg_
;
}
//
Get
x_g1
and
x_g2
//
first
limits
double
xmin
=
sqr
(
ptmin_
)
/
4.0
/
(
P1
+
P2
)
.
m2
();
double
x1max
=
(
r1
.
e
()
+
abs
(
r1
.
z
()))
/
(
P1
.
e
()
+
abs
(
P1
.
z
()));
double
x2max
=
(
r2
.
e
()
+
abs
(
r2
.
z
()))
/
(
P2
.
e
()
+
abs
(
P2
.
z
()));
double
x1
;
if
(
!
multiPeriph_
){
//
now
generate
according
to
1
/
x
x_g1
=
xmin
*
exp
(
UseRandom
::
rnd
(
log
(
x1max
/
xmin
)));
x_g2
=
xmin
*
exp
(
UseRandom
::
rnd
(
log
(
x2max
/
xmin
)));
}
else
{
if
(
valOfN_
==
0
)
return
;
double
param
=
(
1
/
(
2
*
valOfN_
+
1
))
*
initTotRap_
;
do
{
//
need
1
-
x
instead
of
x
to
get
the
proper
final
momenta
x1
=
UseRandom
::
rndGauss
(
gaussWidth_
,
1
-
(
exp
(
param
)
-
1
)
/
exp
(
param
));
}
while
(
x1
<
0
||
x1
>=
1.0
);
x_g1
=
x1max
*
x1
;
x_g2
=
x2max
*
x1
;
}
if
(
dbg
)
cerr
<<
x1max
<<
" "
<<
x_g1
<<
endl
<<
x2max
<<
" "
<<
x_g2
<<
endl
;
Lorentz5Momentum
ig1
,
ig2
,
cmf
;
ig1
=
x_g1
*
P1
;
ig2
=
x_g2
*
P2
;
ig1
.
setMass
(
mp
);
ig2
.
setMass
(
mp
);
ig1
.
rescaleEnergy
();
ig2
.
rescaleEnergy
();
cmf
=
ig1
+
ig2
;
//
boost
vector
from
cmf
to
lab
Boost
boostv
(
cmf
.
boostVector
());
//
outgoing
gluons
in
cmf
g1
.
setMass
(
mp
);
g2
.
setMass
(
mp
);
g1
.
setX
(
pt
*
cos
(
phi
));
g2
.
setX
(
-
pt
*
cos
(
phi
));
g1
.
setY
(
pt
*
sin
(
phi
));
g2
.
setY
(
-
pt
*
sin
(
phi
));
pz2
=
cmf
.
m2
()
/
4
-
sqr
(
mp
)
-
(
pt
*
pt
);
if
(
pz2
/
GeV2
<
0.0
){
if
(
dbg
)
cerr
<<
"EXCEPTION not enough energy...."
<<
endl
;
throw
ExtraSoftScatterVeto
();
}
if
(
!
multiPeriph_
){
if
(
UseRandom
::
rndbool
()){
pz
=
sqrt
(
pz2
);
}
else
pz
=
-
sqrt
(
pz2
);
}
else
{
pz
=
pz2
>
ZERO
?
sqrt
(
pz2
)
:
ZERO
;
}
if
(
dbg
)
cerr
<<
"pz1 has been calculated to: "
<<
pz
/
GeV
<<
endl
;
g1
.
setZ
(
pz
);
g2
.
setZ
(
-
pz
);
g1
.
rescaleEnergy
();
g2
.
rescaleEnergy
();
if
(
dbg
){
cerr
<<
"check inv mass in cmf frame: "
<<
(
g1
+
g2
)
.
m
()
/
GeV
<<
" vs. lab frame: "
<<
(
ig1
+
ig2
)
.
m
()
/
GeV
<<
endl
;
}
g1
.
boost
(
boostv
);
g2
.
boost
(
boostv
);
//
recalc
the
remnant
momenta
Lorentz5Momentum
r1old
(
r1
),
r2old
(
r2
);
r1
-=
g1
;
r2
-=
g2
;
try
{
reShuffle
(
r1
,
r2
,
r1old
.
m
(),
r2old
.
m
());
}
catch
(
ExtraSoftScatterVeto
){
r1
=
r1old
;
r2
=
r2old
;
throw
ExtraSoftScatterVeto
();
}
if
(
dbg
){
cerr
<<
"remnant 1,2 momenta: "
<<
r1
/
GeV
<<
"--"
<<
r2
/
GeV
<<
endl
;
cerr
<<
"remnant 1,2 masses: "
<<
r1
.
m
()
/
GeV
<<
" "
<<
r2
.
m
()
/
GeV
<<
endl
;
cerr
<<
"check momenta in the lab..."
<<
(
-
r1old
-
r2old
+
r1
+
r2
+
g1
+
g2
)
/
GeV
<<
endl
;
}
}
void
HwRemDecayer
::
doSoftInteractions_old
(
unsigned
int
N
)
{
if
(
N
==
0
)
return
;
if
(
!
softRems_
.
first
||
!
softRems_
.
second
)
throw
Exception
()
<<
"HwRemDecayer::doSoftInteractions: no "
<<
"Remnants available."
<<
Exception
::
runerror
;
if
(
ptmin_
==
-
1.
*
GeV
)
throw
Exception
()
<<
"HwRemDecayer::doSoftInteractions: init "
<<
"code has not been called! call initSoftInteractions."
<<
Exception
::
runerror
;
Lorentz5Momentum
g1
,
g2
;
Lorentz5Momentum
r1
(
softRems_
.
first
->
momentum
()),
r2
(
softRems_
.
second
->
momentum
());
unsigned
int
tries
(
1
),
i
(
0
);
for
(
i
=
0
;
i
<
N
;
i
++
){
//
check
how
often
this
scattering
has
been
regenerated
if
(
tries
>
maxtrySoft_
)
break
;
if
(
dbg
){
cerr
<<
"new try
\n
"
<<
*
softRems_
.
first
<<
*
softRems_
.
second
<<
endl
;
}
try
{
softKinematics
(
r1
,
r2
,
g1
,
g2
);
}
catch
(
ExtraSoftScatterVeto
){
tries
++
;
i
--
;
continue
;
}
PPair
oldrems
=
softRems_
;
PPair
gluons
=
make_pair
(
addParticle
(
softRems_
.
first
,
ParticleID
::
g
,
g1
),
addParticle
(
softRems_
.
second
,
ParticleID
::
g
,
g2
));
//
now
reset
the
remnants
with
the
new
ones
softRems_
.
first
=
addParticle
(
softRems_
.
first
,
softRems_
.
first
->
id
(),
r1
);
softRems_
.
second
=
addParticle
(
softRems_
.
second
,
softRems_
.
second
->
id
(),
r2
);
//
do
the
colour
connections
pair
<
bool
,
bool
>
anti
=
make_pair
(
oldrems
.
first
->
hasAntiColour
(),
oldrems
.
second
->
hasAntiColour
());
ColinePtr
cl1
=
new_ptr
(
ColourLine
());
ColinePtr
cl2
=
new_ptr
(
ColourLine
());
//
case
2
:
oldrems
.
first
->
colourLine
(
anti
.
first
)
->
addColoured
(
gluons
.
second
,
anti
.
second
);
cl2
->
addColoured
(
softRems_
.
first
,
anti
.
second
);
cl2
->
addColoured
(
gluons
.
second
,
!
anti
.
second
);
oldrems
.
first
->
colourLine
(
anti
.
first
)
->
addColoured
(
gluons
.
second
,
anti
.
second
);
oldrems
.
second
->
colourLine
(
anti
.
second
)
->
addColoured
(
gluons
.
first
,
anti
.
first
);
cl1
->
addColoured
(
softRems_
.
second
,
anti
.
first
);
cl1
->
addColoured
(
gluons
.
first
,
!
anti
.
first
);
cl2
->
addColoured
(
softRems_
.
first
,
anti
.
second
);
cl2
->
addColoured
(
gluons
.
second
,
!
anti
.
second
);
//
reset
counter
tries
=
1
;
}
if
(
dbg
)
cerr
<<
"generated "
<<
i
<<
"th soft scatters
\n
"
;
}
//
Solve
the
reshuffling
equation
to
rescale
the
remnant
momenta
double
bisectReshuffling
(
const
vector
<
PPtr
>&
particles
,
Energy
w
,
double
target
=
-
16.
,
double
maxLevel
=
80.
)
{
double
level
=
0
;
double
left
=
0
;
double
right
=
1
;
double
check
=
-
1.
;
double
xi
=
-
1
;
while
(
level
<
maxLevel
)
{
xi
=
(
left
+
right
)
*
pow
(
0.5
,
level
+
1.
);
check
=
0.
;
for
(
vector
<
PPtr
>
::
const_iterator
p
=
particles
.
begin
();
p
!=
particles
.
end
();
++
p
){
check
+=
sqrt
(
sqr
(
xi
)
*
((
*
p
)
->
momentum
()
.
vect
()
.
mag2
())
+
sqr
((
*
p
)
->
mass
()))
/
w
;
}
if
(
check
==
1.
||
log10
(
abs
(
1.
-
check
))
<=
target
)
break
;
left
*=
2.
;
right
*=
2.
;
if
(
check
>=
1.
)
{
right
-=
1.
;
++
level
;
}
if
(
check
<
1.
)
{
left
+=
1.
;
++
level
;
}
}
return
xi
;
}
LorentzRotation
HwRemDecayer
::
rotate
(
const
LorentzMomentum
&
p
)
const
{
LorentzRotation
R
;
static
const
double
ptcut
=
1e-20
;
Energy2
pt2
=
sqr
(
p
.
x
())
+
sqr
(
p
.
y
());
Energy2
pp2
=
sqr
(
p
.
z
())
+
pt2
;
double
phi
,
theta
;
if
(
pt2
<=
pp2
*
ptcut
)
{
if
(
p
.
z
()
>
ZERO
)
theta
=
0.
;
else
theta
=
Constants
::
pi
;
phi
=
0.
;
}
else
{
Energy
pp
=
sqrt
(
pp2
);
Energy
pt
=
sqrt
(
pt2
);
double
ct
=
p
.
z
()
/
pp
;
double
cf
=
p
.
x
()
/
pt
;
phi
=
-
acos
(
cf
);
theta
=
acos
(
ct
);
}
//
Rotate
first
around
the
z
axis
to
put
p
in
the
x
-
z
plane
//
Then
rotate
around
the
Y
axis
to
put
p
on
the
z
axis
R
.
rotateZ
(
phi
)
.
rotateY
(
theta
);
return
R
;
}
struct
vectorSort
{
bool
operator
()
(
Lorentz5Momentum
i
,
Lorentz5Momentum
j
)
{
return
(
i
.
rapidity
()
<
j
.
rapidity
());}
}
ySort
;
void
HwRemDecayer
::
doSoftInteractions_multiPeriph
(
unsigned
int
N
)
{
if
(
N
==
0
)
return
;
int
Nmpi
=
N
;
for
(
int
j
=
0
;
j
<
Nmpi
;
j
++
){
///////////////////////
//
TODO
:
parametrization
of
the
ladder
multiplicity
(
need
to
tune
to
900
GeV
,
7
Tev
and
13
Tev
)
//
Parameterize
the
ladder
multiplicity
to
:
ladderMult_
=
A_0
*
(
s
/
1
TeV
^
2
)
^
alpha
//
with
the
two
tunable
parameters
A_0
=
ladderNorm_
and
alpha
=
ladderPower_
//
Get
the
collision
energy
//
Energy
energy
(
generator
()
->
maximumCMEnergy
());
//
double
reference
=
sqr
(
energy
/
TeV
);
//
double
ladderMult_
;
//
Parametrization
of
the
ladder
multiplicity
//
ladderMult_
=
ladderNorm_
*
pow
(
(
reference
)
,
ladderPower_
);
double
avgN
=
2.
*
ladderMult_
*
log
((
softRems_
.
first
->
momentum
()
+
softRems_
.
second
->
momentum
())
.
m
()
/
mg_
)
+
ladderbFactor_
;
initTotRap_
=
abs
(
softRems_
.
first
->
momentum
()
.
rapidity
())
+
abs
(
softRems_
.
second
->
momentum
()
.
rapidity
());
//
Generate
the
poisson
distribution
with
mean
avgN
N
=
UseRandom
::
rndPoisson
(
avgN
);
valOfN_
=
N
;
if
(
N
<=
1
){
//
j
--
;
//
TODO
:
Do
we
want
to
make
all
Nmpi
soft
MPIs
?
//
Compare
to
MaxTryMPI
for
hard
mpis
.
continue
;
}
if
(
!
softRems_
.
first
||
!
softRems_
.
second
)
throw
Exception
()
<<
"HwRemDecayer::doSoftInteractions: no "
<<
"Remnants available."
<<
Exception
::
runerror
;
if
(
ptmin_
==
-
1.
*
GeV
)
throw
Exception
()
<<
"HwRemDecayer::doSoftInteractions: init "
<<
"code has not been called! call initSoftInteractions."
<<
Exception
::
runerror
;
//
The
remnants
PPtr
rem1
=
softRems_
.
first
;
PPtr
rem2
=
softRems_
.
second
;
//
Vector
for
the
ladder
particles
vector
<
Lorentz5Momentum
>
ladderMomenta
;
//
Remnant
momenta
Lorentz5Momentum
r1
(
softRems_
.
first
->
momentum
()),
r2
(
softRems_
.
second
->
momentum
());
Lorentz5Momentum
cm
=
r1
+
r2
;
//
Initialize
partons
in
the
ladder
//
The
toy
masses
are
needed
for
the
correct
calculation
of
the
available
energy
Lorentz5Momentum
sumMomenta
;
for
(
unsigned
int
i
=
0
;
i
<
N
;
i
++
)
{
//
choose
constituents
Energy
newMass
=
ZERO
;
Energy
toyMass
;
if
(
i
<
2
){
//
u
and
d
have
the
same
mass
so
its
enough
to
use
u
toyMass
=
getParticleData
(
ParticleID
::
u
)
->
constituentMass
();
}
else
{
toyMass
=
getParticleData
(
ParticleID
::
g
)
->
constituentMass
();
}
Lorentz5Momentum
cp
(
ZERO
,
ZERO
,
ZERO
,
newMass
,
newMass
);
//
dummy
container
for
the
momentum
that
is
used
for
momentum
conservation
Lorentz5Momentum
dummy
(
ZERO
,
ZERO
,
ZERO
,
toyMass
,
toyMass
);
ladderMomenta
.
push_back
(
cp
);
sumMomenta
+=
dummy
;
}
//
Get
the
beam
energy
tcPPair
beam
(
generator
()
->
currentEventHandler
()
->
currentCollision
()
->
incoming
());
//
Lorentz5Momentum
P1
(
beam
.
first
->
momentum
()),
P2
(
beam
.
second
->
momentum
());
//
Calculate
available
energy
for
the
partons
double
x1
;
//
,
x2
;
double
param
=
(
1.
/
(
valOfN_
+
1.
))
*
initTotRap_
;
do
{
//
Need
1
-
x
instead
of
x
to
get
the
proper
final
momenta
//
TODO
:
physical
to
use
different
x
's (see comment below)
x1
=
UseRandom
::
rndGauss
(
gaussWidth_
,
exp
(
-
param
)
);
//
x2
=
UseRandom
::
rndGauss
(
gaussWidth_
,
exp
(
-
param
)
);
}
while
(
x1
<
0
||
x1
>=
1.0
);
//
x2
<
0
||
x2
>=
1.0
);
//
Remnants
1
and
2
need
to
be
rescaled
later
by
this
amount
Lorentz5Momentum
ig1
=
x1
*
r1
;
Lorentz5Momentum
ig2
=
x1
*
r2
;
//
TODO
:
x2
*
r2
//
requires
boost
of
Ladder
in
x1
/
x2
-
dependent
//
frame
.
//
If
the
remaining
remnant
energy
is
not
sufficient
for
the
restmass
of
the
remnants
//
then
continue
/
try
again
if
(
cm
.
m
()
-
(
ig1
+
ig2
)
.
m
()
<
r1
.
m
()
+
r2
.
m
()
){
continue
;
}
//
The
available
energy
that
is
used
to
generate
the
ladder
//
sumMomenta
is
the
the
sum
of
rest
masses
of
the
ladder
partons
//
the
available
energy
goes
all
into
the
kinematics
Energy
availableEnergy
=
(
ig1
+
ig2
)
.
m
()
-
sumMomenta
.
m
();
//
If
not
enough
energy
then
continue
//
The
available
energy
has
to
be
larger
then
the
rest
mass
of
the
remnants
if
(
availableEnergy
<
ZERO
)
{
//
j
--
;
//
TODO
:
Do
we
want
to
make
all
Nmpi
soft
MPIs
?
continue
;
}
unsigned
int
its
(
0
);
//
Generate
the
momenta
of
the
partons
in
the
ladder
if
(
!
(
doPhaseSpaceGenerationGluons
(
ladderMomenta
,
availableEnergy
,
its
))
){
//
j
--
;
//
TODO
:
Do
we
want
to
make
all
Nmpi
soft
MPIs
?
continue
;
}
//
Add
gluon
mass
and
rescale
Lorentz5Momentum
totalMomPartons
;
Lorentz5Momentum
totalMassLessPartons
;
//
Sort
the
ladder
partons
according
to
their
rapidity
and
then
choose
which
ones
will
be
the
quarks
sort
(
ladderMomenta
.
begin
(),
ladderMomenta
.
end
(),
ySort
);
int
countPartons
=
0
;
long
quarkID
=
0
;
//
Choose
between
up
and
down
quarks
int
choice
=
UseRandom
::
rnd2
(
1
,
1
);
switch
(
choice
)
{
case
0
:
quarkID
=
ParticleID
::
u
;
break
;
case
1
:
quarkID
=
ParticleID
::
d
;
break
;
}
for
(
auto
&
p
:
ladderMomenta
){
totalMomPartons
+=
p
;
//
Set
the
mass
of
the
gluons
and
the
two
quarks
in
the
ladder
if
(
countPartons
==
0
||
countPartons
==
int
(
ladderMomenta
.
size
()
-
1
)){
p
.
setMass
(
getParticleData
(
quarkID
)
->
constituentMass
()
);
}
else
{
p
.
setMass
(
getParticleData
(
ParticleID
::
g
)
->
constituentMass
()
);
}
p
.
rescaleEnergy
();
countPartons
++
;
}
//
Continue
if
energy
conservation
is
violated
if
(
abs
(
availableEnergy
-
totalMomPartons
.
m
())
>
1e-8
*
GeV
){
//
j
--
;
//
TODO
:
Do
we
want
to
make
all
Nmpi
soft
MPIs
?
continue
;
}
//
Boost
momenta
into
CM
frame
const
Boost
boostv
(
-
totalMomPartons
.
boostVector
());
Lorentz5Momentum
totalMomentumAfterBoost
;
for
(
unsigned
int
i
=
0
;
i
<
ladderMomenta
.
size
();
i
++
){
ladderMomenta
[
i
]
.
boost
(
boostv
);
totalMomentumAfterBoost
+=
ladderMomenta
[
i
];
}
const
Boost
boostvR
(
-
cm
.
boostVector
());
r1
.
boost
(
boostvR
);
r2
.
boost
(
boostvR
);
//
Remaining
energy
after
generation
of
soft
ladder
Energy
remainingEnergy
=
cm
.
m
()
-
totalMomentumAfterBoost
.
m
();
//
Continue
if
not
enough
energy
if
(
remainingEnergy
<
ZERO
)
{
//
j
--
;
//
TODO
:
Do
we
want
to
make
all
Nmpi
soft
MPIs
?
continue
;
}
vector
<
PPtr
>
remnants
;
rem1
->
set5Momentum
(
r1
);
rem2
->
set5Momentum
(
r2
);
remnants
.
push_back
(
rem1
);
remnants
.
push_back
(
rem2
);
vector
<
PPtr
>
reshuffledRemnants
;
Lorentz5Momentum
totalMomentumAll
;
//
Bisect
reshuffling
for
rescaling
of
remnants
double
xi_remnants
=
bisectReshuffling
(
remnants
,
remainingEnergy
);
//
Rescale
remnants
for
(
auto
&
rems
:
remnants
)
{
Lorentz5Momentum
reshuffledMomentum
;
reshuffledMomentum
=
xi_remnants
*
rems
->
momentum
();
reshuffledMomentum
.
setMass
(
getParticleData
(
softRems_
.
first
->
id
())
->
constituentMass
());
reshuffledMomentum
.
rescaleEnergy
();
reshuffledMomentum
.
boost
(
-
boostvR
);
rems
->
set5Momentum
(
reshuffledMomentum
);
totalMomentumAll
+=
reshuffledMomentum
;
}
//
Then
the
other
particles
for
(
auto
&
p
:
ladderMomenta
)
{
p
.
boost
(
-
boostvR
);
totalMomentumAll
+=
p
;
}
//
sanity
check
if
(
abs
(
cm
.
m
()
-
totalMomentumAll
.
m
())
>
1e-8
*
GeV
)
{
continue
;
}
//
sort
again
sort
(
ladderMomenta
.
begin
(),
ladderMomenta
.
end
(),
ySort
);
//
Do
the
colour
connections
//
Original
rems
are
the
ones
which
are
connected
to
other
parts
of
the
event
PPair
oldRems_
=
softRems_
;
pair
<
bool
,
bool
>
anti
=
make_pair
(
oldRems_
.
first
->
hasAntiColour
(),
oldRems_
.
second
->
hasAntiColour
());
//
Replace
first
remnant
softRems_
.
first
=
addParticle
(
softRems_
.
first
,
softRems_
.
first
->
id
(),
remnants
[
0
]
->
momentum
());
//
Connect
the
old
remnant
to
the
new
remnant
oldRems_
.
first
->
colourLine
(
anti
.
first
)
->
addColoured
(
softRems_
.
first
,
anti
.
first
);
//
Replace
second
remnant
softRems_
.
second
=
addParticle
(
softRems_
.
second
,
softRems_
.
second
->
id
(),
remnants
[
1
]
->
momentum
());
//
This
connects
the
old
remnants
to
the
new
remnants
oldRems_
.
second
->
colourLine
(
anti
.
second
)
->
addColoured
(
softRems_
.
second
,
anti
.
second
);
//
Add
all
partons
to
the
first
remnant
for
the
event
record
vector
<
PPtr
>
partons
;
vector
<
PPtr
>
quarks
;
int
count
=
0
;
//
Choose
the
colour
connections
and
position
of
quark
antiquark
//
Choose
between
R1
-
q
-
g
..
g
-
qbar
-
R2
or
R1
-
qbar
-
g
...
g
-
q
-
R2
//
(
place
of
quark
antiquarks
in
the
ladder
)
int
quarkPosition
=
UseRandom
::
rnd2
(
1
,
1
);
for
(
auto
&
p
:
ladderMomenta
){
if
(
p
.
mass
()
==
getParticleData
(
ParticleID
::
u
)
->
constituentMass
()){
if
(
count
==
0
){
if
(
quarkPosition
==
0
){
quarks
.
push_back
(
addParticle
(
softRems_
.
first
,
quarkID
,
p
));
count
++
;
}
else
{
quarks
.
push_back
(
addParticle
(
softRems_
.
first
,
-
quarkID
,
p
));
count
++
;
}
}
else
{
if
(
quarkPosition
==
0
){
quarks
.
push_back
(
addParticle
(
softRems_
.
first
,
-
quarkID
,
p
));
}
else
{
quarks
.
push_back
(
addParticle
(
softRems_
.
first
,
quarkID
,
p
));
}
}
}
else
{
partons
.
push_back
(
addParticle
(
softRems_
.
first
,
ParticleID
::
g
,
p
));
}
softRems_
.
first
=
addParticle
(
softRems_
.
first
,
softRems_
.
first
->
id
(),
softRems_
.
first
->
momentum
());
oldRems_
.
first
->
colourLine
(
anti
.
first
)
->
addColoured
(
softRems_
.
first
,
anti
.
first
);
}
//
Need
to
differenciate
between
the
two
quark
positions
,
this
defines
the
//
colour
connections
to
the
new
remnants
and
old
remnants
if
(
quarkPosition
==
0
){
//
ladder
self
contained
if
(
partons
.
size
()
==
0
&&
quarks
.
size
()
>
0
){
ColinePtr
clq
=
new_ptr
(
ColourLine
());
clq
->
addColoured
(
quarks
[
0
]);
clq
->
addAntiColoured
(
quarks
[
1
]);
}
ColinePtr
clfirst
=
new_ptr
(
ColourLine
());
ColinePtr
cllast
=
new_ptr
(
ColourLine
());
if
(
partons
.
size
()
>
0
){
clfirst
->
addColoured
(
quarks
[
0
]);
clfirst
->
addAntiColoured
(
partons
[
0
]);
cllast
->
addAntiColoured
(
quarks
[
1
]);
cllast
->
addColoured
(
partons
[
partons
.
size
()
-
1
]);
//
now
the
remaining
gluons
for
(
unsigned
int
i
=
0
;
i
<
partons
.
size
()
-
1
;
i
++
){
ColinePtr
cl
=
new_ptr
(
ColourLine
());
cl
->
addColoured
(
partons
[
i
]);
cl
->
addAntiColoured
(
partons
[
i
+
1
]);
}
}
}
else
{
if
(
partons
.
size
()
==
0
&&
quarks
.
size
()
>
0
){
ColinePtr
clq
=
new_ptr
(
ColourLine
());
clq
->
addAntiColoured
(
quarks
[
0
]);
clq
->
addColoured
(
quarks
[
1
]);
}
ColinePtr
clfirst
=
new_ptr
(
ColourLine
());
ColinePtr
cllast
=
new_ptr
(
ColourLine
());
if
(
partons
.
size
()
>
0
){
clfirst
->
addAntiColoured
(
quarks
[
0
]);
clfirst
->
addColoured
(
partons
[
0
]);
cllast
->
addColoured
(
quarks
[
1
]);
cllast
->
addAntiColoured
(
partons
[
partons
.
size
()
-
1
]);
//
now
the
remaining
gluons
for
(
unsigned
int
i
=
0
;
i
<
partons
.
size
()
-
1
;
i
++
){
ColinePtr
cl
=
new_ptr
(
ColourLine
());
cl
->
addAntiColoured
(
partons
[
i
]);
cl
->
addColoured
(
partons
[
i
+
1
]);
}
}
}
//
end
colour
connection
loop
}
//
end
Nmpi
loop
}
//
end
function
//
Do
the
phase
space
generation
here
is
1
to
1
the
same
from
UA5
model
bool
HwRemDecayer
::
doPhaseSpaceGenerationGluons
(
vector
<
Lorentz5Momentum
>
&
softGluons
,
Energy
CME
,
unsigned
int
&
its
)
const
{
//
Define
the
parameters
unsigned
int
_maxtries
=
300
;
double
alog
=
log
(
CME
*
CME
/
GeV2
);
unsigned
int
ncl
=
softGluons
.
size
();
//
calculate
the
slope
parameters
for
the
different
clusters
//
outside
loop
to
save
time
vector
<
Lorentz5Momentum
>
mom
(
ncl
);
//
Sets
the
slopes
depending
on
the
constituent
quarks
of
the
cluster
for
(
unsigned
int
ix
=
0
;
ix
<
ncl
;
++
ix
)
{
mom
[
ix
]
=
softGluons
[
ix
];
}
//
generate
the
momenta
double
eps
=
1e-10
/
double
(
ncl
);
vector
<
double
>
xi
(
ncl
);
vector
<
Energy
>
tempEnergy
(
ncl
);
Energy
sum1
(
ZERO
);
double
yy
(
0.
);
//
We
want
to
make
sure
that
the
first
Pt
is
from
the
//
desired
pt
-
distribution
.
If
we
select
the
first
pt
in
the
//
trial
loop
we
introduce
a
bias
.
Energy
firstPt
=
softPt
();
while
(
its
<
_maxtries
)
{
++
its
;
Energy
sumx
=
ZERO
;
Energy
sumy
=
ZERO
;
unsigned
int
iterations
(
0
);
unsigned
int
_maxtriesNew
=
100
;
while
(
iterations
<
_maxtriesNew
)
{
iterations
++
;
Energy
sumxIt
=
ZERO
;
Energy
sumyIt
=
ZERO
;
bool
success
=
false
;
Energy
pTmax
=
ZERO
;
for
(
unsigned
int
i
=
0
;
i
<
ncl
;
++
i
)
{
//
Different
options
for
soft
pt
sampling
//
1
)
pT1
>
pT2
...
pTN
//
2
)
pT1
>
pT2
>..>
pTN
//
3
)
flat
//
4
)
y
dependent
//
5
)
Frist
then
flat
int
triesPt
=
0
;
Energy
pt
;
//
Energy
ptTest
;
switch
(
PtDistribution_
)
{
case
0
:
//
default
softPt
()
pt
=
softPt
();
break
;
case
1
:
//
pTordered
if
(
i
==
0
){
pt
=
softPt
();
pTmax
=
pt
;
}
else
{
do
{
pt
=
softPt
();
}
while
(
pt
>
pTmax
);
}
break
;
case
2
:
//
strongly
pT
ordered
if
(
i
==
0
)
{
pt
=
softPt
();
pTmax
=
pt
;
}
else
{
do
{
if
(
triesPt
==
20
)
{
pt
=
pTmax
;
break
;
}
pt
=
softPt
();
triesPt
++
;
}
while
(
pt
>
pTmax
);
pTmax
=
pt
;
}
break
;
case
3
:
//
flat
pt
=
UseRandom
::
rnd
(
0.0
,(
double
)(
ptmin_
/
GeV
))
*
GeV
;
break
;
case
4
:
//
flat
below
first
pT
if
(
i
==
0
)
{
pt
=
firstPt
;
}
else
{
pt
=
firstPt
*
UseRandom
::
rnd
();
}
break
;
case
5
:
//
flat
but
rising
below
first
pT
if
(
i
==
0
)
{
pt
=
firstPt
;
}
else
{
pt
=
firstPt
*
pow
(
UseRandom
::
rnd
(),
1
/
2
);
}
}
Energy2
ptp
=
pt
*
pt
;
if
(
ptp
<=
ZERO
)
pt
=
-
sqrt
(
-
ptp
);
else
pt
=
sqrt
(
ptp
);
//
randomize
azimuth
Energy
px
,
py
;
//
randomize
the
azimuth
,
but
the
last
one
should
cancel
all
others
if
(
i
<
ncl
-
1
){
randAzm
(
pt
,
px
,
py
);
//
set
transverse
momentum
mom
[
i
]
.
setX
(
px
);
mom
[
i
]
.
setY
(
py
);
sumxIt
+=
px
;
sumyIt
+=
py
;
}
else
{
//
calculate
azimuth
angle
s
.
t
//
double
factor
;
Energy
pTdummy
;
pTdummy
=
sqrt
(
sumxIt
*
sumxIt
+
sumyIt
*
sumyIt
);
if
(
pTdummy
<
ptmin_
){
px
=-
sumxIt
;
py
=-
sumyIt
;
mom
[
i
]
.
setX
(
px
);
mom
[
i
]
.
setY
(
py
);
sumxIt
+=
px
;
sumyIt
+=
py
;
sumx
=
sumxIt
;
sumy
=
sumyIt
;
success
=
true
;
}
}
}
if
(
success
){
break
;
}
}
sumx
/=
ncl
;
sumy
/=
ncl
;
//
find
the
sum
of
the
transverse
mass
Energy
sumtm
=
ZERO
;
for
(
unsigned
int
ix
=
0
;
ix
<
ncl
;
++
ix
)
{
mom
[
ix
]
.
setX
(
mom
[
ix
]
.
x
()
-
sumx
);
mom
[
ix
]
.
setY
(
mom
[
ix
]
.
y
()
-
sumy
);
Energy2
pt2
=
mom
[
ix
]
.
perp2
();
//
Use
the
z
component
of
the
clusters
momentum
for
temporary
storage
mom
[
ix
]
.
setZ
(
sqrt
(
pt2
+
mom
[
ix
]
.
mass2
()));
sumtm
+=
mom
[
ix
]
.
z
();
}
//
if
transverse
mass
greater
the
CMS
try
again
if
(
sumtm
>
CME
)
continue
;
//
randomize
the
mom
vector
to
get
the
first
and
the
compensating
parton
//
at
all
possible
positions
:
long
(
*
p_irnd
)(
long
)
=
UseRandom
::
irnd
;
random_shuffle
(
mom
.
begin
(),
mom
.
end
(),
p_irnd
);
for
(
unsigned
int
i
=
0
;
i
<
ncl
;
i
++
)
xi
[
i
]
=
randUng
(
0.6
,
1.0
);
//
sort
into
ascending
order
sort
(
xi
.
begin
(),
xi
.
end
());
double
ximin
=
xi
[
0
];
double
ximax
=
xi
.
back
()
-
ximin
;
xi
[
0
]
=
0.
;
for
(
unsigned
int
i
=
ncl
-
2
;
i
>=
1
;
i
--
)
xi
[
i
+
1
]
=
(
xi
[
i
]
-
ximin
)
/
ximax
;
xi
[
1
]
=
1.
;
yy
=
log
(
CME
*
CME
/
(
mom
[
0
]
.
z
()
*
mom
[
1
]
.
z
()));
bool
suceeded
=
false
;
Energy
sum2
,
sum3
,
sum4
;
for
(
unsigned
int
j
=
0
;
j
<
10
;
j
++
)
{
sum1
=
sum2
=
sum3
=
sum4
=
ZERO
;
for
(
unsigned
int
i
=
0
;
i
<
ncl
;
i
++
)
{
Energy
tm
=
mom
[
i
]
.
z
();
double
ex
=
exp
(
yy
*
xi
[
i
]);
sum1
+=
tm
*
ex
;
sum2
+=
tm
/
ex
;
sum3
+=
(
tm
*
ex
)
*
xi
[
i
];
sum4
+=
(
tm
/
ex
)
*
xi
[
i
];
}
double
fy
=
alog
-
log
(
sum1
*
sum2
/
GeV2
);
double
dd
=
(
sum3
*
sum2
-
sum1
*
sum4
)
/
(
sum1
*
sum2
);
double
dyy
=
fy
/
dd
;
if
(
abs
(
dyy
/
yy
)
<
eps
)
{
yy
+=
dyy
;
suceeded
=
true
;
break
;
}
yy
+=
dyy
;
}
if
(
suceeded
){
break
;
}
if
(
its
>
100
)
eps
*=
10.
;
}
if
(
its
==
_maxtries
){
return
false
;
}
//
throw
Exception
()
<<
"Can't generate soft underlying event in "
//
<<
"UA5Handler::generateCylindricalPS"
//
<<
Exception
::
eventerror
;
double
zz
=
log
(
CME
/
sum1
);
for
(
unsigned
int
i
=
0
;
i
<
ncl
;
i
++
)
{
Energy
tm
=
mom
[
i
]
.
z
();
double
E1
=
exp
(
zz
+
yy
*
xi
[
i
]);
mom
[
i
]
.
setZ
(
0.5
*
tm
*
(
1.
/
E1
-
E1
));
mom
[
i
]
.
setE
(
0.5
*
tm
*
(
1.
/
E1
+
E1
));
softGluons
[
i
]
=
mom
[
i
];
}
return
true
;
}
void
HwRemDecayer
::
finalize
(
double
colourDisrupt
,
unsigned
int
softInt
){
PPair
diquarks
;
//
Do
the
final
Rem
->
Diquark
or
Rem
->
quark
"decay"
if
(
theRems
.
first
)
{
diquarks
.
first
=
finalSplit
(
theRems
.
first
,
theContent
.
first
.
RemID
(),
theUsed
.
first
);
theMaps
.
first
.
push_back
(
make_pair
(
diquarks
.
first
,
tPPtr
()));
}
if
(
theRems
.
second
)
{
diquarks
.
second
=
finalSplit
(
theRems
.
second
,
theContent
.
second
.
RemID
(),
theUsed
.
second
);
theMaps
.
second
.
push_back
(
make_pair
(
diquarks
.
second
,
tPPtr
()));
}
setRemMasses
(
diquarks
);
if
(
theRems
.
first
)
{
fixColours
(
theMaps
.
first
,
theanti
.
first
,
colourDisrupt
);
if
(
theContent
.
first
.
hadron
->
id
()
==
ParticleID
::
pomeron
&&
pomeronStructure_
==
0
)
fixColours
(
theMaps
.
first
,
!
theanti
.
first
,
colourDisrupt
);
}
if
(
theRems
.
second
)
{
fixColours
(
theMaps
.
second
,
theanti
.
second
,
colourDisrupt
);
if
(
theContent
.
second
.
hadron
->
id
()
==
ParticleID
::
pomeron
&&
pomeronStructure_
==
0
)
fixColours
(
theMaps
.
second
,
!
theanti
.
second
,
colourDisrupt
);
}
if
(
!
theRems
.
first
||
!
theRems
.
second
)
return
;
//
stop
here
if
we
don
't have two remnants
softRems_
=
diquarks
;
doSoftInteractions
(
softInt
);
}
HwRemDecayer
::
HadronContent
HwRemDecayer
::
getHadronContent
(
tcPPtr
hadron
)
const
{
HadronContent
hc
;
hc
.
hadron
=
hadron
->
dataPtr
();
long
id
(
hadron
->
id
());
//
baryon
if
(
BaryonMatcher
::
Check
(
hadron
->
data
()))
{
hc
.
sign
=
id
<
0
?
-
1
:
1
;
hc
.
flav
.
push_back
((
id
=
abs
(
id
)
/
10
)
%
10
);
hc
.
flav
.
push_back
((
id
/=
10
)
%
10
);
hc
.
flav
.
push_back
((
id
/=
10
)
%
10
);
hc
.
extracted
=
-
1
;
}
else
if
(
hadron
->
data
()
.
id
()
==
ParticleID
::
gamma
||
(
hadron
->
data
()
.
id
()
==
ParticleID
::
pomeron
&&
pomeronStructure_
==
1
))
{
hc
.
sign
=
1
;
for
(
int
ix
=
1
;
ix
<
6
;
++
ix
)
{
hc
.
flav
.
push_back
(
ix
);
hc
.
flav
.
push_back
(
-
ix
);
}
}
else
if
(
hadron
->
data
()
.
id
()
==
ParticleID
::
pomeron
)
{
hc
.
sign
=
1
;
hc
.
flav
.
push_back
(
ParticleID
::
g
);
hc
.
flav
.
push_back
(
ParticleID
::
g
);
}
else
if
(
hadron
->
data
()
.
id
()
==
ParticleID
::
reggeon
)
{
hc
.
sign
=
1
;
for
(
int
ix
=
1
;
ix
<
3
;
++
ix
)
{
hc
.
flav
.
push_back
(
ix
);
hc
.
flav
.
push_back
(
-
ix
);
}
}
+
else
{
+
hc
.
sign
=
id
<
0
?
-
1
:
1
;
+
hc
.
flav
.
push_back
(
-
(
id
=
abs
(
id
)
/
10
)
%
10
);
+
hc
.
flav
.
push_back
((
id
=
abs
(
id
)
/
10
)
%
10
);
+
if
(
hc
.
flav
.
back
()
%
2
!=
0
)
{
+
for
(
int
&
i
:
hc
.
flav
)
i
*=-
1
;
+
}
+
}
hc
.
pomeronStructure
=
pomeronStructure_
;
return
hc
;
}
long
HwRemDecayer
::
HadronContent
::
RemID
()
const
{
if
(
extracted
==
-
1
)
throw
Exception
()
<<
"Try to build a Diquark id without "
<<
"having extracted something in "
<<
"HwRemDecayer::RemID(...)"
<<
Exception
::
runerror
;
//
the
hadron
was
a
meson
or
photon
if
(
flav
.
size
()
==
2
)
return
sign
*
flav
[(
extracted
+
1
)
%
2
];
long
remId
;
int
id1
(
sign
*
flav
[(
extracted
+
1
)
%
3
]),
id2
(
sign
*
flav
[(
extracted
+
2
)
%
3
]),
sign
(
0
),
spin
(
0
);
if
(
abs
(
id1
)
>
abs
(
id2
))
swap
(
id1
,
id2
);
sign
=
(
id1
<
0
)
?
-
1
:
1
;
//
Needed
for
the
spin
0
/
1
part
remId
=
id2
*
1000
+
id1
*
100
;
//
Now
decide
if
we
have
spin
0
diquark
or
spin
1
diquark
if
(
id1
==
id2
)
spin
=
3
;
//
spin
1
else
spin
=
1
;
//
otherwise
spin
0
remId
+=
sign
*
spin
;
return
remId
;
}
tPPtr
HwRemDecayer
::
addParticle
(
tcPPtr
parent
,
long
id
,
Lorentz5Momentum
p
)
const
{
PPtr
newp
=
new_ptr
(
Particle
(
getParticleData
(
id
)));
newp
->
set5Momentum
(
p
);
//
Add
the
new
remnant
to
the
step
,
but
don
't do colour connections
thestep
->
addDecayProduct
(
parent
,
newp
,
false
);
return
newp
;
}
void
HwRemDecayer
::
findChildren
(
tPPtr
part
,
vector
<
PPtr
>
&
particles
)
const
{
if
(
part
->
children
()
.
empty
())
particles
.
push_back
(
part
);
else
{
for
(
unsigned
int
ix
=
0
;
ix
<
part
->
children
()
.
size
();
++
ix
)
findChildren
(
part
->
children
()[
ix
],
particles
);
}
}
ParticleVector
HwRemDecayer
::
decay
(
const
DecayMode
&
,
const
Particle
&
,
Step
&
)
const
{
throw
Exception
()
<<
"HwRemDecayer::decay(...) "
<<
"must not be called explicitely."
<<
Exception
::
runerror
;
}
void
HwRemDecayer
::
persistentOutput
(
PersistentOStream
&
os
)
const
{
os
<<
ounit
(
_kinCutoff
,
GeV
)
<<
_range
<<
_zbin
<<
_ybin
<<
_nbinmax
<<
_alphaS
<<
_alphaEM
<<
DISRemnantOpt_
<<
maxtrySoft_
<<
colourDisrupt_
<<
ladderPower_
<<
ladderNorm_
<<
ladderMult_
<<
ladderbFactor_
<<
pomeronStructure_
<<
ounit
(
mg_
,
GeV
)
<<
ounit
(
ptmin_
,
GeV
)
<<
ounit
(
beta_
,
sqr
(
InvGeV
))
<<
allowTop_
<<
allowLeptons_
<<
multiPeriph_
<<
valOfN_
<<
initTotRap_
<<
PtDistribution_
;
}
void
HwRemDecayer
::
persistentInput
(
PersistentIStream
&
is
,
int
)
{
is
>>
iunit
(
_kinCutoff
,
GeV
)
>>
_range
>>
_zbin
>>
_ybin
>>
_nbinmax
>>
_alphaS
>>
_alphaEM
>>
DISRemnantOpt_
>>
maxtrySoft_
>>
colourDisrupt_
>>
ladderPower_
>>
ladderNorm_
>>
ladderMult_
>>
ladderbFactor_
>>
pomeronStructure_
>>
iunit
(
mg_
,
GeV
)
>>
iunit
(
ptmin_
,
GeV
)
>>
iunit
(
beta_
,
sqr
(
InvGeV
))
>>
allowTop_
>>
allowLeptons_
>>
multiPeriph_
>>
valOfN_
>>
initTotRap_
>>
PtDistribution_
;
}
//
The
following
static
variable
is
needed
for
the
type
//
description
system
in
ThePEG
.
DescribeClass
<
HwRemDecayer
,
RemnantDecayer
>
describeHerwigHwRemDecayer
(
"Herwig::HwRemDecayer"
,
"HwShower.so"
);
void
HwRemDecayer
::
Init
()
{
static
ClassDocumentation
<
HwRemDecayer
>
documentation
(
"The HwRemDecayer class decays the remnant for Herwig"
);
static
Parameter
<
HwRemDecayer
,
double
>
interfaceZBinSize
(
"ZBinSize"
,
"The size of the vbins in z for the interpolation of the splitting function."
,
&
HwRemDecayer
::
_zbin
,
0.05
,
0.001
,
0.1
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
int
>
interfaceMaxBin
(
"MaxBin"
,
"Maximum number of z bins"
,
&
HwRemDecayer
::
_nbinmax
,
100
,
10
,
1000
,
false
,
false
,
Interface
::
limited
);
static
Reference
<
HwRemDecayer
,
ShowerAlpha
>
interfaceAlphaS
(
"AlphaS"
,
"Pointer to object to calculate the strong coupling"
,
&
HwRemDecayer
::
_alphaS
,
false
,
false
,
true
,
false
,
false
);
static
Reference
<
HwRemDecayer
,
ShowerAlpha
>
interfaceAlphaEM
(
"AlphaEM"
,
"Pointer to object to calculate the electromagnetic coupling"
,
&
HwRemDecayer
::
_alphaEM
,
false
,
false
,
true
,
false
,
false
);
static
Parameter
<
HwRemDecayer
,
Energy
>
interfaceKinCutoff
(
"KinCutoff"
,
"Parameter kinCutoff used to constrain qtilde"
,
&
HwRemDecayer
::
_kinCutoff
,
GeV
,
0.75
*
GeV
,
0.5
*
GeV
,
10.0
*
GeV
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interfaceEmissionRange
(
"EmissionRange"
,
"Factor above the minimum possible value in which the forced splitting is allowed."
,
&
HwRemDecayer
::
_range
,
1.1
,
1.0
,
10.0
,
false
,
false
,
Interface
::
limited
);
static
Switch
<
HwRemDecayer
,
unsigned
int
>
interfaceDISRemnantOption
(
"DISRemnantOption"
,
"Options for the treatment of the remnant in DIS"
,
&
HwRemDecayer
::
DISRemnantOpt_
,
0
,
false
,
false
);
static
SwitchOption
interfaceDISRemnantOptionDefault
(
interfaceDISRemnantOption
,
"Default"
,
"Use the minimum number of particles needed to take the recoil"
" and allow the lepton to be used if needed"
,
0
);
static
SwitchOption
interfaceDISRemnantOptionNoLepton
(
interfaceDISRemnantOption
,
"NoLepton"
,
"Use the minimum number of particles needed to take the recoil but"
" veto events where the lepton kinematics would need to be altered"
,
1
);
static
SwitchOption
interfaceDISRemnantOptionAllParticles
(
interfaceDISRemnantOption
,
"AllParticles"
,
"Use all particles in the colour connected system to take the recoil"
" and use the lepton if needed."
,
2
);
static
SwitchOption
interfaceDISRemnantOptionAllParticlesNoLepton
(
interfaceDISRemnantOption
,
"AllParticlesNoLepton"
,
"Use all the particles in the colour connected system to take the"
" recoil but don't use the lepton."
,
3
);
static
Parameter
<
HwRemDecayer
,
unsigned
int
>
interfaceMaxTrySoft
(
"MaxTrySoft"
,
"The maximum number of regeneration attempts for an additional soft scattering"
,
&
HwRemDecayer
::
maxtrySoft_
,
10
,
0
,
100
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interfacecolourDisrupt
(
"colourDisrupt"
,
"Fraction of connections to additional soft subprocesses, which are colour disrupted."
,
&
HwRemDecayer
::
colourDisrupt_
,
1.0
,
0.0
,
1.0
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interaceladderPower
(
"ladderPower"
,
"The power factor in the ladder parameterization."
,
&
HwRemDecayer
::
ladderPower_
,
1.0
,
-
5.0
,
10.0
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interfaceladderNorm
(
"ladderNorm"
,
"The normalization factor in the ladder parameterization"
,
&
HwRemDecayer
::
ladderNorm_
,
1.0
,
0.0
,
10.0
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interfaceladderMult
(
"ladderMult"
,
"The ladder multiplicity factor "
,
&
HwRemDecayer
::
ladderMult_
,
1.0
,
0.0
,
10.0
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interfaceladderbFactor
(
"ladderbFactor"
,
"The additive factor in the multiperipheral ladder multiplicity."
,
&
HwRemDecayer
::
ladderbFactor_
,
1.0
,
0.0
,
10.0
,
false
,
false
,
Interface
::
limited
);
static
Parameter
<
HwRemDecayer
,
double
>
interfacegaussWidth
(
"gaussWidth"
,
"The gaussian width of the fluctuation of longitudinal momentum fraction."
,
&
HwRemDecayer
::
gaussWidth_
,
0.1
,
0.0
,
1.0
,
false
,
false
,
Interface
::
limited
);
static
Switch
<
HwRemDecayer
,
unsigned
int
>
interfacePomeronStructure
(
"PomeronStructure"
,
"Option for the treatment of the valance structure of the pomeron"
,
&
HwRemDecayer
::
pomeronStructure_
,
0
,
false
,
false
);
static
SwitchOption
interfacePomeronStructureGluon
(
interfacePomeronStructure
,
"Gluon"
,
"Assume the pomeron is a two gluon state"
,
0
);
static
SwitchOption
interfacePomeronStructureQQBar
(
interfacePomeronStructure
,
"QQBar"
,
"Assumne the pomeron is q qbar as for the photon,"
" this option is not recommended and is provide for compatiblity with POMWIG"
,
1
);
static
Switch
<
HwRemDecayer
,
bool
>
interfaceAllowTop
(
"AllowTop"
,
"Allow top quarks in the hadron"
,
&
HwRemDecayer
::
allowTop_
,
false
,
false
,
false
);
static
SwitchOption
interfaceAllowTopNo
(
interfaceAllowTop
,
"No"
,
"Don't allow them"
,
false
);
static
SwitchOption
interfaceAllowTopYes
(
interfaceAllowTop
,
"Yes"
,
"Allow them"
,
true
);
static
Switch
<
HwRemDecayer
,
bool
>
interfaceAllowLeptons
(
"AllowLeptons"
,
"Allow charged leptons in the hadron"
,
&
HwRemDecayer
::
allowLeptons_
,
false
,
false
,
false
);
static
SwitchOption
interfaceAllowLeptonsNo
(
interfaceAllowLeptons
,
"No"
,
"Don't allow them"
,
false
);
static
SwitchOption
interfaceAllowLeptonsYes
(
interfaceAllowLeptons
,
"Yes"
,
"Allow them"
,
true
);
static
Switch
<
HwRemDecayer
,
bool
>
interfaceMultiPeriph
(
"MultiPeriph"
,
"Use multiperipheral kinematics"
,
&
HwRemDecayer
::
multiPeriph_
,
false
,
false
,
false
);
static
SwitchOption
interfaceMultiPeriphNo
(
interfaceMultiPeriph
,
"No"
,
"Don't use multiperipheral"
,
false
);
static
SwitchOption
interfaceMultiPeriphYes
(
interfaceMultiPeriph
,
"Yes"
,
"Use multiperipheral kinematics"
,
true
);
static
Switch
<
HwRemDecayer
,
unsigned
int
>
interfacePtDistribution
(
"PtDistribution"
,
"Options for different pT generation methods"
,
&
HwRemDecayer
::
PtDistribution_
,
0
,
false
,
false
);
static
SwitchOption
interfacePtDistributionDefault
(
interfacePtDistribution
,
"Default"
,
"Default generation of pT"
,
0
);
static
SwitchOption
interfacePtDistributionOrdered
(
interfacePtDistribution
,
"Ordered"
,
"Ordered generation of pT,where the first pT is the hardest"
,
1
);
static
SwitchOption
interfacePtDistributionStronglyOrdered
(
interfacePtDistribution
,
"StronglyOrdered"
,
"Strongly ordered generation of pT"
,
2
);
static
SwitchOption
interfacePtDistributionFlat
(
interfacePtDistribution
,
"Flat"
,
"Sample from a flat pT distribution"
,
3
);
static
SwitchOption
interfacePtDistributionFlatOrdered
(
interfacePtDistribution
,
"FlatOrdered"
,
"First pT normal, then flat"
,
4
);
static
SwitchOption
interfacePtDistributionFlatOrdered2
(
interfacePtDistribution
,
"FlatOrdered2"
,
"First pT normal, then flat but steep"
,
5
);
}
bool
HwRemDecayer
::
canHandle
(
tcPDPtr
particle
,
tcPDPtr
parton
)
const
{
if
(
!
(
StandardQCDPartonMatcher
::
Check
(
*
parton
)
||
parton
->
id
()
==
ParticleID
::
gamma
))
{
if
(
abs
(
parton
->
id
())
==
ParticleID
::
t
)
{
if
(
!
allowTop_
)
throw
Exception
()
<<
"Top is not allowed as a parton in the remnant handling, please "
<<
"use a PDF which does not contain top for the remnant"
<<
" handling (preferred) or allow top in the remnant using
\n
"
<<
" set "
<<
fullName
()
<<
":AllowTop Yes
\n
"
<<
Exception
::
runerror
;
}
else
if
(
ChargedLeptonMatcher
::
Check
(
*
parton
))
{
if
(
!
allowLeptons_
)
throw
Exception
()
<<
"Charged leptons not allowed as a parton in the remnant handling, please "
<<
"use a PDF which does not contain top for the remnant"
<<
" handling or allow leptons in the remnant using
\n
"
<<
" set "
<<
fullName
()
<<
":AllowLeptons Yes
\n
"
<<
Exception
::
runerror
;
}
else
{
return
false
;
}
}
return
HadronMatcher
::
Check
(
*
particle
)
||
particle
->
id
()
==
ParticleID
::
gamma
||
particle
->
id
()
==
ParticleID
::
pomeron
||
particle
->
id
()
==
ParticleID
::
reggeon
;
}
bool
HwRemDecayer
::
isPartonic
(
tPPtr
parton
)
const
{
if
(
parton
->
parents
()
.
empty
())
return
false
;
tPPtr
parent
=
parton
->
parents
()[
0
];
bool
partonic
=
false
;
for
(
unsigned
int
ix
=
0
;
ix
<
parent
->
children
()
.
size
();
++
ix
)
{
if
(
dynamic_ptr_cast
<
tRemPPtr
>
(
parent
->
children
()[
ix
]))
{
partonic
=
true
;
break
;
}
}
return
partonic
;
}
diff
--
git
a
/
Tests
/
python
/
make_input_files
.
py
.
in
b
/
Tests
/
python
/
make_input_files
.
py
.
in
---
a
/
Tests
/
python
/
make_input_files
.
py
.
in
+++
b
/
Tests
/
python
/
make_input_files
.
py
.
in
@@
-
1
,
1614
+
1
,
1625
@@
#! @PYTHON@
# -*- mode: python -*-
from
__future__
import
print_function
import
logging
,
sys
,
os
from
string
import
Template
from
HerwigInputs
import
*
import
sys
if
sys
.
version_info
[:
3
]
<
(
2
,
4
,
0
):
print
(
"rivet scripts require Python version >= 2.4.0... exiting"
)
sys
.
exit
(
1
)
if
__name__
==
"__main__"
:
import
logging
from
optparse
import
OptionParser
,
OptionGroup
parser
=
OptionParser
(
usage
=
"%prog name [...]"
)
simulation
=
""
numberOfAddedProcesses
=
0
def
addProcess
(
thefactory
,
theProcess
,
Oas
,
Oew
,
scale
,
mergedlegs
,
NLOprocesses
):
global
numberOfAddedProcesses
global
simulation
numberOfAddedProcesses
+=
1
res
=
"set "
+
thefactory
+
":OrderInAlphaS "
+
Oas
+
"
\n
"
res
+=
"set "
+
thefactory
+
":OrderInAlphaEW "
+
Oew
+
"
\n
"
res
+=
"do "
+
thefactory
+
":Process "
+
theProcess
+
" "
if
(
mergedlegs
!=
0
):
if
simulation
!=
"Merging"
:
print
(
"simulation is not Merging, trying to add merged legs."
)
sys
.
exit
(
1
)
res
+=
"["
for
j
in
range
(
mergedlegs
):
res
+=
" j "
res
+=
"]"
res
+=
"
\n
"
if
(
NLOprocesses
!=
0
):
if
simulation
!=
"Merging"
:
print
(
"simulation is not Merging, trying to add NLOProcesses."
)
sys
.
exit
(
1
)
res
+=
"set MergingFactory:NLOProcesses
%s
\n
"
%
NLOprocesses
if
(
scale
!=
""
):
res
+=
"set "
+
thefactory
+
":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/"
+
scale
+
"
\n
"
return
res
addedBRReweighter
=
False
def
addBRReweighter
():
global
addedBRReweighter
if
(
addedBRReweighter
):
logging
.
error
(
"Can only add BRReweighter once."
)
sys
.
exit
(
1
)
res
=
"create Herwig::BranchingRatioReweighter /Herwig/Generators/BRReweighter
\n
"
res
+=
"insert /Herwig/Generators/EventGenerator:EventHandler:PostHadronizationHandlers 0 /Herwig/Generators/BRReweighter
\n
"
addedBRReweighter
=
True
return
res
selecteddecaymode
=
False
def
selectDecayMode
(
particle
,
decaymodes
):
global
selecteddecaymode
res
=
"do /Herwig/Particles/"
+
particle
+
":SelectDecayModes"
for
decay
in
decaymodes
:
res
+=
" /Herwig/Particles/"
+
particle
+
"/"
+
decay
res
+=
"
\n
"
selecteddecaymode
=
True
return
res
ME_Upsilon
=
"""\
create Herwig::MEee2VectorMeson /Herwig/MatrixElements/MEUpsilon HwMELepton.so
set /Herwig/MatrixElements/MEUpsilon:VectorMeson /Herwig/Particles/Upsilon(4S)
set /Herwig/MatrixElements/MEUpsilon:Coupling 96.72794
"""
+
insert_ME
(
"MEUpsilon"
)
(
opts
,
args
)
=
parser
.
parse_args
()
## Check args
if
len
(
args
)
!=
1
:
logging
.
error
(
"Must specify at least input file"
)
sys
.
exit
(
1
)
name
=
args
[
0
]
print
(
name
)
# work out name and type of the collider
(
collider
,
have_hadronic_collider
)
=
identifyCollider
(
name
)
# workout the type of simulation
(
simulation
,
templateName
,
parameterName
,
parameters
)
=
identifySimulation
(
name
,
collider
,
have_hadronic_collider
)
if
simulation
==
"Merging"
:
thefactory
=
"MergingFactory"
else
:
thefactory
=
"Factory"
# settings for four flavour scheme
fourFlavour
=
"""
read Matchbox/FourFlavourScheme.in
{bjetgroup}
set /Herwig/Cuts/MatchboxJetMatcher:Group bjet
"""
.
format
(
bjetgroup
=
particlegroup
(
thefactory
,
'bjet'
,
'b'
,
'bbar'
,
'c'
,
'cbar'
,
's'
,
'sbar'
,
'd'
,
'dbar'
,
'u'
,
'ubar'
,
'g'
))
# work out the process and parameters
process
=
StringBuilder
()
# DIS
if
(
collider
==
"DIS"
and
"Photo"
not
in
name
)
:
if
(
simulation
==
""
)
:
if
"NoME"
in
name
:
process
=
StringBuilder
(
"set /Herwig/Shower/ShowerHandler:HardEmission None"
)
parameterName
=
parameterName
.
replace
(
"NoME-"
,
""
)
parameterName
=
parameterName
.
replace
(
"DIS-"
,
""
)
if
"CC"
in
parameterName
:
process
+=
insert_ME
(
"MEDISCC"
)
else
:
process
+=
insert_ME
(
"MEDISNC"
)
elif
(
simulation
==
"Powheg"
)
:
if
"CC"
in
parameterName
:
process
=
StringBuilder
(
insert_ME
(
"PowhegMEDISCC"
))
else
:
process
=
StringBuilder
(
insert_ME
(
"PowhegMEDISNC"
))
elif
(
simulation
==
"Matchbox"
)
:
if
"CC"
in
name
:
if
"e-"
in
parameterName
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- p -> nu_e j"
,
"0"
,
"2"
,
""
,
0
,
0
))
else
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e+ p -> nu_ebar j"
,
"0"
,
"2"
,
""
,
0
,
0
))
else
:
if
"e-"
in
parameterName
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- p -> e- j"
,
"0"
,
"2"
,
""
,
0
,
0
))
else
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e+ p -> e+ j"
,
"0"
,
"2"
,
""
,
0
,
0
))
elif
(
simulation
==
"Merging"
)
:
if
"CC"
in
name
:
if
"e-"
in
parameterName
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- p -> e- j"
,
"0"
,
"2"
,
""
,
2
,
2
))
else
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e+ p -> e+ j"
,
"0"
,
"2"
,
""
,
2
,
2
))
else
:
if
"e-"
in
parameterName
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- p -> nu_e j"
,
"0"
,
"2"
,
""
,
2
,
2
))
else
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e+ p -> nu_ebar j"
,
"0"
,
"2"
,
""
,
2
,
2
))
Q2Min
=
1.
Q2Max
=
1000000.
if
"VeryLow"
in
name
:
Q2Max
=
20.
parameterName
=
parameterName
.
replace
(
"-VeryLowQ2"
,
""
)
elif
"Low"
in
name
:
Q2Min
=
20.
Q2Max
=
100.
parameterName
=
parameterName
.
replace
(
"-LowQ2"
,
""
)
elif
"Med"
in
name
:
Q2Min
=
100.
Q2Max
=
1000.
parameterName
=
parameterName
.
replace
(
"-MedQ2"
,
""
)
elif
"High"
in
name
:
Q2Min
=
1000.
parameterName
=
parameterName
.
replace
(
"-HighQ2"
,
""
)
if
"CC"
in
name
:
process
+=
"set /Herwig/Cuts/ChargedCurrentCut:MaxQ2
%s
\n
set /Herwig/Cuts/ChargedCurrentCut:MinQ2
%s
\n
"
%
(
Q2Max
,
Q2Min
)
else
:
process
+=
"set /Herwig/Cuts/NeutralCurrentCut:MaxQ2
%s
\n
set /Herwig/Cuts/NeutralCurrentCut:MinQ2
%s
\n
"
%
(
Q2Max
,
Q2Min
)
# DIS photoproduction
elif
(
collider
==
"DIS"
and
"Photo"
in
name
)
:
assert
(
simulation
==
""
)
ecms
=
float
(
parameterName
.
split
(
"-"
)[
1
])
cuts
=
[
3.
,
6.
,
10.
,
ecms
]
if
"Direct"
in
parameterName
:
parameterName
=
parameterName
.
replace
(
"Direct-"
,
""
)
process
=
StringBuilder
(
insert_ME
(
"MEGammaP2Jets"
,
None
,
"Process"
,
"SubProcess"
))
elif
"Resolved"
in
parameterName
:
process
=
StringBuilder
(
insert_ME
(
"MEQCD2to2"
))
parameterName
=
parameterName
.
replace
(
"Resolved-"
,
""
)
for
i
in
range
(
1
,
len
(
cuts
))
:
tstring
=
"-Jets-
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
jet_kt_cut
(
cuts
[
i
-
1
],
cuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
""
)
# EE
elif
(
collider
==
"EE"
)
:
if
(
simulation
==
""
)
:
if
"gg"
in
parameterName
:
process
=
StringBuilder
(
"create Herwig::MEee2Higgs2SM /Herwig/MatrixElements/MEee2Higgs2SM
\n
"
)
process
+=
insert_ME
(
"MEee2Higgs2SM"
,
"Gluon"
,
"Allowed"
)
elif
"LL"
in
parameterName
:
process
=
StringBuilder
(
insert_ME
(
"MEee2gZ2ll"
))
process
+=
"set /Herwig/MatrixElements/MEee2gZ2ll:Allowed Charged
\n
"
elif
"WW"
in
parameterName
:
process
=
StringBuilder
(
insert_ME
(
"MEee2VV"
))
process
+=
"set /Herwig/MatrixElements/MEee2VV:Process WW
\n
"
else
:
process
=
StringBuilder
(
insert_ME
(
"MEee2gZ2qq"
))
try
:
ecms
=
float
(
parameterName
)
if
(
ecms
<=
3.75
)
:
process
+=
"set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 3
\n
"
elif
(
ecms
<=
10.6
)
:
process
+=
"set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 4
\n
"
except
:
pass
elif
(
simulation
==
"Powheg"
)
:
if
"LL"
in
parameterName
:
process
=
StringBuilder
(
insert_ME
(
"PowhegMEee2gZ2ll"
))
process
+=
"set /Herwig/MatrixElements/PowhegMEee2gZ2ll:Allowed Charged
\n
"
else
:
process
=
StringBuilder
(
insert_ME
(
"PowhegMEee2gZ2qq"
))
try
:
ecms
=
float
(
parameterName
)
if
(
ecms
<=
3.75
)
:
process
+=
"set /Herwig/MatrixElements/PowhegMEee2gZ2qq:MaximumFlavour 3
\n
"
elif
(
ecms
<=
10.6
)
:
process
+=
"set /Herwig/MatrixElements/PowhegMEee2gZ2qq:MaximumFlavour 4
\n
"
except
:
pass
elif
(
simulation
==
"Matchbox"
)
:
try
:
ecms
=
float
(
parameterName
)
if
(
ecms
<=
3.75
)
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> u ubar"
,
"0"
,
"2"
,
""
,
0
,
0
))
process
+=
addProcess
(
thefactory
,
"e- e+ -> d dbar"
,
"0"
,
"2"
,
""
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"e- e+ -> s sbar"
,
"0"
,
"2"
,
""
,
0
,
0
)
elif
(
ecms
<=
10.6
)
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> u ubar"
,
"0"
,
"2"
,
""
,
0
,
0
))
process
+=
addProcess
(
thefactory
,
"e- e+ -> d dbar"
,
"0"
,
"2"
,
""
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"e- e+ -> c cbar"
,
"0"
,
"2"
,
""
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"e- e+ -> s sbar"
,
"0"
,
"2"
,
""
,
0
,
0
)
else
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> j j"
,
"0"
,
"2"
,
""
,
0
,
0
))
except
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> j j"
,
"0"
,
"2"
,
""
,
0
,
0
))
elif
(
simulation
==
"Merging"
)
:
try
:
ecms
=
float
(
parameterName
)
if
(
ecms
<=
10.1
)
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> j j"
,
"0"
,
"2"
,
""
,
2
,
2
))
process
+=
"read Matchbox/FourFlavourScheme.in"
else
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> j j"
,
"0"
,
"2"
,
""
,
2
,
2
))
except
:
process
=
StringBuilder
(
addProcess
(
thefactory
,
"e- e+ -> j j"
,
"0"
,
"2"
,
""
,
2
,
2
))
# EE-Gamma
elif
(
collider
==
"EE-Gamma"
)
:
if
(
simulation
==
""
)
:
if
(
"mumu"
in
parameterName
)
:
process
=
StringBuilder
(
insert_ME
(
"MEgg2ff"
,
"Muon"
))
process
+=
"set /Herwig/Cuts/Cuts:MHatMin 3.
\n
"
parameterName
=
parameterName
.
replace
(
"Direct-"
,
""
)
elif
(
"tautau"
in
parameterName
)
:
process
=
StringBuilder
(
insert_ME
(
"MEgg2ff"
,
"Tau"
))
process
+=
"set /Herwig/Cuts/Cuts:MHatMin 3.
\n
"
parameterName
=
parameterName
.
replace
(
"Direct-"
,
""
)
elif
(
"Jets"
in
parameterName
)
:
if
(
"Direct"
in
parameterName
)
:
process
=
StringBuilder
(
insert_ME
(
"MEgg2ff"
,
"Quarks"
))
parameterName
=
parameterName
.
replace
(
"Direct-"
,
""
)
elif
(
"Single-Resolved"
in
parameterName
)
:
process
=
StringBuilder
(
insert_ME
(
"MEGammaP2Jets"
,
None
,
"Process"
,
"SubProcess"
))
process
+=
insert_ME
(
"MEGammaP2Jets"
,
None
,
"Process"
,
"SubProcess2"
)
parameterName
=
parameterName
.
replace
(
"Single-Resolved-"
,
""
)
else
:
process
=
StringBuilder
(
insert_ME
(
"MEQCD2to2"
))
parameterName
=
parameterName
.
replace
(
"Double-Resolved-"
,
""
)
process
+=
"insert /Herwig/Cuts/Cuts:OneCuts[0] /Herwig/Cuts/JetKtCut"
process
+=
"set /Herwig/Cuts/JetKtCut:MinKT 3."
else
:
print
(
"process not supported for Gamma Gamma processes at EE"
)
quit
()
else
:
print
(
"Only internal matrix elements currently supported for Gamma Gamma processes at EE"
)
quit
()
elif
(
collider
==
"GammaGamma"
)
:
if
(
simulation
==
""
)
:
if
(
"mumu"
in
parameterName
)
:
process
=
StringBuilder
(
insert_ME
(
"MEgg2ff"
))
process
+=
"set /Herwig/MatrixElements/MEgg2ff:Process Muon
\n
"
process
+=
"set /Herwig/Cuts/Cuts:MHatMin 3.
\n
"
else
:
print
(
"process not supported for Gamma Gamma processes at EE"
)
quit
()
else
:
print
(
"Only internal matrix elements currently supported for Gamma Gamma processes at EE"
)
quit
()
# TVT
elif
(
collider
==
"TVT"
)
:
process
=
StringBuilder
(
"set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/pbar-
\n
"
)
ecms
=
1960.
if
"Run-II"
in
parameterName
:
ecms
=
1960.0
elif
"Run-I"
in
parameterName
:
ecms
=
1800.0
elif
"900"
in
parameterName
:
ecms
=
900.0
elif
"630"
in
parameterName
:
ecms
=
630.0
elif
"300"
in
parameterName
:
ecms
=
300.0
process
+=
collider_lumi
(
ecms
)
if
(
simulation
==
""
)
:
if
"PromptPhoton"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaJet"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 15.
\n
"
elif
"DiPhoton-GammaGamma"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaGamma"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
parameterName
=
parameterName
.
replace
(
"-GammaGamma"
,
""
)
elif
"DiPhoton-GammaJet"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaJet"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
parameterName
=
parameterName
.
replace
(
"-GammaJet"
,
""
)
elif
"UE"
in
parameterName
:
if
"Dipole"
in
parameters
[
"shower"
]:
process
+=
"read snippets/MB-DipoleShower.in
\n
"
else
:
process
+=
"read snippets/MB.in
\n
"
process
+=
"read snippets/Diffraction.in
\n
"
process
+=
"set /Herwig/Decays/DecayHandler:LifeTimeOption 0
\n
"
process
+=
"set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm
\n
"
elif
"Jets"
in
parameterName
:
process
+=
insert_ME
(
"MEQCD2to2"
)
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"DiJets"
in
name
:
process
+=
jet_kt_cut
(
30.
)
cuts
=
[
100.
,
300.
,
600.
,
900.
,
ecms
]
for
i
in
range
(
1
,
len
(
cuts
))
:
tstring
=
"-DiJets-
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
mhat_cut
(
cuts
[
i
-
1
],
cuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
"-DiJets"
)
else
:
if
"Run"
in
parameterName
:
cuts
=
[
5.
,
20.
,
40.
,
80.
,
160.
,
320.
]
elif
"300"
in
parameterName
:
cuts
=
[
5.
,]
elif
"630"
in
parameterName
:
cuts
=
[
5.
,
20.
,
40.
]
elif
"900"
in
parameterName
:
cuts
=
[
5.
,]
cuts
.
append
(
ecms
)
for
i
in
range
(
1
,
len
(
cuts
))
:
tstring
=
"-Jets-
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
jet_kt_cut
(
cuts
[
i
-
1
],
cuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
"-Jets"
)
elif
"Run-I-WZ"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2W2ff"
,
"Electron"
)
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Electron"
)
elif
"Run-II-W"
in
parameterName
or
"Run-I-W"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2W2ff"
,
"Electron"
)
elif
"Run-II-Z-e"
in
parameterName
or
"Run-I-Z"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Electron"
)
elif
"Run-II-Z-LowMass-mu"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Muon"
)
process
+=
addLeptonPairCut
(
"25"
,
"70"
)
elif
"Run-II-Z-HighMass-mu"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Muon"
)
process
+=
addLeptonPairCut
(
"150"
,
"600"
)
elif
"Run-II-Z-mu"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Muon"
)
elif
(
simulation
==
"Powheg"
)
:
if
"Run-I-WZ"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2W2ff"
,
"Electron"
)
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Electron"
)
elif
"Run-II-W"
in
parameterName
or
"Run-I-W"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2W2ff"
,
"Electron"
)
elif
"Run-II-Z-e"
in
parameterName
or
"Run-I-Z"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Electron"
)
elif
"Run-II-Z-LowMass-mu"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Muon"
)
process
+=
addLeptonPairCut
(
"25"
,
"70"
)
elif
"Run-II-Z-HighMass-mu"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Muon"
)
process
+=
addLeptonPairCut
(
"150"
,
"600"
)
elif
"Run-II-Z-mu"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Muon"
)
elif
"DiPhoton-GammaGamma"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaGammaPowheg"
,
"GammaGamma"
)
process
+=
insert_ME
(
"MEGammaGamma"
,
"gg"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
process
+=
jet_kt_cut
(
5.
)
parameterName
=
parameterName
.
replace
(
"-GammaGamma"
,
""
)
elif
"DiPhoton-GammaJet"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaGammaPowheg"
,
"VJet"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
process
+=
jet_kt_cut
(
5.
)
parameterName
=
parameterName
.
replace
(
"-GammaJet"
,
""
)
elif
(
simulation
==
"Matchbox"
or
simulation
==
"Merging"
)
:
if
"Jets"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p -> j j"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p -> j j"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
1
,
0
)
if
"DiJets"
in
parameterName
:
process
+=
addFirstJet
(
"30"
)
+
addSecondJet
(
"25"
)
cuts
=
[
100.
,
300.
,
600.
,
900.
,
ecms
]
for
i
in
range
(
1
,
len
(
cuts
))
:
tstring
=
"-DiJets-
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
addJetPairCut
(
cuts
[
i
-
1
],
cuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
"-DiJets"
)
else
:
if
"Run"
in
parameterName
:
cuts
=
[
5.
,
20.
,
40.
,
80.
,
160.
,
320.
]
elif
"300"
in
parameterName
:
cuts
=
[
5.
,]
elif
"630"
in
parameterName
:
cuts
=
[
5.
,
20.
,
40.
]
elif
"900"
in
parameterName
:
cuts
=
[
5.
,]
cuts
.
append
(
ecms
)
for
i
in
range
(
1
,
len
(
cuts
))
:
tstring
=
"-Jets-
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
addFirstJet
(
cuts
[
i
-
1
],
cuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
"-Jets"
)
elif
"Run-I-WZ"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p pbar e+ e-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p pbar e+ nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p pbar e- nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
particlegroup
(
thefactory
,
'epm'
,
'e+'
,
'e-'
)
process
+=
particlegroup
(
thefactory
,
'epmnu'
,
'e+'
,
'e-'
,
'nu_e'
,
'nu_ebar'
)
process
+=
addProcess
(
thefactory
,
"p pbar epm epmnu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"Run-II-W"
in
parameterName
or
"Run-I-W"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p pbar e+ nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p pbar e- nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
particlegroup
(
thefactory
,
'epm'
,
'e+'
,
'e-'
)
process
+=
addProcess
(
thefactory
,
"p pbar epm nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"Run-II-Z-e"
in
parameterName
or
"Run-I-Z"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p pbar e+ e-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p pbar e+ e-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"Run-II-Z-LowMass-mu"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p pbar mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p pbar mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"25"
,
"70"
)
elif
"Run-II-Z-HighMass-mu"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p pbar mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p pbar mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"150"
,
"600"
)
elif
"Run-II-Z-mu"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p pbar mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p pbar mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
# Star
elif
(
collider
==
"Star"
)
:
process
=
StringBuilder
(
"set /Herwig/Decays/DecayHandler:LifeTimeOption 0
\n
"
)
process
+=
"set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm
\n
"
process
+=
"set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/p+
\n
"
process
+=
collider_lumi
(
200.0
)
process
+=
"set /Herwig/Cuts/Cuts:X2Min 0.01
\n
"
if
(
simulation
==
""
)
:
if
"UE"
in
parameterName
:
if
"Dipole"
in
parameters
[
"shower"
]:
process
+=
"read snippets/MB-DipoleShower.in
\n
"
else
:
process
+=
"read snippets/MB.in
\n
"
process
+=
"read snippets/Diffraction.in
\n
"
else
:
process
+=
insert_ME
(
"MEQCD2to2"
)
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"Jets-1"
in
parameterName
:
process
+=
jet_kt_cut
(
2.
)
elif
"Jets-2"
in
parameterName
:
process
+=
jet_kt_cut
(
5.
)
elif
"Jets-3"
in
parameterName
:
process
+=
jet_kt_cut
(
20.
)
elif
"Jets-4"
in
parameterName
:
process
+=
jet_kt_cut
(
25.
)
else
:
logging
.
error
(
"Star not supported for
%s
"
%
simulation
)
sys
.
exit
(
1
)
# ISR and SppS
elif
(
collider
==
"ISR"
or
collider
==
"SppS"
or
collider
==
"SPS"
or
collider
==
"Fermilab"
)
:
process
=
StringBuilder
(
"set /Herwig/Decays/DecayHandler:LifeTimeOption 0
\n
"
)
process
+=
"set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm
\n
"
if
(
collider
==
"SppS"
)
:
process
=
StringBuilder
(
"set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/pbar-
\n
"
)
if
"17.4"
in
parameterName
:
process
+=
collider_lumi
(
17.4
)
elif
"27.4"
in
parameterName
:
process
+=
collider_lumi
(
27.4
)
elif
"30"
in
parameterName
:
process
+=
collider_lumi
(
30.4
)
elif
"38.8"
in
parameterName
:
process
+=
collider_lumi
(
38.8
)
elif
"44"
in
parameterName
:
process
+=
collider_lumi
(
44.4
)
elif
"53"
in
parameterName
:
process
+=
collider_lumi
(
53.0
)
elif
"62"
in
parameterName
:
process
+=
collider_lumi
(
62.2
)
elif
"63"
in
parameterName
:
process
+=
collider_lumi
(
63.0
)
elif
"200"
in
parameterName
:
process
+=
collider_lumi
(
200.0
)
elif
"500"
in
parameterName
:
process
+=
collider_lumi
(
500.0
)
elif
"546"
in
parameterName
:
process
+=
collider_lumi
(
546.0
)
elif
"900"
in
parameterName
:
process
+=
collider_lumi
(
900.0
)
if
"UE"
in
parameterName
:
if
(
simulation
==
""
)
:
if
"Dipole"
in
parameters
[
"shower"
]:
process
+=
"read snippets/MB-DipoleShower.in
\n
"
else
:
process
+=
"read snippets/MB.in
\n
"
+
if
"EHS"
not
in
name
:
process
+=
"read snippets/Diffraction.in
\n
"
else
:
logging
.
error
(
" SppS and ISR not supported for
%s
"
%
simulation
)
sys
.
exit
(
1
)
elif
"Z-mu"
in
parameterName
:
if
simulation
==
""
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Muon"
)
process
+=
mhat_minm_maxm
(
2
,
2
,
20
)
elif
simulation
==
"Powheg"
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Muon"
)
process
+=
mhat_minm_maxm
(
2
,
2
,
20
)
elif
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addLeptonPairCut
(
"2"
,
"20"
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"2"
,
"20"
)
else
:
logging
.
error
(
" SppS and ISR not supported for
%s
"
%
simulation
)
sys
.
exit
(
1
)
else
:
logging
.
error
(
" Process not supported for SppS and ISR
%s
"
%
parameterName
)
sys
.
exit
(
1
)
# LHC
elif
(
collider
==
"LHC"
)
:
ecms
=
7000.0
if
parameterName
.
startswith
(
"7-"
)
:
ecms
=
7000.0
elif
parameterName
.
startswith
(
"8-"
)
:
ecms
=
8000.0
elif
parameterName
.
startswith
(
"13-"
)
:
ecms
=
13000.0
elif
parameterName
.
startswith
(
"900"
)
:
ecms
=
900.0
elif
parameterName
.
startswith
(
"2360"
)
:
ecms
=
2360.0
elif
parameterName
.
startswith
(
"2760"
)
:
ecms
=
2760.0
elif
parameterName
.
startswith
(
"5-"
)
:
ecms
=
5020.0
else
:
ecms
=
7000.0
process
=
StringBuilder
(
collider_lumi
(
ecms
))
if
(
simulation
==
""
)
:
if
"VBF"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2HiggsVBF"
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"8-"
not
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
addedBRReweighter
=
True
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
elif
"ggHJet"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
addedBRReweighter
=
True
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
process
+=
insert_ME
(
"MEHiggsJet"
)
process
+=
jet_kt_cut
(
20.
)
elif
"ggH"
in
parameterName
:
process
+=
insert_ME
(
"MEHiggs"
)
process
+=
insert_ME
(
"MEHiggsJet"
,
"qqbar"
)
process
+=
jet_kt_cut
(
0.0
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"8-"
not
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
addedBRReweighter
=
True
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
elif
"PromptPhoton"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaJet"
)
if
"PromptPhoton-1"
in
parameterName
:
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
process
+=
"set /Herwig/Cuts/PhotonKtCut:MaxKT 25.
\n
"
parameterName
=
parameterName
.
replace
(
"-1"
,
""
)
elif
"PromptPhoton-2"
in
parameterName
:
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 25.
\n
"
process
+=
"set /Herwig/Cuts/PhotonKtCut:MaxKT 80.
\n
"
parameterName
=
parameterName
.
replace
(
"-2"
,
""
)
elif
"PromptPhoton-3"
in
parameterName
:
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 80.
\n
"
process
+=
"set /Herwig/Cuts/PhotonKtCut:MaxKT 150.
\n
"
parameterName
=
parameterName
.
replace
(
"-3"
,
""
)
elif
"PromptPhoton-4"
in
parameterName
:
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 150.
\n
"
process
+=
"set /Herwig/Cuts/PhotonKtCut:MaxKT 500.
\n
"
parameterName
=
parameterName
.
replace
(
"-4"
,
""
)
elif
"PromptPhoton-5"
in
parameterName
:
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 500.
\n
"
parameterName
=
parameterName
.
replace
(
"-5"
,
""
)
elif
"DiPhoton-GammaGamma"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaGamma"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
parameterName
=
parameterName
.
replace
(
"-GammaGamma"
,
""
)
elif
"DiPhoton-GammaJet"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaJet"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
parameterName
=
parameterName
.
replace
(
"-GammaJet"
,
""
)
elif
"8-WH"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2WH"
)
process
+=
jet_kt_cut
(
0.0
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"8-ZH"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2ZH"
)
process
+=
jet_kt_cut
(
0.0
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"WH"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->b,bbar;"
])
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
])
addedBRReweighter
=
True
process
+=
insert_ME
(
"MEPP2WH"
)
process
+=
jet_kt_cut
(
0.0
)
elif
"ZH"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->b,bbar;"
])
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
])
addedBRReweighter
=
True
process
+=
insert_ME
(
"MEPP2ZH"
)
process
+=
jet_kt_cut
(
0.0
)
elif
"UE"
in
parameterName
or
"Cent"
in
parameterName
:
if
"Dipole"
in
parameters
[
"shower"
]:
process
+=
"read snippets/MB-DipoleShower.in
\n
"
else
:
process
+=
"set /Herwig/Shower/ShowerHandler:IntrinsicPtGaussian 2.2*GeV
\n
"
process
+=
"read snippets/MB.in
\n
"
process
+=
"read snippets/Diffraction.in
\n
"
if
"Long"
in
parameterName
:
process
+=
"set /Herwig/Decays/DecayHandler:MaxLifeTime 100*mm
\n
"
elif
"8-DiJets"
in
parameterName
or
"7-DiJets"
in
parameterName
or
"13-DiJets"
in
parameterName
:
process
+=
insert_ME
(
"MEQCD2to2"
)
process
+=
"set MEQCD2to2:MaximumFlavour 5
\n
"
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"13-DiJets"
not
in
parameterName
:
if
"-A"
in
parameterName
:
process
+=
jet_kt_cut
(
45.
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -3.
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 3.
\n
"
elif
"-B"
in
parameterName
:
process
+=
jet_kt_cut
(
20.
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -2.7
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 2.7
\n
"
elif
"-C"
in
parameterName
:
process
+=
jet_kt_cut
(
20.
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -4.8
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 4.8
\n
"
else
:
if
"-A"
in
parameterName
:
process
+=
jet_kt_cut
(
60.
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -3.
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 3.
\n
"
elif
"-B"
in
parameterName
:
process
+=
jet_kt_cut
(
180.
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -3.
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 3.
\n
"
if
"DiJets-1"
in
parameterName
:
process
+=
mhat_cut
(
90.
)
elif
"DiJets-2"
in
parameterName
:
process
+=
mhat_cut
(
200.
)
elif
"DiJets-3"
in
parameterName
:
process
+=
mhat_cut
(
450.
)
elif
"DiJets-4"
in
parameterName
:
process
+=
mhat_cut
(
750.
)
elif
"DiJets-5"
in
parameterName
:
process
+=
mhat_cut
(
950.
)
elif
"DiJets-6"
in
parameterName
:
process
+=
mhat_cut
(
1550.
)
elif
"DiJets-7"
in
parameterName
:
process
+=
mhat_cut
(
2150.
)
elif
"DiJets-8"
in
parameterName
:
process
+=
mhat_cut
(
2750.
)
elif
"DiJets-9"
in
parameterName
:
process
+=
mhat_cut
(
3750.
)
elif
"DiJets-10"
in
parameterName
:
process
+=
mhat_cut
(
4750.
)
elif
"DiJets-11"
in
parameterName
:
process
+=
mhat_cut
(
5750.
)
elif
(
"7-Jets"
in
parameterName
or
"8-Jets"
in
parameterName
or
"13-Jets"
in
parameterName
or
"2760-Jets"
in
parameterName
)
:
process
+=
insert_ME
(
"MEQCD2to2"
)
process
+=
"set MEQCD2to2:MaximumFlavour 5
\n
"
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"Jets-10"
in
parameterName
:
process
+=
jet_kt_cut
(
1800.
)
elif
"Jets-0"
in
parameterName
:
process
+=
jet_kt_cut
(
5.
)
elif
"Jets-1"
in
parameterName
:
process
+=
jet_kt_cut
(
10.
)
elif
"Jets-2"
in
parameterName
:
process
+=
jet_kt_cut
(
20.
)
elif
"Jets-3"
in
parameterName
:
process
+=
jet_kt_cut
(
40.
)
elif
"Jets-4"
in
parameterName
:
process
+=
jet_kt_cut
(
70.
)
elif
"Jets-5"
in
parameterName
:
process
+=
jet_kt_cut
(
150.
)
elif
"Jets-6"
in
parameterName
:
process
+=
jet_kt_cut
(
200.
)
elif
"Jets-7"
in
parameterName
:
process
+=
jet_kt_cut
(
300.
)
elif
"Jets-8"
in
parameterName
:
process
+=
jet_kt_cut
(
500.
)
elif
"Jets-9"
in
parameterName
:
process
+=
jet_kt_cut
(
800.
)
elif
(
"-Charm"
in
parameterName
or
"-Bottom"
in
parameterName
)
:
if
(
"8-Bottom"
in
parameterName
)
:
addBRReweighter
()
process
+=
selectDecayMode
(
"Jpsi"
,[
"Jpsi->mu-,mu+;"
])
if
"Bottom"
in
parameterName
:
process
+=
"cp MEHeavyQuark MEBottom
\n
"
process
+=
"set MEBottom:QuarkType Bottom
\n
"
process
+=
insert_ME
(
"MEBottom"
)
else
:
process
+=
"cp MEHeavyQuark MECharm
\n
"
process
+=
"set MECharm:QuarkType Charm
\n
"
process
+=
insert_ME
(
"MECharm"
)
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"-0"
in
parameterName
:
if
"Bottom"
in
parameterName
:
process
+=
"set MEBottom:Process Pair
\n
"
process
+=
jet_kt_cut
(
0.
)
else
:
process
+=
jet_kt_cut
(
1.
)
elif
"-1"
in
parameterName
:
process
+=
jet_kt_cut
(
5.
)
elif
"-2"
in
parameterName
:
process
+=
jet_kt_cut
(
15.
)
elif
"-3"
in
parameterName
:
process
+=
jet_kt_cut
(
20.
)
elif
"-4"
in
parameterName
:
process
+=
jet_kt_cut
(
50.
)
elif
"-5"
in
parameterName
:
process
+=
jet_kt_cut
(
80.
)
elif
"-6"
in
parameterName
:
process
+=
jet_kt_cut
(
110.
)
elif
"-7"
in
parameterName
:
process
+=
jet_kt_cut
(
30.
)
+
mhat_cut
(
90.
)
elif
"-8"
in
parameterName
:
process
+=
jet_kt_cut
(
30.
)
+
mhat_cut
(
340.
)
elif
"-9"
in
parameterName
:
process
+=
jet_kt_cut
(
30.
)
+
mhat_cut
(
500.
)
elif
"Top-L"
in
parameterName
:
process
+=
"set MEHeavyQuark:QuarkType Top
\n
"
process
+=
insert_ME
(
"MEHeavyQuark"
)
process
+=
selectDecayMode
(
"t"
,[
"t->nu_e,e+,b;"
,
"t->nu_mu,mu+,b;"
])
process
+=
addBRReweighter
()
elif
"Top-SL"
in
parameterName
:
process
+=
"set MEHeavyQuark:QuarkType Top
\n
"
process
+=
insert_ME
(
"MEHeavyQuark"
)
process
+=
"set /Herwig/Particles/t:Synchronized Not_synchronized
\n
"
process
+=
"set /Herwig/Particles/tbar:Synchronized Not_synchronized
\n
"
process
+=
selectDecayMode
(
"t"
,[
"t->nu_e,e+,b;"
,
"t->nu_mu,mu+,b;"
])
process
+=
selectDecayMode
(
"tbar"
,[
"tbar->b,bbar,cbar;"
,
"tbar->bbar,cbar,d;"
,
"tbar->bbar,cbar,s;"
,
"tbar->bbar,s,ubar;"
,
"tbar->bbar,ubar,d;"
])
process
+=
addBRReweighter
()
elif
"Top-All"
in
parameterName
:
process
+=
"set MEHeavyQuark:QuarkType Top
\n
"
process
+=
insert_ME
(
"MEHeavyQuark"
)
elif
"WZ"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VV"
,
"WZ"
)
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
])
process
+=
selectDecayMode
(
"W-"
,[
"W-->nu_ebar,e-;"
,
"W-->nu_mubar,mu-;"
])
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
])
addedBRReweighter
=
True
elif
"WW-emu"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VV"
,
"WW"
)
process
+=
"set /Herwig/Particles/W+:Synchronized 0
\n
"
process
+=
"set /Herwig/Particles/W-:Synchronized 0
\n
"
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
])
process
+=
selectDecayMode
(
"W-"
,[
"W-->nu_mubar,mu-;"
])
addedBRReweighter
=
True
elif
"WW-ll"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VV"
,
"WW"
)
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
,
"W+->nu_tau,tau+;"
])
addedBRReweighter
=
True
elif
"ZZ-ll"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VV"
,
"ZZ"
)
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
,
"Z0->tau-,tau+;"
])
addedBRReweighter
=
True
elif
"ZZ-lv"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VV"
,
"ZZ"
)
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
,
"Z0->tau-,tau+;"
,
"Z0->nu_e,nu_ebar;"
,
"Z0->nu_mu,nu_mubar;"
,
"Z0->nu_tau,nu_taubar;"
])
addedBRReweighter
=
True
elif
"W-e"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2W2ff"
,
"Electron"
)
elif
"W-mu"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2W2ff"
,
"Muon"
)
elif
"Z-e"
in
parameterName
or
"Z-mu"
in
parameterName
:
if
"Z-e"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Electron"
)
else
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Muon"
)
mcuts
=
[
10
,
35
,
75
,
110
,
400
,
ecms
]
for
i
in
range
(
1
,
6
)
:
tstring
=
"-Mass
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
mhat_minm_maxm
(
mcuts
[
i
-
1
],
mcuts
[
i
-
1
],
mcuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
""
)
elif
"Z-nu"
in
parameterName
:
process
+=
insert_ME
(
"MEqq2gZ2ff"
,
"Neutrinos"
)
elif
"W-Jet"
in
parameterName
:
process
+=
insert_ME
(
"MEWJet"
,
"Electron"
,
"WDecay"
)
if
"W-Jet-1-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/WBosonKtCut:MinKT 100.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"W-Jet-1-e"
,
"W-Jet-e"
)
elif
"W-Jet-2-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/WBosonKtCut:MinKT 190.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"W-Jet-2-e"
,
"W-Jet-e"
)
elif
"W-Jet-3-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/WBosonKtCut:MinKT 270.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"W-Jet-3-e"
,
"W-Jet-e"
)
elif
"Z-Jet"
in
parameterName
:
if
"-e"
in
parameterName
:
process
+=
insert_ME
(
"MEZJet"
,
"Electron"
,
"ZDecay"
)
if
"Z-Jet-0-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/ZBosonKtCut:MinKT 35.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"Z-Jet-0-e"
,
"Z-Jet-e"
)
elif
"Z-Jet-1-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/ZBosonKtCut:MinKT 100.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"Z-Jet-1-e"
,
"Z-Jet-e"
)
elif
"Z-Jet-2-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/ZBosonKtCut:MinKT 190.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"Z-Jet-2-e"
,
"Z-Jet-e"
)
elif
"Z-Jet-3-e"
in
parameterName
:
process
+=
"set /Herwig/Cuts/ZBosonKtCut:MinKT 270.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"Z-Jet-3-e"
,
"Z-Jet-e"
)
else
:
process
+=
insert_ME
(
"MEZJet"
,
"Muon"
,
"ZDecay"
)
process
+=
"set /Herwig/Cuts/ZBosonKtCut:MinKT 35.0*GeV
\n
"
parameterName
=
parameterName
.
replace
(
"Z-Jet-0-mu"
,
"Z-Jet-mu"
)
elif
"WGamma"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VGamma"
,
"1"
)
process
+=
"set MEPP2VGamma:MassOption 1"
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 10.
\n
"
if
"-e"
in
parameterName
:
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
])
addedBRReweighter
=
True
else
:
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_mu,mu+;"
])
addedBRReweighter
=
True
elif
"ZGamma"
in
parameterName
:
process
+=
insert_ME
(
"MEPP2VGamma"
,
"2"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 10.
\n
"
if
"-e"
in
parameterName
:
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
])
addedBRReweighter
=
True
elif
"-mu"
in
parameterName
:
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->mu-,mu+;"
])
addedBRReweighter
=
True
elif
"-nu"
in
parameterName
:
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->nu_e,nu_ebar;"
,
"Z0->nu_mu,nu_mubar;"
,
"Z0->nu_tau,nu_taubar;"
])
addedBRReweighter
=
True
else
:
logging
.
error
(
" Process
%s
not supported for internal matrix elements"
%
name
)
sys
.
exit
(
1
)
elif
(
simulation
==
"Powheg"
)
:
if
"VBF"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEPP2HiggsVBF"
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"8-"
not
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
addedBRReweighter
=
True
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
elif
"ggHJet"
in
parameterName
:
logging
.
error
(
" Process
%s
not supported for POWHEG matrix elements"
%
name
)
sys
.
exit
(
1
)
elif
"ggH"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEHiggs"
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"8-"
not
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
addedBRReweighter
=
True
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
elif
"8-WH"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEPP2WH"
)
process
+=
jet_kt_cut
(
0.0
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"8-ZH"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEPP2ZH"
)
process
+=
jet_kt_cut
(
0.0
)
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
addedBRReweighter
=
True
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
addedBRReweighter
=
True
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
addedBRReweighter
=
True
elif
"WH"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->b,bbar;"
])
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
])
addedBRReweighter
=
True
process
+=
insert_ME
(
"PowhegMEPP2WH"
)
process
+=
jet_kt_cut
(
0.0
)
elif
"ZH"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->b,bbar;"
])
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
])
addedBRReweighter
=
True
process
+=
insert_ME
(
"PowhegMEPP2ZH"
)
process
+=
jet_kt_cut
(
0.0
)
elif
"UE"
in
parameterName
:
logging
.
error
(
" Process
%s
not supported for powheg matrix elements"
%
name
)
sys
.
exit
(
1
)
elif
"WZ"
in
parameterName
:
process
+=
"create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
"set /Herwig/NewPhysics/DecayHandler:NewStep No
\n
"
process
+=
"set /Herwig/Shower/ShowerHandler:SplitHardProcess No
\n
"
;
process
+=
"set /Herwig/Decays/ZDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"set /Herwig/Decays/WDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-
\n
"
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+
\n
"
process
+=
"insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
insert_ME
(
"PowhegMEPP2VV"
,
"WZ"
)
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
])
process
+=
selectDecayMode
(
"W-"
,[
"W-->nu_ebar,e-;"
,
"W-->nu_mubar,mu-;"
])
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
])
addedBRReweighter
=
True
elif
"WW-emu"
in
parameterName
:
process
+=
"create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
"set /Herwig/NewPhysics/DecayHandler:NewStep No
\n
"
process
+=
"set /Herwig/Shower/ShowerHandler:SplitHardProcess No
\n
"
;
process
+=
"set /Herwig/Decays/ZDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"set /Herwig/Decays/WDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-
\n
"
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+
\n
"
process
+=
"insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
insert_ME
(
"PowhegMEPP2VV"
,
"WW"
)
process
+=
"set /Herwig/Particles/W+:Synchronized 0
\n
"
process
+=
"set /Herwig/Particles/W-:Synchronized 0
\n
"
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
])
process
+=
selectDecayMode
(
"W-"
,[
"W-->nu_mubar,mu-;"
])
addedBRReweighter
=
True
elif
"WW-ll"
in
parameterName
:
process
+=
"create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
"set /Herwig/NewPhysics/DecayHandler:NewStep No
\n
"
process
+=
"set /Herwig/Shower/ShowerHandler:SplitHardProcess No
\n
"
;
process
+=
"set /Herwig/Decays/ZDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"set /Herwig/Decays/WDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-
\n
"
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+
\n
"
process
+=
"insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
insert_ME
(
"PowhegMEPP2VV"
,
"WW"
)
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
,
"W+->nu_tau,tau+;"
])
addedBRReweighter
=
True
elif
"ZZ-ll"
in
parameterName
:
process
+=
"create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
"set /Herwig/NewPhysics/DecayHandler:NewStep No
\n
"
process
+=
"set /Herwig/Shower/ShowerHandler:SplitHardProcess No
\n
"
;
process
+=
"set /Herwig/Decays/ZDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"set /Herwig/Decays/WDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-
\n
"
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+
\n
"
process
+=
"insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
insert_ME
(
"PowhegMEPP2VV"
,
"ZZ"
)
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
,
"Z0->tau-,tau+;"
])
addedBRReweighter
=
True
elif
"ZZ-lv"
in
parameterName
:
process
+=
"create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
"set /Herwig/NewPhysics/DecayHandler:NewStep No
\n
"
process
+=
"set /Herwig/Shower/ShowerHandler:SplitHardProcess No
\n
"
;
process
+=
"set /Herwig/Decays/ZDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"set /Herwig/Decays/WDecayer:PhotonGenerator NULL
\n
"
;
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-
\n
"
process
+=
"insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+
\n
"
process
+=
"insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler
\n
"
process
+=
insert_ME
(
"PowhegMEPP2VV"
,
"ZZ"
)
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
,
"Z0->tau-,tau+;"
,
"Z0->nu_e,nu_ebar;"
,
"Z0->nu_mu,nu_mubar;"
,
"Z0->nu_tau,nu_taubar;"
])
addedBRReweighter
=
True
elif
"W-e"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2W2ff"
,
"Electron"
)
elif
"W-mu"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2W2ff"
,
"Muon"
)
elif
"Z-e"
in
parameterName
or
"Z-mu"
in
parameterName
:
if
"Z-e"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Electron"
)
else
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Muon"
)
mcuts
=
[
10
,
35
,
75
,
110
,
400
,
ecms
]
for
i
in
range
(
1
,
6
)
:
tstring
=
"-Mass
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
mhat_minm_maxm
(
mcuts
[
i
-
1
],
mcuts
[
i
-
1
],
mcuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
""
)
elif
"Z-nu"
in
parameterName
:
process
+=
insert_ME
(
"PowhegMEqq2gZ2ff"
,
"Neutrinos"
)
elif
"DiPhoton-GammaGamma"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaGammaPowheg"
,
"GammaGamma"
)
process
+=
insert_ME
(
"MEGammaGamma"
,
"gg"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
process
+=
jet_kt_cut
(
5.
)
parameterName
=
parameterName
.
replace
(
"-GammaGamma"
,
""
)
elif
"DiPhoton-GammaJet"
in
parameterName
:
process
+=
insert_ME
(
"MEGammaGammaPowheg"
,
"VJet"
)
process
+=
"set /Herwig/Cuts/PhotonKtCut:MinKT 5.
\n
"
process
+=
jet_kt_cut
(
5.
)
parameterName
=
parameterName
.
replace
(
"-GammaJet"
,
""
)
else
:
logging
.
error
(
" Process
%s
not supported for internal POWHEG matrix elements"
%
name
)
sys
.
exit
(
1
)
elif
(
simulation
==
"Matchbox"
or
simulation
==
"Merging"
)
:
if
"VBF"
in
parameterName
:
parameters
[
"nlo"
]
=
"read Matchbox/VBFNLO.in
\n
"
if
(
simulation
==
"Merging"
):
process
+=
"cd /Herwig/Merging/
\n
"
process
+=
"insert "
+
thefactory
+
":DiagramGenerator:RestrictLines 0 /Herwig/Particles/Z0
\n
"
process
+=
"insert "
+
thefactory
+
":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W+
\n
"
process
+=
"insert "
+
thefactory
+
":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W-
\n
"
process
+=
"insert "
+
thefactory
+
":DiagramGenerator:RestrictLines 0 /Herwig/Particles/gamma
\n
"
process
+=
"do "
+
thefactory
+
":DiagramGenerator:TimeLikeRange 0 0
\n
"
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p h0 j j"
,
"0"
,
"3"
,
"FixedScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p h0 j j"
,
"0"
,
"3"
,
"FixedScale"
,
1
,
1
)
process
+=
setHardProcessWidthToZero
([
"h0"
])
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7
\n
"
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
process
+=
addBRReweighter
()
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
process
+=
addBRReweighter
()
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
process
+=
addBRReweighter
()
elif
"8-"
not
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
process
+=
addBRReweighter
()
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
elif
"ggHJet"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"ggHJet not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
parameters
[
"nlo"
]
=
"read Matchbox/MadGraph-GoSam.in
\n
read Matchbox/HiggsEffective.in
\n
"
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
process
+=
addBRReweighter
()
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
process
+=
setHardProcessWidthToZero
([
"h0"
])
process
+=
addProcess
(
thefactory
,
"p p h0 j"
,
"3"
,
"1"
,
"FixedScale"
,
0
,
0
)
process
+=
addFirstJet
(
"20"
)
process
+=
"set "
+
thefactory
+
":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/FixedScale
\n
"
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7
\n
"
elif
"ggH"
in
parameterName
:
parameters
[
"nlo"
]
=
"read Matchbox/MadGraph-GoSam.in
\n
read Matchbox/HiggsEffective.in
\n
"
if
(
simulation
==
"Merging"
):
process
+=
"cd /Herwig/MatrixElements/Matchbox/Amplitudes
\n
set OpenLoops:HiggsEff Yes
\n
set MadGraph:Model heft
\n
"
process
+=
"cd /Herwig/Merging/
\n
"
process
+=
setHardProcessWidthToZero
([
"h0"
])
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p h0"
,
"2"
,
"1"
,
"FixedScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p h0"
,
"2"
,
"1"
,
"FixedScale"
,
2
,
2
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7
\n
"
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
process
+=
addBRReweighter
()
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
process
+=
addBRReweighter
()
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
process
+=
addBRReweighter
()
elif
"8-"
not
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->tau-,tau+;"
])
process
+=
addBRReweighter
()
process
+=
"set /Herwig/Particles/tau-:Stable Stable
\n
"
elif
"8-WH"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"8-WH not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"h0"
,
"W+"
,
"W-"
])
process
+=
addProcess
(
thefactory
,
"p p W+ h0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p W- h0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7
\n
"
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
process
+=
addBRReweighter
()
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
process
+=
addBRReweighter
()
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
process
+=
addBRReweighter
()
elif
"8-ZH"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"8-ZH not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"h0"
,
"Z0"
])
process
+=
addProcess
(
thefactory
,
"p p Z0 h0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7
\n
"
if
"GammaGamma"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->gamma,gamma;"
])
process
+=
addBRReweighter
()
elif
"WW"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->W+,W-;"
])
process
+=
addBRReweighter
()
elif
"ZZ"
in
parameterName
:
process
+=
selectDecayMode
(
"h0"
,[
"h0->Z0,Z0;"
])
process
+=
addBRReweighter
()
elif
"WH"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"WH not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
selectDecayMode
(
"h0"
,[
"h0->b,bbar;"
])
process
+=
addBRReweighter
()
process
+=
setHardProcessWidthToZero
([
"h0"
])
process
+=
addProcess
(
thefactory
,
"p p e+ nu h0"
,
"0"
,
"3"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p e- nu h0"
,
"0"
,
"3"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p mu+ nu h0"
,
"0"
,
"3"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p mu- nu h0"
,
"0"
,
"3"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"ZH"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"ZH not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
selectDecayMode
(
"h0"
,[
"h0->b,bbar;"
])
process
+=
addBRReweighter
()
process
+=
setHardProcessWidthToZero
([
"h0"
])
process
+=
addProcess
(
thefactory
,
"p p e+ e- h0"
,
"0"
,
"3"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p mu+ mu- h0"
,
"0"
,
"3"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"UE"
in
parameterName
:
logging
.
error
(
" Process
%s
not supported for Matchbox matrix elements"
%
name
)
sys
.
exit
(
1
)
elif
"8-DiJets"
in
parameterName
or
"7-DiJets"
in
parameterName
or
"13-DiJets"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p j j"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p j j"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
1
,
1
)
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"13-DiJets"
not
in
parameterName
:
if
"-A"
in
parameterName
:
process
+=
addFirstJet
(
"45"
)
process
+=
addSecondJet
(
"25"
)
process
+=
"set /Herwig/Cuts/FirstJet:YRange -3. 3.
\n
"
process
+=
"set /Herwig/Cuts/SecondJet:YRange -3. 3.
\n
"
elif
"-B"
in
parameterName
:
process
+=
addFirstJet
(
"20"
)
process
+=
addSecondJet
(
"15"
)
process
+=
"set /Herwig/Cuts/FirstJet:YRange -2.7 2.7
\n
"
process
+=
"set /Herwig/Cuts/SecondJet:YRange -2.7 2.7
\n
"
elif
"-C"
in
parameterName
:
process
+=
addFirstJet
(
"20"
)
process
+=
addSecondJet
(
"15"
)
process
+=
"set /Herwig/Cuts/FirstJet:YRange -4.8 4.8
\n
"
process
+=
"set /Herwig/Cuts/SecondJet:YRange -4.8 4.8
\n
"
else
:
logging
.
error
(
"Exit 00001"
)
sys
.
exit
(
1
)
else
:
if
"-A"
in
parameterName
:
process
+=
addFirstJet
(
"75."
)
process
+=
addSecondJet
(
"60."
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -3.
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 3.
\n
"
elif
"-B"
in
parameterName
:
process
+=
addFirstJet
(
"220."
)
process
+=
addSecondJet
(
"180."
)
process
+=
"set /Herwig/Cuts/JetKtCut:MinEta -3.
\n
"
process
+=
"set /Herwig/Cuts/JetKtCut:MaxEta 3.
\n
"
else
:
logging
.
error
(
"Exit 00001"
)
sys
.
exit
(
1
)
if
"DiJets-1"
in
parameterName
:
process
+=
addJetPairCut
(
"90"
)
elif
"DiJets-2"
in
parameterName
:
process
+=
addJetPairCut
(
"200"
)
elif
"DiJets-3"
in
parameterName
:
process
+=
addJetPairCut
(
"450"
)
elif
"DiJets-4"
in
parameterName
:
process
+=
addJetPairCut
(
"750"
)
elif
"DiJets-5"
in
parameterName
:
process
+=
addJetPairCut
(
"950"
)
elif
"DiJets-6"
in
parameterName
:
process
+=
addJetPairCut
(
"1550"
)
elif
"DiJets-7"
in
parameterName
:
process
+=
addJetPairCut
(
"2150"
)
elif
"DiJets-8"
in
parameterName
:
process
+=
addJetPairCut
(
"2750"
)
elif
"DiJets-9"
in
parameterName
:
process
+=
mhat_cut
(
3750.
)
elif
"DiJets-10"
in
parameterName
:
process
+=
mhat_cut
(
4750.
)
elif
"DiJets-11"
in
parameterName
:
process
+=
mhat_cut
(
5750.
)
else
:
logging
.
error
(
"Exit 00002"
)
sys
.
exit
(
1
)
elif
(
"7-Jets"
in
parameterName
or
"8-Jets"
in
parameterName
or
"13-Jets"
in
parameterName
or
"2760-Jets"
in
parameterName
)
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p j j"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p j j"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
1
,
1
)
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"Jets-10"
in
parameterName
:
process
+=
addFirstJet
(
"1800"
)
elif
"Jets-0"
in
parameterName
:
process
+=
addFirstJet
(
"5"
)
elif
"Jets-1"
in
parameterName
:
process
+=
addFirstJet
(
"10"
)
elif
"Jets-2"
in
parameterName
:
process
+=
addFirstJet
(
"20"
)
elif
"Jets-3"
in
parameterName
:
process
+=
addFirstJet
(
"40"
)
elif
"Jets-4"
in
parameterName
:
process
+=
addFirstJet
(
"70"
)
elif
"Jets-5"
in
parameterName
:
process
+=
addFirstJet
(
"150"
)
elif
"Jets-6"
in
parameterName
:
process
+=
addFirstJet
(
"200"
)
elif
"Jets-7"
in
parameterName
:
process
+=
addFirstJet
(
"300"
)
elif
"Jets-8"
in
parameterName
:
process
+=
addFirstJet
(
"500"
)
elif
"Jets-9"
in
parameterName
:
process
+=
addFirstJet
(
"800"
)
else
:
logging
.
error
(
"Exit 00003"
)
sys
.
exit
(
1
)
elif
(
"-Charm"
in
parameterName
or
"-Bottom"
in
parameterName
)
:
parameters
[
"bscheme"
]
=
fourFlavour
process
+=
"set /Herwig/Particles/b:HardProcessMass 4.2*GeV
\n
"
process
+=
"set /Herwig/Particles/bbar:HardProcessMass 4.2*GeV
\n
"
if
(
"8-Bottom"
in
parameterName
)
:
addBRReweighter
()
process
+=
selectDecayMode
(
"Jpsi"
,[
"Jpsi->mu-,mu+;"
])
if
"Bottom"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p b bbar"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p b bbar"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
1
,
0
)
else
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p c cbar"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p c cbar"
,
"2"
,
"0"
,
"MaxJetPtScale"
,
1
,
0
)
process
+=
"set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0
\n
"
if
"-0"
in
parameterName
:
process
+=
addFirstJet
(
"0"
)
elif
"-1"
in
parameterName
:
process
+=
addFirstJet
(
"5"
)
elif
"-2"
in
parameterName
:
process
+=
addFirstJet
(
"15"
)
elif
"-3"
in
parameterName
:
process
+=
addFirstJet
(
"20"
)
elif
"-4"
in
parameterName
:
process
+=
addFirstJet
(
"50"
)
elif
"-5"
in
parameterName
:
process
+=
addFirstJet
(
"80"
)
elif
"-6"
in
parameterName
:
process
+=
addFirstJet
(
"110"
)
elif
"-7"
in
parameterName
:
process
+=
addFirstJet
(
"30"
)
process
+=
addSecondJet
(
"25"
)
process
+=
addJetPairCut
(
"90"
)
elif
"-8"
in
parameterName
:
process
+=
addFirstJet
(
"30"
)
process
+=
addSecondJet
(
"25"
)
process
+=
addJetPairCut
(
"340"
)
elif
"-9"
in
parameterName
:
process
+=
addFirstJet
(
"30"
)
process
+=
addSecondJet
(
"25"
)
process
+=
addJetPairCut
(
"500"
)
else
:
logging
.
error
(
"Exit 00004"
)
sys
.
exit
(
1
)
elif
"Top-L"
in
parameterName
:
process
+=
setHardProcessWidthToZero
([
"t"
,
"tbar"
])
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p t tbar"
,
"2"
,
"0"
,
"TopPairMTScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p t tbar"
,
"2"
,
"0"
,
"TopPairMTScale"
,
2
,
2
)
process
+=
selectDecayMode
(
"t"
,[
"t->nu_e,e+,b;"
,
"t->nu_mu,mu+,b;"
])
process
+=
addBRReweighter
()
elif
"Top-SL"
in
parameterName
:
process
+=
setHardProcessWidthToZero
([
"t"
,
"tbar"
])
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p t tbar"
,
"2"
,
"0"
,
"TopPairMTScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p t tbar"
,
"2"
,
"0"
,
"TopPairMTScale"
,
2
,
2
)
process
+=
"set /Herwig/Particles/t:Synchronized Not_synchronized
\n
"
process
+=
"set /Herwig/Particles/tbar:Synchronized Not_synchronized
\n
"
process
+=
selectDecayMode
(
"t"
,[
"t->nu_e,e+,b;"
,
"t->nu_mu,mu+,b;"
])
process
+=
selectDecayMode
(
"tbar"
,[
"tbar->b,bbar,cbar;"
,
"tbar->bbar,cbar,d;"
,
"tbar->bbar,cbar,s;"
,
"tbar->bbar,s,ubar;"
,
"tbar->bbar,ubar,d;"
])
process
+=
addBRReweighter
()
elif
"Top-All"
in
parameterName
:
process
+=
setHardProcessWidthToZero
([
"t"
,
"tbar"
])
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p t tbar"
,
"2"
,
"0"
,
"TopPairMTScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p t tbar"
,
"2"
,
"0"
,
"TopPairMTScale"
,
2
,
2
)
elif
"WZ"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"WZ not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"W+"
,
"W-"
,
"Z0"
])
process
+=
addProcess
(
thefactory
,
"p p W+ Z0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p W- Z0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 171.6*GeV
\n\n
"
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
])
process
+=
selectDecayMode
(
"W-"
,[
"W-->nu_ebar,e-;"
,
"W-->nu_mubar,mu-;"
])
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
])
process
+=
addBRReweighter
()
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"WW-emu"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"WW-emu not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"W+"
,
"W-"
,
"Z0"
])
process
+=
addProcess
(
thefactory
,
"p p W+ W-"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 160.8*GeV
\n
"
process
+=
"set /Herwig/Particles/W+:Synchronized 0
\n
"
process
+=
"set /Herwig/Particles/W-:Synchronized 0
\n
"
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
])
process
+=
selectDecayMode
(
"W-"
,[
"W-->nu_mubar,mu-;"
])
process
+=
addBRReweighter
()
parameters
[
"bscheme"
]
=
"read Matchbox/FourFlavourScheme.in
\n
"
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"WW-ll"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"WW-ll not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"W+"
,
"W-"
,
"Z0"
])
process
+=
addProcess
(
thefactory
,
"p p W+ W-"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 160.8*GeV
\n
"
process
+=
selectDecayMode
(
"W+"
,[
"W+->nu_e,e+;"
,
"W+->nu_mu,mu+;"
,
"W+->nu_tau,tau+;"
])
process
+=
addBRReweighter
()
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
parameters
[
"bscheme"
]
=
"read Matchbox/FourFlavourScheme.in
\n
"
elif
"ZZ-ll"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"ZZ-ll not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"W+"
,
"W-"
,
"Z0"
])
process
+=
addProcess
(
thefactory
,
"p p Z0 Z0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 182.2*GeV
\n
"
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
,
"Z0->tau-,tau+;"
])
process
+=
addBRReweighter
()
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"ZZ-lv"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"ZZ-lv not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
setHardProcessWidthToZero
([
"W+"
,
"W-"
,
"Z0"
])
process
+=
addProcess
(
thefactory
,
"p p Z0 Z0"
,
"0"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 182.2*GeV
\n
"
process
+=
selectDecayMode
(
"Z0"
,[
"Z0->e-,e+;"
,
"Z0->mu-,mu+;"
,
"Z0->tau-,tau+;"
,
"Z0->nu_e,nu_ebar;"
,
"Z0->nu_mu,nu_mubar;"
,
"Z0->nu_tau,nu_taubar;"
])
process
+=
addBRReweighter
()
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"W-e"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p e+ nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p e- nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
particlegroup
(
thefactory
,
'epm'
,
'e+'
,
'e-'
)
process
+=
addProcess
(
thefactory
,
"p p epm nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"W-mu"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p mu+ nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p mu- nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
particlegroup
(
thefactory
,
'mupm'
,
'mu+'
,
'mu-'
)
process
+=
addProcess
(
thefactory
,
"p p mupm nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"Z-e"
in
parameterName
or
"Z-mu"
in
parameterName
:
if
"Z-e"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p e+ e-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p e+ e-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
elif
"Z-mu"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p mu+ mu-"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
mcuts
=
[
10
,
35
,
75
,
110
,
400
,
ecms
]
for
i
in
range
(
1
,
6
)
:
tstring
=
"-Mass
%s
"
%
i
if
tstring
in
parameterName
:
process
+=
addLeptonPairCut
(
mcuts
[
i
-
1
],
mcuts
[
i
])
parameterName
=
parameterName
.
replace
(
tstring
,
""
)
elif
"Z-nu"
in
parameterName
:
if
(
simulation
==
"Matchbox"
):
process
+=
addProcess
(
thefactory
,
"p p nu nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
elif
(
simulation
==
"Merging"
):
process
+=
addProcess
(
thefactory
,
"p p nu nu"
,
"0"
,
"2"
,
"LeptonPairMassScale"
,
2
,
2
)
elif
"Z-jj"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"Z-jj not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
addProcess
(
thefactory
,
"p p e+ e- j j"
,
"2"
,
"2"
,
"LeptonPairMassScale"
,
0
,
0
)
process
+=
addFirstJet
(
"40"
)
process
+=
addSecondJet
(
"30"
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"W-Jet"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"W-Jet not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
addProcess
(
thefactory
,
"p p e+ nu j"
,
"1"
,
"2"
,
"HTScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p e- nu j"
,
"1"
,
"2"
,
"HTScale"
,
0
,
0
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
if
"W-Jet-1-e"
in
parameterName
:
process
+=
addFirstJet
(
"100"
)
parameterName
=
parameterName
.
replace
(
"W-Jet-1-e"
,
"W-Jet-e"
)
elif
"W-Jet-2-e"
in
parameterName
:
process
+=
addFirstJet
(
"190"
)
parameterName
=
parameterName
.
replace
(
"W-Jet-2-e"
,
"W-Jet-e"
)
elif
"W-Jet-3-e"
in
parameterName
:
process
+=
addFirstJet
(
"270"
)
parameterName
=
parameterName
.
replace
(
"W-Jet-3-e"
,
"W-Jet-e"
)
else
:
logging
.
error
(
"Exit 00005"
)
sys
.
exit
(
1
)
elif
"Z-Jet"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"Z-Jet not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
if
"-e"
in
parameterName
:
process
+=
addProcess
(
thefactory
,
"p p e+ e- j"
,
"1"
,
"2"
,
"HTScale"
,
0
,
0
)
if
"Z-Jet-0-e"
in
parameterName
:
process
+=
addFirstJet
(
"35"
)
parameterName
=
parameterName
.
replace
(
"Z-Jet-0-e"
,
"Z-Jet-e"
)
elif
"Z-Jet-1-e"
in
parameterName
:
process
+=
addFirstJet
(
"100"
)
parameterName
=
parameterName
.
replace
(
"Z-Jet-1-e"
,
"Z-Jet-e"
)
elif
"Z-Jet-2-e"
in
parameterName
:
process
+=
addFirstJet
(
"190"
)
parameterName
=
parameterName
.
replace
(
"Z-Jet-2-e"
,
"Z-Jet-e"
)
elif
"Z-Jet-3-e"
in
parameterName
:
process
+=
addFirstJet
(
"270"
)
parameterName
=
parameterName
.
replace
(
"Z-Jet-3-e"
,
"Z-Jet-e"
)
else
:
logging
.
error
(
"Exit 00006"
)
sys
.
exit
(
1
)
else
:
process
+=
addProcess
(
thefactory
,
"p p mu+ mu- j"
,
"1"
,
"2"
,
"HTScale"
,
0
,
0
)
process
+=
addFirstJet
(
"35"
)
parameterName
=
parameterName
.
replace
(
"Z-Jet-0-mu"
,
"Z-Jet-mu"
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"Z-bb"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"Z-bb not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
parameters
[
"bscheme"
]
=
fourFlavour
process
+=
"set /Herwig/Particles/b:HardProcessMass 4.2*GeV
\n
set /Herwig/Particles/bbar:HardProcessMass 4.2*GeV
\n
"
process
+=
addProcess
(
thefactory
,
"p p e+ e- b bbar"
,
"2"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
addLeptonPairCut
(
"66"
,
"116"
)
process
+=
addFirstJet
(
"18"
)
process
+=
addSecondJet
(
"15"
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
elif
"Z-b"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"Z-b not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
process
+=
particlegroup
(
thefactory
,
'bjet'
,
'b'
,
'bbar'
)
process
+=
addProcess
(
thefactory
,
"p p e+ e- bjet"
,
"1"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 91.2*GeV
\n
"
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
process
+=
addFirstJet
(
"15"
)
elif
"W-b"
in
parameterName
:
if
(
simulation
==
"Merging"
):
logging
.
warning
(
"W-b not explicitly tested for
%s
"
%
simulation
)
sys
.
exit
(
0
)
parameters
[
"bscheme"
]
=
fourFlavour
process
+=
"set /Herwig/Particles/b:HardProcessMass 4.2*GeV
\n
set /Herwig/Particles/bbar:HardProcessMass 4.2*GeV
\n
"
process
+=
addProcess
(
thefactory
,
"p p e- nu b bbar"
,
"2"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
addProcess
(
thefactory
,
"p p mu+ nu b bbar"
,
"2"
,
"2"
,
"FixedScale"
,
0
,
0
)
process
+=
"set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 80.4*GeV
\n
"
process
+=
addFirstJet
(
"30"
)
process
+=
addLeptonPairCut
(
"60"
,
"120"
)
else
:
logging
.
error
(
" Process
%s
not supported for Matchbox matrix elements"
%
name
)
sys
.
exit
(
1
)
# LHC-GammaGamma
elif
(
collider
==
"LHC-GammaGamma"
)
:
if
"7"
in
parameterName
:
process
=
StringBuilder
(
collider_lumi
(
7000.0
))
elif
"8"
in
parameterName
:
process
=
StringBuilder
(
collider_lumi
(
8000.0
))
elif
"13"
in
parameterName
:
process
=
StringBuilder
(
collider_lumi
(
13000.0
))
else
:
process
=
StringBuilder
(
collider_lumi
(
7000.0
))
if
(
simulation
==
""
)
:
process
+=
"cp MEgg2ff MEgg2ee
\n
"
process
+=
insert_ME
(
"MEgg2ee"
,
"Electron"
)
process
+=
"cp MEgg2ff MEgg2mm
\n
"
process
+=
insert_ME
(
"MEgg2mm"
,
"Muon"
)
else
:
logging
.
error
(
"LHC-GammaGamma not supported for
%s
"
%
simulation
)
sys
.
exit
(
1
)
+
pion
=
False
+
if
"Pion-"
in
parameterName
and
have_hadronic_collider
:
+
parameterName
=
parameterName
.
replace
(
"Pion-"
,
""
)
+
pion
=
True
+
if
"EHS"
in
name
:
pFile
=
os
.
path
.
join
(
collider
,
"{c}-{pn}.in"
.
format
(
c
=
"EHS"
,
pn
=
parameterName
))
elif
"Photo"
==
name
[
0
:
5
]
:
pFile
=
os
.
path
.
join
(
collider
,
"{c}-{pn}.in"
.
format
(
c
=
"Photo"
,
pn
=
parameterName
))
else
:
pFile
=
os
.
path
.
join
(
collider
,
"{c}-{pn}.in"
.
format
(
c
=
collider
,
pn
=
parameterName
))
with
open
(
os
.
path
.
join
(
"Rivet"
,
pFile
),
'r'
)
as
f
:
parameters
[
'parameterFile'
]
=
f
.
read
()
parameters
[
'runname'
]
=
'Rivet-
%s
'
%
name
parameters
[
'process'
]
=
str
(
process
)
if
have_hadronic_collider
:
if
"EHS"
in
name
:
parameters
[
'collider'
]
=
"PPCollider.in
\n
read snippets/FixedTarget-PP.in"
else
:
parameters
[
'collider'
]
=
"PPCollider.in"
+
if
pion
:
+
parameters
[
'collider'
]
+=
"
\n
read snippets/PionPDF.in
\n
set /Herwig/Generators/EventGenerator:EventHandler:BeamA /Herwig/Particles/pi+
\n
"
+
parameters
[
'collider'
]
+=
"set /Herwig/Shower/ShowerHandler:PDFA /Herwig/Partons/PionPDF
\n
set /Herwig/Shower/ShowerHandler:PDFARemnant /Herwig/Partons/PionPDF
\n
"
+
parameters
[
'collider'
]
+=
"set /Herwig/Partons/PPExtractor:FirstPDF /Herwig/Partons/PionPDF
\n
set /Herwig/Partons/MPIExtractor:FirstPDF /Herwig/Partons/PionPDF
\n
"
+
parameters
[
'collider'
]
+=
"set /Herwig/EventHandlers/FixedTargetLuminosity:BeamParticle /Herwig/Particles/pi+
\n
"
#check if selecteddecaymode and addedBRReweighter is consistent
if
selecteddecaymode
and
not
addedBRReweighter
:
logging
.
error
(
"Decaymode was selected but no BRReweighter was added."
)
sys
.
exit
(
1
)
if
addedBRReweighter
and
not
selecteddecaymode
:
logging
.
error
(
"BRReweighter was added but no Decaymode was selected."
)
sys
.
exit
(
1
)
# check that we only add one process if in merging mode:
if
numberOfAddedProcesses
>
1
and
simulation
==
"Merging"
:
logging
.
error
(
"In Merging only one process is allowed at the moment. See ticket #403."
)
sys
.
exit
(
1
)
# Check if a process was added for Merging or Matchbox:
if
numberOfAddedProcesses
==
0
and
(
simulation
==
"Merging"
or
simulation
==
"Matchbox"
):
logging
.
error
(
"No process was selected."
)
sys
.
exit
(
1
)
# get template and write the file
with
open
(
os
.
path
.
join
(
"Rivet/Templates"
,
templateName
),
'r'
)
as
f
:
templateText
=
f
.
read
()
template
=
Template
(
templateText
)
with
open
(
os
.
path
.
join
(
"Rivet"
,
name
+
".in"
),
'w'
)
as
f
:
f
.
write
(
template
.
substitute
(
parameters
)
)
diff
--
git
a
/
src
/
defaults
/
mesons
.
in
b
/
src
/
defaults
/
mesons
.
in
---
a
/
src
/
defaults
/
mesons
.
in
+++
b
/
src
/
defaults
/
mesons
.
in
@@
-
1
,
893
+
1
,
893
@@
# -*- ThePEG-repository -*-
#
# file containing the particle data for the mesons
#
#
# the 1^1S_0 multiplet
#
-
create
ThePEG
::
ParticleData
pi
+
+
create
ThePEG
::
BeamParticleData
pi
+
setup
pi
+
211
pi
+
0.13957039
2.5283740149914E-17
0
7804.5
3
0
1
1
create
ThePEG
::
ParticleData
pi0
setup
pi0
111
pi0
0.1349768
7.7994841897233E-9
0
2.53E-5
0
0
1
0
-
create
ThePEG
::
ParticleData
pi
-
+
create
ThePEG
::
BeamParticleData
pi
-
setup
pi
-
-
211
pi
-
0.13957039
2.5283740149914E-17
0
7804.5
-
3
0
1
1
makeanti
pi
-
pi
+
create
ThePEG
::
ParticleData
eta
setup
eta
221
eta
0.547862
1.31E-6
1.31E-5
0
0
0
1
0
create
ThePEG
::
ParticleData
eta
'
setup
eta
' 331 eta'
0.95778
0.000203
0.00203
0
0
0
1
0
create
ThePEG
::
ParticleData
eta_c
setup
eta_c
441
eta_c
2.9839
0.032
0.16
0
0
0
1
0
create
ThePEG
::
ParticleData
eta_b
setup
eta_b
551
eta_b
9.3987
0.01
0.1
0
0
0
1
0
create
ThePEG
::
ParticleData
K
+
setup
K
+
321
K
+
0.493677
5.3173524656427E-17
0
3711
3
0
1
1
create
ThePEG
::
ParticleData
K0
setup
K0
311
K0
0.497611
1.0E+27
0
0
0
0
1
0
create
ThePEG
::
ParticleData
K
-
setup
K
-
-
321
K
-
0.493677
5.3173524656427E-17
0
3711
-
3
0
1
1
makeanti
K
-
K
+
create
ThePEG
::
ParticleData
Kbar0
setup
Kbar0
-
311
Kbar0
0.497611
1.0E+27
0
0
0
0
1
0
makeanti
Kbar0
K0
create
ThePEG
::
ParticleData
D0
setup
D0
421
D0
1.86484
1.6042841463415E-12
0
0.123
0
0
1
0
create
ThePEG
::
ParticleData
D
+
setup
D
+
411
D
+
1.86966
6.3286385503528E-13
0
0.3118
3
0
1
0
create
ThePEG
::
ParticleData
Dbar0
setup
Dbar0
-
421
Dbar0
1.86484
1.6042841463415E-12
0
0.123
0
0
1
0
makeanti
Dbar0
D0
create
ThePEG
::
ParticleData
D
-
setup
D
-
-
411
D
-
1.86966
6.3286385503528E-13
0
0.3118
-
3
0
1
0
makeanti
D
-
D
+
create
ThePEG
::
ParticleData
D_s
+
setup
D_s
+
431
D_s
+
1.9682
1.315513E-12
0
0.15
3
0
1
0
create
ThePEG
::
ParticleData
D_s
-
setup
D_s
-
-
431
D_s
-
1.9682
1.315513E-12
0
0.15
-
3
0
1
0
makeanti
D_s
-
D_s
+
create
ThePEG
::
MixedParticleData
B0
setup
B0
511
B0
5.27965
4.2897163043478E-13
0
0.46
0
0
1
0
newdef
B0
:
DeltaM
3.337134e-13
*
GeV
newdef
B0
:
DeltaGamma
0.
*
GeV
newdef
B0
:
PQMagnitude
1.
newdef
B0
:
PQPhase
1.
newdef
B0
:
ZMagnitude
0.
newdef
B0
:
ZPhase
0.
create
ThePEG
::
ParticleData
B
+
setup
B
+
521
B
+
5.27934
3.9386616766467E-13
0
0.501
3
0
1
0
create
ThePEG
::
MixedParticleData
Bbar0
setup
Bbar0
-
511
Bbar0
5.27965
4.2897163043478E-13
0
0.46
0
0
1
0
makeanti
Bbar0
B0
newdef
Bbar0
:
Synchronized
0
newdef
Bbar0
:
DeltaM
3.337134e-13
*
GeV
newdef
Bbar0
:
DeltaGamma
0.
*
GeV
newdef
Bbar0
:
PQMagnitude
1.
newdef
Bbar0
:
PQPhase
1.
newdef
Bbar0
:
ZMagnitude
0.
newdef
Bbar0
:
ZPhase
0.
create
ThePEG
::
ParticleData
B
-
setup
B
-
-
521
B
-
5.27934
3.9386616766467E-13
0
0.501
-
3
0
1
0
makeanti
B
-
B
+
newdef
B
-
:
Synchronized
0
create
ThePEG
::
MixedParticleData
B_s0
setup
B_s0
531
B_s0
5.36688
4.5051815068493E-13
0
0.438
0
0
1
0
newdef
B_s0
:
DeltaM
1.169642e-11
*
GeV
newdef
B_s0
:
DeltaGamma
6.676243e-14
*
GeV
newdef
B_s0
:
PQMagnitude
1.
newdef
B_s0
:
PQPhase
1.
newdef
B_s0
:
ZMagnitude
0.
newdef
B_s0
:
ZPhase
0.
create
ThePEG
::
MixedParticleData
B_sbar0
setup
B_sbar0
-
531
B_sbar0
5.36688
4.5051815068493E-13
0
0.438
0
0
1
0
makeanti
B_sbar0
B_s0
newdef
B_sbar0
:
Synchronized
0
newdef
B_sbar0
:
DeltaM
1.169642e-11
*
GeV
newdef
B_sbar0
:
DeltaGamma
6.676243e-14
*
GeV
newdef
B_sbar0
:
PQMagnitude
1.
newdef
B_sbar0
:
PQPhase
1.
newdef
B_sbar0
:
ZMagnitude
0.
newdef
B_sbar0
:
ZPhase
0.
create
ThePEG
::
ParticleData
B_c
+
setup
B_c
+
541
B_c
+
6.286
1.4299054347826E-12
0
0.138
3
0
1
0
create
ThePEG
::
ParticleData
B_c
-
setup
B_c
-
-
541
B_c
-
6.286
1.4299054347826E-12
0
0.138
-
3
0
1
0
makeanti
B_c
-
B_c
+
#
# the 1^3S_1 multiplet
#
create
ThePEG
::
ParticleData
rho
+
setup
rho
+
213
rho
+
0.77526
0.1491
0.45
0
3
0
3
0
newdef
rho
+
:
WidthLoCut
0.4
newdef
rho
+
:
WidthUpCut
0.5
create
ThePEG
::
ParticleData
rho0
setup
rho0
113
rho0
0.77526
0.1491
0.45
0
0
0
3
0
newdef
rho0
:
WidthLoCut
0.4
newdef
rho0
:
WidthUpCut
0.5
create
ThePEG
::
ParticleData
rho
-
setup
rho
-
-
213
rho
-
0.77526
0.1491
0.45
0
-
3
0
3
0
makeanti
rho
-
rho
+
newdef
rho
-
:
WidthLoCut
0.4
newdef
rho
-
:
WidthUpCut
0.5
create
ThePEG
::
ParticleData
omega
setup
omega
223
omega
0.78266
0.00868
0.0868
0
0
0
3
0
create
ThePEG
::
ParticleData
phi
setup
phi
333
phi
1.019461
0.004249
0.036245
0
0
0
3
0
newdef
phi
:
WidthLoCut
0.03
newdef
phi
:
WidthUpCut
0.04249
create
ThePEG
::
ParticleData
Jpsi
setup
Jpsi
443
Jpsi
3.096916
9.34E-5
0.000934
0
0
0
3
0
create
ThePEG
::
ParticleData
Upsilon
setup
Upsilon
553
Upsilon
9.4603
5.402E-5
0.00054
0
0
0
3
0
create
ThePEG
::
ParticleData
K
*+
setup
K
*+
323
K
*+
0.89167
0.0514
0.382
0
3
0
3
0
newdef
K
*+
:
WidthLoCut
0.25
newdef
K
*+
:
WidthUpCut
0.514
create
ThePEG
::
ParticleData
K
*
0
setup
K
*
0
313
K
*
0
0.89555
0.0473
0.3615
0
0
0
3
0
newdef
K
*
0
:
WidthLoCut
0.25
newdef
K
*
0
:
WidthUpCut
0.473
create
ThePEG
::
ParticleData
K
*-
setup
K
*-
-
323
K
*-
0.89167
0.0514
0.382
0
-
3
0
3
0
makeanti
K
*-
K
*+
newdef
K
*-
:
WidthLoCut
0.25
newdef
K
*-
:
WidthUpCut
0.514
create
ThePEG
::
ParticleData
K
*
bar0
setup
K
*
bar0
-
313
K
*
bar0
0.89555
0.0473
0.3615
0
0
0
3
0
makeanti
K
*
bar0
K
*
0
newdef
K
*
bar0
:
WidthLoCut
0.25
newdef
K
*
bar0
:
WidthUpCut
0.473
create
ThePEG
::
ParticleData
D
*
0
setup
D
*
0
423
D
*
0
2.00685
6.8E-5
0.00068
0
0
0
3
0
create
ThePEG
::
ParticleData
D
*+
setup
D
*+
413
D
*+
2.01026
8.34E-5
0.000834
0
3
0
3
0
create
ThePEG
::
ParticleData
D
*
bar0
setup
D
*
bar0
-
423
D
*
bar0
2.00685
6.8E-5
0.00068
0
0
0
3
0
makeanti
D
*
bar0
D
*
0
create
ThePEG
::
ParticleData
D
*-
setup
D
*-
-
413
D
*-
2.01026
8.34E-5
0.000834
0
-
3
0
3
0
makeanti
D
*-
D
*+
create
ThePEG
::
ParticleData
D_s
*+
setup
D_s
*+
433
D_s
*+
2.1122
4.4E-5
0.00044
0
3
0
3
0
create
ThePEG
::
ParticleData
D_s
*-
setup
D_s
*-
-
433
D_s
*-
2.1122
4.4E-5
0.00044
0
-
3
0
3
0
makeanti
D_s
*-
D_s
*+
create
ThePEG
::
ParticleData
B
*
0
setup
B
*
0
513
B
*
0
5.32471
2.4E-7
2.4E-6
0
0
0
3
0
create
ThePEG
::
ParticleData
B
*+
setup
B
*+
523
B
*+
5.32471
7.8E-7
7.8E-6
0
3
0
3
0
create
ThePEG
::
ParticleData
B
*
bar0
setup
B
*
bar0
-
513
B
*
bar0
5.32471
2.4E-7
2.4E-6
0
0
0
3
0
makeanti
B
*
bar0
B
*
0
create
ThePEG
::
ParticleData
B
*-
setup
B
*-
-
523
B
*-
5.32471
7.8E-7
7.8E-6
0
-
3
0
3
0
makeanti
B
*-
B
*+
create
ThePEG
::
ParticleData
B_s
*
0
setup
B_s
*
0
533
B_s
*
0
5.4154
1.5E-7
1.5E-6
0
0
0
3
0
create
ThePEG
::
ParticleData
B_s
*
bar0
setup
B_s
*
bar0
-
533
B_s
*
bar0
5.4154
1.5E-7
1.5E-6
0
0
0
3
0
makeanti
B_s
*
bar0
B_s
*
0
create
ThePEG
::
ParticleData
B_c
*+
setup
B_c
*+
543
B_c
*+
6.321
8.0E-8
8.0E-7
0
3
0
3
0
create
ThePEG
::
ParticleData
B_c
*-
setup
B_c
*-
-
543
B_c
*-
6.321
8.0E-8
8.0E-7
0
-
3
0
3
0
makeanti
B_c
*-
B_c
*+
#
# the 1^1P_1 multiplet
#
create
ThePEG
::
ParticleData
b_1
+
setup
b_1
+
10213
b_1
+
1.2295
0.142
0.505
0
3
0
3
0
newdef
b_1
+
:
WidthLoCut
0.3
newdef
b_1
+
:
WidthUpCut
0.71
create
ThePEG
::
ParticleData
b_10
setup
b_10
10113
b_10
1.2295
0.142
0.505
0
0
0
3
0
newdef
b_10
:
WidthLoCut
0.3
newdef
b_10
:
WidthUpCut
0.71
create
ThePEG
::
ParticleData
b_1
-
setup
b_1
-
-
10213
b_1
-
1.2295
0.142
0.505
0
-
3
0
3
0
makeanti
b_1
-
b_1
+
newdef
b_1
-
:
WidthLoCut
0.3
newdef
b_1
-
:
WidthUpCut
0.71
create
ThePEG
::
ParticleData
h_1
setup
h_1
10223
h_1
1.166
0.375
0.375
0
0
0
3
0
create
ThePEG
::
ParticleData
h
'_1
setup
h
'_1 10333 h'
_1
1.416
0.09
0.18
0
0
0
3
0
create
ThePEG
::
ParticleData
h_c
setup
h_c
10443
h_c
3.52538
0.0007
0.007
0
0
0
3
0
create
ThePEG
::
ParticleData
h_b
setup
h_b
10553
h_b
9.8993
8.94E-5
0.000894
0
0
0
3
0
create
ThePEG
::
ParticleData
K_1
+
setup
K_1
+
10323
K_1
+
1.27
0.09
0.18
0
3
0
3
0
newdef
K_1
+
:
VariableRatio
1
create
ThePEG
::
ParticleData
K_10
setup
K_10
10313
K_10
1.272
0.09
0.18
0
0
0
3
0
newdef
K_10
:
VariableRatio
1
create
ThePEG
::
ParticleData
K_1
-
setup
K_1
-
-
10323
K_1
-
1.272
0.09
0.18
0
-
3
0
3
0
makeanti
K_1
-
K_1
+
newdef
K_1
-
:
VariableRatio
1
create
ThePEG
::
ParticleData
K_1bar0
setup
K_1bar0
-
10313
K_1bar0
1.272
0.09
0.18
0
0
0
3
0
makeanti
K_1bar0
K_10
newdef
K_1bar0
:
VariableRatio
1
create
ThePEG
::
ParticleData
D_10
setup
D_10
10423
D_10
2.4221
0.0313
0.0939
0
0
0
3
0
create
ThePEG
::
ParticleData
D_1
+
setup
D_1
+
10413
D_1
+
2.4221
0.0313
0.0939
0
3
0
3
0
create
ThePEG
::
ParticleData
D_1bar0
setup
D_1bar0
-
10423
D_1bar0
2.4221
0.0313
0.0939
0
0
0
3
0
makeanti
D_1bar0
D_10
create
ThePEG
::
ParticleData
D_1
-
setup
D_1
-
-
10413
D_1
-
2.4221
0.0313
0.0939
0
-
3
0
3
0
makeanti
D_1
-
D_1
+
create
ThePEG
::
ParticleData
D_s1
+
setup
D_s1
+
10433
D_s1
+
2.53511
0.00092
0.0092
0
3
0
3
0
create
ThePEG
::
ParticleData
D_s1
-
setup
D_s1
-
-
10433
D_s1
-
2.53511
0.00092
0.0092
0
-
3
0
3
0
makeanti
D_s1
-
D_s1
+
create
ThePEG
::
ParticleData
B_10
setup
B_10
10513
B_10
5.7261
0.0275
0.0825
0
0
0
3
0
create
ThePEG
::
ParticleData
B_1
+
setup
B_1
+
10523
B_1
+
5.7259
0.031
0.093
0
3
0
3
0
create
ThePEG
::
ParticleData
B_1bar0
setup
B_1bar0
-
10513
B_1bar0
5.7261
0.0275
0.0825
0
0
0
3
0
makeanti
B_1bar0
B_10
create
ThePEG
::
ParticleData
B_1
-
setup
B_1
-
-
10523
B_1
-
5.7259
0.031
0.093
0
-
3
0
3
0
makeanti
B_1
-
B_1
+
create
ThePEG
::
ParticleData
B_s10
setup
B_s10
10533
B_s10
5.8287
0.0005
0.005
0
0
0
3
0
create
ThePEG
::
ParticleData
B_s1bar0
setup
B_s1bar0
-
10533
B_s1bar0
5.8287
0.0005
0.005
0
0
0
3
0
makeanti
B_s1bar0
B_s10
create
ThePEG
::
ParticleData
B_c1
+
setup
B_c1
+
10543
B_c1
+
6.743
7.3E-5
0.00073
0
3
0
3
0
create
ThePEG
::
ParticleData
B_c1
-
setup
B_c1
-
-
10543
B_c1
-
6.743
7.3E-5
0.00073
0
-
3
0
3
0
makeanti
B_c1
-
B_c1
+
#
# the 1^3P_0 multiplet
#
create
ThePEG
::
ParticleData
a
'_0+
setup
a
'_0+ 10211 a'
_0
+
1.474
0.265
0.265
0
3
0
1
0
create
ThePEG
::
ParticleData
a
'_00
setup
a
'_00 10111 a'
_00
1.474
0.265
0.265
0
0
0
1
0
create
ThePEG
::
ParticleData
a
'_0-
setup
a
'_0- -10211 a'
_0
-
1.474
0.265
0.265
0
-
3
0
1
0
makeanti
a
'_0- a'
_0
+
create
ThePEG
::
ParticleData
f
'_0
setup
f
'_0 10221 f'
_0
1.395
0.275
0.275
0
0
0
1
0
create
ThePEG
::
ParticleData
f_0
(
1710
)
setup
f_0
(
1710
)
10331
f_0
(
1710
)
1.704
0.123
0.369
0
0
0
1
0
create
ThePEG
::
ParticleData
chi_c0
setup
chi_c0
10441
chi_c0
3.41476
0.0104
0.104
0
0
0
1
0
create
ThePEG
::
ParticleData
chi_b0
setup
chi_b0
10551
chi_b0
9.85944
0.000817
0.00817
0
0
0
1
0
create
ThePEG
::
ParticleData
K
*
_0
+
setup
K
*
_0
+
10321
K
*
_0
+
1.425
0.27
0.79
0
3
0
1
0
newdef
K
*
_0
+
:
WidthLoCut
0.77
newdef
K
*
_0
+
:
WidthUpCut
0.81
create
ThePEG
::
ParticleData
K
*
_00
setup
K
*
_00
10311
K
*
_00
1.425
0.27
0.79
0
0
0
1
0
newdef
K
*
_00
:
WidthLoCut
0.77
newdef
K
*
_00
:
WidthUpCut
0.81
create
ThePEG
::
ParticleData
K
*
_0
-
setup
K
*
_0
-
-
10321
K
*
_0
-
1.425
0.27
0.79
0
-
3
0
1
0
makeanti
K
*
_0
-
K
*
_0
+
newdef
K
*
_0
-
:
WidthLoCut
0.77
newdef
K
*
_0
-
:
WidthUpCut
0.81
create
ThePEG
::
ParticleData
K
*
_0bar0
setup
K
*
_0bar0
-
10311
K
*
_0bar0
1.425
0.27
0.79
0
0
0
1
0
makeanti
K
*
_0bar0
K
*
_00
newdef
K
*
_0bar0
:
WidthLoCut
0.77
newdef
K
*
_0bar0
:
WidthUpCut
0.81
create
ThePEG
::
ParticleData
D_0
*+
setup
D_0
*+
10411
D_0
*+
2.343
0.229
0.458
0
3
0
1
0
newdef
D_0
*+
:
WidthLoCut
0.229
newdef
D_0
*+
:
WidthUpCut
0.687
create
ThePEG
::
ParticleData
D_0
*
0
setup
D_0
*
0
10421
D_0
*
0
2.343
0.229
0.458
0
0
0
1
0
newdef
D_0
*
0
:
WidthLoCut
0.229
newdef
D_0
*
0
:
WidthUpCut
0.687
create
ThePEG
::
ParticleData
D_0
*-
setup
D_0
*-
-
10411
D_0
*-
2.343
0.229
0.458
0
-
3
0
1
0
makeanti
D_0
*-
D_0
*+
newdef
D_0
*-
:
WidthLoCut
0.229
newdef
D_0
*-
:
WidthUpCut
0.687
create
ThePEG
::
ParticleData
D_0
*
bar0
setup
D_0
*
bar0
-
10421
D_0
*
bar0
2.343
0.229
0.458
0
0
0
1
0
makeanti
D_0
*
bar0
D_0
*
0
newdef
D_0
*
bar0
:
WidthLoCut
0.229
newdef
D_0
*
bar0
:
WidthUpCut
0.687
create
ThePEG
::
ParticleData
D_s0
+
setup
D_s0
+
10431
D_s0
+
2.3178
2.32E-5
0.000232
0
3
0
1
0
create
ThePEG
::
ParticleData
D_s0
-
setup
D_s0
-
-
10431
D_s0
-
2.3178
2.32E-5
0.000232
0
-
3
0
1
0
makeanti
D_s0
-
D_s0
+
create
ThePEG
::
ParticleData
B
*
_00
setup
B
*
_00
10511
B
*
_00
5.726
0.14
0.28
0
0
0
1
0
create
ThePEG
::
ParticleData
B
*
_0
+
setup
B
*
_0
+
10521
B
*
_0
+
5.726
0.14
0.28
0
3
0
1
0
create
ThePEG
::
ParticleData
B
*
_0bar0
setup
B
*
_0bar0
-
10511
B
*
_0bar0
5.726
0.14
0.28
0
0
0
1
0
makeanti
B
*
_0bar0
B
*
_00
create
ThePEG
::
ParticleData
B
*
_0
-
setup
B
*
_0
-
-
10521
B
*
_0
-
5.726
0.14
0.28
0
-
3
0
1
0
makeanti
B
*
_0
-
B
*
_0
+
create
ThePEG
::
ParticleData
B
*
_s00
setup
B
*
_s00
10531
B
*
_s00
5.818
0.07
0.0875
0
0
0
1
0
newdef
B
*
_s00
:
WidthLoCut
0.035
newdef
B
*
_s00
:
WidthUpCut
0.14
create
ThePEG
::
ParticleData
B
*
_s0bar0
setup
B
*
_s0bar0
-
10531
B
*
_s0bar0
5.818
0.07
0.0875
0
0
0
1
0
makeanti
B
*
_s0bar0
B
*
_s00
newdef
B
*
_s0bar0
:
WidthLoCut
0.035
newdef
B
*
_s0bar0
:
WidthUpCut
0.14
create
ThePEG
::
ParticleData
B
*
_c0
+
setup
B
*
_c0
+
10541
B
*
_c0
+
6.727
5.5E-5
0.00055
0
3
0
1
0
create
ThePEG
::
ParticleData
B
*
_c0
-
setup
B
*
_c0
-
-
10541
B
*
_c0
-
6.727
5.5E-5
0.00055
0
-
3
0
1
0
makeanti
B
*
_c0
-
B
*
_c0
+
#
# the 1^3P_1 multiplet
#
create
ThePEG
::
ParticleData
a_1
+
setup
a_1
+
20213
a_1
+
1.23
0.42
0.56
0
3
0
3
0
newdef
a_1
+
:
VariableRatio
1
create
ThePEG
::
ParticleData
a_10
setup
a_10
20113
a_10
1.23
0.42
0.56
0
0
0
3
0
newdef
a_10
:
VariableRatio
1
create
ThePEG
::
ParticleData
a_1
-
setup
a_1
-
-
20213
a_1
-
1.23
0.42
0.56
0
-
3
0
3
0
makeanti
a_1
-
a_1
+
newdef
a_1
-
:
VariableRatio
1
create
ThePEG
::
ParticleData
f_1
setup
f_1
20223
f_1
1.2819
0.0227
0.242
0
0
0
3
0
create
ThePEG
::
ParticleData
f
'_1
setup
f
'_1 20333 f'
_1
1.4263
0.0545
0.40875
0
0
0
3
0
newdef
f
'_1:WidthLoCut 0.2725
newdef
f
'_1:WidthUpCut 0.545
create
ThePEG
::
ParticleData
chi_c1
setup
chi_c1
20443
chi_c1
3.51067
0.00084
0.0089
0
0
0
3
0
create
ThePEG
::
ParticleData
chi_b1
setup
chi_b1
20553
chi_b1
9.89278
7.1E-5
0.00071
0
0
0
3
0
create
ThePEG
::
ParticleData
K
'_1+
setup
K
'_1+ 20323 K'
_1
+
1.403
0.174
0.348
0
3
0
3
0
newdef
K
'_1+:VariableRatio 1
create
ThePEG
::
ParticleData
K
'_10
setup
K
'_10 20313 K'
_10
1.403
0.174
0.348
0
0
0
3
0
newdef
K
'_10:VariableRatio 1
create
ThePEG
::
ParticleData
K
'_1-
setup
K
'_1- -20323 K'
_1
-
1.403
0.174
0.348
0
-
3
0
3
0
makeanti
K
'_1- K'
_1
+
newdef
K
'_1-:VariableRatio 1
create
ThePEG
::
ParticleData
K
'_1bar0
setup
K
'_1bar0 -20313 K'
_1bar0
1.403
0.174
0.348
0
0
0
3
0
makeanti
K
'_1bar0 K'
_10
newdef
K
'_1bar0:VariableRatio 1
create
ThePEG
::
ParticleData
D
'_10
setup
D
'_10 20423 D'
_10
2.412
0.314
0.439
0
0
0
3
0
newdef
D
'_10:WidthLoCut 0.25
newdef
D
'_10:WidthUpCut 0.628
create
ThePEG
::
ParticleData
D
'_1+
setup
D
'_1+ 20413 D'
_1
+
2.412
0.314
0.439
0
3
0
3
0
newdef
D
'_1+:WidthLoCut 0.25
newdef
D
'_1+:WidthUpCut 0.628
create
ThePEG
::
ParticleData
D
'_1bar0
setup
D
'_1bar0 -20423 D'
_1bar0
2.412
0.314
0.439
0
0
0
3
0
makeanti
D
'_1bar0 D'
_10
newdef
D
'_1bar0:WidthLoCut 0.25
newdef
D
'_1bar0:WidthUpCut 0.628
create
ThePEG
::
ParticleData
D
'_1-
setup
D
'_1- -20413 D'
_1
-
2.412
0.314
0.439
0
-
3
0
3
0
makeanti
D
'_1- D'
_1
+
newdef
D
'_1-:WidthLoCut 0.25
newdef
D
'_1-:WidthUpCut 0.628
create
ThePEG
::
ParticleData
D
'_s1+
setup
D
'_s1+ 20433 D'
_s1
+
2.4595
3.82E-5
0.000382
0
3
0
3
0
create
ThePEG
::
ParticleData
D
'_s1-
setup
D
'_s1- -20433 D'
_s1
-
2.4595
3.82E-5
0.000382
0
-
3
0
3
0
makeanti
D
'_s1- D'
_s1
+
create
ThePEG
::
ParticleData
B
'_10
setup
B
'_10 20513 B'
_10
5.762
0.13
0.26
0
0
0
3
0
create
ThePEG
::
ParticleData
B
'_1+
setup
B
'_1+ 20523 B'
_1
+
5.762
0.13
0.26
0
3
0
3
0
create
ThePEG
::
ParticleData
B
'_1bar0
setup
B
'_1bar0 -20513 B'
_1bar0
5.762
0.13
0.26
0
0
0
3
0
makeanti
B
'_1bar0 B'
_10
create
ThePEG
::
ParticleData
B
'_1-
setup
B
'_1- -20523 B'
_1
-
5.762
0.13
0.26
0
-
3
0
3
0
makeanti
B
'_1- B'
_1
+
create
ThePEG
::
ParticleData
B
'_s10
setup
B
'_s10 20533 B'
_s10
5.856
0.06
0.075
0
0
0
3
0
newdef
B
'_s10:WidthLoCut 0.03
newdef
B
'_s10:WidthUpCut 0.12
create
ThePEG
::
ParticleData
B
'_s1bar0
setup
B
'_s1bar0 -20533 B'
_s1bar0
5.856
0.06
0.075
0
0
0
3
0
makeanti
B
'_s1bar0 B'
_s10
newdef
B
'_s1bar0:WidthLoCut 0.03
newdef
B
'_s1bar0:WidthUpCut 0.12
create
ThePEG
::
ParticleData
B
'_c1+
setup
B
'_c1+ 20543 B'
_c1
+
6.765
9.1E-5
0.00091
0
3
0
3
0
create
ThePEG
::
ParticleData
B
'_c1-
setup
B
'_c1- -20543 B'
_c1
-
6.765
9.1E-5
0.00091
0
-
3
0
3
0
makeanti
B
'_c1- B'
_c1
+
#
# the 1^3P_2 multiplet
#
create
ThePEG
::
ParticleData
a_2
+
setup
a_2
+
215
a_2
+
1.3182
0.105
0.21
0
3
0
5
0
create
ThePEG
::
ParticleData
a_20
setup
a_20
115
a_20
1.3182
0.105
0.21
0
0
0
5
0
create
ThePEG
::
ParticleData
a_2
-
setup
a_2
-
-
215
a_2
-
1.3182
0.105
0.21
0
-
3
0
5
0
makeanti
a_2
-
a_2
+
create
ThePEG
::
ParticleData
f_2
setup
f_2
225
f_2
1.2755
0.1867
0.18085
0
0
0
5
0
newdef
f_2
:
WidthLoCut
0.175
newdef
f_2
:
WidthUpCut
0.1867
create
ThePEG
::
ParticleData
f
'_2
setup
f
'_2 335 f'
_2
1.5174
0.086
0.344
0
0
0
5
0
create
ThePEG
::
ParticleData
chi_c2
setup
chi_c2
445
chi_c2
3.55617
0.00197
0.0206
0
0
0
5
0
create
ThePEG
::
ParticleData
chi_b2
setup
chi_b2
555
chi_b2
9.91221
0.00017
0.0017
0
0
0
5
0
create
ThePEG
::
ParticleData
K
*
_2
+
setup
K
*
_2
+
325
K
*
_2
+
1.4273
0.1
0.2
0
3
0
5
0
create
ThePEG
::
ParticleData
K
*
_20
setup
K
*
_20
315
K
*
_20
1.4324
0.109
0.218
0
0
0
5
0
create
ThePEG
::
ParticleData
K
*
_2
-
setup
K
*
_2
-
-
325
K
*
_2
-
1.4273
0.1
0.2
0
-
3
0
5
0
makeanti
K
*
_2
-
K
*
_2
+
create
ThePEG
::
ParticleData
K
*
_2bar0
setup
K
*
_2bar0
-
315
K
*
_2bar0
1.4324
0.109
0.218
0
0
0
5
0
makeanti
K
*
_2bar0
K
*
_20
create
ThePEG
::
ParticleData
D
*
_20
setup
D
*
_20
425
D
*
_20
2.4611
0.0473
0.2365
0
0
0
5
0
create
ThePEG
::
ParticleData
D
*
_2
+
setup
D
*
_2
+
415
D
*
_2
+
2.4611
0.0473
0.2365
0
3
0
5
0
create
ThePEG
::
ParticleData
D
*
_2bar0
setup
D
*
_2bar0
-
425
D
*
_2bar0
2.4611
0.0473
0.2365
0
0
0
5
0
makeanti
D
*
_2bar0
D
*
_20
create
ThePEG
::
ParticleData
D
*
_2
-
setup
D
*
_2
-
-
415
D
*
_2
-
2.4611
0.0473
0.2365
0
-
3
0
5
0
makeanti
D
*
_2
-
D
*
_2
+
create
ThePEG
::
ParticleData
D_s2
+
setup
D_s2
+
435
D_s2
+
2.5691
0.0169
0.0507
0
3
0
5
0
create
ThePEG
::
ParticleData
D_s2
-
setup
D_s2
-
-
435
D_s2
-
2.5691
0.0169
0.0507
0
-
3
0
5
0
makeanti
D_s2
-
D_s2
+
create
ThePEG
::
ParticleData
B_20
setup
B_20
515
B_20
5.7395
0.0242
0.121
0
0
0
5
0
create
ThePEG
::
ParticleData
B_2
+
setup
B_2
+
525
B_2
+
5.7372
0.0242
0.121
0
3
0
5
0
create
ThePEG
::
ParticleData
B_2bar0
setup
B_2bar0
-
515
B_2bar0
5.7395
0.0242
0.121
0
0
0
5
0
makeanti
B_2bar0
B_20
create
ThePEG
::
ParticleData
B_2
-
setup
B_2
-
-
525
B_2
-
5.7372
0.0242
0.121
0
-
3
0
5
0
makeanti
B_2
-
B_2
+
create
ThePEG
::
ParticleData
B_s20
setup
B_s20
535
B_s20
5.83986
0.00149
0.0149
0
0
0
5
0
create
ThePEG
::
ParticleData
B_s2bar0
setup
B_s2bar0
-
535
B_s2bar0
5.83986
0.00149
0.0149
0
0
0
5
0
makeanti
B_s2bar0
B_s20
create
ThePEG
::
ParticleData
B_c2
+
setup
B_c2
+
545
B_c2
+
6.783
8.3E-5
0.00083
0
3
0
5
0
create
ThePEG
::
ParticleData
B_c2
-
setup
B_c2
-
-
545
B_c2
-
6.783
8.3E-5
0.00083
0
-
3
0
5
0
makeanti
B_c2
-
B_c2
+
#
# the 1^1D_2 multiplet
#
create
ThePEG
::
ParticleData
pi_2
+
setup
pi_2
+
10215
pi_2
+
1.6706
0.258
0.258
0
3
0
5
0
create
ThePEG
::
ParticleData
pi_20
setup
pi_20
10115
pi_20
1.6706
0.258
0.258
0
0
0
5
0
create
ThePEG
::
ParticleData
pi_2
-
setup
pi_2
-
-
10215
pi_2
-
1.6706
0.258
0.258
0
-
3
0
5
0
makeanti
pi_2
-
pi_2
+
create
ThePEG
::
ParticleData
eta_2
setup
eta_2
10225
eta_2
1.617
0.181
0.362
0
0
0
5
0
create
ThePEG
::
ParticleData
eta
'_2
setup
eta
'_2 10335 eta'
_2
1.842
0.225
0.225
0
0
0
5
0
create
ThePEG
::
ParticleData
eta_b2
setup
eta_b2
10555
eta_b2
10.158
3.2E-5
0.00032
0
0
0
5
0
create
ThePEG
::
ParticleData
K_2
(
1770
)
+
setup
K_2
(
1770
)
+
10325
K_2
(
1770
)
+
1.773
0.186
0.558
0
3
0
5
0
create
ThePEG
::
ParticleData
K_2
(
1770
)
0
setup
K_2
(
1770
)
0
10315
K_2
(
1770
)
0
1.773
0.186
0.558
0
0
0
5
0
create
ThePEG
::
ParticleData
K_2
(
1770
)
-
setup
K_2
(
1770
)
-
-
10325
K_2
(
1770
)
-
1.773
0.186
0.558
0
-
3
0
5
0
makeanti
K_2
(
1770
)
-
K_2
(
1770
)
+
create
ThePEG
::
ParticleData
K_2
(
1770
)
bar0
setup
K_2
(
1770
)
bar0
-
10315
K_2
(
1770
)
bar0
1.773
0.186
0.558
0
0
0
5
0
makeanti
K_2
(
1770
)
bar0
K_2
(
1770
)
0
create
ThePEG
::
ParticleData
B_c2
(
L
)
+
setup
B_c2
(
L
)
+
10545
B_c2
(
L
)
+
7.036
8.3E-5
0.00083
0
3
0
5
0
create
ThePEG
::
ParticleData
B_c2
(
L
)
-
setup
B_c2
(
L
)
-
-
10545
B_c2
(
L
)
-
7.036
8.3E-5
0.00083
0
-
3
0
5
0
makeanti
B_c2
(
L
)
-
B_c2
(
L
)
+
#
# the 1^3D_1 multiplet
#
create
ThePEG
::
ParticleData
rho
''
+
setup
rho
''
+
30213
rho
''
+
1.72
0.25
0.5
0
3
0
3
0
create
ThePEG
::
ParticleData
rho
''
0
setup
rho
''
0
30113
rho
''
0
1.72
0.25
0.5
0
0
0
3
0
create
ThePEG
::
ParticleData
rho
''
-
setup
rho
''
-
-
30213
rho
''
-
1.72
0.25
0.5
0
-
3
0
3
0
makeanti
rho
''
-
rho
''
+
create
ThePEG
::
ParticleData
omega
''
setup
omega
''
30223
omega
''
1.67
0.315
0.63
0
0
0
3
0
create
ThePEG
::
ParticleData
phi
(
2170
)
setup
phi
(
2170
)
30333
phi
(
2170
)
2.162
0.1
0.3
0
0
0
3
0
create
ThePEG
::
ParticleData
psi
(
3770
)
setup
psi
(
3770
)
30443
psi
(
3770
)
3.7737
0.0272
0.0816
0
0
0
3
0
newdef
psi
(
3770
):
WidthLoCut
0.0272
newdef
psi
(
3770
):
WidthUpCut
0.136
create
ThePEG
::
ParticleData
Upsilon_1
(
1
D
)
setup
Upsilon_1
(
1
D
)
30553
Upsilon_1
(
1
D
)
10.1551
3.56E-5
0.000356
0
0
0
3
0
create
ThePEG
::
ParticleData
K
''
*+
setup
K
''
*+
30323
K
''
*+
1.718
0.322
0.322
0
3
0
3
0
create
ThePEG
::
ParticleData
K
''
*
0
setup
K
''
*
0
30313
K
''
*
0
1.718
0.322
0.322
0
0
0
3
0
create
ThePEG
::
ParticleData
K
''
*-
setup
K
''
*-
-
30323
K
''
*-
1.718
0.322
0.322
0
-
3
0
3
0
makeanti
K
''
*-
K
''
*+
create
ThePEG
::
ParticleData
K
''
*
bar0
setup
K
''
*
bar0
-
30313
K
''
*
bar0
1.718
0.322
0.322
0
0
0
3
0
makeanti
K
''
*
bar0
K
''
*
0
create
ThePEG
::
ParticleData
D_1
*
(
2760
)
0
setup
D_1
*
(
2760
)
0
30423
D_1
*
(
2760
)
0
2.781
0.177
0.354
0
0
0
3
0
create
ThePEG
::
ParticleData
D_1
*
(
2760
)
+
setup
D_1
*
(
2760
)
+
30413
D_1
*
(
2760
)
+
2.781
0.177
0.354
0
3
0
3
0
create
ThePEG
::
ParticleData
Dbar_1
*
(
2760
)
0
setup
Dbar_1
*
(
2760
)
0
-
30423
Dbar_1
*
(
2760
)
0
2.781
0.177
0.354
0
0
0
3
0
makeanti
Dbar_1
*
(
2760
)
0
D_1
*
(
2760
)
0
create
ThePEG
::
ParticleData
D_1
*
(
2760
)
-
setup
D_1
*
(
2760
)
-
-
30413
D_1
*
(
2760
)
-
2.781
0.177
0.354
0
-
3
0
3
0
makeanti
D_1
*
(
2760
)
-
D_1
*
(
2760
)
+
create
ThePEG
::
ParticleData
D_s1
*
(
2860
)
+
setup
D_s1
*
(
2860
)
+
30433
D_s1
*
(
2860
)
+
2.859
0.159
0.318
0
3
0
3
0
create
ThePEG
::
ParticleData
D_s1
*
(
2860
)
-
setup
D_s1
*
(
2860
)
-
-
30433
D_s1
*
(
2860
)
-
2.859
0.159
0.318
0
-
3
0
3
0
makeanti
D_s1
*
(
2860
)
-
D_s1
*
(
2860
)
+
create
ThePEG
::
ParticleData
B_c
(
1
D
)
*+
setup
B_c
(
1
D
)
*+
30543
B_c
(
1
D
)
*+
7.028
9.35E-5
0.000935
0
3
0
3
0
create
ThePEG
::
ParticleData
B_c
(
1
D
)
*-
setup
B_c
(
1
D
)
*-
-
30543
B_c
(
1
D
)
*-
7.028
9.35E-5
0.000935
0
-
3
0
3
0
makeanti
B_c
(
1
D
)
*-
B_c
(
1
D
)
*+
#
# the 1^3D_2 multiplet
#
create
ThePEG
::
ParticleData
psi_2
(
1
D
)
setup
psi_2
(
1
D
)
20445
psi_2
(
1
D
)
3.8237
0.00074
0.0074
0
0
0
5
0
create
ThePEG
::
ParticleData
Upsilon_2
(
1
D
)
setup
Upsilon_2
(
1
D
)
20555
Upsilon_2
(
1
D
)
10.1637
2.8E-5
0.00028
0
0
0
5
0
create
ThePEG
::
ParticleData
K_2
(
1820
)
+
setup
K_2
(
1820
)
+
20325
K_2
(
1820
)
+
1.819
0.264
0.528
0
3
0
5
0
create
ThePEG
::
ParticleData
K_2
(
1820
)
0
setup
K_2
(
1820
)
0
20315
K_2
(
1820
)
0
1.819
0.264
0.528
0
0
0
5
0
create
ThePEG
::
ParticleData
K_2
(
1820
)
-
setup
K_2
(
1820
)
-
-
20325
K_2
(
1820
)
-
1.819
0.264
0.528
0
-
3
0
5
0
makeanti
K_2
(
1820
)
-
K_2
(
1820
)
+
create
ThePEG
::
ParticleData
K_2
(
1820
)
bar0
setup
K_2
(
1820
)
bar0
-
20315
K_2
(
1820
)
bar0
1.819
0.264
0.528
0
0
0
5
0
makeanti
K_2
(
1820
)
bar0
K_2
(
1820
)
0
create
ThePEG
::
ParticleData
D_2
(
2740
)
0
setup
D_2
(
2740
)
0
20425
D_2
(
2740
)
0
2.747
0.088
0.264
0
0
0
5
0
create
ThePEG
::
ParticleData
D_2
(
2740
)
+
setup
D_2
(
2740
)
+
20415
D_2
(
2740
)
+
2.747
0.088
0.264
0
3
0
5
0
create
ThePEG
::
ParticleData
Dbar_2
(
2740
)
0
setup
Dbar_2
(
2740
)
0
-
20425
Dbar_2
(
2740
)
0
2.747
0.088
0.264
0
0
0
5
0
makeanti
Dbar_2
(
2740
)
0
D_2
(
2740
)
0
create
ThePEG
::
ParticleData
D_2
(
2740
)
-
setup
D_2
(
2740
)
-
-
20415
D_2
(
2740
)
-
2.747
0.088
0.264
0
-
3
0
5
0
makeanti
D_2
(
2740
)
-
D_2
(
2740
)
+
create
ThePEG
::
ParticleData
D_s2
(
2850
)
+
setup
D_s2
(
2850
)
+
20435
D_s2
(
2850
)
+
2.851
0.052
0.156
0
3
0
5
0
create
ThePEG
::
ParticleData
D_s2
(
2850
)
-
setup
D_s2
(
2850
)
-
-
20435
D_s2
(
2850
)
-
2.851
0.052
0.156
0
-
3
0
5
0
makeanti
D_s2
(
2850
)
-
D_s2
(
2850
)
+
create
ThePEG
::
ParticleData
B_c2
(
H
)
+
setup
B_c2
(
H
)
+
20545
B_c2
(
H
)
+
7.041
9.3E-5
0.00093
0
3
0
5
0
create
ThePEG
::
ParticleData
B_c2
(
H
)
-
setup
B_c2
(
H
)
-
-
20545
B_c2
(
H
)
-
7.041
9.3E-5
0.00093
0
-
3
0
5
0
makeanti
B_c2
(
H
)
-
B_c2
(
H
)
+
#
# the 1^3D_3 multiplet
#
create
ThePEG
::
ParticleData
rho_3
+
setup
rho_3
+
217
rho_3
+
1.6888
0.161
0.592
0
3
0
7
0
newdef
rho_3
+
:
WidthLoCut
0.54
newdef
rho_3
+
:
WidthUpCut
0.644
create
ThePEG
::
ParticleData
rho_30
setup
rho_30
117
rho_30
1.6888
0.161
0.592
0
0
0
7
0
newdef
rho_30
:
WidthLoCut
0.54
newdef
rho_30
:
WidthUpCut
0.644
create
ThePEG
::
ParticleData
rho_3
-
setup
rho_3
-
-
217
rho_3
-
1.6888
0.161
0.592
0
-
3
0
7
0
makeanti
rho_3
-
rho_3
+
newdef
rho_3
-
:
WidthLoCut
0.54
newdef
rho_3
-
:
WidthUpCut
0.644
create
ThePEG
::
ParticleData
omega_3
setup
omega_3
227
omega_3
1.667
0.168
0.336
0
0
0
7
0
create
ThePEG
::
ParticleData
phi_3
setup
phi_3
337
phi_3
1.854
0.087
0.435
0
0
0
7
0
create
ThePEG
::
ParticleData
psi_3
(
1
D
)
setup
psi_3
(
1
D
)
447
psi_3
(
1
D
)
3.84271
0.0028
0.014
0
0
0
7
0
create
ThePEG
::
ParticleData
Upsilon_3
(
1
D
)
setup
Upsilon_3
(
1
D
)
557
Upsilon_3
(
1
D
)
10.1651
2.55E-5
0.000255
0
0
0
7
0
create
ThePEG
::
ParticleData
K_3
*+
setup
K_3
*+
327
K_3
*+
1.779
0.161
0.477
0
3
0
7
0
create
ThePEG
::
ParticleData
K_3
*
0
setup
K_3
*
0
317
K_3
*
0
1.779
0.161
0.477
0
0
0
7
0
create
ThePEG
::
ParticleData
K_3
*-
setup
K_3
*-
-
327
K_3
*-
1.779
0.161
0.477
0
-
3
0
7
0
makeanti
K_3
*-
K_3
*+
create
ThePEG
::
ParticleData
K_3
*
bar0
setup
K_3
*
bar0
-
317
K_3
*
bar0
1.779
0.161
0.477
0
0
0
7
0
makeanti
K_3
*
bar0
K_3
*
0
create
ThePEG
::
ParticleData
D_3
*
(
2750
)
0
setup
D_3
*
(
2750
)
0
427
D_3
*
(
2750
)
0
2.7631
0.066
0.192
0
0
0
7
0
create
ThePEG
::
ParticleData
D_3
*
(
2750
)
+
setup
D_3
*
(
2750
)
+
417
D_3
*
(
2750
)
+
2.7631
0.066
0.192
0
3
0
7
0
create
ThePEG
::
ParticleData
Dbar_3
*
(
2750
)
0
setup
Dbar_3
*
(
2750
)
0
-
427
Dbar_3
*
(
2750
)
0
2.7631
0.066
0.192
0
0
0
7
0
makeanti
Dbar_3
*
(
2750
)
0
D_3
*
(
2750
)
0
create
ThePEG
::
ParticleData
D_3
*
(
2750
)
-
setup
D_3
*
(
2750
)
-
-
417
D_3
*
(
2750
)
-
2.7631
0.066
0.192
0
-
3
0
7
0
makeanti
D_3
*
(
2750
)
-
D_3
*
(
2750
)
+
create
ThePEG
::
ParticleData
D_s3
*
(
2860
)
+
setup
D_s3
*
(
2860
)
+
437
D_s3
*
(
2860
)
+
2.86
0.053
0.159
0
3
0
7
0
create
ThePEG
::
ParticleData
D_s3
*
(
2860
)
-
setup
D_s3
*
(
2860
)
-
-
437
D_s3
*
(
2860
)
-
2.86
0.053
0.159
0
-
3
0
7
0
makeanti
D_s3
*
(
2860
)
-
D_s3
*
(
2860
)
+
create
ThePEG
::
ParticleData
B_c3
(
1
D
)
*+
setup
B_c3
(
1
D
)
*+
547
B_c3
(
1
D
)
*+
7.045
8.23E-5
0.000823
0
3
0
7
0
create
ThePEG
::
ParticleData
B_c3
(
1
D
)
*-
setup
B_c3
(
1
D
)
*-
-
547
B_c3
(
1
D
)
*-
7.045
8.23E-5
0.000823
0
-
3
0
7
0
makeanti
B_c3
(
1
D
)
*-
B_c3
(
1
D
)
*+
#
# the 1^3F_4 multiplet
#
#
# the 2^1S_0 multiplet
#
create
ThePEG
::
ParticleData
pi
'+
setup
pi
'+ 100211 pi'
+
1.3
0.4
0.4
0
3
0
1
0
create
ThePEG
::
ParticleData
pi
'0
setup
pi
'0 100111 pi'
0
1.3
0.4
0.4
0
0
0
1
0
create
ThePEG
::
ParticleData
pi
'-
setup
pi
'- -100211 pi'
-
1.3
0.4
0.4
0
-
3
0
1
0
makeanti
pi
'- pi'
+
create
ThePEG
::
ParticleData
eta
(
1295
)
setup
eta
(
1295
)
100221
eta
(
1295
)
1.294
0.055
0.395
0
0
0
1
0
newdef
eta
(
1295
):
WidthLoCut
0.24
newdef
eta
(
1295
):
WidthUpCut
0.55
create
ThePEG
::
ParticleData
eta
(
1475
)
setup
eta
(
1475
)
100331
eta
(
1475
)
1.475
0.09
0.174
0
0
0
1
0
create
ThePEG
::
ParticleData
eta_c
(
2
S
)
setup
eta_c
(
2
S
)
100441
eta_c
(
2
S
)
3.6375
0.0113
0.113
0
0
0
1
0
create
ThePEG
::
ParticleData
eta_b
(
2
S
)
setup
eta_b
(
2
S
)
100551
eta_b
(
2
S
)
9.999
0.0041
0.041
0
0
0
1
0
create
ThePEG
::
ParticleData
K
'+
setup
K
'+ 100321 K'
+
1.46
0.26
0.26
0
3
0
1
0
create
ThePEG
::
ParticleData
K
'0
setup
K
'0 100311 K'
0
1.46
0.26
0.26
0
0
0
1
0
create
ThePEG
::
ParticleData
K
'-
setup
K
'- -100321 K'
-
1.46
0.26
0.26
0
-
3
0
1
0
makeanti
K
'- K'
+
create
ThePEG
::
ParticleData
K
'bar0
setup
K
'bar0 -100311 K'
bar0
1.46
0.26
0.26
0
0
0
1
0
makeanti
K
'bar0 K'
0
create
ThePEG
::
ParticleData
D_0
(
2550
)
0
setup
D_0
(
2550
)
0
100421
D_0
(
2550
)
0
2.549
0.165
0.33
0
0
0
1
0
create
ThePEG
::
ParticleData
D_0
(
2550
)
+
setup
D_0
(
2550
)
+
100411
D_0
(
2550
)
+
2.549
0.165
0.33
0
3
0
1
0
create
ThePEG
::
ParticleData
Dbar_0
(
2550
)
0
setup
Dbar_0
(
2550
)
0
-
100421
Dbar_0
(
2550
)
0
2.549
0.165
0.33
0
0
0
1
0
makeanti
Dbar_0
(
2550
)
0
D_0
(
2550
)
0
create
ThePEG
::
ParticleData
D_0
(
2550
)
-
setup
D_0
(
2550
)
-
-
100411
D_0
(
2550
)
-
2.549
0.165
0.33
0
-
3
0
1
0
makeanti
D_0
(
2550
)
-
D_0
(
2550
)
+
create
ThePEG
::
ParticleData
D_s0
(
2590
)
+
setup
D_s0
(
2590
)
+
100431
D_s0
(
2590
)
+
2.591
0.089
0.267
0
3
0
1
0
create
ThePEG
::
ParticleData
D_s0
(
2590
)
-
setup
D_s0
(
2590
)
-
-
100431
D_s0
(
2590
)
-
2.591
0.089
0.267
0
-
3
0
1
0
makeanti
D_s0
(
2590
)
-
D_s0
(
2590
)
+
create
ThePEG
::
ParticleData
B_c
(
2
S
)
+
setup
B_c
(
2
S
)
+
100541
B_c
(
2
S
)
+
6.8712
6.5E-5
0.00065
0
3
0
1
0
create
ThePEG
::
ParticleData
B_c
(
2
S
)
-
setup
B_c
(
2
S
)
-
-
100541
B_c
(
2
S
)
-
6.8712
6.5E-5
0.00065
0
-
3
0
1
0
makeanti
B_c
(
2
S
)
-
B_c
(
2
S
)
+
#
# the 2^3S_1 multiplet
#
create
ThePEG
::
ParticleData
rho
'+
setup
rho
'+ 100213 rho'
+
1.465
0.4
0.4
0
3
0
3
0
create
ThePEG
::
ParticleData
rho
'0
setup
rho
'0 100113 rho'
0
1.465
0.4
0.4
0
0
0
3
0
create
ThePEG
::
ParticleData
rho
'-
setup
rho
'- -100213 rho'
-
1.465
0.4
0.4
0
-
3
0
3
0
makeanti
rho
'- rho'
+
create
ThePEG
::
ParticleData
omega
'
setup
omega
' 100223 omega'
1.41
0.29
0.3225
0
0
0
3
0
newdef
omega
':WidthLoCut 0.215
newdef
omega
':WidthUpCut 0.43
create
ThePEG
::
ParticleData
phi
'
setup
phi
' 100333 phi'
1.68
0.15
0.3
0
0
0
3
0
create
ThePEG
::
ParticleData
psi
(
2
S
)
setup
psi
(
2
S
)
100443
psi
(
2
S
)
3.6861
0.000294
0.00337
0
0
0
3
0
create
ThePEG
::
ParticleData
Upsilon
(
2
S
)
setup
Upsilon
(
2
S
)
100553
Upsilon
(
2
S
)
10.02326
3.198E-5
0.0003198
0
0
0
3
0
create
ThePEG
::
ParticleData
K
'*+
setup
K
'*+ 100323 K'
*+
1.414
0.232
0.464
0
3
0
3
0
create
ThePEG
::
ParticleData
K
'*0
setup
K
'*0 100313 K'
*
0
1.414
0.232
0.464
0
0
0
3
0
create
ThePEG
::
ParticleData
K
'*-
setup
K
'*- -100323 K'
*-
1.414
0.232
0.464
0
-
3
0
3
0
makeanti
K
'*- K'
*+
create
ThePEG
::
ParticleData
K
'*bar0
setup
K
'*bar0 -100313 K'
*
bar0
1.414
0.232
0.464
0
0
0
3
0
makeanti
K
'*bar0 K'
*
0
create
ThePEG
::
ParticleData
D_1
*
(
2600
)
0
setup
D_1
*
(
2600
)
0
100423
D_1
*
(
2600
)
0
2.627
0.141
0.282
0
0
0
3
0
create
ThePEG
::
ParticleData
D_1
*
(
2600
)
+
setup
D_1
*
(
2600
)
+
100413
D_1
*
(
2600
)
+
2.627
0.141
0.282
0
3
0
3
0
create
ThePEG
::
ParticleData
Dbar_1
*
(
2600
)
0
setup
Dbar_1
*
(
2600
)
0
-
100423
Dbar_1
*
(
2600
)
0
2.627
0.141
0.282
0
0
0
3
0
makeanti
Dbar_1
*
(
2600
)
0
D_1
*
(
2600
)
0
create
ThePEG
::
ParticleData
D_1
*
(
2600
)
-
setup
D_1
*
(
2600
)
-
-
100413
D_1
*
(
2600
)
-
2.627
0.141
0.282
0
-
3
0
3
0
makeanti
D_1
*
(
2600
)
-
D_1
*
(
2600
)
+
create
ThePEG
::
ParticleData
D_s1
*
(
2700
)
+
setup
D_s1
*
(
2700
)
+
100433
D_s1
*
(
2700
)
+
2.714
0.122
0.244
0
3
0
3
0
create
ThePEG
::
ParticleData
D_s1
*
(
2700
)
-
setup
D_s1
*
(
2700
)
-
-
100433
D_s1
*
(
2700
)
-
2.714
0.122
0.244
0
-
3
0
3
0
makeanti
D_s1
*
(
2700
)
-
D_s1
*
(
2700
)
+
create
ThePEG
::
ParticleData
B_c
(
2
S
)
*+
setup
B_c
(
2
S
)
*+
100543
B_c
(
2
S
)
*+
6.8752
7.2E-5
0.00072
0
3
0
3
0
create
ThePEG
::
ParticleData
B_c
(
2
S
)
*-
setup
B_c
(
2
S
)
*-
-
100543
B_c
(
2
S
)
*-
6.8752
7.2E-5
0.00072
0
-
3
0
3
0
makeanti
B_c
(
2
S
)
*-
B_c
(
2
S
)
*+
#
# the 2^1P_1 multiplet
#
create
ThePEG
::
ParticleData
h_b
(
2
P
)
setup
h_b
(
2
P
)
110553
h_b
(
2
P
)
10.2598
8.0E-5
0.0008
0
0
0
3
0
#
# the 2^3P_0 multiplet
#
create
ThePEG
::
ParticleData
chi_b0
(
2
P
)
setup
chi_b0
(
2
P
)
110551
chi_b0
(
2
P
)
10.2325
0.000887
0.00887
0
0
0
1
0
#
# the 2^3P_1 multiplet
#
create
ThePEG
::
ParticleData
chi_b1
(
2
P
)
setup
chi_b1
(
2
P
)
120553
chi_b1
(
2
P
)
10.25546
7.87E-5
0.000787
0
0
0
3
0
#
# the 2^3P_2 multiplet
#
create
ThePEG
::
ParticleData
chi_c2
(
2
P
)
setup
chi_c2
(
2
P
)
100445
chi_c2
(
2
P
)
3.929
0.029
0.24
0
0
0
5
0
newdef
chi_c2
(
2
P
):
WidthLoCut
0.19
newdef
chi_c2
(
2
P
):
WidthUpCut
0.29
create
ThePEG
::
ParticleData
chi_b2
(
2
P
)
setup
chi_b2
(
2
P
)
100555
chi_b2
(
2
P
)
10.26865
0.0001847
0.001847
0
0
0
5
0
#
# the 2^1D_2 multiplet
#
#
# the 2^3D_1 multiplet
#
create
ThePEG
::
ParticleData
Upsilon_1
(
2
D
)
setup
Upsilon_1
(
2
D
)
130553
Upsilon_1
(
2
D
)
10.435
2.64E-5
0.000264
0
0
0
3
0
#
# the 2^3D_2 multiplet
#
create
ThePEG
::
ParticleData
Upsilon_2
(
2
D
)
setup
Upsilon_2
(
2
D
)
120555
Upsilon_2
(
2
D
)
10.441
2.23E-5
0.000223
0
0
0
5
0
#
# the 2^3D_3 multiplet
#
create
ThePEG
::
ParticleData
Upsilon_3
(
2
D
)
setup
Upsilon_3
(
2
D
)
100557
Upsilon_3
(
2
D
)
10.444
2.02E-5
0.000202
0
0
0
7
0
#
# the 3^1S_0 multiplet
#
create
ThePEG
::
ParticleData
eta_b
(
3
S
)
setup
eta_b
(
3
S
)
200551
eta_b
(
3
S
)
10.337
0.0027
0.027
0
0
0
1
0
#
# the 3^3S_1 multiplet
#
create
ThePEG
::
ParticleData
Upsilon
(
3
S
)
setup
Upsilon
(
3
S
)
200553
Upsilon
(
3
S
)
10.3552
2.032E-5
0.0002032
0
0
0
3
0
#
# the 3^1P_1 multiplet
#
#
# the 3^3P_0 multiplet
#
create
ThePEG
::
ParticleData
chi_b0
(
3
P
)
setup
chi_b0
(
3
P
)
210551
chi_b0
(
3
P
)
10.5007
0.00071
0.0071
0
0
0
1
0
#
# the 3^3P_1 multiplet
#
create
ThePEG
::
ParticleData
chi_b1
(
3
P
)
setup
chi_b1
(
3
P
)
220553
chi_b1
(
3
P
)
10.5134
6.6E-5
0.00066
0
0
0
3
0
#
# the 3^3P_2 multiplet
#
create
ThePEG
::
ParticleData
chi_b2
(
3
P
)
setup
chi_b2
(
3
P
)
200555
chi_b2
(
3
P
)
10.524
0.000146
0.00146
0
0
0
5
0
#
# the 4^3S_1 multiplet
#
create
ThePEG
::
ParticleData
Upsilon
(
4
S
)
setup
Upsilon
(
4
S
)
300553
Upsilon
(
4
S
)
10.5794
0.0205
0.11275
0
0
0
3
0
newdef
Upsilon
(
4
S
):
WidthLoCut
0.0205
newdef
Upsilon
(
4
S
):
WidthUpCut
0.205
#
# the 5^3S_1 multiplet
#
create
ThePEG
::
ParticleData
Upsilon
(
5
S
)
setup
Upsilon
(
5
S
)
9000553
Upsilon
(
5
S
)
10.8852
0.037
0.185
0
0
0
3
0
#
# The meson which are not part of a multiplet
#
create
ThePEG
::
ParticleData
f_0
(
1500
)
setup
f_0
(
1500
)
9030221
f_0
(
1500
)
1.506
0.112
0.336
0
0
0
1
0
newdef
f_0
(
1500
):
VariableRatio
1
create
ThePEG
::
ParticleData
sigma
setup
sigma
9000221
sigma
0.86
0.88
1.155
0
0
0
1
0
newdef
sigma
:
WidthLoCut
0.55
newdef
sigma
:
WidthUpCut
1.76
create
ThePEG
::
ParticleData
f_0
setup
f_0
9010221
f_0
0.965
0.1635
0.384
0
0
0
1
0
newdef
f_0
:
VariableRatio
1
newdef
f_0
:
WidthLoCut
0.256
newdef
f_0
:
WidthUpCut
0.512
create
ThePEG
::
ParticleData
a_00
setup
a_00
9000111
a_00
0.999
0.1778
0.4
0
0
0
1
0
newdef
a_00
:
VariableRatio
1
newdef
a_00
:
WidthLoCut
0.24
newdef
a_00
:
WidthUpCut
0.56
create
ThePEG
::
ParticleData
a_0
+
setup
a_0
+
9000211
a_0
+
0.999
0.1778
0.4
0
3
0
1
0
newdef
a_0
+
:
VariableRatio
1
newdef
a_0
+
:
WidthLoCut
0.24
newdef
a_0
+
:
WidthUpCut
0.56
create
ThePEG
::
ParticleData
a_0
-
setup
a_0
-
-
9000211
a_0
-
0.999
0.1778
0.4
0
-
3
0
1
0
makeanti
a_0
-
a_0
+
newdef
a_0
-
:
VariableRatio
1
newdef
a_0
-
:
WidthLoCut
0.24
newdef
a_0
-
:
WidthUpCut
0.56
create
ThePEG
::
ParticleData
eta
(
1405
)
setup
eta
(
1405
)
9020221
eta
(
1405
)
1.4098
0.0511
0.38325
0
0
0
1
0
newdef
eta
(
1405
):
WidthLoCut
0.2555
newdef
eta
(
1405
):
WidthUpCut
0.511
create
ThePEG
::
ParticleData
K_S0
setup
K_S0
310
K_S0
0.497611
7.3514250055883E-15
0
26.842
0
0
1
0
create
ThePEG
::
ParticleData
K_L0
setup
K_L0
130
K_L0
0.497611
1.2871947162427E-17
0
15330
0
0
1
1
create
ThePEG
::
ParticleData
kappa0
setup
kappa0
9000311
kappa0
0.845
0.468
0.5895
0
0
0
1
0
newdef
kappa0
:
WidthLoCut
0.207
newdef
kappa0
:
WidthUpCut
0.972
create
ThePEG
::
ParticleData
kappabar0
setup
kappabar0
-
9000311
kappabar0
0.845
0.468
0.5895
0
0
0
1
0
makeanti
kappabar0
kappa0
newdef
kappabar0
:
WidthLoCut
0.207
newdef
kappabar0
:
WidthUpCut
0.972
create
ThePEG
::
ParticleData
kappa
-
setup
kappa
-
-
9000321
kappa
-
0.845
0.468
0.5895
0
-
3
0
1
0
newdef
kappa
-
:
WidthLoCut
0.207
newdef
kappa
-
:
WidthUpCut
0.972
create
ThePEG
::
ParticleData
kappa
+
setup
kappa
+
9000321
kappa
+
0.845
0.468
0.5895
0
3
0
1
0
makeanti
kappa
+
kappa
-
newdef
kappa
+
:
WidthLoCut
0.207
newdef
kappa
+
:
WidthUpCut
0.972
diff
--
git
a
/
src
/
snippets
/
Makefile
.
am
b
/
src
/
snippets
/
Makefile
.
am
---
a
/
src
/
snippets
/
Makefile
.
am
+++
b
/
src
/
snippets
/
Makefile
.
am
@@
-
1
,
50
+
1
,
51
@@
BUILT_SOURCES
=
done
-
all
-
links
snippetsdir
=
$
{
pkgdatadir
}
/
snippets
INPUTFILES
=
\
CellGridSampler
.
in
\
Diffraction
.
in
\
DipoleMerging
.
in
\
DipoleShowerFiveFlavours
.
in
\
DipoleShowerFourFlavours
.
in
\
EECollider
.
in
\
EPCollider
.
in
\
PECollider
.
in
\
HepMCFixedOrder
.
in
\
HepMC
.
in
\
Matchbox
.
in
\
MB
-
DipoleShower
.
in
\
MB
.
in
\
MonacoSampler
.
in
\
Particles
-
SetLonglivedParticlesStable
.
in
\
PDF
-
CT10
.
in
\
PDF
-
NNPDF30NLO
.
in
\
+
PionPDF
.
in
\
PPCollider
.
in
\
RivetFixedOrder
.
in
\
Rivet
.
in
\
YFS
.
in
\
CMWinQtiledShower
.
in
\
Dipole_AutoTunes_gss
.
in
\
Tune
-
DotProduct
.
in
\
Tune
-
DotProduct
-
Veto
.
in
\
Tune
-
pT
.
in
\
Tune
-
Q2
.
in
\
EvolutionScheme
-
DotProduct
.
in
\
EvolutionScheme
-
DotProduct
-
Veto
.
in
\
EvolutionScheme
-
pT
.
in
\
EvolutionScheme
-
Q2
.
in
\
FixedTarget
.
in
\
FixedTarget
-
PP
.
in
\
H7Hadrons
.
in
dist_snippets_DATA
=
$
(
INPUTFILES
)
CLEANFILES
=
done
-
all
-
links
done
-
all
-
links
:
$
(
INPUTFILES
)
@echo
"Linking input files"
@for
i
in
$
(
INPUTFILES
);
do
\
if
test
-
f
$
(
srcdir
)
/
$$
i
-
a
!
-
e
$$
i
;
then
\
$
(
LN_S
)
-
f
$
(
srcdir
)
/
$$
i
;
fi
;
done
@touch
done
-
all
-
links
diff
--
git
a
/
src
/
snippets
/
PionPDF
.
in
b
/
src
/
snippets
/
PionPDF
.
in
new
file
mode
100644
---
/
dev
/
null
+++
b
/
src
/
snippets
/
PionPDF
.
in
@@
-
0
,
0
+
1
,
21
@@
+
# -*- ThePEG-repository -*-
+
+
#=============================================================================
+
# Set up for charged pion beams
+
#
+
# The LHAPDF6 library must be available to use this snippet.
+
#=============================================================================
+
+
cd
/
Herwig
/
Partons
+
create
ThePEG
::
LHAPDF
PionPDF
ThePEGLHAPDF
.
so
+
set
PionPDF
:
PDFName
xFitterPI_NLO_EIG
+
cp
HadronRemnants
PionRemnants
+
cp
RemnantDecayer
PionRemnantDecayer
+
set
PionRemnantDecayer
:
AllowTop
Yes
+
set
PionRemnants
:
RemnantDecayer
PionRemnantDecayer
+
set
PionPDF
:
RemnantHandler
PionRemnants
+
set
/
Herwig
/
Particles
/
pi
+
:
PDF
PionPDF
+
set
/
Herwig
/
Particles
/
pi
-
:
PDF
PionPDF
+
+
cd
/
+
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Dec 21, 3:17 PM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4023258
Default Alt Text
(197 KB)
Attached To
rHERWIGHG herwighg
Event Timeline
Log In to Comment