Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8723825
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
222 KB
Subscribers
None
View Options
diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -1,54 +1,57 @@
\.svn/.*
.*/Makefile
.*/Makefile\.in
.*/\.deps
.*/\.libs
.*/.*\.l[ao]
.*/.*\.so\.*
.*/.*\.o
+Tests/.*\.aida
.*~
+.*\.tar\.(gz|bz2)
autom4te.cache
config.herwig
config.log
config.status
configure
include/Herwig\+\+
Config/config.guess
Config/config.h
Config/config.h.in
Config/config.sub
Config/depcomp
Config/install-sh
Config/missing
Config/stamp-h1
+Config/ar-lib
Contrib/make_makefiles.sh
Doc/HerwigDefaults.in
Doc/fixinterfaces.pl
Doc/refman.conf
Doc/refman.h
(src|Utilities)/version.tmp
(src|Utilities)/version.tmp.new
INSTALL
Makefile
Makefile.in
Utilities/versionstring.h
aclocal.m4
confdefs.h
conftest.c
conftest.err
include/done-all-links
libtool
src/herwigopts.h
src/herwigopts.c
src/defaults/Analysis.in
src/herwig-config
-src/.*\.(run|tex|out|log|rpo|spc|top|dump|dot|aux|pdf|ps|png|svg)
+src/.*\.(run|tex|out|log|rpo|spc|top|dump|dot|aux|pdf|ps|png|svg|hepmc)
lib/done-all-links
src/Herwig\+\+
src/defaults/PDF.in
src/defaults/done-all-links
src/versionstring.h
src/tune
src/tests/.*\.(time|mult|Bmult|chisq)
Tests/.*/.*\.(top|ps|pyc|info)
Tests/.*\.(top|run|tex|mult|Bmult)
diff --git a/.hgtags b/.hgtags
new file mode 100644
--- /dev/null
+++ b/.hgtags
@@ -0,0 +1,7 @@
+168ae2110e964d62fbc1331a1c2e095952a67748 release-2-5-2
+3abb4fa42e20e332796c2572334c2d77204cd0e0 release-2-4-2
+4796ca080aafd5daa3b7349b015cb1df944428a2 release-2-5-0
+76da042f056eb153981b4d005d5474ffb90a5e88 release-2-4-1
+81a684a558413c69df314365eabf09893ffd43d8 release-2-6-0
+bd75cd00d99f4bdbaed992daf98f0a73c0f91e9b release-2-4-0
+ff6ecc8d49ce10299303b050394bd5cb5837f1c3 release-2-5-1
diff --git a/Analysis/SimpleLHCAnalysis.cc b/Analysis/SimpleLHCAnalysis.cc
--- a/Analysis/SimpleLHCAnalysis.cc
+++ b/Analysis/SimpleLHCAnalysis.cc
@@ -1,163 +1,163 @@
// -*- C++ -*-
//
// SimpleLHCAnalysis.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2011 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 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 SimpleLHCAnalysis class.
//
#include "SimpleLHCAnalysis.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/EventRecord/Event.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
SimpleLHCAnalysis::SimpleLHCAnalysis() :
_ptZ(4,Histogram(0.,250.,250)),
_ptWp(4,Histogram(0.,250.,250)),
_ptWm(4,Histogram(0.,250.,250)),
_mZ(0.,250.,250), _mWp(0.,250.,250), _mWm(0.,250.,250),
_rapZ(-10.,10.,100),_rapWp(-10.,10.,100),_rapWm(-10.,10.,100),
_phiZ(-Constants::pi,Constants::pi,100),
_phiWp(-Constants::pi,Constants::pi,100),
_phiWm(-Constants::pi,Constants::pi,100)
{}
void sumMomenta(Lorentz5Momentum & psum, tPPtr parent) {
if(!parent->children().empty()) {
for(unsigned int ix=0;ix<parent->children().size();++ix)
sumMomenta(psum,parent->children()[ix]);
}
else
psum += parent->momentum();
}
void SimpleLHCAnalysis::analyze(tEventPtr event, long, int, int) {
// AnalysisHandler::analyze(event, ieve, loop, state);
// Rotate to CMS, extract final state particles and call analyze(particles).
// find the Z
Lorentz5Momentum pz;
StepVector::const_iterator sit =event->primaryCollision()->steps().begin();
StepVector::const_iterator stest =event->primaryCollision()->steps().end();
StepVector::const_iterator send=sit;
++send;
if(send==stest) --send;
++send;
if(send==stest) --send;
++send;
for(;sit!=send;++sit) {
ParticleSet part=(**sit).all();
ParticleSet::const_iterator iter = part.begin(), end = part.end();
for( ;iter!=end;++iter) {
if((**iter).children().size()!=2) continue;
if((**iter).id()==ParticleID::Z0||(**iter).id()==ParticleID::gamma) {
pz=Lorentz5Momentum();
sumMomenta(pz,*iter);
pz.rescaleMass();
double pt = pz.perp()/GeV;
- double mz = pz.mass()/GeV;
+ double mz = pz.m()/GeV;
if(mz>20.&&mz<80.) _ptZ[1].addWeighted(pt,event->weight());
else if (mz>80.&&mz<100.) _ptZ[2].addWeighted(pt,event->weight());
else if (mz>100.) _ptZ[3].addWeighted(pt,event->weight());
_ptZ[0].addWeighted(pt ,event->weight());
_mZ .addWeighted(mz ,event->weight());
_rapZ .addWeighted(pz.rapidity(),event->weight());
_phiZ .addWeighted(pz.phi() ,event->weight());
}
else if ((**iter).id()==ParticleID::Wplus) {
pz=Lorentz5Momentum();
sumMomenta(pz,*iter);
pz.rescaleMass();
double pt = pz.perp()/GeV;
- double mz = pz.mass()/GeV;
+ double mz = pz.m()/GeV;
if(mz>20.&&mz<80.) _ptWp[1].addWeighted(pt,event->weight());
else if (mz>80.&&mz<100.) _ptWp[2].addWeighted(pt,event->weight());
else if (mz>100.) _ptWp[3].addWeighted(pt,event->weight());
_ptWp[0].addWeighted(pt ,event->weight());
_mWp .addWeighted(mz ,event->weight());
_rapWp .addWeighted(pz.rapidity(),event->weight());
_phiWp .addWeighted(pz.phi() ,event->weight());
}
else if ((**iter).id()==ParticleID::Wminus) {
pz=Lorentz5Momentum();
sumMomenta(pz,*iter);
pz.rescaleMass();
double pt = pz.perp()/GeV;
- double mz = pz.mass()/GeV;
+ double mz = pz.m()/GeV;
if(mz>20.&&mz<80.) (_ptWm[1]).addWeighted(pt,event->weight());
else if (mz>80.&&mz<100.) (_ptWm[2]).addWeighted(pt,event->weight());
else if (mz>100.) (_ptWm[3]).addWeighted(pt,event->weight());
_ptWm[0].addWeighted(pt ,event->weight());
_mWm .addWeighted(mz ,event->weight());
_rapWm .addWeighted(pz.rapidity(),event->weight());
_phiWm .addWeighted(pz.phi() ,event->weight());
}
}
}
}
NoPIOClassDescription<SimpleLHCAnalysis> SimpleLHCAnalysis::initSimpleLHCAnalysis;
// Definition of the static class description member.
void SimpleLHCAnalysis::Init() {
static ClassDocumentation<SimpleLHCAnalysis> documentation
("The SimpleLHCAnalysis class performs a simple analysis of W and"
" Z production in hadron-hadron collisions");
}
void SimpleLHCAnalysis::dofinish() {
AnalysisHandler::dofinish();
string fname = generator()->filename() + string("-") + name() + string(".top");
ofstream outfile(fname.c_str());
string title;
using namespace HistogramOptions;
for(unsigned int ix=0;ix<4;++ix) {
if(ix==0){title="pt of Z for all masses ";}
else if(ix==1){title="pt of Z for mass 40-80 GeV";}
else if(ix==2){title="pt of Z for mass 80-100 GeV";}
else if(ix==3){title="pt of Z for mass 100- GeV";}
_ptZ[ix].topdrawOutput(outfile,Frame,"BLACK",title);
_ptZ[ix].topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
if(ix==0){title="pt of Wp for all masses ";}
else if(ix==1){title="pt of Wp for mass 40-80 GeV";}
else if(ix==2){title="pt of Wp for mass 80-100 GeV";}
else if(ix==3){title="pt of Wp for mass 100- GeV";}
_ptWp[ix].topdrawOutput(outfile,Frame,"BLACK",title);
_ptWp[ix].topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
if(ix==0){title="pt of Wm for all masses ";}
else if(ix==1){title="pt of Wm for mass 40-80 GeV";}
else if(ix==2){title="pt of Wm for mass 80-100 GeV";}
else if(ix==3){title="pt of Wm for mass 100- GeV";}
_ptWm[ix].topdrawOutput(outfile,Frame,"BLACK",title);
_ptWm[ix].topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
}
_mZ.topdrawOutput(outfile,Frame,"BLACK","Mass of Z");
_mZ.topdrawOutput(outfile,Frame|Ylog,"BLACK", "Mass of Z");
_mWp.topdrawOutput(outfile,Frame,"BLACK","Mass of Wp");
_mWp.topdrawOutput(outfile,Frame|Ylog,"BLACK", "Mass of Wp");
_mWm.topdrawOutput(outfile,Frame,"BLACK","Mass of Wm");
_mWm.topdrawOutput(outfile,Frame|Ylog,"BLACK", "Mass of Wm");
_rapZ.topdrawOutput(outfile,Frame,"BLACK","Rapidity of Z");
_rapZ.topdrawOutput(outfile,Frame|Ylog,"BLACK","Rapidity of Z");
_rapWp.topdrawOutput(outfile,Frame,"BLACK","Rapidity of Wp");
_rapWp.topdrawOutput(outfile,Frame|Ylog,"BLACK","Rapidity of Wp");
_rapWm.topdrawOutput(outfile,Frame,"BLACK","Rapidity of Wm");
_rapWm.topdrawOutput(outfile,Frame|Ylog,"BLACK","Rapidity of Wm");
_phiZ.topdrawOutput(outfile,Frame,"BLACK","Azimuth of Z");
_phiWp.topdrawOutput(outfile,Frame,"BLACK","Azimuth of Wp");
_phiWm.topdrawOutput(outfile,Frame,"BLACK","Azimuth of Wm");
}
diff --git a/Contrib/VBFTest/ILC.in b/Contrib/VBFTest/ILC.in
new file mode 100644
--- /dev/null
+++ b/Contrib/VBFTest/ILC.in
@@ -0,0 +1,110 @@
+##################################################
+# Example generator based on ILC parameters
+# usage: Herwig++ read ILC.in
+#
+# Since most parameters are identical to LEP,
+# we use the default LEPGenerator and adapt only
+# for the differences
+##################################################
+
+###################################################
+# Change settings for the ee->Z->qq matrix element
+# to produce only top quarks
+#
+# 'set' lines like this can be omitted if the
+# default value is already okay.
+#
+# Any repository setting can be modified here
+###################################################
+cd /Herwig
+create Herwig::O2AlphaS AlphaS2
+set Model:QCD/RunningAlphaS AlphaS2
+set Model:EW/CKM:theta_12 0.22274457
+set Model:EW/CKM:theta_13 0.
+set Model:EW/CKM:theta_23 0.
+set Model:EW/CKM:delta 0.
+set Model:EW/Sin2ThetaW .2319
+create Herwig::AlphaEM AlphaEM2
+set Model:EW/RunningAlphaEM AlphaEM2
+cd /Herwig/MatrixElements
+create Herwig::MEee2HiggsVBF MEee2HiggsVBF
+insert SimpleEE:MatrixElements[0] MEee2HiggsVBF
+
+set MEee2HiggsVBF:Process ZZ
+set MEee2HiggsVBF:ShapeScheme OnShell
+
+set /Herwig/Particles/e+:PDF /Herwig/Partons/NoPDF
+set /Herwig/Particles/e-:PDF /Herwig/Partons/NoPDF
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Particles/Z0:NominalMass 91.188
+set /Herwig/Particles/W+:NominalMass 80.42
+set /Herwig/Particles/W-:NominalMass 80.42
+set /Herwig/Masses/HiggsMass:HiggsShape 0
+#set /Herwig/Generators/LEPGenerator:EventHandler:BeamB /Herwig/Particles/e-
+
+
+
+##################################################
+# Technical parameters for this run
+##################################################
+cd /Herwig/Generators
+set LEPGenerator:NumberOfEvents 100000000
+set LEPGenerator:RandomNumberGenerator:Seed 31122001
+set LEPGenerator:DebugLevel 1
+set LEPGenerator:PrintEvent 100
+set LEPGenerator:MaxErrors 10000
+set LEPGenerator:EventHandler:HadronizationHandler NULL
+set LEPGenerator:EventHandler:CascadeHandler NULL
+set LEPGenerator:EventHandler:DecayHandler NULL
+set /Herwig/Analysis/Basics:CheckQuark 0
+##################################################
+# ILC physics parameters (override defaults)
+##################################################
+set LEPGenerator:EventHandler:LuminosityFunction:Energy 500.0
+
+##################################################
+# Useful analysis handlers for HepMC related output
+##################################################
+# Schematic overview of an event (requires --with-hepmc to be set at configure time
+# and the graphviz program 'dot' to produce a plot)
+# insert LEPGenerator:AnalysisHandlers 0 /Herwig/Analysis/Plot
+# A HepMC dump file (requires --with-hepmc to be set at configure time)
+# insert LEPGenerator:AnalysisHandlers 0 /Herwig/Analysis/HepMCFile
+# set /Herwig/Analysis/HepMCFile:PrintEvent 100
+# set /Herwig/Analysis/HepMCFile:Format GenEvent
+# set /Herwig/Analysis/HepMCFile:Units GeV_mm
+
+create Herwig::QuickVBF /Herwig/Analysis/QuickVBF QuickVBF.so
+insert LEPGenerator:AnalysisHandlers 0 /Herwig/Analysis/QuickVBF
+
+##################################################
+# Save run for later usage with 'Herwig++ run'
+##################################################
+#saverun ILC LEPGenerator
+
+##################################################
+# uncomment this section for an example batch run
+# of two repeats with different parameters
+#
+# Note that a separate call of 'Herwig run'
+# is not required
+##################################################
+saverun ILC1 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun ILC2 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Generators/LEPGenerator:EventHandler:LuminosityFunction:Energy 1000
+saverun ILC3 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun ILC4 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Generators/LEPGenerator:EventHandler:LuminosityFunction:Energy 500
+set /Herwig/MatrixElements/MEee2HiggsVBF:Process WW
+saverun ILC5 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun ILC6 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Generators/LEPGenerator:EventHandler:LuminosityFunction:Energy 1000
+saverun ILC7 LEPGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun ILC8 LEPGenerator
diff --git a/Contrib/VBFTest/LHC.in b/Contrib/VBFTest/LHC.in
new file mode 100644
--- /dev/null
+++ b/Contrib/VBFTest/LHC.in
@@ -0,0 +1,130 @@
+##################################################
+# Example generator based on LHC parameters
+# usage: Herwig++ read LHC.in
+##################################################
+
+cd /Herwig
+create Herwig::O2AlphaS AlphaS2
+set Model:QCD/RunningAlphaS AlphaS2
+set Model:EW/CKM:theta_12 0.000001
+set Model:EW/CKM:theta_13 0.
+set Model:EW/CKM:theta_23 0.
+set Model:EW/CKM:delta 0.
+set Model:EW/Sin2ThetaW .2319
+create Herwig::AlphaEM AlphaEM2
+set Model:EW/RunningAlphaEM AlphaEM2
+
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Particles/Z0:NominalMass 91.188
+set /Herwig/Particles/W+:NominalMass 80.42
+set /Herwig/Particles/W-:NominalMass 80.42
+set /Herwig/Masses/HiggsMass:HiggsShape 0
+
+cd /Herwig/Partons
+setup MRST /usr/local/share/Herwig++/PDF/mrst/1998/lo05a.dat
+set MRST:Interpolation Linear
+
+##################################################
+# Technical parameters for this run
+##################################################
+cd /Herwig/Generators
+set LHCGenerator:NumberOfEvents 10000000
+set LHCGenerator:RandomNumberGenerator:Seed 31122001
+set LHCGenerator:DebugLevel 1
+set LHCGenerator:PrintEvent 10
+set LHCGenerator:MaxErrors 10000
+set LHCGenerator:EventHandler:CascadeHandler NULL
+set LHCGenerator:EventHandler:DecayHandler NULL
+set LHCGenerator:EventHandler:HadronizationHandler NULL
+set LHCGenerator:EventHandler:StatLevel Full
+
+##################################################
+# LHC physics parameters (override defaults here)
+##################################################
+set LHCGenerator:EventHandler:LuminosityFunction:Energy 2000.0
+set LHCGenerator:EventHandler:BeamB /Herwig/Particles/pbar-
+
+# Intrinsic pT tune extrapolated to LHC energy
+set /Herwig/Shower/Evolver:IntrinsicPtGaussian 5.7*GeV
+
+##################################################
+# Matrix Elements for hadron-hadron collisions
+# (by default only gamma/Z switched on)
+##################################################
+cd /Herwig/MatrixElements/
+create Herwig::MEPP2HiggsVBF MEPP2HiggsVBF
+set MEPP2HiggsVBF:MaxFlavour 5
+set MEPP2HiggsVBF:ShapeScheme OnShell
+set MEPP2HiggsVBF:Process ZZ
+
+insert SimpleQCD:MatrixElements[0] MEPP2HiggsVBF
+set /Herwig/Cuts/JetKtCut:MinKT 0.*GeV
+
+set /Herwig/ACDCSampler:Ntry 100000
+
+cd /Herwig/Generators
+
+##################################################
+# Useful analysis handlers for hadron-hadron physics
+##################################################
+# analysis of W/Z events
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/DrellYan
+# analysis of top-antitop events
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/TTbar
+# analysis of gamma+jet events
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/GammaJet
+# analysis of gamma-gamma events
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/GammaGamma
+# analysis of higgs-jet events
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/HiggsJet
+
+##################################################
+# Useful analysis handlers for HepMC related output
+##################################################
+# Schematic overview of an event (requires --with-hepmc to be set at configure time
+# and the graphviz program 'dot' to produce a plot)
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/Plot
+# A HepMC dump file (requires --with-hepmc to be set at configure time)
+# insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/HepMCFile
+# set /Herwig/Analysis/HepMCFile:PrintEvent 100
+# set /Herwig/Analysis/HepMCFile:Format GenEvent
+# set /Herwig/Analysis/HepMCFile:Units GeV_mm
+set /Herwig/Analysis/Basics:CheckQuark 0
+
+create Herwig::QuickVBFHadron /Herwig/Analysis/QuickVBFHadron QuickVBFHadron.so
+insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/QuickVBFHadron
+
+##################################################
+# Save run for later usage with 'Herwig++ run'
+##################################################
+#saverun LHC LHCGenerator
+
+##################################################
+# uncomment this section for an example batch run
+# of two repeats with different parameters
+#
+# Note that a separate call of 'Herwig run'
+# is not required in this case
+##################################################
+saverun LHC1 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun LHC2 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Generators/LHCGenerator:EventHandler:LuminosityFunction:Energy 14000
+set /Herwig/Generators/LHCGenerator:EventHandler:BeamB /Herwig/Particles/p+
+saverun LHC3 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun LHC4 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Generators/LHCGenerator:EventHandler:LuminosityFunction:Energy 2000
+set /Herwig/Generators/LHCGenerator:EventHandler:BeamB /Herwig/Particles/pbar-
+set /Herwig/MatrixElements/MEPP2HiggsVBF:Process WW
+saverun LHC5 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun LHC6 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 115
+set /Herwig/Generators/LHCGenerator:EventHandler:LuminosityFunction:Energy 14000
+set /Herwig/Generators/LHCGenerator:EventHandler:BeamB /Herwig/Particles/p+
+saverun LHC7 LHCGenerator
+set /Herwig/Particles/h0:NominalMass 300
+saverun LHC8 LHCGenerator
diff --git a/Contrib/VBFTest/QuickVBF.cc b/Contrib/VBFTest/QuickVBF.cc
new file mode 100644
--- /dev/null
+++ b/Contrib/VBFTest/QuickVBF.cc
@@ -0,0 +1,134 @@
+// -*- C++ -*-
+//
+// This is the implementation of the non-inlined, non-templated member
+// functions of the QuickVBF class.
+//
+
+#include "QuickVBF.h"
+#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/PDT/EnumParticles.h"
+#include "ThePEG/Repository/EventGenerator.h"
+#include "ThePEG/EventRecord/Particle.h"
+#include "ThePEG/EventRecord/Event.h"
+
+using namespace Herwig;
+
+void QuickVBF::analyze(tEventPtr event, long ieve, int loop, int state) {
+ AnalysisHandler::analyze(event, ieve, loop, state);
+ // Rotate to CMS, extract final state particles and call analyze(particles).
+ StepVector::const_iterator sit =event->primaryCollision()->steps().begin();
+ StepVector::const_iterator stest =event->primaryCollision()->steps().end();
+ StepVector::const_iterator send=sit;
+ ++send;
+ if(send==stest) --send;
+ ++send;
+ if(send==stest) --send;
+ ++send;
+ Lorentz5Momentum pz;
+ for(;sit!=send;++sit) {
+ ParticleSet part;
+ (**sit).selectFinalState(inserter(part));
+ ParticleSet::const_iterator iter = part.begin(), end = part.end();
+ for( ;iter!=end;++iter) {
+ if((**iter).id()==ParticleID::h0) {
+ *_mH += (**iter).momentum().m()/GeV;
+ *_cosH += (**iter).momentum().cosTheta();
+ *_phiH += (**iter).momentum().phi()+Constants::pi;
+ *_eH += (**iter).momentum().t()/GeV;
+ }
+ else if((**iter).id()==ParticleID::nu_e) {
+ *_cosnu += (**iter).momentum().cosTheta();
+ *_phinu += (**iter).momentum().phi()+Constants::pi;
+ *_enu += (**iter).momentum().t()/GeV;
+ }
+ else if((**iter).id()==ParticleID::nu_ebar) {
+ *_cosnub += (**iter).momentum().cosTheta();
+ *_phinub += (**iter).momentum().phi()+Constants::pi;
+ *_enub += (**iter).momentum().t()/GeV;
+ }
+ else if((**iter).id()==ParticleID::eminus) {
+ *_cosem += (**iter).momentum().cosTheta();
+ *_phiem += (**iter).momentum().phi()+Constants::pi;
+ *_eem += (**iter).momentum().t()/GeV;
+ }
+ else if((**iter).id()==ParticleID::eplus) {
+ *_cosep += (**iter).momentum().cosTheta();
+ *_phiep += (**iter).momentum().phi()+Constants::pi;
+ *_eep += (**iter).momentum().t()/GeV;
+ }
+ }
+ }
+}
+
+NoPIOClassDescription<QuickVBF> QuickVBF::initQuickVBF;
+// Definition of the static class description member.
+
+void QuickVBF::Init() {
+
+ static ClassDocumentation<QuickVBF> documentation
+ ("There is no documentation for the QuickVBF class");
+
+}
+
+void QuickVBF::doinitrun() {
+ AnalysisHandler::doinitrun();
+ if(getParticleData(ParticleID::h0)->mass()>200.*GeV)
+ _mH = new_ptr(Histogram(200., 400.,200));
+ else
+ _mH = new_ptr(Histogram(114., 116.0,200));
+ _cosH = new_ptr(Histogram( -1.0, 1.0,200));
+ _phiH = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _eH = new_ptr(Histogram( 0.0,1000.,1000));
+ _cosnu = new_ptr(Histogram( -1.0, 1.0,200));
+ _phinu = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _enu = new_ptr(Histogram( 0.0,1000.,1000));
+ _cosnub = new_ptr(Histogram( -1.0, 1.0,200));
+ _phinub = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _enub = new_ptr(Histogram( 0.0,1000.,1000));
+ _cosem = new_ptr(Histogram( -1.0, 1.0,200));
+ _phiem = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _eem = new_ptr(Histogram( 0.0,1000.,1000));
+ _cosep = new_ptr(Histogram( -1.0, 1.0,200));
+ _phiep = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _eep = new_ptr(Histogram( 0.0,1000.,1000));
+}
+
+void QuickVBF::dofinish() {
+ AnalysisHandler::dofinish();
+ string fname = generator()->filename() + string("-") + name() + string(".top");
+ ofstream outfile(fname.c_str());
+ using namespace HistogramOptions;
+ string title,species;
+ title = "mass of H";
+ _mH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "theta of H";
+ _cosH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "Energy of H";
+ _eH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "azimuth of H";
+ _phiH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "theta of nu";
+ _cosnu->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "Energy of nu";
+ _enu->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "azimuth of nu";
+ _phinu->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "theta of nub";
+ _cosnub->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "Energy of nub";
+ _enub->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "azimuth of nub";
+ _phinub->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "theta of em";
+ _cosem->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "Energy of em";
+ _eem->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "azimuth of em";
+ _phiem->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "theta of ep ";
+ _cosep ->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "Energy of ep ";
+ _eep ->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "azimuth of ep ";
+ _phiep ->topdrawOutput(outfile,Frame,"BLACK",title);
+}
diff --git a/Contrib/VBFTest/QuickVBF.h b/Contrib/VBFTest/QuickVBF.h
new file mode 100644
--- /dev/null
+++ b/Contrib/VBFTest/QuickVBF.h
@@ -0,0 +1,152 @@
+// -*- C++ -*-
+#ifndef HERWIG_QuickVBF_H
+#define HERWIG_QuickVBF_H
+//
+// This is the declaration of the QuickVBF class.
+//
+
+#include "ThePEG/Handlers/AnalysisHandler.h"
+#include "Herwig++/Utilities/Histogram.h"
+
+namespace Herwig {
+
+using namespace ThePEG;
+
+/**
+ * Here is the documentation of the QuickVBF class.
+ *
+ * @see \ref QuickVBFInterfaces "The interfaces"
+ * defined for QuickVBF.
+ */
+class QuickVBF: public AnalysisHandler {
+
+public:
+
+ /** @name Virtual functions required by the AnalysisHandler class. */
+ //@{
+ /**
+ * Analyze a given Event. Note that a fully generated event
+ * may be presented several times, if it has been manipulated in
+ * between. The default version of this function will call transform
+ * to make a lorentz transformation of the whole event, then extract
+ * all final state particles and call analyze(tPVector) of this
+ * analysis object and those of all associated analysis objects. The
+ * default version will not, however, do anything on events which
+ * have not been fully generated, or have been manipulated in any
+ * way.
+ * @param event pointer to the Event to be analyzed.
+ * @param ieve the event number.
+ * @param loop the number of times this event has been presented.
+ * If negative the event is now fully generated.
+ * @param state a number different from zero if the event has been
+ * manipulated in some way since it was last presented.
+ */
+ virtual void analyze(tEventPtr event, long ieve, int loop, int state);
+
+public:
+
+ /**
+ * The standard Init function used to initialize the interfaces.
+ * Called exactly once for each class by the class description system
+ * before the main function starts or
+ * when this class is dynamically loaded.
+ */
+ static void Init();
+
+protected:
+
+ /** @name Clone Methods. */
+ //@{
+ /**
+ * Make a simple clone of this object.
+ * @return a pointer to the new object.
+ */
+ inline virtual IBPtr clone() const {return new_ptr(*this);}
+
+ /** Make a clone of this object, possibly modifying the cloned object
+ * to make it sane.
+ * @return a pointer to the new object.
+ */
+ inline virtual IBPtr fullclone() const {return new_ptr(*this);}
+ //@}
+
+
+protected:
+
+ /** @name Standard Interfaced functions. */
+ //@{
+ /**
+ * Initialize this object. Called in the run phase just before
+ * a run begins.
+ */
+ virtual void doinitrun();
+
+ /**
+ * Finalize this object. Called in the run phase just after a
+ * run has ended. Used eg. to write out statistics.
+ */
+ virtual void dofinish();
+ //@}
+
+private:
+
+ /**
+ * The static object used to initialize the description of this class.
+ * Indicates that this is an concrete class without persistent data.
+ */
+ static NoPIOClassDescription<QuickVBF> initQuickVBF;
+
+ /**
+ * The assignment operator is private and must never be called.
+ * In fact, it should not even be implemented.
+ */
+ QuickVBF & operator=(const QuickVBF &);
+
+private:
+
+ HistogramPtr _mH ,_cosH ,_eH ,_phiH ;
+ HistogramPtr _cosnu ,_enu ,_phinu ;
+ HistogramPtr _cosnub,_enub,_phinub;
+ HistogramPtr _cosem ,_eem ,_phiem ;
+ HistogramPtr _cosep ,_eep ,_phiep ;
+
+};
+
+}
+
+#include "ThePEG/Utilities/ClassTraits.h"
+
+namespace ThePEG {
+
+/** @cond TRAITSPECIALIZATIONS */
+
+/** This template specialization informs ThePEG about the
+ * base classes of QuickVBF. */
+template <>
+struct BaseClassTrait<Herwig::QuickVBF,1> {
+ /** Typedef of the first base class of QuickVBF. */
+ typedef AnalysisHandler NthBase;
+};
+
+/** This template specialization informs ThePEG about the name of
+ * the QuickVBF class and the shared object where it is defined. */
+template <>
+struct ClassTraits<Herwig::QuickVBF>
+ : public ClassTraitsBase<Herwig::QuickVBF> {
+ /** Return a platform-independent class name */
+ static string className() { return "Herwig::QuickVBF"; }
+ /**
+ * The name of a file containing the dynamic library where the class
+ * QuickVBF is implemented. It may also include several, space-separated,
+ * libraries if the class QuickVBF depends on other classes (base classes
+ * excepted). In this case the listed libraries will be dynamically
+ * linked in the order they are specified.
+ */
+ static string library() { return "QuickVBF.so"; }
+};
+
+/** @endcond */
+
+}
+
+#endif /* HERWIG_QuickVBF_H */
diff --git a/Contrib/VBFTest/QuickVBFHadron.cc b/Contrib/VBFTest/QuickVBFHadron.cc
new file mode 100644
--- /dev/null
+++ b/Contrib/VBFTest/QuickVBFHadron.cc
@@ -0,0 +1,241 @@
+// -*- C++ -*-
+//
+// This is the implementation of the non-inlined, non-templated member
+// functions of the QuickVBFHadron class.
+//
+
+#include "QuickVBFHadron.h"
+#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/PDT/EnumParticles.h"
+#include "ThePEG/Repository/EventGenerator.h"
+#include "ThePEG/EventRecord/Particle.h"
+#include "ThePEG/EventRecord/Event.h"
+
+#include "ThePEG/EventRecord/Collision.h"
+#include "ThePEG/EventRecord/Step.h"
+#include "ThePEG/EventRecord/SubProcess.h"
+#include "ThePEG/Handlers/XComb.h"
+#include "ThePEG/Handlers/EventHandler.h"
+#include "ThePEG/PDF/PartonExtractor.h"
+#include "ThePEG/PDF/PDF.h"
+
+using namespace Herwig;
+
+void QuickVBFHadron::analyze(tEventPtr event, long ieve, int loop, int state) {
+ AnalysisHandler::analyze(event, ieve, loop, state);
+ // Rotate to CMS, extract final state particles and call analyze(particles).
+ tPVector part = event->getFinalState();
+ Lorentz5Momentum pjj;
+ Energy2 mHsq(ZERO);
+ for(tPVector::const_iterator iter = part.begin(), end = part.end();
+ iter!=end;++iter) {
+ if((**iter).id()==ParticleID::h0) {
+ *_mH += (**iter).momentum().m()/GeV;
+ mHsq=(**iter).momentum().m2();
+ *_yH += (**iter).momentum().rapidity();
+ *_phiH += (**iter).momentum().phi()+Constants::pi;
+ *_pTH[0] += (**iter).momentum().perp()/GeV;
+ *_pTH[1] += (**iter).momentum().perp()/GeV;
+ }
+ else if((**iter).id()!=82) {
+ *_yjet += (**iter).momentum().rapidity();
+ *_phijet += (**iter).momentum().phi()+Constants::pi;
+ *_pTjet[0] += (**iter).momentum().perp()/GeV;
+ *_pTjet[1] += (**iter).momentum().perp()/GeV;
+ pjj+=(**iter).momentum();
+ }
+ }
+ *_mjj += pjj.m()/GeV;
+
+ if (!_doOnce) {
+ // Find the pdf information
+ tSubProPtr sub = event->primarySubProcess();
+ // get the event handler
+ tcEHPtr eh = dynamic_ptr_cast<tcEHPtr>(event->handler());
+ // get the pdfs
+ pair<PDF,PDF> pdfs;
+ pdfs.first = eh->pdf<PDF>(sub->incoming().first );
+ pdfs.second = eh->pdf<PDF>(sub->incoming().second);
+ // Make a semi-analytical prediction of the convolution over pdfs
+ const double num=1e7;
+ double allsum[14][14];
+ double allsqr[14][14];
+ for (int j=0; j<=13 ; ++j) {
+ for (int k=0; k<=13 ; ++k) {
+ allsum[j][k]=0;
+ allsqr[j][k]=0;
+ }
+ }
+ double zzsum=0;
+ double zzsqr=0;
+ double wwsum=0;
+ double wwsqr=0;
+ Energy2 scale=mHsq;
+ Energy2 s=event->primaryCollision()->m2();
+ cerr << "Starting semi-analytical calculation. Higgs mass/GeV=" <<
+ sqrt(mHsq)/GeV << ", sqrt(s)/GeV=" << sqrt(s)/GeV << "\n";
+ double tmin=mHsq/s;
+ double tlmin=log(tmin);
+ for (int i=0 ; i<int(num+0.5) ; ++i) {
+ double xxmin=exp(tlmin*UseRandom::rnd());
+ double xlmin=log(xxmin);
+ double x1=exp(xlmin*UseRandom::rnd());
+ double x2=xxmin/x1;
+ // out of laziness, just don't use the 0'th elements, to be like fortran
+ double disf[14][3];
+ for (int j=1 ; j<=13; ++j) {
+ for (int k=1 ; k<=2 ; ++k) {
+ disf[j][k]=0;
+ }
+ }
+ for (int j=1 ; j<=6 ; ++j) {
+ disf[j][1]=pdfs.first .xfx((tcPDPtr)getParticleData(j),scale,x1);
+ disf[j+6][1]=pdfs.first .xfx((tcPDPtr)getParticleData(-j),scale,x1);
+ }
+ disf[13][1]=pdfs.first .xfx((tcPDPtr)getParticleData(21),scale,x1);
+ for (int j=1 ; j<=6 ; ++j) {
+ disf[j][2]=pdfs.second.xfx((tcPDPtr)getParticleData(j),scale,x2);
+ disf[j+6][2]=pdfs.second.xfx((tcPDPtr)getParticleData(-j),scale,x2);
+ }
+ disf[13][2]=pdfs.second.xfx((tcPDPtr)getParticleData(21),scale,x2);
+ double w=tlmin*xlmin*
+ (disf[1][1]+disf[2][1]+disf[3][1]+disf[4][1]+
+ disf[7][1]+disf[8][1]+disf[9][1]+disf[10][1])*
+ (disf[1][2]+disf[2][2]+disf[3][2]+disf[4][2]+
+ disf[7][2]+disf[8][2]+disf[9][2]+disf[10][2]);
+ zzsum+=w;
+ zzsqr+=sqr(w);
+ w=tlmin*xlmin*
+ ((disf[1][1]+disf[3][1]+disf[8][1]+disf[10][1])*
+ (disf[2][2]+disf[4][2]+disf[7][2]+disf[9][2])+
+ (disf[2][1]+disf[4][1]+disf[7][1]+disf[9][1])*
+ (disf[1][2]+disf[3][2]+disf[8][2]+disf[10][2]));
+ // Extra factor because Hw++ test program sums over 4 Cabibbo possibilities
+ w*=4;
+ wwsum+=w;
+ wwsqr+=sqr(w);
+ for (int j=1; j<=13; ++j) {
+ for (int k=1; k<=13; ++k) {
+ w=tlmin*xlmin*disf[j][1]*disf[k][2];
+ allsum[j][k]+=w;
+ allsqr[j][k]+=sqr(w);
+ }
+ }
+ }
+ cerr << "Analytical result for ZZ=" << zzsum/num << "+-" << sqrt(zzsqr-sqr(zzsum)/num)/num << "\n";
+ cerr << "Analytical result for WW=" << wwsum/num << "+-" << sqrt(wwsqr-sqr(wwsum)/num)/num << "\n";
+ for (int j=1; j<=13; ++j) {
+ int idj=0;
+ if (j>=1&&j<=5) idj=j;
+ if (j>=7&&j<=11)idj=6-j;
+ if (idj!=0) {
+ for (int k=1; k<=13; ++k) {
+ int idk=0;
+ if (k>=1&&k<=5) idk=k;
+ if (k>=7&&k<=11)idk=6-k;
+ if (idk!=0 && allsum[j][k]>0) {
+ cerr << getParticleData(idj)->PDGName() << " " <<
+ getParticleData(idk)->PDGName() << "\t" <<
+ allsum[j][k]/num << "+-" << sqrt(allsqr[j][k]-sqr(allsum[j][k])/num)/num << "\n";
+ }
+ }
+ }
+ }
+ _doOnce=true;
+ }
+ /*
+ // ids of the partons going into the primary sub process
+ tSubProPtr sub = event->primarySubProcess();
+ int id1 = sub->incoming().first ->id();
+ int id2 = sub->incoming().second->id();
+ // get the event handler
+ tcEHPtr eh = dynamic_ptr_cast<tcEHPtr>(event->handler());
+ // get the values of x
+ double x1 = eh->lastX1();
+ double x2 = eh->lastX2();
+ // get the pdfs
+ pair<PDF,PDF> pdfs;
+ pdfs.first = eh->pdf<PDF>(sub->incoming().first );
+ pdfs.second = eh->pdf<PDF>(sub->incoming().second);
+ // get the scale
+ Energy2 scale = eh->lastScale();
+ // get the values of the pdfs
+ double pdf1 = pdfs.first .xfx(sub->incoming().first ->dataPtr(),scale,x1);
+ double pdf2 = pdfs.second.xfx(sub->incoming().second->dataPtr(),scale,x2);
+ // print them to cerr
+ if (x1<3e-4 || x2<3e-4) {
+ cerr << "The x values are:" << x1 << " " << x2 << "\n";
+ cerr << "The scale is:" << sqrt(scale)/GeV << " GeV \n";
+ cerr << "The parton ids are:" << id1 << " " << id2 << "\n";
+ cerr << "The pdfs are:" << pdf1 << " " << pdf2 << "\n\n";
+ }
+ for (int i=0;i<=100;++i) {
+ x1 = pow(10.0,4*(double(i)/100-1));
+ pdf1 = pdfs.first .xfx(sub->incoming().first ->dataPtr(),scale,x1);
+ cerr << x1 << " " << pdf1 << "\n";
+ }
+ */
+}
+
+bool QuickVBFHadron::_doOnce = false;
+
+IBPtr QuickVBFHadron::clone() const {
+ return new_ptr(*this);
+}
+
+IBPtr QuickVBFHadron::fullclone() const {
+ return new_ptr(*this);
+}
+
+NoPIOClassDescription<QuickVBFHadron> QuickVBFHadron::initQuickVBFHadron;
+// Definition of the static class description member.
+
+void QuickVBFHadron::Init() {
+
+ static ClassDocumentation<QuickVBFHadron> documentation
+ ("There is no documentation for the QuickVBFHadron class");
+
+}
+
+void QuickVBFHadron::dofinish() {
+ AnalysisHandler::dofinish();
+ string fname = generator()->filename() + string("-") + name() + string(".top");
+ ofstream outfile(fname.c_str());
+ using namespace HistogramOptions;
+ string title,species;
+ title = "mass of H";
+ _mH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "rapidity of H";
+ _yH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "pT of H";
+ _pTH[0]->topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
+ _pTH[1]->topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
+ title = "azimuth of H";
+ _phiH->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "rapidity of jet";
+ _yjet->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "pT of jet";
+ _pTjet[0]->topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
+ _pTjet[1]->topdrawOutput(outfile,Frame|Ylog,"BLACK",title);
+ title = "azimuth of jet";
+ _phijet->topdrawOutput(outfile,Frame,"BLACK",title);
+ title = "mjj";
+ _mjj->topdrawOutput(outfile,Frame,"BLACK",title);
+}
+
+void QuickVBFHadron::doinitrun() {
+ AnalysisHandler::doinitrun();
+ if(getParticleData(ParticleID::h0)->mass()>200.*GeV)
+ _mH = new_ptr(Histogram(200., 400.,200));
+ else
+ _mH = new_ptr(Histogram(114., 116.0,200));
+ _yH = new_ptr(Histogram( -10.0, 10.0,200));
+ _phiH = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _pTH[0] = new_ptr(Histogram( 0.0,1000.,1000));
+ _pTH[1] = new_ptr(Histogram( 0.0,1000.,100));
+ _yjet = new_ptr(Histogram( -10.0, 10.0,200));
+ _phijet = new_ptr(Histogram( 0.0,2.0*Constants::pi,200));
+ _pTjet[0] = new_ptr(Histogram( 0.0,1000.,1000));
+ _pTjet[1] = new_ptr(Histogram( 0.0,1000.,100));
+ _mjj = new_ptr(Histogram(0.0,200.,100));
+}
diff --git a/Contrib/VBFTest/QuickVBFHadron.h b/Contrib/VBFTest/QuickVBFHadron.h
new file mode 100644
--- /dev/null
+++ b/Contrib/VBFTest/QuickVBFHadron.h
@@ -0,0 +1,152 @@
+// -*- C++ -*-
+#ifndef HERWIG_QuickVBFHadron_H
+#define HERWIG_QuickVBFHadron_H
+//
+// This is the declaration of the QuickVBFHadron class.
+//
+
+#include "ThePEG/Handlers/AnalysisHandler.h"
+#include "Herwig++/Utilities/Histogram.h"
+
+namespace Herwig {
+
+using namespace ThePEG;
+
+/**
+ * Here is the documentation of the QuickVBFHadron class.
+ *
+ * @see \ref QuickVBFHadronInterfaces "The interfaces"
+ * defined for QuickVBFHadron.
+ */
+class QuickVBFHadron: public AnalysisHandler {
+
+public:
+
+ /** @name Virtual functions required by the AnalysisHandler class. */
+ //@{
+ /**
+ * Analyze a given Event. Note that a fully generated event
+ * may be presented several times, if it has been manipulated in
+ * between. The default version of this function will call transform
+ * to make a lorentz transformation of the whole event, then extract
+ * all final state particles and call analyze(tPVector) of this
+ * analysis object and those of all associated analysis objects. The
+ * default version will not, however, do anything on events which
+ * have not been fully generated, or have been manipulated in any
+ * way.
+ * @param event pointer to the Event to be analyzed.
+ * @param ieve the event number.
+ * @param loop the number of times this event has been presented.
+ * If negative the event is now fully generated.
+ * @param state a number different from zero if the event has been
+ * manipulated in some way since it was last presented.
+ */
+ virtual void analyze(tEventPtr event, long ieve, int loop, int state);
+ //@}
+
+public:
+
+ /**
+ * The standard Init function used to initialize the interfaces.
+ * Called exactly once for each class by the class description system
+ * before the main function starts or
+ * when this class is dynamically loaded.
+ */
+ static void Init();
+
+protected:
+
+ /** @name Clone Methods. */
+ //@{
+ /**
+ * Make a simple clone of this object.
+ * @return a pointer to the new object.
+ */
+ virtual IBPtr clone() const;
+
+ /** Make a clone of this object, possibly modifying the cloned object
+ * to make it sane.
+ * @return a pointer to the new object.
+ */
+ virtual IBPtr fullclone() const;
+ //@}
+
+protected:
+
+ /** @name Standard Interfaced functions. */
+ //@{
+ /**
+ * Initialize this object. Called in the run phase just before
+ * a run begins.
+ */
+ virtual void doinitrun();
+
+ /**
+ * Finalize this object. Called in the run phase just after a
+ * run has ended. Used eg. to write out statistics.
+ */
+ virtual void dofinish();
+ //@}
+
+private:
+
+ /**
+ * The static object used to initialize the description of this class.
+ * Indicates that this is an concrete class without persistent data.
+ */
+ static NoPIOClassDescription<QuickVBFHadron> initQuickVBFHadron;
+
+ /**
+ * The assignment operator is private and must never be called.
+ * In fact, it should not even be implemented.
+ */
+ QuickVBFHadron & operator=(const QuickVBFHadron &);
+
+private:
+
+ HistogramPtr _mH ,_yH ,_pTH[2] ,_phiH ;
+ HistogramPtr _yjet,_pTjet[2],_phijet;
+ HistogramPtr _mjj;
+
+ static bool _doOnce;
+
+};
+
+}
+
+#include "ThePEG/Utilities/ClassTraits.h"
+
+namespace ThePEG {
+
+/** @cond TRAITSPECIALIZATIONS */
+
+/** This template specialization informs ThePEG about the
+ * base classes of QuickVBFHadron. */
+template <>
+struct BaseClassTrait<Herwig::QuickVBFHadron,1> {
+ /** Typedef of the first base class of QuickVBFHadron. */
+ typedef AnalysisHandler NthBase;
+};
+
+/** This template specialization informs ThePEG about the name of
+ * the QuickVBFHadron class and the shared object where it is defined. */
+template <>
+struct ClassTraits<Herwig::QuickVBFHadron>
+ : public ClassTraitsBase<Herwig::QuickVBFHadron> {
+ /** Return a platform-independent class name */
+ static string className() { return "Herwig::QuickVBFHadron"; }
+ /**
+ * The name of a file containing the dynamic library where the class
+ * QuickVBFHadron is implemented. It may also include several, space-separated,
+ * libraries if the class QuickVBFHadron depends on other classes (base classes
+ * excepted). In this case the listed libraries will be dynamically
+ * linked in the order they are specified.
+ */
+ static string library() { return "QuickVBFHadron.so"; }
+};
+
+/** @endcond */
+
+}
+
+#endif /* HERWIG_QuickVBFHadron_H */
diff --git a/MatrixElement/Hadron/MEPP2GammaJet.cc b/MatrixElement/Hadron/MEPP2GammaJet.cc
--- a/MatrixElement/Hadron/MEPP2GammaJet.cc
+++ b/MatrixElement/Hadron/MEPP2GammaJet.cc
@@ -1,526 +1,526 @@
// -*- C++ -*-
//
// MEPP2GammaJet.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2011 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 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 MEPP2GammaJet class.
//
#include "MEPP2GammaJet.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "Herwig++/Models/StandardModel/StandardModel.h"
#include "ThePEG/Utilities/SimplePhaseSpace.h"
#include "ThePEG/Handlers/StandardXComb.h"
#include "Herwig++/MatrixElement/HardVertex.h"
#include "ThePEG/Cuts/Cuts.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/MatrixElement/Tree2toNDiagram.h"
using namespace Herwig;
MEPP2GammaJet::MEPP2GammaJet() : _maxflavour(5), _processopt(0) {
massOption(vector<unsigned int>(2,0));
}
void MEPP2GammaJet::rebind(const TranslationMap & trans)
{
// dummy = trans.translate(dummy);
HwMEBase::rebind(trans);
_gluonvertex =trans.translate(_gluonvertex );
_photonvertex=trans.translate(_photonvertex);
}
IVector MEPP2GammaJet::getReferences() {
IVector ret = HwMEBase::getReferences();
ret.push_back(_gluonvertex);
ret.push_back(_photonvertex);
return ret;
}
void MEPP2GammaJet::doinit() {
// get the vedrtex pointers from the SM object
tcHwSMPtr hwsm= dynamic_ptr_cast<tcHwSMPtr>(standardModel());
// do the initialisation
if(hwsm) {
_gluonvertex = hwsm->vertexFFG();
_photonvertex = hwsm->vertexFFP();
}
else throw InitException() << "Wrong type of StandardModel object in "
<< "MEPP2GammaJet::doinit() the Herwig++"
<< " version must be used"
<< Exception::runerror;
// call the base class
HwMEBase::doinit();
}
void MEPP2GammaJet::getDiagrams() const {
// need the gluon and the photon in all processes
tcPDPtr g = getParticleData(ParticleID::g);
tcPDPtr p = getParticleData(ParticleID::gamma);
// for each quark species there are three subprocesses
for ( int iq=1; iq<=_maxflavour; ++iq ) {
tcPDPtr q = getParticleData(iq);
tcPDPtr qb = q->CC();
// q qbar to gamma gluon (two diagrams)
if(_processopt==0||_processopt==1) {
add(new_ptr((Tree2toNDiagram(3), q, qb, qb, 1, p, 2, g, -1)));
add(new_ptr((Tree2toNDiagram(3), q, q, qb, 2, p, 1, g, -2)));
}
// q gluon to gamma q (two diagrams)
if(_processopt==0||_processopt==2) {
add(new_ptr((Tree2toNDiagram(3), q, q, g, 1, p, 2, q, -3)));
add(new_ptr((Tree2toNDiagram(2), q, g, 1, q , 3, p, 3, q, -4)));
}
// qbar gluon to gamma qbar (two diagrams)
if(_processopt==0||_processopt==3) {
add(new_ptr((Tree2toNDiagram(3), qb, qb, g, 1, p, 2, qb, -5)));
add(new_ptr((Tree2toNDiagram(2), qb, g, 1, qb , 3, p, 3, qb, -6)));
}
}
}
unsigned int MEPP2GammaJet::orderInAlphaS() const {
return 1;
}
unsigned int MEPP2GammaJet::orderInAlphaEW() const {
return 1;
}
Energy2 MEPP2GammaJet::scale() const {
Energy2 s(sHat()),u(uHat()),t(tHat());
return 2.*s*t*u/(s*s+t*t+u*u);
}
Selector<MEBase::DiagramIndex>
MEPP2GammaJet::diagrams(const DiagramVector & diags) const {
// This example corresponds to the diagrams specified in the example
// in the getDiagrams() function.
double diag1(0.5),diag2(0.5);
diag1 = meInfo()[0];
diag2 = meInfo()[1];
Selector<DiagramIndex> sel;
for ( DiagramIndex i = 0; i < diags.size(); ++i ) {
if ( abs(diags[i]->id())%2 == 1 ) sel.insert(diag1, i);
else sel.insert(diag2, i);
}
return sel;
}
void MEPP2GammaJet::persistentOutput(PersistentOStream & os) const {
os << _gluonvertex << _photonvertex << _maxflavour << _processopt;
}
void MEPP2GammaJet::persistentInput(PersistentIStream & is, int) {
is >> _gluonvertex >> _photonvertex >> _maxflavour >> _processopt;
}
ClassDescription<MEPP2GammaJet> MEPP2GammaJet::initMEPP2GammaJet;
// Definition of the static class description member.
void MEPP2GammaJet::Init() {
static ClassDocumentation<MEPP2GammaJet> documentation
("The MEPP2GammaJet class implements the matrix element for"
" hadron-hadron to photon+jet");
static Parameter<MEPP2GammaJet,int> interfaceMaximumFlavour
("MaximumFlavour",
"The maximum flavour of the quarks in the process",
&MEPP2GammaJet::_maxflavour, 5, 1, 5,
false, false, Interface::limited);
static Switch<MEPP2GammaJet,unsigned int> interfaceProcesses
("Process",
"Subprocesses to include",
&MEPP2GammaJet::_processopt, 0, false, false);
static SwitchOption interfaceProcessesAll
(interfaceProcesses,
"All",
"Include all the subprocesses",
0);
static SwitchOption interfaceProcessesqqbar
(interfaceProcesses,
"qqbar",
"Only include the incoming q qbar subprocess",
1);
static SwitchOption interfaceProcessesqg
(interfaceProcesses,
"qg",
"Only include the incoming q g subprocess",
2);
static SwitchOption interfaceProcessesqbarg
(interfaceProcesses,
"qbarg",
"Only include the incoming qbar g subprocess",
3);
}
Selector<const ColourLines *>
MEPP2GammaJet::colourGeometries(tcDiagPtr diag) const {
// q qbar to gamma gluon colour lines
static const ColourLines qqbar1("1 5, -5 -2 -3");
static const ColourLines qqbar2("1 2 5, -5 -3");
// q gluon to gamma q colour lines
static const ColourLines qg1("1 2 -3, 3 5");
static const ColourLines qg2("1 -2, 2 3 5");
// qbar gluon to gamma qbar lines
static const ColourLines qbarg1("-1 -2 3, -3 -5");
static const ColourLines qbarg2("-1 2, -2 -3 -5");
// only one flow per diagram so insert the right one
Selector<const ColourLines *> sel;
switch (diag->id()) {
case -1 :
sel.insert(1.0, &qqbar1);
break;
case -2 :
sel.insert(1.0, &qqbar2);
break;
case -3 :
sel.insert(1.0, &qg1);
break;
case -4 :
sel.insert(1.0, &qg2);
break;
case -5 :
sel.insert(1.0, &qbarg1);
break;
case -6 :
sel.insert(1.0, &qbarg2);
break;
}
return sel;
}
double MEPP2GammaJet::me2() const {
// total matrix element and the various components
double me(0.);
// first case, q qbar to gluon photon
if(mePartonData()[0]->id()==-mePartonData()[1]->id()) {
// order of the particles
unsigned int iq(1),iqb(0),ip(3),ig(2);
if(mePartonData()[0]->id()>0) swap(iq,iqb);
if(mePartonData()[3]->id()==ParticleID::g) swap(ig, ip);
// calculate the spinors and polarization vectors
vector<SpinorWaveFunction> fin;
vector<SpinorBarWaveFunction> ain;
vector<VectorWaveFunction> pout,gout;
SpinorWaveFunction qin (meMomenta()[iq ],mePartonData()[iq ],incoming);
SpinorBarWaveFunction qbin(meMomenta()[iqb],mePartonData()[iqb],incoming);
VectorWaveFunction glout(meMomenta()[ig ],mePartonData()[ig ],outgoing);
VectorWaveFunction phout(meMomenta()[ip ],mePartonData()[ip ],outgoing);
for(unsigned int ix=0;ix<2;++ix) {
qin.reset(ix) ; fin.push_back( qin );
qbin.reset(ix) ; ain.push_back( qbin);
glout.reset(2*ix);gout.push_back(glout);
phout.reset(2*ix);pout.push_back(phout);
}
// calculate the matrix element
me = qqbarME(fin,ain,gout,pout,false)/9.;
// Energy2 mt(scale());
-// double coupling=sqr(4.*pi)*SM().alphaEM(0.)*SM().alphaS(mt)*
-// sqr(mePartonData()[0]->charge());
+// double coupling=sqr(4.*Constants::pi)*SM().alphaEM(ZERO)*SM().alphaS(mt)*
+// sqr(mePartonData()[0]->iCharge()/3.);
// Energy2 t(tHat()),u(uHat());
// double me2=8./9./u/t*(t*t+u*u)*coupling;
// cerr << "testing matrix element A"
// << me << " "
// << me2 << " " << me/me2
// << endl;
}
else if(mePartonData()[0]->id()>0&&mePartonData()[1]->id()) {
// order of the particles
unsigned int iqin(0),iqout(2),ip(3),ig(1);
if(mePartonData()[0]->id()==ParticleID::g ) swap(iqin,ig);
if(mePartonData()[2]->id()==ParticleID::gamma) swap(ip,iqout);
// calculate the spinors and polarization vectors
vector<SpinorWaveFunction> fin;
vector<SpinorBarWaveFunction> fout;
vector<VectorWaveFunction> pout,gin;
SpinorWaveFunction qin (meMomenta()[iqin ],mePartonData()[iqin ],incoming);
SpinorBarWaveFunction qout(meMomenta()[iqout],mePartonData()[iqout],outgoing);
VectorWaveFunction glin(meMomenta()[ig ],mePartonData()[ig ],incoming);
VectorWaveFunction phout(meMomenta()[ip ],mePartonData()[ip ],outgoing);
for(unsigned int ix=0;ix<2;++ix) {
qin.reset(ix) ;fin.push_back( qin );
qout.reset(ix) ;fout.push_back( qout);
glin.reset(2*ix) ;gin.push_back( glin);
phout.reset(2*ix);pout.push_back(phout);
}
// calculate the matrix element
me = qgME(fin,gin,pout,fout,false)/24.;
// Energy2 mt(scale());
-// double coupling=sqr(4.*pi)*SM().alphaEM(0.)*SM().alphaS(mt);
+// double coupling=sqr(4.*Constants::pi)*SM().alphaEM(ZERO)*SM().alphaS(mt);
// Energy2 s(sHat()),t(tHat()),u(uHat());
// double me2=-1./3./s/t*(s*s+t*t+2.*u*(s+t+u))*coupling*
-// sqr(mePartonData()[0]->charge());
+// sqr(mePartonData()[0]->iCharge()/3.);
// cerr << "testing matrix element B"
// << me << " "
// << me2 << " " << me/me2
// << endl;
}
else {
// order of the particles
unsigned int iqin(0),iqout(2),ip(3),ig(1);
if(mePartonData()[0]->id()==ParticleID::g ) swap(iqin,ig);
if(mePartonData()[2]->id()==ParticleID::gamma) swap(ip,iqout);
// calculate the spinors and polarization vectors
vector<SpinorBarWaveFunction> ain;
vector<SpinorWaveFunction> aout;
vector<VectorWaveFunction> pout,gin;
SpinorBarWaveFunction qin (meMomenta()[iqin ],mePartonData()[iqin ],incoming);
SpinorWaveFunction qout(meMomenta()[iqout],mePartonData()[iqout],outgoing);
VectorWaveFunction glin(meMomenta()[ig ],mePartonData()[ig ],incoming);
VectorWaveFunction phout(meMomenta()[ip ],mePartonData()[ip ],outgoing);
for(unsigned int ix=0;ix<2;++ix) {
qin.reset(ix) ;ain.push_back( qin );
qout.reset(ix) ;aout.push_back( qout);
glin.reset(2*ix) ;gin.push_back( glin);
phout.reset(2*ix);pout.push_back(phout);
}
// calculate the matrix element
me=qbargME(ain,gin,pout,aout,false)/24.;
// Energy2 mt(scale());
-// double coupling=sqr(4.*pi)*SM().alphaEM(0.)*SM().alphaS(mt);
+// double coupling=sqr(4.*Constants::pi)*SM().alphaEM(ZERO)*SM().alphaS(mt);
// Energy2 s(sHat()),t(tHat()),u(uHat());
// double me2=-1./3./s/t*(s*s+t*t+2.*u*(s+t+u))*coupling*
-// sqr(mePartonData()[0]->charge());
+// sqr(mePartonData()[0]->iCharge()/3.);
// cerr << "testing matrix element C"
// << me << " "
// << me2 << " " << me/me2
// << endl;
}
return me;
}
double MEPP2GammaJet::qqbarME(vector<SpinorWaveFunction> & fin,
vector<SpinorBarWaveFunction> & ain,
vector<VectorWaveFunction> & gout,
vector<VectorWaveFunction> & pout,
bool calc) const {
// the particles should be in the order
// for the incoming
// 0 incoming fermion (u spinor)
// 1 incoming antifermion (vbar spinor)
// for the outgoing
// 0 outgoing gluon
// 1 outgoing photon
// me to be returned
ProductionMatrixElement newme(PDT::Spin1Half,PDT::Spin1Half,
PDT::Spin1,PDT::Spin1);
// wavefunction for the intermediate particles
SpinorWaveFunction inter;
unsigned int inhel1,inhel2,outhel1,outhel2;
Energy2 mt(scale());
Complex diag[3];
double me(0.),diag1(0.),diag2(0.);
for(inhel1=0;inhel1<2;++inhel1) {
for(inhel2=0;inhel2<2;++inhel2) {
for(outhel1=0;outhel1<2;++outhel1) {
for(outhel2=0;outhel2<2;++outhel2) {
// first diagram
inter = _gluonvertex->evaluate(mt,5,fin[inhel1].particle()->CC(),
fin[inhel1],gout[outhel1]);
diag[0] = _photonvertex->evaluate(ZERO,inter,ain[inhel2],pout[outhel2]);
// second diagram
inter = _photonvertex->evaluate(ZERO,5,fin[inhel1].particle()->CC(),
fin[inhel1],pout[outhel2]);
diag[1] = _gluonvertex->evaluate(mt,inter,ain[inhel2],gout[outhel1]);
// compute the running totals
diag[2]=diag[0]+diag[1];
diag1 +=norm(diag[0]);
diag2 +=norm(diag[1]);
me +=norm(diag[2]);
// matrix element
if(calc) newme(inhel1,inhel2,2*outhel1,2*outhel2)=diag[2];
}
}
}
}
// save the info on the diagrams
if(!calc) {
DVector save;
save.push_back(diag1);
save.push_back(diag2);
meInfo(save);
}
// return the answer
if(calc) _me.reset(newme);
return me;
}
double MEPP2GammaJet::qgME(vector<SpinorWaveFunction> & fin,
vector<VectorWaveFunction> & gin,
vector<VectorWaveFunction> & pout,
vector<SpinorBarWaveFunction> & fout,
bool calc) const {
// the particles should be in the order
// for the incoming
// 0 incoming fermion (u spinor)
// 1 incoming gluon
// for the outgoing
// 0 outgoing photon
// 1 outgoing fermion (ubar spinor)
// me to be returned
ProductionMatrixElement newme(PDT::Spin1Half,PDT::Spin1,
PDT::Spin1,PDT::Spin1Half);
// wavefunction for the intermediate particles
SpinorWaveFunction inter;
unsigned int inhel1,inhel2,outhel1,outhel2;
Energy2 mt(scale());
Complex diag[3];
double me(0.),diag1(0.),diag2(0.);
for(inhel1=0;inhel1<2;++inhel1) {
for(inhel2=0;inhel2<2;++inhel2) {
for(outhel1=0;outhel1<2;++outhel1) {
for(outhel2=0;outhel2<2;++outhel2) {
// first diagram
inter = _photonvertex->evaluate(ZERO,5,fin[inhel1].particle()->CC(),
fin[inhel1],pout[outhel1]);
diag[0]=_gluonvertex->evaluate(mt,inter,fout[outhel2],gin[inhel2]);
// second diagram
inter = _gluonvertex->evaluate(mt,5,fin[inhel1].particle()->CC(),
fin[inhel1],gin[inhel2]);
diag[1]=_photonvertex->evaluate(ZERO,inter,fout[outhel2],pout[outhel1]);
// compute the running totals
diag[2]=diag[0]+diag[1];
diag1 +=norm(diag[0]);
diag2 +=norm(diag[1]);
me +=norm(diag[2]);
// matrix element
if(calc) newme(inhel1,2*inhel2,2*outhel1,outhel2)=diag[2];
}
}
}
}
// save the info on the diagrams
if(!calc) {
DVector save;
save.push_back(diag1);
save.push_back(diag2);
meInfo(save);
}
// return the answer
if(calc) _me.reset(newme);
return me;
}
double MEPP2GammaJet::qbargME(vector<SpinorBarWaveFunction> & ain,
vector<VectorWaveFunction> & gin,
vector<VectorWaveFunction> & pout,
vector<SpinorWaveFunction> & aout,
bool calc) const {
// the particles should be in the order
// for the incoming
// 0 incoming fermion (vbar spinor)
// 1 incoming gluon
// for the outgoing
// 0 outgoing photon
// 1 outgoing fermion (v spinor)
//me to be returned
ProductionMatrixElement newme(PDT::Spin1Half,PDT::Spin1,
PDT::Spin1,PDT::Spin1Half);
// wavefunction for the intermediate particles
SpinorBarWaveFunction inter;
SpinorWaveFunction interb;
unsigned int inhel1,inhel2,outhel1,outhel2;
Energy2 mt(scale());
Complex diag[3];
double me(0.),diag1(0.),diag2(0.);
for(inhel1=0;inhel1<2;++inhel1) {
for(inhel2=0;inhel2<2;++inhel2) {
for(outhel1=0;outhel1<2;++outhel1) {
for(outhel2=0;outhel2<2;++outhel2) {
// first diagram
inter = _photonvertex->evaluate(ZERO,5,ain[inhel1].particle()->CC(),
ain[inhel1],pout[outhel1]);
diag[0]=_gluonvertex->evaluate(mt,aout[outhel2],inter,gin[inhel2]);
// second diagram
inter = _gluonvertex->evaluate(mt,5,ain[inhel1].particle()->CC(),
ain[inhel1],gin[inhel2]);
diag[1]=_photonvertex->evaluate(ZERO,aout[outhel2],inter,pout[outhel1]);
// compute the running totals
diag[2]=diag[0]+diag[1];
diag1 +=norm(diag[0]);
diag2 +=norm(diag[1]);
me +=norm(diag[2]);
// matrix element
if(calc) newme(inhel1,2*inhel2,2*outhel1,outhel2)=diag[2];
}
}
}
}
// save the info on the diagrams
if(!calc) {
DVector save;
save.push_back(diag1);
save.push_back(diag2);
meInfo(save);
}
// return the answer
if(calc) _me.reset(newme);
return me;
}
void MEPP2GammaJet::constructVertex(tSubProPtr sub) {
// extract the particles in the hard process
ParticleVector hard;
hard.push_back(sub->incoming().first);hard.push_back(sub->incoming().second);
hard.push_back(sub->outgoing()[0]);hard.push_back(sub->outgoing()[1]);
// order of particles
unsigned int order[4]={0,1,2,3};
// identify the process and calculate matrix element
if(hard[0]->id()==ParticleID::g||hard[1]->id()==ParticleID::g) {
if(hard[0]->id()==ParticleID::g ) swap(order[0],order[1]);
if(hard[3]->id()==ParticleID::gamma) swap(order[2],order[3]);
if(hard[order[0]]->id()>0) {
vector<SpinorWaveFunction> q;
vector<SpinorBarWaveFunction> qb;
vector<VectorWaveFunction> p,g;
SpinorWaveFunction (q ,hard[order[0]],incoming,false,true);
VectorWaveFunction (g ,hard[order[1]],incoming,false,true,true);
VectorWaveFunction (p ,hard[order[2]],outgoing,true ,true,true);
SpinorBarWaveFunction(qb,hard[order[3]],outgoing,true,true);
qgME(q,g,p,qb,true);
}
else {
vector<SpinorWaveFunction> q;
vector<SpinorBarWaveFunction> qb;
vector<VectorWaveFunction> p,g;
SpinorBarWaveFunction(qb,hard[order[0]],incoming,false,true);
VectorWaveFunction (g ,hard[order[1]],incoming,false,true,true);
VectorWaveFunction (p ,hard[order[2]],outgoing,true ,true,true);
SpinorWaveFunction (q ,hard[order[3]],outgoing,true,true);
qbargME(qb,g,p,q,true);
}
}
else {
if(hard[0]->id()<0) swap(order[0],order[1]);
if(hard[2]->id()==ParticleID::gamma) swap(order[2],order[3]);
vector<SpinorWaveFunction> q;
vector<SpinorBarWaveFunction> qb;
vector<VectorWaveFunction> p,g;
SpinorWaveFunction (q ,hard[order[0]],incoming,false,true);
SpinorBarWaveFunction(qb,hard[order[1]],incoming,false,true);
VectorWaveFunction (g ,hard[order[2]],outgoing,true ,true,true);
VectorWaveFunction (p ,hard[order[3]],outgoing,true ,true,true);
p[1]=p[2];g[1]=g[2];
qqbarME(q,qb,g,p,true);
}
// construct the vertex
HardVertexPtr hardvertex=new_ptr(HardVertex());
// set the matrix element for the vertex
hardvertex->ME(_me);
// set the pointers and to and from the vertex
for(unsigned int ix=0;ix<4;++ix)
hard[order[ix]]->spinInfo()->productionVertex(hardvertex);
}
diff --git a/MatrixElement/Matchbox/Base/MatchboxAmplitude.h b/MatrixElement/Matchbox/Base/MatchboxAmplitude.h
--- a/MatrixElement/Matchbox/Base/MatchboxAmplitude.h
+++ b/MatrixElement/Matchbox/Base/MatchboxAmplitude.h
@@ -1,571 +1,571 @@
// -*- C++ -*-
//
// MatchboxAmplitude.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2012 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_MatchboxAmplitude_H
#define HERWIG_MatchboxAmplitude_H
//
// This is the declaration of the MatchboxAmplitude class.
//
#include "ThePEG/MatrixElement/Amplitude.h"
#include "ThePEG/Handlers/LastXCombInfo.h"
#include "Herwig++/Models/StandardModel/StandardModel.h"
#include "Herwig++/MatrixElement/Matchbox/Utility/ColourBasis.h"
#include "Herwig++/MatrixElement/Matchbox/Utility/SpinCorrelationTensor.h"
namespace Herwig {
using namespace ThePEG;
class MatchboxMEBase;
/**
* \ingroup Matchbox
* \author Simon Platzer
*
* \brief MatchboxAmplitude is the base class for amplitude
* implementations inside Matchbox.
*
* @see \ref MatchboxAmplitudeInterfaces "The interfaces"
* defined for MatchboxAmplitude.
*/
class MatchboxAmplitude: public Amplitude, public LastXCombInfo<StandardXComb> {
public:
/** @name Standard constructors and destructors. */
//@{
/**
* The default constructor.
*/
MatchboxAmplitude();
/**
* The destructor.
*/
virtual ~MatchboxAmplitude();
//@}
public:
typedef map<vector<int>,CVector> AmplitudeMap;
typedef map<vector<int>,CVector>::iterator AmplitudeIterator;
typedef map<vector<int>,CVector>::const_iterator AmplitudeConstIterator;
/**
* Return the amplitude. Needs to be implemented from
* ThePEG::Amplitude but is actually ill-defined, as colours of the
* external particles are not specified. To this extent, this
* implementation just asserts.
*/
virtual Complex value(const tcPDVector & particles,
const vector<Lorentz5Momentum> & momenta,
const vector<int> & helicities);
/** @name Subprocess information */
//@{
/**
* Return true, if this amplitude can handle the given process.
*/
virtual bool canHandle(const PDVector&) const { return false; }
/**
* Return a ME instance appropriate for this amplitude and the given
* subprocesses
*/
- Ptr<MatchboxMEBase>::ptr makeME(const vector<PDVector>&) const;
+ virtual Ptr<MatchboxMEBase>::ptr makeME(const vector<PDVector>&) const;
/**
* Return the amplitude parton data.
*/
const cPDVector& lastAmplitudePartonData() const { return theLastAmplitudePartonData->second; }
/**
* Access the amplitude parton data.
*/
cPDVector& lastAmplitudePartonData() { return theLastAmplitudePartonData->second; }
/**
* Access the amplitude parton data.
*/
map<tStdXCombPtr,cPDVector>& amplitudePartonData() { return theAmplitudePartonData; }
/**
* Return the number of light flavours
*/
unsigned int nLight() const { return theNLight; }
/**
* Set the number of light flavours
*/
void nLight(unsigned int n) { theNLight = n; }
/**
* Set the (tree-level) order in \f$g_S\f$ in which this matrix
* element should be evaluated.
*/
virtual void orderInGs(unsigned int) {}
/**
* Return the (tree-level) order in \f$g_S\f$ in which this matrix
* element is given.
*/
virtual unsigned int orderInGs() const = 0;
/**
* Set the (tree-level) order in \f$g_{EM}\f$ in which this matrix
* element should be evaluated.
*/
virtual void orderInGem(unsigned int) {}
/**
* Return the (tree-level) order in \f$g_{EM}\f$ in which this matrix
* element is given.
*/
virtual unsigned int orderInGem() const = 0;
/**
* Return the Herwig++ StandardModel object
*/
Ptr<StandardModel>::tcptr standardModel() {
if ( !theStandardModel )
theStandardModel =
dynamic_ptr_cast<Ptr<StandardModel>::tcptr>(HandlerBase::standardModel());
return theStandardModel;
}
//@}
/** @name Colour basis. */
//@{
/**
* Return the colour basis.
*/
Ptr<ColourBasis>::tptr colourBasis() const { return theColourBasis; }
/**
* Set the colour basis dimensionality.
*/
void colourBasisDim(size_t dim) { theColourBasisDim = dim; }
/**
* Get the colour basis dimensionality.
*/
size_t colourBasisDim() const { return theColourBasisDim; }
/**
* Return true, if this amplitude will not require colour correlations.
*/
virtual bool noCorrelations() const { return !haveOneLoop(); }
/**
* Return true, if the colour basis is capable of assigning colour
* flows.
*/
virtual bool haveColourFlows() const {
return colourBasis() ? colourBasis()->haveColourFlows() : false;
}
/**
* Return a Selector with possible colour geometries for the selected
* diagram weighted by their relative probabilities.
*/
virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const {
return
haveColourFlows() ?
theColourBasis->colourGeometries(diag,lastLargeNAmplitudes()) :
Selector<const ColourLines *>();
}
/**
* Return the colour crossing information as filled by the last call to
* fillCrossingMap(...), mapping amplitude ids to colour basis ids.
*/
const map<size_t,size_t>& lastColourMap() const { return theLastColourMap->second; }
/**
* Access the colour crossing information.
*/
map<size_t,size_t>& lastColourMap() { return theLastColourMap->second; }
/**
* Access the colour crossing information.
*/
map<tStdXCombPtr,map<size_t,size_t> >& colourMap() { return theColourMap; }
//@}
/** @name Phasespace point, crossing and helicities */
//@{
/**
* Set the xcomb object.
*/
virtual void setXComb(tStdXCombPtr xc) {
theLastXComb = xc;
fillCrossingMap();
}
/**
* Return the momentum as crossed appropriate for this amplitude.
*/
Lorentz5Momentum amplitudeMomentum(int) const;
/**
* Perform a normal ordering of external legs and fill the
* crossing information as. This default implementation sorts
* lexicographically in (abs(colour)/spin/abs(charge)), putting pairs
* of particles/anti-particles where possible.
*/
virtual void fillCrossingMap(size_t shift = 0);
/**
* Return the crossing sign.
*/
double lastCrossingSign() const { return theLastCrossingSign; }
/**
* Set the crossing sign.
*/
void lastCrossingSign(double s) { theLastCrossingSign = s; }
/**
* Return the crossing information as filled by the last call to
* fillCrossingMap(...), mapping amplitude ids to process ids.
*/
const vector<int>& lastCrossingMap() const { return theLastCrossingMap->second; }
/**
* Access the crossing information.
*/
vector<int>& lastCrossingMap() { return theLastCrossingMap->second; }
/**
* Access the crossing information.
*/
map<tStdXCombPtr,vector<int> >& crossingMap() { return theCrossingMap; }
/**
* Access the crossing signs.
*/
map<tStdXCombPtr,double>& crossingSigns() { return theCrossingSigns; }
/**
* Generate the helicity combinations.
*/
virtual set<vector<int> > generateHelicities() const;
//@}
/** @name Tree-level amplitudes */
//@{
/**
* Calculate the tree level amplitudes for the phasespace point
* stored in lastXComb.
*/
virtual void prepareAmplitudes();
/**
* Return last evaluated helicity amplitudes.
*/
const AmplitudeMap& lastAmplitudes() const { return theLastAmplitudes; }
/**
* Access the last evaluated helicity amplitudes.
*/
AmplitudeMap& lastAmplitudes() { return theLastAmplitudes; }
/**
* Return last evaluated, leading colour helicity amplitudes.
*/
const AmplitudeMap& lastLargeNAmplitudes() const { return theLastLargeNAmplitudes; }
/**
* Access the last evaluated, leading colour helicity amplitudes.
*/
AmplitudeMap& lastLargeNAmplitudes() { return theLastLargeNAmplitudes; }
/**
* Return the matrix element squared.
*/
virtual double me2() const {
return
lastCrossingSign()*colourBasis()->me2(mePartonData(),lastAmplitudes());
}
/**
* Return the colour correlated matrix element.
*/
virtual double colourCorrelatedME2(pair<int,int> ij) const;
/**
* Return the colour and spin correlated matrix element.
*/
virtual double spinColourCorrelatedME2(pair<int,int> emitterSpectator,
const SpinCorrelationTensor& c) const;
/**
* Evaluate the amplitude for the given colour tensor id and
* helicity assignment
*/
virtual Complex evaluate(size_t, const vector<int>&, Complex&) { return 0.; }
//@}
/** @name One-loop amplitudes */
//@{
/**
* Return true, if this amplitude is capable of calculating one-loop
* (QCD) corrections.
*/
virtual bool haveOneLoop() const { return false; }
/**
* Return true, if this amplitude only provides
* one-loop (QCD) corrections.
*/
virtual bool onlyOneLoop() const { return false; }
/**
* Return true, if one loop corrections have been calculated in
* dimensional reduction. Otherwise conventional dimensional
* regularization is assumed. Note that renormalization is always
* assumed to be MSbar.
*/
bool isDR() const { return false; }
/**
* Return true, if one loop corrections are given in the conventions
* of the integrated dipoles.
*/
bool isCS() const { return false; }
/**
* Return the value of the dimensional regularization
* parameter. Note that renormalization scale dependence is fully
* restored in DipoleIOperator.
*/
virtual Energy2 mu2() const { return 0.*GeV2; }
/**
* Calculate the one-loop amplitudes for the phasespace point
* stored in lastXComb, if provided.
*/
virtual void prepareOneLoopAmplitudes();
/**
* Return last evaluated one-loop helicity amplitudes.
*/
const AmplitudeMap& lastOneLoopAmplitudes() const { return theLastOneLoopAmplitudes; }
/**
* Access the last evaluated one-loop helicity amplitudes.
*/
AmplitudeMap& lastOneLoopAmplitudes() { return theLastOneLoopAmplitudes; }
/**
* Return the one-loop/tree interference.
*/
virtual double oneLoopInterference() const {
return
lastCrossingSign()*colourBasis()->interference(mePartonData(),
lastOneLoopAmplitudes(),lastAmplitudes());
}
/**
* Evaluate the amplitude for the given colour tensor id and
* helicity assignment
*/
virtual Complex evaluateOneLoop(size_t, const vector<int>&) { return 0.; }
//@}
/** @name Caching and helpers to setup amplitude objects. */
//@{
/**
* Flush all cashes.
*/
virtual void flushCaches() {
calculateTrees = true;
calculateLoops = true;
}
/**
* Clone this amplitude.
*/
Ptr<MatchboxAmplitude>::ptr cloneMe() const {
return dynamic_ptr_cast<Ptr<MatchboxAmplitude>::ptr>(clone());
}
/**
* Clone the dependencies, using a given prefix.
*/
virtual void cloneDependencies(const std::string& prefix = "");
//@}
/** @name Diagnostic information */
//@{
/**
* Dump xcomb hierarchies.
*/
void dumpInfo(const string& prefix = "") const;
//@}
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
// If needed, insert declarations of virtual function defined in the
// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
private:
/**
* Recursively generate helicities
*/
void doGenerateHelicities(set<vector<int> >& res,
vector<int>& current,
size_t pos) const;
/**
* The Herwig++ StandardModel object
*/
Ptr<StandardModel>::tcptr theStandardModel;
/**
* The number of light flavours to be used.
*/
unsigned int theNLight;
/**
* The colour basis implementation to be used.
*/
Ptr<ColourBasis>::ptr theColourBasis;
/**
* The dimensionality of the colour basis for the processes covered
* by the colour basis.
*/
size_t theColourBasisDim;
/**
* References to the amplitude values which have been contributing
* to the last call of prepareAmplitudes.
*/
map<vector<int>,CVector> theLastAmplitudes;
/**
* References to the leading N amplitude values which have been
* contributing to the last call of prepareAmplitudes.
*/
map<vector<int>,CVector> theLastLargeNAmplitudes;
/**
* References to the one-loop amplitude values which have been contributing
* to the last call of prepareAmplitudes.
*/
map<vector<int>,CVector> theLastOneLoopAmplitudes;
/**
* The crossing information as filled by the last call to
* fillCrossingMap()
*/
map<tStdXCombPtr,vector<int> > theCrossingMap;
/**
* The colour crossing information as filled by the last call to
* fillCrossingMap()
*/
map<tStdXCombPtr,map<size_t,size_t> > theColourMap;
/**
* The crossing signs as filled by the last call to
* fillCrossingMap()
*/
map<tStdXCombPtr,double> theCrossingSigns;
/**
* The amplitude parton data.
*/
map<tStdXCombPtr,cPDVector> theAmplitudePartonData;
/**
* The crossing information as filled by the last call to
* fillCrossingMap()
*/
map<tStdXCombPtr,vector<int> >::iterator theLastCrossingMap;
/**
* The colour crossing information as filled by the last call to
* fillCrossingMap()
*/
map<tStdXCombPtr,map<size_t,size_t> >::iterator theLastColourMap;
/**
* The amplitude parton data.
*/
map<tStdXCombPtr,cPDVector>::iterator theLastAmplitudePartonData;
/**
* The crossing sign.
*/
double theLastCrossingSign;
/**
* True, if tree amplitudes need to be recalculated.
*/
bool calculateTrees;
/**
* True, if loop amplitudes need to be recalculated.
*/
bool calculateLoops;
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
MatchboxAmplitude & operator=(const MatchboxAmplitude &);
};
}
#endif /* HERWIG_MatchboxAmplitude_H */
diff --git a/MatrixElement/Matchbox/MatchboxFactory.cc b/MatrixElement/Matchbox/MatchboxFactory.cc
--- a/MatrixElement/Matchbox/MatchboxFactory.cc
+++ b/MatrixElement/Matchbox/MatchboxFactory.cc
@@ -1,782 +1,788 @@
// -*- C++ -*-
//
// MatchboxFactory.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2012 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 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 MatchboxFactory class.
//
#include "MatchboxFactory.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/RefVector.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Command.h"
#include "ThePEG/Utilities/StringUtils.h"
#include "ThePEG/Repository/Repository.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig++/MatrixElement/Matchbox/Base/DipoleRepository.h"
using namespace Herwig;
using std::ostream_iterator;
MatchboxFactory::MatchboxFactory()
: SubProcessHandler(), theNLight(0),
theOrderInAlphaS(0), theOrderInAlphaEW(0),
theBornContributions(true), theVirtualContributions(true),
theRealContributions(true), theSubProcessGroups(false),
theFactorizationScaleFactor(1.0), theRenormalizationScaleFactor(1.0),
theFixedCouplings(false), theVetoScales(false),
theVerbose(false), theSubtractionData("") {}
MatchboxFactory::~MatchboxFactory() {}
IBPtr MatchboxFactory::clone() const {
return new_ptr(*this);
}
IBPtr MatchboxFactory::fullclone() const {
return new_ptr(*this);
}
void MatchboxFactory::prepareME(Ptr<MatchboxMEBase>::ptr me) const {
Ptr<MatchboxAmplitude>::ptr amp =
dynamic_ptr_cast<Ptr<MatchboxAmplitude>::ptr>((*me).amplitude());
me->matchboxAmplitude(amp);
if ( diagramGenerator() && !me->diagramGenerator() )
me->diagramGenerator(diagramGenerator());
if ( me->nLight() == 0 )
me->nLight(nLight());
if ( phasespace() && !me->phasespace() )
me->phasespace(phasespace());
if ( scaleChoice() && !me->scaleChoice() )
me->scaleChoice(scaleChoice());
if ( me->factorizationScaleFactor() == 1.0 )
me->factorizationScaleFactor(factorizationScaleFactor());
if ( me->renormalizationScaleFactor() == 1.0 )
me->renormalizationScaleFactor(renormalizationScaleFactor());
if ( fixedCouplings() )
me->setFixedCouplings();
if ( cache() && !me->cache() )
me->cache(cache());
if ( verbose() )
me->setVerbose();
}
struct ProjectQN {
inline pair<int,pair<int,int> > operator()(PDPtr p) const {
return
pair<int,pair<int,int> >((*p).iSpin(),pair<int,int>((*p).iCharge(),(*p).iColour()));
}
};
string pid(const vector<pair<int,pair<int,int> > >& key) {
ostringstream res;
for ( vector<pair<int,pair<int,int> > >::const_iterator k =
key.begin(); k != key.end(); ++k )
res << k->first << k->second.first
<< k->second.second;
return res.str();
}
vector<Ptr<MatchboxMEBase>::ptr> MatchboxFactory::
makeMEs(const vector<string>& proc, unsigned int orderas) const {
typedef vector<pair<int,pair<int,int> > > QNKey;
map<Ptr<MatchboxAmplitude>::ptr,map<QNKey,vector<PDVector> > > ampProcs;
set<PDVector> processes = makeSubProcesses(proc);
for ( vector<Ptr<MatchboxAmplitude>::ptr>::const_iterator amp
= amplitudes().begin(); amp != amplitudes().end(); ++amp ) {
(**amp).orderInGs(orderas);
(**amp).orderInGem(orderInAlphaEW());
if ( (**amp).orderInGs() != orderas ||
(**amp).orderInGem() != orderInAlphaEW() )
continue;
for ( set<PDVector>::const_iterator p = processes.begin();
p != processes.end(); ++p ) {
if ( !(**amp).canHandle(*p) )
continue;
QNKey key;
transform(p->begin(),p->end(),back_inserter(key),ProjectQN());
ampProcs[*amp][key].push_back(*p);
}
}
vector<Ptr<MatchboxMEBase>::ptr> res;
for ( map<Ptr<MatchboxAmplitude>::ptr,map<QNKey,vector<PDVector> > >::const_iterator
ap = ampProcs.begin(); ap != ampProcs.end(); ++ap ) {
for ( map<QNKey,vector<PDVector> >::const_iterator m = ap->second.begin();
m != ap->second.end(); ++m ) {
Ptr<MatchboxMEBase>::ptr me = ap->first->makeME(m->second);
me->subProcesses() = m->second;
me->amplitude(ap->first);
string pname = "ME" + ap->first->name() + pid(m->first);
if ( ! (generator()->preinitRegister(me,pname) ) )
throw InitException() << "Matrix element " << pname << " already existing.";
res.push_back(me);
}
}
return res;
}
void MatchboxFactory::setup() {
if ( !amplitudes().empty() ) {
if ( particleGroups().find("j") == particleGroups().end() )
throw InitException() << "Could not find a jet particle group named 'j'";
// rebind the particle data objects
for ( map<string,PDVector>::iterator g = particleGroups().begin();
g != particleGroups().end(); ++g )
for ( PDVector::iterator p = g->second.begin();
p != g->second.end(); ++p ) {
#ifndef NDEBUG
long checkid = (**p).id();
#endif
*p = getParticleData((**p).id());
assert((**p).id() == checkid);
}
- nLight(particleGroups()["j"].size());
+ const PDVector& partons = particleGroups()["j"];
+ unsigned int nl = 0;
+ for ( PDVector::const_iterator p = partons.begin();
+ p != partons.end(); ++p )
+ if ( abs((**p).id()) < 6 )
+ ++nl;
+ nLight(nl/2);
vector<Ptr<MatchboxMEBase>::ptr> ames = makeMEs(process,orderInAlphaS());
copy(ames.begin(),ames.end(),back_inserter(bornMEs()));
if ( realContributions() ) {
vector<string> rproc = process;
rproc.push_back("j");
ames = makeMEs(rproc,orderInAlphaS()+1);
copy(ames.begin(),ames.end(),back_inserter(realEmissionMEs()));
}
}
// check if we have virtual contributions
bool haveVirtuals = true;
// check DR conventions of virtual contributions
bool virtualsAreDR = false;
bool virtualsAreCDR = false;
// check finite term conventions of virtual contributions
bool virtualsAreCS = false;
bool virtualsAreStandard = false;
// check and prepare the Born and virtual matrix elements
for ( vector<Ptr<MatchboxMEBase>::ptr>::iterator born
= bornMEs().begin(); born != bornMEs().end(); ++born ) {
prepareME(*born);
haveVirtuals &= (**born).haveOneLoop();
if ( (**born).haveOneLoop() ) {
virtualsAreDR |= (**born).isDR();
virtualsAreCDR |= !(**born).isDR();
virtualsAreCS |= (**born).isCS();
virtualsAreStandard |= !(**born).isCS();
}
}
// check the additional insertion operators
if ( !virtuals().empty() )
haveVirtuals = true;
for ( vector<Ptr<MatchboxInsertionOperator>::ptr>::const_iterator virt
= virtuals().begin(); virt != virtuals().end(); ++virt ) {
virtualsAreDR |= (**virt).isDR();
virtualsAreCDR |= !(**virt).isDR();
virtualsAreCS |= (**virt).isCS();
virtualsAreStandard |= !(**virt).isCS();
}
// check for consistent conventions on virtuals, if we are to include them
if ( virtualContributions() ) {
if ( virtualsAreDR && virtualsAreCDR ) {
throw InitException() << "Virtual corrections use inconsistent regularization schemes.\n";
}
if ( virtualsAreCS && virtualsAreStandard ) {
throw InitException() << "Virtual corrections use inconsistent conventions on finite terms.\n";
}
if ( !haveVirtuals ) {
throw InitException() << "Could not find amplitudes for all virtual contributions needed.\n";
}
}
// prepare dipole insertion operators
if ( virtualContributions() ) {
for ( vector<Ptr<MatchboxInsertionOperator>::ptr>::const_iterator virt
= DipoleRepository::insertionOperators().begin();
virt != DipoleRepository::insertionOperators().end(); ++virt ) {
if ( virtualsAreDR )
(**virt).useDR();
else
(**virt).useCDR();
if ( virtualsAreCS )
(**virt).useCS();
else
(**virt).useNonCS();
}
}
// prepare the real emission matrix elements
if ( realContributions() ) {
for ( vector<Ptr<MatchboxMEBase>::ptr>::iterator real
= realEmissionMEs().begin(); real != realEmissionMEs().end(); ++real ) {
prepareME(*real);
}
}
// start creating matrix elements
MEs().clear();
// setup born and virtual contributions
if ( !bornContributions() && virtualContributions() ) {
throw InitException() << "Virtual corrections without Born contributions not yet supported.\n";
}
if ( bornContributions() && !virtualContributions() ) {
for ( vector<Ptr<MatchboxMEBase>::ptr>::iterator born
= bornMEs().begin(); born != bornMEs().end(); ++born ) {
if ( (**born).onlyOneLoop() )
continue;
Ptr<MatchboxMEBase>::ptr bornme = (**born).cloneMe();
string pname = fullName() + "/" + (**born).name();
if ( ! (generator()->preinitRegister(bornme,pname) ) )
throw InitException() << "Matrix element " << pname << " already existing.";
bornme->cloneDependencies();
MEs().push_back(bornme);
}
}
if ( bornContributions() && virtualContributions() ) {
bornVirtualMEs().clear();
for ( vector<Ptr<MatchboxMEBase>::ptr>::iterator born
= bornMEs().begin(); born != bornMEs().end(); ++born ) {
Ptr<MatchboxNLOME>::ptr nlo = new_ptr(MatchboxNLOME());
string pname = fullName() + "/" + (**born).name();
if ( ! (generator()->preinitRegister(nlo,pname) ) )
throw InitException() << "NLO ME " << pname << " already existing.";
nlo->matrixElement(*born);
nlo->virtuals().clear();
if ( !nlo->matrixElement()->onlyOneLoop() ) {
for ( vector<Ptr<MatchboxInsertionOperator>::ptr>::const_iterator virt
= virtuals().begin(); virt != virtuals().end(); ++virt ) {
if ( (**virt).apply((**born).diagrams().front()->partons()) )
nlo->virtuals().push_back(*virt);
}
for ( vector<Ptr<MatchboxInsertionOperator>::ptr>::const_iterator virt
= DipoleRepository::insertionOperators().begin();
virt != DipoleRepository::insertionOperators().end(); ++virt ) {
if ( (**virt).apply((**born).diagrams().front()->partons()) )
nlo->virtuals().push_back(*virt);
}
if ( nlo->virtuals().empty() )
throw InitException() << "No insertion operators have been found for "
<< (**born).name() << "\n";
}
nlo->cloneDependencies();
bornVirtualMEs().push_back(nlo);
MEs().push_back(nlo);
}
}
if ( realContributions() ) {
if ( theSubtractionData != "" )
if ( theSubtractionData[theSubtractionData.size()-1] != '/' )
theSubtractionData += "/";
subtractedMEs().clear();
for ( vector<Ptr<MatchboxMEBase>::ptr>::iterator real
= realEmissionMEs().begin(); real != realEmissionMEs().end(); ++real ) {
Ptr<SubtractedME>::ptr sub = new_ptr(SubtractedME());
string pname = fullName() + "/" + (**real).name();
if ( ! (generator()->preinitRegister(sub,pname) ) )
throw InitException() << "Subtracted ME " << pname << " already existing.";
sub->borns() = bornMEs();
sub->head(*real);
sub->allDipoles().clear();
sub->dependent().clear();
sub->getDipoles();
if ( verbose() )
sub->setVerbose();
if ( subProcessGroups() )
sub->setSubProcessGroups();
if ( vetoScales() )
sub->doVetoScales();
if ( subtractionData() != "" )
sub->subtractionData(subtractionData());
subtractedMEs().push_back(sub);
MEs().push_back(sub);
}
}
}
void MatchboxFactory::print(ostream& os) const {
os << "--- MatchboxFactory setup -----------------------------------------------------------\n";
if ( !amplitudes().empty() ) {
os << " generated Born matrix elements:\n";
for ( vector<Ptr<MatchboxMEBase>::ptr>::const_iterator m = bornMEs().begin();
m != bornMEs().end(); ++m ) {
os << " '" << (**m).name() << "' for subprocesses:\n";
for ( vector<PDVector>::const_iterator p = (**m).subProcesses().begin();
p != (**m).subProcesses().end(); ++p ) {
os << " ";
for ( PDVector::const_iterator pp = p->begin();
pp != p->end(); ++pp ) {
os << (**pp).PDGName() << " ";
if ( pp == p->begin() + 1 )
os << "-> ";
}
os << "\n";
}
}
os << flush;
os << " generated real emission matrix elements:\n";
for ( vector<Ptr<MatchboxMEBase>::ptr>::const_iterator m = realEmissionMEs().begin();
m != realEmissionMEs().end(); ++m ) {
os << " '" << (**m).name() << "' for subprocesses:\n";
for ( vector<PDVector>::const_iterator p = (**m).subProcesses().begin();
p != (**m).subProcesses().end(); ++p ) {
os << " ";
for ( PDVector::const_iterator pp = p->begin();
pp != p->end(); ++pp ) {
os << (**pp).PDGName() << " ";
if ( pp == p->begin() + 1 )
os << "-> ";
}
os << "\n";
}
}
os << flush;
}
os << " generated Born+virtual matrix elements:\n";
for ( vector<Ptr<MatchboxNLOME>::ptr>::const_iterator bv
= bornVirtualMEs().begin(); bv != bornVirtualMEs().end(); ++bv ) {
(**bv).print(os);
}
os << " generated subtracted matrix elements:\n";
for ( vector<Ptr<SubtractedME>::ptr>::const_iterator sub
= subtractedMEs().begin(); sub != subtractedMEs().end(); ++sub ) {
os << " '" << (**sub).name() << "'\n";
}
os << "--------------------------------------------------------------------------------\n";
os << flush;
}
void MatchboxFactory::doinit() {
setup();
if ( theVerbose )
print(Repository::clog());
SubProcessHandler::doinit();
}
void MatchboxFactory::persistentOutput(PersistentOStream & os) const {
os << theDiagramGenerator
<< theNLight << theOrderInAlphaS << theOrderInAlphaEW
<< theBornContributions << theVirtualContributions
<< theRealContributions << theSubProcessGroups
<< thePhasespace << theScaleChoice
<< theFactorizationScaleFactor << theRenormalizationScaleFactor
<< theFixedCouplings << theVetoScales
<< theAmplitudes << theCache
<< theBornMEs << theVirtuals << theRealEmissionMEs
<< theBornVirtualMEs << theSubtractedMEs
<< theVerbose << theSubtractionData
<< theParticleGroups << process;
}
void MatchboxFactory::persistentInput(PersistentIStream & is, int) {
is >> theDiagramGenerator
>> theNLight >> theOrderInAlphaS >> theOrderInAlphaEW
>> theBornContributions >> theVirtualContributions
>> theRealContributions >> theSubProcessGroups
>> thePhasespace >> theScaleChoice
>> theFactorizationScaleFactor >> theRenormalizationScaleFactor
>> theFixedCouplings >> theVetoScales
>> theAmplitudes >> theCache
>> theBornMEs >> theVirtuals >> theRealEmissionMEs
>> theBornVirtualMEs >> theSubtractedMEs
>> theVerbose >> theSubtractionData
>> theParticleGroups >> process;
}
string MatchboxFactory::startParticleGroup(string name) {
particleGroupName = StringUtils::stripws(name);
particleGroup.clear();
return "";
}
string MatchboxFactory::endParticleGroup(string) {
if ( particleGroup.empty() )
throw InitException() << "Empty particle group.";
particleGroups()[particleGroupName] = particleGroup;
particleGroup.clear();
return "";
}
string MatchboxFactory::doProcess(string in) {
process = StringUtils::split(in);
if ( process.size() < 3 )
throw InitException() << "Invalid process.";
for ( vector<string>::iterator p = process.begin();
p != process.end(); ++p ) {
*p = StringUtils::stripws(*p);
}
return "";
}
struct SortPID {
inline bool operator()(PDPtr a, PDPtr b) const {
return a->id() < b->id();
}
};
set<PDVector> MatchboxFactory::
makeSubProcesses(const vector<string>& proc) const {
if ( proc.empty() )
throw InitException() << "No process specified.";
vector<PDVector> allProcs(1);
size_t pos = 0;
typedef map<string,PDVector>::const_iterator GroupIterator;
while ( pos < proc.size() ) {
GroupIterator git =
particleGroups().find(proc[pos]);
if ( git == particleGroups().end() ) {
throw InitException() << "particle group '"
<< proc[pos] << "' not defined.";
}
vector<PDVector> mine;
for ( vector<PDVector>::const_iterator i = allProcs.begin();
i != allProcs.end(); ++i ) {
for ( PDVector::const_iterator p = git->second.begin();
p != git->second.end(); ++p ) {
PDVector v = *i;
v.push_back(*p);
mine.push_back(v);
}
}
allProcs = mine;
++pos;
}
set<PDVector> allCheckedProcs;
for ( vector<PDVector>::const_iterator p = allProcs.begin();
p != allProcs.end(); ++p ) {
int charge = -(*p)[0]->iCharge() -(*p)[1]->iCharge();
for ( size_t k = 2; k < (*p).size(); ++k )
charge += (*p)[k]->iCharge();
if ( charge != 0 )
continue;
PDVector pr = *p;
sort(pr.begin()+2,pr.end(),SortPID());
allCheckedProcs.insert(pr);
}
return allCheckedProcs;
}
void MatchboxFactory::Init() {
static ClassDocumentation<MatchboxFactory> documentation
("MatchboxFactory",
"NLO QCD corrections have been calculated "
"using Matchbox \\cite{Platzer:2011bc}",
"%\\cite{Platzer:2011bc}\n"
"\\bibitem{Platzer:2011bc}\n"
"S.~Platzer and S.~Gieseke,\n"
"``Dipole Showers and Automated NLO Matching in Herwig++,''\n"
"arXiv:1109.6256 [hep-ph].\n"
"%%CITATION = ARXIV:1109.6256;%%");
static Reference<MatchboxFactory,Tree2toNGenerator> interfaceDiagramGenerator
("DiagramGenerator",
"Set the diagram generator.",
&MatchboxFactory::theDiagramGenerator, false, false, true, true, false);
static Parameter<MatchboxFactory,unsigned int> interfaceOrderInAlphaS
("OrderInAlphaS",
"The order in alpha_s to consider.",
&MatchboxFactory::theOrderInAlphaS, 0, 0, 0,
false, false, Interface::lowerlim);
static Parameter<MatchboxFactory,unsigned int> interfaceOrderInAlphaEW
("OrderInAlphaEW",
"The order in alpha_EW",
&MatchboxFactory::theOrderInAlphaEW, 2, 0, 0,
false, false, Interface::lowerlim);
static Switch<MatchboxFactory,bool> interfaceBornContributions
("BornContributions",
"Switch on or off the Born contributions.",
&MatchboxFactory::theBornContributions, true, false, false);
static SwitchOption interfaceBornContributionsOn
(interfaceBornContributions,
"On",
"Switch on Born contributions.",
true);
static SwitchOption interfaceBornContributionsOff
(interfaceBornContributions,
"Off",
"Switch off Born contributions.",
false);
static Switch<MatchboxFactory,bool> interfaceVirtualContributions
("VirtualContributions",
"Switch on or off the virtual contributions.",
&MatchboxFactory::theVirtualContributions, true, false, false);
static SwitchOption interfaceVirtualContributionsOn
(interfaceVirtualContributions,
"On",
"Switch on virtual contributions.",
true);
static SwitchOption interfaceVirtualContributionsOff
(interfaceVirtualContributions,
"Off",
"Switch off virtual contributions.",
false);
static Switch<MatchboxFactory,bool> interfaceRealContributions
("RealContributions",
"Switch on or off the real contributions.",
&MatchboxFactory::theRealContributions, true, false, false);
static SwitchOption interfaceRealContributionsOn
(interfaceRealContributions,
"On",
"Switch on real contributions.",
true);
static SwitchOption interfaceRealContributionsOff
(interfaceRealContributions,
"Off",
"Switch off real contributions.",
false);
static Switch<MatchboxFactory,bool> interfaceSubProcessGroups
("SubProcessGroups",
"Switch on or off production of sub-process groups.",
&MatchboxFactory::theSubProcessGroups, false, false, false);
static SwitchOption interfaceSubProcessGroupsOn
(interfaceSubProcessGroups,
"On",
"On",
true);
static SwitchOption interfaceSubProcessGroupsOff
(interfaceSubProcessGroups,
"Off",
"Off",
false);
static Reference<MatchboxFactory,MatchboxPhasespace> interfacePhasespace
("Phasespace",
"Set the phasespace generator.",
&MatchboxFactory::thePhasespace, false, false, true, true, false);
static Reference<MatchboxFactory,MatchboxScaleChoice> interfaceScaleChoice
("ScaleChoice",
"Set the scale choice object.",
&MatchboxFactory::theScaleChoice, false, false, true, true, false);
static Parameter<MatchboxFactory,double> interfaceFactorizationScaleFactor
("FactorizationScaleFactor",
"The factorization scale factor.",
&MatchboxFactory::theFactorizationScaleFactor, 1.0, 0.0, 0,
false, false, Interface::lowerlim);
static Parameter<MatchboxFactory,double> interfaceRenormalizationScaleFactor
("RenormalizationScaleFactor",
"The renormalization scale factor.",
&MatchboxFactory::theRenormalizationScaleFactor, 1.0, 0.0, 0,
false, false, Interface::lowerlim);
static Switch<MatchboxFactory,bool> interfaceFixedCouplings
("FixedCouplings",
"Switch on or off fixed couplings.",
&MatchboxFactory::theFixedCouplings, true, false, false);
static SwitchOption interfaceFixedCouplingsOn
(interfaceFixedCouplings,
"On",
"On",
true);
static SwitchOption interfaceFixedCouplingsOff
(interfaceFixedCouplings,
"Off",
"Off",
false);
static Switch<MatchboxFactory,bool> interfaceVetoScales
("VetoScales",
"Switch on or setting veto scales.",
&MatchboxFactory::theVetoScales, true, false, false);
static SwitchOption interfaceVetoScalesOn
(interfaceVetoScales,
"On",
"On",
true);
static SwitchOption interfaceVetoScalesOff
(interfaceVetoScales,
"Off",
"Off",
false);
static RefVector<MatchboxFactory,MatchboxAmplitude> interfaceAmplitudes
("Amplitudes",
"The amplitude objects.",
&MatchboxFactory::theAmplitudes, -1, false, false, true, true, false);
static Reference<MatchboxFactory,MatchboxMECache> interfaceCache
("Cache",
"Set the matrix element cache object.",
&MatchboxFactory::theCache, false, false, true, true, false);
static RefVector<MatchboxFactory,MatchboxMEBase> interfaceBornMEs
("BornMEs",
"The Born matrix elements to be used",
&MatchboxFactory::theBornMEs, -1, false, false, true, true, false);
static RefVector<MatchboxFactory,MatchboxInsertionOperator> interfaceVirtuals
("Virtuals",
"The virtual corrections to include",
&MatchboxFactory::theVirtuals, -1, false, false, true, true, false);
static RefVector<MatchboxFactory,MatchboxMEBase> interfaceRealEmissionMEs
("RealEmissionMEs",
"The RealEmission matrix elements to be used",
&MatchboxFactory::theRealEmissionMEs, -1, false, false, true, true, false);
static RefVector<MatchboxFactory,MatchboxNLOME> interfaceBornVirtuals
("BornVirtualMEs",
"The generated Born/virtual contributions",
&MatchboxFactory::theBornVirtualMEs, -1, false, true, true, true, false);
static RefVector<MatchboxFactory,SubtractedME> interfaceSubtractedMEs
("SubtractedMEs",
"The generated Born/virtual contributions",
&MatchboxFactory::theSubtractedMEs, -1, false, true, true, true, false);
static Switch<MatchboxFactory,bool> interfaceVerbose
("Verbose",
"Print full infomation on each evaluated phase space point.",
&MatchboxFactory::theVerbose, false, false, false);
static SwitchOption interfaceVerboseOn
(interfaceVerbose,
"On",
"On",
true);
static SwitchOption interfaceVerboseOff
(interfaceVerbose,
"Off",
"Off",
false);
static Parameter<MatchboxFactory,string> interfaceSubtractionData
("SubtractionData",
"Prefix for subtraction check data.",
&MatchboxFactory::theSubtractionData, "",
false, false);
static RefVector<MatchboxFactory,ParticleData> interfaceParticleGroup
("ParticleGroup",
"The particle group just started.",
&MatchboxFactory::particleGroup, -1, false, false, true, false, false);
static Command<MatchboxFactory> interfaceStartParticleGroup
("StartParticleGroup",
"Start a particle group.",
&MatchboxFactory::startParticleGroup, false);
static Command<MatchboxFactory> interfaceEndParticleGroup
("EndParticleGroup",
"End a particle group.",
&MatchboxFactory::endParticleGroup, false);
static Command<MatchboxFactory> interfaceProcess
("Process",
"Set the process to consider.",
&MatchboxFactory::doProcess, false);
}
// *** Attention *** The following static variable is needed for the type
// description system in ThePEG. Please check that the template arguments
// are correct (the class and its base class), and that the constructor
// arguments are correct (the class name and the name of the dynamically
// loadable library where the class implementation can be found).
DescribeClass<MatchboxFactory,SubProcessHandler>
describeHerwigMatchboxFactory("Herwig::MatchboxFactory", "HwMatchbox.so");
diff --git a/Shower/SplittingFunctions/SplittingGenerator.cc b/Shower/SplittingFunctions/SplittingGenerator.cc
--- a/Shower/SplittingFunctions/SplittingGenerator.cc
+++ b/Shower/SplittingFunctions/SplittingGenerator.cc
@@ -1,344 +1,343 @@
// -*- C++ -*-
//
// SplittingGenerator.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2011 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 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 SplittingGenerator class.
//
#include "SplittingGenerator.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Command.h"
#include "ThePEG/Utilities/StringUtils.h"
#include "ThePEG/Repository/Repository.h"
#include "Herwig++/Shower/Base/ShowerParticle.h"
#include "Herwig++/Shower/ShowerHandler.h"
#include "ThePEG/Utilities/Rebinder.h"
#include <cassert>
using namespace Herwig;
IBPtr SplittingGenerator::clone() const {
return new_ptr(*this);
}
IBPtr SplittingGenerator::fullclone() const {
return new_ptr(*this);
}
void SplittingGenerator::persistentOutput(PersistentOStream & os) const {
os << _isr_Mode << _fsr_Mode << _bbranchings << _fbranchings;
}
void SplittingGenerator::persistentInput(PersistentIStream & is, int) {
is >> _isr_Mode >> _fsr_Mode >> _bbranchings >> _fbranchings;
}
ClassDescription<SplittingGenerator> SplittingGenerator::initSplittingGenerator;
// Definition of the static class description member.
void SplittingGenerator::Init() {
static ClassDocumentation<SplittingGenerator> documentation
("There class is responsible for initializing the Sudakov form factors ",
"and generating splittings.");
static Switch<SplittingGenerator, bool> interfaceISRMode
("ISR",
"Include initial-state radiation?",
&SplittingGenerator::_isr_Mode, 1, false, false);
static SwitchOption interfaceISRMode0
(interfaceISRMode,"No","ISR (Initial State Radiation) is OFF", 0);
static SwitchOption interfaceISRMode1
(interfaceISRMode,"Yes","ISR (Initial State Radiation) is ON", 1);
static Switch<SplittingGenerator, bool> interfaceFSRMode
("FSR",
"Include final-state radiation?",
&SplittingGenerator::_fsr_Mode, 1, false, false);
static SwitchOption interfaceFSRMode0
(interfaceFSRMode,"No","FSR (Final State Radiation) is OFF", 0);
static SwitchOption interfaceFSRMode1
(interfaceFSRMode,"Yes","FSR (Final State Radiation) is ON", 1);
static Command<SplittingGenerator> interfaceAddSplitting
("AddFinalSplitting",
"Adds another splitting to the list of splittings considered "
"in the shower. Command is a->b,c; Sudakov",
&SplittingGenerator::addFinalSplitting);
static Command<SplittingGenerator> interfaceAddInitialSplitting
("AddInitialSplitting",
"Adds another splitting to the list of initial splittings to consider "
"in the shower. Command is a->b,c; Sudakov. Here the particle a is the "
"particle that is PRODUCED by the splitting. b is the initial state "
"particle that is splitting in the shower.",
&SplittingGenerator::addInitialSplitting);
static Command<SplittingGenerator> interfaceDeleteSplitting
("DeleteFinalSplitting",
"Deletes a splitting from the list of splittings considered "
"in the shower. Command is a->b,c; Sudakov",
&SplittingGenerator::deleteFinalSplitting);
static Command<SplittingGenerator> interfaceDeleteInitialSplitting
("DeleteInitialSplitting",
"Deletes a splitting from the list of initial splittings to consider "
"in the shower. Command is a->b,c; Sudakov. Here the particle a is the "
"particle that is PRODUCED by the splitting. b is the initial state "
"particle that is splitting in the shower.",
&SplittingGenerator::deleteInitialSplitting);
}
string SplittingGenerator::addSplitting(string arg, bool final) {
string partons = StringUtils::car(arg);
string sudakov = StringUtils::cdr(arg);
vector<tPDPtr> products;
string::size_type next = partons.find("->");
if(next == string::npos)
return "Error: Invalid string for splitting " + arg;
if(partons.find(';') == string::npos)
return "Error: Invalid string for splitting " + arg;
tPDPtr parent = Repository::findParticle(partons.substr(0,next));
partons = partons.substr(next+2);
do {
next = min(partons.find(','), partons.find(';'));
tPDPtr pdp = Repository::findParticle(partons.substr(0,next));
partons = partons.substr(next+1);
if(pdp) products.push_back(pdp);
else return "Error: Could not create splitting from " + arg;
} while(partons[0] != ';' && partons.size());
SudakovPtr s;
s = dynamic_ptr_cast<SudakovPtr>(Repository::TraceObject(sudakov));
if(!s) return "Error: Could not load Sudakov " + sudakov + '\n';
IdList ids;
ids.push_back(parent->id());
for(vector<tPDPtr>::iterator it = products.begin(); it!=products.end(); ++it)
ids.push_back((*it)->id());
// check splitting can handle this
if(!s->splittingFn()->accept(ids))
return "Error: Sudakov " + sudakov + "can't handle particles\n";
// add to map
addToMap(ids,s,final);
return "";
}
string SplittingGenerator::deleteSplitting(string arg, bool final) {
string partons = StringUtils::car(arg);
string sudakov = StringUtils::cdr(arg);
vector<tPDPtr> products;
string::size_type next = partons.find("->");
if(next == string::npos)
return "Error: Invalid string for splitting " + arg;
if(partons.find(';') == string::npos)
return "Error: Invalid string for splitting " + arg;
tPDPtr parent = Repository::findParticle(partons.substr(0,next));
partons = partons.substr(next+2);
do {
next = min(partons.find(','), partons.find(';'));
tPDPtr pdp = Repository::findParticle(partons.substr(0,next));
partons = partons.substr(next+1);
if(pdp) products.push_back(pdp);
else return "Error: Could not create splitting from " + arg;
} while(partons[0] != ';' && partons.size());
SudakovPtr s;
s = dynamic_ptr_cast<SudakovPtr>(Repository::TraceObject(sudakov));
if(!s) return "Error: Could not load Sudakov " + sudakov + '\n';
IdList ids;
ids.push_back(parent->id());
for(vector<tPDPtr>::iterator it = products.begin(); it!=products.end(); ++it)
ids.push_back((*it)->id());
// check splitting can handle this
if(!s->splittingFn()->accept(ids))
return "Error: Sudakov " + sudakov + "can't handle particles\n";
// delete from map
deleteFromMap(ids,s,final);
return "";
}
void SplittingGenerator::addToMap(const IdList &ids, const SudakovPtr &s, bool final) {
if(isISRadiationON() && !final) {
_bbranchings.insert(BranchingInsert(ids[1],BranchingElement(s,ids)));
s->addSplitting(ids);
}
if(isFSRadiationON() && final) {
_fbranchings.insert(BranchingInsert(ids[0],BranchingElement(s,ids)));
s->addSplitting(ids);
}
}
void SplittingGenerator::deleteFromMap(const IdList &ids,
const SudakovPtr &s, bool final) {
if(isISRadiationON() && !final) {
pair<BranchingList::iterator,BranchingList::iterator>
range = _bbranchings.equal_range(ids[1]);
for(BranchingList::iterator it=range.first;it!=range.second&&it->first==ids[1];++it) {
if(it->second.first==s&&it->second.second==ids)
_bbranchings.erase(it);
}
s->removeSplitting(ids);
}
if(isFSRadiationON() && final) {
pair<BranchingList::iterator,BranchingList::iterator>
range = _fbranchings.equal_range(ids[0]);
for(BranchingList::iterator it=range.first;it!=range.second&&it->first==ids[0];++it) {
if(it->second.first==s&&it->second.second==ids)
_fbranchings.erase(it);
}
s->removeSplitting(ids);
}
}
Branching SplittingGenerator::chooseForwardBranching(ShowerParticle &particle,
double enhance,
ShowerInteraction::Type type) const {
Energy newQ = ZERO;
ShoKinPtr kinematics = ShoKinPtr();
SudakovPtr sudakov=SudakovPtr();
IdList ids;
// First, find the eventual branching, corresponding to the highest scale.
long index = abs(particle.data().id());
// if no branchings return empty branching struct
if(_fbranchings.find(index) == _fbranchings.end())
return Branching(ShoKinPtr(), IdList(),SudakovPtr());
// otherwise select branching
for(BranchingList::const_iterator cit = _fbranchings.lower_bound(index);
cit != _fbranchings.upper_bound(index); ++cit) {
if(type!=cit->second.first->interactionType()) continue;
// check size of scales beforehand...
ShoKinPtr newKin= cit->second.first->
generateNextTimeBranching(particle.evolutionScale(),
cit->second.second,particle.id()!=cit->first,
enhance);
if(!newKin) continue;
// select highest scale
if(newKin->scale() > newQ &&
newKin->scale() <= particle.evolutionScale()) {
kinematics=newKin;
newQ = newKin->scale();
- sudakov = cit->second.first;
ids = cit->second.second;
sudakov=cit->second.first;
}
}
// return empty branching if nothing happened
if(!kinematics) return Branching(ShoKinPtr(), IdList(),SudakovPtr());
// and generate phi
sudakov->generatePhi(particle,ids,kinematics);
// If a branching has been selected initialize it
kinematics->initialize(particle,PPtr());
// and return it
return Branching(kinematics, ids,sudakov);
}
Branching SplittingGenerator::
chooseDecayBranching(ShowerParticle &particle, Energy stoppingScale,
Energy minmass, double enhance,
ShowerInteraction::Type type) const {
Energy newQ = Constants::MaxEnergy;
ShoKinPtr kinematics;
SudakovPtr sudakov;
IdList ids;
// First, find the eventual branching, corresponding to the lowest scale.
long index = abs(particle.data().id());
// if no branchings return empty branching struct
if(_fbranchings.find(index) == _fbranchings.end())
return Branching(ShoKinPtr(), IdList(),SudakovPtr());
// otherwise select branching
for(BranchingList::const_iterator cit = _fbranchings.lower_bound(index);
cit != _fbranchings.upper_bound(index); ++cit) {
if(type!=cit->second.first->interactionType()) continue;
ShoKinPtr newKin;
if(particle.evolutionScale() < stoppingScale)
newKin = cit->second.first->
generateNextDecayBranching(particle.evolutionScale(),
stoppingScale,minmass,
cit->second.second,
particle.id()!=cit->first,enhance);
if(!newKin) continue;
if(newKin->scale() < newQ && newKin->scale() > particle.evolutionScale()) {
newQ = newKin->scale();
ids = cit->second.second;
kinematics=newKin;
sudakov=cit->second.first;
}
}
// return empty branching if nothing happened
if(!kinematics) return Branching(ShoKinPtr(), IdList(),SudakovPtr());
// initialize the branching
kinematics->initialize(particle,PPtr());
// and return it
return Branching(kinematics, ids,sudakov);
}
Branching SplittingGenerator::
chooseBackwardBranching(ShowerParticle &particle,PPtr beamparticle,
double enhance,
Ptr<BeamParticleData>::transient_const_pointer beam,
ShowerInteraction::Type type,
tcPDFPtr pdf, Energy freeze) const {
Energy newQ=ZERO;
ShoKinPtr kinematics=ShoKinPtr();
SudakovPtr sudakov;
IdList ids;
// First, find the eventual branching, corresponding to the highest scale.
long index = abs(particle.id());
// if no possible branching return
if(_bbranchings.find(index) == _bbranchings.end())
return Branching(ShoKinPtr(), IdList(),sudakov);
// select the branching
for(BranchingList::const_iterator cit = _bbranchings.lower_bound(index);
cit != _bbranchings.upper_bound(index); ++cit ) {
if(type!=cit->second.first->interactionType()) continue;
cit->second.first->setPDF(pdf,freeze);
ShoKinPtr newKin=cit->second.first->
generateNextSpaceBranching(particle.evolutionScale(),
cit->second.second, particle.x(),
particle.id()!=cit->first,enhance,beam);
if(!newKin) continue;
if(newKin->scale() > newQ) {
newQ = newKin->scale();
kinematics=newKin;
ids = cit->second.second;
sudakov=cit->second.first;
}
}
// return empty branching if nothing happened
if(!kinematics) return Branching(ShoKinPtr(), IdList(),SudakovPtr());
// initialize the ShowerKinematics
// and return it
kinematics->initialize(particle,beamparticle);
// return the answer
return Branching(kinematics, ids,sudakov);
}
void SplittingGenerator::rebind(const TranslationMap & trans)
{
BranchingList::iterator cit;
for(cit=_fbranchings.begin();cit!=_fbranchings.end();++cit)
{(cit->second).first=trans.translate((cit->second).first);}
for(cit=_bbranchings.begin();cit!=_bbranchings.end();++cit)
{(cit->second).first=trans.translate((cit->second).first);}
Interfaced::rebind(trans);
}
IVector SplittingGenerator::getReferences() {
IVector ret = Interfaced::getReferences();
BranchingList::iterator cit;
for(cit=_fbranchings.begin();cit!=_fbranchings.end();++cit)
{ret.push_back((cit->second).first);}
for(cit=_bbranchings.begin();cit!=_bbranchings.end();++cit)
{ret.push_back((cit->second).first);}
return ret;
}
diff --git a/Tests/Rivet/LEP-Powheg-130.in b/Tests/Rivet/LEP-Powheg-130.in
--- a/Tests/Rivet/LEP-Powheg-130.in
+++ b/Tests/Rivet/LEP-Powheg-130.in
@@ -1,29 +1,23 @@
##################################################
# Rivet analyses at the Z pole
##################################################
read LEPBase-Powheg.in
##################################################
# LEP physics parameters (override defaults)
##################################################
cd /Herwig/Generators
set LEPGenerator:EventHandler:LuminosityFunction:Energy 130.
##################################################
# select the analyses
##################################################
-# OPAL event shapes and multiplicities at different energies
-insert /Herwig/Analysis/RivetAnalysis:Analyses 0 OPAL_2004_S6132243
-# ALEPH jet and event shapes at many energies
-insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ALEPH_2004_S5765862
-# OPAL/JADE jet rates at many energies
-insert /Herwig/Analysis/RivetAnalysis:Analyses 0 JADE_OPAL_2000_S4300807
# OPAL b/c/light multiplicity
insert /Herwig/Analysis/RivetAnalysis:Analyses 0 OPAL_2002_S5361494
##################################################
# Save run for later usage with 'Herwig++ run'
##################################################
cd /Herwig/Generators
saverun LEP-Powheg-130 LEPGenerator
diff --git a/bin b/bin
new file mode 120000
--- /dev/null
+++ b/bin
@@ -0,0 +1,1 @@
+src/
\ No newline at end of file
diff --git a/lib/Herwig++ b/lib/Herwig++
new file mode 120000
--- /dev/null
+++ b/lib/Herwig++
@@ -0,0 +1,1 @@
+.
\ No newline at end of file
diff --git a/src/ADD.model b/src/ADD.model
--- a/src/ADD.model
+++ b/src/ADD.model
@@ -1,98 +1,98 @@
##################################################
# Common setup for Randall-Sundrum models
#
# See LHC-ADD.in or ILC-ADD.in for example usage
#
# This file does not contain anything that
# users need to touch. User settings are in
# ???-ADD.in
###################################################
# library
library HwADDModel.so
###################################################
#
# Particle Data object for the Graviton
#
###################################################
cd /Herwig/Particles
create /ThePEG/ParticleData Graviton
-setup Graviton 39 Graviton 0.0 0.0 0.0 0.0 0 0 5 0
+setup Graviton 39 Graviton 0.0 0.0 0.0 0.0 0 0 5 1
create Herwig::GravitonMassGenerator /Herwig/Masses/GravitonMassGenerator
set /Herwig/Masses/GravitonMassGenerator:Particle Graviton
set Graviton:Mass_generator /Herwig/Masses/GravitonMassGenerator
set Graviton:WidthLoCut 0.
set Graviton:WidthUpCut 1e10
# ensure mass isn't messed with by the shower
insert /Herwig/Shower/KinematicsReconstructor:NoRescale 0 /Herwig/Particles/Graviton
###################################################
#
# Main directory and model object
#
###################################################
mkdir /Herwig/NewPhysics/ADD
cd /Herwig/NewPhysics/ADD
create Herwig::ADDModel Model
# SM couplings
set Model:QCD/RunningAlphaS /Herwig/AlphaS
set Model:EW/RunningAlphaEM /Herwig/AlphaEM
set Model:EW/CKM /Herwig/CKM
set Model:RunningMass /Herwig/RunningMass
###################################################
#
# Vertices
#
###################################################
# create ADD model vertices
mkdir /Herwig/Vertices/ADD
cd /Herwig/Vertices/ADD
library HwADDModel.so
create Herwig::ADDModelFFGRVertex ADD_FFGRVertex
create Herwig::ADDModelFFGGRVertex ADD_FFGGRVertex
create Herwig::ADDModelFFWGRVertex ADD_FFWGRVertex
create Herwig::ADDModelSSGRVertex ADD_SSGRVertex
create Herwig::ADDModelVVGRVertex ADD_VVGRVertex
create Herwig::ADDModelGGGGRVertex ADD_WWWGRVertex
create Herwig::ADDModelGGGGRVertex ADD_GGGGRVertex
cd /Herwig/NewPhysics/ADD
# SM vertices
set Model:Vertex/FFZ /Herwig/Vertices/FFZVertex
set Model:Vertex/FFW /Herwig/Vertices/FFWVertex
set Model:Vertex/FFH /Herwig/Vertices/FFHVertex
set Model:Vertex/FFG /Herwig/Vertices/FFGVertex
set Model:Vertex/FFP /Herwig/Vertices/FFPVertex
set Model:Vertex/GGG /Herwig/Vertices/GGGVertex
set Model:Vertex/GGGG /Herwig/Vertices/GGGGVertex
set Model:Vertex/WWH /Herwig/Vertices/WWHVertex
set Model:Vertex/WWW /Herwig/Vertices/WWWVertex
set Model:Vertex/WWWW /Herwig/Vertices/WWWWVertex
set Model:Vertex/HGG /Herwig/Vertices/HGGVertex
set Model:Vertex/HPP /Herwig/Vertices/HPPVertex
# ADD model vertices
set Model:Vertex/FFGR /Herwig/Vertices/ADD/ADD_FFGRVertex
set Model:Vertex/FFGGR /Herwig/Vertices/ADD/ADD_FFGGRVertex
set Model:Vertex/FFWGR /Herwig/Vertices/ADD/ADD_FFWGRVertex
set Model:Vertex/SSGR /Herwig/Vertices/ADD/ADD_SSGRVertex
set Model:Vertex/VVGR /Herwig/Vertices/ADD/ADD_VVGRVertex
set Model:Vertex/WWWGR /Herwig/Vertices/ADD/ADD_WWWGRVertex
set Model:Vertex/GGGGR /Herwig/Vertices/ADD/ADD_GGGGRVertex
###################################################
#
# Set up spin correlation Decayers
#
###################################################
cd /Herwig/NewPhysics
set TwoBodyDC:CreateDecayModes Yes
###################################################
# Set up the model framework
###################################################
set ADD/Model:ModelGenerator NewModel
###################################################
#
# Choose ADD over SM
#
###################################################
cd /Herwig/Generators
set LEPGenerator:StandardModelParameters /Herwig/NewPhysics/ADD/Model
set LHCGenerator:StandardModelParameters /Herwig/NewPhysics/ADD/Model
diff --git a/src/CMSSM40.1.1.slha b/src/CMSSM40.1.1.slha
--- a/src/CMSSM40.1.1.slha
+++ b/src/CMSSM40.1.1.slha
@@ -1,612 +1,611 @@
# ISAJET SUSY parameters in SUSY Les Houches Accord 2 format
# Created by ISALHA 2.0 Last revision: C. Balazs 21 Apr 2009
Block SPINFO # Program information
1 ISASUGRA from ISAJET # Spectrum Calculator
2 7.81 26-APR-2011 16:50:35 # Version number
Block MODSEL # Model selection
1 1 # Minimal supergravity (mSUGRA) model
Block SMINPUTS # Standard Model inputs
1 1.27840950E+02 # alpha_em^(-1)
2 1.16570000E-05 # G_Fermi
3 1.17200002E-01 # alpha_s(M_Z)
4 9.11699982E+01 # m_{Z}(pole)
5 4.19999981E+00 # m_{b}(m_{b})
6 1.73199997E+02 # m_{top}(pole)
7 1.77699995E+00 # m_{tau}(pole)
Block MINPAR # SUSY breaking input parameters
1 3.30000000E+02 # m_0
2 5.00000000E+02 # m_{1/2}
3 4.00000000E+01 # tan(beta)
4 1.00000000E+00 # sign(mu)
5 -5.00000000E+02 # A_0
Block EXTPAR # Non-universal SUSY breaking parameters
0 1.76318844E+16 # Input scale
Block MASS # Scalar and gaugino mass spectrum
# PDG code mass particle
- 24 8.04229965E+01 # W^+
25 1.16870972E+02 # h^0
35 6.28744934E+02 # H^0
36 6.24697754E+02 # A^0
37 6.34586792E+02 # H^+
1000001 1.10702246E+03 # dnl
1000002 1.10390466E+03 # upl
1000003 1.10702246E+03 # stl
1000004 1.10390552E+03 # chl
1000005 9.25675659E+02 # b1
1000006 7.72417542E+02 # t1
1000011 4.73480316E+02 # el-
1000012 4.65190002E+02 # nuel
1000013 4.73480316E+02 # mul-
1000014 4.65190002E+02 # numl
1000015 2.02426895E+02 # tau1
1000016 4.17797943E+02 # nutl
1000021 1.15880176E+03 # glss
1000022 2.07442932E+02 # z1ss
1000023 3.94819366E+02 # z2ss
1000024 3.95395752E+02 # w1ss
1000025 -6.98430725E+02 # z3ss
1000035 7.08134155E+02 # z4ss
1000037 7.08306274E+02 # w2ss
2000001 1.06494458E+03 # dnr
2000002 1.06849890E+03 # upr
2000003 1.06494458E+03 # str
2000004 1.06849988E+03 # chr
2000005 9.94880493E+02 # b2
2000006 1.00032068E+03 # t2
2000011 3.80521210E+02 # er-
2000013 3.80521271E+02 # mur-
2000015 4.47397339E+02 # tau2
Block ALPHA # Effective Higgs mixing parameter
-2.53561661E-02 # alpha
Block STOPMIX # stop mixing matrix
1 1 4.52761382E-01 # O_{11}
1 2 8.91631722E-01 # O_{12}
2 1 -8.91631722E-01 # O_{21}
2 2 4.52761382E-01 # O_{22}
Block SBOTMIX # sbottom mixing matrix
1 1 7.81507432E-01 # O_{11}
1 2 6.23895943E-01 # O_{12}
2 1 -6.23895943E-01 # O_{21}
2 2 7.81507432E-01 # O_{22}
Block STAUMIX # stau mixing matrix
1 1 3.44204724E-01 # O_{11}
1 2 9.38894629E-01 # O_{12}
2 1 -9.38894629E-01 # O_{21}
2 2 3.44204724E-01 # O_{22}
Block NMIX # neutralino mixing matrix
1 1 9.97291148E-01 #
1 2 -9.72984079E-03 #
1 3 6.95981011E-02 #
1 4 -2.17275135E-02 #
2 1 2.28502564E-02 #
2 2 9.82255638E-01 #
2 3 -1.60866529E-01 #
2 4 9.36675519E-02 #
3 1 3.32481824E-02 #
3 2 -4.86115925E-02 #
3 3 -7.04129338E-01 #
3 4 -7.07625329E-01 #
4 1 6.15066849E-02 #
4 2 -1.80875763E-01 #
4 3 -6.88098967E-01 #
4 4 7.00014949E-01 #
Block UMIX # chargino U mixing matrix
1 1 -9.73583758E-01 # U_{11}
1 2 2.28330076E-01 # U_{12}
2 1 -2.28330076E-01 # U_{21}
2 2 -9.73583758E-01 # U_{22}
Block VMIX # chargino V mixing matrix
1 1 -9.90937054E-01 # V_{11}
1 2 1.34326920E-01 # V_{12}
2 1 -1.34326920E-01 # V_{21}
2 2 -9.90937054E-01 # V_{22}
Block GAUGE Q= 8.46515137E+02 #
1 3.57499272E-01 # g`
2 6.52483046E-01 # g_2
3 1.22072554E+00 # g_3
Block YU Q= 8.46515137E+02 #
3 3 8.59023213E-01 # y_t
Block YD Q= 8.46515137E+02 #
3 3 4.69071597E-01 # y_b
Block YE Q= 8.46515137E+02 #
3 3 4.30355370E-01 # y_tau
Block HMIX Q= 8.46515137E+02 # Higgs mixing parameters
1 6.94892578E+02 # mu(Q)
2 4.00000000E+01 # tan(beta)(M_GUT)
3 2.50802032E+02 # Higgs vev at Q
4 3.90247281E+05 # m_A^2(Q)
Block MSOFT Q= 8.46515137E+02 # DRbar SUSY breaking parameters
1 2.10815384E+02 # M_1(Q)
2 3.91559723E+02 # M_2(Q)
3 1.10285413E+03 # M_3(Q)
21 -9.10002344E+04 # M^2_Hd
22 -4.78996688E+05 # M^2_Hu
31 4.68364502E+02 # MeL(Q)
32 4.68364502E+02 # MmuL(Q)
33 4.22006989E+02 # MtauL(Q)
34 3.77536163E+02 # MeR(Q)
35 3.77536163E+02 # MmuR(Q)
36 2.47031448E+02 # MtauR(Q)
41 1.05035156E+03 # MqL1(Q)
42 1.05035156E+03 # MqL2(Q)
43 9.10856995E+02 # MqL3(Q)
44 1.01528900E+03 # MuR(Q)
45 1.01528900E+03 # McR(Q)
46 7.86718323E+02 # MtR(Q)
47 1.01090594E+03 # MdR(Q)
48 1.01090594E+03 # MsR(Q)
49 9.32971741E+02 # MbR(Q)
Block AU Q= 8.46515137E+02 #
1 1 -1.02420349E+03 # A_u
2 2 -1.02420349E+03 # A_c
3 3 -1.02420349E+03 # A_t
Block AD Q= 8.46515137E+02 #
1 1 -1.47017371E+03 # A_d
2 2 -1.47017371E+03 # A_s
3 3 -1.47017371E+03 # A_b
Block AE Q= 8.46515137E+02 #
1 1 -5.32889954E+02 # A_e
2 2 -5.32889954E+02 # A_mu
3 3 -5.32889954E+02 # A_tau
# ISAJET decay tables in SUSY Les Houches accord format
# Created by ISALHD. Last revision: C. Balazs, 2005 May 25
Block DCINFO # Program information
1 ISASUGRA from ISAJET # Spectrum Calculator
2 7.81 26-APR-2011 16:50:35 # Version number
# PDG Width
DECAY 6 1.16585374E+00 # TP decays
# BR NDA ID1 ID2 ID3 ID4
3.33333343E-01 3 2 -1 5 # TP --> UP DB BT
3.33333343E-01 3 4 -3 5 # TP --> CH SB BT
1.11111119E-01 3 -11 12 5 # TP --> E+ NUE BT
1.11111119E-01 3 -13 14 5 # TP --> MU+ NUM BT
1.11111119E-01 3 -15 16 5 # TP --> TAU+ NUT BT
# PDG Width
DECAY 1000021 1.30986242E+01 # GLSS decays
# BR NDA ID1 ID2 ID3 ID4
2.95049255E-03 3 1000024 5 -6 # GLSS --> W1SS+ BT TB
2.95049255E-03 3 -1000024 6 -5 # GLSS --> W1SS- TP BB
9.63696337E-04 3 1000037 5 -6 # GLSS --> W2SS+ BT TB
9.63696337E-04 3 -1000037 6 -5 # GLSS --> W2SS- TP BB
7.89559749E-07 2 1000022 21 # GLSS --> Z1SS GL
5.53237274E-04 3 1000022 6 -6 # GLSS --> Z1SS TP TB
7.83049109E-06 2 1000023 21 # GLSS --> Z2SS GL
2.50290148E-03 3 1000023 6 -6 # GLSS --> Z2SS TP TB
5.75613885E-05 2 1000025 21 # GLSS --> Z3SS GL
5.80269319E-04 3 1000025 6 -6 # GLSS --> Z3SS TP TB
4.21289660E-05 2 1000035 21 # GLSS --> Z4SS GL
2.48247455E-03 3 1000035 6 -6 # GLSS --> Z4SS TP TB
8.58569052E-03 2 -1000002 2 # GLSS --> UBL UP
8.58569052E-03 2 1000002 -2 # GLSS --> UPL UB
7.65922479E-03 2 -1000001 1 # GLSS --> DBL DN
7.65922479E-03 2 1000001 -1 # GLSS --> DNL DB
2.25102771E-02 2 -2000002 2 # GLSS --> UBR UP
2.25102771E-02 2 2000002 -2 # GLSS --> UPR UB
2.42396072E-02 2 -2000001 1 # GLSS --> DBR DN
2.42396072E-02 2 2000001 -1 # GLSS --> DNR DB
7.65917124E-03 2 -1000003 3 # GLSS --> SBL ST
7.65917124E-03 2 1000003 -3 # GLSS --> STL SB
2.42395587E-02 2 -2000003 3 # GLSS --> SBR ST
2.42395587E-02 2 2000003 -3 # GLSS --> STR SB
8.58296175E-03 2 -1000004 4 # GLSS --> CBL CH
8.58296175E-03 2 1000004 -4 # GLSS --> CHL CB
2.25074943E-02 2 -2000004 4 # GLSS --> CBR CH
2.25074943E-02 2 2000004 -4 # GLSS --> CHR CB
1.28321588E-01 2 -1000005 5 # GLSS --> BB1 BT
1.28321588E-01 2 1000005 -5 # GLSS --> BT1 BB
7.15424567E-02 2 -2000005 5 # GLSS --> BB2 BT
7.15424567E-02 2 2000005 -5 # GLSS --> BT2 BB
1.67124167E-01 2 -1000006 6 # GLSS --> TB1 TP
1.67124167E-01 2 1000006 -6 # GLSS --> TP1 TB
# PDG Width
DECAY 1000002 1.06098747E+01 # UPL decays
# BR NDA ID1 ID2 ID3 ID4
1.21955825E-02 2 1000022 2 # UPL --> Z1SS UP
3.24108571E-01 2 1000023 2 # UPL --> Z2SS UP
2.84771639E-04 2 1000025 2 # UPL --> Z3SS UP
4.36333008E-03 2 1000035 2 # UPL --> Z4SS UP
6.53577685E-01 2 1000024 1 # UPL --> W1SS+ DN
5.47003094E-03 2 1000037 1 # UPL --> W2SS+ DN
# PDG Width
DECAY 1000001 1.05146809E+01 # DNL decays
# BR NDA ID1 ID2 ID3 ID4
1.52797932E-02 2 1000022 1 # DNL --> Z1SS DN
3.22955042E-01 2 1000023 1 # DNL --> Z2SS DN
4.80528222E-04 2 1000025 1 # DNL --> Z3SS DN
5.71126351E-03 2 1000035 1 # DNL --> Z4SS DN
6.39454246E-01 2 -1000024 2 # DNL --> W1SS- UP
1.61191169E-02 2 -1000037 2 # DNL --> W2SS- UP
# PDG Width
DECAY 1000003 1.05146542E+01 # STL decays
# BR NDA ID1 ID2 ID3 ID4
1.52798314E-02 2 1000022 3 # STL --> Z1SS ST
3.22955847E-01 2 1000023 3 # STL --> Z2SS ST
4.80529445E-04 2 1000025 3 # STL --> Z3SS ST
5.71127841E-03 2 1000035 3 # STL --> Z4SS ST
6.39453471E-01 2 -1000024 4 # STL --> W1SS- CH
1.61190201E-02 2 -1000037 4 # STL --> W2SS- CH
# PDG Width
DECAY 1000004 1.06098747E+01 # CHL decays
# BR NDA ID1 ID2 ID3 ID4
1.21955564E-02 2 1000022 4 # CHL --> Z1SS CH
3.24107736E-01 2 1000023 4 # CHL --> Z2SS CH
2.84770096E-04 2 1000025 4 # CHL --> Z3SS CH
4.36330587E-03 2 1000035 4 # CHL --> Z4SS CH
6.53578579E-01 2 1000024 3 # CHL --> W1SS+ ST
5.47004770E-03 2 1000037 3 # CHL --> W2SS+ ST
# PDG Width
DECAY 1000005 7.96929169E+00 # BT1 decays
# BR NDA ID1 ID2 ID3 ID4
5.20670116E-02 2 1000022 5 # BT1 --> Z1SS BT
2.50477284E-01 2 1000023 5 # BT1 --> Z2SS BT
4.36264798E-02 2 1000025 5 # BT1 --> Z3SS BT
3.05872597E-02 2 1000035 5 # BT1 --> Z4SS BT
4.20057476E-01 2 -1000024 6 # BT1 --> W1SS- TP
6.35062456E-02 2 -1000037 6 # BT1 --> W2SS- TP
1.39678210E-01 2 -24 1000006 # BT1 --> W- TP1
# PDG Width
DECAY 1000006 3.14273500E+00 # TP1 decays
# BR NDA ID1 ID2 ID3 ID4
3.61652523E-01 2 1000022 6 # TP1 --> Z1SS TP
1.56794369E-01 2 1000023 6 # TP1 --> Z2SS TP
4.17066365E-01 2 1000024 5 # TP1 --> W1SS+ BT
6.44867718E-02 2 1000037 5 # TP1 --> W2SS+ BT
# PDG Width
DECAY 2000002 2.22934365E+00 # UPR decays
# BR NDA ID1 ID2 ID3 ID4
9.97896373E-01 2 1000022 2 # UPR --> Z1SS UP
4.21777600E-04 2 1000023 2 # UPR --> Z2SS UP
3.92875401E-04 2 1000025 2 # UPR --> Z3SS UP
1.28896697E-03 2 1000035 2 # UPR --> Z4SS UP
# PDG Width
DECAY 2000001 5.55181503E-01 # DNR decays
# BR NDA ID1 ID2 ID3 ID4
9.97913539E-01 2 1000022 1 # DNR --> Z1SS DN
4.21113917E-04 2 1000023 1 # DNR --> Z2SS DN
3.89176304E-04 2 1000025 1 # DNR --> Z3SS DN
1.27619202E-03 2 1000035 1 # DNR --> Z4SS DN
# PDG Width
DECAY 2000003 5.55181503E-01 # STR decays
# BR NDA ID1 ID2 ID3 ID4
9.97913539E-01 2 1000022 3 # STR --> Z1SS ST
4.21113917E-04 2 1000023 3 # STR --> Z2SS ST
3.89176304E-04 2 1000025 3 # STR --> Z3SS ST
1.27619202E-03 2 1000035 3 # STR --> Z4SS ST
# PDG Width
DECAY 2000004 2.22933817E+00 # CHR decays
# BR NDA ID1 ID2 ID3 ID4
9.97896373E-01 2 1000022 4 # CHR --> Z1SS CH
4.21777426E-04 2 1000023 4 # CHR --> Z2SS CH
3.92873888E-04 2 1000025 4 # CHR --> Z3SS CH
1.28896185E-03 2 1000035 4 # CHR --> Z4SS CH
# PDG Width
DECAY 2000005 8.65413189E+00 # BT2 decays
# BR NDA ID1 ID2 ID3 ID4
2.76298951E-02 2 1000022 5 # BT2 --> Z1SS BT
8.36304203E-02 2 1000023 5 # BT2 --> Z2SS BT
6.94645569E-02 2 1000025 5 # BT2 --> Z3SS BT
7.83215240E-02 2 1000035 5 # BT2 --> Z4SS BT
1.40161589E-01 2 -1000024 6 # BT2 --> W1SS- TP
3.01571250E-01 2 -1000037 6 # BT2 --> W2SS- TP
2.99220800E-01 2 -24 1000006 # BT2 --> W- TP1
# PDG Width
DECAY 2000006 1.50752592E+01 # TP2 decays
# BR NDA ID1 ID2 ID3 ID4
2.65493870E-01 2 1000024 5 # TP2 --> W1SS+ BT
1.25092804E-01 2 1000037 5 # TP2 --> W2SS+ BT
1.80052266E-01 2 23 1000006 # TP2 --> Z0 TP1
8.66630077E-02 2 25 1000006 # TP2 --> HL0 TP1
2.60817762E-02 2 1000022 6 # TP2 --> Z1SS TP
1.14099048E-01 2 1000023 6 # TP2 --> Z2SS TP
5.57712391E-02 2 1000025 6 # TP2 --> Z3SS TP
1.46746024E-01 2 1000035 6 # TP2 --> Z4SS TP
# PDG Width
DECAY 1000011 9.06351805E-01 # EL- decays
# BR NDA ID1 ID2 ID3 ID4
4.16202903E-01 2 1000022 11 # EL- --> Z1SS E-
2.02000082E-01 2 1000023 11 # EL- --> Z2SS E-
3.81796658E-01 2 -1000024 12 # EL- --> W1SS- NUE
1.36210957E-07 3 1000015 11 -15 # EL- --> TAU1- E- TAU+
2.07975759E-07 3 -1000015 11 15 # EL- --> TAU1+ E- TAU-
# PDG Width
DECAY 1000013 9.06351507E-01 # MUL- decays
# BR NDA ID1 ID2 ID3 ID4
4.16202962E-01 2 1000022 13 # MUL- --> Z1SS MU-
2.01999933E-01 2 1000023 13 # MUL- --> Z2SS MU-
3.81796777E-01 2 -1000024 14 # MUL- --> W1SS- NUM
1.36211014E-07 3 1000015 13 -15 # MUL- --> TAU1- MU- TAU+
2.07975816E-07 3 -1000015 13 15 # MUL- --> TAU1+ MU- TAU-
# PDG Width
DECAY 1000012 8.31395209E-01 # NUEL decays
# BR NDA ID1 ID2 ID3 ID4
4.70447093E-01 2 1000022 12 # NUEL --> Z1SS NUE
1.73210651E-01 2 1000023 12 # NUEL --> Z2SS NUE
3.56338859E-01 2 1000024 11 # NUEL --> W1SS+ E-
3.09690165E-07 3 1000015 12 -15 # NUEL --> TAU1- NUE TAU+
3.14721035E-07 3 -1000015 12 15 # NUEL --> TAU1+ NUE TAU-
2.77051549E-06 3 -1000015 11 16 # NUEL --> TAU1+ E- NUT
# PDG Width
DECAY 1000014 8.31394851E-01 # NUML decays
# BR NDA ID1 ID2 ID3 ID4
4.70447302E-01 2 1000022 14 # NUML --> Z1SS NUM
1.73210725E-01 2 1000023 14 # NUML --> Z2SS NUM
3.56338590E-01 2 1000024 13 # NUML --> W1SS+ MU-
3.09690279E-07 3 1000015 14 -15 # NUML --> TAU1- NUM TAU+
3.14721177E-07 3 -1000015 14 15 # NUML --> TAU1+ NUM TAU-
2.78562788E-06 3 -1000015 13 16 # NUML --> TAU1+ MU- NUT
# PDG Width
DECAY 1000016 2.32832766E+00 # NUTL decays
# BR NDA ID1 ID2 ID3 ID4
1.33451402E-01 2 1000022 16 # NUTL --> Z1SS NUT
8.12754314E-03 2 1000023 16 # NUTL --> Z2SS NUT
1.60994045E-02 2 1000024 15 # NUTL --> W1SS+ TAU-
8.42320919E-01 2 24 1000015 # NUTL --> W+ TAU1-
7.21977585E-07 3 -1000015 16 15 # NUTL --> TAU1+ NUT TAU-
4.91183947E-08 3 1000015 16 -15 # NUTL --> TAU1- NUT TAU+
# PDG Width
DECAY 2000011 9.50808167E-01 # ER- decays
# BR NDA ID1 ID2 ID3 ID4
9.99999940E-01 2 1000022 11 # ER- --> Z1SS E-
3.20349400E-08 3 1000015 11 -15 # ER- --> TAU1- E- TAU+
3.21147517E-08 3 -1000015 11 15 # ER- --> TAU1+ E- TAU-
3.60796332E-12 3 1000015 12 -16 # ER- --> TAU1- NUE ANUT
# PDG Width
DECAY 2000013 9.50808465E-01 # MUR- decays
# BR NDA ID1 ID2 ID3 ID4
9.99999821E-01 2 1000022 13 # MUR- --> Z1SS MU-
3.20350004E-08 3 1000015 13 -15 # MUR- --> TAU1- MU- TAU+
3.21148157E-08 3 -1000015 13 15 # MUR- --> TAU1+ MU- TAU-
1.53391213E-07 3 1000015 14 -16 # MUR- --> TAU1- NUM ANUT
# PDG Width
DECAY 2000015 2.57927346E+00 # TAU2- decays
# BR NDA ID1 ID2 ID3 ID4
1.69659615E-01 2 1000022 15 # TAU2- --> Z1SS TAU-
2.82944925E-02 2 1000023 15 # TAU2- --> Z2SS TAU-
5.20175248E-02 2 -1000024 16 # TAU2- --> W1SS- NUT
4.66725141E-01 2 23 1000015 # TAU2- --> Z0 TAU1-
2.83303201E-01 2 25 1000015 # TAU2- --> HL0 TAU1-
# PDG Width
DECAY 1000022 1.91913766E-03 # Z1SS decays
# BR NDA ID1 ID2 ID3 ID4
5.00000000E-01 2 1000015 -15 # Z1SS --> TAU1- TAU+
5.00000000E-01 2 -1000015 15 # Z1SS --> TAU1+ TAU-
# PDG Width
DECAY 1000023 2.19691008E-01 # Z2SS decays
# BR NDA ID1 ID2 ID3 ID4
2.21119777E-07 2 1000022 22 # Z2SS --> Z1SS GM
3.65646160E-03 2 1000022 23 # Z2SS --> Z1SS Z0
2.72281767E-07 3 1000022 2 -2 # Z2SS --> Z1SS UP UB
3.25441874E-07 3 1000022 1 -1 # Z2SS --> Z1SS DN DB
3.25441874E-07 3 1000022 3 -3 # Z2SS --> Z1SS ST SB
2.72280829E-07 3 1000022 4 -4 # Z2SS --> Z1SS CH CB
3.24125858E-06 3 1000022 5 -5 # Z2SS --> Z1SS BT BB
7.04530248E-05 3 1000022 11 -11 # Z2SS --> Z1SS E- E+
7.04530248E-05 3 1000022 13 -13 # Z2SS --> Z1SS MU- MU+
9.87348540E-05 3 1000022 15 -15 # Z2SS --> Z1SS TAU- TAU+
8.21191206E-05 3 1000022 12 -12 # Z2SS --> Z1SS NUE ANUE
8.21191206E-05 3 1000022 14 -14 # Z2SS --> Z1SS NUM ANUM
2.19217196E-04 3 1000022 16 -16 # Z2SS --> Z1SS NUT ANUT
2.80832015E-02 2 1000022 25 # Z2SS --> Z1SS HL0
1.20694722E-05 2 2000011 -11 # Z2SS --> ER- E+
1.20694722E-05 2 -2000011 11 # Z2SS --> ER+ E-
1.20690565E-05 2 2000013 -13 # Z2SS --> MUR- MU+
1.20690565E-05 2 -2000013 13 # Z2SS --> MUR+ MU-
4.83792126E-01 2 1000015 -15 # Z2SS --> TAU1- TAU+
4.83792126E-01 2 -1000015 15 # Z2SS --> TAU1+ TAU-
# PDG Width
DECAY 1000025 5.25831127E+00 # Z3SS decays
# BR NDA ID1 ID2 ID3 ID4
2.33761497E-07 2 1000022 22 # Z3SS --> Z1SS GM
5.39223599E-08 2 1000023 22 # Z3SS --> Z2SS GM
2.14747682E-01 2 1000024 -24 # Z3SS --> W1SS+ W-
2.14747682E-01 2 -1000024 24 # Z3SS --> W1SS- W+
6.46357238E-02 2 1000022 23 # Z3SS --> Z1SS Z0
1.90247342E-01 2 1000023 23 # Z3SS --> Z2SS Z0
7.08019687E-09 3 1000022 2 -2 # Z3SS --> Z1SS UP UB
2.18991958E-09 3 1000022 1 -1 # Z3SS --> Z1SS DN DB
2.18991958E-09 3 1000022 3 -3 # Z3SS --> Z1SS ST SB
7.08016312E-09 3 1000022 4 -4 # Z3SS --> Z1SS CH CB
8.36535837E-05 3 1000022 5 -5 # Z3SS --> Z1SS BT BB
1.66435311E-05 3 1000022 15 -15 # Z3SS --> Z1SS TAU- TAU+
4.88501373E-09 3 1000023 2 -2 # Z3SS --> Z2SS UP UB
7.82452148E-09 3 1000023 1 -1 # Z3SS --> Z2SS DN DB
7.82452148E-09 3 1000023 3 -3 # Z3SS --> Z2SS ST SB
4.88499330E-09 3 1000023 4 -4 # Z3SS --> Z2SS CH CB
3.24260218E-05 3 1000023 5 -5 # Z3SS --> Z2SS BT BB
4.55672171E-06 3 1000023 15 -15 # Z3SS --> Z2SS TAU- TAU+
1.70735139E-02 2 1000022 25 # Z3SS --> Z1SS HL0
1.28090009E-02 2 1000023 25 # Z3SS --> Z2SS HL0
7.51439002E-05 2 1000011 -11 # Z3SS --> EL- E+
7.51439002E-05 2 -1000011 11 # Z3SS --> EL+ E-
7.51438856E-05 2 1000013 -13 # Z3SS --> MUL- MU+
7.51438856E-05 2 -1000013 13 # Z3SS --> MUL+ MU-
1.84628792E-04 2 2000011 -11 # Z3SS --> ER- E+
1.84628792E-04 2 -2000011 11 # Z3SS --> ER+ E-
1.84628749E-04 2 2000013 -13 # Z3SS --> MUR- MU+
1.84628749E-04 2 -2000013 13 # Z3SS --> MUR+ MU-
9.55013186E-02 2 1000015 -15 # Z3SS --> TAU1- TAU+
9.55013186E-02 2 -1000015 15 # Z3SS --> TAU1+ TAU-
4.54898700E-02 2 2000015 -15 # Z3SS --> TAU2- TAU+
4.54898700E-02 2 -2000015 15 # Z3SS --> TAU2+ TAU-
3.87133972E-04 2 1000012 -12 # Z3SS --> NUEL ANUE
3.87133972E-04 2 -1000012 12 # Z3SS --> ANUEL NUE
3.87133972E-04 2 1000014 -14 # Z3SS --> NUML ANUM
3.87133972E-04 2 -1000014 14 # Z3SS --> ANUML NUM
5.15718595E-04 2 1000016 -16 # Z3SS --> NUTL ANUT
5.15718595E-04 2 -1000016 16 # Z3SS --> ANUTL NUT
# PDG Width
DECAY 1000035 5.51008034E+00 # Z4SS decays
# BR NDA ID1 ID2 ID3 ID4
4.08327992E-07 2 1000022 22 # Z4SS --> Z1SS GM
9.35497457E-09 2 1000023 22 # Z4SS --> Z2SS GM
6.37252681E-11 2 1000025 22 # Z4SS --> Z3SS GM
2.13380888E-01 2 1000024 -24 # Z4SS --> W1SS+ W-
2.13380888E-01 2 -1000024 24 # Z4SS --> W1SS- W+
1.79086700E-02 2 1000022 23 # Z4SS --> Z1SS Z0
1.56781562E-02 2 1000023 23 # Z4SS --> Z2SS Z0
7.44877084E-08 3 1000022 2 -2 # Z4SS --> Z1SS UP UB
4.97084898E-08 3 1000022 1 -1 # Z4SS --> Z1SS DN DB
4.97084898E-08 3 1000022 3 -3 # Z4SS --> Z1SS ST SB
7.44873816E-08 3 1000022 4 -4 # Z4SS --> Z1SS CH CB
7.97867324E-05 3 1000022 5 -5 # Z4SS --> Z1SS BT BB
1.59519841E-05 3 1000022 15 -15 # Z4SS --> Z1SS TAU- TAU+
2.27225399E-07 3 1000023 2 -2 # Z4SS --> Z2SS UP UB
2.82327335E-07 3 1000023 1 -1 # Z4SS --> Z2SS DN DB
2.82327335E-07 3 1000023 3 -3 # Z4SS --> Z2SS ST SB
2.27224490E-07 3 1000023 4 -4 # Z4SS --> Z2SS CH CB
3.23678833E-05 3 1000023 5 -5 # Z4SS --> Z2SS BT BB
4.40232043E-06 3 1000023 15 -15 # Z4SS --> Z2SS TAU- TAU+
1.87236360E-09 3 1000025 2 -2 # Z4SS --> Z3SS UP UB
2.41535103E-09 3 1000025 1 -1 # Z4SS --> Z3SS DN DB
2.41535103E-09 3 1000025 3 -3 # Z4SS --> Z3SS ST SB
1.87236360E-09 3 1000025 4 -4 # Z4SS --> Z3SS CH CB
5.47803192E-10 3 1000025 11 -11 # Z4SS --> Z3SS E- E+
5.47803192E-10 3 1000025 13 -13 # Z4SS --> Z3SS MU- MU+
3.67608721E-10 3 1000025 15 -15 # Z4SS --> Z3SS TAU- TAU+
1.08995613E-09 3 1000025 12 -12 # Z4SS --> Z3SS NUE ANUE
1.08995613E-09 3 1000025 14 -14 # Z4SS --> Z3SS NUM ANUM
1.08995613E-09 3 1000025 16 -16 # Z4SS --> Z3SS NUT ANUT
6.12107255E-02 2 1000022 25 # Z4SS --> Z1SS HL0
1.87687099E-01 2 1000023 25 # Z4SS --> Z2SS HL0
1.78868964E-03 2 1000011 -11 # Z4SS --> EL- E+
1.78868964E-03 2 -1000011 11 # Z4SS --> EL+ E-
1.78868952E-03 2 1000013 -13 # Z4SS --> MUL- MU+
1.78868952E-03 2 -1000013 13 # Z4SS --> MUL+ MU-
6.25477580E-04 2 2000011 -11 # Z4SS --> ER- E+
6.25477580E-04 2 -2000011 11 # Z4SS --> ER+ E-
6.25477405E-04 2 2000013 -13 # Z4SS --> MUR- MU+
6.25477405E-04 2 -2000013 13 # Z4SS --> MUR+ MU-
7.62132257E-02 2 1000015 -15 # Z4SS --> TAU1- TAU+
7.62132257E-02 2 -1000015 15 # Z4SS --> TAU1+ TAU-
5.09139150E-02 2 2000015 -15 # Z4SS --> TAU2- TAU+
5.09139150E-02 2 -2000015 15 # Z4SS --> TAU2+ TAU-
4.02822904E-03 2 1000012 -12 # Z4SS --> NUEL ANUE
4.02822904E-03 2 -1000012 12 # Z4SS --> ANUEL NUE
4.02822904E-03 2 1000014 -14 # Z4SS --> NUML ANUM
4.02822904E-03 2 -1000014 14 # Z4SS --> ANUML NUM
5.29775722E-03 2 1000016 -16 # Z4SS --> NUTL ANUT
5.29775722E-03 2 -1000016 16 # Z4SS --> ANUTL NUT
# PDG Width
DECAY 1000024 2.13363171E-01 # W1SS+ decays
# BR NDA ID1 ID2 ID3 ID4
6.21085462E-07 3 1000022 2 -1 # W1SS+ --> Z1SS UP DB
6.21084439E-07 3 1000022 4 -3 # W1SS+ --> Z1SS CH SB
1.60280149E-04 3 1000022 -11 12 # W1SS+ --> Z1SS E+ NUE
1.60280149E-04 3 1000022 -13 14 # W1SS+ --> Z1SS MU+ NUM
3.30305251E-04 3 1000022 -15 16 # W1SS+ --> Z1SS TAU+ NUT
3.20735499E-02 2 1000022 24 # W1SS+ --> Z1SS W+
2.22283834E-13 3 1000023 -11 12 # W1SS+ --> Z2SS E+ NUE
2.22283834E-13 3 1000023 -13 14 # W1SS+ --> Z2SS MU+ NUM
9.67274368E-01 2 -1000015 16 # W1SS+ --> TAU1+ NUT
# PDG Width
DECAY 1000037 5.45480204E+00 # W2SS+ decays
# BR NDA ID1 ID2 ID3 ID4
8.23240285E-08 3 1000022 2 -1 # W2SS+ --> Z1SS UP DB
8.23239432E-08 3 1000022 4 -3 # W2SS+ --> Z1SS CH SB
1.39341673E-05 3 1000022 -15 16 # W2SS+ --> Z1SS TAU+ NUT
7.27590919E-02 2 1000022 24 # W2SS+ --> Z1SS W+
2.30239564E-07 3 1000023 2 -1 # W2SS+ --> Z2SS UP DB
2.30239493E-07 3 1000023 4 -3 # W2SS+ --> Z2SS CH SB
5.56894202E-06 3 1000023 -15 16 # W2SS+ --> Z2SS TAU+ NUT
2.21155554E-01 2 1000023 24 # W2SS+ --> Z2SS W+
7.12335968E-09 3 1000025 2 -1 # W2SS+ --> Z3SS UP DB
7.12335968E-09 3 1000025 4 -3 # W2SS+ --> Z3SS CH SB
2.37430253E-09 3 1000025 -11 12 # W2SS+ --> Z3SS E+ NUE
2.37430253E-09 3 1000025 -13 14 # W2SS+ --> Z3SS MU+ NUM
2.37431297E-09 3 1000025 -15 16 # W2SS+ --> Z3SS TAU+ NUT
3.18924151E-03 2 1000012 -11 # W2SS+ --> NUEL E+
3.18924151E-03 2 1000014 -13 # W2SS+ --> NUML MU+
1.00677975E-01 2 1000016 -15 # W2SS+ --> NUTL TAU+
8.71899258E-03 2 -1000011 12 # W2SS+ --> EL+ NUE
8.71899258E-03 2 -1000013 14 # W2SS+ --> MUL+ NUM
1.28181159E-01 2 -1000015 16 # W2SS+ --> TAU1+ NUT
3.76218781E-02 2 -2000015 16 # W2SS+ --> TAU2+ NUT
2.11088791E-01 2 1000024 23 # W2SS+ --> W1SS+ Z0
2.00140633E-07 3 1000024 1 -1 # W2SS+ --> W1SS+ DN DB
2.00139780E-07 3 1000024 3 -3 # W2SS+ --> W1SS+ ST SB
5.49638912E-07 3 1000024 2 -2 # W2SS+ --> W1SS+ UP UB
5.49638912E-07 3 1000024 4 -4 # W2SS+ --> W1SS+ CH CB
2.04677463E-01 2 1000024 25 # W2SS+ --> W1SS+ HL0
# PDG Width
DECAY 25 4.28013969E-03 # HL0 decays
# BR NDA ID1 ID2 ID3 ID4
4.77537165E-09 2 11 -11 # HL0 --> E- E+
2.01623829E-04 2 13 -13 # HL0 --> MU- MU+
5.76683506E-02 2 15 -15 # HL0 --> TAU- TAU+
5.99213945E-06 2 1 -1 # HL0 --> DN DB
2.42112461E-03 2 3 -3 # HL0 --> ST SB
7.91881859E-01 2 5 -5 # HL0 --> BT BB
1.86300781E-06 2 2 -2 # HL0 --> UP UB
3.49842906E-02 2 4 -4 # HL0 --> CH CB
1.84560777E-03 2 22 22 # HL0 --> GM GM
3.96150686E-02 2 21 21 # HL0 --> GL GL
3.66468704E-03 3 24 11 -12 # HL0 --> W+ E- ANUE
3.66468704E-03 3 24 13 -14 # HL0 --> W+ MU- ANUM
3.66468704E-03 3 24 15 -16 # HL0 --> W+ TAU- ANUT
1.09940609E-02 3 24 -2 1 # HL0 --> W+ UB DN
1.09940609E-02 3 24 -4 3 # HL0 --> W+ CB ST
3.66468704E-03 3 -24 -11 12 # HL0 --> W- E+ NUE
3.66468704E-03 3 -24 -13 14 # HL0 --> W- MU+ NUM
3.66468704E-03 3 -24 -15 16 # HL0 --> W- TAU+ NUT
1.09940609E-02 3 -24 2 -1 # HL0 --> W- UP DB
1.09940609E-02 3 -24 4 -3 # HL0 --> W- CH SB
3.69976769E-04 3 23 12 -12 # HL0 --> Z0 NUE ANUE
3.69976769E-04 3 23 14 -14 # HL0 --> Z0 NUM ANUM
3.69976769E-04 3 23 16 -16 # HL0 --> Z0 NUT ANUT
1.86205580E-04 3 23 11 -11 # HL0 --> Z0 E- E+
1.86205580E-04 3 23 13 -13 # HL0 --> Z0 MU- MU+
1.86205580E-04 3 23 15 -15 # HL0 --> Z0 TAU- TAU+
6.37924590E-04 3 23 2 -2 # HL0 --> Z0 UP UB
6.37924590E-04 3 23 4 -4 # HL0 --> Z0 CH CB
8.21803987E-04 3 23 1 -1 # HL0 --> Z0 DN DB
8.21803987E-04 3 23 3 -3 # HL0 --> Z0 ST SB
8.21803987E-04 3 23 5 -5 # HL0 --> Z0 BT BB
# PDG Width
DECAY 35 1.57665234E+01 # HH0 decays
# BR NDA ID1 ID2 ID3 ID4
1.08428519E-08 2 11 -11 # HH0 --> E- E+
4.57804708E-04 2 13 -13 # HH0 --> MU- MU+
1.31116018E-01 2 15 -15 # HH0 --> TAU- TAU+
1.33369213E-05 2 1 -1 # HH0 --> DN DB
5.38879121E-03 2 3 -3 # HH0 --> ST SB
8.47770452E-01 2 5 -5 # HH0 --> BT BB
1.71551694E-12 2 2 -2 # HH0 --> UP UB
2.55749324E-08 2 4 -4 # HH0 --> CH CB
8.74553400E-04 2 6 -6 # HH0 --> TP TB
4.17106527E-08 2 22 22 # HH0 --> GM GM
8.81763026E-06 2 21 21 # HH0 --> GL GL
6.07276320E-07 2 24 -24 # HH0 --> W+ W-
3.03128559E-07 2 23 23 # HH0 --> Z0 Z0
2.11170744E-04 2 1000022 1000022 # HH0 --> Z1SS Z1SS
9.15425335E-05 2 1000022 1000023 # HH0 --> Z1SS Z2SS
5.49548022E-05 2 25 25 # HH0 --> HL0 HL0
1.40115535E-02 2 1000015 -1000015 # HH0 --> TAU1- TAU1+
# PDG Width
DECAY 36 1.54689407E+01 # HA0 decays
# BR NDA ID1 ID2 ID3 ID4
1.09805027E-08 2 11 -11 # HA0 --> E- E+
4.63616598E-04 2 13 -13 # HA0 --> MU- MU+
1.32784754E-01 2 15 -15 # HA0 --> TAU- TAU+
1.35070286E-05 2 1 -1 # HA0 --> DN DB
5.45752328E-03 2 3 -3 # HA0 --> ST SB
8.58688116E-01 2 5 -5 # HA0 --> BT BB
1.68820968E-12 2 2 -2 # HA0 --> UP UB
2.51881627E-08 2 4 -4 # HA0 --> CH CB
1.19010801E-03 2 6 -6 # HA0 --> TP TB
4.99788477E-08 2 22 22 # HA0 --> GM GM
2.17849338E-05 2 21 21 # HA0 --> GL GL
3.88916204E-04 2 1000022 1000022 # HA0 --> Z1SS Z1SS
9.91033274E-04 2 1000022 1000023 # HA0 --> Z1SS Z2SS
5.67365362E-07 2 25 23 # HA0 --> HL0 Z0
# PDG Width
DECAY 37 1.30214748E+01 # H+ decays
# BR NDA ID1 ID2 ID3 ID4
1.32508511E-08 2 12 -11 # H+ --> NUE E+
5.59474807E-04 2 14 -13 # H+ --> NUM MU+
1.60239652E-01 2 16 -15 # H+ --> NUT TAU+
1.49208545E-05 2 2 -1 # H+ --> UP DB
6.02875138E-03 2 4 -3 # H+ --> CH SB
8.13027143E-01 2 6 -5 # H+ --> TP BB
1.50601589E-03 2 1000024 1000022 # H+ --> W1SS+ Z1SS
7.12423457E-07 2 25 24 # H+ --> HL0 W+
1.86233055E-02 2 -1000015 1000016 # H+ --> TAU1+ NUTL
diff --git a/src/LHC-ZP.in b/src/LHC-ZP.in
--- a/src/LHC-ZP.in
+++ b/src/LHC-ZP.in
@@ -1,131 +1,131 @@
##################################################
# Example generator for the Leptoquark model
# in hadron collisions
# The best way to use this is to make your own
# copy of this file and edit that as you require.
#
# The first section loads the model file which
# does not contain anything that users need to touch.
#
# The second section contains the user settings.
###################################################
read Zprime.model
set /Herwig/Particles/t:Synchronized Not_synchronized
set /Herwig/Particles/tbar:Synchronized Not_synchronized
#set /Herwig/Particles/t/t->b,bbar,c;:OnOff On
#set /Herwig/Particles/t/t->b,c,dbar;:OnOff On
#set /Herwig/Particles/t/t->b,c,sbar;:OnOff On
#set /Herwig/Particles/t/t->b,sbar,u;:OnOff On
#set /Herwig/Particles/t/t->b,u,dbar;:OnOff On
#set /Herwig/Particles/t/t->nu_e,e+,b;:OnOff Off
#set /Herwig/Particles/t/t->nu_mu,mu+,b;:OnOff Off
#set /Herwig/Particles/t/t->nu_tau,tau+,b;:OnOff Off
#set /Herwig/Particles/tbar/tbar->b,bbar,cbar;:OnOff Off
#set /Herwig/Particles/tbar/tbar->bbar,cbar,d;:OnOff Off
#set /Herwig/Particles/tbar/tbar->bbar,cbar,s;:OnOff Off
#set /Herwig/Particles/tbar/tbar->bbar,s,ubar;:OnOff Off
#set /Herwig/Particles/tbar/tbar->bbar,ubar,d;:OnOff Off
#set /Herwig/Particles/tbar/tbar->nu_ebar,e-,bbar;:OnOff On
#set /Herwig/Particles/tbar/tbar->nu_mubar,mu-,bbar;:OnOff On
#set /Herwig/Particles/tbar/tbar->nu_taubar,tau-,bbar;:OnOff Off
set /Herwig/Particles/t/t->b,bbar,c;:OnOff Off
set /Herwig/Particles/t/t->b,c,dbar;:OnOff Off
set /Herwig/Particles/t/t->b,c,sbar;:OnOff Off
set /Herwig/Particles/t/t->b,sbar,u;:OnOff Off
set /Herwig/Particles/t/t->b,u,dbar;:OnOff Off
set /Herwig/Particles/t/t->nu_e,e+,b;:OnOff On
set /Herwig/Particles/t/t->nu_mu,mu+,b;:OnOff On
set /Herwig/Particles/t/t->nu_tau,tau+,b;:OnOff Off
set /Herwig/Particles/tbar/tbar->b,bbar,cbar;:OnOff On
set /Herwig/Particles/tbar/tbar->bbar,cbar,d;:OnOff On
set /Herwig/Particles/tbar/tbar->bbar,cbar,s;:OnOff On
set /Herwig/Particles/tbar/tbar->bbar,s,ubar;:OnOff On
set /Herwig/Particles/tbar/tbar->bbar,ubar,d;:OnOff On
set /Herwig/Particles/tbar/tbar->nu_ebar,e-,bbar;:OnOff Off
set /Herwig/Particles/tbar/tbar->nu_mubar,mu-,bbar;:OnOff Off
set /Herwig/Particles/tbar/tbar->nu_taubar,tau-,bbar;:OnOff Off
cd /Herwig/Generators
set LHCGenerator:EventHandler:LuminosityFunction:Energy 14000.0
#set LHCGenerator:EventHandler:BeamB /Herwig/Particles/pbar-
##################################################
#
# This section contains the user defined settings
#
##################################################
# Example hard process: Incoming proton, outgoing leptoquarks
cd /Herwig/NewPhysics
set HPConstructor:Processes Exclusive
insert HPConstructor:Incoming 0 /Herwig/Particles/u
insert HPConstructor:Incoming 1 /Herwig/Particles/ubar
insert HPConstructor:Incoming 2 /Herwig/Particles/d
insert HPConstructor:Incoming 3 /Herwig/Particles/dbar
insert HPConstructor:Incoming 4 /Herwig/Particles/s
insert HPConstructor:Incoming 5 /Herwig/Particles/sbar
insert HPConstructor:Incoming 6 /Herwig/Particles/c
insert HPConstructor:Incoming 7 /Herwig/Particles/cbar
insert HPConstructor:Incoming 8 /Herwig/Particles/g
# Comment out the following line if Axigluon model is selected
insert /Herwig/NewPhysics/HPConstructor:Excluded 0 /Herwig/Particles/g
insert /Herwig/NewPhysics/HPConstructor:Excluded 1 /Herwig/Particles/t
insert /Herwig/NewPhysics/HPConstructor:Excluded 2 /Herwig/Particles/tbar
insert HPConstructor:Outgoing 0 /Herwig/Particles/t
insert HPConstructor:Outgoing 1 /Herwig/Particles/tbar
# Intrinsic pT tune extrapolated to LHC energy
set /Herwig/Shower/Evolver:IntrinsicPtGaussian 2.2*GeV
cd /Herwig/Analysis
set Basics:CheckQuark false
# Cuts
cd /Herwig/Cuts
set JetKtCut:MinKT 0.0*GeV
set QCDCuts:MHatMax 14000.0*GeV
set EECuts:MHatMin 0.0*GeV
set PhotonKtCut:MinKT 0.0*GeV
set PhotonKtCut:MinEta -10.
set PhotonKtCut:MaxEta 10.
set MassCut:MinM 0.*GeV
cd /Herwig/Shower
set SplittingGenerator:ISR Yes
set SplittingGenerator:FSR Yes
cd /Herwig/EventHandlers
#set LHCHandler:CascadeHandler NULL
#set LHCHandler:HadronizationHandler NULL
#set LHCHandler:DecayHandler NULL
# Other parameters for run
cd /Herwig/Generators
# Turn off MPI
set LHCGenerator:EventHandler:CascadeHandler:MPIHandler NULL
set LHCGenerator:NumberOfEvents 10000000
set LHCGenerator:RandomNumberGenerator:Seed 31122001
set LHCGenerator:PrintEvent 1000
set LHCGenerator:MaxErrors 10000
-
-insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/HepMCFile
-set /Herwig/Analysis/HepMCFile:PrintEvent 10000
-set /Herwig/Analysis/HepMCFile:Format GenEvent
-set /Herwig/Analysis/HepMCFile:Units GeV_mm
+# HEPMC output if required
+#insert LHCGenerator:AnalysisHandlers 0 /Herwig/Analysis/HepMCFile
+#set /Herwig/Analysis/HepMCFile:PrintEvent 10000
+#set /Herwig/Analysis/HepMCFile:Format GenEvent
+#set /Herwig/Analysis/HepMCFile:Units GeV_mm
saverun LHC-ZP LHCGenerator
diff --git a/src/MSSM.model b/src/MSSM.model
--- a/src/MSSM.model
+++ b/src/MSSM.model
@@ -1,401 +1,401 @@
##################################################
# Common setup for the MSSM
#
# See LHC-MSSM.in or ILC-MSSM.in for example usage
#
# This file does not contain anything that
# users need to touch. User settings are in
# ???-MSSM.in
#
###################################################
#
# Create particle content
#
###################################################
cd /Herwig/Particles
create ThePEG::ParticleData H0
-setup H0 35 H0 500.0 0.0 0.0 0.0 0 0 1 0
+setup H0 35 H0 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData A0
-setup A0 36 A0 500.0 0.0 0.0 0.0 0 0 1 0
+setup A0 36 A0 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData H+
-setup H+ 37 H+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup H+ 37 H+ 500.0 0.0 0.0 0.0 3 0 1 1
create ThePEG::ParticleData H-
-setup H- -37 H- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup H- -37 H- 500.0 0.0 0.0 0.0 -3 0 1 1
makeanti H+ H-
create ThePEG::ParticleData ~d_L
-setup ~d_L 1000001 ~d_L 500.0 0.0 0.0 0.0 -1 3 1 0
+setup ~d_L 1000001 ~d_L 500.0 0.0 0.0 0.0 -1 3 1 1
create ThePEG::ParticleData ~d_Lbar
-setup ~d_Lbar -1000001 ~d_Lbar 500.0 0.0 0.0 0.0 1 -3 1 0
+setup ~d_Lbar -1000001 ~d_Lbar 500.0 0.0 0.0 0.0 1 -3 1 1
makeanti ~d_L ~d_Lbar
create ThePEG::ParticleData ~u_L
setup ~u_L 1000002 ~u_L 500.0 0.0 0.0 0.0 2 3 1 0
create ThePEG::ParticleData ~u_Lbar
-setup ~u_Lbar -1000002 ~u_Lbar 500.0 0.0 0.0 0.0 -2 -3 1 0
+setup ~u_Lbar -1000002 ~u_Lbar 500.0 0.0 0.0 0.0 -2 -3 1 1
makeanti ~u_L ~u_Lbar
create ThePEG::ParticleData ~s_L
-setup ~s_L 1000003 ~s_L 500.0 0.0 0.0 0.0 -1 3 1 0
+setup ~s_L 1000003 ~s_L 500.0 0.0 0.0 0.0 -1 3 1 1
create ThePEG::ParticleData ~s_Lbar
-setup ~s_Lbar -1000003 ~s_Lbar 500.0 0.0 0.0 0.0 1 -3 1 0
+setup ~s_Lbar -1000003 ~s_Lbar 500.0 0.0 0.0 0.0 1 -3 1 1
makeanti ~s_L ~s_Lbar
create ThePEG::ParticleData ~c_L
-setup ~c_L 1000004 ~c_L 500.0 0.0 0.0 0.0 2 3 1 0
+setup ~c_L 1000004 ~c_L 500.0 0.0 0.0 0.0 2 3 1 1
create ThePEG::ParticleData ~c_Lbar
-setup ~c_Lbar -1000004 ~c_Lbar 500.0 0.0 0.0 0.0 -2 -3 1 0
+setup ~c_Lbar -1000004 ~c_Lbar 500.0 0.0 0.0 0.0 -2 -3 1 1
makeanti ~c_L ~c_Lbar
create ThePEG::ParticleData ~b_1
-setup ~b_1 1000005 ~b_1 500.0 0.0 0.0 0.0 -1 3 1 0
+setup ~b_1 1000005 ~b_1 500.0 0.0 0.0 0.0 -1 3 1 1
create ThePEG::ParticleData ~b_1bar
-setup ~b_1bar -1000005 ~b_1bar 500.0 0.0 0.0 0.0 1 -3 1 0
+setup ~b_1bar -1000005 ~b_1bar 500.0 0.0 0.0 0.0 1 -3 1 1
makeanti ~b_1 ~b_1bar
create ThePEG::ParticleData ~t_1
-setup ~t_1 1000006 ~t_1 500.0 0.0 0.0 0.0 2 3 1 0
+setup ~t_1 1000006 ~t_1 500.0 0.0 0.0 0.0 2 3 1 1
create ThePEG::ParticleData ~t_1bar
-setup ~t_1bar -1000006 ~t_1bar 500.0 0.0 0.0 0.0 -2 -3 1 0
+setup ~t_1bar -1000006 ~t_1bar 500.0 0.0 0.0 0.0 -2 -3 1 1
makeanti ~t_1 ~t_1bar
create ThePEG::ParticleData ~e_L-
-setup ~e_L- 1000011 ~e_L- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup ~e_L- 1000011 ~e_L- 500.0 0.0 0.0 0.0 -3 0 1 1
create ThePEG::ParticleData ~e_L+
-setup ~e_L+ -1000011 ~e_L+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup ~e_L+ -1000011 ~e_L+ 500.0 0.0 0.0 0.0 3 0 1 1
makeanti ~e_L- ~e_L+
create ThePEG::ParticleData ~nu_eL
-setup ~nu_eL 1000012 ~nu_eL 500.0 0.0 0.0 0.0 0 0 1 0
+setup ~nu_eL 1000012 ~nu_eL 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData ~nu_eLbar
-setup ~nu_eLbar -1000012 ~nu_eLbar 500.0 0.0 0.0 0.0 0 0 1 0
+setup ~nu_eLbar -1000012 ~nu_eLbar 500.0 0.0 0.0 0.0 0 0 1 1
makeanti ~nu_eL ~nu_eLbar
create ThePEG::ParticleData ~mu_L-
-setup ~mu_L- 1000013 ~mu_L- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup ~mu_L- 1000013 ~mu_L- 500.0 0.0 0.0 0.0 -3 0 1 1
create ThePEG::ParticleData ~mu_L+
-setup ~mu_L+ -1000013 ~mu_L+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup ~mu_L+ -1000013 ~mu_L+ 500.0 0.0 0.0 0.0 3 0 1 1
makeanti ~mu_L- ~mu_L+
create ThePEG::ParticleData ~nu_muL
-setup ~nu_muL 1000014 ~nu_muL 500.0 0.0 0.0 0.0 0 0 1 0
+setup ~nu_muL 1000014 ~nu_muL 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData ~nu_muLbar
-setup ~nu_muLbar -1000014 ~nu_muLbar 500.0 0.0 0.0 0.0 0 0 1 0
+setup ~nu_muLbar -1000014 ~nu_muLbar 500.0 0.0 0.0 0.0 0 0 1 1
makeanti ~nu_muL ~nu_muLbar
create ThePEG::ParticleData ~tau_1-
-setup ~tau_1- 1000015 ~tau_1- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup ~tau_1- 1000015 ~tau_1- 500.0 0.0 0.0 0.0 -3 0 1 1
create ThePEG::ParticleData ~tau_1+
-setup ~tau_1+ -1000015 ~tau_1+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup ~tau_1+ -1000015 ~tau_1+ 500.0 0.0 0.0 0.0 3 0 1 1
makeanti ~tau_1- ~tau_1+
create ThePEG::ParticleData ~nu_tauL
-setup ~nu_tauL 1000016 ~nu_tauL 500.0 0.0 0.0 0.0 0 0 1 0
+setup ~nu_tauL 1000016 ~nu_tauL 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData ~nu_tauLbar
-setup ~nu_tauLbar -1000016 ~nu_tauLbar 500.0 0.0 0.0 0.0 0 0 1 0
+setup ~nu_tauLbar -1000016 ~nu_tauLbar 500.0 0.0 0.0 0.0 0 0 1 1
makeanti ~nu_tauL ~nu_tauLbar
create ThePEG::ParticleData ~g
-setup ~g 1000021 ~g 500.0 0.0 0.0 0.0 0 8 2 0
+setup ~g 1000021 ~g 500.0 0.0 0.0 0.0 0 8 2 1
create ThePEG::ParticleData ~chi_10
-setup ~chi_10 1000022 ~chi_10 500.0 0.0 0.0 0.0 0 0 2 0
+setup ~chi_10 1000022 ~chi_10 500.0 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData ~chi_20
-setup ~chi_20 1000023 ~chi_20 500.0 0.0 0.0 0.0 0 0 2 0
+setup ~chi_20 1000023 ~chi_20 500.0 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData ~chi_1+
-setup ~chi_1+ 1000024 ~chi_1+ 500.0 0.0 0.0 0.0 3 0 2 0
+setup ~chi_1+ 1000024 ~chi_1+ 500.0 0.0 0.0 0.0 3 0 2 1
create ThePEG::ParticleData ~chi_1-
-setup ~chi_1- -1000024 ~chi_1- 500.0 0.0 0.0 0.0 -3 0 2 0
+setup ~chi_1- -1000024 ~chi_1- 500.0 0.0 0.0 0.0 -3 0 2 1
makeanti ~chi_1+ ~chi_1-
create ThePEG::ParticleData ~chi_30
-setup ~chi_30 1000025 ~chi_30 500.0 0.0 0.0 0.0 0 0 2 0
+setup ~chi_30 1000025 ~chi_30 500.0 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData ~chi_40
-setup ~chi_40 1000035 ~chi_40 500.0 0.0 0.0 0.0 0 0 2 0
+setup ~chi_40 1000035 ~chi_40 500.0 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData ~chi_2+
-setup ~chi_2+ 1000037 ~chi_2+ 500.0 0.0 0.0 0.0 3 0 2 0
+setup ~chi_2+ 1000037 ~chi_2+ 500.0 0.0 0.0 0.0 3 0 2 1
create ThePEG::ParticleData ~chi_2-
-setup ~chi_2- -1000037 ~chi_2- 500.0 0.0 0.0 0.0 -3 0 2 0
+setup ~chi_2- -1000037 ~chi_2- 500.0 0.0 0.0 0.0 -3 0 2 1
makeanti ~chi_2+ ~chi_2-
create ThePEG::ParticleData ~gravitino
setup ~gravitino 1000039 ~gravitino 500.0 0.0 0.000010 0.0 0 0 4 1
create ThePEG::ParticleData ~d_R
-setup ~d_R 2000001 ~d_R 500.0 0.0 0.0 0.0 -1 3 1 0
+setup ~d_R 2000001 ~d_R 500.0 0.0 0.0 0.0 -1 3 1 1
create ThePEG::ParticleData ~d_Rbar
-setup ~d_Rbar -2000001 ~d_Rbar 500.0 0.0 0.0 0.0 1 -3 1 0
+setup ~d_Rbar -2000001 ~d_Rbar 500.0 0.0 0.0 0.0 1 -3 1 1
makeanti ~d_R ~d_Rbar
create ThePEG::ParticleData ~u_R
-setup ~u_R 2000002 ~u_R 500.0 0.0 0.0 0.0 2 3 1 0
+setup ~u_R 2000002 ~u_R 500.0 0.0 0.0 0.0 2 3 1 1
create ThePEG::ParticleData ~u_Rbar
-setup ~u_Rbar -2000002 ~u_Rbar 500.0 0.0 0.0 0.0 -2 -3 1 0
+setup ~u_Rbar -2000002 ~u_Rbar 500.0 0.0 0.0 0.0 -2 -3 1 1
makeanti ~u_R ~u_Rbar
create ThePEG::ParticleData ~s_R
-setup ~s_R 2000003 ~s_R 500.0 0.0 0.0 0.0 -1 3 1 0
+setup ~s_R 2000003 ~s_R 500.0 0.0 0.0 0.0 -1 3 1 1
create ThePEG::ParticleData ~s_Rbar
setup ~s_Rbar -2000003 ~s_Rbar 500.0 0.0 0.0 0.0 1 -3 1 0
makeanti ~s_R ~s_Rbar
create ThePEG::ParticleData ~c_R
-setup ~c_R 2000004 ~c_R 500.0 0.0 0.0 0.0 2 3 1 0
+setup ~c_R 2000004 ~c_R 500.0 0.0 0.0 0.0 2 3 1 1
create ThePEG::ParticleData ~c_Rbar
-setup ~c_Rbar -2000004 ~c_Rbar 500.0 0.0 0.0 0.0 -2 -3 1 0
+setup ~c_Rbar -2000004 ~c_Rbar 500.0 0.0 0.0 0.0 -2 -3 1 1
makeanti ~c_R ~c_Rbar
create ThePEG::ParticleData ~b_2
-setup ~b_2 2000005 ~b_2 500.0 0.0 0.0 0.0 -1 3 1 0
+setup ~b_2 2000005 ~b_2 500.0 0.0 0.0 0.0 -1 3 1 1
create ThePEG::ParticleData ~b_2bar
-setup ~b_2bar -2000005 ~b_2bar 500.0 0.0 0.0 0.0 1 -3 1 0
+setup ~b_2bar -2000005 ~b_2bar 500.0 0.0 0.0 0.0 1 -3 1 1
makeanti ~b_2 ~b_2bar
create ThePEG::ParticleData ~t_2
-setup ~t_2 2000006 ~t_2 500.0 0.0 0.0 0.0 2 3 1 0
+setup ~t_2 2000006 ~t_2 500.0 0.0 0.0 0.0 2 3 1 1
create ThePEG::ParticleData ~t_2bar
-setup ~t_2bar -2000006 ~t_2bar 500.0 0.0 0.0 0.0 -2 -3 1 0
+setup ~t_2bar -2000006 ~t_2bar 500.0 0.0 0.0 0.0 -2 -3 1 1
makeanti ~t_2 ~t_2bar
create ThePEG::ParticleData ~e_R-
-setup ~e_R- 2000011 ~e_R- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup ~e_R- 2000011 ~e_R- 500.0 0.0 0.0 0.0 -3 0 1 1
create ThePEG::ParticleData ~e_R+
-setup ~e_R+ -2000011 ~e_R+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup ~e_R+ -2000011 ~e_R+ 500.0 0.0 0.0 0.0 3 0 1 1
makeanti ~e_R- ~e_R+
create ThePEG::ParticleData ~nu_eR
setup ~nu_eR 2000012 ~nu_eR 500.0 0.0 0.000010 0.0 0 0 1 1
create ThePEG::ParticleData ~nu_eRbar
setup ~nu_eRbar -2000012 ~nu_eRbar 500.0 0.0 0.000010 0.0 0 0 1 1
makeanti ~nu_eR ~nu_eRbar
create ThePEG::ParticleData ~mu_R-
-setup ~mu_R- 2000013 ~mu_R- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup ~mu_R- 2000013 ~mu_R- 500.0 0.0 0.0 0.0 -3 0 1 1
create ThePEG::ParticleData ~mu_R+
-setup ~mu_R+ -2000013 ~mu_R+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup ~mu_R+ -2000013 ~mu_R+ 500.0 0.0 0.0 0.0 3 0 1 1
makeanti ~mu_R- ~mu_R+
create ThePEG::ParticleData ~nu_muR
setup ~nu_muR 2000014 ~nu_muR 500.0 0.0 0.000010 0.0 0 0 1 1
create ThePEG::ParticleData ~nu_muRbar
setup ~nu_muRbar -2000014 ~nu_muRbar 500.0 0.0 0.000010 0.0 0 0 1 1
makeanti ~nu_muR ~nu_muRbar
create ThePEG::ParticleData ~tau_2-
-setup ~tau_2- 2000015 ~tau_2- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup ~tau_2- 2000015 ~tau_2- 500.0 0.0 0.0 0.0 -3 0 1 1
create ThePEG::ParticleData ~tau_2+
-setup ~tau_2+ -2000015 ~tau_2+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup ~tau_2+ -2000015 ~tau_2+ 500.0 0.0 0.0 0.0 3 0 1 1
makeanti ~tau_2- ~tau_2+
create ThePEG::ParticleData ~nu_tauR
setup ~nu_tauR 2000016 ~nu_tauR 500.0 0.0 0.000010 0.0 0 0 1 1
create ThePEG::ParticleData ~nu_tauRbar
setup ~nu_tauRbar -2000016 ~nu_tauRbar 500.0 0.0 0.000010 0.0 0 0 1 1
makeanti ~nu_tauR ~nu_tauRbar
###################################################
#
# Main directory and model object
#
###################################################
mkdir /Herwig/NewPhysics/MSSM
cd /Herwig/NewPhysics/MSSM
create Herwig::MSSM Model HwSusy.so
# SM couplings
set Model:QCD/RunningAlphaS /Herwig/AlphaS
set Model:EW/RunningAlphaEM /Herwig/AlphaEM
set Model:EW/CKM /Herwig/CKM
set Model:RunningMass /Herwig/RunningMass
###################################################
#
# Vertices
#
###################################################
# create MSSM vertices
mkdir /Herwig/Vertices/MSSM
cd /Herwig/Vertices/MSSM
# MSSM
library HwSusy.so
create Herwig::SSWSSVertex MSSM_WSS
create Herwig::SSNFSVertex MSSM_NFS
create Herwig::SSGFSVertex MSSM_GFS
create Herwig::SSHSFSFVertex MSSM_HSS
create Herwig::SSCFSVertex MSSM_CFS
create Herwig::SSGSSVertex MSSM_GSS
create Herwig::SSGNGVertex MSSM_GNG
create Herwig::SSGGSQSQVertex MSSM_GGSS
create Herwig::SSGSGSGVertex MSSM_GGOGO
create Herwig::SSNNZVertex MSSM_NNZ
create Herwig::SSNNPVertex MSSM_NNP
create Herwig::SSCCZVertex MSSM_CCZ
create Herwig::SSCNWVertex MSSM_CNW
create Herwig::SSFFHVertex MSSM_FFH
create Herwig::SSGOGOHVertex MSSM_GOGOH
create Herwig::SSWWHVertex MSSM_WWH
create Herwig::SSWHHVertex MSSM_WHH
create Herwig::SSHHHVertex MSSM_HHH
create Herwig::SSHGGVertex MSSM_HGG
create Herwig::SSHPPVertex MSSM_HPP
create Herwig::SSWWHHVertex MSSM_WWHH
create Herwig::SSNCTVertex MSSM_NCT
create Herwig::SSGVNHVertex MSSM_GVNH
create Herwig::SSGVFSVertex MSSM_GVFS
create Herwig::SSGVNVVertex MSSM_GVNV
cd /Herwig/NewPhysics/MSSM
# SM vertices
set Model:Vertex/FFZ /Herwig/Vertices/FFZVertex
set Model:Vertex/FFW /Herwig/Vertices/FFWVertex
set Model:Vertex/FFG /Herwig/Vertices/FFGVertex
set Model:Vertex/FFP /Herwig/Vertices/FFPVertex
set Model:Vertex/GGG /Herwig/Vertices/GGGVertex
set Model:Vertex/GGGG /Herwig/Vertices/GGGGVertex
set Model:Vertex/WWW /Herwig/Vertices/WWWVertex
set Model:Vertex/WWWW /Herwig/Vertices/WWWWVertex
# MSSM feynman rules
set Model:Vertex/WSFSF /Herwig/Vertices/MSSM/MSSM_WSS
set Model:Vertex/NFSF /Herwig/Vertices/MSSM/MSSM_NFS
set Model:Vertex/GFSF /Herwig/Vertices/MSSM/MSSM_GFS
set Model:Vertex/HSFSF /Herwig/Vertices/MSSM/MSSM_HSS
set Model:Vertex/CFSF /Herwig/Vertices/MSSM/MSSM_CFS
set Model:Vertex/GSFSF /Herwig/Vertices/MSSM/MSSM_GSS
set Model:Vertex/GGSQSQ /Herwig/Vertices/MSSM/MSSM_GGSS
set Model:Vertex/GSGSG /Herwig/Vertices/MSSM/MSSM_GGOGO
set Model:Vertex/GNG /Herwig/Vertices/MSSM/MSSM_GNG
set Model:Vertex/NNZ /Herwig/Vertices/MSSM/MSSM_NNZ
set Model:Vertex/NNP /Herwig/Vertices/MSSM/MSSM_NNP
set Model:Vertex/CCZ /Herwig/Vertices/MSSM/MSSM_CCZ
set Model:Vertex/CNW /Herwig/Vertices/MSSM/MSSM_CNW
set Model:Vertex/FFH /Herwig/Vertices/MSSM/MSSM_FFH
set Model:Vertex/GOGOH /Herwig/Vertices/MSSM/MSSM_GOGOH
set Model:Vertex/WWH /Herwig/Vertices/MSSM/MSSM_WWH
set Model:Vertex/SSWHH /Herwig/Vertices/MSSM/MSSM_WHH
set Model:Vertex/HHH /Herwig/Vertices/MSSM/MSSM_HHH
set Model:Vertex/HGG /Herwig/Vertices/MSSM/MSSM_HGG
set Model:Vertex/HPP /Herwig/Vertices/MSSM/MSSM_HPP
set Model:Vertex/WWHH /Herwig/Vertices/MSSM/MSSM_WWHH
set Model:Vertex/NCT /Herwig/Vertices/MSSM/MSSM_NCT
set Model:Vertex/GVNH /Herwig/Vertices/MSSM/MSSM_GVNH
set Model:Vertex/GVFS /Herwig/Vertices/MSSM/MSSM_GVFS
set Model:Vertex/GVNV /Herwig/Vertices/MSSM/MSSM_GVNV
###################################################
#
# Set up spin correlation Decayers
#
###################################################
cd /Herwig/NewPhysics
set TwoBodyDC:CreateDecayModes No
set ThreeBodyDC:CreateDecayModes No
set WeakDecayConstructor:CreateDecayModes No
# switch on decays via weak current
insert DecayConstructor:NBodyDecayConstructors 0 WeakDecayConstructor
# exclude gravitino and effective vertices from three body decays
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GVNH
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GVFS
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GVNV
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_HGG
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_HPP
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_NNP
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GNG
insert ThreeBodyDC:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_NCT
# and hard processes
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GVNH
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GVFS
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GVNV
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_HGG
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_HPP
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_NNP
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_GNG
insert HPConstructor:ExcludedVertices 0 /Herwig/Vertices/MSSM/MSSM_NCT
insert NewModel:DecayParticles 0 /Herwig/Particles/~d_L
insert NewModel:DecayParticles 1 /Herwig/Particles/~u_L
insert NewModel:DecayParticles 2 /Herwig/Particles/~s_L
insert NewModel:DecayParticles 3 /Herwig/Particles/~c_L
insert NewModel:DecayParticles 4 /Herwig/Particles/~b_1
insert NewModel:DecayParticles 5 /Herwig/Particles/~t_1
insert NewModel:DecayParticles 6 /Herwig/Particles/~d_R
insert NewModel:DecayParticles 7 /Herwig/Particles/~u_R
insert NewModel:DecayParticles 8 /Herwig/Particles/~s_R
insert NewModel:DecayParticles 9 /Herwig/Particles/~c_R
insert NewModel:DecayParticles 10 /Herwig/Particles/~b_2
insert NewModel:DecayParticles 11 /Herwig/Particles/~t_2
insert NewModel:DecayParticles 12 /Herwig/Particles/~e_L-
insert NewModel:DecayParticles 13 /Herwig/Particles/~nu_eL
insert NewModel:DecayParticles 14 /Herwig/Particles/~mu_L-
insert NewModel:DecayParticles 15 /Herwig/Particles/~nu_muL
insert NewModel:DecayParticles 16 /Herwig/Particles/~tau_1-
insert NewModel:DecayParticles 17 /Herwig/Particles/~nu_tauL
insert NewModel:DecayParticles 18 /Herwig/Particles/~e_R-
insert NewModel:DecayParticles 19 /Herwig/Particles/~mu_R-
insert NewModel:DecayParticles 20 /Herwig/Particles/~tau_2-
insert NewModel:DecayParticles 21 /Herwig/Particles/~g
insert NewModel:DecayParticles 22 /Herwig/Particles/~chi_10
insert NewModel:DecayParticles 23 /Herwig/Particles/~chi_20
insert NewModel:DecayParticles 24 /Herwig/Particles/~chi_30
insert NewModel:DecayParticles 25 /Herwig/Particles/~chi_40
insert NewModel:DecayParticles 26 /Herwig/Particles/~chi_1+
insert NewModel:DecayParticles 27 /Herwig/Particles/~chi_2+
insert NewModel:DecayParticles 28 /Herwig/Particles/h0
insert NewModel:DecayParticles 29 /Herwig/Particles/H0
insert NewModel:DecayParticles 30 /Herwig/Particles/A0
insert NewModel:DecayParticles 31 /Herwig/Particles/H+
###################################################
#
# Shower stuff for coloured sparticles
#
###################################################
cd /Herwig/Shower
create Herwig::ZeroZeroOneSplitFn PhitoPhiGSplitFn
set PhitoPhiGSplitFn:InteractionType QCD
set PhitoPhiGSplitFn:ColourStructure TripletTripletOctet
create Herwig::HalfHalfOneSplitFn GluinotoGluinoGSplitFn
set GluinotoGluinoGSplitFn:InteractionType QCD
set GluinotoGluinoGSplitFn:ColourStructure OctetOctetOctet
cp SudakovCommon PhitoPhiGSudakov
set PhitoPhiGSudakov:SplittingFunction PhitoPhiGSplitFn
cp SudakovCommon GluinotoGluinoGSudakov
set GluinotoGluinoGSudakov:SplittingFunction GluinotoGluinoGSplitFn
do SplittingGenerator:AddFinalSplitting ~u_L->~u_L,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~d_L->~d_L,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~s_L->~s_L,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~c_L->~c_L,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~b_1->~b_1,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~t_1->~t_1,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~u_R->~u_R,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~d_R->~d_R,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~s_R->~s_R,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~c_R->~c_R,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~b_2->~b_2,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~t_2->~t_2,g; PhitoPhiGSudakov
do SplittingGenerator:AddFinalSplitting ~g->~g,g; GluinotoGluinoGSudakov
###################################################
# Set up the bsm framework
###################################################
cd /Herwig/NewPhysics
set MSSM/Model:ModelGenerator NewModel
###################################################
#
# Choose MSSM over SM
#
###################################################
cd /Herwig/Generators
set LEPGenerator:StandardModelParameters /Herwig/NewPhysics/MSSM/Model
set LHCGenerator:StandardModelParameters /Herwig/NewPhysics/MSSM/Model
###################################################
#
# Get Shower to decay SUSY particles
#
###################################################
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000001 # SUSY_d_L
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000002 # SUSY_u_L
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000003 # SUSY_s_L
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000004 # SUSY_c_L
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000005 # SUSY_b_1
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000006 # SUSY_t_1
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000011 # SUSY_e_Lminus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000012 # SUSY_nu_eL
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000013 # SUSY_mu_Lminus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000014 # SUSY_nu_muL
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000015 # SUSY_tau_1minus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000016 # SUSY_nu_tauL
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000021 # SUSY_g
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000022 # SUSY_chi_10
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000023 # SUSY_chi_20
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000024 # SUSY_chi_1plus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000025 # SUSY_chi_30
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000035 # SUSY_chi_40
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000037 # SUSY_chi_2plus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 1000039 # SUSY_gravitino
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000001 # SUSY_d_R
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000002 # SUSY_u_R
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000003 # SUSY_s_R
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000004 # SUSY_c_R
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000005 # SUSY_b_2
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000006 # SUSY_t_2
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000011 # SUSY_e_Rminus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000012 # SUSY_nu_eR
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000013 # SUSY_mu_Rminus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000014 # SUSY_nu_muR
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000015 # SUSY_tau_2minus
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 2000016 # SUSY_nu_tauR
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 35 # H0
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 36 # A0
insert /Herwig/Shower/ShowerHandler:DecayInShower 0 37 # H+
\ No newline at end of file
diff --git a/src/MUED.model b/src/MUED.model
--- a/src/MUED.model
+++ b/src/MUED.model
@@ -1,329 +1,329 @@
##################################################
# Common setup for Universal extra dimensions
#
# See LHC-MUED.in or ILC-MUED.in for example usage
#
# This file does not contain anything that
# users need to touch. User settings are in
# ???-MUED.in
#
###################################################
#
# Create particle content
#
###################################################
# The UED level-1 particles
cd /Herwig/Particles
create ThePEG::ParticleData KK1_d_L
-setup KK1_d_L 5100001 KK1_d_L 500. 0.0 0.0 0.0 -1 3 2 0
+setup KK1_d_L 5100001 KK1_d_L 500. 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData KK1_d_Lbar
-setup KK1_d_Lbar -5100001 KK1_d_Lbar 500. 0.0 0.0 0.0 1 -3 2 0
+setup KK1_d_Lbar -5100001 KK1_d_Lbar 500. 0.0 0.0 0.0 1 -3 2 1
makeanti KK1_d_L KK1_d_Lbar
create ThePEG::ParticleData KK1_u_L
-setup KK1_u_L 5100002 KK1_u_L 500. 0.0 0.0 0.0 2 3 2 0
+setup KK1_u_L 5100002 KK1_u_L 500. 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData KK1_u_Lbar
-setup KK1_u_Lbar -5100002 KK1_u_Lbar 500. 0.0 0.0 0.0 -2 -3 2 0
+setup KK1_u_Lbar -5100002 KK1_u_Lbar 500. 0.0 0.0 0.0 -2 -3 2 1
makeanti KK1_u_L KK1_u_Lbar
create ThePEG::ParticleData KK1_s_L
-setup KK1_s_L 5100003 KK1_s_L 500. 0.0 0.0 0.0 -1 3 2 0
+setup KK1_s_L 5100003 KK1_s_L 500. 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData KK1_s_Lbar
-setup KK1_s_Lbar -5100003 KK1_s_Lbar 500. 0.0 0.0 0.0 1 -3 2 0
+setup KK1_s_Lbar -5100003 KK1_s_Lbar 500. 0.0 0.0 0.0 1 -3 2 1
makeanti KK1_s_L KK1_s_Lbar
create ThePEG::ParticleData KK1_c_L
-setup KK1_c_L 5100004 KK1_c_L 500. 0.0 0.0 0.0 2 3 2 0
+setup KK1_c_L 5100004 KK1_c_L 500. 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData KK1_c_Lbar
-setup KK1_c_Lbar -5100004 KK1_c_Lbar 500. 0.0 0.0 0.0 -2 -3 2 0
+setup KK1_c_Lbar -5100004 KK1_c_Lbar 500. 0.0 0.0 0.0 -2 -3 2 1
makeanti KK1_c_L KK1_c_Lbar
create ThePEG::ParticleData KK1_b_1
-setup KK1_b_1 5100005 KK1_b_1 500. 0.0 0.0 0.0 -1 3 2 0
+setup KK1_b_1 5100005 KK1_b_1 500. 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData KK1_b_1bar
-setup KK1_b_1bar -5100005 KK1_b_1bar 500. 0.0 0.0 0.0 1 -3 2 0
+setup KK1_b_1bar -5100005 KK1_b_1bar 500. 0.0 0.0 0.0 1 -3 2 1
makeanti KK1_b_1 KK1_b_1bar
create ThePEG::ParticleData KK1_t_1
-setup KK1_t_1 5100006 KK1_t_1 500. 0.0 0.0 0.0 2 3 2 0
+setup KK1_t_1 5100006 KK1_t_1 500. 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData KK1_t_1bar
-setup KK1_t_1bar -5100006 KK1_t_1bar 500. 0.0 0.0 0.0 -2 -3 2 0
+setup KK1_t_1bar -5100006 KK1_t_1bar 500. 0.0 0.0 0.0 -2 -3 2 1
makeanti KK1_t_1 KK1_t_1bar
# Right
create ThePEG::ParticleData KK1_d_R
-setup KK1_d_R 6100001 KK1_d_R 500. 0.0 0.0 0.0 -1 3 2 0
+setup KK1_d_R 6100001 KK1_d_R 500. 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData KK1_d_Rbar
-setup KK1_d_Rbar -6100001 KK1_d_Rbar 500. 0.0 0.0 0.0 1 -3 2 0
+setup KK1_d_Rbar -6100001 KK1_d_Rbar 500. 0.0 0.0 0.0 1 -3 2 1
makeanti KK1_d_R KK1_d_Rbar
create ThePEG::ParticleData KK1_u_R
-setup KK1_u_R 6100002 KK1_u_R 500. 0.0 0.0 0.0 2 3 2 0
+setup KK1_u_R 6100002 KK1_u_R 500. 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData KK1_u_Rbar
-setup KK1_u_Rbar -6100002 KK1_u_Rbar 500. 0.0 0.0 0.0 -2 -3 2 0
+setup KK1_u_Rbar -6100002 KK1_u_Rbar 500. 0.0 0.0 0.0 -2 -3 2 1
makeanti KK1_u_R KK1_u_Rbar
create ThePEG::ParticleData KK1_s_R
-setup KK1_s_R 6100003 KK1_s_R 500. 0.0 0.0 0.0 -1 3 2 0
+setup KK1_s_R 6100003 KK1_s_R 500. 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData KK1_s_Rbar
-setup KK1_s_Rbar -6100003 KK1_s_Rbar 500. 0.0 0.0 0.0 1 -3 2 0
+setup KK1_s_Rbar -6100003 KK1_s_Rbar 500. 0.0 0.0 0.0 1 -3 2 1
makeanti KK1_s_R KK1_s_Rbar
create ThePEG::ParticleData KK1_c_R
-setup KK1_c_R 6100004 KK1_c_R 500. 0.0 0.0 0.0 2 3 2 0
+setup KK1_c_R 6100004 KK1_c_R 500. 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData KK1_c_Rbar
-setup KK1_c_Rbar -6100004 KK1_c_Rbar 500. 0.0 0.0 0.0 -2 -3 2 0
+setup KK1_c_Rbar -6100004 KK1_c_Rbar 500. 0.0 0.0 0.0 -2 -3 2 1
makeanti KK1_c_R KK1_c_Rbar
create ThePEG::ParticleData KK1_b_2
-setup KK1_b_2 6100005 KK1_b_2 500. 0.0 0.0 0.0 -1 3 2 0
+setup KK1_b_2 6100005 KK1_b_2 500. 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData KK1_b_2bar
-setup KK1_b_2bar -6100005 KK1_b_2bar 500. 0.0 0.0 0.0 1 -3 2 0
+setup KK1_b_2bar -6100005 KK1_b_2bar 500. 0.0 0.0 0.0 1 -3 2 1
makeanti KK1_b_2 KK1_b_2bar
create ThePEG::ParticleData KK1_t_2
-setup KK1_t_2 6100006 KK1_t_2 500. 0.0 0.0 0.0 2 3 2 0
+setup KK1_t_2 6100006 KK1_t_2 500. 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData KK1_t_2bar
-setup KK1_t_2bar -6100006 KK1_t_2bar 500. 0.0 0.0 0.0 -2 -3 2 0
+setup KK1_t_2bar -6100006 KK1_t_2bar 500. 0.0 0.0 0.0 -2 -3 2 1
makeanti KK1_t_2 KK1_t_2bar
create ThePEG::ParticleData KK1_e_L-
-setup KK1_e_L- 5100011 KK1_e_L- 500. 0.0 0.0 0.0 -3 0 2 0
+setup KK1_e_L- 5100011 KK1_e_L- 500. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData KK1_e_L+
-setup KK1_e_L+ -5100011 KK1_e_L+ 500. 0.0 0.0 0.0 3 0 2 0
+setup KK1_e_L+ -5100011 KK1_e_L+ 500. 0.0 0.0 0.0 3 0 2 1
makeanti KK1_e_L- KK1_e_L+
create ThePEG::ParticleData KK1_nu_eL
-setup KK1_nu_eL 5100012 KK1_nu_eL 500. 0.0 0.0 0.0 0 0 2 0
+setup KK1_nu_eL 5100012 KK1_nu_eL 500. 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData KK1_nu_eLbar
-setup KK1_nu_eLbar -5100012 KK1_nu_eLbar 500. 0.0 0.0 0.0 0 0 2 0
+setup KK1_nu_eLbar -5100012 KK1_nu_eLbar 500. 0.0 0.0 0.0 0 0 2 1
makeanti KK1_nu_eL KK1_nu_eLbar
create ThePEG::ParticleData KK1_mu_L-
-setup KK1_mu_L- 5100013 KK1_mu_L- 500. 0.0 0.0 0.0 -3 0 2 0
+setup KK1_mu_L- 5100013 KK1_mu_L- 500. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData KK1_mu_L+
-setup KK1_mu_L+ -5100013 KK1_mu_L+ 500. 0.0 0.0 0.0 3 0 2 0
+setup KK1_mu_L+ -5100013 KK1_mu_L+ 500. 0.0 0.0 0.0 3 0 2 1
makeanti KK1_mu_L- KK1_mu_L+
create ThePEG::ParticleData KK1_nu_muL
-setup KK1_nu_muL 5100014 KK1_nu_muL 500. 0.0 0.0 0.0 0 0 2 0
+setup KK1_nu_muL 5100014 KK1_nu_muL 500. 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData KK1_nu_muLbar
-setup KK1_nu_muLbar -5100014 KK1_nu_muLbar 500. 0.0 0.0 0.0 0 0 2 0
+setup KK1_nu_muLbar -5100014 KK1_nu_muLbar 500. 0.0 0.0 0.0 0 0 2 1
makeanti KK1_nu_muL KK1_nu_muLbar
create ThePEG::ParticleData KK1_tau_1-
-setup KK1_tau_1- 5100015 KK1_tau_1- 500. 0.0 0.0 0.0 -3 0 2 0
+setup KK1_tau_1- 5100015 KK1_tau_1- 500. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData KK1_tau_1+
-setup KK1_tau_1+ -5100015 KK1_tau_1+ 500. 0.0 0.0 0.0 3 0 2 0
+setup KK1_tau_1+ -5100015 KK1_tau_1+ 500. 0.0 0.0 0.0 3 0 2 1
makeanti KK1_tau_1- KK1_tau_1+
create ThePEG::ParticleData KK1_nu_tauL
-setup KK1_nu_tauL 5100016 KK1_nu_tauL 500. 0.0 0.0 0.0 0 0 2 0
+setup KK1_nu_tauL 5100016 KK1_nu_tauL 500. 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData KK1_nu_tauLbar
-setup KK1_nu_tauLbar -5100016 KK1_nu_tauLbar 500. 0.0 0.0 0.0 0 0 2 0
+setup KK1_nu_tauLbar -5100016 KK1_nu_tauLbar 500. 0.0 0.0 0.0 0 0 2 1
makeanti KK1_nu_tauL KK1_nu_tauLbar
create ThePEG::ParticleData KK1_e_R-
-setup KK1_e_R- 6100011 KK1_e_R- 500. 0.0 0.0 0.0 -3 0 2 0
+setup KK1_e_R- 6100011 KK1_e_R- 500. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData KK1_e_R+
-setup KK1_e_R+ -6100011 KK1_e_R+ 500. 0.0 0.0 0.0 3 0 2 0
+setup KK1_e_R+ -6100011 KK1_e_R+ 500. 0.0 0.0 0.0 3 0 2 1
makeanti KK1_e_R- KK1_e_R+
create ThePEG::ParticleData KK1_mu_R-
-setup KK1_mu_R- 6100013 KK1_mu_R- 500. 0.0 0.0 0.0 -3 0 2 0
+setup KK1_mu_R- 6100013 KK1_mu_R- 500. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData KK1_mu_R+
-setup KK1_mu_R+ -6100013 KK1_mu_R+ 500. 0.0 0.0 0.0 3 0 2 0
+setup KK1_mu_R+ -6100013 KK1_mu_R+ 500. 0.0 0.0 0.0 3 0 2 1
makeanti KK1_mu_R- KK1_mu_R+
create ThePEG::ParticleData KK1_tau_2-
-setup KK1_tau_2- 6100015 KK1_tau_2- 500. 0.0 0.0 0.0 -3 0 2 0
+setup KK1_tau_2- 6100015 KK1_tau_2- 500. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData KK1_tau_2+
-setup KK1_tau_2+ -6100015 KK1_tau_2+ 500. 0.0 0.0 0.0 3 0 2 0
+setup KK1_tau_2+ -6100015 KK1_tau_2+ 500. 0.0 0.0 0.0 3 0 2 1
makeanti KK1_tau_2- KK1_tau_2+
create ThePEG::ParticleData KK1_g
-setup KK1_g 5100021 KK1_g 500. 0.0 0.0 0.0 0 8 3 0
+setup KK1_g 5100021 KK1_g 500. 0.0 0.0 0.0 0 8 3 1
create ThePEG::ParticleData KK1_gamma
-setup KK1_gamma 5100022 KK1_gamma 500. 0.0 0.0 0.0 0 0 3 0
+setup KK1_gamma 5100022 KK1_gamma 500. 0.0 0.0 0.0 0 0 3 1
create ThePEG::ParticleData KK1_Z0
-setup KK1_Z0 5100023 KK1_Z0 500. 0.0 0.0 0.0 0 0 3 0
+setup KK1_Z0 5100023 KK1_Z0 500. 0.0 0.0 0.0 0 0 3 1
create ThePEG::ParticleData KK1_W+
-setup KK1_W+ 5100024 KK1_W+ 500. 0.0 0.0 0.0 3 0 3 0
+setup KK1_W+ 5100024 KK1_W+ 500. 0.0 0.0 0.0 3 0 3 1
create ThePEG::ParticleData KK1_W-
-setup KK1_W- -5100024 KK1_W- 500. 0.0 0.0 0.0 -3 0 3 0
+setup KK1_W- -5100024 KK1_W- 500. 0.0 0.0 0.0 -3 0 3 1
makeanti KK1_W+ KK1_W-
create ThePEG::ParticleData KK1_h0
-setup KK1_h0 5100025 KK1_h0 500.0 0.0 0.0 0.0 0 0 1 0
+setup KK1_h0 5100025 KK1_h0 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData KK1_A0
-setup KK1_A0 5100036 KK1_A0 500.0 0.0 0.0 0.0 0 0 1 0
+setup KK1_A0 5100036 KK1_A0 500.0 0.0 0.0 0.0 0 0 1 1
create ThePEG::ParticleData KK1_H+
-setup KK1_H+ 5100037 KK1_H+ 500.0 0.0 0.0 0.0 3 0 1 0
+setup KK1_H+ 5100037 KK1_H+ 500.0 0.0 0.0 0.0 3 0 1 1
create ThePEG::ParticleData KK1_H-
-setup KK1_H- -5100037 KK1_H- 500.0 0.0 0.0 0.0 -3 0 1 0
+setup KK1_H- -5100037 KK1_H- 500.0 0.0 0.0 0.0 -3 0 1 1
makeanti KK1_H+ KK1_H-
###################################################
#
# Main directory and model object
#
###################################################
mkdir /Herwig/NewPhysics/MUED
cd /Herwig/NewPhysics/MUED
create Herwig::UEDBase Model HwUED.so
# SM couplings
set Model:QCD/RunningAlphaS /Herwig/AlphaS
set Model:EW/RunningAlphaEM /Herwig/AlphaEM
set Model:EW/CKM /Herwig/CKM
set Model:RunningMass /Herwig/RunningMass
###################################################
#
# Vertices
#
###################################################
mkdir /Herwig/Vertices/MUED
cd /Herwig/Vertices/MUED
# create MUED vertices
library HwUED.so
create Herwig::UEDF1F1Z0Vertex UED_F1F1Z
create Herwig::UEDF1F1P0Vertex UED_F1F1P
create Herwig::UEDF1F1W0Vertex UED_F1F1W
create Herwig::UEDF1F1G0Vertex UED_F1F1G0
create Herwig::UEDF1F0G1Vertex UED_F1F0G1
create Herwig::UEDF1F0W1Vertex UED_F1F0W1
create Herwig::UEDF1F0H1Vertex UED_F1F0H1
create Herwig::UEDG1G1G0Vertex UED_G1G1G0
create Herwig::UEDG0G0G1G1Vertex UED_G0G0G1G1
create Herwig::UEDP0H1H1Vertex UED_P0H1H1
create Herwig::UEDZ0H1H1Vertex UED_Z0H1H1
create Herwig::UEDW0A1H1Vertex UED_W0A1H1
create Herwig::UEDZ0A1h1Vertex UED_Z0A1h1
create Herwig::UEDW0W1W1Vertex UED_W0W1W1
# SM vertices
cd /Herwig/NewPhysics/MUED
set Model:Vertex/FFZ /Herwig/Vertices/FFZVertex
set Model:Vertex/FFW /Herwig/Vertices/FFWVertex
set Model:Vertex/FFH /Herwig/Vertices/FFHVertex
set Model:Vertex/FFG /Herwig/Vertices/FFGVertex
set Model:Vertex/FFP /Herwig/Vertices/FFPVertex
set Model:Vertex/GGG /Herwig/Vertices/GGGVertex
set Model:Vertex/GGGG /Herwig/Vertices/GGGGVertex
set Model:Vertex/WWH /Herwig/Vertices/WWHVertex
set Model:Vertex/WWW /Herwig/Vertices/WWWVertex
set Model:Vertex/WWWW /Herwig/Vertices/WWWWVertex
set Model:Vertex/HGG /Herwig/Vertices/HGGVertex
set Model:Vertex/HPP /Herwig/Vertices/HPPVertex
# MUED Feynman rules
set Model:Vertex/F1F1Z /Herwig/Vertices/MUED/UED_F1F1Z
set Model:Vertex/F1F1P /Herwig/Vertices/MUED/UED_F1F1P
set Model:Vertex/F1F1W /Herwig/Vertices/MUED/UED_F1F1W
set Model:Vertex/F1F1G0 /Herwig/Vertices/MUED/UED_F1F1G0
set Model:Vertex/F1F0G1 /Herwig/Vertices/MUED/UED_F1F0G1
set Model:Vertex/F1F0W1 /Herwig/Vertices/MUED/UED_F1F0W1
set Model:Vertex/F1F0H1 /Herwig/Vertices/MUED/UED_F1F0H1
set Model:Vertex/G1G1G0 /Herwig/Vertices/MUED/UED_G1G1G0
set Model:Vertex/G0G0G1G1 /Herwig/Vertices/MUED/UED_G0G0G1G1
set Model:Vertex/P0H1H1 /Herwig/Vertices/MUED/UED_P0H1H1
set Model:Vertex/Z0H1H1 /Herwig/Vertices/MUED/UED_Z0H1H1
set Model:Vertex/W0A1H1 /Herwig/Vertices/MUED/UED_W0A1H1
set Model:Vertex/Z0A1h1 /Herwig/Vertices/MUED/UED_Z0A1h1
set Model:Vertex/W0W1W1 /Herwig/Vertices/MUED/UED_W0W1W1
###################################################
#
# Set up spin correlation Decayers and remove SM
# Higgs related things
#
###################################################
cd /Herwig/Particles
set h0:Width_generator NULL
set h0:Mass_generator NULL
set h0/h0->b,bbar;:OnOff Off
set h0/h0->b,bbar;:BranchingRatio 0.0
set h0/h0->W+,W-;:OnOff Off
set h0/h0->W+,W-;:BranchingRatio 0.0
set h0/h0->tau-,tau+;:OnOff Off
set h0/h0->tau-,tau+;:BranchingRatio 0.0
set h0/h0->g,g;:OnOff Off
set h0/h0->g,g;:BranchingRatio 0.0
set h0/h0->c,cbar;:OnOff Off
set h0/h0->c,cbar;:BranchingRatio 0.0
set h0/h0->Z0,Z0;:OnOff Off
set h0/h0->Z0,Z0;:BranchingRatio 0.0
set h0/h0->gamma,gamma;:OnOff Off
set h0/h0->gamma,gamma;:BranchingRatio 0.0
set h0/h0->mu-,mu+;:OnOff Off
set h0/h0->mu-,mu+;:BranchingRatio 0.0
set h0/h0->t,tbar;:OnOff Off
set h0/h0->t,tbar;:BranchingRatio 0.0
cd /Herwig/NewPhysics
set TwoBodyDC:CreateDecayModes Yes
set ThreeBodyDC:CreateDecayModes Yes
insert NewModel:DecayParticles 0 /Herwig/Particles/KK1_d_L
insert NewModel:DecayParticles 1 /Herwig/Particles/KK1_u_L
insert NewModel:DecayParticles 2 /Herwig/Particles/KK1_s_L
insert NewModel:DecayParticles 3 /Herwig/Particles/KK1_c_L
insert NewModel:DecayParticles 4 /Herwig/Particles/KK1_b_1
insert NewModel:DecayParticles 5 /Herwig/Particles/KK1_t_1
insert NewModel:DecayParticles 6 /Herwig/Particles/KK1_d_R
insert NewModel:DecayParticles 7 /Herwig/Particles/KK1_u_R
insert NewModel:DecayParticles 8 /Herwig/Particles/KK1_s_R
insert NewModel:DecayParticles 9 /Herwig/Particles/KK1_c_R
insert NewModel:DecayParticles 10 /Herwig/Particles/KK1_b_2
insert NewModel:DecayParticles 11 /Herwig/Particles/KK1_t_2
insert NewModel:DecayParticles 12 /Herwig/Particles/KK1_e_L-
insert NewModel:DecayParticles 13 /Herwig/Particles/KK1_nu_eL
insert NewModel:DecayParticles 14 /Herwig/Particles/KK1_mu_L-
insert NewModel:DecayParticles 15 /Herwig/Particles/KK1_nu_muL
insert NewModel:DecayParticles 16 /Herwig/Particles/KK1_tau_1-
insert NewModel:DecayParticles 17 /Herwig/Particles/KK1_nu_tauL
insert NewModel:DecayParticles 18 /Herwig/Particles/KK1_e_R-
insert NewModel:DecayParticles 19 /Herwig/Particles/KK1_mu_R-
insert NewModel:DecayParticles 20 /Herwig/Particles/KK1_tau_2-
insert NewModel:DecayParticles 21 /Herwig/Particles/KK1_g
insert NewModel:DecayParticles 22 /Herwig/Particles/KK1_Z0
insert NewModel:DecayParticles 23 /Herwig/Particles/KK1_W+
insert NewModel:DecayParticles 24 /Herwig/Particles/h0
insert NewModel:DecayParticles 25 /Herwig/Particles/KK1_h0
insert NewModel:DecayParticles 26 /Herwig/Particles/KK1_A0
insert NewModel:DecayParticles 27 /Herwig/Particles/KK1_H+
###################################################
#
# Shower stuff for coloured sparticles
#
###################################################
cd /Herwig/Shower
insert ShowerHandler:DecayInShower 0 5100001
insert ShowerHandler:DecayInShower 1 5100002
insert ShowerHandler:DecayInShower 2 5100003
insert ShowerHandler:DecayInShower 3 5100004
insert ShowerHandler:DecayInShower 4 5100005
insert ShowerHandler:DecayInShower 5 5100006
insert ShowerHandler:DecayInShower 6 5100011
insert ShowerHandler:DecayInShower 7 5100012
insert ShowerHandler:DecayInShower 8 5100013
insert ShowerHandler:DecayInShower 9 5100014
insert ShowerHandler:DecayInShower 10 5100015
insert ShowerHandler:DecayInShower 11 5100016
insert ShowerHandler:DecayInShower 12 6100001
insert ShowerHandler:DecayInShower 13 6100002
insert ShowerHandler:DecayInShower 14 6100003
insert ShowerHandler:DecayInShower 15 6100004
insert ShowerHandler:DecayInShower 16 6100005
insert ShowerHandler:DecayInShower 17 6100006
insert ShowerHandler:DecayInShower 18 6100011
insert ShowerHandler:DecayInShower 19 6100013
insert ShowerHandler:DecayInShower 20 6100015
insert ShowerHandler:DecayInShower 21 5100021
insert ShowerHandler:DecayInShower 22 5100022
insert ShowerHandler:DecayInShower 23 5100023
insert ShowerHandler:DecayInShower 24 5100024
insert ShowerHandler:DecayInShower 25 5100025
insert ShowerHandler:DecayInShower 26 5100036
insert ShowerHandler:DecayInShower 27 5100037
do SplittingGenerator:AddFinalSplitting KK1_u_L->KK1_u_L,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_d_L->KK1_d_L,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_s_L->KK1_s_L,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_c_L->KK1_c_L,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_b_1->KK1_b_1,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_t_1->KK1_t_1,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_u_R->KK1_u_R,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_d_R->KK1_d_R,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_s_R->KK1_s_R,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_c_R->KK1_c_R,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_b_2->KK1_b_2,g; QtoQGSudakov
do SplittingGenerator:AddFinalSplitting KK1_t_2->KK1_t_2,g; QtoQGSudakov
###################################################
# Set up the model framework
###################################################
cd /Herwig/NewPhysics
set MUED/Model:ModelGenerator NewModel
###################################################
#
# Choose MSSM over SM
#
###################################################
cd /Herwig/Generators
set LEPGenerator:StandardModelParameters /Herwig/NewPhysics/MUED/Model
set LHCGenerator:StandardModelParameters /Herwig/NewPhysics/MUED/Model
diff --git a/src/defaults/Decays.in b/src/defaults/Decays.in
--- a/src/defaults/Decays.in
+++ b/src/defaults/Decays.in
@@ -1,72 +1,82 @@
#######################################################
# Setup of default decay handlers.
#
# Nothing interesting for users here. To set up or
# modify decay modes in your own input files, use
# the xyz_decays.in files as an example.
#######################################################
mkdir /Herwig/Decays
cd /Herwig/Decays
# create the DecayHandler
create Herwig::HwDecayHandler DecayHandler
#######################################################
#
# New Decays
#
#######################################################
read decayers.in
cd /Herwig/Particles
read quark_decays.in
read baryon_decays.in
read boson_decays.in
read lepton_decays.in
read meson_decays.in
+# these must be stable
+set /Herwig/Particles/mu-:Stable Stable
+set /Herwig/Particles/mu+:Stable Stable
+set /Herwig/Particles/pi-:Stable Stable
+set /Herwig/Particles/pi+:Stable Stable
+set /Herwig/Particles/K-:Stable Stable
+set /Herwig/Particles/K+:Stable Stable
+set /Herwig/Particles/n0:Stable Stable
+set /Herwig/Particles/nbar0:Stable Stable
+
cd /Herwig/Hadronization
# with new decays these should not be made by the hadronization
# particles only as intermediates in certain decays
insert HadronSelector:Forbidden 0 /Herwig/Particles/kappa+
insert HadronSelector:Forbidden 0 /Herwig/Particles/kappa0
insert HadronSelector:Forbidden 0 /Herwig/Particles/kappabar0
insert HadronSelector:Forbidden 0 /Herwig/Particles/kappa-
insert HadronSelector:Forbidden 0 /Herwig/Particles/sigma
# exclude 2nd excited 10plet
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambda(1520)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambdabar(1520)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambda_c(2625)+
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambda_c(2625)bar-
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambda_b1*0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambda_b1*bar0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_c(2815)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_c(2815)bar0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_c(2815)+
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_c(2815)bar-
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_b1*0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_b1*bar0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_b1*-
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi_b1*bar+
# exclude 3rd excited 45 plet
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambda(1690)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Lambdabar(1690)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/p(1520)+
insert HadronSelector:Forbidden 0 /Herwig/Particles/pbar(1520)-
insert HadronSelector:Forbidden 0 /Herwig/Particles/n(1520)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/nbar(1520)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Sigma(1670)-
insert HadronSelector:Forbidden 0 /Herwig/Particles/Sigmabar(1670)+
insert HadronSelector:Forbidden 0 /Herwig/Particles/Sigma(1670)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Sigmabar(1670)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Sigma(1670)+
insert HadronSelector:Forbidden 0 /Herwig/Particles/Sigmabar(1670)-
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi(1820)-
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xibar(1820)+
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xi(1820)0
insert HadronSelector:Forbidden 0 /Herwig/Particles/Xibar(1820)0
mkdir /Herwig/Widths
cd /Herwig/Widths
read widths.in
\ No newline at end of file
diff --git a/src/defaults/Hadronization.in b/src/defaults/Hadronization.in
--- a/src/defaults/Hadronization.in
+++ b/src/defaults/Hadronization.in
@@ -1,101 +1,101 @@
############################################################
# Setup of default hadronization
#
# There are no user servicable parts inside.
#
# Anything that follows below should only be touched if you
# know what you're doing.
#############################################################
cd /Herwig/Particles
create ThePEG::ParticleData Cluster
-setup Cluster 81 Cluster 0.00990 0.0 0.0 0.0 0 0 0 0
+setup Cluster 81 Cluster 0.00990 0.0 0.0 0.0 0 0 0 1
create ThePEG::ParticleData Remnant
-setup Remnant 82 Remnant 0.00990 0.0 0.0 0.0 0 0 0 0
+setup Remnant 82 Remnant 0.00990 0.0 0.0 0.0 0 0 0 1
mkdir /Herwig/Hadronization
cd /Herwig/Hadronization
create Herwig::ClusterHadronizationHandler ClusterHadHandler
create Herwig::PartonSplitter PartonSplitter
create Herwig::ClusterFinder ClusterFinder
create Herwig::ColourReconnector ColourReconnector
create Herwig::ClusterFissioner ClusterFissioner
create Herwig::LightClusterDecayer LightClusterDecayer
create Herwig::ClusterDecayer ClusterDecayer
create Herwig::HwppSelector HadronSelector
newdef ClusterHadHandler:PartonSplitter PartonSplitter
newdef ClusterHadHandler:ClusterFinder ClusterFinder
newdef ClusterHadHandler:ColourReconnector ColourReconnector
newdef ClusterHadHandler:ClusterFissioner ClusterFissioner
newdef ClusterHadHandler:LightClusterDecayer LightClusterDecayer
newdef ClusterHadHandler:ClusterDecayer ClusterDecayer
newdef ClusterHadHandler:MinVirtuality2 0.1*GeV2
newdef ClusterHadHandler:MaxDisplacement 1.0e-10*millimeter
newdef ClusterHadHandler:UnderlyingEventHandler NULL
##################################################
# The UA5 soft underlying event model
# (disabled by default)
##################################################
create Herwig::UA5Handler UA5 HwUA5.so
newdef UA5:ClusterFissioner ClusterFissioner
newdef UA5:ClusterDecayer ClusterDecayer
#set ClusterHadHandler:UnderlyingEventHandler UA5
##################################################
newdef ClusterFissioner:HadronSelector HadronSelector
newdef LightClusterDecayer:HadronSelector HadronSelector
newdef ClusterDecayer:HadronSelector HadronSelector
newdef ColourReconnector:ColourReconnection Yes
newdef ColourReconnector:ReconnectionProbability 0.54
newdef ColourReconnector:Algorithm Plain
newdef ColourReconnector:InitialTemperature 0.01
newdef ColourReconnector:AnnealingFactor 0.21
newdef ColourReconnector:AnnealingSteps 10
newdef ColourReconnector:TriesPerStepFactor 0.66
# Clustering parameters for light quarks
newdef ClusterFissioner:ClMaxLight 3.25*GeV
newdef ClusterFissioner:ClPowLight 1.28
newdef ClusterFissioner:PSplitLight 1.14
newdef ClusterDecayer:ClDirLight 1
newdef ClusterDecayer:ClSmrLight 0.78
# Clustering parameters for b-quarks
newdef ClusterFissioner:ClMaxBottom 3.2*GeV
newdef ClusterFissioner:ClPowBottom 1.24
newdef ClusterFissioner:PSplitBottom 0.75
newdef ClusterDecayer:ClDirBottom 1
newdef ClusterDecayer:ClSmrBottom 0.00
newdef LightClusterDecayer:SingleHadronLimitBottom 0.12
# Clustering parameters for c-quarks
newdef ClusterFissioner:ClMaxCharm 2.95*GeV
newdef ClusterFissioner:ClPowCharm 1.52
newdef ClusterFissioner:PSplitCharm 1.11
newdef ClusterDecayer:ClDirCharm 1
newdef ClusterDecayer:ClSmrCharm 0.26
newdef LightClusterDecayer:SingleHadronLimitCharm 0.0
# Clustering parameters for exotic quarks
# (e.g. hadronizing Susy particles)
newdef ClusterFissioner:ClMaxExotic 2.7*GeV
newdef ClusterFissioner:ClPowExotic 1.46
newdef ClusterFissioner:PSplitExotic 1.00
newdef ClusterDecayer:ClDirExotic 1
newdef ClusterDecayer:ClSmrExotic 0.78
newdef LightClusterDecayer:SingleHadronLimitExotic 0.1
#
newdef HadronSelector:PwtDquark 1.0
newdef HadronSelector:PwtUquark 1.0
newdef HadronSelector:PwtSquark 0.68
newdef HadronSelector:PwtCquark 1.0
newdef HadronSelector:PwtBquark 1.0
newdef HadronSelector:PwtDIquark 0.49
newdef HadronSelector:SngWt 0.74
newdef HadronSelector:DecWt 0.62
newdef HadronSelector:Mode 1
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Jan 20, 9:40 PM (1 d, 2 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4172413
Default Alt Text
(222 KB)
Attached To
rHERWIGHG herwighg
Event Timeline
Log In to Comment