Page MenuHomeHEPForge

No OneTemporary

diff --git a/Models/Feynrules/python/ufo2peg/particles.py b/Models/Feynrules/python/ufo2peg/particles.py
--- a/Models/Feynrules/python/ufo2peg/particles.py
+++ b/Models/Feynrules/python/ufo2peg/particles.py
@@ -1,126 +1,162 @@
from string import Template
# ignore these, they're in Hw++ already # TODO reset Hw++ settings instead
SMPARTICLES = {
1:'d',
2:'u',
3:'s',
4:'c',
5:'b',
6:'t', # think about this one later
11:'e-',
12:'nu_e',
13:'mu-',
14:'nu_mu',
15:'tau-',
16:'nu_tau',
21:'g',
22:'gamma',
23:'Z0',
24:'W+',
-1:'dbar',
-2:'ubar',
-3:'sbar',
-4:'cbar',
-5:'bbar',
-6:'tbar',
-11:'e+',
-12:'nu_ebar',
-13:'mu+',
-14:'nu_mubar',
-15:'tau+',
-16:'nu_taubar',
-24:'W-',
}
particleT = Template(
"""
create ThePEG::ParticleData $name
setup $name $pdg_code $name $mass $width $wcut $ctau $charge $color $spin 0
"""
)
class ParticleConverter:
'Convert a FR particle to extract the information ThePEG needs.'
def __init__(self,p,parmsubs):
self.name = p.name
self.pdg_code = p.pdg_code
self.spin = p.spin
self.color = p.color
if self.color == 1:
self.color = 0
self.selfconjugate = 0
self.mass = parmsubs[str(p.mass)]
self.width = parmsubs[str(p.width)]
try:
self.mass = self.mass.real
except:
pass
self.mass = abs(self.mass)
hbarc = 197.3269631e-15 # GeV mm (I hope ;-) )
self.ctau = (hbarc / self.width) if self.width != 0 else 0
self.wcut = 10 * self.width
self.charge = int(3 * p.charge)
def subs(self):
return self.__dict__
def thepeg_particles(FR,parameters):
plist = ''
antis = {}
names = []
for p in FR.all_particles:
if p.spin == -1:
continue
gsnames = ['goldstone',
'goldstoneboson',
'GoldstoneBoson']
def gstest(name):
try:
return getattr(p,name)
except AttributeError:
return False
if any(map(gstest, gsnames)):
continue
if p.pdg_code in SMPARTICLES:
continue
if p.pdg_code == 25:
plist += \
"""
set /Herwig/Particles/h0:Mass_generator NULL
set /Herwig/Particles/h0:Width_generator NULL
rm /Herwig/Masses/HiggsMass
rm /Herwig/Widths/HiggsWidth
"""
subs = ParticleConverter(p,parameters).subs()
plist += particleT.substitute(subs)
pdg, name = subs['pdg_code'], subs['name']
names.append(name)
if -pdg in antis:
plist += 'makeanti %s %s\n' % (antis[-pdg], name)
else:
plist += 'insert /Herwig/NewPhysics/NewModel:DecayParticles 0 %s\n' % name
antis[pdg] = name
selfconjugate = 1
+
+ class SkipMe(Exception):
+ pass
+
+ def spin_name(s):
+ spins = { 1 : 'Zero',
+ 2 : 'Half',
+ 3 : 'One' }
+ if s not in spins:
+ raise SkipMe()
+ else:
+ return spins[s]
+
+ def col_name(c):
+ cols = { 3 : 'Triplet',
+ 6 : 'Sextet',
+ 8 : 'Octet' }
+ return cols[c]
+
+ try:
+ if p.color in [3,6,8]: # which colors?
+ splitname = '{name}SplitFn'.format(name=p.name)
+ plist += 'create Herwig::{s}{s}OneSplitFn {name}\n' \
+ .format(s=spin_name(p.spin), name=splitname)
+ plist += 'set {name}:InteractionType QCD\n'.format(name=splitname)
+ plist += 'set {name}:ColourStructure {c}{c}Octet\n' \
+ .format(name=splitname, c=col_name(p.color))
+ sudname = '{name}Sudakov'.format(name=p.name)
+ plist += 'cp /Herwig/Shower/SudakovCommon {name}\n'.format(name=sudname)
+ plist += 'set {}:SplittingFunction {}\n'.format(sudname,splitname)
+ plist += 'do /Herwig/Shower/SplittingGenerator:AddFinalSplitting ' \
+ '{pname}->{pname},g; {sudname}\n\n' \
+ .format(pname=p.name, sudname=sudname)
+ except SkipMe:
+ pass
+
return plist, names

File Metadata

Mime Type
text/x-diff
Expires
Sat, May 3, 6:54 AM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4983183
Default Alt Text
(4 KB)

Event Timeline