Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F10881862
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
View Options
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
Details
Attached
Mime Type
text/x-diff
Expires
Sat, May 3, 6:54 AM (19 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4983183
Default Alt Text
(4 KB)
Attached To
rHERWIGHG herwighg
Event Timeline
Log In to Comment