Page MenuHomeHEPForge

No OneTemporary

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

Mime Type
text/x-diff
Expires
Mon, Jan 20, 9:40 PM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4172413
Default Alt Text
(222 KB)

Event Timeline