Page MenuHomeHEPForge

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/MatrixElement/Hadron/MEPP2VV.cc b/MatrixElement/Hadron/MEPP2VV.cc
--- a/MatrixElement/Hadron/MEPP2VV.cc
+++ b/MatrixElement/Hadron/MEPP2VV.cc
@@ -1,539 +1,540 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the MEPP2VV class.
//
#include "MEPP2VV.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/MatrixElement/Tree2toNDiagram.h"
#include "ThePEG/Handlers/StandardXComb.h"
#include "Herwig++/Models/StandardModel/StandardModel.h"
#include "Herwig++/MatrixElement/HardVertex.h"
using namespace Herwig;
MEPP2VV::MEPP2VV() : process_(0), maxflavour_(5), massOption_(2)
{}
unsigned int MEPP2VV::orderInAlphaS() const {
return 0;
}
unsigned int MEPP2VV::orderInAlphaEW() const {
return 2;
}
ClassDescription<MEPP2VV> MEPP2VV::initMEPP2VV;
// Definition of the static class description member.
void MEPP2VV::Init() {
static ClassDocumentation<MEPP2VV> documentation
("The MEPP2VV class simulates the production of W+W-, "
"W+/-Z0 and Z0Z0 in hadron-hadron collisions using the 2->2"
" matrix elements");
static Switch<MEPP2VV,unsigned int> interfaceProcess
("Process",
"Which processes to include",
&MEPP2VV::process_, 0, false, false);
static SwitchOption interfaceProcessAll
(interfaceProcess,
"All",
"Include all the processes",
0);
static SwitchOption interfaceProcessWW
(interfaceProcess,
"WW",
"Only include W+W-",
1);
static SwitchOption interfaceProcessWZ
(interfaceProcess,
"WZ",
"Only include W+/-Z",
2);
static SwitchOption interfaceProcessZZ
(interfaceProcess,
"ZZ",
"Only include ZZ",
3);
static SwitchOption interfaceProcessWpZ
(interfaceProcess,
"WpZ",
"Only include W+ Z",
4);
static SwitchOption interfaceProcessWmZ
(interfaceProcess,
"WmZ",
"Only include W- Z",
5);
static Parameter<MEPP2VV,int> interfaceMaximumFlavour
("MaximumFlavour",
"The maximum flavour allowed for the incoming quarks",
&MEPP2VV::maxflavour_, 5, 2, 5,
false, false, Interface::limited);
static Switch<MEPP2VV,unsigned int> interfaceMassOption
("MassOption",
"Option for the treatment of the boson masses",
&MEPP2VV::massOption_, 1, false, false);
static SwitchOption interfaceMassOptionOnMassShell
(interfaceMassOption,
"OnMassShell",
"The boson is produced on its mass shell",
1);
static SwitchOption interfaceMassOption2
(interfaceMassOption,
"OffShell",
"The bosons are generated off-shell using the mass and width generator.",
2);
}
void MEPP2VV::persistentOutput(PersistentOStream & os) const {
os << FFPvertex_ << FFWvertex_ << FFZvertex_ << WWWvertex_
<< process_ << massOption_ << maxflavour_;
}
void MEPP2VV::persistentInput(PersistentIStream & is, int) {
is >> FFPvertex_ >> FFWvertex_ >> FFZvertex_ >> WWWvertex_
>> process_ >> massOption_ >> maxflavour_;
}
Energy2 MEPP2VV::scale() const {
return sHat();
}
IBPtr MEPP2VV::clone() const {
return new_ptr(*this);
}
IBPtr MEPP2VV::fullclone() const {
return new_ptr(*this);
}
void MEPP2VV::doinit() {
HwMEBase::doinit();
// mass option
massOption(vector<unsigned int>(2,massOption_));
rescalingOption(2);
// get the vertices we need
// get a pointer to the standard model object in the run
static const tcHwSMPtr hwsm
= dynamic_ptr_cast<tcHwSMPtr>(standardModel());
if (!hwsm) throw InitException() << "hwsm pointer is null in"
<< " MEPP2VV::doinit()"
<< Exception::abortnow;
// get pointers to all required Vertex objects
FFZvertex_ = hwsm->vertexFFZ();
FFPvertex_ = hwsm->vertexFFP();
WWWvertex_ = hwsm->vertexWWW();
FFWvertex_ = hwsm->vertexFFW();
}
double MEPP2VV::getCosTheta(double ctmin, double ctmax, const double * r) {
double rand = *r;
Energy2 m12 = sqr(meMomenta()[2].mass());
Energy2 m22 = sqr(meMomenta()[3].mass());
Energy2 D1 = sHat()-m12-m22;
Energy4 lambda = sqr(D1) - 4*m12*m22;
double D = D1 / sqrt(lambda);
if(mePartonData()[2]->id()==ParticleID::Z0&&
mePartonData()[3]->id()==ParticleID::Z0) {
double prob = 0.5;
double costh;
double fraction1 = (D-ctmax)/(D-ctmin);
double fraction2 = (D+ctmin)/(D+ctmax);
if(rand<=prob) {
rand /=prob;
costh = D - (D - ctmin) * pow(fraction1, rand);
}
else {
rand = (rand-prob)/(1.-prob);
costh =-D + (D + ctmax) * pow(fraction2, rand);
}
jacobian(1./(prob /((costh - D) * log(fraction1))-
(1.-prob)/((costh + D) * log(fraction2))));
return costh;
}
else {
double fraction = (D-ctmax)/(D-ctmin);
double costh = D - (D - ctmin) * pow(fraction, rand);
jacobian((costh - D) * log(fraction));
return costh;
}
}
Selector<const ColourLines *>
MEPP2VV::colourGeometries(tcDiagPtr diag) const {
static ColourLines cs("1 -2");
static ColourLines ct("1 2 -3");
Selector<const ColourLines *> sel;
if(abs(diag->partons()[2]->id())==24&&abs(diag->partons()[3]->id())==24) {
if(diag->id()<=-4) sel.insert(1.0, &cs);
else sel.insert(1.0, &ct);
}
else if(abs(diag->partons()[2]->id())==24&&diag->partons()[3]->id()==23) {
if(diag->id()==-3) sel.insert(1.0, &cs);
else sel.insert(1.0, &ct);
}
else {
sel.insert(1.0, &ct);
}
return sel;
}
void MEPP2VV::getDiagrams() const {
typedef std::vector<pair<tcPDPtr,tcPDPtr> > Pairvector;
tcPDPtr wPlus = getParticleData(ParticleID::Wplus );
tcPDPtr wMinus = getParticleData(ParticleID::Wminus);
tcPDPtr z0 = getParticleData(ParticleID::Z0 );
tcPDPtr gamma = getParticleData(ParticleID::gamma);
// W+ W-
if(process_==0||process_==1) {
for(int ix=1;ix<=maxflavour_;++ix) {
tcPDPtr qk = getParticleData(ix);
tcPDPtr w1 = ix%2==0 ? wPlus : wMinus;
tcPDPtr w2 = ix%2!=0 ? wPlus : wMinus;
for(int iy=1;iy<=maxflavour_;++iy) {
if(abs(ix-iy)%2!=0) continue;
tcPDPtr qb = getParticleData(-iy);
// s channel photon
add(new_ptr((Tree2toNDiagram(2), qk, qb, 1, gamma, 3, w1, 3, w2, -4)));
// s-channel Z
add(new_ptr((Tree2toNDiagram(2), qk, qb, 1, z0, 3, w1, 3, w2, -5)));
// t-channel
if(ix%2==0) {
int idiag=0;
for(int iz=1;iz<=5;iz+=2) {
--idiag;
tcPDPtr tc = getParticleData(iz);
add(new_ptr((Tree2toNDiagram(3), qk, tc, qb, 1, w1, 2, w2, idiag)));
}
}
else {
int idiag=0;
for(int iz=2;iz<=6;iz+=2) {
--idiag;
tcPDPtr tc = getParticleData(iz);
add(new_ptr((Tree2toNDiagram(3), qk, tc, qb, 1, w1, 2, w2, idiag)));
}
}
}
}
}
// W+/- Z
if(process_==0||process_==2||process_==4||process_==5) {
// possible parents
Pairvector parentpair;
parentpair.reserve(6);
// don't even think of putting 'break' in here!
switch(maxflavour_) {
case 5:
parentpair.push_back(make_pair(getParticleData(ParticleID::b),
getParticleData(ParticleID::cbar)));
parentpair.push_back(make_pair(getParticleData(ParticleID::b),
getParticleData(ParticleID::ubar)));
case 4:
parentpair.push_back(make_pair(getParticleData(ParticleID::s),
getParticleData(ParticleID::cbar)));
parentpair.push_back(make_pair(getParticleData(ParticleID::d),
getParticleData(ParticleID::cbar)));
case 3:
parentpair.push_back(make_pair(getParticleData(ParticleID::s),
getParticleData(ParticleID::ubar)));
case 2:
parentpair.push_back(make_pair(getParticleData(ParticleID::d),
getParticleData(ParticleID::ubar)));
default:
;
}
// W+ Z
if(process_==0||process_==2||process_==4) {
for(unsigned int ix=0;ix<parentpair.size();++ix) {
add(new_ptr((Tree2toNDiagram(3), parentpair[ix].second->CC(),
parentpair[ix].first, parentpair[ix].first->CC(),
1, wPlus, 2, z0, -1)));
add(new_ptr((Tree2toNDiagram(3), parentpair[ix].second->CC(),
parentpair[ix].second->CC() , parentpair[ix].first->CC(),
2, wPlus, 1, z0, -2)));
add(new_ptr((Tree2toNDiagram(2), parentpair[ix].second->CC(),
parentpair[ix].first->CC(), 1, wPlus, 3, wPlus, 3, z0, -3)));
}
}
// W- Z
if(process_==0||process_==2||process_==5) {
for(unsigned int ix=0;ix<parentpair.size();++ix) {
add(new_ptr((Tree2toNDiagram(3), parentpair[ix].first,
parentpair[ix].second->CC(),
parentpair[ix].second, 1, wMinus, 2, z0, -1)));
add(new_ptr((Tree2toNDiagram(3), parentpair[ix].first,
parentpair[ix].first , parentpair[ix].second, 2, wMinus, 1, z0, -2)));
add(new_ptr((Tree2toNDiagram(2), parentpair[ix].first,
parentpair[ix].second, 1, wMinus, 3, wMinus, 3, z0, -3)));
}
}
}
// Z Z
if(process_==0||process_==3) {
for(int ix=1;ix<=maxflavour_;++ix) {
tcPDPtr qk = getParticleData(ix);
tcPDPtr qb = qk->CC();
add(new_ptr((Tree2toNDiagram(3), qk, qk, qb, 1, z0, 2, z0, -1)));
add(new_ptr((Tree2toNDiagram(3), qk, qk, qb, 2, z0, 1, z0, -2)));
}
}
}
Selector<MEBase::DiagramIndex>
MEPP2VV::diagrams(const DiagramVector & diags) const {
Selector<DiagramIndex> sel;
for ( DiagramIndex i = 0; i < diags.size(); ++i )
sel.insert(meInfo()[abs(diags[i]->id())-1], i);
return sel;
}
double MEPP2VV::me2() const {
// setup momenta and particle data for the external wavefunctions
// incoming
SpinorWaveFunction em_in( meMomenta()[0],mePartonData()[0],incoming);
SpinorBarWaveFunction ep_in( meMomenta()[1],mePartonData()[1],incoming);
// outgoing
VectorWaveFunction v1_out(meMomenta()[2],mePartonData()[2],outgoing);
VectorWaveFunction v2_out(meMomenta()[3],mePartonData()[3],outgoing);
vector<SpinorWaveFunction> f1;
vector<SpinorBarWaveFunction> a1;
vector<VectorWaveFunction> v1,v2;
// calculate the wavefunctions
for(unsigned int ix=0;ix<3;++ix) {
if(ix<2) {
em_in.reset(ix);
f1.push_back(em_in);
ep_in.reset(ix);
a1.push_back(ep_in);
}
v1_out.reset(ix);
v1.push_back(v1_out);
v2_out.reset(ix);
v2.push_back(v2_out);
}
if(mePartonData()[2]->id()==ParticleID::Z0&&
mePartonData()[3]->id()==ParticleID::Z0) {
return ZZME(f1,a1,v1,v2,false);
}
else if(abs(mePartonData()[2]->id())==ParticleID::Wplus&&
abs(mePartonData()[3]->id())==ParticleID::Wplus) {
return WWME(f1,a1,v1,v2,false);
}
else {
return WZME(f1,a1,v1,v2,false);
}
}
double MEPP2VV::WWME(vector<SpinorWaveFunction> & f1,
vector<SpinorBarWaveFunction> & a1,
vector<VectorWaveFunction> & v1,
vector<VectorWaveFunction> & v2,
bool calc) const {
double output(0.);
vector<double> me(5,0.0);
if(calc) me_.reset(ProductionMatrixElement(PDT::Spin1Half,PDT::Spin1Half,
PDT::Spin1,PDT::Spin1));
// particle data for the t-channel intermediate
tcPDPtr tc[3];
if(f1[0].particle()->id()%2==0) {
for (int ix=0;ix<3;++ix) tc[ix] = getParticleData(1+2*ix);
}
else {
for (int ix=0;ix<3;++ix) tc[ix] = getParticleData(2+2*ix);
}
tcPDPtr gamma = getParticleData(ParticleID::gamma);
tcPDPtr z0 = getParticleData(ParticleID::Z0);
vector<Complex> diag(5,0.0);
VectorWaveFunction interP,interZ;
bool sChannel =
f1[0].particle()->id() == -a1[0].particle()->id();
for(unsigned int ihel1=0;ihel1<2;++ihel1) {
for(unsigned int ihel2=0;ihel2<2;++ihel2) {
if(sChannel) {
interP = FFPvertex_->evaluate(scale(),3,gamma,f1[ihel1],a1[ihel2]);
interZ = FFZvertex_->evaluate(scale(),3,z0 ,f1[ihel1],a1[ihel2]);
}
for(unsigned int ohel1=0;ohel1<3;++ohel1) {
for(unsigned int ohel2=0;ohel2<3;++ohel2) {
// s-channel photon
diag[3] = sChannel ?
WWWvertex_->evaluate(scale(),interP,v2[ohel2],v1[ohel1]) : 0.;
// s-channel Z0
diag[4] = sChannel ?
WWWvertex_->evaluate(scale(),interZ,v2[ohel2],v1[ohel1]) : 0.;
// t-channel
for(unsigned int ix=0;ix<3;++ix) {
SpinorWaveFunction inter =
- FFWvertex_->evaluate(scale(),5,tc[ix],f1[ihel1],v1[ohel1]);
+ FFWvertex_->evaluate(scale(),(abs(tc[ix]->id())!=6 ? 5 : 1),
+ tc[ix],f1[ihel1],v1[ohel1]);
diag[ix] =
FFWvertex_->evaluate(scale(),inter,a1[ihel2],v2[ohel2]);
}
// individual diagrams
for (size_t ii=0; ii<5; ++ii) me[ii] += std::norm(diag[ii]);
// full matrix element
diag[0] += diag[1]+diag[2]+diag[3]+diag[4];
output += std::norm(diag[0]);
// storage of the matrix element for spin correlations
if(calc) me_(ihel1,ihel2,ohel1,ohel2) = diag[0];
}
}
}
}
DVector save(5);
for (size_t i = 0; i < 5; ++i) {
save[i] = 0.25 * me[i];
}
meInfo(save);
return 0.25*output/3.;
}
double MEPP2VV::WZME(vector<SpinorWaveFunction> & f1,
vector<SpinorBarWaveFunction> & a1,
vector<VectorWaveFunction> & v1,
vector<VectorWaveFunction> & v2,
bool calc) const {
double output(0.);
vector<double> me(5,0.0);
if(calc) me_.reset(ProductionMatrixElement(PDT::Spin1Half,PDT::Spin1Half,
PDT::Spin1,PDT::Spin1));
vector<Complex> diag(3,0.0);
SpinorWaveFunction inter;
for(unsigned int ihel1=0;ihel1<2;++ihel1) {
for(unsigned int ihel2=0;ihel2<2;++ihel2) {
VectorWaveFunction interW =
FFWvertex_->evaluate(scale(),3,v1[0].particle(),
f1[ihel1],a1[ihel2]);
for(unsigned int ohel1=0;ohel1<3;++ohel1) {
for(unsigned int ohel2=0;ohel2<3;++ohel2) {
// t-channel diagrams
inter = FFWvertex_->evaluate(scale(),5,a1[ihel1].particle(),
f1[ihel1],v1[ohel1]);
diag[0] = FFZvertex_->evaluate(scale(),inter,a1[ihel2],v2[ohel2]);
inter = FFZvertex_->evaluate(scale(),5,f1[ihel1].particle(),
f1[ihel1] ,v2[ohel2]);
diag[1] = FFWvertex_->evaluate(scale(),inter,a1[ihel2],v1[ohel1]);
// s-channel diagram
diag[2] = WWWvertex_->evaluate(scale(),interW,v1[ohel1],v2[ohel2]);
// individual diagrams
for (size_t ii=0; ii<3; ++ii) me[ii] += std::norm(diag[ii]);
// full matrix element
diag[0] += diag[1]+diag[2];
output += std::norm(diag[0]);
// storage of the matrix element for spin correlations
if(calc) me_(ihel1,ihel2,ohel1,ohel2) = diag[0];
}
}
}
}
DVector save(5);
for (size_t i = 0; i < 5; ++i) {
save[i] = 0.25 * me[i];
}
meInfo(save);
return 0.25*output/3.;
}
double MEPP2VV::ZZME(vector<SpinorWaveFunction> & f1,
vector<SpinorBarWaveFunction> & a1,
vector<VectorWaveFunction> & v1,
vector<VectorWaveFunction> & v2,
bool calc) const {
double output(0.);
vector<double> me(5,0.0);
if(calc) me_.reset(ProductionMatrixElement(PDT::Spin1Half,PDT::Spin1Half,
PDT::Spin1,PDT::Spin1));
vector<Complex> diag(2,0.0);
SpinorWaveFunction inter;
for(unsigned int ihel1=0;ihel1<2;++ihel1) {
for(unsigned int ihel2=0;ihel2<2;++ihel2) {
for(unsigned int ohel1=0;ohel1<3;++ohel1) {
for(unsigned int ohel2=0;ohel2<3;++ohel2) {
inter = FFZvertex_->evaluate(scale(),5,f1[ihel1].particle(),
f1[ihel1],v1[ohel1]);
diag[0] = FFZvertex_->evaluate(scale(),inter,a1[ihel2],v2[ohel2]);
inter = FFZvertex_->evaluate(scale(),5,f1[ihel1].particle(),
f1[ihel1] ,v2[ohel2]);
diag[1] = FFZvertex_->evaluate(scale(),inter,a1[ihel2],v1[ohel1]);
// individual diagrams
for (size_t ii=0; ii<2; ++ii) me[ii] += std::norm(diag[ii]);
// full matrix element
diag[0] += diag[1];
output += std::norm(diag[0]);
// storage of the matrix element for spin correlations
if(calc) me_(ihel1,ihel2,ohel1,ohel2) = diag[0];
}
}
}
}
// identical particle factor
output /= 2.;
DVector save(5);
for (size_t i = 0; i < 5; ++i) {
save[i] = 0.25 * me[i];
}
meInfo(save);
return 0.25*output/3.;
}
void MEPP2VV::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};
if(hard[order[0]]->id()<0) swap(order[0],order[1]);
vector<SpinorWaveFunction> q;
vector<SpinorBarWaveFunction> qb;
SpinorWaveFunction (q ,hard[order[0]],incoming,false);
SpinorBarWaveFunction(qb,hard[order[1]],incoming,false);
vector<VectorWaveFunction> w1,w2;
// q qbar -> Z Z
if(hard[order[2]]->id()==ParticleID::Z0&&
hard[order[3]]->id()==ParticleID::Z0) {
VectorWaveFunction (w1,hard[order[2]],outgoing,true ,false);
VectorWaveFunction (w2,hard[order[3]],outgoing,true ,false);
ZZME(q,qb,w1,w2,true);
}
// q qbar -> W W
else if(abs(hard[order[2]]->id())==ParticleID::Wplus&&
abs(hard[order[3]]->id())==ParticleID::Wplus) {
if((hard[order[0]]->id()%2==1&&hard[order[2]]->id()==ParticleID::Wplus)||
(hard[order[0]]->id()%2==0&&hard[order[2]]->id()==ParticleID::Wminus))
swap(order[2],order[3]);
VectorWaveFunction (w1,hard[order[2]],outgoing,true ,false);
VectorWaveFunction (w2,hard[order[3]],outgoing,true ,false);
WWME(q,qb,w1,w2,true);
}
// q qbar -> W Z
else {
if(abs(hard[order[2]]->id())!=ParticleID::Wplus)
swap(order[2],order[3]);
VectorWaveFunction (w1,hard[order[2]],outgoing,true ,false);
VectorWaveFunction (w2,hard[order[3]],outgoing,true ,false);
WZME(q,qb,w1,w2,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/Models/LH/LHFFGVertex.cc b/Models/LH/LHFFGVertex.cc
--- a/Models/LH/LHFFGVertex.cc
+++ b/Models/LH/LHFFGVertex.cc
@@ -1,50 +1,49 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHFFGVertex class.
//
#include "LHFFGVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
-#include "ThePEG/Persistency/PersistentOStream.h"
-#include "ThePEG/Persistency/PersistentIStream.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
using namespace Herwig;
-NoPIOClassDescription<LHFFGVertex>
-LHFFGVertex::initLHFFGVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeNoPIOClass<LHFFGVertex,FFVVertex>
+describeHerwigLHFFGVertex("Herwig::LHFFGVertex", "HwLHModel.so");
void LHFFGVertex::Init() {
static ClassDocumentation<LHFFGVertex> documentation
("The LHFFGVertex class implements the coupling of the quarks"
" to the gluon in the Little Higgs model");
}
// coupling for FFG vertex
void LHFFGVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr,tcPDPtr) {
// check allowed
int iferm=abs(a->id());
assert((iferm>=1 && iferm<=6) || iferm==8);
// first the overall normalisation
if(q2!=_q2last) {
_couplast = -strongCoupling(q2);
_q2last=q2;
}
norm(_couplast);
left(1.);
right(1.);
}
LHFFGVertex::LHFFGVertex() : _couplast(0.), _q2last(0.*GeV2) {
// PDG codes for the particles
for(int ix=1;ix<9;++ix) {
if(ix==7) ++ix;
addToList(-ix, ix, 21);
}
orderInGs(1);
orderInGem(0);
}
diff --git a/Models/LH/LHFFGVertex.h b/Models/LH/LHFFGVertex.h
--- a/Models/LH/LHFFGVertex.h
+++ b/Models/LH/LHFFGVertex.h
@@ -1,135 +1,91 @@
// -*- C++ -*-
#ifndef HERWIG_LHFFGVertex_H
#define HERWIG_LHFFGVertex_H
//
// This is the declaration of the LHFFGVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
* The LHFFGVertex class implements the couplings of the
* quarks and additional heavy top to the gluon in the Little Higgs
* model.
- *
- * @see \ref LHFFGVertexInterfaces "The interfaces"
- * defined for LHFFGVertex.
*/
class LHFFGVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHFFGVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
/**
* 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 {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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static NoPIOClassDescription<LHFFGVertex> initLHFFGVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHFFGVertex & operator=(const LHFFGVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The last value of the strong coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHFFGVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHFFGVertex,1> {
- /** Typedef of the first base class of LHFFGVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHFFGVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHFFGVertex>
- : public ClassTraitsBase<Herwig::LHFFGVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHFFGVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHFFGVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHFFGVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHFFGVertex_H */
diff --git a/Models/LH/LHFFHVertex.cc b/Models/LH/LHFFHVertex.cc
--- a/Models/LH/LHFFHVertex.cc
+++ b/Models/LH/LHFFHVertex.cc
@@ -1,278 +1,280 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHFFHVertex class.
//
#include "LHFFHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
void LHFFHVertex::persistentOutput(PersistentOStream & os) const {
os << ounit(_coup,1./GeV) << _model;
}
void LHFFHVertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(_coup,1./GeV) >> _model;
}
-ClassDescription<LHFFHVertex> LHFFHVertex::initLHFFHVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHFFHVertex,FFSVertex>
+describeHerwigLHFFHVertex("Herwig::LHFFHVertex", "HwLHModel.so");
void LHFFHVertex::Init() {
static ClassDocumentation<LHFFHVertex> documentation
("The LHFFHVertex class implements the interaction of the fermions"
" and the Higgs bosons in the Little Higgs model");
}
LHFFHVertex::LHFFHVertex()
: _q2last(0.*GeV2) {
orderInGem(1);
orderInGs(0);
_masslast[0] = 0.*GeV;
_masslast[1] = 0.*GeV;
_idlast[0] = 0;
_idlast[1] = 0;
// SM like higgs
addToList( -5, 5, 25);
addToList( -6, 6, 25);
addToList( -6, 8, 25);
addToList( -8, 6, 25);
addToList( -8, 8, 25);
addToList( -15, 15, 25);
// phi0
addToList( -5, 5, 35);
addToList( -6, 8, 35);
addToList( -8, 6, 35);
addToList( -15, 15, 35);
// phiP
addToList( -5, 5, 36);
addToList( -6, 8, 36);
addToList( -8, 6, 36);
addToList( -15, 15, 36);
// phi +/-
addToList( -8 , 5, 37);
addToList( -16, 15, 37);
addToList( -5 , 8, -37);
addToList( -15, 16, -37);
}
void LHFFHVertex::doinit() {
_model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!_model) throw InitException() << "Must be using the LHModel "
<< " in LHFFPVertex::doinit()"
<< Exception::runerror;
_coup.resize(11);
Energy v = _model->vev();
double s0 = _model->sinTheta0();
double sP = _model->sinThetaP();
double sPlus = _model->sinThetaPlus();
double s02 = sqr(s0);
double vf = _model->vev()/_model->f();
double xL = sqr(_model->lambda1())/(sqr(_model->lambda1())+sqr(_model->lambda2()));
double xR = sqr(_model->lambda1())/sqrt(sqr(_model->lambda1())+sqr(_model->lambda2()));
Energy mT = getParticleData(8)->mass();
// lightest higgs couplings
// coupling of light SM fermions
_coup[0] = (1.-0.5*s02+vf*s0/sqrt(2.)-2./3.*sqr(vf))/v;
// couplings to top quark
_coup[1] = (1.-0.5*s02+vf*s0/sqrt(2.)-2./3.*sqr(vf)+sqr(vf)*xL*(1.+xL))/v;
// couplings to the T quark
_coup[2] = xR*(1.+xL)*vf/mT;
// couplings to tT
_coup[3] = Complex(0.,1.)*xR/mT;
_coup[4] = Complex(0.,1.)*vf/v*(1.+xL);
// phi 0
// light particles
_coup[5] = sqrt(0.5)/v*(vf-sqrt(2.)*s0);
// mixed
_coup[6] = sqrt(0.5)/v*(vf-sqrt(2.)*s0)*_model->lambda1()/_model->lambda2();
// phi P
_coup[7] = Complex(0.,1.)*sqrt(0.5)/v*(vf-sqrt(2.)*sP);
_coup[8] = Complex(0.,1.)*sqrt(0.5)/v*(vf-sqrt(2.)*sP)*_model->lambda1()/_model->lambda2();
// phi +/-
_coup[9] = -sqrt(0.5)/v*(vf-2.*sPlus);
_coup[9] = -sqrt(0.5)/v*(vf-2.*sPlus)*_model->lambda1()/_model->lambda2();
FFSVertex::doinit();
}
void LHFFHVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c) {
int iferm=abs(a->id());
int ianti=abs(b->id());
// int ihigg=abs(c->id());
// left and right couplings set to one
left (1.);
right(1.);
// first the overall normalisation
if(q2!=_q2last||_idlast[0]!=iferm||_idlast[1]!=ianti) {
_q2last = q2;
_idlast[0] = iferm;
if(_idlast[0]==8) _idlast[0]=6;
assert((_idlast[0]>=1 && _idlast[0]<=6 ) ||
(_idlast[0]>=11 && _idlast[0]<=16));
if(iferm==_idlast[0])
_masslast[0] = _model->mass(q2,a);
else
_masslast[0] = _model->mass(q2,getParticleData(ParticleID::t));
_idlast[1] = ianti;
if(_idlast[1]==8) _idlast[1]=6;
assert((_idlast[1]>=1 && _idlast[1]<=6 ) ||
(_idlast[1]>=11 && _idlast[1]<=16));
if(_idlast[0]!=_idlast[1]) {
if(ianti==_idlast[1])
_masslast[1] = _model->mass(q2,a);
else
_masslast[1] = _model->mass(q2,getParticleData(ParticleID::t));
}
else {
_masslast[1] = _masslast[0];
}
}
// SM like higgs
if(c->id()==ParticleID::h0) {
if(iferm==ianti) {
if((iferm>=1 && iferm<=5 ) ||
(iferm>=11 && iferm<=16)) {
norm(-Complex(_coup[0]*_masslast[0]));
}
else if(iferm==6) {
norm(-Complex(_coup[1]*_masslast[0]));
}
else if(iferm==8) {
norm(-Complex(_coup[2]*a->mass()));
}
else assert(false);
}
else {
if( (iferm == 6 && ianti == 8 ) ||
(ianti == 6 && iferm == 8 )) {
Complex cleft,cright;
if(iferm==6) {
cleft = -_coup[3]*b->mass();
cright = -_coup[4]*_masslast[0];
}
else {
cleft = -_coup[3]*a->mass();
cright = -_coup[4]*_masslast[0];
}
if(b->id()==ParticleID::tbar || c->id()==ParticleID::tbar) {
cright = conj(cleft);
cleft = 0.;
}
left (cleft );
right(cright);
norm(1.);
}
else {
assert(false);
}
}
}
else if(c->id()==ParticleID::H0) {
if(iferm==ianti) {
if((iferm>=1 && iferm<=5 ) ||
(iferm>=11 && iferm<=16)) {
norm(-Complex(_coup[5]*_masslast[0]));
}
else assert(false);
}
else {
if( (iferm == 6 && ianti == 8 ) ||
(iferm == 8 && ianti == 6 )) {
Complex cleft = Complex(_coup[6]*_masslast[0]);
Complex cright = 0.;
if(b->id()==ParticleID::tbar || c->id()==ParticleID::tbar) {
cright = conj(cleft);
cleft = 0.;
}
left (cleft );
right(cright);
norm(1.);
}
else assert(false);
}
}
else if(c->id()==ParticleID::A0) {
left(-1.);
right(1.);
if(iferm==ianti) {
if((iferm>=1 && iferm<=5 ) ||
(iferm>=11 && iferm<=16)) {
if(iferm%2==0)
norm(-Complex( _coup[7]*_masslast[0]));
else
norm(-Complex(-_coup[7]*_masslast[0]));
}
else assert(false);
}
else {
if( (iferm == 6 && ianti == 8 ) ||
(iferm == 8 && ianti == 6 )) {
Complex cleft = Complex(_coup[8]*_masslast[0]);
Complex cright = 0.;
if(b->id()==ParticleID::tbar || c->id()==ParticleID::tbar) {
cright = conj(cleft);
cleft = 0.;
}
left (cleft );
right(cright);
norm(1.);
}
else assert(false);
}
}
else if(c->id()==ParticleID::Hplus) {
norm(1.);
Complex cleft(0.),cright(0.);
if(iferm%2==0) {
if(iferm==ParticleID::t) {
cleft = _masslast[0]*_coup[ 9];
}
else {
cleft = _masslast[0]*_coup[10];
cright = _masslast[1]*_coup[10];
}
}
else {
if(ianti==ParticleID::t) {
cleft = _masslast[1]*_coup[ 9];
}
else {
cleft = _masslast[1]*_coup[10];
cright = _masslast[0]*_coup[10];
}
}
left ( cleft);
right(cright);
}
else if(c->id()==ParticleID::Hminus) {
norm(1.);
Complex cleft(0.),cright(0.);
if(iferm%2==0) {
if(iferm==ParticleID::t) {
cright = _masslast[0]*_coup[ 9];
}
else {
cright = _masslast[0]*_coup[10];
cleft = _masslast[1]*_coup[10];
}
}
else {
if(ianti==ParticleID::t) {
cright = _masslast[1]*_coup[ 9];
}
else {
cright = _masslast[1]*_coup[10];
cleft = _masslast[0]*_coup[10];
}
}
left ( cleft);
right(cright);
}
}
diff --git a/Models/LH/LHFFHVertex.h b/Models/LH/LHFFHVertex.h
--- a/Models/LH/LHFFHVertex.h
+++ b/Models/LH/LHFFHVertex.h
@@ -1,177 +1,133 @@
// -*- C++ -*-
#ifndef HERWIG_LHFFHVertex_H
#define HERWIG_LHFFHVertex_H
//
// This is the declaration of the LHFFHVertex class.
//
#include "LHModel.h"
#include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
* The LHFFHVertex class implements the couplings of the fermions to
- * the Higgs bosons of the Little Higgs model..
- *
- * @see \ref LHFFHVertexInterfaces "The interfaces"
- * defined for LHFFHVertex.
+ * the Higgs bosons of the Little Higgs model.
*/
class LHFFHVertex: public Helicity::FFSVertex {
public:
/**
* The default constructor.
*/
LHFFHVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
* @param ioff Which particle is off-shell
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHFFHVertex> initLHFFHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHFFHVertex & operator=(const LHFFHVertex &);
private:
/**
* Pointer to the SM object.
*/
tcLHModelPtr _model;
/**
* Storage of the couplings.
*/
//@{
/**
* The PDG code of the last fermion the coupling was evaluated for.
*/
int _idlast[2];
/**
* The last \f$q^2\f$ the coupling was evaluated at.
*/
Energy2 _q2last;
/**
* The mass of the last fermion for which the coupling was evaluated.
*/
Energy _masslast[2];
/**
* The factors for the individual interactions
*/
vector<complex<InvEnergy> > _coup;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHFFHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHFFHVertex,1> {
- /** Typedef of the first base class of LHFFHVertex. */
- typedef Helicity::FFSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHFFHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHFFHVertex>
- : public ClassTraitsBase<Herwig::LHFFHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHFFHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHFFHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHFFHVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHFFHVertex_H */
diff --git a/Models/LH/LHFFPVertex.cc b/Models/LH/LHFFPVertex.cc
--- a/Models/LH/LHFFPVertex.cc
+++ b/Models/LH/LHFFPVertex.cc
@@ -1,153 +1,155 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHFFPVertex class.
//
#include "LHFFPVertex.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
LHFFPVertex::LHFFPVertex()
: _couplast(0.), _q2last(-1.*GeV2) {
// order in strong and em coupling
orderInGem(1);
orderInGs(0);
// the quarks
for(int ix=1;ix<7;++ix) {
addToList(-ix, ix, 22);
addToList(-ix, ix, 32);
}
addToList( -8, 8, 22);
addToList( -8, 8, 32);
addToList( -6, 8, 32);
addToList( -8, 6, 32);
// the leptons
for(int ix=11;ix<17;++ix) {
addToList(-ix, ix, 22);
addToList(-ix, ix, 32);
}
}
void LHFFPVertex::persistentOutput(PersistentOStream & os) const {
os << _charge << _gl << _gr;
}
void LHFFPVertex::persistentInput(PersistentIStream & is, int) {
is >> _charge >> _gl >> _gr;
}
-ClassDescription<LHFFPVertex> LHFFPVertex::initLHFFPVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHFFPVertex,FFVVertex>
+describeHerwigLHFFPVertex("Herwig::LHFFPVertex", "HwLHModel.so");
void LHFFPVertex::Init() {
static ClassDocumentation<LHFFPVertex> documentation
("The LHFFPVertex class implements the couplings of the fermions to"
" the photon and A_H in the Little Higgs model");
}
void LHFFPVertex::doinit() {
FFVVertex::doinit();
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHFFPVertex::doinit()"
<< Exception::runerror;
// charges
_charge.resize(17);
for(int ix=1;ix<4;++ix) {
_charge[2*ix-1] = model->ed();
_charge[2*ix ] = model->eu();
_charge[2*ix+9 ] = model->ee();
_charge[2*ix+10] = model->enu();
}
_charge[8] = model->eu();
// couplings for the heavy photon taken from table IX
double cw = sqrt(sin2ThetaW());
double xL = sqr(model->lambda1())/(sqr(model->lambda1())+sqr(model->lambda2()));
double cp2 = sqr(model->cosThetaPrime());
double yu = -0.4;
double ye = 0.6;
// prefactor after removal of -e
double pre = -0.5/cw/model->cosThetaPrime()/model->sinThetaPrime();
// down type quarks
double gvd = pre*(2.*yu+11./15.+1./6.*cp2);
double gad = pre*(-0.2+0.5*cp2);
// up type quarks
double gvu = pre*(2.*yu+17./15.-5./6.*cp2);
double gau = pre*( 0.2-0.5*cp2);
// charged leptons
double gve = pre*(2.*ye-9./5.+1.5*cp2);
double gae = pre*(-0.2+0.5*cp2);
// neutrinos
double gvv = pre*(-0.2+0.5*cp2);
double gav = pre*( 0.2-0.5*cp2);
// light top
double gvtll = pre*(2.*yu+17./15.-5./6.*cp2-0.2*xL);
double gatll = pre*(0.2-0.5*cp2-0.2*xL);
// mixed top
double gvtlh = pre*0.2*model->lambda1()*model->lambda2()/
(sqr(model->lambda1())+sqr(model->lambda2()));
double gatlh = gvtlh;
// heavy top
double gvthh = pre*(2.*yu+14./15.-4./3.*cp2+0.2*xL);
double gathh = pre*0.2*xL;
_gl.resize(17);
_gr.resize(17);
for(unsigned int ix=1;ix<4;++ix) {
_gr[2*ix-1] = gvd+gad;
_gl[2*ix-1] = gvd-gad;
_gr[2*ix ] = gvu+gau;
_gl[2*ix ] = gvu-gau;
_gr[2*ix+9 ] = gve+gae;
_gl[2*ix+9 ] = gve-gae;
_gr[2*ix+10] = gvv+gav;
_gl[2*ix+10] = gvv-gav;
}
// light top
_gr[6] = gvtll+gatll;
_gl[6] = gvtll-gatll;
// mixed top
_gr[7] = gvtlh+gatlh;
_gl[7] = gvtlh-gatlh;
// heavy top
_gr[8] = gvthh+gathh;
_gl[8] = gvthh-gathh;
}
// coupling for FFP vertex
void LHFFPVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c) {
int iferm=abs(a->id());
assert((iferm>=1 && iferm<=6)||(iferm>=11 &&iferm<=16)||iferm==8);
// first the overall normalisation
if(q2!=_q2last) {
_couplast = -electroMagneticCoupling(q2);
_q2last=q2;
}
norm(_couplast);
// the left and right couplings
// photon
if(c->id()==ParticleID::gamma) {
left (_charge[iferm]);
right(_charge[iferm]);
}
// heavy photon
else {
int ianti = abs(b->id());
if(ianti==iferm) {
left (-_gl[iferm]);
right(-_gr[iferm]);
}
else {
left (_gl[7]);
right(_gr[7]);
}
}
}
diff --git a/Models/LH/LHFFPVertex.h b/Models/LH/LHFFPVertex.h
--- a/Models/LH/LHFFPVertex.h
+++ b/Models/LH/LHFFPVertex.h
@@ -1,179 +1,135 @@
// -*- C++ -*-
#ifndef HERWIG_LHFFPVertex_H
#define HERWIG_LHFFPVertex_H
//
// This is the declaration of the LHFFPVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
#include "LHModel.h"
namespace Herwig {
using namespace ThePEG;
/**
* The LHFFPVertex class implements the couplings of the fermions,
* both of the Standard Model and the additional heavy top to the
* photon and \f$A_H\f$ bosons in the Little Higgs model.
- *
- * @see \ref LHFFPVertexInterfaces "The interfaces"
- * defined for LHFFPVertex.
*/
class LHFFPVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHFFPVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
/** @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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHFFPVertex> initLHFFPVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHFFPVertex & operator=(const LHFFPVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The charge of the Standard Model fermions.
*/
vector<double> _charge;
/**
* The last value of the coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
/**
* Left couplings for the heavy photon
*/
vector<double> _gl;
/**
* Right couplings for the heavy photon
*/
vector<double> _gr;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHFFPVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHFFPVertex,1> {
- /** Typedef of the first base class of LHFFPVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHFFPVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHFFPVertex>
- : public ClassTraitsBase<Herwig::LHFFPVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHFFPVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHFFPVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHFFPVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHFFPVertex_H */
diff --git a/Models/LH/LHFFWVertex.cc b/Models/LH/LHFFWVertex.cc
--- a/Models/LH/LHFFWVertex.cc
+++ b/Models/LH/LHFFWVertex.cc
@@ -1,179 +1,181 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHFFWVertex class.
//
#include "LHFFWVertex.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig++/Models/StandardModel/StandardCKM.h"
using namespace Herwig;
LHFFWVertex::LHFFWVertex()
: _ckm(3,vector<Complex>(3,0.0)), _couplast(0.), _q2last(0.*GeV2),
_corrL(0.),_corrH(0.),_tcorrL(0.),_tcorrH(0.),_tHcorrL(0.), _tHcorrH(0.) {
// order of vertex in couplings
orderInGem(1);
orderInGs(0);
// particles for outgoing W-
// quarks
for(int ix=1;ix<6;ix+=2) {
for(int iy=2;iy<7;iy+=2) {
addToList(-ix, iy, -24);
addToList(-ix, iy, -34);
}
}
// leptons
for(int ix=11;ix<17;ix+=2) {
addToList(-ix, ix+1, -24);
addToList(-ix, ix+1, -34);
}
// particles for outgoing W+
// quarks
for(int ix=2;ix<7;ix+=2) {
for(int iy=1;iy<6;iy+=2) {
addToList(-ix, iy, 24);
addToList(-ix, iy, 34);
}
}
// leptons
for(int ix=11;ix<17;ix+=2) {
addToList(-ix-1, ix, 24);
addToList(-ix-1, ix, 34);
}
// couplings to new heavy quark
addToList(-5, 8, -24);
addToList(-5, 8, -34);
addToList(-8, 5, 24);
addToList(-8, 5, 34);
}
void LHFFWVertex::persistentOutput(PersistentOStream & os) const {
os << _ckm << _corrL << _corrH << _tcorrL << _tcorrH << _tHcorrL << _tHcorrH;
}
void LHFFWVertex::persistentInput(PersistentIStream & is, int) {
is >> _ckm >> _corrL >> _corrH >> _tcorrL >> _tcorrH >> _tHcorrL >> _tHcorrH;
}
-ClassDescription<LHFFWVertex> LHFFWVertex::initLHFFWVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHFFWVertex,FFVVertex>
+describeHerwigLHFFWVertex("Herwig::LHFFWVertex", "HwLHModel.so");
void LHFFWVertex::Init() {
static ClassDocumentation<LHFFWVertex> documentation
("The LHFFWVertex class implements the vertices for"
" the coupling of the W and heavy W to the Standard Model "
"fermions and the heavy top quark in the Little Higgs model");
}
void LHFFWVertex::doinit() {
ThePEG::Helicity::FFVVertex::doinit();
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHFFWVertex::doinit()"
<< Exception::runerror;
// cast the CKM object to the HERWIG one
ThePEG::Ptr<Herwig::StandardCKM>::transient_const_pointer
hwCKM=ThePEG::dynamic_ptr_cast< ThePEG::Ptr<Herwig::StandardCKM>::
transient_const_pointer>(generator()->standardModel()->CKM());
if(!hwCKM)
throw InitException() << "Must have access to the Herwig::StandardCKM object"
<< "for the CKM matrix in LHFFWVertex::doinit()"
<< Exception::runerror;
_ckm = hwCKM->getUnsquaredMatrix(model->families());
// compute the correction factors
double s2(sqr(model->sinTheta())),c2(sqr(model->cosTheta()));
double vf(model->vev()/model->f());
double xL = sqr(model->lambda1())/(sqr(model->lambda1())+sqr(model->lambda2()));
// from Table VIII with -sign to agree with our SM conventions
_corrL = 1.-0.5*sqr(vf)*c2*(c2-s2);
_corrH = -model->cosTheta()/model->sinTheta();
_tcorrL = 1.-0.5*sqr(vf)*(c2*(c2-s2)+sqr(xL));
_tcorrH = -model->cosTheta()/model->sinTheta();
_tHcorrL = -vf*xL;
_tHcorrH = vf*xL*model->cosTheta()/model->sinTheta();
}
void LHFFWVertex::setCoupling(Energy2 q2, tcPDPtr a,
tcPDPtr b, tcPDPtr c) {
// first the overall normalisation
if(q2!=_q2last) {
_couplast = -sqrt(0.5)*weakCoupling(q2);
_q2last=q2;
}
norm(_couplast);
right(0.);
// the left and right couplings
int iferm=abs(a->id());
int ianti=abs(b->id());
bool heavy(false);
if(iferm==8) {
iferm = 6;
heavy = true;
}
if(ianti==8) {
ianti = 6;
heavy = true;
}
// quarks
if(iferm>=1 && iferm <=6) {
int iu,id;
// up type first
if(iferm%2==0) {
iu = iferm/2;
id = (ianti+1)/2;
}
// down type first
else {
iu = ianti/2;
id = (iferm+1)/2;
}
assert( iu>=1 && iu<=3 && id>=1 && id<=3);
left(_ckm[iu-1][id-1]);
right(0.);
}
// leptons
else if(iferm>=11 && iferm <=16) {
left(1.);
}
else assert(false);
// correction factors
// light W
if(abs(c->id())==ParticleID::Wplus) {
// light quarks or leptons
if(iferm<6&&ianti<6) {
left(_corrL*left());
}
// light top quark
else if(!heavy) {
left(_tcorrL*left());
}
// heavy top quark
else {
left(_tHcorrL*left());
}
}
// heavy W
else {
// light quarks or leptons
if(iferm<6&&ianti<6) {
left(_corrH*left());
}
// light top quark
else if(!heavy) {
left(_tcorrH*left());
}
// heavy top quark
else {
left(_tHcorrH*left());
}
}
}
diff --git a/Models/LH/LHFFWVertex.h b/Models/LH/LHFFWVertex.h
--- a/Models/LH/LHFFWVertex.h
+++ b/Models/LH/LHFFWVertex.h
@@ -1,199 +1,155 @@
// -*- C++ -*-
#ifndef HERWIG_LHFFWVertex_H
#define HERWIG_LHFFWVertex_H
//
// This is the declaration of the LHFFWVertex class.
//
#include "LHModel.h"
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
* The LHFFWVertex class implements the couplings of the fermions, both of
* the Standard Model and the additional heavy top, to the \f$W^\pm\f$ and
* \f$W_H^\pm\f$ bosons in the Little Higgs model.
- *
- * @see \ref LHFFWVertexInterfaces "The interfaces"
- * defined for LHFFWVertex.
*/
class LHFFWVertex: public ThePEG::Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHFFWVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
/** @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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHFFWVertex> initLHFFWVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHFFWVertex & operator=(const LHFFWVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The elements of the CKM matrix.
*/
vector<vector<Complex> > _ckm;
/**
* The last value of the electroweak coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
/**
* The correction factor for the Standard Model pieces
*/
double _corrL;
/**
* The correction factor for the heavy W
*/
double _corrH;
/**
* The correction factor for the top quark pieces for the SM W
*/
double _tcorrL;
/**
* The correction factor for the top quark pieces for the heavy W
*/
double _tcorrH;
/**
* The correction factor for the coupling of the heavy top and SM W
*/
double _tHcorrL;
/**
* The correction factor for the coupling of the heavy top and the heavy W
*/
double _tHcorrH;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHFFWVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHFFWVertex,1> {
- /** Typedef of the first base class of LHFFWVertex. */
- typedef ThePEG::Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHFFWVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHFFWVertex>
- : public ClassTraitsBase<Herwig::LHFFWVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHFFWVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHFFWVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHFFWVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHFFWVertex_H */
diff --git a/Models/LH/LHFFZVertex.cc b/Models/LH/LHFFZVertex.cc
--- a/Models/LH/LHFFZVertex.cc
+++ b/Models/LH/LHFFZVertex.cc
@@ -1,181 +1,183 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHFFZVertex class.
//
#include "LHFFZVertex.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
void LHFFZVertex::persistentOutput(PersistentOStream & os) const {
os << _gl << _gr << _glH << _grH;
}
void LHFFZVertex::persistentInput(PersistentIStream & is, int) {
is >> _gl >> _gr >> _glH >> _grH;
}
-ClassDescription<LHFFZVertex> LHFFZVertex::initLHFFZVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHFFZVertex,FFVVertex>
+describeHerwigLHFFZVertex("Herwig::LHFFZVertex", "HwLHModel.so");
void LHFFZVertex::Init() {
static ClassDocumentation<LHFFZVertex> documentation
("The LHFFZVertex class implements the couplings of the Z and Z_H in"
" the Little Higgs model to the fermions, both of the Standard Model"
" and the additional heavy top.");
}
LHFFZVertex::LHFFZVertex() : _couplast(0.0), _q2last(0.*GeV2) {
// the quarks
for(int ix=1;ix<7;++ix) {
addToList(-ix, ix, 23);
addToList(-ix, ix, 33);
}
addToList( -8, 8, 23);
addToList( -6, 8, 23);
addToList( -8, 6, 23);
addToList( -6, 8, 33);
addToList( -8, 6, 33);
// the leptons
for(int ix=11;ix<17;++ix) {
addToList(-ix, ix, 23);
addToList(-ix, ix, 33);
}
// set order in the couplings
orderInGem(1);
orderInGs(0);
}
void LHFFZVertex::doinit() {
FFVVertex::doinit();
cLHModelPtr model = dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model) throw InitException() << "Must be using the LHModel "
<< " in LHFFZVertex::doinit()"
<< Exception::runerror;
double sw2(sin2ThetaW());
double sw(sqrt(sw2)),cw(sqrt(1.-sw2));
double pre =-0.5/sw/cw;
double s (model->sinTheta() ),c (model->cosTheta() );
double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
double sp2(sqr(sp)),cp2(sqr(cp));
// from Eqn A35
double xW(-0.5/cw*s*c*(sqr(c)-sqr(s)));
double xB(-2.5/sw*sp*cp*(cp2-sp2));
double yu = -0.4, ye = 0.6;
double vf(model->vev()/model->f());
double xL(sqr(model->lambda1())/(sqr(model->lambda1())+sqr(model->lambda2())));
double vu = pre*( 0.5-4./3.*sw2-sqr(vf)*(+0.5*cw*xW*c/s
+sw*xB/sp/cp*(2.*yu+7./15. -cp2/6.)));
double vd = pre*(-0.5+2./3.*sw2-sqr(vf)*(-0.5*cw*xW*c/s
+sw*xB/sp/cp*(2.*yu+11./15. +cp2/6.)));
double ve = pre*(-0.5+2.* sw2-sqr(vf)*(-0.5*cw*xW*c/s
+sw*xB/sp/cp*(2.*ye-9./5. +1.5*cp2)));
double vv = pre*(+0.5 -sqr(vf)*(+0.5*cw*xW*c/s
+sw*xB/sp/cp*( ye-4./5. +0.5*cp2)));
double au = pre*(-0.5-sqr(vf)*(-0.5*cw*xW*c/s+sw*xB/sp/cp*(0.2-0.5*cp2)));
double ad = pre*( 0.5-sqr(vf)*(+0.5*cw*xW*c/s-sw*xB/sp/cp*(0.2-0.5*cp2)));
double ae = pre*( 0.5-sqr(vf)*(+0.5*cw*xW*c/s-sw*xB/sp/cp*(0.2-0.5*cp2)));
double av = pre*(-0.5-sqr(vf)*(-0.5*cw*xW*c/s+sw*xB/sp/cp*(0.2-0.5*cp2)));
double vtl = pre*( 0.5-4./3.*sw2-sqr(vf)*(-0.5*sqr(xL)+0.5*cw*xW*c/s
+sw*xB/sp/cp*(2.*yu+9./5.-1.5*cp2
+(7./15.-2.*cp2/3.)*xL)));
double atl = pre*(-0.5 -sqr(vf)*(+0.5*sqr(xL)-0.5*cw*xW*c/s
+sw*xB/sp/cp*(+0.2-0.5*cp2-0.2*xL)));
double vth = 2./3.*sw/cw;
double ath = 0.;
double vtm = 0.25*xL*vf/cw/sw;
double atm = -vtm;
_gl.resize(17);
_gr.resize(17);
for(unsigned ix=1;ix<4;++ix) {
_gl[2*ix-1] = vd - ad;
_gl[2*ix ] = vu - au;
_gl[2*ix+9 ] = ve - ae;
_gl[2*ix+10] = vv - av;
_gr[2*ix-1] = vd + ad;
_gr[2*ix ] = vu + au;
_gr[2*ix+9 ] = ve + ae;
_gr[2*ix+10] = vv + av;
}
_gl[6] = vtl - atl;
_gr[6] = vtl + atl;
_gl[7] = vtm - atm;
_gr[7] = vtm + atm;
_gl[8] = vth - ath;
_gr[8] = vth + ath;
// heavy Z
double fact = 0.25*c/s/sw;
vu = fact;
vd = -fact;
ve = -fact;
vv = fact;
au = -fact;
ad = fact;
ae = fact;
av = -fact;
vtl = fact;
atl = -fact;
vth = 0.;
ath = 0.;
vtm = -0.25*xL*vf*c/s/sw;
atm = -vtm;
_glH.resize(17);
_grH.resize(17);
for(unsigned ix=1;ix<4;++ix) {
_glH[2*ix-1] = vd - ad;
_glH[2*ix ] = vu - au;
_glH[2*ix+9 ] = ve - ae;
_glH[2*ix+10] = vv - av;
_grH[2*ix-1] = vd + ad;
_grH[2*ix ] = vu + au;
_grH[2*ix+9 ] = ve + ae;
_grH[2*ix+10] = vv + av;
}
_glH[6] = vtl - atl;
_grH[6] = vtl + atl;
_glH[7] = vtm - atm;
_grH[7] = vtm + atm;
_glH[8] = vth - ath;
_grH[8] = vth + ath;
}
void LHFFZVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,tcPDPtr c) {
// first the overall normalisation
if(q2!=_q2last) {
_couplast = electroMagneticCoupling(q2);
_q2last=q2;
}
norm(_couplast);
// the left and right couplings
int iferm = abs(a->id());
int ianti = abs(b->id());
assert((iferm>=1 && iferm<=6)||(iferm>=11 &&iferm<=16)|| iferm == 8);
// Z0
if(c->id()==ParticleID::Z0) {
if(ianti==iferm) {
left (_gl[iferm]);
right(_gr[iferm]);
}
else {
left (_gl[7]);
right(_gr[7]);
}
}
else {
if(ianti==iferm) {
left (_glH[iferm]);
right(_grH[iferm]);
}
else {
left (_glH[7]);
right(_grH[7]);
}
}
}
diff --git a/Models/LH/LHFFZVertex.h b/Models/LH/LHFFZVertex.h
--- a/Models/LH/LHFFZVertex.h
+++ b/Models/LH/LHFFZVertex.h
@@ -1,181 +1,137 @@
// -*- C++ -*-
#ifndef HERWIG_LHFFZVertex_H
#define HERWIG_LHFFZVertex_H
//
// This is the declaration of the LHFFZVertex class.
//
#include "LHModel.h"
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
namespace Herwig {
/**
* The LHFFZVertex class implements the couplings of the fermion,
* both of the Standard Model and the additional heavy top to the
* \f$Z^0\f$ and \f$Z_H\f$ bosons in the Little Higgs model.
- *
- * @see \ref LHFFZVertexInterfaces "The interfaces"
- * defined for LHFFZVertex.
*/
class LHFFZVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHFFZVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
/** @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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHFFZVertex> initLHFFZVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHFFZVertex & operator=(const LHFFZVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The left couplings of the Standard Model fermions to the Z.
*/
vector<double> _gl;
/**
* The right couplings of the Standard Model fermions to the Z.
*/
vector<double> _gr;
/**
* The left couplings of the Standard Model fermions to the heavy Z.
*/
vector<double> _glH;
/**
* The right couplings of the Standard Model fermions to the heavy Z.
*/
vector<double> _grH;
/**
* The last value of the electroweak coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHFFZVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHFFZVertex,1> {
- /** Typedef of the first base class of LHFFZVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHFFZVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHFFZVertex>
- : public ClassTraitsBase<Herwig::LHFFZVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHFFZVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHFFZVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHFFZVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHFFZVertex_H */
diff --git a/Models/LH/LHModel.cc b/Models/LH/LHModel.cc
--- a/Models/LH/LHModel.cc
+++ b/Models/LH/LHModel.cc
@@ -1,163 +1,154 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHModel class.
//
#include "LHModel.h"
-#include "ThePEG/Repository/BaseRepository.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
LHModel::LHModel()
: _cott(1.), _tantp(1.),
_v(246.*GeV), _lamratio(1.), _mH(120.*GeV), _vacratio(0.05),
_f(3.*TeV), _lambda1(0.), _lambda2(0.),
_s(0.), _c(0.), _sp(0.), _cp(0.)
{}
void LHModel::persistentOutput(PersistentOStream & os) const {
os << _cott << _tantp << ounit(_v,GeV) << _lamratio
<< ounit(_mH,GeV) << _vacratio << ounit(_f,GeV)
<< _s0 << _c0 << _sP << _cP << _sPlus << _cPlus
<< _lambda1 << _lambda2 << _s << _c << _sp << _cp
<< WHHVertex_;
}
void LHModel::persistentInput(PersistentIStream & is, int) {
is >> _cott >> _tantp >> iunit(_v,GeV) >> _lamratio
>> iunit(_mH,GeV) >> _vacratio >> iunit(_f,GeV)
>> _s0 >> _c0 >> _sP >> _cP >> _sPlus >> _cPlus
>> _lambda1 >> _lambda2 >> _s >> _c >> _sp >> _cp
>> WHHVertex_;
}
-ClassDescription<LHModel> LHModel::initLHModel;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHModel,StandardModel>
+describeThePEGLHModel("Herwig::LHModel", "HwLHModel.so");
void LHModel::Init() {
static ClassDocumentation<LHModel> documentation
("The LHModel class");
static Parameter<LHModel,double> interfaceCotTheta
("CotTheta",
"The cotangent of the theta mixing angle",
&LHModel::_cott, 1.0, 0.1, 10.,
false, false, Interface::limited);
static Parameter<LHModel,double> interfaceTanThetaPrime
("TanThetaPrime",
"The tangent of the theta' mixing angle",
&LHModel::_tantp, 1.0, 0.1, 10.0,
false, false, Interface::limited);
static Parameter<LHModel,Energy> interfacef
("f",
"The scale of the non-linear sigma-model",
&LHModel::_f, TeV, 3.*TeV, 0.0*TeV, 10.0*TeV,
true, false, Interface::limited);
static Parameter<LHModel,double> interfaceLambdaRatio
("LambdaRatio",
"The ratio lambda_1/lambda_2 of the top Yukawa couplings.",
&LHModel::_lamratio, 1.0, 0.01, 100.,
false, false, Interface::limited);
static Parameter<LHModel,double> interfaceVEVRatio
("VEVRatio",
"The ratio of the vacuum expection values v'/v",
&LHModel::_vacratio, 0.05, 0.0, 10.0,
false, false, Interface::limited);
static Parameter<LHModel,Energy> interfacemH
("mH",
"The mass of the lightest Higgs",
&LHModel::_mH, GeV, 120.0*GeV, 100.0*GeV, 1000.0*GeV,
false, false, Interface::limited);
static Reference<LHModel,AbstractVSSVertex> interfaceVertexWHH
("Vertex/WHH",
"Pointer to the WHH vertex",
&LHModel::WHHVertex_, false, false, true, false, false);
}
void LHModel::doinit() {
// stuff from the base class
StandardModel::doinit();
// compute the parameters of the model
// W and Z masses
Energy mw(getParticleData(ParticleID::Wplus)->mass());
Energy mz(getParticleData(ParticleID::Z0) ->mass());
// SM couplings
double e = sqrt(4.*Constants::pi*alphaEM(sqr(mz)));
double sw2(sin2ThetaW()),cw2(1.-sin2ThetaW());
double g = e/sqrt(sw2);
double gp = e/sqrt(cw2);
// vev
_v = 2.*mw/g;
// cos and sin of mixing angles
double theta (atan(1./_cott));
_c = cos(theta );
_s = sin(theta );
double thetap(atan(_tantp ));
_cp = cos(thetap);
_sp = sin(thetap);
// xH (Eqn A35)
double xH = 2.5*g*gp*_s*_c*_sp*_cp*(sqr(_c*_sp)+sqr(_s*_cp))/
(5.*sqr(g*_sp*_cp)-sqr(gp*_s*_c));
double vf(sqr(_v/_f));
// masses of the neutral gauge bosons (Eqn A37)
Energy2 MAH2 = sqr(mz)*sw2*(0.2/sqr(_sp*_cp)/vf-1.+0.25*xH*cw2/sqr(_s*_c)/sw2);
Energy2 MZH2 = sqr(mw)*(1./sqr(_s*_c)/vf-1.-xH*sw2/sqr(_sp*_cp)/cw2);
// mass of the heavy charged gauge boson (Eqn. A33)
Energy2 MWH2 = sqr(mw)*(1./sqr(_s*_c)/vf-1.);
// top and heavy top yukawas (from Eqns 26,27)
Energy mt = getParticleData(ParticleID::t)->mass();
Energy MT = _f/_v*(1.+sqr(_lamratio))/_lamratio*mt;
_lambda2 = MT/sqrt(1.+sqr(_lamratio))/_f;
_lambda1 = _lamratio*_lambda2;
// masses of the Higgs bosons (Eqns 12 and 13)
double r = 8.*_f/_v*_vacratio;
double lamh = 2.*sqr(_mH/_v)/(1./r-0.25*r)/r;
Energy2 MPhi2 = lamh*sqr(_f);
// from Eqn A28
_s0 = 2.*sqrt(2.)*_vacratio;
_c0 = 1.-4.*sqr(_vacratio);
// from Eqn A27
_sP = 2.*sqrt(2.)*_vacratio;
_cP = 1.-4.*sqr(_vacratio);
_sPlus = 2.*_vacratio;
_cPlus = 1.-2.*sqr(_vacratio);
// set the masses of the new particles
resetMass( 32,sqrt(MAH2));
resetMass( 33,sqrt(MZH2));
resetMass( 34,sqrt(MWH2));
resetMass(-34,sqrt(MWH2));
resetMass( 8,MT);
resetMass( -8,MT);
resetMass( 35,sqrt(MPhi2));
resetMass( 36,sqrt(MPhi2));
resetMass( 37,sqrt(MPhi2));
resetMass(-37,sqrt(MPhi2));
resetMass( 38,sqrt(MPhi2));
resetMass(-38,sqrt(MPhi2));
}
-
-void LHModel::resetMass(long id, Energy mass) {
- tPDPtr part = getParticleData(id);
- if(!part) return;
- part->init();
- const InterfaceBase * ifb = BaseRepository::FindInterface(part, "NominalMass");
- ostringstream os;
- os << abs(mass/GeV);
- ifb->exec(*part, "set", os.str());
-}
diff --git a/Models/LH/LHModel.h b/Models/LH/LHModel.h
--- a/Models/LH/LHModel.h
+++ b/Models/LH/LHModel.h
@@ -1,335 +1,289 @@
// -*- C++ -*-
#ifndef HERWIG_LHModel_H
#define HERWIG_LHModel_H
//
// This is the declaration of the LHModel class.
//
#include "Herwig++/Models/StandardModel/StandardModel.h"
#include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
#include "LHModel.fh"
namespace Herwig {
using namespace ThePEG;
/**
- * Here is the documentation of the LHModel class.
+ * The LHModel class is the main class for the implementation of the Little Higgs model in Herwig++.
+ * In inherits from the StandardModel class and implements the calcuation of the couplings
+ * and masses in the Little Higgs model and storage of the additional couplings.
*
* @see \ref LHModelInterfaces "The interfaces"
* defined for LHModel.
*/
class LHModel: public StandardModel {
public:
/**
* The default constructor.
*/
LHModel();
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();
public:
/**
* Access to the parameters of the model
*/
//@{
/**
* The \f$\lambda_1\f$ top Yukawa coupling
*/
double lambda1() const {return _lambda1;}
/**
* The \f$\lambda_2\f$ top Yukawa coupling
*/
double lambda2() const {return _lambda2;}
/**
* The sine of the \f$\theta\f$ mixing angle
*/
double sinTheta() const {return _s;}
/**
* The cosine of the \f$\theta\f$ mixing angle
*/
double cosTheta() const {return _c;}
/**
* The sine of the \f$\theta'\f$ mixing angle
*/
double sinThetaPrime() const {return _sp;}
/**
* The cosine of the \f$\theta'\f$ mixing angle
*/
double cosThetaPrime() const {return _cp;}
/**
* The sine of the Higgs mixing angle
*/
double sinTheta0() const {return _s0;}
/**
* The cosine of the Higgs mixing angle
*/
double cosTheta0() const {return _c0;}
/**
* The sine of the pseudoscalar Higgs mixing angle
*/
double sinThetaP() const {return _sP;}
/**
* The cosine of the pseudoscalar Higgs mixing angle
*/
double cosThetaP() const {return _cP;}
/**
* The sine of the charged Higgs mixing angle
*/
double sinThetaPlus() const {return _sPlus;}
/**
* The cosine of the charged Higgs mixing angle
*/
double cosThetaPlus() const {return _cPlus;}
/**
* The vacuum expection value
*/
Energy vev() const {return _v;}
/**
* The vacuum expection value
*/
Energy vevPrime() const {return _v*_vacratio;}
/**
* The \f$f\f$ scale of the non-linear \f$\sigma\f$-model
*/
Energy f() const {return _f;}
//@}
protected:
- /**
- * Reset the mass of a ParticleData object
- */
- void resetMass(long id, Energy mass);
-
-protected:
-
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHModel> initLHModel;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHModel & operator=(const LHModel &);
private:
/**
* Parameters for the model
*/
//@{
/**
* The value of \f$\cot\theta\f$ for the mixing with the \f$g\f$ coupling
*/
double _cott;
/**
* The value of \f$\tan\theta'\f$ for the mixing with the \f$g'\f$ coupling
*/
double _tantp;
/**
* The vacuum expection valve
*/
Energy _v;
/**
* The ratio \f$\lambda_2/\lambda_1\f$
*/
double _lamratio;
/**
* The mass of the lightest Higgs boson
*/
Energy _mH;
/**
* The ratio of the vacuum exception values \f$v'/v\f$
*/
double _vacratio;
/**
* The scale for the non-linear \f$\sigma\f$-model
*/
Energy _f;
/**
* The top Yukawa couplings
*/
double _lambda1,_lambda2;
/**
* The sine of the \f$\theta\f$ mixing angle
*/
double _s;
/**
* The cosine of the \f$\theta\f$ mixing angle
*/
double _c;
/**
* The sine of the \f$\theta'\f$ mixing angle
*/
double _sp;
/**
* The cosine of the \f$\theta'\f$ mixing angle
*/
double _cp;
/**
* The sine of the Higgs mixing angle
*/
double _s0;
/**
* The cosine of the Higgs mixing angle
*/
double _c0;
/**
* The sine of the pseudoscalar Higgs mixing angle
*/
double _sP;
/**
* The cosine of the pseudoscalar Higgs mixing angle
*/
double _cP;
/**
* The sine of the charged Higgs mixing angle
*/
double _sPlus;
/**
* The cosine of the charged Higgs mixing angle
*/
double _cPlus;
//@}
/**
* Additional vertices
*/
//@{
/**
* WHH Vertex
*/
AbstractVSSVertexPtr WHHVertex_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHModel. */
-template <>
-struct BaseClassTrait<Herwig::LHModel,1> {
- /** Typedef of the first base class of LHModel. */
- typedef Herwig::StandardModel NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHModel class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHModel>
- : public ClassTraitsBase<Herwig::LHModel> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHModel"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHModel is implemented. It may also include several, space-separated,
- * libraries if the class LHModel 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHModel_H */
diff --git a/Models/LH/LHWHHVertex.cc b/Models/LH/LHWHHVertex.cc
--- a/Models/LH/LHWHHVertex.cc
+++ b/Models/LH/LHWHHVertex.cc
@@ -1,283 +1,286 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHWHHVertex class.
//
#include "LHWHHVertex.h"
#include "LHModel.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
LHWHHVertex::LHWHHVertex() :
couplast_(0.), q2last_(ZERO), coup_(24) {
orderInGs(0);
orderInGem(1);
// neutral
addToList( 22, 37,-37);
addToList( 22, 38,-38);
addToList( 32, 37,-37);
addToList( 32, 38,-38);
addToList( 23, 37,-37);
addToList( 23, 38,-38);
addToList( 33, 37,-37);
addToList( 33, 38,-38);
addToList( 32, 25, 36);
addToList( 32, 35, 36);
addToList( 23, 25, 36);
addToList( 23, 35, 36);
addToList( 33, 25, 36);
addToList( 33, 35, 36);
// W+
addToList( 24, 25,-37);
addToList( 24, 35,-37);
addToList( 24, 36,-37);
addToList( 24, 37,-38);
addToList( 34, 25,-37);
addToList( 34, 35,-37);
addToList( 34, 36,-37);
addToList( 34, 37,-38);
// W-
addToList(-24, 25, 37);
addToList(-24, 35, 37);
addToList(-24, 36, 37);
addToList(-24,-37, 38);
addToList(-34, 25, 37);
addToList(-34, 35, 37);
addToList(-34, 36, 37);
addToList(-34,-37, 38);
}
IBPtr LHWHHVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHWHHVertex::fullclone() const {
return new_ptr(*this);
}
void LHWHHVertex::persistentOutput(PersistentOStream & os) const {
os << coup_;
}
void LHWHHVertex::persistentInput(PersistentIStream & is, int) {
is >> coup_;
}
-ClassDescription<LHWHHVertex> LHWHHVertex::initLHWHHVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHWHHVertex,VSSVertex>
+describeHerwigLHWHHVertex("Herwig::LHWHHVertex", "HwLHModel.so");
void LHWHHVertex::Init() {
static ClassDocumentation<LHWHHVertex> documentation
- ("There is no documentation for the LHWHHVertex class");
+ ("The LHWHHVertex class implements the coupling of a pair of Higgs"
+ " bosons to an electroweak gauge boson in the Little Higgs model.");
}
void LHWHHVertex::doinit() {
VSSVertex::doinit();
// model
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHWWWWVertex::doinit()"
<< Exception::runerror;
double sw2(sin2ThetaW());
double sw(sqrt(sw2)),cw(sqrt(1.-sw2));
double s (model->sinTheta() ),c (model->cosTheta() );
double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
double s0 (model->sinTheta0());
double sP (model->sinThetaP());
double sPlus(model->sinThetaPlus());
coup_[ 0] = 0.5/sw*(sqrt(2.)*s0-sPlus);
coup_[ 1] = sqrt(0.5)/sw;
coup_[ 2] = Complex(0.,1.)/sw*sqrt(0.5);
coup_[ 3] = 1./sw;
coup_[ 4] = 0.;
coup_[ 5] = 0.;
coup_[ 6] = 1.;
coup_[ 7] = 2.;
coup_[ 8] = Complex(0.,0.5)/cw/sw*(sP-2.*s0);
coup_[ 9] =-Complex(0.,1.)/cw/sw;
coup_[10] =-sw/cw;
coup_[11] = (1.-2.*sw2)/cw/sw;
coup_[12] =-0.25/sw*(sqr(c)-sqr(s))/s/c*(sqrt(2.)*s0-sPlus);
coup_[13] =-sqrt(0.5)/sw*0.5*(sqr(c)-sqr(s))/s/c;
coup_[14] =-Complex(0.,1.)*sqrt(0.5)*0.5*(sqr(c)-sqr(s))/s/c;
coup_[15] =-0.5*(sqr(c)-sqr(s))/s/c/sw;
coup_[16] =-Complex(0.,0.5)/cw*0.5*(sqr(cp)-sqr(sp))/sp/cp*(sP-2.*s0);
coup_[17] = Complex(0.,1.)/cw*0.5*(sqr(cp)-sqr(sp))/sp/cp;
coup_[18] =-0.5*(sqr(cp)-sqr(sp))/sp/cp/cw;
coup_[19] =-0.5*(sqr(cp)-sqr(sp))/sp/cp/cw;
coup_[20] =-Complex(0.,0.5)/sw*0.5*(sqr(c)-sqr(s))/s/c*(sP-2.*s0);
coup_[21] = Complex(0.,1.)/sw*0.5*(sqr(c)-sqr(s))/s/c;
coup_[22] = 0.;
coup_[23] =-0.5/sw*(sqr(c)-sqr(s))/s/c;
}
void LHWHHVertex::setCoupling(Energy2 q2, tcPDPtr particle1,
tcPDPtr particle2, tcPDPtr particle3) {
if( q2 != q2last_ || couplast_==0.) {
q2last_ = q2;
couplast_ = electroMagneticCoupling(q2);
}
int ibos = particle1->id();
int isc1 = particle2->id();
int isc2 = particle3->id();
if(ibos==ParticleID::gamma) {
if(isc1==37)
norm(coup_[6]*couplast_);
else if(isc1==38)
norm(coup_[7]*couplast_);
else if(isc1==-37)
norm(-coup_[6]*couplast_);
else if(isc1==-38)
norm(-coup_[7]*couplast_);
else
assert(false);
}
if(ibos==32) {
if(isc1==37)
norm(coup_[18]*couplast_);
else if(isc1==38)
norm(coup_[19]*couplast_);
else if(isc1==-37)
norm(-coup_[18]*couplast_);
else if(isc1==-38)
norm(-coup_[19]*couplast_);
else if(isc1==25)
norm(coup_[16]*couplast_);
else if(isc1==35)
norm(coup_[17]*couplast_);
else if(isc2==25)
norm(-coup_[16]*couplast_);
else if(isc2==35)
norm(-coup_[17]*couplast_);
else
assert(false);
}
else if(ibos==ParticleID::Z0) {
if(isc1==37)
norm(coup_[10]*couplast_);
else if(isc1==38)
norm(coup_[11]*couplast_);
else if(isc1==-37)
norm(-coup_[10]*couplast_);
else if(isc1==-38)
norm(-coup_[11]*couplast_);
else if(isc1==25)
norm(coup_[8]*couplast_);
else if(isc1==35)
norm(coup_[9]*couplast_);
else if(isc2==25)
norm(-coup_[8]*couplast_);
else if(isc2==35)
norm(-coup_[9]*couplast_);
else
assert(false);
}
else if(ibos==33) {
if(isc1==37)
norm(coup_[22]*couplast_);
else if(isc1==38)
norm(coup_[23]*couplast_);
else if(isc1==-37)
norm(-coup_[22]*couplast_);
else if(isc1==-38)
norm(-coup_[23]*couplast_);
else if(isc1==25)
norm(coup_[20]*couplast_);
else if(isc1==35)
norm(coup_[21]*couplast_);
else if(isc2==25)
norm(-coup_[20]*couplast_);
else if(isc2==35)
norm(-coup_[21]*couplast_);
else
assert(false);
}
else if(ibos==ParticleID::Wplus) {
if(isc1==25)
norm(coup_[0]*couplast_);
else if(isc1==35)
norm(coup_[1]*couplast_);
else if(isc1==36)
norm(coup_[2]*couplast_);
else if(isc1==37)
norm(coup_[3]*couplast_);
else if(isc2==25)
norm(-coup_[0]*couplast_);
else if(isc2==35)
norm(-coup_[1]*couplast_);
else if(isc2==36)
norm(-coup_[2]*couplast_);
else if(isc2==37)
norm(-coup_[3]*couplast_);
else
assert(false);
}
else if(ibos==34) {
if(isc1==25)
norm(coup_[12]*couplast_);
else if(isc1==35)
norm(coup_[13]*couplast_);
else if(isc1==36)
norm(coup_[14]*couplast_);
else if(isc1==37)
norm(coup_[15]*couplast_);
else if(isc2==25)
norm(-coup_[12]*couplast_);
else if(isc2==35)
norm(-coup_[13]*couplast_);
else if(isc2==36)
norm(-coup_[14]*couplast_);
else if(isc2==37)
norm(-coup_[15]*couplast_);
else
assert(false);
}
else if(ibos==ParticleID::Wminus) {
if(isc1==25)
norm(conj(coup_[0])*couplast_);
else if(isc1==35)
norm(conj(coup_[1])*couplast_);
else if(isc1==36)
norm(conj(coup_[2])*couplast_);
else if(isc1==37)
norm(conj(coup_[3])*couplast_);
else if(isc2==25)
norm(-conj(coup_[0])*couplast_);
else if(isc2==35)
norm(-conj(coup_[1])*couplast_);
else if(isc2==36)
norm(-conj(coup_[2])*couplast_);
else if(isc2==37)
norm(-conj(coup_[3])*couplast_);
else
assert(false);
}
else if(ibos==-34) {
if(isc1==25)
norm(conj(coup_[12])*couplast_);
else if(isc1==35)
norm(conj(coup_[13])*couplast_);
else if(isc1==36)
norm(conj(coup_[14])*couplast_);
else if(isc1==37)
norm(conj(coup_[15])*couplast_);
else if(isc2==25)
norm(-conj(coup_[12])*couplast_);
else if(isc2==35)
norm(-conj(coup_[13])*couplast_);
else if(isc2==36)
norm(-conj(coup_[14])*couplast_);
else if(isc2==37)
norm(-conj(coup_[15])*couplast_);
else
assert(false);
}
}
diff --git a/Models/LH/LHWHHVertex.h b/Models/LH/LHWHHVertex.h
--- a/Models/LH/LHWHHVertex.h
+++ b/Models/LH/LHWHHVertex.h
@@ -1,161 +1,118 @@
// -*- C++ -*-
#ifndef HERWIG_LHWHHVertex_H
#define HERWIG_LHWHHVertex_H
//
// This is the declaration of the LHWHHVertex class.
//
#include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
- * Here is the documentation of the LHWHHVertex class.
- *
- * @see \ref LHWHHVertexInterfaces "The interfaces"
- * defined for LHWHHVertex.
+ * The LHWHHVertex class implements the coupling of an electroweak gauge
+ * boson to a pair of Higgs bosons in the Little Higgs model.
*/
class LHWHHVertex: public Helicity::VSSVertex {
public:
/**
* The default constructor.
*/
LHWHHVertex();
/** @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();
/**
* Calculate the coupling for the vertex
* @param q2 The scale to at which evaluate the coupling.
* @param particle1 The first particle in the vertex.
* @param particle2 The second particle in the vertex.
* @param particle3 The third particle in the vertex.
*/
virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
tcPDPtr particle3);
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 after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHWHHVertex> initLHWHHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHWHHVertex & operator=(const LHWHHVertex &);
private:
/**
* The value of the coupling when last evaluated
*/
Complex couplast_;
/**
* The scale at which the coupling was last evaluated.
*/
Energy2 q2last_;
/**
* Couplings
*/
vector<Complex> coup_;
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHWHHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHWHHVertex,1> {
- /** Typedef of the first base class of LHWHHVertex. */
- typedef Helicity::VSSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHWHHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHWHHVertex>
- : public ClassTraitsBase<Herwig::LHWHHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHWHHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHWHHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHWHHVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHWHHVertex_H */
diff --git a/Models/LH/LHWWHHVertex.cc b/Models/LH/LHWWHHVertex.cc
--- a/Models/LH/LHWWHHVertex.cc
+++ b/Models/LH/LHWWHHVertex.cc
@@ -1,492 +1,496 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHWWHHVertex class.
//
#include "LHWWHHVertex.h"
#include "LHModel.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
LHWWHHVertex::LHWWHHVertex() :
couplast_(0.), q2last_(ZERO), coup_(107) {
orderInGs(0);
orderInGem(2);
// VVHH
addToList( 24, -24, 25, 25);
addToList( 23, 23, 25, 25);
addToList( 24, -34, 25, 25);
addToList( 34, -24, 25, 25);
addToList( 23, 32, 25, 25);
addToList( 34, -34, 25, 25);
addToList( 33, 33, 25, 25);
addToList( 32, 32, 25, 25);
addToList( 23, 33, 25, 25);
addToList( 32, 33, 25, 25);
// VVH Phi_0
addToList( 24, -24, 25, 35);
addToList( 23, 23, 25, 35);
addToList( 24, -34, 25, 35);
addToList( 34, -24, 25, 35);
addToList( 23, 32, 25, 35);
addToList( 34, -34, 25, 35);
addToList( 33, 33, 25, 35);
addToList( 32, 32, 25, 35);
addToList( 23, 33, 25, 35);
addToList( 32, 33, 25, 35);
// VV Phi_0 Phi_0
addToList( 24, -24, 35, 35);
addToList( 23, 23, 35, 35);
addToList( 24, -34, 35, 35);
addToList( 34, -24, 35, 35);
addToList( 23, 32, 35, 35);
addToList( 34, -34, 35, 35);
addToList( 33, 33, 35, 35);
addToList( 32, 32, 35, 35);
addToList( 23, 33, 35, 35);
addToList( 32, 33, 35, 35);
// VV Phi_P Phi_P
addToList( 24, -24, 36, 36);
addToList( 23, 23, 36, 36);
addToList( 24, -34, 36, 36);
addToList( 34, -24, 36, 36);
addToList( 23, 32, 36, 36);
addToList( 34, -34, 36, 36);
addToList( 33, 33, 36, 36);
addToList( 32, 32, 36, 36);
addToList( 23, 33, 36, 36);
addToList( 32, 33, 36, 36);
// VV Phi+ Phi-
addToList( 24, -24, 37, -37);
addToList( 23, 23, 37, -37);
addToList( 22, 22, 37, -37);
addToList( 22, 23, 37, -37);
addToList( 24, -34, 37, -37);
addToList( 34, -24, 37, -37);
addToList( 34, -34, 37, -37);
addToList( 33, 33, 37, -37);
addToList( 32, 32, 37, -37);
addToList( 32, 33, 37, -37);
addToList( 22, 32, 37, -37);
addToList( 23, 33, 37, -37);
addToList( 23, 32, 37, -37);
// VV Phi++ Phi--
addToList( 24, -24, 38, -38);
addToList( 23, 23, 38, -38);
addToList( 22, 22, 38, -38);
addToList( 22, 23, 38, -38);
addToList( 24, -34, 38, -38);
addToList( 34, -24, 38, -38);
addToList( 34, -34, 38, -38);
addToList( 33, 33, 38, -38);
addToList( 32, 32, 38, -38);
addToList( 32, 33, 38, -38);
addToList( 22, 32, 38, -38);
addToList( 23, 33, 38, -38);
addToList( 23, 32, 38, -38);
// VV H phi- + cc
addToList( 24, 22, 25, -37);
addToList( 24, 23, 25, -37);
addToList( 24, 32, 25, -37);
addToList( 24, 33, 25, -37);
addToList( 34, 22, 25, -37);
addToList( 34, 23, 25, -37);
addToList( 34, 32, 25, -37);
addToList( 34, 33, 25, -37);
addToList( -24, 22, 25, 37);
addToList( -24, 23, 25, 37);
addToList( -24, 32, 25, 37);
addToList( -24, 33, 25, 37);
addToList( -34, 22, 25, 37);
addToList( -34, 23, 25, 37);
addToList( -34, 32, 25, 37);
addToList( -34, 33, 25, 37);
// VV phi0 phi- + cc
addToList( 24, 22, 35, -37);
addToList( 24, 23, 35, -37);
addToList( 24, 32, 35, -37);
addToList( 24, 33, 35, -37);
addToList( 34, 22, 35, -37);
addToList( 34, 23, 35, -37);
addToList( 34, 32, 35, -37);
addToList( 34, 33, 35, -37);
addToList( -24, 22, 35, 37);
addToList( -24, 23, 35, 37);
addToList( -24, 32, 35, 37);
addToList( -24, 33, 35, 37);
addToList( -34, 22, 35, 37);
addToList( -34, 23, 35, 37);
addToList( -34, 32, 35, 37);
addToList( -34, 33, 35, 37);
// VV phiP phi- + cc
addToList( 24, 22, 36, -37);
addToList( 24, 23, 36, -37);
addToList( 24, 32, 36, -37);
addToList( 24, 33, 36, -37);
addToList( 34, 22, 36, -37);
addToList( 34, 23, 36, -37);
addToList( 34, 32, 36, -37);
addToList( 34, 33, 36, -37);
addToList( -24, 22, 36, 37);
addToList( -24, 23, 36, 37);
addToList( -24, 32, 36, 37);
addToList( -24, 33, 36, 37);
addToList( -34, 22, 36, 37);
addToList( -34, 23, 36, 37);
addToList( -34, 32, 36, 37);
addToList( -34, 33, 36, 37);
// VV phi+ phi -- + cc
addToList( 24, 22, 37, -38);
addToList( 24, 23, 37, -38);
addToList( 24, 32, 37, -38);
addToList( 24, 33, 37, -38);
addToList( 34, 22, 37, -38);
addToList( 34, 23, 37, -38);
addToList( 34, 32, 37, -38);
addToList( 34, 33, 37, -38);
addToList( -24, 22, -37, 38);
addToList( -24, 23, -37, 38);
addToList( -24, 32, -37, 38);
addToList( -24, 33, -37, 38);
addToList( -34, 22, -37, 38);
addToList( -34, 23, -37, 38);
addToList( -34, 32, -37, 38);
addToList( -34, 33, -37, 38);
// VV H phi-- + cc
addToList( 24, 24, 25, -38);
addToList( -24, -24, 25, 38);
addToList( 24, 34, 25, -38);
addToList( -24, -34, 25, 38);
addToList( 34, 34, 25, -38);
addToList( -34, -34, 25, 38);
// VV phi0 phi-- + cc
addToList( 24, 24, 35, -38);
addToList( -24, -24, 35, 38);
addToList( 24, 34, 35, -38);
addToList( -24, -34, 35, 38);
addToList( 34, 34, 35, -38);
addToList( -34, -34, 35, 38);
// VV phiP phi-- + cc
addToList( 24, 24, 36, -38);
addToList( -24, -24, 36, 38);
addToList( 24, 34, 36, -38);
addToList( -24, -34, 36, 38);
addToList( 34, 34, 36, -38);
addToList( -34, -34, 36, 38);
}
IBPtr LHWWHHVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHWWHHVertex::fullclone() const {
return new_ptr(*this);
}
void LHWWHHVertex::persistentOutput(PersistentOStream & os) const {
os << coup_;
}
void LHWWHHVertex::persistentInput(PersistentIStream & is, int) {
is >> coup_;
}
-ClassDescription<LHWWHHVertex> LHWWHHVertex::initLHWWHHVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHWWHHVertex,VVSSVertex>
+describeHerwigLHWWHHVertex("Herwig::LHWWHHVertex", "HwLHModel.so");
void LHWWHHVertex::Init() {
static ClassDocumentation<LHWWHHVertex> documentation
- ("There is no documentation for the LHWWHHVertex class");
+ ("The LHWWHHVertex class implements the couplings of a pair"
+ " of electroweak gauge bosons and a pair of Higgs bosons in"
+ " the Little Higgs model.");
}
void LHWWHHVertex::doinit() {
VVSSVertex::doinit();
// model
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHWWWWVertex::doinit()"
<< Exception::runerror;
double sw2(sin2ThetaW()),cw2(1.-sw2);
double sw(sqrt(sw2)),cw(sqrt(cw2));
double s (model->sinTheta() ),c (model->cosTheta() );
double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
double s0 (model->sinTheta0());
double sPlus(model->sinThetaPlus());
// VV HH
coup_[ 0] = 0.5/sw2;
coup_[ 1] = 0.5/sw2/cw2;
coup_[ 2] = 0.;
coup_[ 3] =-0.25/sw2*(sqr(c)-sqr(s))/c/s;
coup_[ 4] =-0.25/sw/cw2*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 5] =-0.5/sw2;
coup_[ 6] =-0.5/sw2;
coup_[ 7] =-0.5/cw2;
coup_[ 8] =-0.25/sw2/cw*(sqr(c)-sqr(s))/c/s;
coup_[ 9] =-0.25/sw/cw*(sqr(c*sp)+sqr(s*cp))/c/s/sp/cp;
// VV H Phi_0
coup_[ 10] = 0.5*s0/sw2;
coup_[ 11] = 1.5*s0/sw2/cw2;
coup_[ 12] = 0.;
coup_[ 13] =-0.25/sw2*(sqr(c)-sqr(s))/c/s*s0;
coup_[ 14] =-0.75/sw/cw2*(sqr(cp)-sqr(sp))/cp/sp*s0;
coup_[ 15] = -0.5/sw2*s0;
coup_[ 16] = 0.5/sw2*(1.+sqr(sqr(c)-sqr(s))/sqr(s*c))*s0;
coup_[ 17] = 0.5/cw2*(1.+sqr(sqr(cp)-sqr(sp))/sqr(sp*cp))*s0;
coup_[ 18] =-0.75/cw/sw2*(sqr(c)-sqr(s))/c/s*s0;
coup_[ 19] = 0.25/sw/cw/c/s/sp/cp*((sqr(c*sp)+sqr(s*cp))
+2.*(sqr(c)-sqr(s))*(sqr(cp)-sqr(sp)))*s0;
// VV phi0 phi0
coup_[ 20] = 1./sw2;
coup_[ 21] = 2./cw2/sw2;
coup_[ 22] = 0.;
coup_[ 23] =-0.5/sw2*(sqr(c)-sqr(s))/c/s;
coup_[ 24] =-1./sw/cw2*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 25] =-1./sw2;
coup_[ 26] = 0.5/sw2*sqr(sqr(c)-sqr(s))/sqr(s*c);
coup_[ 26] = 0.5/cw2*sqr(sqr(cp)-sqr(sp))/sqr(sp*cp);
coup_[ 28] =-1./cw/sw2*(sqr(c)-sqr(s))/c/s;
coup_[ 29] = 0.5/cw/sw*(sqr(c)-sqr(s))*(sqr(cp)-sqr(sp))/s/c/sp/cp;
// VV phi_P phi_P
coup_[ 30] = 1./sw2;
coup_[ 31] = 2./sw2/cw2;
coup_[ 32] = 0.;
coup_[ 33] =-0.5/sw2*(sqr(c)-sqr(s))/c/s;
coup_[ 34] =-1./sw/cw2*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 35] =-1./sw2;
coup_[ 36] = 0.5/sw2*sqr(sqr(c)-sqr(s))/sqr(s*c);
coup_[ 37] = 0.5/cw2*sqr(sqr(cp)-sqr(sp))/sqr(sp*cp);
coup_[ 38] =-1./cw/sw2*(sqr(c)-sqr(s))/s/c;
coup_[ 39] = 0.5/cw/sw*(sqr(c)-sqr(s))*(sqr(cp)-sqr(sp))/s/c/sp/cp;
// VV phi+ phi-
coup_[ 40] = 2./sw2;
coup_[ 41] = 2.*sw2/cw2;
coup_[ 42] = 2.;
coup_[ 43] =-2.*sw/cw;
coup_[ 44] =-1./sw2*(sqr(c)-sqr(s))/s/c;
coup_[ 45] = 0.;
coup_[ 46] = 0.5/sw2*sqr(sqr(c)-sqr(s))/sqr(s*c);
coup_[ 47] =-0.5/sw2/sqr(s*c);
coup_[ 48] = 0.5/cw2*sqr(sqr(cp)-sqr(sp))/sqr(sp*cp);
coup_[ 49] = 0.;
coup_[ 50] =-1./cw*(sqr(cp)-sqr(sp))/sp/cp;
coup_[ 51] = 0.;
coup_[ 52] = sw/cw2*(sqr(cp)-sqr(sp))/sp/cp;
// VV phi++ phi--
coup_[ 53] = 1./sw2;
coup_[ 54] = 2./cw2/sw2*sqr(1.-2.*sw2);
coup_[ 55] = 8.;
coup_[ 56] = 4./sw/cw*(1.-2.*sw2);
coup_[ 57] =-0.5/sw2*(sqr(c)-sqr(s))/s/c;
coup_[ 58] = 2./sw*(sqr(c)-sqr(s))/s/c;
coup_[ 59] =-1./sw2;
coup_[ 60] = 0.5/sw2*sqr(sqr(c)-sqr(s))/sqr(s*c);
coup_[ 61] = 0.5/cw2*sqr(sqr(cp)-sqr(sp))/sqr(sp*cp);
coup_[ 62] =-0.5/cw/sw*(sqr(c)-sqr(s))*(sqr(cp)-sqr(sp))/s/c/sp/cp;
coup_[ 63] =-2./cw*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 64] = 1./sw2/cw*(sqr(c )-sqr(s ))/s /c *(1.-2.*sw2);
coup_[ 65] =-1./cw2/sw*(sqr(cp)-sqr(sp))/sp/cp*(1.-2.*sw2);
// VV h phi-
coup_[ 66] =-0.5/sw*(sPlus-sqrt(2.)*s0);
coup_[ 67] = 0.5/cw/sw2*(sPlus*sw2-sqrt(2.)*s0*(1.+sw2));
coup_[ 68] =-0.25/sw/cw*(sqr(cp)-sqr(sp))/cp/sp*(sPlus-2.*sqrt(2.)*s0);
coup_[ 69] = 0.25/sw2*(sqr(c)-sqr(s))/s/c*s0;
coup_[ 70] = 0.25/sw*(sqr(c)-sqr(s))/s/c*(sPlus-sqrt(2.)*s0);
coup_[ 71] =-0.25/sw2/cw*(sqr(c)-sqr(s))/s/c*(sPlus*sw2-sqrt(2.)*s0*(1.+sw2));
coup_[ 72] =-0.25/sw/cw/s/c/sp/cp*(sPlus*(sqr(c*sp)+sqr(s*cp))
+sqrt(2.)*(sqr(c)-sqr(s))*(sqr(cp)-sqr(sp)));
coup_[ 73] =-0.25/sw2*s0*(pow(c,4)+pow(s,4))/sqr(s*c);
// VV phi0 phi-
coup_[ 74] =-sqrt(0.5)/sw;
coup_[ 75] =-sqrt(0.5)/sw2/cw*(1.+sw2);
coup_[ 76] = sqrt(0.5)/sw/cw*(sqr(cp)-sqr(sp))/sp/cp;
coup_[ 77] = 0.5*sqrt(0.5)/sw2*(sqr(c)-sqr(s))/c/s;
coup_[ 78] = 0.5*sqrt(0.5)/sw*(sqr(c)-sqr(s))/c/s;
coup_[ 79] = 0.5*sqrt(0.5)/sw2/cw*(sqr(c)-sqr(s))/c/s*(1.+sw2);
coup_[ 80] =-0.5*sqrt(0.5)/sw/cw*(sqr(cp)-sqr(sp))/cp/sp*(sqr(c)-sqr(s))/c/s;
coup_[ 81] =-0.5*sqrt(0.5)/sw2*(pow(c,4)+pow(s,4))/sqr(s*c);
// VV phi+ phi--
coup_[ 82] = 3./sw;
coup_[ 83] = (1.-3.*sw2)/cw/sw2;
coup_[ 84] = 1./sw/cw*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 85] = Complex(0.,1.)*0.5*sqrt(0.5)/sw2*(sqr(c)-sqr(s))/s/c;
coup_[ 86] =-3./sw*(sqr(c)-sqr(s))/s/c;
coup_[ 87] =-0.5/sw2/cw*(sqr(c)-sqr(s))/s/c*(1.-3.*sw2);
coup_[ 88] =-0.5/sw/cw*(sqr(c)-sqr(s))/s/c*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 89] =-Complex(0.,1.)*0.5*sqrt(0.5)/sw2*(pow(c,4)+pow(s,4))/sqr(s*c);
// VV phip phi-
coup_[ 90] =-Complex(0.,1.)/sw*sqrt(0.5);
coup_[ 91] =-Complex(0.,1.)/sw2/cw*(1.+sw2);
coup_[ 92] = Complex(0.,1.)/sw/cw*sqrt(0.5)*(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 93] = Complex(0.,1.)/sw2*sqrt(0.5)*0.5*(sqr(c)-sqr(s))/s/c;
coup_[ 94] =-Complex(0.,1.)*sqrt(0.5)*0.5/sw*(sqr(c)-sqr(s))/s/c;
coup_[ 95] = Complex(0.,1.)*sqrt(0.5)*0.5/sw2/cw*(sqr(c)-sqr(s))/s/c*(1.+sw2);
coup_[ 96] =-Complex(0.,1.)*sqrt(0.5)*0.5/sw/cw*(sqr(c )-sqr(s ))/s/c*
(sqr(cp)-sqr(sp))/cp/sp;
coup_[ 97] =-Complex(0.,1.)/sw2*sqrt(0.5)*0.5*(pow(c,4)+pow(s,4))/sqr(s*c);
// VV H phi--
coup_[ 98] = sqrt(2.)/sw2*s0;
coup_[ 99] =-sqrt(2.)/sw2*0.5*(sqr(c)-sqr(s))/s/c*s0;
coup_[100] = sqrt(2.)/sw2*0.5*(pow(c,4)+pow(s,4))/sqr(s*c)*s0;
// VV phi0 phi--
coup_[101] = sqrt(2.)/sw2;
coup_[102] =-sqrt(2.)/sw2*0.5*(sqr(c)-sqr(s))/s/c;
coup_[103] = sqrt(2.)/sw2*0.5*(pow(c,4)+pow(s,4))/sqr(s*c);
// VV phip phi--
coup_[104] = Complex(0.,1.)*sqrt(2.)/sw2;
coup_[105] =-Complex(0.,1.)*sqrt(2.)/sw2*0.5*(sqr(c)-sqr(s))/s/c;
coup_[106] = Complex(0.,1.)*sqrt(2.)/sw2*0.5*(pow(c,4)+pow(s,4))/sqr(s*c);
}
void LHWWHHVertex::setCoupling(Energy2 q2,
tcPDPtr part1,tcPDPtr part2,
tcPDPtr part3,tcPDPtr part4) {
if( q2 != q2last_ || couplast_==0.) {
q2last_ = q2;
couplast_ = sqr(electroMagneticCoupling(q2));
}
int ibos1 = part1->id();
int ibos2 = part2->id();
int isca1 = part3->id();
int isca2 = part4->id();
if( isca1 == isca2 ||
(isca1==25&&isca2==35) || (isca1==35&&isca2==25)) {
unsigned int ioff = 0;
if (isca1!=isca2) ioff = 10;
else if(isca1==35 ) ioff = 20;
else if(isca1==36 ) ioff = 30;
if(ibos1==23&&ibos2==23)
norm(coup_[1+ioff]*couplast_);
else if(ibos1==33&&ibos2==33)
norm(coup_[6+ioff]*couplast_);
else if(ibos1==33&&ibos2==33)
norm(coup_[7+ioff]*couplast_);
else if(abs(ibos1)==24&&abs(ibos2)==24)
norm(coup_[0+ioff]*couplast_);
else if(abs(ibos1)==34&&abs(ibos2)==34)
norm(coup_[5+ioff]*couplast_);
else if(( abs(ibos1) == 24 && abs(ibos2) == 34) ||
( abs(ibos1) == 34 && abs(ibos2) == 24))
norm(coup_[3+ioff]*couplast_);
else if(( ibos1 == 23 && ibos2 == 32) ||
( ibos1 == 32 && ibos2 == 23))
norm(coup_[4+ioff]*couplast_);
else if(( ibos1 == 23 && ibos2 == 33) ||
( ibos1 == 33 && ibos2 == 23))
norm(coup_[8+ioff]*couplast_);
else if(( ibos1 == 32 && ibos2 == 33) ||
( ibos1 == 33 && ibos2 == 32))
norm(coup_[9+ioff]*couplast_);
else
assert(false);
}
else if(isca1==-isca2) {
unsigned int ioff = abs(isca1) == 37 ? 40 : 53;
if(abs(ibos1)==24&&abs(ibos2)==24)
norm(coup_[0+ioff]*couplast_);
else if(ibos1==23&&ibos2==23)
norm(coup_[1+ioff]*couplast_);
else if(ibos1==22&&ibos2==22)
norm(coup_[2+ioff]*couplast_);
else if(( ibos1 == 22 && ibos2 == 23) ||
( ibos1 == 23 && ibos2 == 22))
norm(coup_[3+ioff]*couplast_);
else if(( abs(ibos1) == 24 && abs(ibos2) == 34) ||
( abs(ibos1) == 34 && abs(ibos2) == 24))
norm(coup_[4+ioff]*couplast_);
else if(( ibos1 == 22 && ibos2 == 33) ||
( ibos1 == 33 && ibos2 == 22))
norm(coup_[5+ioff]*couplast_);
else if(abs(ibos1)==34&&abs(ibos2)==34)
norm(coup_[6+ioff]*couplast_);
else if(ibos1==33&&ibos2==33)
norm(coup_[7+ioff]*couplast_);
else if(ibos1==32&&ibos2==32)
norm(coup_[8+ioff]*couplast_);
else if(( ibos1 == 32 && ibos2 == 33) ||
( ibos1 == 33 && ibos2 == 32))
norm(coup_[9+ioff]*couplast_);
else if(( ibos1 == 22 && ibos2 == 32) ||
( ibos1 == 32 && ibos2 == 22))
norm(coup_[10+ioff]*couplast_);
else if(( ibos1 == 23 && ibos2 == 33) ||
( ibos1 == 33 && ibos2 == 23))
norm(coup_[11+ioff]*couplast_);
else if(( ibos1 == 23 && ibos2 == 32) ||
( ibos1 == 32 && ibos2 == 23))
norm(coup_[12+ioff]*couplast_);
else
assert(false);
}
else if(((abs(ibos1) == 24 || abs(ibos1) == 34) &&
(abs(ibos2) != 24 && abs(ibos2) != 34)) ||
((abs(ibos2) == 24 || abs(ibos2) == 34) &&
(abs(ibos1) != 24 && abs(ibos1) != 34))) {
int iw,ineut;
if(abs(ibos1) == 24 || abs(ibos1) == 34) {
iw = abs(ibos1);
ineut = ibos2;
}
else {
iw = abs(ibos2);
ineut = ibos1;
}
unsigned int ioff = 66;
if((isca1 == 35 && abs(isca2) == 37) ||
(isca2 == 35 && abs(isca1) == 37)) {
ioff += 8;
}
else if ((abs(isca1) == 37 && abs(isca2) == 38) ||
(abs(isca2) == 37 && abs(isca1) == 38)) {
ioff += 16;
}
else if ((isca1 == 35 && abs(isca2) == 37) ||
(isca2 == 35 && abs(isca1) == 37)) {
ioff += 24;
}
else
assert(false);
if(iw==34) ioff += 4;
if(ineut==22)
norm(coup_[0+ioff]*couplast_);
else if(ineut==23)
norm(coup_[1+ioff]*couplast_);
else if(ineut==32)
norm(coup_[2+ioff]*couplast_);
else if(ineut==33)
norm(coup_[3+ioff]*couplast_);
else
assert(false);
}
else {
unsigned int ioff = 98;
if(isca1==25||isca2==25)
ioff += 0;
else if(isca1==35||isca2==35)
ioff += 3;
else if(isca1==36||isca2==36)
ioff += 6;
else
assert(false);
if(ibos1==ibos2) {
if(abs(ibos1)==24) {
norm(coup_[0+ioff]*couplast_);
}
else if(abs(ibos1)==34) {
norm(coup_[1+ioff]*couplast_);
}
else
assert(false);
}
else {
norm(coup_[2+ioff]*couplast_);
}
}
}
diff --git a/Models/LH/LHWWHHVertex.h b/Models/LH/LHWWHHVertex.h
--- a/Models/LH/LHWWHHVertex.h
+++ b/Models/LH/LHWWHHVertex.h
@@ -1,164 +1,121 @@
// -*- C++ -*-
#ifndef HERWIG_LHWWHHVertex_H
#define HERWIG_LHWWHHVertex_H
//
// This is the declaration of the LHWWHHVertex class.
//
#include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
- * Here is the documentation of the LHWWHHVertex class.
- *
- * @see \ref LHWWHHVertexInterfaces "The interfaces"
- * defined for LHWWHHVertex.
+ * The LHWWHHVertex class implements the coupling of a pair of
+ * electroweak gauge bosons and a pair of Higgs bosons in the Little Higgs model.
*/
class LHWWHHVertex: public Helicity::VVSSVertex {
public:
/**
* The default constructor.
*/
LHWWHHVertex();
/** @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();
/**
* Calculate the couplings. This method is virtual and must be implemented in
* classes inheriting from this.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
* @param part4 The ParticleData pointer for the fourth particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
tcPDPtr part4);
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 after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHWWHHVertex> initLHWWHHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHWWHHVertex & operator=(const LHWWHHVertex &);
private:
/**
* The value of the coupling when last evaluated
*/
Complex couplast_;
/**
* The scale at which the coupling was last evaluated.
*/
Energy2 q2last_;
/**
* Couplings
*/
vector<Complex> coup_;
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHWWHHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHWWHHVertex,1> {
- /** Typedef of the first base class of LHWWHHVertex. */
- typedef Helicity::VVSSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHWWHHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHWWHHVertex>
- : public ClassTraitsBase<Herwig::LHWWHHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHWWHHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHWWHHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHWWHHVertex 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 "LHWWHHVertex.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHWWHHVertex_H */
diff --git a/Models/LH/LHWWHVertex.cc b/Models/LH/LHWWHVertex.cc
--- a/Models/LH/LHWWHVertex.cc
+++ b/Models/LH/LHWWHVertex.cc
@@ -1,224 +1,226 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHWWHVertex class.
//
#include "LHWWHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
void LHWWHVertex::persistentOutput(PersistentOStream & os) const {
os << ounit(_coup,GeV);
}
void LHWWHVertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(_coup,GeV);
}
-ClassDescription<LHWWHVertex> LHWWHVertex::initLHWWHVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHWWHVertex,VVSVertex>
+describeHerwigLHWWHVertex("Herwig::LHWWHVertex", "HwLHModel.so");
void LHWWHVertex::Init() {
static ClassDocumentation<LHWWHVertex> documentation
("The LHWWHVertex class implements the coupling of two electroweak"
" gauge bosons to a Higgs boson in the Little Higgs Model including the "
"additional heavy photon, Z and W bosons and the triplet Higgs bosons.");
}
LHWWHVertex::LHWWHVertex()
: _couplast(0.), _q2last(0.*GeV2) {
// order in the couplings
orderInGem(1);
orderInGs(0);
// W_L W_L H
addToList( 24, -24, 25);
// Z_L Z_L H
addToList( 23, 23, 25);
// W_L W_H H
addToList( 24, -34, 25);
addToList( 34, -24, 25);
// Z_L A_H H
addToList( 23, 32, 25);
// W_H W_H H
addToList( 34, -34, 25);
// Z_H Z_H H
addToList( 33, 33, 25);
// A_H A_H H
addToList( 32, 32, 25);
// Z_H Z_L H
addToList( 23, 33, 25);
// Z_H A_H H
addToList( 33, 32, 25);
// W_L W_L Phi0
addToList( 24, -24, 35);
// W_L W_H Phi0
addToList( 24, -34, 35);
addToList( 34, -24, 35);
// Z_L Z_L Phi0
addToList( 23, 23, 35);
// Z_L Z_H Phi0
addToList( 23, 33, 35);
// W_H W_H Phi0
addToList( 34, -34, 35);
// Z_H Z_H Phi0
addToList( 33, 33, 35);
// A_H Z_H Phi0
addToList( 32, 33, 35);
// A_H Z_L Phi0
addToList( 32, 23, 35);
// A_H A_H Phi0
addToList( 32, 32, 35);
// W_L Z_L Phi-
addToList( 24, 23, -37);
addToList( -24, 23, 37);
// W_L A_H Phi-
addToList( 24, 32, -37);
addToList( -24, 32, 37);
// W_L Z_H Phi-
addToList( 24, 33, -37);
addToList( -24, 33, 37);
// W_H Z_L Phi-
addToList( 34, 23, -37);
addToList( -34, 23, 37);
// W_H A_H Phi-
addToList( 34, 32, -37);
addToList( -34, 32, 37);
// W_H Z_H Phi-
addToList( 34, 33, -37);
addToList( -34, 33, 37);
// W_L W_L Phi--
addToList( 24, 24, -38);
addToList( -24, -24, 38);
// W_H W_H Phi--
addToList( 34, 34, -38);
addToList( -34, -34, 38);
// W_L W_H Phi--
addToList( 24, 34, -38);
addToList( -24, -34, 38);
}
void LHWWHVertex::doinit() {
// model
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHWWHVertex::doinit()"
<< Exception::runerror;
// base class
VVSVertex::doinit();
// calculate the couplings for the different combinations of particles
Energy fact = 0.5*model->vev()/sin2ThetaW();
double sw(sqrt(sin2ThetaW())),cw(sqrt(1.-sin2ThetaW()));
double vf(sqr(model->vev()/model->f()));
double vr(model->vevPrime()/model->vev());
double r2(sqrt(2.));
double s (model->sinTheta() ),c (model->cosTheta() );
double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
double sPlus(model->sinTheta0());
double s0(model->sinTheta0());
_coup.resize(27);
// couplings to SM higgs
_coup[ 0] = fact *(1.-vf/3.+0.5*vf* sqr(sqr(c)-sqr(s))
-0.5*sqr(s0)-2.*r2*s0*vr);
_coup[ 1] = fact/sqr(cw)*(1.-vf/3.-0.5*vf*(sqr(sqr(c)-sqr(s))+5.*sqr(sqr(cp)-sqr(sp)))
-0.5*sqr(s0)+4.*r2*s0*vr);
_coup[ 2] =-fact;
_coup[ 3] =-fact;
_coup[ 4] =-fact*sqr(sw/cw);
_coup[ 5] =-fact*0.5*(sqr(c)-sqr(s))/s/c;
_coup[ 6] =-fact/cw*0.5*(sqr(c)-sqr(s))/s/c;
_coup[ 7] =-fact/sqr(cw)*sw*0.5*(sqr(cp)-sqr(sp))/sp/cp;
_coup[ 8] =-fact/cw*sw*0.5/s/c/sp/cp*(sqr(c*sp)+sqr(s*cp));
_coup[ 9] =-fact*(s0-2.*r2*vr);
_coup[10] = fact*(s0-2.*r2*vr);
_coup[11] = fact*(s0-2.*r2*vr)*0.5*(sqr(c)-sqr(s))/s/c;
_coup[12] =-fact/sqr(cw)*(s0-4.*r2*vr);
_coup[13] = fact*(s0+sqr(sqr(c)-sqr(s))/sqr(s*c)*r2*vr);
_coup[14] = fact/cw*0.5*(sqr(c)-sqr(s))/s/c*(s0-4.*r2*vr);
_coup[15] = fact*sw/sqr(cw)*0.5*(sqr(cp)-sqr(sp))/sp/cp*(s0-4.*r2*vr);
_coup[16] = fact*sw/cw*0.5/s/c/sp/cp*(s0*(sqr(c*sp)+sqr(s*cp))
+2.*r2*(sqr(c)-sqr(s))*(sqr(cp)-sqr(sp))*vr);
_coup[17] = fact*sqr(sw/cw)*(s0+r2*vr*sqr(sqr(cp)-sqr(sp))/sqr(sp*cp));
_coup[18] =-2.*fact/cw*vr;
_coup[19] = fact/cw*(sqr(c)-sqr(s))/s/c*vr;
_coup[20] =-fact*sw/cw*0.5*(sqr(cp)-sqr(sp))/sp/cp*(sPlus-4.*vr);
_coup[21] =-fact*sw/cw*(sqr(c*cp)+sqr(s*sp))/s/c/sp/cp*vr;
_coup[22] = fact*(sqr(c)-sqr(s))/s/c*vr;
_coup[23] =-fact*(pow(c,4)+pow(s,4))/sqr(s)/sqr(c)*vr;
_coup[24] = fact*4.*vr;
_coup[25] = fact*2.*(pow(c,4)+pow(s,4))/sqr(s)/sqr(c)*vr;
_coup[26] =-fact*2.*vr*(sqr(c)-sqr(s))/s/c;
}
void LHWWHVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c) {
// first the overall normalisation
if(q2!=_q2last) {
_couplast = electroMagneticCoupling(q2);
_q2last=q2;
}
int ih = abs(c->id());
int ibos[2]={abs(a->id()),abs(b->id())};
if(ih==25) {
if ( ibos[0]==24&&ibos[1]==24 ) norm(UnitRemoval::InvE *_couplast*_coup[0]);
else if( ibos[0]==23&&ibos[1]==23 ) norm(UnitRemoval::InvE *_couplast*_coup[1]);
else if( ibos[0]==34&&ibos[1]==34 ) norm(UnitRemoval::InvE *_couplast*_coup[2]);
else if( ibos[0]==33&&ibos[1]==33 ) norm(UnitRemoval::InvE *_couplast*_coup[3]);
else if( ibos[0]==32&&ibos[1]==32 ) norm(UnitRemoval::InvE *_couplast*_coup[4]);
else if((ibos[0]==24&&ibos[1]==34) ||
(ibos[0]==34&&ibos[1]==24) ) norm(UnitRemoval::InvE *_couplast*_coup[5]);
else if((ibos[0]==23&&ibos[1]==33) ||
(ibos[0]==33&&ibos[1]==23) ) norm(UnitRemoval::InvE *_couplast*_coup[6]);
else if((ibos[0]==23&&ibos[1]==32) ||
(ibos[0]==32&&ibos[1]==23) ) norm(UnitRemoval::InvE *_couplast*_coup[7]);
else if((ibos[0]==33&&ibos[1]==32) ||
(ibos[0]==32&&ibos[1]==33) ) norm(UnitRemoval::InvE *_couplast*_coup[8]);
else assert(false);
}
else if(ih==35) {
if ( ibos[0]==24&&ibos[1]==24 ) norm(UnitRemoval::InvE *_couplast*_coup[ 9]);
else if( ibos[0]==34&&ibos[1]==34 ) norm(UnitRemoval::InvE *_couplast*_coup[10]);
else if((ibos[0]==24&&ibos[1]==34) ||
(ibos[0]==34&&ibos[1]==24) ) norm(UnitRemoval::InvE *_couplast*_coup[11]);
else if( ibos[0]==23&&ibos[1]==23 ) norm(UnitRemoval::InvE *_couplast*_coup[12]);
else if( ibos[0]==33&&ibos[1]==33 ) norm(UnitRemoval::InvE *_couplast*_coup[13]);
else if((ibos[0]==23&&ibos[1]==33) ||
(ibos[0]==33&&ibos[1]==23) ) norm(UnitRemoval::InvE *_couplast*_coup[14]);
else if((ibos[0]==23&&ibos[1]==32) ||
(ibos[0]==32&&ibos[1]==23) ) norm(UnitRemoval::InvE *_couplast*_coup[15]);
else if((ibos[0]==33&&ibos[1]==32) ||
(ibos[0]==32&&ibos[1]==33) ) norm(UnitRemoval::InvE *_couplast*_coup[16]);
else if((ibos[0]==32&&ibos[1]==32) ) norm(UnitRemoval::InvE *_couplast*_coup[17]);
else assert(false);
}
else if(ih==37) {
if ((ibos[0]==24&&ibos[1]==23) ||
(ibos[0]==23&&ibos[1]==24) ) norm(UnitRemoval::InvE *_couplast*_coup[18]);
else if((ibos[0]==34&&ibos[1]==23) ||
(ibos[0]==23&&ibos[1]==34) ) norm(UnitRemoval::InvE *_couplast*_coup[19]);
else if((ibos[0]==24&&ibos[1]==32) ||
(ibos[0]==32&&ibos[1]==24) ) norm(UnitRemoval::InvE *_couplast*_coup[20]);
else if((ibos[0]==34&&ibos[1]==32) ||
(ibos[0]==32&&ibos[1]==34) ) norm(UnitRemoval::InvE *_couplast*_coup[21]);
else if((ibos[0]==24&&ibos[1]==33) ||
(ibos[0]==33&&ibos[1]==24) ) norm(UnitRemoval::InvE *_couplast*_coup[22]);
else if((ibos[0]==34&&ibos[1]==33) ||
(ibos[0]==33&&ibos[1]==34) ) norm(UnitRemoval::InvE *_couplast*_coup[23]);
else assert(false);
}
else if(ih==38) {
if ((ibos[0]==24&&ibos[1]==24) ) norm(UnitRemoval::InvE *_couplast*_coup[24]);
else if((ibos[0]==34&&ibos[1]==34) ) norm(UnitRemoval::InvE *_couplast*_coup[24]);
else if((ibos[0]==34&&ibos[1]==24) ||
(ibos[0]==24&&ibos[1]==34) ) norm(UnitRemoval::InvE *_couplast*_coup[24]);
else assert(false);
}
else assert(false);
}
diff --git a/Models/LH/LHWWHVertex.h b/Models/LH/LHWWHVertex.h
--- a/Models/LH/LHWWHVertex.h
+++ b/Models/LH/LHWWHVertex.h
@@ -1,171 +1,127 @@
// -*- C++ -*-
#ifndef HERWIG_LHWWHVertex_H
#define HERWIG_LHWWHVertex_H
//
// This is the declaration of the LHWWHVertex class.
//
#include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h"
#include "LHModel.h"
namespace Herwig {
using namespace ThePEG;
/**
* The LHWWHVertex class implements the couplings of two electroweak
* gauge bosons to a Higgs boson in the Little Higgs model including the additional
* heavy photon, Z and W bosons in the model and the triplet Higgs bosons.
- *
- * @see \ref LHWWHVertexInterfaces "The interfaces"
- * defined for LHWWHVertex.
*/
class LHWWHVertex: public Helicity::VVSVertex {
public:
/**
* The default constructor.
*/
LHWWHVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHWWHVertex> initLHWWHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHWWHVertex & operator=(const LHWWHVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The last value of the electroweak coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
/**
* Couplings for the different interactions
*/
vector<Energy> _coup;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHWWHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHWWHVertex,1> {
- /** Typedef of the first base class of LHWWHVertex. */
- typedef Helicity::VVSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHWWHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHWWHVertex>
- : public ClassTraitsBase<Herwig::LHWWHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHWWHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHWWHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHWWHVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHWWHVertex_H */
diff --git a/Models/LH/LHWWWVertex.cc b/Models/LH/LHWWWVertex.cc
--- a/Models/LH/LHWWWVertex.cc
+++ b/Models/LH/LHWWWVertex.cc
@@ -1,149 +1,151 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHWWWVertex class.
//
#include "LHWWWVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
void LHWWWVertex::persistentOutput(PersistentOStream & os) const {
os << _corr;
}
void LHWWWVertex::persistentInput(PersistentIStream & is, int) {
is >> _corr;
}
-ClassDescription<LHWWWVertex> LHWWWVertex::initLHWWWVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHWWWVertex,VVVVertex>
+describeHerwigLHWWWVertex("Herwig::LHWWWVertex", "HwLHModel.so");
void LHWWWVertex::Init() {
static ClassDocumentation<LHWWWVertex> documentation
("The LHWWWVertex class implements the triple electroweak"
" gauge boson couplings in the Little Higgs model.");
}
LHWWWVertex::LHWWWVertex() : _couplast(0.),_q2last(ZERO) {
orderInGem(1);
orderInGs(0);
// particles
addToList(24, -24, 22);
addToList(24, -24, 23);
addToList(24, -24, 32);
addToList(24, -24, 33);
addToList(34, -24, 23);
addToList(34, -24, 32);
addToList(34, -24, 33);
addToList(24, -34, 23);
addToList(24, -34, 32);
addToList(24, -34, 33);
addToList(34, -34, 22);
addToList(34, -34, 23);
addToList(34, -34, 32);
addToList(34, -34, 33);
}
void LHWWWVertex::doinit() {
// model
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHWWWVertex::doinit()"
<< Exception::runerror;
// correction factors for the different interactions
double sw(sqrt(model->sin2ThetaW())),cw(sqrt(1.-model->sin2ThetaW()));
double vf(sqr(model->vev()/model->f()));
double s (model->sinTheta() ),c (model->cosTheta() );
double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
double xB(-2.5/sw*sp*cp*(sqr(cp)-sqr(sp)));
double xH(2.5/sw/cw*s*c*sp*cp*(sqr(c*sp)+sqr(s*cp))/
(5.*sqr(sp*cp/sw)-sqr(s*c/cw)));
double xW(-0.5/cw*s*c*(sqr(c)-sqr(s)));
_corr.resize(12);
// W_L W_L A_L
_corr[ 0] = -1.;
// W_L W_L A_H
_corr[ 1] = cw/sw*vf*xB;
// W_L W_H A_L
_corr[ 2] = 0.;
// W_L W_H A_H
_corr[ 3] = -vf/sw*xH;
// W_H W_H A_L
_corr[ 4] = -1.;
// W_H W_H A_H
_corr[ 5] = vf/sw*(xH*(sqr(c)-sqr(s))/s/c+cw*xB);
// W_L W_L Z_L
_corr[ 6] = -cw/sw;
// W_L W_L Z_H
_corr[ 7] = vf/sw*(cw*xW+s*c*(sqr(c)-sqr(s)));
// W_L W_H Z_L
_corr[ 8] = -vf/sw*xW;
// W_L W_H Z_H
_corr[ 9] = -1./sw;
// W_H W_H Z_L
_corr[10] = -cw/sw;
// W_H W_H Z_H
_corr[11] = (sqr(c)-sqr(s))/s/c/sw;
VVVVertex::doinit();
}
// couplings for the WWW vertex
void LHWWWVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c) {
// first the overall normalisation
if(q2!=_q2last) {
_couplast = electroMagneticCoupling(q2);
_q2last=q2;
}
int ia(a->iCharge()/3),ib(b->iCharge()/3),ic(c->iCharge()/3);
int ida(a->id()), idb(b->id()), idc(c->id());
// get the particles in the interaction
int ineut,nh(0);
if(ia==0) {
ineut=ia;
if(abs(idb)==34) ++nh;
if(abs(idc)==34) ++nh;
}
else if(ib==0) {
ineut=ib;
if(abs(ida)==34) ++nh;
if(abs(idc)==34) ++nh;
}
else {
ineut=ic;
if(abs(ida)==34) ++nh;
if(abs(idb)==34) ++nh;
}
if(nh==0) {
if (ineut==22) norm(_corr[ 0]*_couplast);
else if(ineut==23) norm(_corr[ 6]*_couplast);
else if(ineut==32) norm(_corr[ 1]*_couplast);
else if(ineut==33) norm(_corr[ 7]*_couplast);
}
else if(nh==1) {
if (ineut==22) norm(_corr[ 2]*_couplast);
else if(ineut==23) norm(_corr[ 8]*_couplast);
else if(ineut==32) norm(_corr[ 3]*_couplast);
else if(ineut==33) norm(_corr[ 9]*_couplast);
}
else if(nh==2) {
if (ineut==22) norm(_corr[ 4]*_couplast);
else if(ineut==23) norm(_corr[10]*_couplast);
else if(ineut==32) norm(_corr[ 5]*_couplast);
else if(ineut==33) norm(_corr[11]*_couplast);
}
// check the order for the overall sign
if((ia<0 && ib>0 && ic==0) ||
(ia==0 && ib<0 && ic>0 ) ||
(ia>0 && ib==0 && ic<0 ) ) norm(-norm());
}
diff --git a/Models/LH/LHWWWVertex.h b/Models/LH/LHWWWVertex.h
--- a/Models/LH/LHWWWVertex.h
+++ b/Models/LH/LHWWWVertex.h
@@ -1,175 +1,131 @@
// -*- C++ -*-
#ifndef HERWIG_LHWWWVertex_H
#define HERWIG_LHWWWVertex_H
//
// This is the declaration of the LHWWWVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
#include "LHModel.h"
namespace Herwig {
using namespace ThePEG;
using ThePEG::Helicity::Direction;
/**
* The LHWWWVertex class implements the triple boson coupling in the Little
* Higgs model for the electroweak bosons of the Standard Model and the
* additional \f$A_H\f$, \f$Z_H\f$ and \f$W_H^\pm\f$ bosons.
- *
- * @see \ref LHWWWVertexInterfaces "The interfaces"
- * defined for LHWWWVertex.
*/
class LHWWWVertex: public Helicity::VVVVertex {
public:
/**
* The default constructor.
*/
inline LHWWWVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
* @param d1 The direction for the first particle.
* @param d2 The direction for the second particle.
* @param d3 The direction for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHWWWVertex> initLHWWWVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHWWWVertex & operator=(const LHWWWVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The correction factors for the different interacting particles
*/
vector<double> _corr;
/**
* The last value of the electroweak coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHWWWVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHWWWVertex,1> {
- /** Typedef of the first base class of LHWWWVertex. */
- typedef Helicity::VVVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHWWWVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHWWWVertex>
- : public ClassTraitsBase<Herwig::LHWWWVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHWWWVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHWWWVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHWWWVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHWWWVertex_H */
diff --git a/Models/LH/LHWWWWVertex.cc b/Models/LH/LHWWWWVertex.cc
--- a/Models/LH/LHWWWWVertex.cc
+++ b/Models/LH/LHWWWWVertex.cc
@@ -1,306 +1,308 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHWWWWVertex class.
//
#include "LHWWWWVertex.h"
#include "LHModel.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
LHWWWWVertex::LHWWWWVertex() :
_couplast(0.0), _q2last(sqr(Constants::MaxEnergy)), _coup(36,0.) {
// order in the couplings
orderInGem(2);
orderInGs(0);
// all charge W's
addToList(24, -24, 24, -24);
addToList(34, -34, 34, -34);
addToList(24, -24, 34, -34);
addToList(24, -24, 24, -34);
addToList(24, -24, 34, -24);
addToList(34, -24, 34, -24);
addToList(24, -34, 24, -34);
addToList(34, -34, 24, -34);
addToList(34, -34, 34, -24);
// two neutral and 2 W_L
addToList(22, 24, 22, -24);
addToList(23, 24, 23, -24);
addToList(22, 24, 23, -24);
addToList(22, 24, 32, -24);
addToList(22, 24, 33, -24);
addToList(23, 24, 33, -24);
addToList(23, 24, 32, -24);
addToList(33, 24, 33, -24);
addToList(33, 24, 32, -24);
// two neutral and 2 W_H
addToList(22, 34, 22, -34);
addToList(23, 34, 23, -34);
addToList(22, 34, 23, -34);
addToList(22, 34, 32, -34);
addToList(22, 34, 33, -34);
addToList(23, 34, 33, -34);
addToList(23, 34, 32, -34);
addToList(33, 34, 33, -34);
addToList(33, 34, 32, -34);
// two neutral W_L W_H
addToList(23, 24, 23, -34);
addToList(23, 24, 22, -34);
addToList(22, 24, 32, -34);
addToList(23, 24, 32, -34);
addToList(33, 24, 33, -34);
addToList(33, 24, 32, -34);
addToList(22, 24, 33, -34);
addToList(23, 24, 33, -34);
addToList(23, 34, 23, -24);
addToList(23, 34, 22, -24);
addToList(22, 34, 32, -24);
addToList(23, 34, 32, -24);
addToList(33, 34, 33, -24);
addToList(33, 34, 32, -24);
addToList(22, 34, 33, -24);
addToList(23, 34, 33, -24);
}
IBPtr LHWWWWVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHWWWWVertex::fullclone() const {
return new_ptr(*this);
}
void LHWWWWVertex::persistentOutput(PersistentOStream & os) const {
os << _coup;
}
void LHWWWWVertex::persistentInput(PersistentIStream & is, int) {
is >> _coup;
}
-ClassDescription<LHWWWWVertex> LHWWWWVertex::initLHWWWWVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHWWWWVertex,VVVVVertex>
+describeHerwigLHWWWWVertex("Herwig::LHWWWWVertex", "HwLHModel.so");
void LHWWWWVertex::Init() {
static ClassDocumentation<LHWWWWVertex> documentation
("The LHWWWWVertex class implements the quartic electroweak"
" boson couplings in the Little Higgs Model");
}
void LHWWWWVertex::doinit() {
// model
cLHModelPtr model =
dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHWWWWVertex::doinit()"
<< Exception::runerror;
// correction factors for the different interactions
double sw2(sin2ThetaW());
double sw(sqrt(sw2)),cw(sqrt(1.-sw2));
double s (model->sinTheta() ),c (model->cosTheta() );
double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
double vf(sqr(model->vev()/model->f()));
double xB(-2.5/sw*sp*cp*(sqr(cp)-sqr(sp)));
double xW(-0.5/cw*s*c*(sqr(c)-sqr(s)));
double xH(2.5/sw/cw*s*c*sp*cp*(sqr(c*sp)+sqr(s*cp))/
(5.*sqr(sp*cp/sw)-sqr(s*c/cw)));
// 4 W's
_coup[ 0] =-1./sw2;
_coup[ 1] =-1./sw2;
_coup[ 2] = 0.5/sw2*(sqr(c)-sqr(s))/c/s;
_coup[ 3] =-0.25/sw2*vf*s*c*(sqr(c)-sqr(s));
_coup[ 4] =-0.25/sw2;
_coup[ 5] =-1./sw2*(pow(c,6)+pow(s,c))/sqr(s*c);
// 2 W_L
_coup[ 6] = 1.;
_coup[ 7] = sqr(cw/sw);
_coup[ 8] = cw/sw;
_coup[ 9] =-cw/sw*xB*vf;
_coup[10] =-cw/sw*xW*vf+0.5/sw*s*c*(sqr(c)-sqr(s))*vf;
_coup[11] =-(sqr(cw)-sw2)/sw2*xW*vf;
_coup[12] =-sqr(cw/sw)*xB*vf;
_coup[13] = 0.;
_coup[14] = 1./sw2;
_coup[15] = xH*vf/sw2;
_coup[16] = 1.;
_coup[17] = sqr(cw/sw);
_coup[18] = cw/sw;
_coup[19] =-cw/sw*xB*vf-xH/sw*vf*(sqr(c)-sqr(s))/s/c;
_coup[20] =-1./sw*(sqr(c)-sqr(s))/s/c;
_coup[21] =-cw/sw2*(sqr(c)-sqr(s))/s/c;
_coup[22] =-sqr(cw/sw)*xB*vf-cw/sw2*xH*vf*(sqr(c)-sqr(s))/c/s;
_coup[23] = 0.;
_coup[24] = (pow(c,6)+pow(s,6))/sqr(s*c)/sw2;
_coup[25] = xH/sw2*vf*(pow(c,6)+pow(s,6))/sqr(s*c)
+cw/sw2*xB*vf*(sqr(c)-sqr(s))/s/c;
_coup[26] = 0.;
_coup[27] = 2.*cw/sw2*xW*vf;
_coup[28] = 0.;
_coup[29] = xH*vf/sw;
_coup[30] = xH*vf*cw/sw2;
_coup[31] = xW*vf/sw;
_coup[32] =-(sqr(c)-sqr(s))/s/c/sw2;
_coup[33] =-xH*vf*(sqr(c)-sqr(s))/s/c-cw/sw2*xB*vf;
_coup[34] = 1./sw;
_coup[35] = cw/sw2;
}
void LHWWWWVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,
tcPDPtr c,tcPDPtr d) {
// id's of the particles
int id[4]={a->id(),b->id(),c->id(),d->id()};
// order the particles
int ngamma(0),nz(0);
int iorder[4];
for(int ix=0;ix<4;++ix) {
if (id[ix]==22||id[ix]==32) ++ngamma;
else if (id[ix]==23||id[ix]==33) ++nz;
}
// if photons or Z's
if(ngamma!=0 || nz!=0) {
int iy=0;
// put the photons first
for(int ix=0;iy<ngamma&&ix<4;++ix) {
if(id[ix]==22||id[ix]==32) {
iorder[iy]=ix;
++iy;
}
}
// then the Z bosons
for(int ix=0;iy<ngamma+nz&&ix<4;++ix) {
if(id[ix]==23||id[ix]==33) {
iorder[iy]=ix;
++iy;
}
}
// then the W+
for(int ix=0;iy<3&&ix<4;++ix) {
if(id[ix]==24||id[ix]==34) {
iorder[iy]=ix;
++iy;
}
}
assert(iy==3);
// finally the W-
for(int ix=0;iy<4&&ix<4;++ix) {
if(id[ix]==-24||id[ix]==-34) {
iorder[iy]=ix;
++iy;
}
}
assert(iy==4);
}
else {
int iy=0;
// first the W+
for(int ix=0;iy<3&&ix<4;++ix) {
if(id[ix]==24||id[ix]==34) {
iorder[iy]=ix;
++iy;
}
}
assert(iy==2);
// finally the W-
for(int ix=0;iy<4&&ix<4;++ix) {
if(id[ix]==-24||id[ix]==-34) {
iorder[iy]=ix;
++iy;
}
}
assert(iy==4);
}
setOrder(iorder[0],iorder[1],iorder[2],iorder[3]);
setType(2);
// first the overall normalisation
if(q2!=_q2last||_couplast==0.) {
_couplast = sqr(electroMagneticCoupling(q2));
_q2last=q2;
}
// ids of the particles
for(unsigned int ix=0;ix<4;++ix) {
if (iorder[ix]==0) id[ix] = abs(a->id());
else if(iorder[ix]==1) id[ix] = abs(b->id());
else if(iorder[ix]==2) id[ix] = abs(c->id());
else if(iorder[ix]==3) id[ix] = abs(d->id());
}
if( ngamma == 0 && nz == 0 ) {
if(id[0]==id[1]) {
if(id[2]==id[3]) {
if(id[0]==24&&id[2]==24)
norm(_couplast*_coup[0]);
else if(id[0]==34&&id[2]==34)
norm(_couplast*_coup[5]);
else
norm(_couplast*_coup[1]);
}
else {
if(id[0]==24)
norm(_couplast*_coup[3]);
else
norm(_couplast*_coup[2]);
}
}
else {
if(id[2]==id[3]) {
if(id[2]==24)
norm(_couplast*_coup[3]);
else
norm(_couplast*_coup[2]);
}
else
norm(_couplast*_coup[4]);
}
}
else {
if(id[2]==id[3]) {
unsigned int ioff = id[2]==24 ? 0 : 10;
if(id[0]==22&&id[1]==22)
norm(_couplast*_coup[6+ioff]);
else if(id[0]==23&&id[1]==23)
norm(_couplast*_coup[7+ioff]);
else if((id[0]==22&&id[1]==23) || (id[0]==23&&id[1]==22))
norm(_couplast*_coup[8+ioff]);
else if((id[0]==22&&id[1]==32) || (id[0]==32&&id[1]==22))
norm(_couplast*_coup[9+ioff]);
else if((id[0]==22&&id[1]==33) || (id[0]==33&&id[1]==22))
norm(_couplast*_coup[10+ioff]);
else if((id[0]==23&&id[1]==33) || (id[0]==33&&id[1]==22))
norm(_couplast*_coup[11+ioff]);
else if((id[0]==23&&id[1]==32) || (id[0]==32&&id[1]==23))
norm(_couplast*_coup[12+ioff]);
else if( id[0]==33&&id[1]==33)
norm(_couplast*_coup[14+ioff]);
else if((id[0]==32&&id[1]==33) || (id[0]==33&&id[1]==32))
norm(_couplast*_coup[15+ioff]);
else
assert(false);
}
else {
if(id[0]==23&&id[1]==23)
norm(_couplast*_coup[27]);
else if((id[0]==22&&id[1]==23) || (id[0]==23&&id[1]==22))
norm(_couplast*_coup[28]);
else if((id[0]==22&&id[1]==32) || (id[0]==32&&id[1]==22))
norm(_couplast*_coup[29]);
else if((id[0]==23&&id[1]==32) || (id[0]==32&&id[1]==23))
norm(_couplast*_coup[30]);
else if( id[0]==33&&id[1]==33)
norm(_couplast*_coup[31]);
else if((id[0]==32&&id[1]==33) || (id[0]==33&&id[1]==32))
norm(_couplast*_coup[32]);
else if((id[0]==22&&id[1]==33) || (id[0]==33&&id[1]==22))
norm(_couplast*_coup[33]);
else if((id[0]==23&&id[1]==33) || (id[0]==33&&id[1]==22))
norm(_couplast*_coup[34]);
else
assert(false);
}
}
}
diff --git a/Models/LH/LHWWWWVertex.h b/Models/LH/LHWWWWVertex.h
--- a/Models/LH/LHWWWWVertex.h
+++ b/Models/LH/LHWWWWVertex.h
@@ -1,169 +1,126 @@
// -*- C++ -*-
#ifndef HERWIG_LHWWWWVertex_H
#define HERWIG_LHWWWWVertex_H
//
// This is the declaration of the LHWWWWVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/VVVVVertex.h"
namespace Herwig {
using namespace ThePEG;
using namespace ThePEG::Helicity;
/**
- * Here is the documentation of the LHWWWWVertex class.
- *
- * @see \ref LHWWWWVertexInterfaces "The interfaces"
- * defined for LHWWWWVertex.
+ * The LHWWWWVertex class implements the quartic self-couplings of electroweak
+ * gauge bosons in the Little Higgs model.
*/
class LHWWWWVertex: public VVVVVertex {
public:
/**
* The default constructor.
*/
LHWWWWVertex();
/** @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();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
* @param part4 The ParticleData pointer for the fourth particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
tcPDPtr part4);
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 after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHWWWWVertex> initLHWWWWVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHWWWWVertex & operator=(const LHWWWWVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The last value of the electroweak coupling calculated.
*/
Complex _couplast;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
Energy2 _q2last;
/**
* Couplings for the different bosons
*/
vector<double> _coup;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHWWWWVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHWWWWVertex,1> {
- /** Typedef of the first base class of LHWWWWVertex. */
- typedef Helicity::VVVVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHWWWWVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHWWWWVertex>
- : public ClassTraitsBase<Herwig::LHWWWWVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHWWWWVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHWWWWVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHWWWWVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHWWWWVertex_H */
diff --git a/Models/LHTP/LHTPFFGVertex.cc b/Models/LHTP/LHTPFFGVertex.cc
--- a/Models/LHTP/LHTPFFGVertex.cc
+++ b/Models/LHTP/LHTPFFGVertex.cc
@@ -1,69 +1,73 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPFFGVertex class.
//
#include "LHTPFFGVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
IBPtr LHTPFFGVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHTPFFGVertex::fullclone() const {
return new_ptr(*this);
}
-NoPIOClassDescription<LHTPFFGVertex>
-LHTPFFGVertex::initLHTPFFGVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeNoPIOClass<LHTPFFGVertex,FFVVertex>
+describeHerwigLHTPFFGVertex("Herwig::LHTPFFGVertex", "HwLHTPModel.so");
void LHTPFFGVertex::Init() {
static ClassDocumentation<LHTPFFGVertex> documentation
- ("There is no documentation for the LHTPFFGVertex class");
+ ("The LHTPFFGVertex class implements the couples of the fermions "
+ "to the gluons in the Little Higgs model with T-parity.");
}
LHTPFFGVertex::LHTPFFGVertex()
- : _couplast(0.), _q2last(0.*GeV2) {
+ : coupLast_(0.), q2Last_(0.*GeV2) {
orderInGs(1);
orderInGem(0);
+}
+
+void LHTPFFGVertex::doinit() {
// SM quarks
for(int ix = 1; ix < 7; ++ix) {
addToList(-ix, ix, 21);
}
// additional top quark
addToList(-8, 8, 21);
// T odd quarks
for(long ix = 4000001; ix < 4000006; ++ix) {
addToList(-ix, ix, 21);
}
addToList(-4000008, 4000008, 21);
+ FFVVertex::doinit();
}
// coupling for FFG vertex
void LHTPFFGVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr,tcPDPtr) {
// first the overall normalisation
- if(q2!=_q2last) {
- _couplast = -strongCoupling(q2);
- _q2last=q2;
+ if(q2!=q2Last_) {
+ coupLast_ = -strongCoupling(q2);
+ q2Last_=q2;
}
- norm(_couplast);
+ norm(coupLast_);
// the left and right couplings
int iferm=abs(a->id());
if( iferm > 8 ) iferm -= 4000000;
if((iferm>=1 && iferm<=8)) {
- left(1.);
+ left (1.);
right(1.);
}
else
- throw HelicityConsistencyError() << "LHTPFFGVertex::setCoupling"
- << "Unknown particle in gluon vertex"
- << Exception::runerror;
+ assert(false);
}
diff --git a/Models/LHTP/LHTPFFGVertex.h b/Models/LHTP/LHTPFFGVertex.h
--- a/Models/LHTP/LHTPFFGVertex.h
+++ b/Models/LHTP/LHTPFFGVertex.h
@@ -1,136 +1,103 @@
// -*- C++ -*-
#ifndef HERWIG_LHTPFFGVertex_H
#define HERWIG_LHTPFFGVertex_H
//
// This is the declaration of the LHTPFFGVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
-#include "LHTPFFGVertex.fh"
namespace Herwig {
using namespace ThePEG;
/**
* The LHTPFFGVertex class implements the coupling of the
* gluon to the coloured fermions, the SM quarks, the extra top-like quark
* and the T-parity odd quarks of the Little Higgs model with T-parity.
- *
- * @see \ref LHTPFFGVertexInterfaces "The interfaces"
- * defined for LHTPFFGVertex.
*/
class LHTPFFGVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHTPFFGVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
/**
* 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 after the setup phase before saving an
+ * EventGenerator to disk.
+ * @throws InitException if object could not be initialized properly.
+ */
+ virtual void doinit();
+ //@}
+
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static NoPIOClassDescription<LHTPFFGVertex> initLHTPFFGVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPFFGVertex & operator=(const LHTPFFGVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The last value of the strong coupling calculated.
*/
- Complex _couplast;
+ Complex coupLast_;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
- Energy2 _q2last;
+ Energy2 q2Last_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPFFGVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHTPFFGVertex,1> {
- /** Typedef of the first base class of LHTPFFGVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPFFGVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPFFGVertex>
- : public ClassTraitsBase<Herwig::LHTPFFGVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPFFGVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPFFGVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHTPFFGVertex 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHTPFFGVertex_H */
diff --git a/Models/LH/LHFFHVertex.cc b/Models/LHTP/LHTPFFHVertex.cc
copy from Models/LH/LHFFHVertex.cc
copy to Models/LHTP/LHTPFFHVertex.cc
--- a/Models/LH/LHFFHVertex.cc
+++ b/Models/LHTP/LHTPFFHVertex.cc
@@ -1,278 +1,388 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
-// functions of the LHFFHVertex class.
+// functions of the LHTPFFHVertex class.
//
-#include "LHFFHVertex.h"
+#include "LHTPFFHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
-void LHFFHVertex::persistentOutput(PersistentOStream & os) const {
- os << ounit(_coup,1./GeV) << _model;
+void LHTPFFHVertex::persistentOutput(PersistentOStream & os) const {
+ os << ounit(cL_,1./GeV) << ounit(cR_,1./GeV) << model_;
}
-void LHFFHVertex::persistentInput(PersistentIStream & is, int) {
- is >> iunit(_coup,1./GeV) >> _model;
+void LHTPFFHVertex::persistentInput(PersistentIStream & is, int) {
+ is >> iunit(cL_,1./GeV) >> iunit(cR_,1./GeV) >> model_;
}
-ClassDescription<LHFFHVertex> LHFFHVertex::initLHFFHVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPFFHVertex,FFSVertex>
+describeHerwigLHTPFFHVertex("Herwig::LHTPFFHVertex", "HwLHTPModel.so");
-void LHFFHVertex::Init() {
+void LHTPFFHVertex::Init() {
- static ClassDocumentation<LHFFHVertex> documentation
- ("The LHFFHVertex class implements the interaction of the fermions"
- " and the Higgs bosons in the Little Higgs model");
+ static ClassDocumentation<LHTPFFHVertex> documentation
+ ("The LHTPFFHVertex class implements the interaction of the fermions"
+ " and the Higgs bosons in the Little Higgs model with T-parity");
}
-LHFFHVertex::LHFFHVertex()
- : _q2last(0.*GeV2) {
+LHTPFFHVertex::LHTPFFHVertex()
+ : q2Last_(ZERO) {
orderInGem(1);
orderInGs(0);
- _masslast[0] = 0.*GeV;
- _masslast[1] = 0.*GeV;
- _idlast[0] = 0;
- _idlast[1] = 0;
+ massLast_[0] = 0.*GeV;
+ massLast_[1] = 0.*GeV;
+ idLast_[0] = 0;
+ idLast_[1] = 0;
+}
+
+void LHTPFFHVertex::doinit() {
// SM like higgs
+ addToList( -3, 3, 25);
+ addToList( -4, 4, 25);
addToList( -5, 5, 25);
addToList( -6, 6, 25);
addToList( -6, 8, 25);
addToList( -8, 6, 25);
addToList( -8, 8, 25);
+ addToList( -13, 13, 25);
addToList( -15, 15, 25);
+ addToList( -4000002, 4000002, 25);
+ addToList( -4000004, 4000004, 25);
+ addToList( -4000006, 4000006, 25);
+ addToList( -4000012, 4000012, 25);
+ addToList( -4000014, 4000014, 25);
+ addToList( -4000016, 4000016, 25);
// phi0
- addToList( -5, 5, 35);
- addToList( -6, 8, 35);
- addToList( -8, 6, 35);
- addToList( -15, 15, 35);
+ addToList( -3 , 4000003, 35);
+ addToList( -4 , 4000004, 35);
+ addToList( -5 , 4000005, 35);
+ addToList( -4000003, 3, 35);
+ addToList( -4000004, 4, 35);
+ addToList( -4000005, 5, 35);
+ addToList( -6 , 4000006, 35);
+ addToList( -8 , 4000006, 35);
+ addToList( -4000006, 6, 35);
+ addToList( -4000006, 8, 35);
// phiP
- addToList( -5, 5, 36);
- addToList( -6, 8, 36);
- addToList( -8, 6, 36);
- addToList( -15, 15, 36);
+ addToList( -2 , 4000002, 36);
+ addToList( -3 , 4000003, 36);
+ addToList( -4 , 4000004, 36);
+ addToList( -5 , 4000005, 36);
+ addToList( -4000002, 2, 36);
+ addToList( -4000003, 3, 36);
+ addToList( -4000004, 4, 36);
+ addToList( -4000005, 5, 36);
+ addToList( -12 , 4000012, 36);
+ addToList( -14 , 4000014, 36);
+ addToList( -16 , 4000016, 36);
+ addToList( -4000012, 12, 36);
+ addToList( -4000014, 14, 36);
+ addToList( -4000016, 16, 36);
+ addToList( -6 , 4000006, 36);
+ addToList( -6 , 4000008, 36);
+ addToList( -8 , 4000006, 36);
+ addToList( -8 , 4000008, 36);
+ addToList( -4000006, 6, 36);
+ addToList( -4000008, 6, 36);
+ addToList( -4000006, 8, 36);
+ addToList( -4000008, 8, 36);
// phi +/-
- addToList( -8 , 5, 37);
- addToList( -16, 15, 37);
- addToList( -5 , 8, -37);
- addToList( -15, 16, -37);
-}
-
-void LHFFHVertex::doinit() {
- _model =
- dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
- if(!_model) throw InitException() << "Must be using the LHModel "
+ addToList( -1 , 4000002, -37);
+ addToList( -3 , 4000004, -37);
+ addToList( -5 , 4000006, -37);
+ addToList( -4000001, 2, -37);
+ addToList( -4000003, 4, -37);
+ addToList( -4000005, 6, -37);
+ addToList( -4000005, 8, -37);
+ addToList( -4000002, 1, 37);
+ addToList( -4000004, 3, 37);
+ addToList( -4000006, 5, 37);
+ addToList( -2 , 4000001, 37);
+ addToList( -4 , 4000003, 37);
+ addToList( -6 , 4000005, 37);
+ addToList( -8 , 4000005, 37);
+ addToList( -11 , 4000012, -37);
+ addToList( -13 , 4000014, -37);
+ addToList( -15 , 4000016, -37);
+ addToList( -4000011, 12, -37);
+ addToList( -4000013, 14, -37);
+ addToList( -4000015, 16, -37);
+ addToList( -4000012, 11 , 37);
+ addToList( -4000014, 13 , 37);
+ addToList( -4000016, 15 , 37);
+ addToList( -12, 4000011, 37);
+ addToList( -14, 4000013, 37);
+ addToList( -16, 4000015, 37);
+ model_ =
+ dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
+ if(!model_) throw InitException() << "Must be using the LHModel "
<< " in LHFFPVertex::doinit()"
<< Exception::runerror;
- _coup.resize(11);
- Energy v = _model->vev();
- double s0 = _model->sinTheta0();
- double sP = _model->sinThetaP();
- double sPlus = _model->sinThetaPlus();
- double s02 = sqr(s0);
- double vf = _model->vev()/_model->f();
- double xL = sqr(_model->lambda1())/(sqr(_model->lambda1())+sqr(_model->lambda2()));
- double xR = sqr(_model->lambda1())/sqrt(sqr(_model->lambda1())+sqr(_model->lambda2()));
- Energy mT = getParticleData(8)->mass();
+ cL_ .resize(18);
+ cR_ .resize(18);
+ Energy v = model_->vev();
+ Energy f = model_->f();
+ double vf = model_->vev()/model_->f();
+ double sa = model_->sinAlpha();
+ double ca = model_->cosAlpha();
// lightest higgs couplings
// coupling of light SM fermions
- _coup[0] = (1.-0.5*s02+vf*s0/sqrt(2.)-2./3.*sqr(vf))/v;
- // couplings to top quark
- _coup[1] = (1.-0.5*s02+vf*s0/sqrt(2.)-2./3.*sqr(vf)+sqr(vf)*xL*(1.+xL))/v;
- // couplings to the T quark
- _coup[2] = xR*(1.+xL)*vf/mT;
- // couplings to tT
- _coup[3] = Complex(0.,1.)*xR/mT;
- _coup[4] = Complex(0.,1.)*vf/v*(1.+xL);
- // phi 0
- // light particles
- _coup[5] = sqrt(0.5)/v*(vf-sqrt(2.)*s0);
- // mixed
- _coup[6] = sqrt(0.5)/v*(vf-sqrt(2.)*s0)*_model->lambda1()/_model->lambda2();
- // phi P
- _coup[7] = Complex(0.,1.)*sqrt(0.5)/v*(vf-sqrt(2.)*sP);
- _coup[8] = Complex(0.,1.)*sqrt(0.5)/v*(vf-sqrt(2.)*sP)*_model->lambda1()/_model->lambda2();
- // phi +/-
- _coup[9] = -sqrt(0.5)/v*(vf-2.*sPlus);
- _coup[9] = -sqrt(0.5)/v*(vf-2.*sPlus)*_model->lambda1()/_model->lambda2();
+ cL_[0] = cR_[0] = 1./v;
+ // couplings to top quarks
+ cL_[1] = cR_[1] = sa*ca/f;
+ cL_[2] = -sa/ca/v;
+ cR_[2] = sqr(ca)*vf/v;
+ // couplings to T-odd quarks
+ cL_[3] = cR_[3] = 0.5*sqrt(0.5)/f*model_->kappaQuark();
+ // couplings to T-odd leptons
+ cL_[4] = cR_[4] = 0.5*sqrt(0.5)/f*model_->kappaLepton();
+ // Phi0
+ // quark, T-odd quark
+ cL_[5] = sqrt(0.5)/f;
+ cR_[5] = ZERO;
+ // and top quarks
+ cL_[6] = sqrt(0.5)*model_->cosThetaR()/f/ca;
+ cR_[6] = ZERO;
+ cL_[7] = sqrt(0.5)*model_->sinThetaR()/f/ca;
+ cR_[7] = ZERO;
+// del*lam1/Sqrt2*cR*P_L
+ // PhiP
+ // quark, T-odd quark
+ cL_[8] = vf/f*model_->kappaQuark()/12;
+ cR_[8] = sqrt(0.5)/f;
+ // lepton, T-odd lepton
+ cL_[9] = vf/f*model_->kappaLepton()/12;
+ cR_[9] = ZERO;
+ // top, T_-
+ cL_[10] = model_->cosThetaR()*sqrt(2.)*vf/f/ca/3;
+ cR_[10] = ZERO;
+ cL_[11] = model_->sinThetaR()*sqrt(2.)*vf/f/ca/3;
+ cR_[11] = ZERO;
+ // top, t_-
+ cL_[12] = model_->cosThetaL()*vf/f/12.*model_->kappaQuark();
+ cR_[12] = model_->cosThetaR()*sqrt(0.5)/f/ca;
+ cL_[13] = model_->sinThetaL()*vf/f/12.*model_->kappaQuark();
+ cR_[13] = model_->sinThetaR()*sqrt(0.5)/f/ca;
+ // Phi +/-
+ cL_[14] = vf/f*model_->kappaLepton()/24.;
+ cR_[14] = ZERO;
+ // quark T-odd quark
+ cL_[15] = vf/f*model_->kappaQuark() /24.;
+ cR_[15] =-vf*sqrt(0.5)/v;
+ cL_[16] = model_->cosThetaL()*vf/f*model_->kappaQuark() /24.;
+ cR_[16] =-model_->cosThetaR()*vf*sqrt(0.5)/v/ca;
+ cL_[17] = model_->sinThetaL()*vf/f*model_->kappaQuark() /24.;
+ cR_[17] =-model_->sinThetaR()*vf*sqrt(0.5)/v/ca;
FFSVertex::doinit();
}
-void LHFFHVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c) {
+void LHTPFFHVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c) {
+ norm(1.);
int iferm=abs(a->id());
int ianti=abs(b->id());
// int ihigg=abs(c->id());
// left and right couplings set to one
- left (1.);
- right(1.);
- // first the overall normalisation
- if(q2!=_q2last||_idlast[0]!=iferm||_idlast[1]!=ianti) {
- _q2last = q2;
- _idlast[0] = iferm;
- if(_idlast[0]==8) _idlast[0]=6;
- assert((_idlast[0]>=1 && _idlast[0]<=6 ) ||
- (_idlast[0]>=11 && _idlast[0]<=16));
- if(iferm==_idlast[0])
- _masslast[0] = _model->mass(q2,a);
- else
- _masslast[0] = _model->mass(q2,getParticleData(ParticleID::t));
- _idlast[1] = ianti;
- if(_idlast[1]==8) _idlast[1]=6;
- assert((_idlast[1]>=1 && _idlast[1]<=6 ) ||
- (_idlast[1]>=11 && _idlast[1]<=16));
- if(_idlast[0]!=_idlast[1]) {
- if(ianti==_idlast[1])
- _masslast[1] = _model->mass(q2,a);
- else
- _masslast[1] = _model->mass(q2,getParticleData(ParticleID::t));
+ // SM like higgs
+ if(c->id()==ParticleID::h0) {
+ // to SM fermions and T
+ if(iferm<=16&&ianti<=16) {
+ // running masses
+ if(q2!=q2Last_||idLast_[0]!=iferm||idLast_[1]!=ianti) {
+ q2Last_ = q2;
+ idLast_[0] = iferm;
+ assert((idLast_[0]>=1 && idLast_[0]<=8 ) ||
+ (idLast_[0]>=11 && idLast_[0]<=16));
+ if(idLast_[0]!=8)
+ massLast_[0] = model_->mass(q2,a);
+ else
+ massLast_[0] = model_->mass(q2,getParticleData(ParticleID::t));
+ idLast_[1] = ianti;
+ assert((idLast_[1]>=1 && idLast_[1]<=8 ) ||
+ (idLast_[1]>=11 && idLast_[1]<=16));
+ if(idLast_[0]!=idLast_[1]) {
+ if(idLast_[1]!=8)
+ massLast_[1] = model_->mass(q2,a);
+ else
+ massLast_[1] = model_->mass(q2,getParticleData(ParticleID::t));
+ }
+ else {
+ massLast_[1] = massLast_[0];
+ }
+ }
+ if(iferm<6||iferm>8) {
+ left (-Complex(cL_[0]*massLast_[0]));
+ right(-Complex(cR_[0]*massLast_[0]));
+ }
+ else {
+ if(iferm==8&&ianti==8) {
+ left ( Complex(cL_[1]*massLast_[0]));
+ right( Complex(cR_[1]*massLast_[0]));
+ }
+ else {
+ if(a->id()==ParticleID::tbar||b->id()==ParticleID::tbar) {
+ left (-Complex(cL_[2]*massLast_[0]));
+ right(-Complex(cR_[2]*massLast_[0]));
+ }
+ else {
+ left (-Complex(cR_[2]*massLast_[0]));
+ right(-Complex(cL_[2]*massLast_[0]));
+ }
+ }
+ }
}
else {
- _masslast[1] = _masslast[0];
- }
- }
- // SM like higgs
- if(c->id()==ParticleID::h0) {
- if(iferm==ianti) {
- if((iferm>=1 && iferm<=5 ) ||
- (iferm>=11 && iferm<=16)) {
- norm(-Complex(_coup[0]*_masslast[0]));
- }
- else if(iferm==6) {
- norm(-Complex(_coup[1]*_masslast[0]));
- }
- else if(iferm==8) {
- norm(-Complex(_coup[2]*a->mass()));
- }
- else assert(false);
- }
- else {
- if( (iferm == 6 && ianti == 8 ) ||
- (ianti == 6 && iferm == 8 )) {
- Complex cleft,cright;
- if(iferm==6) {
- cleft = -_coup[3]*b->mass();
- cright = -_coup[4]*_masslast[0];
- }
- else {
- cleft = -_coup[3]*a->mass();
- cright = -_coup[4]*_masslast[0];
- }
- if(b->id()==ParticleID::tbar || c->id()==ParticleID::tbar) {
- cright = conj(cleft);
- cleft = 0.;
- }
- left (cleft );
- right(cright);
- norm(1.);
+ if(iferm<=4000006) {
+ left ( Complex(cL_[3]*model_->vev()));
+ right( Complex(cR_[3]*model_->vev()));
}
else {
- assert(false);
+ left ( Complex(cL_[4]*model_->vev()));
+ right( Complex(cR_[4]*model_->vev()));
}
}
}
- else if(c->id()==ParticleID::H0) {
- if(iferm==ianti) {
- if((iferm>=1 && iferm<=5 ) ||
- (iferm>=11 && iferm<=16)) {
- norm(-Complex(_coup[5]*_masslast[0]));
+ // Phi0
+ else if(c->id()==ParticleID::H0 ||
+ c->id()==ParticleID::A0) {
+ tcPDPtr ferm = a;
+ if(iferm>4000000) {
+ swap(iferm,ianti);
+ ferm = b;
+ }
+ if(q2!=q2Last_||idLast_[0]!=iferm) {
+ q2Last_ = q2;
+ idLast_[0] = iferm;
+ assert((idLast_[0]>=1 && idLast_[0]<=8 ) ||
+ (idLast_[0]>=11 && idLast_[0]<=16));
+ if(idLast_[0]!=8)
+ massLast_[0] = model_->mass(q2,ferm);
+ else
+ massLast_[0] = model_->mass(q2,getParticleData(ParticleID::t));
+ }
+ if(c->id()==ParticleID::H0 ) {
+ unsigned int iloc = 5;
+ if(iferm==6) iloc = 6;
+ else if(iferm==8) iloc = 7;
+ if( (a->id()>=1&&a->id()<=8) || (b->id()>=1&&b->id()<=8) ) {
+ left ( Complex(cR_[iloc]*massLast_[0]));
+ right( Complex(cL_[iloc]*massLast_[0]));
}
- else assert(false);
+ else {
+ left ( Complex(cL_[iloc]*massLast_[0]));
+ right( Complex(cR_[iloc]*massLast_[0]));
+ }
}
- else {
- if( (iferm == 6 && ianti == 8 ) ||
- (iferm == 8 && ianti == 6 )) {
- Complex cleft = Complex(_coup[6]*_masslast[0]);
- Complex cright = 0.;
- if(b->id()==ParticleID::tbar || c->id()==ParticleID::tbar) {
- cright = conj(cleft);
- cleft = 0.;
+ // PhiP
+ else if(c->id()==ParticleID::A0) {
+ if(iferm<=5) {
+ if( (a->id()>=1&&a->id()<=5) || (b->id()>=1&&b->id()<=5) ) {
+ if(iferm%2==0) {
+ left (Complex(0., 1.)*model_->vev()*cL_[8]);
+ right(Complex(0.,-1.)*massLast_[0] *cR_[8]);
+ }
+ else {
+ left (Complex(ZERO));
+ right(Complex(0., 1.)*massLast_[0] *cR_[8]);
+ }
}
- left (cleft );
- right(cright);
- norm(1.);
+ else {
+ if(iferm%2==0) {
+ right(Complex(0.,-1.)*model_->vev()*cL_[8]);
+ right(Complex(0., 1.)*massLast_[0] *cR_[8]);
+ }
+ else {
+ right(Complex(ZERO));
+ right(Complex(0.,-1.)*massLast_[0] *cR_[8]);
+ }
+ }
}
- else assert(false);
+ else if(iferm>=12) {
+ if( (a->id()>=11&&a->id()<=16) || (b->id()>=11&&b->id()<=16) ) {
+ left (Complex(0., 1.)*model_->vev()*cL_[9]);
+ right(Complex(0., 1.)*massLast_[0] *cR_[9]);
+ }
+ else {
+ left (Complex(0.,-1.)*massLast_[0] *cR_[9]);
+ right(Complex(0.,-1.)*model_->vev()*cL_[9]);
+ }
+ }
+ else {
+ if(ianti==4000008) {
+ unsigned int iloc = (iferm+14)/2;
+ if( (a->id()==6||a->id()==8) || (b->id()==6||b->id()==8) ) {
+ left (Complex(0., 1.)*massLast_[0]*cR_[iloc]);
+ right(Complex(0., 1.)*massLast_[0]*cL_[iloc]);
+ }
+ else {
+ left (Complex(0.,-1.)*massLast_[0]*cL_[iloc]);
+ right(Complex(0.,-1.)*massLast_[0]*cR_[iloc]);
+ }
+ }
+ else {
+ unsigned int iloc = (iferm+18)/2;
+ if( (a->id()==6||a->id()==8) || (b->id()==6||b->id()==8) ) {
+ left (Complex(0., 1.)*model_->vev()*cL_[iloc]);
+ right(Complex(0.,-1.)*massLast_[0] *cR_[iloc]);
+ }
+ else {
+ left (Complex(0., 1.)*massLast_[0] *cR_[iloc]);
+ right(Complex(0.,-1.)*model_->vev()*cL_[iloc]);
+ }
+ }
+ }
}
}
- else if(c->id()==ParticleID::A0) {
- left(-1.);
- right(1.);
- if(iferm==ianti) {
- if((iferm>=1 && iferm<=5 ) ||
- (iferm>=11 && iferm<=16)) {
- if(iferm%2==0)
- norm(-Complex( _coup[7]*_masslast[0]));
- else
- norm(-Complex(-_coup[7]*_masslast[0]));
- }
- else assert(false);
+ else if(abs(c->id())==ParticleID::Hplus) {
+ tcPDPtr ferm = a;
+ if(iferm>4000000) {
+ swap(iferm,ianti);
+ ferm = b;
}
- else {
- if( (iferm == 6 && ianti == 8 ) ||
- (iferm == 8 && ianti == 6 )) {
- Complex cleft = Complex(_coup[8]*_masslast[0]);
- Complex cright = 0.;
- if(b->id()==ParticleID::tbar || c->id()==ParticleID::tbar) {
- cright = conj(cleft);
- cleft = 0.;
- }
- left (cleft );
- right(cright);
- norm(1.);
- }
- else assert(false);
+ if(q2!=q2Last_||idLast_[0]!=iferm) {
+ q2Last_ = q2;
+ idLast_[0] = iferm;
+ assert((idLast_[0]>=1 && idLast_[0]<=8 ) ||
+ (idLast_[0]>=11 && idLast_[0]<=16));
+ if(idLast_[0]!=8)
+ massLast_[0] = model_->mass(q2,ferm);
+ else
+ massLast_[0] = model_->mass(q2,getParticleData(ParticleID::t));
}
- }
- else if(c->id()==ParticleID::Hplus) {
- norm(1.);
Complex cleft(0.),cright(0.);
- if(iferm%2==0) {
- if(iferm==ParticleID::t) {
- cleft = _masslast[0]*_coup[ 9];
- }
- else {
- cleft = _masslast[0]*_coup[10];
- cright = _masslast[1]*_coup[10];
- }
+ // lepton and T-odd lepton
+ if(iferm>=11&&iferm<=16) {
+ cright =-cR_[14]*massLast_[0];
+ cleft =-cL_[14]*model_->vev();
}
- else {
- if(ianti==ParticleID::t) {
- cleft = _masslast[1]*_coup[ 9];
- }
- else {
- cleft = _masslast[1]*_coup[10];
- cright = _masslast[0]*_coup[10];
- }
+ else if(iferm>=1&&iferm<=6) {
+ cright =-cR_[15]*massLast_[0];
+ cleft =-cL_[15]*model_->vev();
}
- left ( cleft);
- right(cright);
- }
- else if(c->id()==ParticleID::Hminus) {
- norm(1.);
- Complex cleft(0.),cright(0.);
- if(iferm%2==0) {
- if(iferm==ParticleID::t) {
- cright = _masslast[0]*_coup[ 9];
- }
- else {
- cright = _masslast[0]*_coup[10];
- cleft = _masslast[1]*_coup[10];
- }
+ else if(iferm==6) {
+ cright =-cR_[16]*massLast_[0];
+ cleft =-cL_[16]*model_->vev();
}
- else {
- if(ianti==ParticleID::t) {
- cright = _masslast[1]*_coup[ 9];
- }
- else {
- cright = _masslast[1]*_coup[10];
- cleft = _masslast[0]*_coup[10];
- }
+ else if(iferm==8) {
+ cright =-cR_[17]*massLast_[0];
+ cleft =-cL_[17]*model_->vev();
}
- left ( cleft);
+ if((a->id()>=1&&a->id()<=16) ||(b->id()>=1&&b->id()<=16) ) {
+ swap(cleft,cright);
+ cleft *= -1.;
+ cright *= -1.;
+ }
+ if(c->id()==ParticleID::Hminus) {
+ cleft *= -1.;
+ cright *= -1.;
+ }
+ left (cleft );
right(cright);
}
}
diff --git a/Models/LH/LHFFHVertex.h b/Models/LHTP/LHTPFFHVertex.h
copy from Models/LH/LHFFHVertex.h
copy to Models/LHTP/LHTPFFHVertex.h
--- a/Models/LH/LHFFHVertex.h
+++ b/Models/LHTP/LHTPFFHVertex.h
@@ -1,177 +1,143 @@
// -*- C++ -*-
-#ifndef HERWIG_LHFFHVertex_H
-#define HERWIG_LHFFHVertex_H
+#ifndef HERWIG_LHTPFFHVertex_H
+#define HERWIG_LHTPFFHVertex_H
//
-// This is the declaration of the LHFFHVertex class.
+// This is the declaration of the LHTPFFHVertex class.
//
-#include "LHModel.h"
+#include "LHTPModel.h"
#include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
- * The LHFFHVertex class implements the couplings of the fermions to
- * the Higgs bosons of the Little Higgs model..
- *
- * @see \ref LHFFHVertexInterfaces "The interfaces"
- * defined for LHFFHVertex.
+ * The LHTPFFHVertex class implements the couplings of the fermions to
+ * the Higgs bosons of the Little Higgs model with T-parity.
*/
-class LHFFHVertex: public Helicity::FFSVertex {
-
+class LHTPFFHVertex: public Helicity::FFSVertex {
+
public:
-
+
/**
* The default constructor.
*/
- LHFFHVertex();
+ LHTPFFHVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
* @param ioff Which particle is off-shell
- */
+ */
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
-
+
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();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const {return new_ptr(*this);}
//@}
protected:
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHFFHVertex> initLHFFHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
- LHFFHVertex & operator=(const LHFFHVertex &);
+ LHTPFFHVertex & operator=(const LHTPFFHVertex &);
private:
/**
* Pointer to the SM object.
*/
- tcLHModelPtr _model;
+ tcLHTPModelPtr model_;
/**
* Storage of the couplings.
*/
//@{
/**
* The PDG code of the last fermion the coupling was evaluated for.
*/
- int _idlast[2];
+ int idLast_[2];
/**
* The last \f$q^2\f$ the coupling was evaluated at.
*/
- Energy2 _q2last;
+ Energy2 q2Last_;
/**
* The mass of the last fermion for which the coupling was evaluated.
*/
- Energy _masslast[2];
+ Energy massLast_[2];
/**
* The factors for the individual interactions
*/
- vector<complex<InvEnergy> > _coup;
+ vector<complex<InvEnergy> > coup_;
+
+ /**
+ * Left coupling
+ */
+ vector<complex<InvEnergy> > cL_;
+
+ /**
+ * Right coupling
+ */
+ vector<complex<InvEnergy> > cR_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHFFHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHFFHVertex,1> {
- /** Typedef of the first base class of LHFFHVertex. */
- typedef Helicity::FFSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHFFHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHFFHVertex>
- : public ClassTraitsBase<Herwig::LHFFHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHFFHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHFFHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHFFHVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
-#endif /* HERWIG_LHFFHVertex_H */
+#endif /* HERWIG_LHTPFFHVertex_H */
diff --git a/Models/LHTP/LHTPFFPVertex.cc b/Models/LHTP/LHTPFFPVertex.cc
--- a/Models/LHTP/LHTPFFPVertex.cc
+++ b/Models/LHTP/LHTPFFPVertex.cc
@@ -1,173 +1,193 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPFFPVertex class.
//
#include "LHTPFFPVertex.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "LHTPModel.h"
using namespace Herwig;
IBPtr LHTPFFPVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHTPFFPVertex::fullclone() const {
return new_ptr(*this);
}
void LHTPFFPVertex::persistentOutput(PersistentOStream & os) const {
- os << _charge << _coupd << _coupu << _coupe << _coupnu
- << _tmtpL << _tmtpR << _tmtL << _tmtR;
+ os << charge_ << coupd_ << coupu_ << coupe_ << coupnu_
+ << TPreFactor_ << sL_ << cL_ << sR_ << cR_;
}
void LHTPFFPVertex::persistentInput(PersistentIStream & is, int) {
- is >> _charge >> _coupd >> _coupu >> _coupe >> _coupnu
- >> _tmtpL >> _tmtpR >> _tmtL >> _tmtR;
+ is >> charge_ >> coupd_ >> coupu_ >> coupe_ >> coupnu_
+ >> TPreFactor_ >> sL_ >> cL_ >> sR_ >> cR_;
}
-ClassDescription<LHTPFFPVertex>
-LHTPFFPVertex::initLHTPFFPVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPFFPVertex,FFVVertex>
+describeHerwigLHTPFFPVertex("Herwig::LHTPFFPVertex", "HwLHTPModel.so");
void LHTPFFPVertex::Init() {
static ClassDocumentation<LHTPFFPVertex> documentation
("The LHTPFFPVertex class implements the coupling"
" of the charged fermions to the photon in the Little Higgs"
" model with T-parity.");
}
LHTPFFPVertex::LHTPFFPVertex() :
- _charge(37,0.0), _couplast(0.), _q2last(-1.*GeV2),
- _coupd(0.), _coupu(0.), _coupe(0.), _coupnu(0.),
- _tmtpL(0.), _tmtpR(0.), _tmtL(0.), _tmtR(0.) {
+ charge_(37,0.0), coupLast_(0.), q2Last_(-1.*GeV2),
+ coupd_(0.), coupu_(0.), coupe_(0.), coupnu_(0.),
+ TPreFactor_(0.), sL_(0.), cL_(1.), sR_(0.), cR_(1.) {
orderInGem(1);
orderInGs(0);
+}
+
+void LHTPFFPVertex::doinit() {
// interactions with the photon
// the quarks
- for(unsigned int ix = 1; ix < 7; ++ix) {
+ for(int ix = 1; ix < 7; ++ix) {
addToList(-ix, ix, 22);
}
// the leptons
- for(unsigned int ix = 11; ix < 17; ix += 2) {
+ for(int ix = 11; ix < 17; ix += 2) {
addToList(-ix, ix, 22);
}
// extra top quark
addToList(-8, 8, 22);
// the T-odd quarks
for(long ix = 4000001;ix < 4000007; ++ix) {
addToList(-ix, ix, 22);
}
// the T-odd leptons
for(long ix = 4000011; ix < 4000017; ix += 2) {
addToList(-ix, ix, 22);
}
// extra top quark
addToList(-4000008, 4000008, 22);
// interactions with A_H
- // quark and T-odd quark
+ // quarks and T-odd quark
for(int ix = 1; ix < 7; ++ix) {
- addToList(-ix - 4000000, ix, 32);
- addToList(-ix, ix + 4000000, 32);
+ addToList(-ix - 4000000, ix , 32);
+ addToList(-ix , ix + 4000000, 32);
}
- // leptons and T-odd leptons
- for(int ix = 11; ix < 17; ix += 2) {
- addToList(-ix - 4000000, ix, 32);
- addToList(-ix, ix + 4000000, 32);
+ // leptons and T-odd leptons (both charged leptons and neutrinos)
+ for(int ix = 11; ix < 17; ++ix ) {
+ addToList(-ix - 4000000, ix , 32);
+ addToList(-ix , ix + 4000000, 32);
}
// T+T-A_H
- addToList(-4000008, 8, 32);
- addToList( 4000008, -8, 32);
+ addToList(-4000008, 8, 32);
+ addToList( -8, 4000008, 32);
// T-tA_H
- addToList(-4000008, 6, 32);
- addToList( 4000008, -6, 32);
-}
-
-void LHTPFFPVertex::doinit() {
+ addToList(-4000008, 6, 32);
+ addToList( -6, 4000008, 32);
+ // T-tA_H
+ addToList(-4000006, 8, 32);
+ addToList( -8, 4000006, 32);
// charges
for(int ix = 1; ix < 16; ++ix) {
tcPDPtr ptemp = getParticleData(ix);
- if(ptemp) _charge[ix] = double(ptemp->iCharge())/3.;
+ if(ptemp) charge_[ix] = double(ptemp->iCharge())/3.;
}
for(int ix = 4000001; ix < 4000016; ++ix) {
tcPDPtr ptemp = getParticleData(ix);
- if(ptemp) _charge[ix-3999980] = double(ptemp->iCharge())/3.;
+ if(ptemp) charge_[ix-3999980] = double(ptemp->iCharge())/3.;
}
// couplings to A_H
double sw = generator()->standardModel()->sin2ThetaW();
double cw = sqrt(1.-sw);
sw = sqrt(sw);
// model
cLHTPModelPtr model =
dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
if(!model) throw InitException() << "Must be using the LHTPModel "
<< " in LHTPFFPVertex::doinit()"
<< Exception::runerror;
double cH = model->cosThetaH();
double sH = model->sinThetaH();
+ sL_ = model->sinThetaL();
+ cL_ = model->cosThetaL();
+ sR_ = model->sinThetaR();
+ cR_ = model->cosThetaR();
// couplings of fermion T-odd fermion A_H
- _coupd = -0.1*(cH/cw-5.*sH/sw);
- _coupu = -0.1*(cH/cw+5.*sH/sw);
- _coupe = -0.1*(cH/cw-5.*sH/sw);
- _coupnu = -0.1*(cH/cw+5.*sH/sw);
+ coupd_ = -0.1*(cH/cw-5.*sH/sw);
+ coupu_ = -0.1*(cH/cw+5.*sH/sw);
+ coupe_ = -0.1*(cH/cw-5.*sH/sw);
+ coupnu_ = -0.1*(cH/cw+5.*sH/sw);
// couplings of T+T- A_H
- _tmtpL = 0.4*cH/cw*model->cosBeta();
- _tmtpR = 0.4*cH/cw*model->cosAlpha();
- // couplings of T-t A_H
- _tmtL = 0.4*cH/cw*model->sinBeta();
- _tmtR = 0.4*cH/cw*model->sinAlpha();
+ TPreFactor_ = 0.4*cH/cw;
FFVVertex::doinit();
}
// coupling for FFP vertex
void LHTPFFPVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,tcPDPtr c) {
// first the overall normalisation
- if(q2!=_q2last) {
- _couplast = -electroMagneticCoupling(q2);
- _q2last=q2;
+ if(q2!=q2Last_) {
+ coupLast_ = -electroMagneticCoupling(q2);
+ q2Last_=q2;
}
- norm(_couplast);
+ norm(coupLast_);
// the left and right couplings
long iferm=abs(a->id()),ibos(c->id());
if(ibos == ParticleID::gamma) {
if(iferm < 20) {
- left(_charge[iferm]);
- right(_charge[iferm]);
+ left (charge_[iferm]);
+ right(charge_[iferm]);
}
else {
iferm-=3999980;
- left(_charge[iferm]);
- right(_charge[iferm]);
+ left (charge_[iferm]);
+ right(charge_[iferm]);
}
}
- else {
- long ianti = abs(b->id()) % 4000000;
- iferm = iferm % 4000000;
- if(iferm == 8) {
- if(ianti == 8) {
- left (_tmtpL);
- right(_tmtpR);
+ else if(ibos == 32) {
+ long ianti = abs(b->id());
+ if(iferm>4000000) swap(iferm,ianti);
+ assert(iferm<4000000&&ianti>4000000);
+ if( iferm == 6 || iferm == 8 ) {
+ if (iferm==6&&ianti==4000006) {
+ left (cL_*coupu_);
+ right(0.);
}
- else {
- left (_tmtL);
- right(_tmtR);
+ else if(iferm==6&&ianti==4000008) {
+ left (-TPreFactor_*sL_);
+ right(-TPreFactor_*sR_);
}
+ else if(iferm==8&&ianti==4000006) {
+ left (sL_*coupu_);
+ right(0.);
+ }
+ else if(iferm==8&&ianti==4000008) {
+ left ( TPreFactor_*cL_);
+ right( TPreFactor_*cR_);
+ }
+ else
+ assert(false);
}
- if(iferm <= 6) {
- if(iferm % 2 == 0) left(_coupu );
- else left(_coupd );
+ // quarks (inclding top)
+ else if(iferm <= 5) {
+ if(iferm % 2 == 0) left(coupu_);
+ else left(coupd_);
+ right(0.);
}
+ // leptons
else {
- if(iferm %2 == 0) left(_coupnu);
- else left(_coupe );
+ if(iferm %2 == 0) left(coupnu_);
+ else left(coupe_ );
+ right(0.);
}
- right(0.);
}
+ else
+ assert(false);
}
diff --git a/Models/LHTP/LHTPFFPVertex.h b/Models/LHTP/LHTPFFPVertex.h
--- a/Models/LHTP/LHTPFFPVertex.h
+++ b/Models/LHTP/LHTPFFPVertex.h
@@ -1,200 +1,161 @@
// -*- C++ -*-
#ifndef HERWIG_LHTPFFPVertex_H
#define HERWIG_LHTPFFPVertex_H
//
// This is the declaration of the LHTPFFPVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
-#include "LHTPFFPVertex.fh"
namespace Herwig {
using namespace ThePEG;
/**
- * Here is the documentation of the LHTPFFPVertex class.
- *
- * @see \ref LHTPFFPVertexInterfaces "The interfaces"
- * defined for LHTPFFPVertex.
+ * The LHTPFFPVertex class implements the couplings of the photon
+ * and its heavy partner \f$A_H\f$ in the Little Higgs model with T-parity.
*/
class LHTPFFPVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHTPFFPVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
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:
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHTPFFPVertex> initLHTPFFPVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPFFPVertex & operator=(const LHTPFFPVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The charge of the Standard Model fermions.
*/
- vector<double> _charge;
+ vector<double> charge_;
/**
* The last value of the coupling calculated.
*/
- Complex _couplast;
+ Complex coupLast_;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
- Energy2 _q2last;
+ Energy2 q2Last_;
//@}
/**
* Couplings of the fermion and T-fermions to the \f$A_H\f$
*/
//@{
/**
* Coupling of \f$dd_-A_H\f$
*/
- double _coupd;
+ double coupd_;
/**
* Coupling of \f$uu_-A_H\f$
*/
- double _coupu;
+ double coupu_;
/**
* Coupling of \f$ee_-A_H\f$
*/
- double _coupe;
+ double coupe_;
/**
* Coupling of \f$\nu\nu_-A_H\f$
*/
- double _coupnu;
+ double coupnu_;
/**
- * Coupling of \f$T_-T_+A_H\f$
+ * Coupling of heavy top
*/
- double _tmtpL,_tmtpR;
+ double TPreFactor_;
/**
- * Coupling of \f$T_-tA_H\f$
+ * Left mixings
*/
- double _tmtL,_tmtR;
+ double sL_,cL_;
+
+ /**
+ * Right mixings
+ */
+ double sR_,cR_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPFFPVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHTPFFPVertex,1> {
- /** Typedef of the first base class of LHTPFFPVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPFFPVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPFFPVertex>
- : public ClassTraitsBase<Herwig::LHTPFFPVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPFFPVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPFFPVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHTPFFPVertex 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHTPFFPVertex_H */
diff --git a/Models/LHTP/LHTPFFWVertex.cc b/Models/LHTP/LHTPFFWVertex.cc
--- a/Models/LHTP/LHTPFFWVertex.cc
+++ b/Models/LHTP/LHTPFFWVertex.cc
@@ -1,204 +1,204 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPFFWVertex class.
//
#include "LHTPFFWVertex.h"
#include "LHTPModel.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/StandardModel/CKMBase.h"
#include "Herwig++/Models/StandardModel/StandardCKM.h"
using namespace Herwig;
IBPtr LHTPFFWVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHTPFFWVertex::fullclone() const {
return new_ptr(*this);
}
void LHTPFFWVertex::persistentOutput(PersistentOStream & os) const {
- os << _ckm << _salpha << _calpha << _sbeta << _cbeta;
+ os << ckm_ << sL_ << cL_;
}
void LHTPFFWVertex::persistentInput(PersistentIStream & is, int) {
- is >> _ckm >> _salpha >> _calpha >> _sbeta >> _cbeta;
+ is >> ckm_ >> sL_ >> cL_;
}
-ClassDescription<LHTPFFWVertex>
-LHTPFFWVertex::initLHTPFFWVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPFFWVertex,FFVVertex>
+describeHerwigLHTPFFWVertex("Herwig::LHTPFFWVertex", "HwLHTPModel.so");
void LHTPFFWVertex::Init() {
static ClassDocumentation<LHTPFFWVertex> documentation
("The LHTPFFWVertex class implements the couplings of the W"
" and W_H bosons of the Little Higgss model with T-parity to the fermions.");
}
void LHTPFFWVertex::doinit() {
- ThePEG::Helicity::FFVVertex::doinit();
- Ptr<CKMBase>::transient_pointer CKM = generator()->standardModel()->CKM();
- // cast the CKM object to the HERWIG one
- ThePEG::Ptr<Herwig::StandardCKM>::transient_const_pointer
- hwCKM = ThePEG::dynamic_ptr_cast< ThePEG::Ptr<Herwig::StandardCKM>::
- transient_const_pointer>(CKM);
- if(hwCKM) {
- vector< vector<Complex > > CKM;
- CKM = hwCKM->getUnsquaredMatrix(generator()->standardModel()->families());
- for(unsigned int ix=0;ix<3;++ix) {
- for(unsigned int iy=0;iy<3;++iy) {
- _ckm[ix][iy]=CKM[ix][iy];
- }
- }
- }
- else {
- throw InitException() << "Must have access to the Herwig::StandardCKM object"
- << "for the CKM matrix in LHTPFFWVertex::doinit()"
- << Exception::runerror;
- }
- // model
- cLHTPModelPtr model =
- dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
- if(!model) throw InitException() << "Must be using the LHTPModel "
- << " in LHTPFFWVertex::doinit()"
- << Exception::runerror;
- _salpha = model->sinAlpha();
- _calpha = model->cosAlpha();
- _sbeta = model->sinBeta();
- _cbeta = model->cosBeta();
- // cerr << *this;
-}
-
-LHTPFFWVertex::LHTPFFWVertex()
- : _ckm(3,vector<Complex>(3,0.0)), _couplast(0.),_q2last(0.*sqr(MeV)) {
- orderInGem(1);
- orderInGs(0);
- // particles for the vertex
- vector<long> first,second,third;
// particles for outgoing W-
// quarks
for(int ix = 1; ix < 6; ix += 2) {
for(int iy = 2; iy < 7; iy += 2) {
addToList(-ix, iy, -24);
}
}
// additional T quark
addToList(-5, 8, -24);
// leptons
for(int ix = 11; ix < 17; ix += 2) {
addToList(-ix, ix + 1, -24);
}
// T-odd quarks
for(long ix = 4000002; ix < 4000007; ix += 2) {
addToList(-ix + 1, ix, -24);
}
// T-odd leptons
for(long ix = 4000011; ix < 4000017; ix += 2) {
addToList(-ix, ix + 1, -24);
}
- // T-odd leptons
// particles for outgoing W+
// quarks
for(int ix = 2; ix < 7; ix += 2) {
for(int iy = 1; iy < 6; iy += 2) {
addToList(-ix, iy, 24);
}
}
// additional T quark
addToList(-8, 5, 24);
// leptons
for(int ix = 11; ix < 17; ix += 2) {
addToList(-ix - 1, ix, 24);
}
// T-odd quarks
for(long ix = 4000002; ix < 4000009; ix += 2) {
addToList(-ix, ix-1, 24);
}
// T-odd leptons
for(long ix = 4000011; ix < 4000017; ix += 2) {
addToList(-ix-1, ix, 24);
}
- // particles for w_H-
+ // particles for W_H-
// quark and T-odd quark
for(int ix = 1; ix < 6; ix += 2) {
addToList(-ix-4000000, ix+1, -34);
addToList(-ix, ix+1+4000000, -34);
}
+ addToList(-4000005, 8, -34);
// lepton and T-odd lepton
for(int ix = 11;ix < 17; ix += 2) {
addToList(-ix-4000000, ix+1, -34);
addToList(-ix, ix+1+4000000, -34);
}
// particles for w_h+
// quark and T-odd quark
for(int ix = 1;ix < 6;ix += 2) {
addToList(ix + 4000000, -ix - 1, 34);
addToList(ix, -ix - 4000001, 34);
}
+ addToList(4000005, -8, 34);
// leptons and T-odd lepton
for(int ix = 11; ix < 17; ix += 2) {
addToList(-ix - 4000001, ix, 34);
addToList(-ix - 1, ix + 4000000, 34);
}
+ ThePEG::Helicity::FFVVertex::doinit();
+ Ptr<CKMBase>::transient_pointer CKM = generator()->standardModel()->CKM();
+ // cast the CKM object to the HERWIG one
+ ThePEG::Ptr<Herwig::StandardCKM>::transient_const_pointer
+ hwCKM = ThePEG::dynamic_ptr_cast< ThePEG::Ptr<Herwig::StandardCKM>::
+ transient_const_pointer>(CKM);
+ if(hwCKM) {
+ vector< vector<Complex > > CKM;
+ CKM = hwCKM->getUnsquaredMatrix(generator()->standardModel()->families());
+ for(unsigned int ix=0;ix<3;++ix) {
+ for(unsigned int iy=0;iy<3;++iy) {
+ ckm_[ix][iy]=CKM[ix][iy];
+ }
+ }
+ }
+ else {
+ throw InitException() << "Must have access to the Herwig::StandardCKM object"
+ << "for the CKM matrix in LHTPFFWVertex::doinit()"
+ << Exception::runerror;
+ }
+ // model
+ cLHTPModelPtr model =
+ dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
+ if(!model) throw InitException() << "Must be using the LHTPModel "
+ << " in LHTPFFWVertex::doinit()"
+ << Exception::runerror;
+ sL_ = model->sinThetaL();
+ cL_ = model->cosThetaL();
+}
+
+LHTPFFWVertex::LHTPFFWVertex()
+ : sL_(0.), cL_(1.), ckm_(3,vector<Complex>(3,0.0)),
+ coupLast_(0.),q2Last_(ZERO) {
+ orderInGem(1);
+ orderInGs(0);
}
// coupling for FFW vertex
void LHTPFFWVertex::setCoupling(Energy2 q2, tcPDPtr a,
tcPDPtr b, tcPDPtr c) {
// first the overall normalisation
- if(q2!=_q2last) {
- _couplast = -sqrt(0.5)*weakCoupling(q2);
- _q2last=q2;
+ if(q2!=q2Last_) {
+ coupLast_ = -sqrt(0.5)*weakCoupling(q2);
+ q2Last_ = q2;
}
- norm(_couplast);
+ norm(coupLast_);
+ long ia(abs(a->id())),ib(abs(b->id()));
// SM W boson
if(abs(c->id())==ParticleID::Wplus) {
- long ia(abs(a->id())),ib(abs(b->id()));
// quarks
- if(ia >= 1 && ia <= 6 && ib >= 1 && ib <= 6 ) {
+ if(ia >= 1 && ia <= 8 && ib >= 1 && ib <= 8 ) {
int iu,id;
// up type first
if(ia % 2 == 0) {
iu = ia/2;
id = (ib+1)/2;
}
// down type first
else {
iu = ib/2;
id = (ia+1)/2;
}
- if( iu<1 || iu>3 || id<1 || id>3)
- throw HelicityConsistencyError() << "LHTPFFWVertex::setCoupling "
- << "Unknown particle in W vertex"
- << Exception::runerror;
- if(ia != 6 && ib != 6) left(_ckm[iu-1][id-1]);
- else left(_ckm[iu-1][id-1]*_cbeta);
- right(0.);
- }
- else if(ia == 8|| ib == 8) {
- left(-_sbeta);
+ if(iu==4) iu=3;
+ assert( iu>=1 && iu<=3 && id>=1 && id<=3);
+ if ( ia==6 || ib==6 ) left(ckm_[iu-1][id-1]*cL_);
+ else if ( ia==8 || ib==8 ) left(ckm_[iu-1][id-1]*sL_);
+ else left(ckm_[iu-1][id-1] );
right(0.);
}
// leptons
else if( ia >= 11 && ia <= 16) {
left(1.);
right(0.);
}
else {
- left(1.);
+ left (1.);
right(1.);
}
}
else {
- left(1.);
+ if(ia==6||ib==6) left(cL_);
+ else if(ia==8||ib==8) left(sL_);
+ else left(1. );
+
+
+
+
+
right(0.);
}
}
diff --git a/Models/LHTP/LHTPFFWVertex.h b/Models/LHTP/LHTPFFWVertex.h
--- a/Models/LHTP/LHTPFFWVertex.h
+++ b/Models/LHTP/LHTPFFWVertex.h
@@ -1,192 +1,128 @@
// -*- C++ -*-
#ifndef HERWIG_LHTPFFWVertex_H
#define HERWIG_LHTPFFWVertex_H
//
// This is the declaration of the LHTPFFWVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
-#include "LHTPFFWVertex.fh"
namespace Herwig {
using namespace ThePEG;
/**
* The LHTPFFWVertex class implements the coupling of the \f$W^\pm\f$
* and \f$W^\pm_H\f$ bosons of the Little Higgs model with T-parity to fermions.
* For simplicity the coupling are assumed to be flavour diagonal.
- *
- * @see \ref LHTPFFWVertexInterfaces "The interfaces"
- * defined for LHTPFFWVertex.
*/
class LHTPFFWVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHTPFFWVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
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:
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHTPFFWVertex> initLHTPFFWVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPFFWVertex & operator=(const LHTPFFWVertex &);
private:
/**
* @name Storage of the couplings.
*/
//@{
/**
- * Top mixing angles
+ * Left mixings
*/
- //@{
- /**
- * \f$\sin\alpha\f$, taken as an input
- */
- double _salpha;
-
- /**
- * \f$\cos\alpha\f$
- */
- double _calpha;
-
- /**
- * \f$\sin\alpha\f$
- */
- double _sbeta;
-
- /**
- * \f$\cos\beta\f$
- */
- double _cbeta;
+ double sL_,cL_;
/**
* The elements of the CKM matrix.
*/
- vector<vector<Complex> > _ckm;
+ vector<vector<Complex> > ckm_;
/**
* The last value of the electroweak coupling calculated.
*/
- Complex _couplast;
+ Complex coupLast_;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
- Energy2 _q2last;
+ Energy2 q2Last_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPFFWVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHTPFFWVertex,1> {
- /** Typedef of the first base class of LHTPFFWVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPFFWVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPFFWVertex>
- : public ClassTraitsBase<Herwig::LHTPFFWVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPFFWVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPFFWVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHTPFFWVertex 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHTPFFWVertex_H */
diff --git a/Models/LHTP/LHTPFFZVertex.cc b/Models/LHTP/LHTPFFZVertex.cc
--- a/Models/LHTP/LHTPFFZVertex.cc
+++ b/Models/LHTP/LHTPFFZVertex.cc
@@ -1,202 +1,232 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPFFZVertex class.
//
#include "LHTPFFZVertex.h"
#include "LHTPModel.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
IBPtr LHTPFFZVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHTPFFZVertex::fullclone() const {
return new_ptr(*this);
}
void LHTPFFZVertex::persistentOutput(PersistentOStream & os) const {
- os << _gl << _gr << _tl << _tr << _coupd << _coupu << _coupe << _coupnu ;
+ os << gl_ << gr_ << tl_ << tr_ << coupd_ << coupu_ << coupe_ << coupnu_
+ << sL_ << cL_ << sR_ << cR_;
}
void LHTPFFZVertex::persistentInput(PersistentIStream & is, int) {
- is >> _gl >> _gr >> _tl >> _tr >> _coupd >> _coupu >> _coupe >> _coupnu;
+ is >> gl_ >> gr_ >> tl_ >> tr_ >> coupd_ >> coupu_ >> coupe_ >> coupnu_
+ >> sL_ >> cL_ >> sR_ >> cR_;
}
-ClassDescription<LHTPFFZVertex> LHTPFFZVertex::initLHTPFFZVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPFFZVertex,FFVVertex>
+describeHerwigLHTPFFZVertex("Herwig::LHTPFFZVertex", "HwLHTPModel.so");
void LHTPFFZVertex::Init() {
static ClassDocumentation<LHTPFFZVertex> documentation
- ("There is no documentation for the LHTPFFZVertex class");
+ ("The LHTPFFZVertex class implements the couplings of "
+ "the fermions to the Z boson and its heavy partner in the"
+ " Little Higgs model with T-parity.");
}
-LHTPFFZVertex::LHTPFFZVertex() : _gl(37,0.0), _gr(37,0.0),
- _tl(5 ,0.0), _tr(5 ,0.0),
- _coupd(0.), _coupu(0.),
- _coupe(0.), _coupnu(0.),
- _couplast(0.0), _q2last(0.*GeV2) {
+LHTPFFZVertex::LHTPFFZVertex()
+ : gl_(37,0.0), gr_(37,0.0), tl_( 6,0.0), tr_( 6,0.0),
+ coupd_(0.), coupu_(0.), coupe_(0.), coupnu_(0.),
+ sL_(0.), cL_(1.), sR_(0.), cR_(1.),
+ coupLast_(0.0), q2Last_(0.*GeV2) {
orderInGem(1);
orderInGs(0);
+}
+
+void LHTPFFZVertex::doinit() {
// Z
// the quarks
for(int ix = 1; ix < 7; ++ix) {
addToList(-ix, ix, 23);
}
// T+T+
addToList(-8, +8, 23);
//T+t
addToList(-6, +8, 23);
addToList(-8, +6, 23);
// the leptons
for(int ix = 11; ix < 17; ++ix) {
addToList(-ix, ix, 23);
}
// the T-odd quarks
for(long ix = 4000001; ix < 4000007; ++ix) {
addToList(-ix, ix, 23);
}
addToList(-4000008, +4000008, 23);
// the T-odd leptons
- for(long ix = 4000011;ix<17;++ix) {
+ for(long ix = 11;ix<17;++ix) {
addToList(-ix-4000000, ix+4000000, 23);
}
// Z_H
// the quarks
- for(unsigned int ix=1;ix<7;++ix) {
+ for(int ix=1;ix<7;++ix) {
addToList(-ix-4000000, ix, 33);
addToList(-ix, ix+4000000, 33);
}
addToList( -8, +4000008, 33);
addToList( 8, -4000008, 33);
addToList( -6, +4000008, 33);
addToList( 6, -4000008, 33);
// the leptons
- for(unsigned int ix=11;ix<17;++ix) {
+ for(int ix=11;ix<17;++ix) {
addToList(-ix-4000000, ix, 33);
addToList(-ix, ix+4000000, 33);
}
-}
-
-void LHTPFFZVertex::doinit() {
// model
cLHTPModelPtr model =
dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
if(!model) throw InitException() << "Must be using the LHTPModel "
<< " in LHTPFFPVertex::doinit()"
<< Exception::runerror;
double sw = model->sin2ThetaW();
double cw = sqrt(1.-sw);
sw = sqrt(sw);
double fact = 0.25/sw/cw;
for(int ix=1;ix<4;++ix) {
// SM fermions
- _gl[2*ix-1] = fact*(model->vd() + model->ad() );
- _gl[2*ix ] = fact*(model->vu() + model->au() );
- _gl[2*ix+9 ] = fact*(model->ve() + model->ae() );
- _gl[2*ix+10] = fact*(model->vnu() + model->anu());
- _gr[2*ix-1] = fact*(model->vd() - model->ad() );
- _gr[2*ix ] = fact*(model->vu() - model->au() );
- _gr[2*ix+9 ] = fact*(model->ve() - model->ae() );
- _gr[2*ix+10] = fact*(model->vnu() - model->anu());
+ gl_[2*ix-1] = fact*(model->vd() + model->ad() );
+ gl_[2*ix ] = fact*(model->vu() + model->au() );
+ gl_[2*ix+9 ] = fact*(model->ve() + model->ae() );
+ gl_[2*ix+10] = fact*(model->vnu() + model->anu());
+ gr_[2*ix-1] = fact*(model->vd() - model->ad() );
+ gr_[2*ix ] = fact*(model->vu() - model->au() );
+ gr_[2*ix+9 ] = fact*(model->ve() - model->ae() );
+ gr_[2*ix+10] = fact*(model->vnu() - model->anu());
// T-odd fermions
- _gl[2*ix-1 +20] = fact*(model->vd() + model->ad() );
- _gl[2*ix +20] = fact*(model->vu() + model->au() );
- _gl[2*ix+9 +20] = fact*(model->ve() + model->ae() );
- _gl[2*ix+10+20] = fact*(model->vnu() + model->anu());
- _gr[2*ix-1 +20] = _gl[2*ix-1 +20];
- _gr[2*ix +20] = _gl[2*ix +20];
- _gr[2*ix+9 +20] = _gl[2*ix+9 +20];
- _gr[2*ix+10+20] = _gl[2*ix+10+20];
+ gl_[2*ix-1 +20] = fact*(model->vd() + model->ad() );
+ gl_[2*ix +20] = fact*(model->vu() + model->au() );
+ gl_[2*ix+9 +20] = fact*(model->ve() + model->ae() );
+ gl_[2*ix+10+20] = fact*(model->vnu() + model->anu());
+ gr_[2*ix-1 +20] = gl_[2*ix-1 +20];
+ gr_[2*ix +20] = gl_[2*ix +20];
+ gr_[2*ix+9 +20] = gl_[2*ix+9 +20];
+ gr_[2*ix+10+20] = gl_[2*ix+10+20];
}
// couplngis to Z for extended top sector
- _tl[0] = -2./3.*sw/cw;
- _tr[0] = -2./3.*sw/cw;
- _tl[1] = (0.5*sqr(model->sinBeta())-2./3.*sqr(sw))/cw/sw;
- _tr[1] = -2./3.*sw/cw;
- _tl[2] = -0.5/sw/cw*model->sinBeta()*model->cosBeta();
- _tr[2] = 0.;
- // couplings of fermion T-odd fermion Z_H
+ tl_[0] = (0.5*sqr(model->cosThetaL())-2./3.*sqr(sw))/cw/sw;
+ tr_[0] = -2./3.*sw/cw;
+ tl_[1] = (0.5*sqr(model->sinThetaL())-2./3.*sqr(sw))/cw/sw;
+ tr_[1] = -2./3.*sw/cw;
+ tl_[2] = 0.5/sw/cw*model->sinThetaL()*model->cosThetaL();
+ tr_[2] = 0.;
+ // couplings to the Z_H of T-odd fermions
double cH = model->cosThetaH();
double sH = model->sinThetaH();
- _coupd = 0.1*(sH/cw+cH/sw);
- _coupu = 0.1*(sH/cw-cH/sw);
- _coupe = 0.1*(sH/cw+cH/sw);
- _coupnu = 0.1*(sH/cw-cH/sw);
- // couplings of T-odd top
- _tl[3] = 0.4*sH*model->sinBeta ()/cw;
- _tr[3] = 0.4*sH*model->sinAlpha()/cw;
- _tl[4] = 0.4*sH*model->cosBeta ()/cw;
- _tr[4] = 0.4*sH*model->cosAlpha()/cw;
+ sL_ = model->sinThetaL();
+ cL_ = model->cosThetaL();
+ sR_ = model->sinThetaR();
+ cR_ = model->cosThetaR();
+ coupd_ = 0.1*(sH/cw+5.*cH/sw);
+ coupu_ = 0.1*(sH/cw-5.*cH/sw);
+ coupe_ = 0.1*(sH/cw+5.*cH/sw);
+ coupnu_ = 0.1*(sH/cw-5.*cH/sw);
+ tl_[5] = -2./3.*sw/cw;
+ tr_[5] = -2./3.*sw/cw;
+ // couplings of T-odd top to the Z_H
+ tl_[3] = 0.4*sH*sL_/cw;
+ tr_[3] = 0.4*sH*sR_/cw;
+ tl_[4] =-0.4*sH*cL_/cw;
+ tr_[4] =-0.4*sH*cR_/cw;
+ // base class initialisation
FFVVertex::doinit();
}
void LHTPFFZVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,tcPDPtr c) {
// first the overall normalisation
- if(q2!=_q2last) {
- _couplast = -electroMagneticCoupling(q2);
- _q2last=q2;
+ if(q2!=q2Last_) {
+ coupLast_ = -electroMagneticCoupling(q2);
+ q2Last_=q2;
}
- norm(_couplast);
+ norm(coupLast_);
// the left and right couplings
long iferm = abs(a->id());
long ianti = abs(b->id());
long ibos = c->id();
if(ibos == ParticleID::Z0) {
- if(iferm == 8 || ianti == 8) {
- if(iferm == 8 && ianti == 8) {
- left (_tl[1]);
- right(_tr[1]);
+ if(iferm == 8 || iferm == 6) {
+ if(iferm == 6 && ianti == 6) {
+ left (tl_[0]);
+ right(tr_[0]);
+ }
+ else if(iferm == 8 && ianti == 8) {
+ left (tl_[1]);
+ right(tr_[1]);
}
else {
- left (_tl[2]);
- right(_tr[2]);
+ left (tl_[2]);
+ right(tr_[2]);
}
}
else if(iferm == 4000008) {
- left (_tl[0]);
- right(_tr[0]);
+ left (tl_[5]);
+ right(tr_[5]);
}
else if((iferm >= 1 && iferm <= 6)|| (iferm >= 11 && iferm <= 16)) {
- left(_gl[iferm]);
- right(_gr[iferm]);
+ left (gl_[iferm]);
+ right(gr_[iferm]);
}
else {
iferm = (iferm % 4000000) + 20;
- left (_gl[iferm]);
- right(_gr[iferm]);
+ left (gl_[iferm]);
+ right(gr_[iferm]);
}
}
- else {
- if(iferm == 4000008||ianti == 4000008) {
- if(iferm == 8||ianti == 8) {
- left (_tl[4]);
- right(_tr[4]);
+ else if(ibos == 33) {
+ if(iferm>4000000) swap(iferm,ianti);
+ assert(iferm<4000000&&ianti>4000000);
+ if( iferm == 6 || iferm == 8 ) {
+ if (iferm==6&&ianti==4000006) {
+ left (cL_*coupu_);
+ right(0.);
+ }
+ else if(iferm==6&&ianti==4000008) {
+ left (tl_[3]);
+ right(tr_[3]);
+ }
+ else if(iferm==8&&ianti==4000006) {
+ left (sL_*coupu_);
+ right(0.);
+ }
+ else if(iferm==8&&ianti==4000008) {
+ left ( tl_[4]);
+ right( tr_[4]);
+ }
+ else
+ assert(false);
+ }
+ else {
+ right(0.);
+ if(iferm <= 6) {
+ if(iferm % 2 == 0) left( coupu_ );
+ else left( coupd_ );
}
else {
- left (_tl[3]);
- right(_tr[3]);
- }
- }
- else {
- iferm = iferm % 4000000;
- right(0.);
- if(iferm <= 6) {
- if(iferm % 2 == 0) left(_coupu );
- else left(_coupd );
- }
- else {
- if(iferm%2 == 0) left(_coupnu);
- else left(_coupe );
+ if(iferm % 2 == 0) left( coupnu_ );
+ else left( coupe_ );
}
}
}
+ else
+ assert(false);
}
diff --git a/Models/LHTP/LHTPFFZVertex.h b/Models/LHTP/LHTPFFZVertex.h
--- a/Models/LHTP/LHTPFFZVertex.h
+++ b/Models/LHTP/LHTPFFZVertex.h
@@ -1,204 +1,171 @@
// -*- C++ -*-
#ifndef HERWIG_LHTPFFZVertex_H
#define HERWIG_LHTPFFZVertex_H
//
// This is the declaration of the LHTPFFZVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
-#include "LHTPFFZVertex.fh"
namespace Herwig {
using namespace ThePEG;
/**
- * Here is the documentation of the LHTPFFZVertex class.
- *
- * @see \ref LHTPFFZVertexInterfaces "The interfaces"
- * defined for LHTPFFZVertex.
+ * The LHTPFFZVertex class implements the couples of the \f$Z^0\f$
+ * boson and its heavy partner to the fermions in the Little Higgs
+ * model with T-parity.
*/
class LHTPFFZVertex: public Helicity::FFVVertex {
public:
/**
* The default constructor.
*/
LHTPFFZVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
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 after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHTPFFZVertex> initLHTPFFZVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPFFZVertex & operator=(const LHTPFFZVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The left couplings of the Standard Model fermions.
*/
- vector<double> _gl;
+ vector<double> gl_;
/**
* The right couplings of the Standard Model fermions.
*/
- vector<double> _gr;
+ vector<double> gr_;
/**
* The left couplings to the Z for the extended top sector
*/
- vector<double> _tl;
+ vector<double> tl_;
/**
* The right couplings to the Z for the extended top sector
*/
- vector<double> _tr;
+ vector<double> tr_;
/**
* Coupling of \f$dd_-Z_H\f$
*/
- double _coupd;
+ double coupd_;
/**
* Coupling of \f$uu_-Z_H\f$
*/
- double _coupu;
+ double coupu_;
/**
* Coupling of \f$ee_-Z_H\f$
*/
- double _coupe;
+ double coupe_;
/**
* Coupling of \f$\nu\nu_-Z_H\f$
*/
- double _coupnu;
+ double coupnu_;
+
+ /**
+ * Left mixings
+ */
+ double sL_,cL_;
+
+ /**
+ * Right mixings
+ */
+ double sR_,cR_;
/**
* The last value of the electroweak coupling calculated.
*/
- Complex _couplast;
+ Complex coupLast_;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
- Energy2 _q2last;
+ Energy2 q2Last_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPFFZVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHTPFFZVertex,1> {
- /** Typedef of the first base class of LHTPFFZVertex. */
- typedef Helicity::FFVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPFFZVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPFFZVertex>
- : public ClassTraitsBase<Herwig::LHTPFFZVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPFFZVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPFFZVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHTPFFZVertex 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHTPFFZVertex_H */
diff --git a/Models/LHTP/LHTPHHHVertex.cc b/Models/LHTP/LHTPHHHVertex.cc
new file mode 100644
--- /dev/null
+++ b/Models/LHTP/LHTPHHHVertex.cc
@@ -0,0 +1,75 @@
+// -*- C++ -*-
+//
+// This is the implementation of the non-inlined, non-templated member
+// functions of the LHTPHHHVertex class.
+//
+
+#include "LHTPHHHVertex.h"
+#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/EventRecord/Particle.h"
+#include "ThePEG/Repository/UseRandom.h"
+#include "ThePEG/Repository/EventGenerator.h"
+#include "ThePEG/Utilities/DescribeClass.h"
+
+
+#include "ThePEG/Persistency/PersistentOStream.h"
+#include "ThePEG/Persistency/PersistentIStream.h"
+
+using namespace Herwig;
+
+LHTPHHHVertex::LHTPHHHVertex() : ratio_(ZERO), coupLast_(0.), q2Last_(ZERO) {
+ orderInGem(1);
+ orderInGs (0);
+}
+
+IBPtr LHTPHHHVertex::clone() const {
+ return new_ptr(*this);
+}
+
+IBPtr LHTPHHHVertex::fullclone() const {
+ return new_ptr(*this);
+}
+
+void LHTPHHHVertex::persistentOutput(PersistentOStream & os) const {
+ os << ounit(ratio_,GeV);
+}
+
+void LHTPHHHVertex::persistentInput(PersistentIStream & is, int) {
+ is >> iunit(ratio_,GeV);
+}
+
+// The following static variable is needed for the type
+// description system in ThePEG.
+DescribeClass<LHTPHHHVertex,SSSVertex>
+describeHerwigLHTPHHHVertex("Herwig::LHTPHHHVertex", "HwLHTPModel.so");
+
+void LHTPHHHVertex::Init() {
+
+ static ClassDocumentation<LHTPHHHVertex> documentation
+ ("The LHTPHHHVertex class implements the trilinear Higgs boson"
+ " self couplings in the Little Higgs model with T-parity");
+
+}
+
+void LHTPHHHVertex::doinit() {
+ addToList(25,25, 25);
+ addToList(25,35, 35);
+ addToList(25,36, 36);
+ addToList(25,37,-37);
+ SSSVertex::doinit();
+ ratio_ = -1.5*sqr(getParticleData(ParticleID::h0)->mass())/
+ getParticleData(ParticleID::Wplus)->mass();
+}
+
+void LHTPHHHVertex::setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr) {
+ if(q2!=q2Last_||coupLast_==0.) {
+ coupLast_ = weakCoupling(q2)*ratio_*UnitRemoval::InvE;
+ q2Last_=q2;
+ }
+ long id = part2->id()!=ParticleID::h0 ? abs(part2->id()) : abs(part1->id());
+ if(id==ParticleID::h0) norm( coupLast_);
+ else if(id==35) norm(-12.*coupLast_);
+ else if(id==36) norm(-12.*coupLast_);
+ else if(id==37) norm(- 6.*coupLast_);
+ else assert(false);
+}
diff --git a/Models/LHTP/LHTPHHHVertex.h b/Models/LHTP/LHTPHHHVertex.h
new file mode 100644
--- /dev/null
+++ b/Models/LHTP/LHTPHHHVertex.h
@@ -0,0 +1,120 @@
+// -*- C++ -*-
+#ifndef Herwig_LHTPHHHVertex_H
+#define Herwig_LHTPHHHVertex_H
+//
+// This is the declaration of the LHTPHHHVertex class.
+//
+
+#include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h"
+
+namespace Herwig {
+
+using namespace ThePEG;
+ using namespace ThePEG::Helicity;
+
+/**
+ * The LHTPHHHVertex class implements the triple Higgs boson interactions
+ * in the Little Higgs model
+ * with T-parity.
+ */
+class LHTPHHHVertex : public SSSVertex {
+
+public:
+
+ /**
+ * The default constructor.
+ */
+ LHTPHHHVertex();
+
+ /**
+ * Calculate the couplings.
+ * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
+ * @param part1 The ParticleData pointer for the first particle.
+ * @param part2 The ParticleData pointer for the second particle.
+ * @param part3 The ParticleData pointer for the third particle.
+ */
+ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
+
+ /** @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();
+
+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 after the setup phase before saving an
+ * EventGenerator to disk.
+ * @throws InitException if object could not be initialized properly.
+ */
+ virtual void doinit();
+ //@}
+
+private:
+
+ /**
+ * The assignment operator is private and must never be called.
+ * In fact, it should not even be implemented.
+ */
+ LHTPHHHVertex & operator=(const LHTPHHHVertex &);
+
+private:
+
+ /**
+ * ratio of masses
+ */
+ Energy ratio_;
+
+ /**
+ * The last value of the electroweak coupling calculated.
+ */
+ Complex coupLast_;
+
+ /**
+ * The scale \f$q^2\f$ at which the coupling was last evaluated.
+ */
+ Energy2 q2Last_;
+
+};
+
+}
+
+#endif /* Herwig_LHTPHHHVertex_H */
diff --git a/Models/LHTP/LHTPModel.cc b/Models/LHTP/LHTPModel.cc
--- a/Models/LHTP/LHTPModel.cc
+++ b/Models/LHTP/LHTPModel.cc
@@ -1,265 +1,302 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPModel class.
//
#include "LHTPModel.h"
#include "ThePEG/PDT/EnumParticles.h"
-#include "ThePEG/Repository/BaseRepository.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Interface/Reference.h"
+#include "ThePEG/Utilities/DescribeClass.h"
+#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/Interface/RefVector.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "gsl/gsl_multiroots.h"
#include "ThePEG/Repository/CurrentGenerator.h"
#include <algorithm>
using namespace Herwig;
using namespace ThePEG;
// equations for top parameters for GSL
namespace {
// struct to provide the model parameters to the functions
struct tparams {
Energy v;
Energy f;
Energy mt;
double tan2a;
};
// equations defining tan 2alpha and mt expressed in form f(lambda1,lambda2)=0
// to be solved to give lambda1 and lambda2 by gsl
int top_equation(const gsl_vector * x, void *params, gsl_vector *f ) {
// yukawa and check top mass
const double lam1 = gsl_vector_get(x,0);
const double lam2 = gsl_vector_get(x,1);
Energy fs = ((struct tparams *) params)->f;
Energy v = ((struct tparams *) params)->v;
double sv = sin(sqrt(2.)*v/fs);
double cv = cos(sqrt(2.)*v/fs);
Energy mt = ((struct tparams *) params)->mt;
double tan2a = ((struct tparams *) params)->tan2a;
double f1 = 4.*lam1*lam2*(1.+cv)/(4.*sqr(lam2)-sqr(lam1)*(2.*sqr(sv)+sqr(1.+cv)))
-tan2a;
double delta = 0.5*(sqr(lam2)+0.5*sqr(lam1)*(sqr(sv)+0.5*sqr(1.+cv)));
double f2 = sqr(fs/mt)*delta*(1.-sqrt(1.-0.5*sqr(lam1*lam2*sv/delta)))-1.;
if(lam1*lam2<0.) f1+=1e10;
if(lam1*lam2<0.) f2+=1e10;
gsl_vector_set(f,0,f1);
gsl_vector_set(f,1,f2);
return GSL_SUCCESS;
}
}
LHTPModel::LHTPModel()
- : _f(0.5*TeV), _salpha(sqrt(0.500)), _calpha(0.), _sbeta(0.), _cbeta(0.),
- _kappa(1.), _mh(120.*GeV), _v(246.*GeV),_g(sqrt(0.43)), _gp(sqrt(0.12)) {}
+ : f_(0.5*TeV), salpha_(sqrt(0.5)), calpha_(sqrt(0.5)), sbeta_(0.), cbeta_(0.),
+ sL_(0.), cL_(1.), sR_(0.), cR_(0.),
+ kappaQuark_(1.), kappaLepton_(1.), mh_(125.*GeV), v_(246.*GeV),
+ g_(sqrt(0.43)), gp_(sqrt(0.12)), approximate_(false)
+{}
IBPtr LHTPModel::clone() const {
return new_ptr(*this);
}
IBPtr LHTPModel::fullclone() const {
return new_ptr(*this);
}
void LHTPModel::persistentOutput(PersistentOStream & os) const {
- os << ounit(_f,TeV) << _salpha << _calpha << _sbeta << _cbeta
- << _kappa << ounit(_v,GeV) << _g << _gp << _sthetaH << _cthetaH;
+ os << ounit(f_,TeV) << salpha_ << calpha_ << sbeta_ << cbeta_
+ << kappaQuark_ << kappaLepton_ << ounit(v_,GeV)
+ << g_ << gp_ << sthetaH_ << cthetaH_ << approximate_
+ << sL_ << cL_ << sR_ << cR_ << WHHVertex_;
}
void LHTPModel::persistentInput(PersistentIStream & is, int) {
- is >> iunit(_f,TeV) >> _salpha >> _calpha >> _sbeta >> _cbeta
- >> _kappa >> iunit(_v,GeV) >> _g >> _gp >> _sthetaH >> _cthetaH;
+ is >> iunit(f_,TeV) >> salpha_ >> calpha_ >> sbeta_ >> cbeta_
+ >> kappaQuark_ >> kappaLepton_>> iunit(v_,GeV)
+ >> g_ >> gp_ >> sthetaH_ >> cthetaH_ >> approximate_
+ >> sL_ >> cL_ >> sR_ >> cR_ >> WHHVertex_;
}
-ClassDescription<LHTPModel>
-LHTPModel::initLHTPModel;
-// Definition of the static class description member.
+
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPModel,StandardModel>
+describeHerwigLHTPModel("Herwig::LHTPModel", "HwLHTPModel.so");
void LHTPModel::Init() {
static ClassDocumentation<LHTPModel> documentation
("The LHTPModel class implements the Little Higgs model"
" with T-parity");
static Parameter<LHTPModel,Energy> interfacef
("f",
"The scale of the non-linear sigma-model",
- &LHTPModel::_f, TeV, 1.*TeV, 0.0*TeV, 10.0*TeV,
+ &LHTPModel::f_, TeV, 1.*TeV, 0.0*TeV, 10.0*TeV,
true, false, Interface::limited);
static Parameter<LHTPModel,double> interfaceSinAlpha
("SinAlpha",
"The parameter controlling the mixing in the top quark sector of the model",
- &LHTPModel::_salpha, sqrt(0.5), 0.0, 10.0,
+ &LHTPModel::salpha_, sqrt(0.5), 0.0, 10.0,
false, false, Interface::limited);
- static Parameter<LHTPModel,double> interfaceKappa
- ("Kappa",
- "The parameter controlling the masses of the T-odd fermions",
- &LHTPModel::_kappa, 1.0, 0.0, 10.0,
+ static Parameter<LHTPModel,double> interfaceKappaQuark
+ ("KappaQuark",
+ "The parameter controlling the masses of the T-odd quarks",
+ &LHTPModel::kappaQuark_, 1.0, 0.0, 10.0,
+ false, false, Interface::limited);
+
+ static Parameter<LHTPModel,double> interfaceKappaLepton
+ ("KappaLepton",
+ "The parameter controlling the masses of the T-odd leptons",
+ &LHTPModel::kappaLepton_, 1.0, 0.0, 10.0,
false, false, Interface::limited);
static Parameter<LHTPModel,Energy> interfaceHiggsMass
("HiggsMass",
"The mass of the lightest Higgs boson",
- &LHTPModel::_mh, GeV, 120.0*GeV, 100.0*GeV, 1000.0*GeV,
+ &LHTPModel::mh_, GeV, 120.0*GeV, 100.0*GeV, 1000.0*GeV,
false, false, Interface::limited);
-}
-void LHTPModel::resetMass(long id, Energy mass) {
- tPDPtr part = getParticleData(id);
- if(!part) return;
- // part->init();
- const InterfaceBase * ifb = BaseRepository::FindInterface(part, "NominalMass");
- ostringstream os;
- os << abs(mass/GeV);
- ifb->exec(*part, "set", os.str());
+ static Switch<LHTPModel,bool> interfaceApproximate
+ ("Approximate",
+ "Whether to use the full expression for the mases of the top quark"
+ " and its partners or the second-order expansion in v/f.",
+ &LHTPModel::approximate_, false, false, false);
+ static SwitchOption interfaceApproximateYes
+ (interfaceApproximate,
+ "Yes",
+ "Approximate",
+ true);
+ static SwitchOption interfaceApproximateNo
+ (interfaceApproximate,
+ "No",
+ "Don't approximate",
+ false);
+
+ static Reference<LHTPModel,AbstractVSSVertex> interfaceVertexWHH
+ ("Vertex/WHH",
+ "Vertex for the interactions of the electroweak gauge"
+ " bosons and two Higgs bosons.",
+ &LHTPModel::WHHVertex_, false, false, true, false, false);
+
}
void LHTPModel::doinit() {
+ addVertex(WHHVertex_);
StandardModel::doinit();
- string name = CurrentGenerator::current().filename() +
- string("-BSMModelInfo.out");
- ofstream dummy(name.c_str());
using Constants::pi;
// compute the parameters of the model
// W and Z masses
- Energy mw(getParticleData(ParticleID::Wplus)->mass()),
- mz(getParticleData(ParticleID::Z0)->mass());
+ Energy mw(getParticleData(ParticleID::Wplus)->mass());
+ Energy mz(getParticleData(ParticleID::Z0)->mass());
// couplings g and g'
- double ee = sqrt(4.*pi*alphaEM(sqr(mz)));
- double sw2(sin2ThetaW()),cw2(1.-sin2ThetaW());
- double sw(sqrt(sw2)),cw(sqrt(cw2));
- _g = ee/sw;
- _gp = ee/cw;
+// double ee = sqrt(4.*pi*alphaEM(sqr(mz)));
+ double ee = sqrt(4.*pi*alphaEMMZ());
+ double sw(sqrt(sin2ThetaW())),cw(sqrt(1.-sin2ThetaW()));
+ g_ = ee/sw;
+ gp_ = ee/cw;
// vev
- _v = 2.*mw/_g;
- double vf(sqr(_v/_f));
+ v_ = 2.*mw/g_;
+ double vf(sqr(v_/f_));
// calculate masses of the new particles from input
// and SM parameters
// masses of the new gauge bosons (MWH = MZH)
- Energy MAH = _gp*_f*sqrt(0.2)*(1.-0.625*vf);
- Energy MZH = _g *_f* (1.-0.125*vf);
+ Energy MAH = gp_*f_*sqrt(0.2)*(1.-0.625*vf);
+ Energy MZH = g_ *f_* (1.-0.125*vf);
// mixings
- _sthetaH = 1.25*_g*_gp/(5.*sqr(_g)-sqr(_gp))*vf;
- _cthetaH = sqrt(1.-sqr(_sthetaH));
+ sthetaH_ = 1.25*g_*gp_/(5.*sqr(g_)-sqr(gp_))*vf;
+ cthetaH_ = sqrt(1.-sqr(sthetaH_));
// masses of the new top quarks
Energy MTp,MTm;
topMixing(MTp,MTm);
+ // mixings in the top sector
+ sL_ = sqr(salpha_)*v_/f_;
+ cL_ = sqrt(1.-sqr(sL_));
+ sR_ = salpha_*(1.-0.5*sqr(calpha_)*(sqr(calpha_)-sqr(salpha_))*vf);
+ cR_ = sqrt(1.-sqr(sR_));
// masses of the T-odd fermions
- Energy Mdm = sqrt(2.)*_kappa*_f;
- Energy Mum = sqrt(2.)*_kappa*_f*(1.-0.125*vf);
- Energy Mlm = sqrt(2.)*_kappa*_f;
- Energy Mnm = sqrt(2.)*_kappa*_f*(1.-0.125*vf);
+ Energy Mdm = sqrt(2.)*kappaQuark_ *f_;
+ Energy Mum = sqrt(2.)*kappaQuark_ *f_*(1.-0.125*vf);
+ Energy Mlm = sqrt(2.)*kappaLepton_*f_;
+ Energy Mnm = sqrt(2.)*kappaLepton_*f_*(1.-0.125*vf);
// masses of the triplet higgs
- Energy MPhi = sqrt(2.)*_mh*_f/_v;
+ Energy MPhi = sqrt(2.)*mh_*f_/v_;
// set the masses of the new particles
// new gauge bosons
resetMass( 32 , MAH );
resetMass( 33 , MZH );
resetMass( 34 , MZH );
resetMass(-34 , MZH );
// masses of the new top quarks
resetMass( 8 , MTp );
resetMass( -8 , MTp );
resetMass( 4000008, MTm );
resetMass( -4000008, MTm );
// masses of the Higgs bosons
- resetMass( 25 , _mh );
+ resetMass( 25 , mh_ );
resetMass( 35 , MPhi );
resetMass( 36 , MPhi );
resetMass( 37 , MPhi );
resetMass(-37 , MPhi );
resetMass( 38 , MPhi );
resetMass(-38 , MPhi );
// masses of the T-odd quarks
resetMass( 4000001, Mdm );
resetMass(-4000001, Mdm );
resetMass( 4000002, Mum );
resetMass(-4000002, Mum );
resetMass( 4000003, Mdm );
resetMass(-4000003, Mdm );
resetMass( 4000004, Mum );
resetMass(-4000004, Mum );
resetMass( 4000005, Mdm );
resetMass(-4000005, Mdm );
resetMass( 4000006, Mum );
resetMass(-4000006, Mum );
// masses of the T-odd leptons
resetMass( 4000011, Mlm );
resetMass(-4000011, Mlm );
resetMass( 4000012, Mnm );
resetMass(-4000012, Mnm );
resetMass( 4000013, Mlm );
resetMass(-4000013, Mlm );
resetMass( 4000014, Mnm );
resetMass(-4000014, Mnm );
resetMass( 4000015, Mlm );
resetMass(-4000015, Mlm );
resetMass( 4000016, Mnm );
resetMass(-4000016, Mnm );
}
void LHTPModel::topMixing(Energy & MTp, Energy & MTm) {
+ double vf(sqr(v_/f_));
Energy mt = getParticleData(ParticleID::t)->mass();
- _calpha = sqrt(1.-sqr(_salpha));
- double sv(sin(sqrt(2.)*_v/_f)),cv(cos(sqrt(2.)*_v/_f));
- // first guess for Yukawa's based on leading order in v/f expansion
- double lambda1(mt/_v/_calpha), lambda2(mt/_salpha/_v);
- MTp = lambda1/_salpha*_f;
- MTm = lambda1/_salpha*_calpha*_f;
- // special case where denominator of tan 2 alpha eqn is zero
- if(abs(_salpha-sqrt(0.5))<1e-4) {
- double a = 0.25*(2.*sqr(sv)+sqr(1.+cv));
- double b = 0.5*(a+0.5*(sqr(sv)+0.5*sqr(1.+cv)));
- lambda1 = mt/_f*sqrt(1./b/(1.-sqrt(1-0.5*a*sqr(sv/b))));
- lambda2 = sqrt(a)*lambda1;
+ calpha_ = sqrt(1.-sqr(salpha_));
+ double sv(sin(sqrt(2.)*v_/f_)),cv(cos(sqrt(2.)*v_/f_));
+ // first guess for Yukawa's based on second-order in v/f expansion
+ double lambda1 = mt/v_/calpha_*(1.+(2.-3.*pow(salpha_,4))*vf/6.);
+ double lambda2 = mt/v_/salpha_*(1.+(2.-3.*pow(calpha_,4))*vf/6.);
+ // first guess for masses
+ MTp = sqrt(sqr(lambda1)+sqr(lambda2))*f_*(1-0.5*vf*sqr(calpha_*salpha_));
+ MTm = lambda2*f_;
+ if(!approximate_) {
+ // special case where denominator of tan 2 alpha eqn is zero
+ if(abs(salpha_-sqrt(0.5))<1e-4) {
+ double a = 0.25*(2.*sqr(sv)+sqr(1.+cv));
+ double b = 0.5*(a+0.5*(sqr(sv)+0.5*sqr(1.+cv)));
+ lambda1 = mt/f_*sqrt(1./b/(1.-sqrt(1.-0.5*a*sqr(sv/b))));
+ lambda2 = sqrt(a)*lambda1;
+ }
+ // general case using GSL
+ else {
+ double ca = sqrt(1.-sqr(salpha_));
+ double ta = salpha_/ca;
+ double tan2a = 2.*ta/(1.-sqr(ta));
+ const gsl_multiroot_fsolver_type *T;
+ gsl_multiroot_fsolver *s;
+ int status;
+ size_t iter=0;
+ const size_t n=2;
+ struct tparams p = {v_,f_,mt,tan2a};
+ gsl_multiroot_function f = {&top_equation, n, &p};
+ gsl_vector *x = gsl_vector_alloc(n);
+ gsl_vector_set(x,0,lambda1);
+ gsl_vector_set(x,1,lambda2);
+ T = gsl_multiroot_fsolver_hybrids;
+ s = gsl_multiroot_fsolver_alloc(T,2);
+ gsl_multiroot_fsolver_set(s, &f,x);
+ do {
+ iter++;
+ status = gsl_multiroot_fsolver_iterate(s);
+ if(status) break;
+ status = gsl_multiroot_test_residual(s->f,1e-7);
+ }
+ while (status==GSL_CONTINUE && iter < 1000);
+ gsl_multiroot_fsolver_free(s);
+ lambda1 = gsl_vector_get(s->x,0);
+ lambda2 = gsl_vector_get(s->x,1);
+ gsl_vector_free(x);
+ }
+ // calculate the heavy top masses using full result
+ double delta = 0.5*(sqr(lambda2)+0.5*sqr(lambda1)*(sqr(sv)+0.5*sqr(1.+cv)));
+ double det = sqrt(1.-0.5*sqr(lambda1*lambda2*sv/delta));
+ MTp = sqrt(sqr(f_)*delta*(1.+det));
+ MTm = lambda2*f_;
}
- // general case using GSL
- else {
- double ca = sqrt(1.-sqr(_salpha));
- double ta = _salpha/ca;
- double tan2a = 2.*ta/(1.-sqr(ta));
- const gsl_multiroot_fsolver_type *T;
- gsl_multiroot_fsolver *s;
- int status;
- size_t iter=0;
- const size_t n=2;
- struct tparams p = {_v,_f,mt,tan2a};
- gsl_multiroot_function f = {&top_equation, n, &p};
- gsl_vector *x = gsl_vector_alloc(n);
- gsl_vector_set(x,0,lambda1);
- gsl_vector_set(x,1,lambda2);
- T = gsl_multiroot_fsolver_hybrids;
- s = gsl_multiroot_fsolver_alloc(T,2);
- gsl_multiroot_fsolver_set(s, &f,x);
- do {
- iter++;
- status = gsl_multiroot_fsolver_iterate(s);
- if(status) break;
- status = gsl_multiroot_test_residual(s->f,1e-7);
- }
- while (status==GSL_CONTINUE && iter < 1000);
- gsl_multiroot_fsolver_free(s);
- lambda1 = gsl_vector_get(s->x,0);
- lambda2 = gsl_vector_get(s->x,1);
- gsl_vector_free(x);
- }
- // calculate the heavy top masses using full result
- double delta = 0.5*(sqr(lambda2)+0.5*sqr(lambda1)*(sqr(sv)+0.5*sqr(1.+cv)));
- double det = sqrt(1.-0.5*sqr(lambda1*lambda2*sv/delta));
- MTp = sqrt(sqr(_f)*delta*(1.+det));
- MTm = lambda2*_f;
// beta mixing angle
double beta = 0.5*atan(2.*sqrt(2.)*sqr(lambda1)*sv*(1.+cv)/
(4.*sqr(lambda2)+sqr(1.+cv)*sqr(lambda1)-2.*sqr(lambda1)*sv));
- _sbeta = sin(beta);
- _cbeta = cos(beta);
+ sbeta_ = sin(beta);
+ cbeta_ = cos(beta);
}
diff --git a/Models/LHTP/LHTPModel.h b/Models/LHTP/LHTPModel.h
--- a/Models/LHTP/LHTPModel.h
+++ b/Models/LHTP/LHTPModel.h
@@ -1,272 +1,302 @@
// -*- C++ -*-
#ifndef THEPEG_LHTPModel_H
#define THEPEG_LHTPModel_H
//
// This is the declaration of the LHTPModel class.
//
#include "Herwig++/Models/StandardModel/StandardModel.h"
+#include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
#include "LHTPModel.fh"
namespace Herwig {
/**
* The LHTPModel class is the main class for the
* implementation of the Little Higgs model with T-parity
*
* @see \ref LHTPModelInterfaces "The interfaces"
* defined for LHTPModel.
*/
class LHTPModel: public StandardModel {
public:
/**
* The default constructor.
*/
LHTPModel();
/**
* Access to the parameters of the model
*/
//@{
/**
* The vacuum expection value
*/
- Energy vev() const { return _v; }
+ Energy vev() const { return v_; }
/**
* The \f$f\f$ scale of the non-linear \f$\sigma\f$-model
*/
- Energy f() const { return _f; }
+ Energy f() const { return f_; }
/**
* \f$\sin\alpha\f$
*/
- double sinAlpha() const { return _salpha; }
+ double sinAlpha() const { return salpha_; }
/**
* \f$\cos\alpha\f$
*/
- double cosAlpha() const { return _calpha; }
+ double cosAlpha() const { return calpha_; }
/**
* \f$\sin\beta\f$
*/
- double sinBeta() const { return _sbeta; }
+ double sinBeta() const { return sbeta_; }
/**
* \f$\cos\beta\f$
*/
- double cosBeta() const { return _cbeta; }
+ double cosBeta() const { return cbeta_; }
/**
* \f$\sin\theta_H\f$
*/
- double sinThetaH() const { return _sthetaH; }
+ double sinThetaH() const { return sthetaH_; }
/**
* \f$\cos\theta_H\f$
*/
- double cosThetaH() const { return _cthetaH; }
+ double cosThetaH() const { return cthetaH_; }
+
+ /**
+ * \f$\sin\theta_L\f$
+ */
+ double sinThetaL() const { return sL_;}
+
+ /**
+ * \f$\cos\theta_L\f$
+ */
+ double cosThetaL() const { return cL_;}
+
+ /**
+ * \f$\sin\theta_R\f$
+ */
+ double sinThetaR() const { return sR_;}
+
+ /**
+ * \f$\cos\theta_R\f$
+ */
+ double cosThetaR() const { return cR_;}
//@}
+ /**
+ * Yukwawa for T-odd fermions
+ */
+ //@{
+ /**
+ * The \f$\kappa_q\f$ parameter which controls the properties of the
+ * T-odd quarks
+ */
+ double kappaQuark() const { return kappaQuark_;}
+
+ /**
+ * The \f$\kappa_\ell\f$ parameter which controls the properties of the
+ * T-odd leptons
+ */
+ double kappaLepton() const { return kappaLepton_;}
+ //@}
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();
protected:
- /**
- * Reset the mass of a ParticleData object
- */
- void resetMass(long id, Energy mass);
-
-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:
/**
* Calculate the mixing in the top sector of the model
* and the masses of the T-odd and T-even heavy tops
* The mixings are calculated by solving Eqns 2.22 and 2.24 of hep-ph/0506042
* for \f$\lambda_1$ and \f$\lambda_2\f$ given the input value of \f$\sin\alpha\f$
* and the top mass.
*/
void topMixing(Energy & MTp, Energy & MTm);
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHTPModel> initLHTPModel;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPModel & operator=(const LHTPModel &);
private:
/**
* The constant for the non-linear \f$\sigma\f$ model
*/
- Energy _f;
+ Energy f_;
/**
* @name The mixing in the top quark sector
*/
//@{
/**
* \f$\sin\alpha\f$, taken as an input
*/
- double _salpha;
+ double salpha_;
/**
* \f$\cos\alpha\f$
*/
- double _calpha;
+ double calpha_;
/**
* \f$\sin\beta\f$
*/
- double _sbeta;
+ double sbeta_;
/**
* \f$\cos\beta\f$
*/
- double _cbeta;
+ double cbeta_;
//@}
/**
* @name Mixing of the heavy photon and Z
*/
//@{
/**
* \f$\sin\theta_H\f$
*/
- double _sthetaH;
+ double sthetaH_;
/**
* \f$\cos\theta_H\f$
*/
- double _cthetaH;
+ double cthetaH_;
//@}
/**
- * The \f$\kappa\f$ parameter which controls the properties of the
- * T-odd fermions
+ * @name Mixings in the top sector
*/
- double _kappa;
+ //@{
+ /**
+ * \f$\sin\theta_L\f$
+ */
+ double sL_;
+
+ /**
+ * \f$\cos\theta_L\f$
+ */
+ double cL_;
+
+ /**
+ * \f$\sin\theta_R\f$
+ */
+ double sR_;
+
+ /**
+ * \f$\cos\theta_R\f$
+ */
+ double cR_;
+ //@}
+
+ /**
+ * The \f$\kappa_q\f$ parameter which controls the properties of the
+ * T-odd quarks
+ */
+ double kappaQuark_;
+
+ /**
+ * The \f$\kappa_\ell\f$ parameter which controls the properties of the
+ * T-odd leptons
+ */
+ double kappaLepton_;
/**
* The mass of the Standard Model higgs
*/
- Energy _mh;
+ Energy mh_;
/**
* The vacuum expection valve
*/
- Energy _v;
+ Energy v_;
/**
* The \f$g\f$ coupling
*/
- double _g;
+ double g_;
/**
* the \f$g'\f$ coupling
*/
- double _gp;
+ double gp_;
+
+ /**
+ * Method for evaluating the masses
+ */
+ bool approximate_;
+
+ /**
+ * WHH Vertex
+ */
+ AbstractVSSVertexPtr WHHVertex_;
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPModel. */
-template <>
-struct BaseClassTrait<Herwig::LHTPModel,1> {
- /** Typedef of the first base class of LHTPModel. */
- typedef Herwig::StandardModel NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPModel class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPModel>
- : public ClassTraitsBase<Herwig::LHTPModel> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPModel"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPModel is implemented. It may also include several, space-separated,
- * libraries if the class LHTPModel 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* THEPEG_LHTPModel_H */
diff --git a/Models/LH/LHWHHVertex.cc b/Models/LHTP/LHTPWHHVertex.cc
copy from Models/LH/LHWHHVertex.cc
copy to Models/LHTP/LHTPWHHVertex.cc
--- a/Models/LH/LHWHHVertex.cc
+++ b/Models/LHTP/LHTPWHHVertex.cc
@@ -1,283 +1,201 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
-// functions of the LHWHHVertex class.
+// functions of the LHTPWHHVertex class.
//
-#include "LHWHHVertex.h"
-#include "LHModel.h"
+#include "LHTPWHHVertex.h"
+#include "LHTPModel.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
-LHWHHVertex::LHWHHVertex() :
- couplast_(0.), q2last_(ZERO), coup_(24) {
+LHTPWHHVertex::LHTPWHHVertex() :
+ coupLast_(0.), q2Last_(ZERO), coup_(11) {
orderInGs(0);
orderInGem(1);
- // neutral
+}
+
+IBPtr LHTPWHHVertex::clone() const {
+ return new_ptr(*this);
+}
+
+IBPtr LHTPWHHVertex::fullclone() const {
+ return new_ptr(*this);
+}
+
+void LHTPWHHVertex::persistentOutput(PersistentOStream & os) const {
+ os << coup_;
+}
+
+void LHTPWHHVertex::persistentInput(PersistentIStream & is, int) {
+ is >> coup_;
+}
+
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPWHHVertex,VSSVertex>
+describeHerwigLHTPWHHVertex("Herwig::LHTPWHHVertex", "HwLHTPModel.so");
+
+void LHTPWHHVertex::Init() {
+
+ static ClassDocumentation<LHTPWHHVertex> documentation
+ ("The LHTPWHHVertex class implements the coupling of a pair of Higgs"
+ " bosons to an electroweak gauge boson in the Little"
+ " Higgs model with T-parity.");
+
+}
+
+void LHTPWHHVertex::doinit() {
+ // photon
addToList( 22, 37,-37);
addToList( 22, 38,-38);
- addToList( 32, 37,-37);
- addToList( 32, 38,-38);
+ // Z0
addToList( 23, 37,-37);
addToList( 23, 38,-38);
- addToList( 33, 37,-37);
- addToList( 33, 38,-38);
- addToList( 32, 25, 36);
- addToList( 32, 35, 36);
- addToList( 23, 25, 36);
addToList( 23, 35, 36);
- addToList( 33, 25, 36);
- addToList( 33, 35, 36);
// W+
- addToList( 24, 25,-37);
addToList( 24, 35,-37);
addToList( 24, 36,-37);
addToList( 24, 37,-38);
- addToList( 34, 25,-37);
- addToList( 34, 35,-37);
- addToList( 34, 36,-37);
- addToList( 34, 37,-38);
// W-
- addToList(-24, 25, 37);
addToList(-24, 35, 37);
addToList(-24, 36, 37);
addToList(-24,-37, 38);
+ // A_H
+ addToList( 32, 25, 36);
+ // Z_H
+ addToList( 33, 25, 36);
+ // W_H
+ addToList( 34, 25,-37);
addToList(-34, 25, 37);
- addToList(-34, 35, 37);
- addToList(-34, 36, 37);
- addToList(-34,-37, 38);
-}
-
-IBPtr LHWHHVertex::clone() const {
- return new_ptr(*this);
-}
-
-IBPtr LHWHHVertex::fullclone() const {
- return new_ptr(*this);
-}
-
-void LHWHHVertex::persistentOutput(PersistentOStream & os) const {
- os << coup_;
-}
-
-void LHWHHVertex::persistentInput(PersistentIStream & is, int) {
- is >> coup_;
-}
-
-ClassDescription<LHWHHVertex> LHWHHVertex::initLHWHHVertex;
-// Definition of the static class description member.
-
-void LHWHHVertex::Init() {
-
- static ClassDocumentation<LHWHHVertex> documentation
- ("There is no documentation for the LHWHHVertex class");
-
-}
-
-void LHWHHVertex::doinit() {
VSSVertex::doinit();
// model
- cLHModelPtr model =
- dynamic_ptr_cast<cLHModelPtr>(generator()->standardModel());
+ cLHTPModelPtr model =
+ dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHModel "
<< " in LHWWWWVertex::doinit()"
<< Exception::runerror;
double sw2(sin2ThetaW());
double sw(sqrt(sw2)),cw(sqrt(1.-sw2));
- double s (model->sinTheta() ),c (model->cosTheta() );
- double sp(model->sinThetaPrime()),cp(model->cosThetaPrime());
- double s0 (model->sinTheta0());
- double sP (model->sinThetaP());
- double sPlus(model->sinThetaPlus());
- coup_[ 0] = 0.5/sw*(sqrt(2.)*s0-sPlus);
- coup_[ 1] = sqrt(0.5)/sw;
- coup_[ 2] = Complex(0.,1.)/sw*sqrt(0.5);
- coup_[ 3] = 1./sw;
- coup_[ 4] = 0.;
- coup_[ 5] = 0.;
- coup_[ 6] = 1.;
- coup_[ 7] = 2.;
- coup_[ 8] = Complex(0.,0.5)/cw/sw*(sP-2.*s0);
- coup_[ 9] =-Complex(0.,1.)/cw/sw;
- coup_[10] =-sw/cw;
- coup_[11] = (1.-2.*sw2)/cw/sw;
- coup_[12] =-0.25/sw*(sqr(c)-sqr(s))/s/c*(sqrt(2.)*s0-sPlus);
- coup_[13] =-sqrt(0.5)/sw*0.5*(sqr(c)-sqr(s))/s/c;
- coup_[14] =-Complex(0.,1.)*sqrt(0.5)*0.5*(sqr(c)-sqr(s))/s/c;
- coup_[15] =-0.5*(sqr(c)-sqr(s))/s/c/sw;
- coup_[16] =-Complex(0.,0.5)/cw*0.5*(sqr(cp)-sqr(sp))/sp/cp*(sP-2.*s0);
- coup_[17] = Complex(0.,1.)/cw*0.5*(sqr(cp)-sqr(sp))/sp/cp;
- coup_[18] =-0.5*(sqr(cp)-sqr(sp))/sp/cp/cw;
- coup_[19] =-0.5*(sqr(cp)-sqr(sp))/sp/cp/cw;
- coup_[20] =-Complex(0.,0.5)/sw*0.5*(sqr(c)-sqr(s))/s/c*(sP-2.*s0);
- coup_[21] = Complex(0.,1.)/sw*0.5*(sqr(c)-sqr(s))/s/c;
- coup_[22] = 0.;
- coup_[23] =-0.5/sw*(sqr(c)-sqr(s))/s/c;
+ double vf(model->vev()/model->f());
+ coup_[ 0] = 1.;
+ coup_[ 1] = 2.;
+ coup_[ 2] =-sw/cw;
+ coup_[ 3] = (1.-2.*sw2)/cw/sw;
+ coup_[ 4] =-Complex(0.,1.)/cw/sw;
+ coup_[ 5] = sqrt(0.5)/sw;
+ coup_[ 6] = Complex(0.,1.)/sw*sqrt(0.5);
+ coup_[ 7] = 1./sw;
+ coup_[ 8] =-Complex(0.,1)*sqrt(0.5)*vf/3./cw;
+ coup_[ 9] = Complex(0.,1)*sqrt(0.5)*vf/3./sw;
+ coup_[10] =-vf/6./sw;
}
-void LHWHHVertex::setCoupling(Energy2 q2, tcPDPtr particle1,
- tcPDPtr particle2, tcPDPtr particle3) {
- if( q2 != q2last_ || couplast_==0.) {
- q2last_ = q2;
- couplast_ = electroMagneticCoupling(q2);
+void LHTPWHHVertex::setCoupling(Energy2 q2, tcPDPtr particle1,
+ tcPDPtr particle2, tcPDPtr particle3) {
+ if( q2 != q2Last_ || coupLast_==0.) {
+ q2Last_ = q2;
+ coupLast_ = electroMagneticCoupling(q2);
}
int ibos = particle1->id();
int isc1 = particle2->id();
int isc2 = particle3->id();
if(ibos==ParticleID::gamma) {
if(isc1==37)
- norm(coup_[6]*couplast_);
+ norm(coup_[0]*coupLast_);
else if(isc1==38)
- norm(coup_[7]*couplast_);
+ norm(coup_[1]*coupLast_);
else if(isc1==-37)
- norm(-coup_[6]*couplast_);
+ norm(-coup_[0]*coupLast_);
else if(isc1==-38)
- norm(-coup_[7]*couplast_);
- else
- assert(false);
- }
- if(ibos==32) {
- if(isc1==37)
- norm(coup_[18]*couplast_);
- else if(isc1==38)
- norm(coup_[19]*couplast_);
- else if(isc1==-37)
- norm(-coup_[18]*couplast_);
- else if(isc1==-38)
- norm(-coup_[19]*couplast_);
- else if(isc1==25)
- norm(coup_[16]*couplast_);
- else if(isc1==35)
- norm(coup_[17]*couplast_);
- else if(isc2==25)
- norm(-coup_[16]*couplast_);
- else if(isc2==35)
- norm(-coup_[17]*couplast_);
+ norm(-coup_[1]*coupLast_);
else
assert(false);
}
else if(ibos==ParticleID::Z0) {
if(isc1==37)
- norm(coup_[10]*couplast_);
+ norm(coup_[2]*coupLast_);
else if(isc1==38)
- norm(coup_[11]*couplast_);
+ norm(coup_[3]*coupLast_);
else if(isc1==-37)
- norm(-coup_[10]*couplast_);
+ norm(-coup_[2]*coupLast_);
else if(isc1==-38)
- norm(-coup_[11]*couplast_);
- else if(isc1==25)
- norm(coup_[8]*couplast_);
+ norm(-coup_[3]*coupLast_);
else if(isc1==35)
- norm(coup_[9]*couplast_);
+ norm(coup_[4]*coupLast_);
+ else if(isc2==35)
+ norm(-coup_[4]*coupLast_);
+ else
+ assert(false);
+ }
+ else if(ibos==ParticleID::Wplus) {
+ if(isc1==35)
+ norm(coup_[5]*coupLast_);
+ else if(isc1==36)
+ norm(coup_[6]*coupLast_);
+ else if(isc1==38)
+ norm(-coup_[7]*coupLast_);
+ else if(isc2==35)
+ norm(-coup_[5]*coupLast_);
+ else if(isc2==36)
+ norm(-coup_[6]*coupLast_);
+ else if(isc2==38)
+ norm( coup_[7]*coupLast_);
+ else
+ assert(false);
+ }
+ else if(ibos==ParticleID::Wminus) {
+ if(isc1==35)
+ norm(conj(coup_[5])*coupLast_);
+ else if(isc1==36)
+ norm(conj(coup_[6])*coupLast_);
+ else if(isc1==38)
+ norm(-conj(coup_[7])*coupLast_);
+ else if(isc2==35)
+ norm(-conj(coup_[5])*coupLast_);
+ else if(isc2==36)
+ norm(-conj(coup_[6])*coupLast_);
+ else if(isc2==38)
+ norm( conj(coup_[7])*coupLast_);
+ else
+ assert(false);
+ }
+ else if(ibos==32) {
+ if(isc1==25)
+ norm( coup_[8]*coupLast_);
else if(isc2==25)
- norm(-coup_[8]*couplast_);
- else if(isc2==35)
- norm(-coup_[9]*couplast_);
+ norm(-coup_[8]*coupLast_);
else
assert(false);
}
else if(ibos==33) {
- if(isc1==37)
- norm(coup_[22]*couplast_);
- else if(isc1==38)
- norm(coup_[23]*couplast_);
- else if(isc1==-37)
- norm(-coup_[22]*couplast_);
- else if(isc1==-38)
- norm(-coup_[23]*couplast_);
- else if(isc1==25)
- norm(coup_[20]*couplast_);
- else if(isc1==35)
- norm(coup_[21]*couplast_);
+ if(isc1==25)
+ norm( coup_[9]*coupLast_);
else if(isc2==25)
- norm(-coup_[20]*couplast_);
- else if(isc2==35)
- norm(-coup_[21]*couplast_);
- else
- assert(false);
- }
- else if(ibos==ParticleID::Wplus) {
- if(isc1==25)
- norm(coup_[0]*couplast_);
- else if(isc1==35)
- norm(coup_[1]*couplast_);
- else if(isc1==36)
- norm(coup_[2]*couplast_);
- else if(isc1==37)
- norm(coup_[3]*couplast_);
- else if(isc2==25)
- norm(-coup_[0]*couplast_);
- else if(isc2==35)
- norm(-coup_[1]*couplast_);
- else if(isc2==36)
- norm(-coup_[2]*couplast_);
- else if(isc2==37)
- norm(-coup_[3]*couplast_);
+ norm(-coup_[9]*coupLast_);
else
assert(false);
}
else if(ibos==34) {
if(isc1==25)
- norm(coup_[12]*couplast_);
- else if(isc1==35)
- norm(coup_[13]*couplast_);
- else if(isc1==36)
- norm(coup_[14]*couplast_);
- else if(isc1==37)
- norm(coup_[15]*couplast_);
+ norm( coup_[10]*coupLast_);
else if(isc2==25)
- norm(-coup_[12]*couplast_);
- else if(isc2==35)
- norm(-coup_[13]*couplast_);
- else if(isc2==36)
- norm(-coup_[14]*couplast_);
- else if(isc2==37)
- norm(-coup_[15]*couplast_);
- else
- assert(false);
- }
- else if(ibos==ParticleID::Wminus) {
- if(isc1==25)
- norm(conj(coup_[0])*couplast_);
- else if(isc1==35)
- norm(conj(coup_[1])*couplast_);
- else if(isc1==36)
- norm(conj(coup_[2])*couplast_);
- else if(isc1==37)
- norm(conj(coup_[3])*couplast_);
- else if(isc2==25)
- norm(-conj(coup_[0])*couplast_);
- else if(isc2==35)
- norm(-conj(coup_[1])*couplast_);
- else if(isc2==36)
- norm(-conj(coup_[2])*couplast_);
- else if(isc2==37)
- norm(-conj(coup_[3])*couplast_);
+ norm(-coup_[10]*coupLast_);
else
assert(false);
}
else if(ibos==-34) {
if(isc1==25)
- norm(conj(coup_[12])*couplast_);
- else if(isc1==35)
- norm(conj(coup_[13])*couplast_);
- else if(isc1==36)
- norm(conj(coup_[14])*couplast_);
- else if(isc1==37)
- norm(conj(coup_[15])*couplast_);
+ norm( conj(coup_[10])*coupLast_);
else if(isc2==25)
- norm(-conj(coup_[12])*couplast_);
- else if(isc2==35)
- norm(-conj(coup_[13])*couplast_);
- else if(isc2==36)
- norm(-conj(coup_[14])*couplast_);
- else if(isc2==37)
- norm(-conj(coup_[15])*couplast_);
+ norm(-conj(coup_[10])*coupLast_);
else
assert(false);
}
+ else
+ assert(false);
}
diff --git a/Models/LH/LHWHHVertex.h b/Models/LHTP/LHTPWHHVertex.h
copy from Models/LH/LHWHHVertex.h
copy to Models/LHTP/LHTPWHHVertex.h
--- a/Models/LH/LHWHHVertex.h
+++ b/Models/LHTP/LHTPWHHVertex.h
@@ -1,161 +1,118 @@
// -*- C++ -*-
-#ifndef HERWIG_LHWHHVertex_H
-#define HERWIG_LHWHHVertex_H
+#ifndef HERWIG_LHTPWHHVertex_H
+#define HERWIG_LHTPWHHVertex_H
//
-// This is the declaration of the LHWHHVertex class.
+// This is the declaration of the LHTPWHHVertex class.
//
#include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
namespace Herwig {
using namespace ThePEG;
/**
- * Here is the documentation of the LHWHHVertex class.
- *
- * @see \ref LHWHHVertexInterfaces "The interfaces"
- * defined for LHWHHVertex.
+ * The LHTPWHHVertex class implements the coupling of an electroweak gauge
+ * boson to a pair of Higgs bosons in the Little Higgs model with T-parity.
*/
-class LHWHHVertex: public Helicity::VSSVertex {
+class LHTPWHHVertex: public Helicity::VSSVertex {
public:
/**
* The default constructor.
*/
- LHWHHVertex();
+ LHTPWHHVertex();
/** @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();
/**
* Calculate the coupling for the vertex
* @param q2 The scale to at which evaluate the coupling.
* @param particle1 The first particle in the vertex.
* @param particle2 The second particle in the vertex.
* @param particle3 The third particle in the vertex.
*/
virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
tcPDPtr particle3);
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 after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHWHHVertex> initLHWHHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
- LHWHHVertex & operator=(const LHWHHVertex &);
+ LHTPWHHVertex & operator=(const LHTPWHHVertex &);
private:
/**
* The value of the coupling when last evaluated
*/
- Complex couplast_;
+ Complex coupLast_;
/**
* The scale at which the coupling was last evaluated.
*/
- Energy2 q2last_;
+ Energy2 q2Last_;
/**
* Couplings
*/
vector<Complex> coup_;
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHWHHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHWHHVertex,1> {
- /** Typedef of the first base class of LHWHHVertex. */
- typedef Helicity::VSSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHWHHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHWHHVertex>
- : public ClassTraitsBase<Herwig::LHWHHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHWHHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHWHHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHWHHVertex 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 "HwLHModel.so"; }
-};
-
-/** @endcond */
-
-}
-
-#endif /* HERWIG_LHWHHVertex_H */
+#endif /* HERWIG_LHTPWHHVertex_H */
diff --git a/Models/LHTP/LHTPWWHVertex.cc b/Models/LHTP/LHTPWWHVertex.cc
--- a/Models/LHTP/LHTPWWHVertex.cc
+++ b/Models/LHTP/LHTPWWHVertex.cc
@@ -1,223 +1,188 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPWWHVertex class.
//
#include "LHTPWWHVertex.h"
#include "LHTPModel.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
IBPtr LHTPWWHVertex::clone() const {
return new_ptr(*this);
}
IBPtr LHTPWWHVertex::fullclone() const {
return new_ptr(*this);
}
void LHTPWWHVertex::persistentOutput(PersistentOStream & os) const {
- os << ounit(_coup,GeV);
+ os << ounit(coup_,GeV);
}
void LHTPWWHVertex::persistentInput(PersistentIStream & is, int) {
- is >> iunit(_coup,GeV);
+ is >> iunit(coup_,GeV);
}
-ClassDescription<LHTPWWHVertex>
-LHTPWWHVertex::initLHTPWWHVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPWWHVertex,VVSVertex>
+describeHerwigLHTPWWHVertex("Herwig::LHTPWWHVertex", "HwLHTPModel.so");
void LHTPWWHVertex::Init() {
static ClassDocumentation<LHTPWWHVertex> documentation
("The LHTPWWHVertex class implements the coupling of two electroweak"
" gauge bosons to a Higgs boson in the Little Higgs Model with T-Parity"
"including the additional heavy photon, Z and W bosons and the "
"triplet Higgs bosons.");
}
-LHTPWWHVertex::LHTPWWHVertex() : _couplast(0.), _q2last(0.*GeV2) {
+LHTPWWHVertex::LHTPWWHVertex() : coupLast_(0.), q2Last_(0.*GeV2) {
// order in the couplings
orderInGem(1);
orderInGs(0);
+}
+
+void LHTPWWHVertex::doinit() {
// W_L W_L H
addToList( 24, -24, 25);
// Z_L Z_L H
addToList( 23, 23, 25);
// W_H W_H H
addToList( 34, -34, 25);
// Z_H Z_H H
addToList( 33, 33, 25);
// A_H A_H H
addToList( 32, 32, 25);
-
-
- // Z_H Z_L H --- VIOLATES T-parity
-// addToList( 23,// 33,// 25);
-
-
-
// Z_H A_H H
addToList( 33, 32, 25);
-
- // W_L W_L Phi0 --- VIOLATES T-parity
-// addToList( 24,// -24,// 35);
-// // Z_L Z_L Phi0
-// addToList( 23,// 23,// 35);
-
-
// Z_L Z_H Phi0
addToList( 23, 33, 35);
-
- // W_H W_H Phi0 -- VIOLATES T-parity
-// addToList( 34,// -34,// 35);
-
-
// A_H Z_L Phi0
addToList( 32, 23, 35);
-
- // W_L Z_L Phi- --- VIOLATES T-parity
-// addToList( 24,// 23,// -37);
-// addToList( -24,// 23,// 37);
-
- // W_H Z_L Phi-
+ // W_L W_H PhiP
+ addToList( 24, -34, 36);
+ addToList( 34, -24, 36);
+ // W_H Z_L Phi+/-
addToList( 34, 23, -37);
addToList( -34, 23, 37);
- // W_L A_H Phi-
+ // W_L A_H Phi+/-
addToList( 24, 32, -37);
addToList( -24, 32, 37);
-
- // W_H A_H Phi- --- VIOLATES T-parity
-// addToList( 34,// 32,// -37);
-// addToList( -34,// 32,// 37);
-
- // W_L Z_H Phi-
+ // W_L Z_H Phi+/-
addToList( 24, 33, -37);
addToList( -24, 33, 37);
-
- // W_H Z_H Phi- --- VIOLATES T-parity
-// addToList( 34,// 33,// -37);
-// addToList( -34,// 33,// 37);
-
- // W_H A_L Phi-
+ // W_H A_L Phi+/-
addToList( 34, 22, -37);
addToList( -34, 22, 37);
-}
-
-void LHTPWWHVertex::doinit() {
+ // W_L W_H Phi --/++
+ addToList( 24, 34, -38);
+ addToList( -24, -34, 38);
// model
- cLHTPModelPtr model =
- dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
+ cLHTPModelPtr model =
+ dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
if(!model)
throw InitException() << "Must be using the LHTPModel "
<< " in LHTPWWHVertex::doinit()"
<< Exception::runerror;
// base class
VVSVertex::doinit();
// calculate the couplings for the different combinations of particles
Energy fact = 0.5*model->vev()/model->sin2ThetaW();
double sw(sqrt(model->sin2ThetaW())),cw(sqrt(1.-model->sin2ThetaW()));
- double vf(sqr(model->vev()/model->f()));
+ double vf(model->vev()/model->f());
double r2(sqrt(2.));
- _coup.resize(18);
- _coup[ 0] = fact *(1.-vf/3.);
- _coup[ 1] = fact/sqr(cw)*(1.-vf/3.);
- _coup[ 2] =-fact;
- _coup[ 3] =-fact;
- _coup[ 4] =-fact*sqr(sw/cw);
- _coup[ 5] =-fact/cw*sw;
- _coup[ 6] = fact*2.*r2;
- _coup[ 7] =-fact*2.*r2;
- _coup[ 8] = fact/sqr(cw)*4.*r2;
- _coup[ 9] =-fact*sqrt(vf)/r2/cw;
- _coup[10] = fact*sw/sqr(cw)*sqrt(vf)/r2/sw;
- _coup[11] =-fact/cw;
- _coup[12] = fact*sqrt(vf)/6./cw*(1.+2.*sqr(sw));
- _coup[13] =-fact*sqrt(vf)*sw/cw*0.5;
- _coup[14] =-fact*sw/cw*2.;
- _coup[15] = fact*sqrt(vf)*5./6.;
- _coup[16] =-fact*2.;
- _coup[17] =-fact*sqrt(vf)*sw/3.;
+ coup_.resize(14);
+ // H
+ coup_[ 0] = fact *(1.-sqr(vf)/3.);
+ coup_[ 1] = fact/sqr(cw)*(1.-sqr(vf)/3.);
+ coup_[ 2] =-fact;
+ coup_[ 3] =-fact;
+ coup_[ 4] =-fact*sqr(sw/cw);
+ coup_[ 5] =-fact/cw*sw;
+ // PhiP
+ coup_[ 6] = r2*fact*vf/3.;
+ // Phi0
+ coup_[ 7] =-fact*vf/r2/cw;
+ coup_[ 8] = fact*vf/r2*sw/sqr(cw);
+ // Phi+
+ coup_[ 9] = fact*vf/6./cw*(1.+2.*sqr(sw));
+ coup_[10] =-fact*vf*sw/cw*0.5;
+ coup_[11] = fact*vf*5./6.;
+ coup_[12] =-fact*vf*sw/3.;
+ // Phi++
+ coup_[13] =-fact*vf;
}
void LHTPWWHVertex::setCoupling(Energy2 q2,tcPDPtr a,
tcPDPtr b, tcPDPtr c) {
// first the overall normalisation
- if(q2!=_q2last) {
- _couplast = sqr(electroMagneticCoupling(q2));
- _q2last=q2;
+ if(q2!=q2Last_) {
+ coupLast_ = sqr(electroMagneticCoupling(q2));
+ q2Last_=q2;
}
long ih = abs(c->id());
long ibos[2]={abs(a->id()),abs(b->id())};
if(ih == 25) {
if( ibos[0] == 24 && ibos[1] == 24)
- norm(UnitRemoval::InvE *_couplast*_coup[0]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[0]);
else if( ibos[0] == 23 && ibos[1] == 23 )
- norm(UnitRemoval::InvE *_couplast*_coup[1]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[1]);
else if( ibos[0] == 34 && ibos[1] == 34 )
- norm(UnitRemoval::InvE *_couplast*_coup[2]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[2]);
else if( ibos[0] == 33 && ibos[1] == 33 )
- norm(UnitRemoval::InvE *_couplast*_coup[3]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[3]);
else if( ibos[0] == 32 && ibos[1] == 32 )
- norm(UnitRemoval::InvE *_couplast*_coup[4]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[4]);
else if((ibos[0] == 33 && ibos[1] == 32) ||
(ibos[0] == 32 && ibos[1] == 33) )
- norm(UnitRemoval::InvE *_couplast*_coup[5]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[5]);
else
- throw HelicityConsistencyError() << "LittleHiggsWWHVertex::setCoupling "
- << "Invalid particles in WWH Vertex "
- << a->PDGName() << " " << b->PDGName() << " "
- << c->PDGName()
- << Exception::runerror;
+ assert(false);
+ }
+ else if(ih == 36) {
+ if( ibos[0] == 34 || ibos[1] == 34)
+ norm( Complex(0.,1.)*UnitRemoval::InvE *coupLast_*coup_[6]);
+ else
+ norm(-Complex(0.,1.)*UnitRemoval::InvE *coupLast_*coup_[6]);
}
else if(ih == 35) {
- // if ( ibos[0] == 24 && ibos[1] == 24 ) norm(UnitRemoval::InvE *_couplast*_coup[ 6]);
- // if( ibos[0] == 34 && ibos[1] == 34 ) norm(UnitRemoval::InvE *_couplast*_coup[ 7]);
- //else if( ibos[0] == 23 && ibos[1] == 23 ) norm(UnitRemoval::InvE *_couplast*_coup[ 8]);
if((ibos[0] == 23 && ibos[1] == 33) ||
(ibos[0] == 33 && ibos[1] == 23) )
- norm(UnitRemoval::InvE *_couplast*_coup[ 9]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[7]);
else if((ibos[0] == 23 && ibos[1] == 32) ||
(ibos[0] == 32 && ibos[1] == 23) )
- norm(UnitRemoval::InvE *_couplast*_coup[10]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[8]);
else
- throw HelicityConsistencyError() << "LittleHiggsWWHVertex::setCoupling "
- << "Invalid particles in WWH Vertex "
- << a->PDGName() << " " << b->PDGName() << " "
- << c->PDGName()
- << Exception::runerror;
+ assert(false);
}
else if(ih == 37) {
-// if ((ibos[0] == 24 && ibos[1] == 23) ||
-// (ibos[0] == 23 && ibos[1] == 24) ) norm(UnitRemoval::InvE *_couplast*_coup[11]);
if((ibos[0] == 34 && ibos[1] == 23) ||
- (ibos[0] == 23 && ibos[1] == 34) )
- norm(UnitRemoval::InvE *_couplast*_coup[12]);
+ (ibos[0] == 23 && ibos[1] == 34) ) {
+ norm(UnitRemoval::InvE *coupLast_*coup_[ 9]);
+ }
else if((ibos[0] == 24 && ibos[1] == 32) ||
(ibos[0] == 32 && ibos[1] == 24) )
- norm(UnitRemoval::InvE *_couplast*_coup[13]);
- // if((ibos[0] == 34 && ibos[1] == 32) ||
-// (ibos[0] == 32 && ibos[1] == 34) ) norm(UnitRemoval::InvE *_couplast*_coup[14]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[10]);
else if((ibos[0] == 24 && ibos[1] == 33) ||
(ibos[0] == 33 && ibos[1] == 24) )
- norm(UnitRemoval::InvE *_couplast*_coup[15]);
-// else if((ibos[0] == 34 && ibos[1] == 33) ||
-// (ibos[0] == 33 && ibos[1] == 34) ) norm(UnitRemoval::InvE *_couplast*_coup[16]);
+ norm(UnitRemoval::InvE *coupLast_*coup_[11]);
else if((ibos[0] == 34 && ibos[1] == 22) ||
(ibos[0] == 22 && ibos[1] == 34) )
- norm(UnitRemoval::InvE *_couplast*_coup[17]);
- else
- throw HelicityConsistencyError()
- << "LittleHiggsWWHVertex::setCoupling "
- << "Invalid particles in WWH Vertex "
- << a->PDGName() << " " << b->PDGName() << " " << c->PDGName()
- << Exception::runerror;
+ norm(UnitRemoval::InvE *coupLast_*coup_[12]);
+ else
+ assert(false);
}
+ else if(ih == 38) {
+ norm(UnitRemoval::InvE *coupLast_*coup_[13]);
+ }
+ else
+ assert(false);
}
diff --git a/Models/LHTP/LHTPWWHVertex.h b/Models/LHTP/LHTPWWHVertex.h
--- a/Models/LHTP/LHTPWWHVertex.h
+++ b/Models/LHTP/LHTPWWHVertex.h
@@ -1,172 +1,127 @@
// -*- C++ -*-
#ifndef HERWIG_LHTPWWHVertex_H
#define HERWIG_LHTPWWHVertex_H
//
// This is the declaration of the LHTPWWHVertex class.
//
#include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h"
-#include "LHTPWWHVertex.fh"
namespace Herwig {
using namespace ThePEG;
/**
* The LittleHiggsWWHVertex class implements the couplings of two electroweak
* gauge bosons to a Higgs boson in the Little Higgs model with T-parity
* including the additional
* heavy photon, Z and W bosons in the model and the triplet Higgs bosons.
- *
- * @see \ref LHTPWWHVertexInterfaces "The interfaces"
- * defined for LHTPWWHVertex.
*/
class LHTPWWHVertex: public Helicity::VVSVertex {
public:
/**
* The default constructor.
*/
LHTPWWHVertex();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param part1 The ParticleData pointer for the first particle.
* @param part2 The ParticleData pointer for the second particle.
* @param part3 The ParticleData pointer for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
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();
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 after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHTPWWHVertex> initLHTPWWHVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPWWHVertex & operator=(const LHTPWWHVertex &);
private:
/**
* Storage of the couplings.
*/
//@{
/**
* The last value of the electroweak coupling calculated.
*/
- Complex _couplast;
+ Complex coupLast_;
/**
* The scale \f$q^2\f$ at which the coupling was last evaluated.
*/
- Energy2 _q2last;
+ Energy2 q2Last_;
/**
* Couplings for the different interactions
*/
- vector<Energy> _coup;
+ vector<Energy> coup_;
//@}
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPWWHVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHTPWWHVertex,1> {
- /** Typedef of the first base class of LHTPWWHVertex. */
- typedef Helicity::VVSVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPWWHVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPWWHVertex>
- : public ClassTraitsBase<Herwig::LHTPWWHVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPWWHVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPWWHVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHTPWWHVertex 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHTPWWHVertex_H */
diff --git a/Models/LHTP/LHTPWWWVertex.cc b/Models/LHTP/LHTPWWWVertex.cc
--- a/Models/LHTP/LHTPWWWVertex.cc
+++ b/Models/LHTP/LHTPWWWVertex.cc
@@ -1,116 +1,140 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the LHTPWWWVertex class.
//
#include "LHTPWWWVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
+#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "LHTPModel.h"
using namespace Herwig;
-LHTPWWWVertex::LHTPWWWVertex() : couplast_(0.), q2last_(0.*MeV2),
+LHTPWWWVertex::LHTPWWWVertex() : coupLast_(0.), q2Last_(ZERO),
couplings_(3 ,0.) {
orderInGem(1);
orderInGs(0);
- //SM interactions
- addToList(24, -24, 22);
- addToList(24, -24, 23);
-
- //LHTP
- //W_H W_H A_L
- addToList(34, -34, 22);
- //W_H W_H Z_L
- addToList(34, -34, 23);
- //W_H W_L A_H
- addToList(34, -24, 32);
-
- addToList(-34, 24, 32);
- //W_H W_L Z_H
- addToList(34, -24, 33);
- addToList(-34, 24, 33);
}
void LHTPWWWVertex::persistentOutput(PersistentOStream & os) const {
os << couplings_;
}
void LHTPWWWVertex::persistentInput(PersistentIStream & is, int) {
is >> couplings_;
}
-ClassDescription<LHTPWWWVertex> LHTPWWWVertex::initLHTPWWWVertex;
-// Definition of the static class description member.
+// Static variable needed for the type description system in ThePEG.
+DescribeClass<LHTPWWWVertex,VVVVertex>
+describeHerwigLHTPWWWVertex("Herwig::LHTPWWWVertex", "HwLHTPModel.so");
void LHTPWWWVertex::Init() {
static ClassDocumentation<LHTPWWWVertex> documentation
- ("There is no documentation for the LHTPWWWVertex class");
+ ("The LHTPWWWVertex class implements the coupling of three "
+ "electroweak gauge bosons and their heavy partners in the "
+ "Little Higgs model with T-parity.");
}
void LHTPWWWVertex::doinit() {
+ //SM interactions
+ addToList( 24, -24, 22);
+ addToList( 24, -24, 23);
+ //LHTP
+ //W_H W_H A_L
+ addToList( 34, -34, 22);
+ //W_H W_H Z_L
+ addToList( 34, -34, 23);
+ //W_H W_L A_H
+ addToList( 34, -24, 32);
+ addToList( 24, -34, 32);
+ //W_H W_L Z_H
+ addToList( 34, -24, 33);
+ addToList( 24, -34, 33);
VVVVertex::doinit();
cLHTPModelPtr model =
dynamic_ptr_cast<cLHTPModelPtr>(generator()->standardModel());
if( !model )
throw InitException()
<< "LHTPWWWVertex::doinit() - Model pointer must be of LHTPModel"
<< "type, cannot continue without this."
<< Exception::abortnow;
-
double sw(sqrt(model->sin2ThetaW()));
double cw(sqrt(1. - model->sin2ThetaW()));
-
//W W Z
couplings_[0] = cw/sw;
//W_L W_H A_H
- couplings_[1] = -model->sinThetaH()/sw;
+ couplings_[1] = model->sinThetaH()/sw;
//W_L W_H Z_H
couplings_[2] = 1./sw;
}
void LHTPWWWVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,tcPDPtr c) {
- if(q2 != q2last_) {
- couplast_ = electroMagneticCoupling(q2);
- q2last_ = q2;
+ if(q2 != q2Last_) {
+ coupLast_ = electroMagneticCoupling(q2);
+ q2Last_ = q2;
}
+ int ida=a->id();
+ int idb=b->id();
+ int idc=c->id();
+ // get the PDG code for the neutral boson
long boson(0);
- double perm(1.);
- //rearrange to keep order but with non W at [2]
- if( abs(a->id()) != 24 && abs(a->id()) != 34 ) {
- boson = a->id();
- if( c->id() < 0 ) perm = -1.;
+ if(!a->charged()) {
+ boson = ida;
+ ida = 22;
}
- else if( abs(b->id()) != 24 && abs(b->id()) != 34 ) {
- boson = b->id();
- if( c->id() < 0 ) perm = -1.;
+ else if(abs(ida) !=ParticleID::Wplus) {
+ ida = ida > 0 ? 24 : -24;
}
- else if( abs(c->id()) != 24 && abs(c->id()) != 34 ) {
- boson = c->id();
- if( b->id() < 0 ) perm = -1.;
+ if(!b->charged()) {
+ boson = idb;
+ idb = 22;
}
+ else if(abs(idb) !=ParticleID::Wplus) {
+ idb = idb > 0 ? 24 : -24;
+ }
+ if(!c->charged()) {
+ boson = idc;
+ idc = 22;
+ }
+ else if(abs(idc) !=ParticleID::Wplus) {
+ idc = idc > 0 ? 24 : -24;
+ }
+ assert( boson ==22 || boson==23 || boson==32 || boson==33);
+ // get the prefactor
+ double pre(0.);
+ switch (boson) {
+ case 22:
+ pre = 1.;
+ break;
+ case 23:
+ pre = couplings_[0];
+ break;
+ case 32:
+ pre = couplings_[1];
+ break;
+ case 33:
+ pre = couplings_[2];
+ break;
+ default:
+ assert(false);
+ };
+ // W- W+ photon and cylic perms
+ if((ida==-24 && idb== 24 && idc== 22) ||
+ (ida== 22 && idb==-24 && idc== 24) ||
+ (ida== 24 && idb== 22 && idc==-24) ) norm( coupLast_*pre);
+ // W+ W- photon (anticylic perms of above)
+ else if((ida== 24 && idb==-24 && idc== 22) ||
+ (ida== 22 && idb== 24 && idc==-24) ||
+ (ida==-24 && idb== 22 && idc== 24) ) norm(-coupLast_*pre);
else
throw Helicity::HelicityConsistencyError()
<< "LHTPWWWVertex::setCoupling - Incorrect particles in LHTPWWWVertex. "
<< a->id() << " " << b->id() << " " << c->id() << '\n'
<< Exception::runerror;
-
- if( boson == 22 )
- norm(perm*couplast_);
- else if( boson == 23 )
- norm(perm*couplings_[0]*couplast_);
- else if( boson == 32 )
- norm(perm*couplings_[1]*couplast_);
- else if( boson == 33 )
- norm(perm*couplings_[2]*couplast_);
- else
- throw Helicity::HelicityConsistencyError()
- << "LHTPWWWVertex::setCoupling - Incorrect boson in LHTPWWWVertex. "
- << a->id() << " " << b->id() << " " << c->id() << '\n'
- << Exception::runerror;
}
diff --git a/Models/LHTP/LHTPWWWVertex.h b/Models/LHTP/LHTPWWWVertex.h
--- a/Models/LHTP/LHTPWWWVertex.h
+++ b/Models/LHTP/LHTPWWWVertex.h
@@ -1,173 +1,123 @@
// -*- C++ -*-
#ifndef HERWIG_LHTPWWWVertex_H
#define HERWIG_LHTPWWWVertex_H
//
// This is the declaration of the LHTPWWWVertex class.
//
#include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
-#include "LHTPWWWVertex.fh"
namespace Herwig {
using namespace ThePEG;
using namespace ThePEG::Helicity;
using ThePEG::Helicity::Direction;
/**
* This is the coupling of vector bosons to each other in the
* Littlest Higgs model with T-parity. It inherits from the
* Standard Model WWW vertex to use its setCoupling member
* for the SM gauge boson self-couplings.
- *
- * @see \ref LHTPWWWVertexInterfaces "The interfaces"
- * defined for LHTPWWWVertex.
*/
class LHTPWWWVertex: public VVVVertex {
public:
- /** @name Standard constructors and destructors. */
- //@{
/**
* The default constructor.
*/
LHTPWWWVertex();
- //@}
-
-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();
/**
* Calculate the couplings.
* @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
* @param a The ParticleData pointer for the first particle.
* @param b The ParticleData pointer for the second particle.
* @param c The ParticleData pointer for the third particle.
* @param d1 The direction for the first particle.
* @param d2 The direction for the second particle.
* @param d3 The direction for the third particle.
*/
virtual void setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,tcPDPtr c);
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
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.
*/
virtual IBPtr fullclone() const { return new_ptr(*this); }
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving an
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
private:
/**
- * The static object used to initialize the description of this class.
- * Indicates that this is a concrete class with persistent data.
- */
- static ClassDescription<LHTPWWWVertex> initLHTPWWWVertex;
-
- /**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
LHTPWWWVertex & operator=(const LHTPWWWVertex &);
private:
/**
* The value of the coupling when it was last evaluated.
*/
- Complex couplast_;
+ Complex coupLast_;
/**
* The scale where the coulpling was last evaluated
*/
- Energy2 q2last_;
+ Energy2 q2Last_;
/**
* The couplings for the various possible interactions
*/
vector<double> couplings_;
};
}
-#include "ThePEG/Utilities/ClassTraits.h"
-
-namespace ThePEG {
-
-/** @cond TRAITSPECIALIZATIONS */
-
-/** This template specialization informs ThePEG about the
- * base classes of LHTPWWWVertex. */
-template <>
-struct BaseClassTrait<Herwig::LHTPWWWVertex,1> {
- /** Typedef of the first base class of LHTPWWWVertex. */
- typedef Helicity::VVVVertex NthBase;
-};
-
-/** This template specialization informs ThePEG about the name of
- * the LHTPWWWVertex class and the shared object where it is defined. */
-template <>
-struct ClassTraits<Herwig::LHTPWWWVertex>
- : public ClassTraitsBase<Herwig::LHTPWWWVertex> {
- /** Return a platform-independent class name */
- static string className() { return "Herwig::LHTPWWWVertex"; }
- /**
- * The name of a file containing the dynamic library where the class
- * LHTPWWWVertex is implemented. It may also include several, space-separated,
- * libraries if the class LHTPWWWVertex 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 "HwLHTPModel.so"; }
-};
-
-/** @endcond */
-
-}
-
#endif /* HERWIG_LHTPWWWVertex_H */
diff --git a/Models/LHTP/Makefile.am b/Models/LHTP/Makefile.am
--- a/Models/LHTP/Makefile.am
+++ b/Models/LHTP/Makefile.am
@@ -1,14 +1,17 @@
if WANT_LHTP
pkglib_LTLIBRARIES = HwLHTPModel.la
endif
HwLHTPModel_la_SOURCES = \
LHTPModel.fh LHTPModel.cc LHTPModel.h \
-LHTPWWHVertex.fh LHTPWWHVertex.cc LHTPWWHVertex.h \
-LHTPFFGVertex.fh LHTPFFGVertex.cc LHTPFFGVertex.h \
-LHTPFFPVertex.fh LHTPFFPVertex.cc LHTPFFPVertex.h \
-LHTPFFWVertex.fh LHTPFFWVertex.cc LHTPFFWVertex.h \
-LHTPFFZVertex.fh LHTPFFZVertex.cc LHTPFFZVertex.h \
-LHTPWWWVertex.fh LHTPWWWVertex.cc LHTPWWWVertex.h
+LHTPWWHVertex.cc LHTPWWHVertex.h \
+LHTPFFGVertex.cc LHTPFFGVertex.h \
+LHTPFFPVertex.cc LHTPFFPVertex.h \
+LHTPFFWVertex.cc LHTPFFWVertex.h \
+LHTPFFZVertex.cc LHTPFFZVertex.h \
+LHTPWWWVertex.cc LHTPWWWVertex.h \
+LHTPHHHVertex.cc LHTPHHHVertex.h \
+LHTPWHHVertex.cc LHTPWHHVertex.h \
+LHTPFFHVertex.cc LHTPFFHVertex.h
HwLHTPModel_la_LDFLAGS = -module -version-info 3:0:0
HwLHTPModel_la_LIBADD= $(GSLLIBS)
HwLHTPModel_la_CPPFLAGS= $(AM_CPPFLAGS) $(GSLINCLUDE)
diff --git a/Models/Sextet/SextetModel.cc b/Models/Sextet/SextetModel.cc
--- a/Models/Sextet/SextetModel.cc
+++ b/Models/Sextet/SextetModel.cc
@@ -1,249 +1,228 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the SextetModel class.
//
#include "SextetModel.h"
#include "ThePEG/Utilities/StringUtils.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Command.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Repository/UseRandom.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
IBPtr SextetModel::clone() const {
return new_ptr(*this);
}
IBPtr SextetModel::fullclone() const {
return new_ptr(*this);
}
void SextetModel::persistentOutput(PersistentOStream & os) const {
os << VVVVertex_ << VVVVVertex_ << VSSVertex_ << VVSSVertex_
<< FFVVertex_ << FFSVertex_
<< g1L_ << g1R_ << g1pR_ << g1ppR_ << g2_ << g2p_ << g3L_
<< enableScalarSingletY43_ << enableScalarSingletY13_
<< enableScalarSingletY23_ << enableScalarTripletY13_
<< enableVectorDoubletY16_ << enableVectorDoubletY56_;
}
void SextetModel::persistentInput(PersistentIStream & is, int) {
is >> VVVVertex_ >> VVVVVertex_ >> VSSVertex_ >> VVSSVertex_
>> FFVVertex_ >> FFSVertex_
>> g1L_ >> g1R_ >> g1pR_ >> g1ppR_ >> g2_ >> g2p_ >> g3L_
>> enableScalarSingletY43_ >> enableScalarSingletY13_
>> enableScalarSingletY23_ >> enableScalarTripletY13_
>> enableVectorDoubletY16_ >> enableVectorDoubletY56_;
}
// *** 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<SextetModel,StandardModel>
describeSextetModel("Herwig::SextetModel", "HwSextetModel.so");
void SextetModel::Init() {
static ClassDocumentation<SextetModel> documentation
("The SextetModel class provides the Model class for models with new scalars"
" or vectors in the sextet representation of SU(3)");
static Reference<SextetModel,ThePEG::Helicity::AbstractVVVVertex>
interfaceVertexVDQVDQG
("Vertex/VDQVDQG",
"The coupling of the gluon to two vector diquarks",
&SextetModel::VVVVertex_, false, false, true, false, false);
static Reference<SextetModel,ThePEG::Helicity::AbstractVVVVVertex>
interfaceVertexVDQVDQGG
("Vertex/VDQVDQGG",
"The coupling of two gluons to two vector diquarks",
&SextetModel::VVVVVertex_, false, false, true, false, false);
static Reference<SextetModel,ThePEG::Helicity::AbstractVSSVertex>
interfaceVertexSDQSDQG
("Vertex/SDQSDQG",
"The coupling of the gluon to two scalar diquarks",
&SextetModel::VSSVertex_, false, false, true, false, false);
static Reference<SextetModel,ThePEG::Helicity::AbstractVVSSVertex>
interfaceVertexSDQSDQGG
("Vertex/SDQSDQGG",
"The coupling of two gluons to two scalar diquarks",
&SextetModel::VVSSVertex_, false, false, true, false, false);
static Reference<SextetModel,ThePEG::Helicity::AbstractFFSVertex>
interfaceVertexFFSDQ
("Vertex/FFSDQ",
"The coupling of two quarks to the scalar diquark",
&SextetModel::FFSVertex_, false, false, true, false, false);
static Reference<SextetModel,ThePEG::Helicity::AbstractFFVVertex>
interfaceVertexFFVDQ
("Vertex/FFVDQ",
"The coupling of two quarks to the vector diquark",
&SextetModel::FFVVertex_, false, false, true, false, false);
static ParVector<SextetModel,double> interfaceg1L
("g1L",
"The \\f$SU(2)\\f$ quark-doublet coupling to \\f$\\Phi_{6,1,1/3}\\f$.",
&SextetModel::g1L_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<SextetModel,double> interfaceg1R
("g1R",
"The \\f$SU(2)\\f$ singlet coupling to \\f$\\Phi_{6,1,1/3}\\f$.",
&SextetModel::g1R_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<SextetModel,double> interfaceg1RPrime
("g1RPrime",
"The \\f$SU(2)\\f$ singlet coupling to \\f$\\Phi_{6,1,1/3}\\f$.",
&SextetModel::g1pR_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<SextetModel,double> interfaceg1RDoublePrime
("g1RDoublePrime",
"The \\f$SU(2)\\f$ singlet coupling to \\f$\\Phi_{6,1,1/3}\\f$.",
&SextetModel::g1ppR_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<SextetModel,double> interfaceg2
("g2",
"The coupling to \\f$V^\\mu_{6,2,-1/6}\\f$.",
&SextetModel::g2_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<SextetModel,double> interfaceg2Prime
("g2Prime",
"The coupling to \\f$V^\\mu_{6,2,5/6}\\f$.",
&SextetModel::g2p_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<SextetModel,double> interfaceg3L
("g3L",
"Coupling to \\f$\\Phi_{6,3,1/3}\\f$.",
&SextetModel::g3L_, 3, 0.0, 0, 0,
false, false, Interface::nolimits);
static Command<SextetModel> interfaceEnableParticles
("EnableParticles",
"Enable specfiic diquarks",
&SextetModel::doEnable, false);
}
void SextetModel::doinit() {
StandardModel::doinit();
addVertex(VVVVertex_);
addVertex(VVVVVertex_);
addVertex(VSSVertex_);
addVertex(VVSSVertex_);
addVertex(FFVVertex_);
addVertex(FFSVertex_);
}
string SextetModel::doEnable(string args) {
int spin=-1;
int weak=-1;
int Y[2]={-1000000,-1000000};
string orig=args;
while ( !args.empty() ) {
string arg = StringUtils::car(args);
args = StringUtils::cdr(args);
if ( arg == "Scalar" ) spin=1;
else if ( arg == "Vector" ) spin=3;
else if ( arg == "Singlet" ) weak=1;
else if ( arg == "Doublet" ) weak=2;
else if ( arg == "Triplet" ) weak=3;
else {
if(arg.find("Y=")==string::npos) continue;
arg = StringUtils::cdr(arg,"=");
vector<string> split = StringUtils::split(arg,"/");
if(split.size()!=2) continue;
istringstream is1(split[0]);
is1 >> Y[0];
istringstream is2(split[1]);
is2 >> Y[1];
}
}
// check we read a value for all three quantum numbers
if ( spin <0 || weak<0 || 0 || Y[0]== -1000000) {
return string("SextetModel:EnableParticles couldn't termine spin, weak") +
string(" isospin or hypercharge for ") + orig + ".";
}
// check the values of Y
if(!(Y[1]==3||Y[1]==6)) {
return string("SextetModel:EnableParticles invalid weak") +
string(" hypercharge for ") + orig + ".";
}
// the various allowed combinations
bool found = false;
if(spin == 1 ) {
found = true;
if ( weak == 1 && Y[0] == 4 && Y[1] == 3) {
enableScalarSingletY43_ = true;
}
else if( weak == 1 && Y[0] == 1 && Y[1] == 3) {
enableScalarSingletY13_ = true;
}
else if( weak == 1 && Y[0] == -2 && Y[1] == 3) {
enableScalarSingletY23_ = true;
}
else if( weak == 3 && Y[0] == 1 && Y[1] == 3) {
enableScalarTripletY13_ = true;
}
else
found = false;
}
else if(spin == 3 && weak == 2) {
found = true;
if ( Y[0] == -1 && Y[1] == 6) {
enableVectorDoubletY16_ = true;
}
else if( Y[0] == 5 && Y[1] == 6) {
enableVectorDoubletY56_ = true;
}
else
found = false;
}
if(!found)
return string("SextetModel:EnableParticles invalid combination") +
string(" of spin, weak isospin or hypercharge for ") + orig + ".";
else
return "";
}
-
-//
-// Scalar Singlet Y = 4/3
-// Scalar Singlet Y = -1/3
-// Scalar Singlet Y = -2/3
-// Scalar Triplet Y = 1/3
-// Vector Doublet Y = -1/6
-// Vector Doublet Y = 5/6
-
- /**
- * Pointer to the object handling the coupling of two quarks
- * to a vector sextet
- */
- AbstractFFVVertexPtr FFVVertex_;
-
- /**
- * Pointer to the object handling the coupling of two quarks
- * to a scalar sextet
- */
- AbstractFFSVertexPtr FFSVertex_;
-//@}
diff --git a/Models/StandardModel/StandardModel.cc b/Models/StandardModel/StandardModel.cc
--- a/Models/StandardModel/StandardModel.cc
+++ b/Models/StandardModel/StandardModel.cc
@@ -1,179 +1,189 @@
// -*- C++ -*-
//
// StandardModel.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 StandardModel class.
//
#include "StandardModel.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig++/Models/General/ModelGenerator.h"
+#include "ThePEG/Repository/BaseRepository.h"
using namespace Herwig;
StandardModel::StandardModel() {}
StandardModel::~StandardModel() {}
StandardModel::StandardModel(const StandardModel & x)
: StandardModelBase(x),
FFZVertex_ (x.FFZVertex_),
FFPVertex_ (x.FFPVertex_) , FFGVertex_ (x.FFGVertex_) ,
FFWVertex_ (x.FFWVertex_) , FFHVertex_ (x.FFHVertex_) ,
WWHVertex_ (x.WWHVertex_) ,
GGGVertex_ (x.GGGVertex_) ,
WWWVertex_ (x.WWWVertex_) , GGGGVertex_(x.GGGGVertex_),
WWWWVertex_(x.WWWWVertex_), HGGVertex_ (x.HGGVertex_) ,
HPPVertex_ (x.HPPVertex_) , HHHVertex_ (x.HHHVertex_) ,
WWHHVertex_ (x.WWHHVertex_) ,
vertexList_(x.vertexList_),
runningMass_(x.runningMass_),modelGenerator_(x.modelGenerator_)
{}
IBPtr StandardModel::clone() const {
return new_ptr(*this);
}
IBPtr StandardModel::fullclone() const {
return new_ptr(*this);
}
void StandardModel::doinit() {
if(runningMass_) {
runningMass_->init();
}
//add Standard Model vertices
addVertex(vertexFFZ());
addVertex(vertexFFP());
addVertex(vertexFFG());
addVertex(vertexFFW());
addVertex(vertexFFH());
addVertex(vertexWWH());
addVertex(GGGVertex_);
addVertex(WWWVertex_);
addVertex(GGGGVertex_);
addVertex(WWWWVertex_);
addVertex(vertexHGG());
addVertex(HPPVertex_);
if(HHHVertex_ ) addVertex(HHHVertex_);
if(WWHHVertex_) addVertex(WWHHVertex_);
StandardModelBase::doinit();
}
void StandardModel::persistentOutput(PersistentOStream & os) const {
os << FFZVertex_ <<FFPVertex_ << FFGVertex_ << FFWVertex_
<< FFHVertex_ << WWHVertex_ << GGGGVertex_ << WWWWVertex_
<< GGGVertex_ << WWWVertex_ << HGGVertex_ << HPPVertex_
<< HHHVertex_ << WWHHVertex_
<< runningMass_ << vertexList_ << modelGenerator_;
}
void StandardModel::persistentInput(PersistentIStream & is, int) {
is >> FFZVertex_ >> FFPVertex_ >> FFGVertex_ >> FFWVertex_
>> FFHVertex_ >> WWHVertex_ >> GGGGVertex_ >> WWWWVertex_
>> GGGVertex_ >> WWWVertex_ >> HGGVertex_ >> HPPVertex_
>> HHHVertex_ >> WWHHVertex_
>> runningMass_ >> vertexList_ >> modelGenerator_;
}
ClassDescription<StandardModel> StandardModel::initStandardModel;
// Definition of the static class description member.
void StandardModel::Init() {
static Reference<StandardModel,AbstractFFVVertex> interfaceVertexFFZ
("Vertex/FFZ",
"Reference to the Standard Model FFZ Vertex",
&StandardModel::FFZVertex_, false, false, true, false);
static Reference<StandardModel,AbstractFFVVertex> interfaceVertexFFP
("Vertex/FFP",
"Reference to the Standard Model FFP Vertex",
&StandardModel::FFPVertex_, false, false, true, false);
static Reference<StandardModel,AbstractFFVVertex> interfaceVertexFFG
("Vertex/FFG",
"Reference to the Standard Model FFG Vertex",
&StandardModel::FFGVertex_, false, false, true, false);
static Reference<StandardModel,AbstractFFVVertex> interfaceVertexFFW
("Vertex/FFW",
"Reference to the Standard Model FFW Vertex",
&StandardModel::FFWVertex_, false, false, true, false);
static Reference<StandardModel,AbstractFFSVertex> interfaceVertexFFH
("Vertex/FFH",
"Reference to the Standard Model FFH Vertex.",
&StandardModel::FFHVertex_, false, false, true, false);
static Reference<StandardModel,AbstractVVVVertex> interfaceVertexGGG
("Vertex/GGG",
"Reference to the Standard Model GGG Vertex",
&StandardModel::GGGVertex_, false, false, true, false, false);
static Reference<StandardModel,AbstractVVVVertex> interfaceVertexWWW
("Vertex/WWW",
"Reference to the Standard Model WWW Vertex",
&StandardModel::WWWVertex_, false, false, true, false, false);
static Reference<StandardModel,AbstractVVSVertex> interfaceVertexWWH
("Vertex/WWH",
"Reference to the Standard Model WWH Vertex",
&StandardModel::WWHVertex_, false, false, true, false);
static Reference<StandardModel,AbstractVVVVVertex> interfaceVertexWWWW
("Vertex/WWWW",
"Reference to the Standard Model WWWW Vertex",
&StandardModel::WWWWVertex_, false, false, true, false);
static Reference<StandardModel,AbstractVVVVVertex> interfaceVertexGGGG
("Vertex/GGGG",
"Reference to the Standard Model GGGG Vertex",
&StandardModel::GGGGVertex_, false, false, true, false);
static Reference<StandardModel,AbstractVVSVertex> interfaceVertexHGG
("Vertex/HGG",
"Reference to the StandardModel HGG Vertex",
&StandardModel::HGGVertex_, false, false, true, false);
static Reference<StandardModel,AbstractVVSVertex> interfaceVertexHPP
("Vertex/HPP",
"Reference to StandardModel HPPVertex",
&StandardModel::HPPVertex_, false, false, true, false);
static Reference<StandardModel,AbstractSSSVertex> interfaceVertexHHH
("Vertex/HHH",
"Reference to the Standard Model HHHVertex",
&StandardModel::HHHVertex_, false, false, true, true, false);
static Reference<StandardModel,AbstractVVSSVertex> interfaceVertexWWHH
("Vertex/WWHH",
"Reference to the Standard Model WWHHVertex",
&StandardModel::WWHHVertex_, false, false, true, true, false);
static Reference<StandardModel,RunningMassBase> interfaceRunningMass
("RunningMass",
"Reference to the running mass object",
&StandardModel::runningMass_, false, false, true, false);
static Reference<StandardModel,Herwig::ModelGenerator> interfaceModelGenerator
("ModelGenerator",
"Pointer to ModelGenerator class",
&StandardModel::modelGenerator_, false, false, true, true);
static ClassDocumentation<StandardModel> documentation
("The StandardModel class inherits from StandardModelBase"
"and supplies additional couplings and access to the StandardModel"
"vertices for helicity amplitude calculations" );
}
+
+void StandardModel::resetMass(long id, Energy mass,tPDPtr part) {
+ if(!part) part = getParticleData(id);
+ if(!part) return;
+ const InterfaceBase * ifb = BaseRepository::FindInterface(part, "NominalMass");
+ ostringstream os;
+ os << abs(mass/GeV);
+ ifb->exec(*part, "set", os.str());
+}
diff --git a/Models/StandardModel/StandardModel.h b/Models/StandardModel/StandardModel.h
--- a/Models/StandardModel/StandardModel.h
+++ b/Models/StandardModel/StandardModel.h
@@ -1,474 +1,480 @@
// -*- C++ -*-
//
// StandardModel.h 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.
//
#ifndef HERWIG_StandardModel_H
#define HERWIG_StandardModel_H
//
// This is the declaration of the StandardModel class.
#include "ThePEG/StandardModel/StandardModelBase.h"
#include "Herwig++/Models/StandardModel/RunningMassBase.h"
#include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
#include "ThePEG/Helicity/Vertex/AbstractSSSSVertex.h"
#include "Herwig++/Models/General/ModelGenerator.fh"
#include "StandardModel.fh"
namespace Herwig {
using namespace ThePEG;
using namespace ThePEG::Helicity;
/** \ingroup Models
*
* This is the Herwig++ StandardModel class which inherits from ThePEG
* Standard Model class and implements additional Standard Model couplings,
* access to vertices for helicity amplitude calculations etc.
*
* @see StandardModelBase
*/
class StandardModel: public StandardModelBase {
/**
* Some typedefs for the pointers.
*/
//@{
/**
* Pointer to the RunningMassBase object
*/
typedef Ptr<Herwig::RunningMassBase>::pointer runPtr;
/**
* Transient pointer to the RunningMassBase object
*/
typedef Ptr<Herwig::RunningMassBase>::transient_pointer trunPtr;
//@}
public:
/** @name Standard constructors and destructors. */
//@{
/**
* Default constructor
*/
StandardModel();
/**
* Copy-constructor.
*/
StandardModel(const StandardModel &);
/**
* Destructor
*/
virtual ~StandardModel();
//@}
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);
//@}
/**
* Standard Init function used to initialize the interfaces.
*/
static void Init();
public:
/**
* The left and right couplings of the Z^0 including sin and cos theta_W.
*/
//@{
/**
* The left-handed coupling of a neutrino
*/
double lnu() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()+anu());
}
/**
* The left-handed coupling of a charged lepton.
*/
double le() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()+ae());
}
/**
* The left-handed coupling of an up type quark.
*/
double lu() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()+au());
}
/**
* The left-handed coupling of a down type quark.
*/
double ld() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()+ad());
}
/**
* The right-handed coupling of a neutrino
*/
double rnu() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()-anu());
}
/**
* The right-handed coupling of a charged lepton.
*/
double re() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()-ae());
}
/**
* The right-handed coupling of an up type quark.
*/
double ru() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()-au());
}
/**
* The right-handed coupling of a down type quark.
*/
double rd() const {
return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()-ad());
}
//@}
/**
* Pointers to the objects handling the vertices.
*/
//@{
/**
* Pointer to the fermion-fermion-Z vertex
*/
virtual tAbstractFFVVertexPtr vertexFFZ() const {
return FFZVertex_;
}
/**
* Pointer to the fermion-fermion-photon vertex
*/
virtual tAbstractFFVVertexPtr vertexFFP() const {
return FFPVertex_;
}
/**
* Pointer to the fermion-fermion-gluon vertex
*/
virtual tAbstractFFVVertexPtr vertexFFG() const {
return FFGVertex_;
}
/**
* Pointer to the fermion-fermion-W vertex
*/
virtual tAbstractFFVVertexPtr vertexFFW() const {
return FFWVertex_;
}
/**
* Pointer to the fermion-fermion-Higgs vertex
*/
virtual tAbstractFFSVertexPtr vertexFFH() const {
return FFHVertex_;
}
/**
* Pointer to the triple gluon vertex
*/
virtual tAbstractVVVVertexPtr vertexGGG() const {
return GGGVertex_;
}
/**
* Pointer to the triple electroweak gauge boson vertex.
*/
virtual tAbstractVVVVertexPtr vertexWWW() const {
return WWWVertex_;
}
/**
* Pointer to the two electroweak gauge boson Higgs vertex.
*/
virtual tAbstractVVSVertexPtr vertexWWH() const {
return WWHVertex_;
}
/**
* Pointer to the quartic electroweak gauge boson vertex.
*/
virtual tAbstractVVVVVertexPtr vertexWWWW() const {
return WWWWVertex_;
}
/**
* Pointer to the quartic gluon vertex
*/
virtual tAbstractVVVVVertexPtr vertexGGGG() const {
return GGGGVertex_;
}
/**
* Pointer to the quartic gluon vertex
*/
virtual tAbstractVVSVertexPtr vertexHGG() const {
return HGGVertex_;
}
/**
* Pointer to the quartic gluon vertex
*/
virtual tAbstractVVSVertexPtr vertexHPP() const {
return HPPVertex_;
}
/**
* Pointer to the triple Higgs vertex
*/
virtual tAbstractSSSVertexPtr vertexHHH() const {
return HHHVertex_;
}
/**
* Pointer to the WWHH vertex
*/
virtual tAbstractVVSSVertexPtr vertexWWHH() const {
return WWHHVertex_;
}
/**
* Total number of vertices
*/
unsigned int numberOfVertices() const {
return vertexList_.size();
}
/**
* Access to a vertex from the list
*/
tVertexBasePtr vertex(unsigned int ix) const {
return vertexList_[ix];
}
//@}
/**
* Return the running mass for a given scale \f$q^2\f$ and particle type.
* @param scale The scale \f$q^2\f$.
* @param part The ParticleData object for the particle
*/
Energy mass(Energy2 scale,tcPDPtr part) const {
return runningMass_->value(scale,part);
}
/**
* Return a pointer to the object handling the running mass.
*/
trunPtr massPtr() const {
return runningMass_;
}
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:
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
//@}
protected:
/**
* Add a vertex to the list
*/
void addVertex(VertexBasePtr in) {
vertexList_.push_back(in);
}
+ /**
+ * Helper function to reset the mass of a ParticleData object
+ * in BSM models.
+ */
+ void resetMass(long id, Energy mass,tPDPtr particle=tPDPtr());
+
private:
/**
* Describe a concrete class with persistent data.
*/
static ClassDescription<StandardModel> initStandardModel;
/**
* Private and non-existent assignment operator.
*/
StandardModel & operator=(const StandardModel &);
private:
/**
* Pointers to the vertices for Standard Model helicity amplitude
* calculations.
*/
//@{
/**
* Pointer to the fermion-fermion-Z vertex
*/
AbstractFFVVertexPtr FFZVertex_;
/**
* Pointer to the fermion-fermion-photon vertex
*/
AbstractFFVVertexPtr FFPVertex_;
/**
* Pointer to the fermion-fermion-gluon vertex
*/
AbstractFFVVertexPtr FFGVertex_;
/**
* Pointer to the fermion-fermion-W vertex
*/
AbstractFFVVertexPtr FFWVertex_;
/**
* Pointer to the fermion-fermion-Higgs vertex
*/
AbstractFFSVertexPtr FFHVertex_;
/**
* Pointer to the two electroweak gauge boson Higgs vertex.
*/
AbstractVVSVertexPtr WWHVertex_;
/**
* Pointer to the triple gluon vertex
*/
AbstractVVVVertexPtr GGGVertex_;
/**
* Pointer to the triple electroweak gauge boson vertex.
*/
AbstractVVVVertexPtr WWWVertex_;
/**
* Pointer to the quartic gluon vertex
*/
AbstractVVVVVertexPtr GGGGVertex_;
/**
* Pointer to the quartic electroweak gauge boson vertex.
*/
AbstractVVVVVertexPtr WWWWVertex_;
/**
* Pointer to higgs-gluon-gluon vertex
*/
AbstractVVSVertexPtr HGGVertex_;
/**
* Pointer to higgs-gamma-gamma vertex
*/
AbstractVVSVertexPtr HPPVertex_;
/**
* Pointer to triple Higgs vertex
*/
AbstractSSSVertexPtr HHHVertex_;
/**
* Pointer to WWHH vertex
*/
AbstractVVSSVertexPtr WWHHVertex_;
/**
* Full list of vertices as a vector to allow searching
*/
vector<VertexBasePtr> vertexList_;
//@}
/**
* The running mass.
*/
runPtr runningMass_;
/**
* Pointer to ModelGenerator Class
*/
ModelGeneratorPtr modelGenerator_;
};
}
namespace ThePEG {
/** @cond TRAITSPECIALIZATIONS */
/**
* The following template specialization informs ThePEG about the
* base class of StandardModel.
*/
template <>
struct BaseClassTrait<Herwig::StandardModel,1> {
/** Typedef of the base class of StandardModel. */
typedef StandardModelBase NthBase;
};
/**
* The following template specialization informs ThePEG about the
* name of this class and the shared object where it is defined.
*/
template <>
struct ClassTraits<Herwig::StandardModel>
: public ClassTraitsBase<Herwig::StandardModel> {
/**
* Return the class name.
*/
static string className() { return "Herwig::StandardModel"; }
};
/** @endcond */
}
#endif /* HERWIG_StandardModel_H */
diff --git a/Models/Susy/SusyBase.cc b/Models/Susy/SusyBase.cc
--- a/Models/Susy/SusyBase.cc
+++ b/Models/Susy/SusyBase.cc
@@ -1,654 +1,651 @@
// -*- C++ -*-
//
// SusyBase.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 SusyBase class.
//
#include "SusyBase.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/Parameter.h"
#include "ThePEG/Repository/Repository.h"
#include "ThePEG/Utilities/StringUtils.h"
#include "ThePEG/Repository/CurrentGenerator.h"
#include "ThePEG/PDT/EnumParticles.h"
#include "ThePEG/PDT/MassGenerator.h"
#include "ThePEG/PDT/WidthGenerator.h"
#include "ThePEG/PDT/DecayMode.h"
using namespace Herwig;
SusyBase::SusyBase() : readFile_(false), MPlanck_(2.4e18*GeV),
gravitino_(false),
tanBeta_(0), mu_(ZERO),
M1_(ZERO), M2_(ZERO), M3_(ZERO),
mH12_(ZERO),mH22_(ZERO),
meL_(ZERO),mmuL_(ZERO),mtauL_(ZERO),
meR_(ZERO),mmuR_(ZERO),mtauR_(ZERO),
mq1L_(ZERO),mq2L_(ZERO),mq3L_(ZERO),
mdR_(ZERO),muR_(ZERO),msR_(ZERO),
mcR_(ZERO),mbR_(ZERO),mtR_(ZERO),
gluinoPhase_(1.)
{}
IBPtr SusyBase::clone() const {
return new_ptr(*this);
}
IBPtr SusyBase::fullclone() const {
return new_ptr(*this);
}
void SusyBase::doinit() {
addVertex(WSFSFVertex_);
addVertex(NFSFVertex_);
addVertex(GFSFVertex_);
addVertex(HSFSFVertex_);
addVertex(CFSFVertex_);
addVertex(GSFSFVertex_);
addVertex(GGSQSQVertex_);
addVertex(GSGSGVertex_);
addVertex(NNZVertex_);
if(NNPVertex_) addVertex(NNPVertex_);
if(GNGVertex_) addVertex(GNGVertex_);
addVertex(CCZVertex_);
addVertex(CNWVertex_);
addVertex(GOGOHVertex_);
addVertex(WHHVertex_);
addVertex(NCTVertex_);
if(gravitino_) {
if(GVNHVertex_) addVertex(GVNHVertex_);
if(GVNVVertex_) addVertex(GVNVVertex_);
if(GVFSVertex_) addVertex(GVFSVertex_);
}
BSMModel::doinit();
}
void SusyBase::persistentOutput(PersistentOStream & os) const {
os << readFile_ << gravitino_
<< NMix_ << UMix_ << VMix_ << WSFSFVertex_
<< NFSFVertex_ << GFSFVertex_ << HSFSFVertex_ << CFSFVertex_
<< GSFSFVertex_ << GGSQSQVertex_ << GSGSGVertex_
<< NNZVertex_ << NNPVertex_ << CCZVertex_ << CNWVertex_
<< GOGOHVertex_ << WHHVertex_ << GNGVertex_ << NCTVertex_
<< GVNHVertex_ << GVNVVertex_ << GVFSVertex_
<< tanBeta_ << ounit(mu_,GeV)
<< ounit(M1_,GeV) << ounit(M2_,GeV) << ounit(M3_,GeV)
<< ounit(mH12_,GeV2) << ounit(mH22_,GeV2)
<< ounit(meL_,GeV) << ounit(mmuL_,GeV) << ounit(mtauL_,GeV)
<< ounit(meR_,GeV) << ounit(mmuR_,GeV) << ounit(mtauR_,GeV)
<< ounit(mq1L_,GeV) << ounit(mq2L_,GeV) << ounit(mq3L_,GeV)
<< ounit(mdR_,GeV) << ounit(muR_,GeV) << ounit(msR_,GeV)
<< ounit(mcR_,GeV) << ounit(mbR_,GeV) << ounit(mtR_,GeV)
<< gluinoPhase_ << ounit(MPlanck_,GeV);
}
void SusyBase::persistentInput(PersistentIStream & is, int) {
is >> readFile_ >> gravitino_
>> NMix_ >> UMix_ >> VMix_ >> WSFSFVertex_
>> NFSFVertex_ >> GFSFVertex_ >> HSFSFVertex_ >> CFSFVertex_
>> GSFSFVertex_ >> GGSQSQVertex_ >> GSGSGVertex_
>> NNZVertex_ >> NNPVertex_ >> CCZVertex_ >> CNWVertex_
>> GOGOHVertex_ >> WHHVertex_ >> GNGVertex_ >> NCTVertex_
>> GVNHVertex_ >> GVNVVertex_ >> GVFSVertex_
>> tanBeta_ >> iunit(mu_,GeV)
>> iunit(M1_,GeV) >> iunit(M2_,GeV) >> iunit(M3_,GeV)
>> iunit(mH12_,GeV2) >> iunit(mH22_,GeV2)
>> iunit(meL_,GeV) >> iunit(mmuL_,GeV) >> iunit(mtauL_,GeV)
>> iunit(meR_,GeV) >> iunit(mmuR_,GeV) >> iunit(mtauR_,GeV)
>> iunit(mq1L_,GeV) >> iunit(mq2L_,GeV) >> iunit(mq3L_,GeV)
>> iunit(mdR_,GeV) >> iunit(muR_,GeV) >> iunit(msR_,GeV)
>> iunit(mcR_,GeV) >> iunit(mbR_,GeV) >> iunit(mtR_,GeV)
>> gluinoPhase_ >> iunit(MPlanck_,GeV);
}
ClassDescription<SusyBase> SusyBase::initSusyBase;
// Definition of the static class description member.
void SusyBase::Init() {
static ClassDocumentation<SusyBase> documentation
("This is the base class for any SUSY model.",
"SUSY spectrum files follow the Les Houches accord"
" \\cite{Skands:2003cj,Allanach:2008qq}.",
" %\\cite{Skands:2003cj}\n"
"\\bibitem{Skands:2003cj}\n"
" P.~Skands {\\it et al.},\n"
" ``SUSY Les Houches accord: Interfacing SUSY spectrum calculators, decay\n"
" %packages, and event generators,''\n"
" JHEP {\\bf 0407}, 036 (2004)\n"
" [arXiv:hep-ph/0311123].\n"
" %%CITATION = JHEPA,0407,036;%%\n"
"%\\cite{Allanach:2008qq}\n"
"\\bibitem{Allanach:2008qq}\n"
" B.~Allanach {\\it et al.},\n"
" %``SUSY Les Houches Accord 2,''\n"
" Comput.\\ Phys.\\ Commun.\\ {\\bf 180}, 8 (2009)\n"
" [arXiv:0801.0045 [hep-ph]].\n"
" %%CITATION = CPHCB,180,8;%%\n"
);
static Reference<SusyBase,Helicity::AbstractVSSVertex> interfaceVertexWSS
("Vertex/WSFSF",
"Reference to Susy W SF SF vertex",
&SusyBase::WSFSFVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexNFSF
("Vertex/NFSF",
"Reference to the neutralino-fermion-sfermion vertex",
&SusyBase::NFSFVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexGFSF
("Vertex/GFSF",
"Reference to the gluino-fermion-sfermion vertex",
&SusyBase::GFSFVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractSSSVertex> interfaceVertexHSFSF
("Vertex/HSFSF",
"Reference to the Higgs-fermion-sfermion vertex",
&SusyBase::HSFSFVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexCFSF
("Vertex/CFSF",
"Reference to the chargino-fermion-sfermion vertex",
&SusyBase::CFSFVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVSSVertex> interfaceVertexGSFSF
("Vertex/GSFSF",
"Reference to the gluon-sfermion-sfermion vertex",
&SusyBase::GSFSFVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVVSSVertex> interfaceVertexGGSS
("Vertex/GGSQSQ",
"Reference to the gluon-gluon-squark-squark vertex",
&SusyBase::GGSQSQVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexGSGSG
("Vertex/GSGSG",
"Reference to the gluon-gluino-gluino vertex",
&SusyBase::GSGSGVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexNNZ
("Vertex/NNZ",
"Reference to Z-~chi_i0-~chi_i0 vertex",
&SusyBase::NNZVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexNNP
("Vertex/NNP",
"Reference to photon-~chi_i0-~chi_i0 vertex",
&SusyBase::NNPVertex_, false, false, true, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexGNG
("Vertex/GNG",
"Reference to gluon-~chi_i0-gluino vertex",
&SusyBase::GNGVertex_, false, false, true, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexCCZ
("Vertex/CCZ",
"Reference to ~chi_i+-~chi_i-Z vertex",
&SusyBase::CCZVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFVVertex> interfaceVertexCNW
("Vertex/CNW",
"Reference to ~chi_i+-chi_i0-W vertex",
&SusyBase::CNWVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractFFSVertex> interfaceVertexGOGOH
("Vertex/GOGOH",
"Reference to the gaugino-gaugino-higgs vertex",
&SusyBase::GOGOHVertex_, false, false, true, false);
static Reference<SusyBase,Helicity::AbstractVSSVertex> interfaceVertexWHH
("Vertex/SSWHH",
"Reference to Susy WHHVertex",
&SusyBase::WHHVertex_, false, false, true, false);
static Reference<SusyBase,AbstractFFSVertex> interfaceVertexNCT
("Vertex/NCT",
"Vertex for the flavour violating coupling of the top squark "
"to the neutralino and charm quark.",
&SusyBase::NCTVertex_, false, false, true, false, false);
static Reference<SusyBase,AbstractRFSVertex> interfaceVertexGVNH
("Vertex/GVNH",
"Vertex for the interfaction of the gravitino-neutralino"
" and Higgs bosons",
&SusyBase::GVNHVertex_, false, false, true, true, false);
static Reference<SusyBase,AbstractRFVVertex> interfaceVertexGVNV
("Vertex/GVNV",
"Vertex for the interfaction of the gravitino-neutralino"
" and vector bosons",
&SusyBase::GVNVVertex_, false, false, true, true, false);
static Reference<SusyBase,AbstractRFSVertex> interfaceVertexGVFS
("Vertex/GVFS",
"Vertex for the interfaction of the gravitino-fermion"
" and sfermion",
&SusyBase::GVFSVertex_, false, false, true, true, false);
static Parameter<SusyBase,Energy> interfaceMPlanck
("MPlanck",
"The Planck mass for GMSB models",
&SusyBase::MPlanck_, GeV, 2.4e18*GeV, 1.e16*GeV, 1.e20*GeV,
false, false, Interface::limited);
}
void SusyBase::readSetup(istream & is) {
string filename = dynamic_ptr_cast<istringstream*>(&is)->str();
filename = StringUtils::stripws(filename);
if(readFile_)
throw SetupException()
<< "A second SLHA file " << filename << " has been opened."
<< "This is probably unintended and as it can cause crashes"
<< " and other unpredictable behaviour it is not allowed."
<< Exception::runerror;
CFileLineReader cfile;
cfile.open(filename);
if( !cfile ) throw SetupException()
<< "SusyBase::readSetup - An error occurred in opening the "
<< "spectrum file \"" << filename << "\". A SUSY model cannot be "
<< "run without this."
<< Exception::runerror;
useMe();
// read first line and check if this is a Les Houches event file
cfile.readline();
bool lesHouches = cfile.find("<LesHouchesEvents");
bool reading = !lesHouches;
if(lesHouches) cfile.readline();
//function pointer for putting all characters to lower case.
int (*pf)(int) = tolower;
do {
string line = cfile.getline();
// check for start of slha block in SLHA files
if(lesHouches && !reading) {
if(line.find("<slha")==0) reading = true;
if(!cfile.readline()) break;
continue;
}
// ignore comment lines
if(line[0] == '#') {
if(!cfile.readline()) break;
continue;
}
// make everything lower case
transform(line.begin(), line.end(), line.begin(), pf);
// start of a block
if(line.find("block") == 0) {
string name = StringUtils::car(StringUtils::cdr(line), " #");
name = StringUtils::stripws(name);
// mixing matrix
if((name.find("mix") != string::npos &&
name.find("hmix") != 0)) {
unsigned int row(0),col(0);
MixingVector vals = readMatrix(cfile,row,col);
mixings_[name] = make_pair(make_pair(row,col),vals);
}
else if(name.find("au") == 0 || name.find("ad") == 0 ||
name.find("ae") == 0 ) {
string test = StringUtils::car(line, "#");
while (test.find("=")!= string::npos) {
test = StringUtils::cdr(test, "=");
}
istringstream is(test);
double scale;
is >> scale;
unsigned int row(0),col(0);
MixingVector vals = readMatrix(cfile,row,col);
if(scale>1e10) continue;
mixings_[name] = make_pair(make_pair(row,col),vals);
}
else if( name.find("info") == string::npos) {
readBlock(cfile,name,line);
}
else {
if(!cfile.readline()) break;
}
continue;
}
else if( lesHouches && line.find("</slha") == 0 ) {
reading = false;
break;
}
if(!cfile.readline()) break;
}
while(true);
// extract the relevant parameters
extractParameters();
// create the mixing matrices we need
createMixingMatrices();
// set the masses, this has to be done after the
// mixing matrices have been created
resetRepositoryMasses();
// have now read the file
if(decayFile()=="") decayFile(filename);
readFile_=true;
}
void SusyBase::readBlock(CFileLineReader & cfile,string name,string linein) {
if(!cfile)
throw SetupException()
<< "SusyBase::readBlock() - The input stream is in a bad state"
<< Exception::runerror;
// storage or the parameters
string test = StringUtils::car(linein, "#");
ParamMap store;
bool set = true;
// special for the alpha block
if(name.find("alpha") == 0 ) {
double alpha;
cfile.readline();
string line = cfile.getline();
istringstream iss(line);
iss >> alpha;
store.insert(make_pair(1,alpha));
}
else {
// extract the scale from the block if present
if(test.find("=")!= string::npos) {
while(test.find("=")!=string::npos)
test= StringUtils::cdr(test,"=");
istringstream is(test);
double scale;
is >> scale;
// only store the lowest scale block
if(parameters_.find(name)!=parameters_.end()) {
set = scale < parameters_[name][-1];
}
else {
store.insert(make_pair(-1,scale));
}
}
while(cfile.readline()) {
string line = cfile.getline();
// skip comments
if(line[0] == '#') continue;
// reached the end
if( line[0] == 'B' || line[0] == 'b' ||
line[0] == 'D' || line[0] == 'd' ||
line[0] == '<' ) {
cfile.resetline();
break;
}
istringstream is(line);
long index;
double value;
is >> index >> value;
store.insert(make_pair(index, value));
}
}
if(set) parameters_[name]=store;
}
const MixingVector
SusyBase::readMatrix(CFileLineReader & cfile,
unsigned int & row, unsigned int & col) {
if(!cfile)
throw SetupException()
<< "SusyBase::readMatrix() - The input stream is in a bad state."
<< Exception::runerror;
unsigned int rowmax(0), colmax(0);
MixingVector values;
while(cfile.readline()) {
string line = cfile.getline();
// skip comments
if(line[0] == '#') continue;
// reached the end
if( line[0] == 'B' || line[0] == 'b' ||
line[0] == 'D' || line[0] == 'd' ||
line[0] == '<' ) {
cfile.resetline();
break;
}
istringstream is(line);
unsigned int index1, index2;
double real(0.), imag(0.);
is >> index1 >> index2 >> real >> imag;
values.push_back(MixingElement(index1,index2,Complex(real, imag)));
if(index1 > rowmax) rowmax = index1;
if(index2 > colmax) colmax = index2;
}
col=colmax;
row=rowmax;
return values;
}
void SusyBase::createMixingMatrix(MixingMatrixPtr & matrix,
string name, const MixingVector & values,
MatrixSize size) {
matrix = new_ptr(MixingMatrix(size.first,size.second));
for(unsigned int ix=0; ix < values.size(); ++ix)
(*matrix)(values[ix].row-1,values[ix].col-1) = values[ix].value;
if(name == "nmix") {
vector<long> ids(4);
ids[0] = 1000022; ids[1] = 1000023;
ids[2] = 1000025; ids[3] = 1000035;
matrix->setIds(ids);
}
else if(name == "nmnmix") {
vector<long> ids(5);
ids[0] = 1000022; ids[1] = 1000023;
ids[2] = 1000025; ids[3] = 1000035;
ids[4] = 1000045;
matrix->setIds(ids);
}
else if(name == "umix") {
vector<long> ids(2);
ids[0] = 1000024; ids[1] = 1000037;
matrix->setIds(ids);
}
else if(name == "vmix") {
vector<long> ids(2);
ids[0] = 1000024; ids[1] = 1000037;
matrix->setIds(ids);
}
else if(name == "stopmix") {
vector<long> ids(2);
ids[0] = 1000006; ids[1] = 2000006;
matrix->setIds(ids);
}
else if(name == "sbotmix") {
vector<long> ids(2);
ids[0] = 1000005; ids[1] = 2000005;
matrix->setIds(ids);
}
else if(name == "staumix") {
vector<long> ids(2);
ids[0] = 1000015; ids[1] = 2000015;
matrix->setIds(ids);
}
else if(name == "nmhmix") {
vector<long> ids(3);
ids[0] = 25; ids[1] = 35; ids[2] = 45;
matrix->setIds(ids);
}
else if(name == "nmamix") {
vector<long> ids(2);
ids[0] = 36; ids[1] = 46;
matrix->setIds(ids);
}
else
throw SetupException() << "Cannot find correct title for mixing matrix "
<< name << Exception::runerror;
}
void SusyBase::resetRepositoryMasses() {
map<string,ParamMap>::const_iterator fit=parameters_.find("mass");
if(fit==parameters_.end())
throw Exception() << "BLOCK MASS not found in input file"
<< " can't set masses of SUSY particles"
<< Exception::runerror;
ParamMap theMasses = fit->second;
for(ParamMap::iterator it = theMasses.begin(); it != theMasses.end();
++it) {
long id = it->first;
double mass = it->second;
//a negative mass requires an adjustment to the
//associated mixing matrix by a factor of i
if(mass < 0.0) adjustMixingMatrix(id);
PDPtr part = getParticleData(id);
if(!part) throw SetupException()
<< "SusyBase::resetRepositoryMasses() - Particle with PDG code " << id
<< " not found." << Exception::warning;
if(abs(id)<=5||abs(id)==23||abs(id)==24)
cerr << "SusyBase::resetRepositoryMasses() Resetting mass of "
<< part->PDGName() << " using SLHA "
<< "file,\nthis can affect parts of the Standard Model simulation and"
<< " is strongly discouraged.\n";
- //Find interface nominal mass interface
- const InterfaceBase * ifb = BaseRepository::FindInterface(part, "NominalMass");
- ostringstream os;
- os.precision(12);
- os << abs(it->second);
- ifb->exec(*part, "set", os.str());
+ // reset the masses
+ resetMass(it->first,it->second*GeV,part);
+
// switch on gravitino interactions?
gravitino_ |= id== ParticleID::SUSY_Gravitino;
}
theMasses.clear();
}
void SusyBase::adjustMixingMatrix(long id) {
//get correct mixing matrix
switch(id) {
case 1000021 :
gluinoPhase_ = Complex(0.,1.);
break;
case 1000022 :
case 1000023 :
case 1000025 :
case 1000035 :
case 1000045 :
if(NMix_)
NMix_->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The neutralino mixing matrix pointer "
<< "is null!" << Exception::runerror;
break;
case 1000024 :
case 1000037 :
if(UMix_)
UMix_->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The U-Type chargino mixing matrix pointer "
<< "is null!" << Exception::runerror;
if(VMix_)
VMix_->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The V-Type chargino mixing matrix pointer "
<< "is null!" << Exception::runerror;
break;
default :
throw SetupException()
<< "SusyBase::adjustMixingMatrix - Trying to adjust mixing matrix "
<< "phase for a particle that does not have a mixing matrix "
<< "associated with it. " << id << " must have a negative mass in "
<< "the spectrum file, this should only occur for particles that mix."
<< Exception::runerror;
}
}
void SusyBase::createMixingMatrices() {
map<string,pair<MatrixSize, MixingVector > >::const_iterator it;
for(it=mixings_.begin();it!=mixings_.end();++it) {
string name=it->first;
// create the gaugino mixing matrices
if(name == "nmix" || name == "nmnmix" ){
createMixingMatrix(NMix_,name,it->second.second,it->second.first);
}
else if (name == "umix" ) {
createMixingMatrix(UMix_,name,it->second.second,it->second.first);
}
else if (name == "vmix") {
createMixingMatrix(VMix_,name,it->second.second,it->second.first);
}
}
}
void SusyBase::extractParameters(bool checkmodel) {
map<string,ParamMap>::const_iterator pit;
ParamMap::const_iterator it;
// try and get tan beta from extpar first
pit=parameters_.find("extpar");
// extract tan beta
tanBeta_ = -1.;
if(pit!=parameters_.end()) {
it = pit->second.find(25);
if(it!=pit->second.end()) tanBeta_ = it->second;
}
// otherwise from minpar
if(tanBeta_<0.) {
pit=parameters_.find("minpar");
if(pit!=parameters_.end()) {
it = pit->second.find(3);
if(it!=pit->second.end()) tanBeta_ = it->second;
}
}
if(tanBeta_<0.)
throw Exception() << "Can't find tan beta in BLOCK MINPAR"
<< " or BLOCK EXTPAR " << Exception::runerror;
if(tanBeta_==0.)
throw Exception() << "Tan(beta) = 0 in SusyBase::extractParameters()"
<< Exception::runerror;
// extract parameters from hmix
pit=parameters_.find("hmix");
if(pit==parameters_.end()) {
cerr << "BLOCK HMIX not found setting mu to zero\n";
mu_=ZERO;
}
else {
it = pit->second.find(1);
if(it==pit->second.end()) {
cerr << "mu not found in BLOCK HMIX setting to zero\n";
}
else {
mu_=it->second*GeV;
}
}
pit = parameters_.find("msoft");
if( pit == parameters_.end() )
throw Exception() << "BLOCK MSOFT not found in "
<< "SusyBase::extractParameters()"
<< Exception::runerror;
M1_ = pit->second.find(1 )->second*GeV;
M2_ = pit->second.find(2 )->second*GeV;
M3_ = pit->second.find(3 )->second*GeV;
mH12_ = pit->second.find(21)->second*GeV2;
mH22_ = pit->second.find(22)->second*GeV2;
meL_ = pit->second.find(31)->second*GeV;
mmuL_ = pit->second.find(32)->second*GeV;
mtauL_ = pit->second.find(33)->second*GeV;
meR_ = pit->second.find(34)->second*GeV;
mmuR_ = pit->second.find(35)->second*GeV;
mtauR_ = pit->second.find(36)->second*GeV;
mq1L_ = pit->second.find(41)->second*GeV;
mq2L_ = pit->second.find(42)->second*GeV;
mq3L_ = pit->second.find(43)->second*GeV;
muR_ = pit->second.find(44)->second*GeV;
mcR_ = pit->second.find(45)->second*GeV;
mtR_ = pit->second.find(46)->second*GeV;
mdR_ = pit->second.find(47)->second*GeV;
msR_ = pit->second.find(48)->second*GeV;
mbR_ = pit->second.find(49)->second*GeV;
if(checkmodel) {
throw Exception() << "The SusyBase class should not be used as a "
<< "Model class, use one of the models which inherit"
<< " from it" << Exception::runerror;
}
}
diff --git a/Models/UED/UEDBase.cc b/Models/UED/UEDBase.cc
--- a/Models/UED/UEDBase.cc
+++ b/Models/UED/UEDBase.cc
@@ -1,429 +1,405 @@
// -*- C++ -*-
//
// UEDBase.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 UEDBase class.
//
#include "UEDBase.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Repository/Repository.h"
#include "ThePEG/Repository/CurrentGenerator.h"
using namespace Herwig;
UEDBase::UEDBase() : theRadCorr(true), theInvRadius(500.*GeV),
theLambdaR(20.), theMbarH(), theSinThetaOne(0.),
theVeV(246.*GeV) {}
void UEDBase::doinit() {
readDecays(false);
BSMModel::doinit();
//level-1 masses and mixing angle
calculateKKMasses(1);
writeSpectrum();
//add the level-1 vertices.
addVertex(theF1F1Z0Vertex);
addVertex(theF1F1G0Vertex);
addVertex(theF1F0G1Vertex);
addVertex(theG1G1G0Vertex);
addVertex(theG0G0G1G1Vertex);
addVertex(theF1F1P0Vertex);
addVertex(theF1F1W0Vertex);
addVertex(theF1F0W1Vertex);
addVertex(theF1F0H1Vertex);
addVertex(theP0H1H1Vertex);
addVertex(theZ0H1H1Vertex);
addVertex(theW0A1H1Vertex);
addVertex(theZ0A1h1Vertex);
addVertex(theW0W1W1Vertex);
readDecays(true);
if(decayFile()=="") return;
decayRead();
}
void UEDBase::persistentOutput(PersistentOStream & os) const {
os << theRadCorr << ounit(theInvRadius, GeV) << theLambdaR
<< theF1F1Z0Vertex << theF1F1G0Vertex << theF1F0G1Vertex
<< theG1G1G0Vertex << theG0G0G1G1Vertex << theF1F1P0Vertex
<< theF1F1W0Vertex << theF1F0W1Vertex << theF1F0H1Vertex
<< theP0H1H1Vertex << theZ0H1H1Vertex << theW0A1H1Vertex
<< theZ0A1h1Vertex << theW0W1W1Vertex << ounit(theVeV,GeV)
<< ounit(theMbarH, GeV) << theSinThetaOne;
}
void UEDBase::persistentInput(PersistentIStream & is, int) {
is >> theRadCorr >> iunit(theInvRadius, GeV) >> theLambdaR
>> theF1F1Z0Vertex >> theF1F1G0Vertex >> theF1F0G1Vertex
>> theG1G1G0Vertex >> theG0G0G1G1Vertex >> theF1F1P0Vertex
>> theF1F1W0Vertex >> theF1F0W1Vertex >> theF1F0H1Vertex
>> theP0H1H1Vertex >> theZ0H1H1Vertex >> theW0A1H1Vertex
>> theZ0A1h1Vertex >> theW0W1W1Vertex >> iunit(theVeV,GeV)
>> iunit(theMbarH, GeV) >> theSinThetaOne;
}
ClassDescription<UEDBase> UEDBase::initUEDBase;
// Definition of the static class description member.
void UEDBase::Init() {
static ClassDocumentation<UEDBase> documentation
("This class implements/stores the necessary information for the simulation"
" of a Universal Extra Dimensions model.",
"Universal extra dimensions model based on \\cite{Cheng:2002iz,Appelquist:2000nn}.",
"%\\cite{Cheng:2002iz}\n"
"\\bibitem{Cheng:2002iz}\n"
" H.~C.~Cheng, K.~T.~Matchev and M.~Schmaltz,\n"
" ``Radiative corrections to Kaluza-Klein masses,''\n"
" Phys.\\ Rev.\\ D {\\bf 66}, 036005 (2002)\n"
" [arXiv:hep-ph/0204342].\n"
" %%CITATION = PHRVA,D66,036005;%%\n"
"%\\cite{Appelquist:2000nn}\n"
"\\bibitem{Appelquist:2000nn}\n"
" T.~Appelquist, H.~C.~Cheng and B.~A.~Dobrescu,\n"
" ``Bounds on universal extra dimensions,''\n"
" Phys.\\ Rev.\\ D {\\bf 64}, 035002 (2001)\n"
" [arXiv:hep-ph/0012100].\n"
" %%CITATION = PHRVA,D64,035002;%%\n"
);
static Switch<UEDBase,bool> interfaceRadiativeCorrections
("RadiativeCorrections",
"Calculate the radiative corrections to the masses",
&UEDBase::theRadCorr, true, false, false);
static SwitchOption interfaceRadiativeCorrectionsYes
(interfaceRadiativeCorrections,
"Yes",
"Calculate the radiative corrections to the masses",
true);
static SwitchOption interfaceRadiativeCorrectionsNo
(interfaceRadiativeCorrections,
"No",
"Leave the masses of the KK particles as n/R",
false);
static Parameter<UEDBase,Energy> interfaceInverseRadius
("InverseRadius",
"The inverse radius of the compactified dimension ",
&UEDBase::theInvRadius, GeV, 500.*GeV, ZERO, ZERO,
true, false, Interface::nolimits);
static Parameter<UEDBase,double> interfaceLambdaR
("LambdaR",
"The product of the cut-off scale and the radius of compactification",
&UEDBase::theLambdaR, 20.0, 0.0, 0,
false, false, Interface::lowerlim);
static Parameter<UEDBase,Energy> interfaceBoundaryMass
("HiggsBoundaryMass",
"The boundary mass for the Higgs",
&UEDBase::theMbarH, GeV, ZERO, ZERO, ZERO,
false, false, Interface::lowerlim);
static Parameter<UEDBase,Energy> interfaceVeV
("HiggsVEV",
"The vacuum expectation value of the Higgs field",
&UEDBase::theVeV, GeV, 246.*GeV, ZERO, ZERO,
true, false, Interface::nolimits);
static Reference<UEDBase,Helicity::AbstractFFVVertex> interfaceF1F1Z
("Vertex/F1F1Z",
"The F1F1Z UED Vertex",
&UEDBase::theF1F1Z0Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractFFVVertex> interfaceF1F1G0
("Vertex/F1F1G0",
"The F1F1G UED Vertex",
&UEDBase::theF1F1G0Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractFFVVertex> interfaceF1F0G1
("Vertex/F1F0G1",
"The F1F0G0 UED Vertex",
&UEDBase::theF1F0G1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVVVVertex> interfaceG1G1G0
("Vertex/G1G1G0",
"The G1G1G0 UED Vertex",
&UEDBase::theG1G1G0Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVVVVVertex> interfaceG0G0G1G1
("Vertex/G0G0G1G1",
"The G0G0G1G1 UED Vertex",
&UEDBase::theG0G0G1G1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractFFVVertex> interfaceF1F1P
("Vertex/F1F1P",
"The F1F1P UED Vertex",
&UEDBase::theF1F1P0Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractFFVVertex> interfaceF1F1W
("Vertex/F1F1W",
"The F1F1W UED Vertex",
&UEDBase::theF1F1W0Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractFFVVertex> interfaceF1F0W1
("Vertex/F1F0W1",
"The F1F0W1 UED Vertex",
&UEDBase::theF1F0W1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractFFSVertex> interfaceF1F0H1
("Vertex/F1F0H1",
"The F1F0H1 UED Vertex",
&UEDBase::theF1F0H1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVSSVertex> interfaceP0H1H1
("Vertex/P0H1H1",
"The P0H1H1 UED Vertex",
&UEDBase::theP0H1H1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVSSVertex> interfaceZ0H1H1
("Vertex/Z0H1H1",
"The Z0H1H1 UED Vertex",
&UEDBase::theZ0H1H1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVSSVertex> interfaceW0A1H1
("Vertex/W0A1H1",
"The W0A1H1 UED Vertex",
&UEDBase::theW0A1H1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVSSVertex> interfaceZ0A1h1
("Vertex/Z0A1h1",
"The W0A1H1 UED Vertex",
&UEDBase::theZ0A1h1Vertex, false, false, true, false, false);
static Reference<UEDBase,Helicity::AbstractVVVVertex> interfaceW0W1W1
("Vertex/W0W1W1",
"The W0W1W1 UED Vertex",
&UEDBase::theW0W1W1Vertex, false, false, true, false, false);
}
void UEDBase::calculateKKMasses(const unsigned int n) {
useMe();
if(n == 0)
throw InitException() << "UEDBase::resetKKMasses - "
<< "Trying to reset masses with KK number == 0!"
<< Exception::warning;
if(theRadCorr) {
fermionMasses(n);
bosonMasses(n);
}
else {
cerr <<
"Warning: Radiative corrections to particle masses have been "
"turned off.\n The masses will be set to (n/R + m_sm)^1/2 and "
"the spectrum will be\n highly degenerate so that no decays "
"will occur.\n This is only meant to be used for debugging "
"purposes.\n";
//set masses to tree level for each kk mode
long level1 = 5000000 + n*100000;
long level2 = 6000000 + n*100000;
Energy2 ndmass2 = sqr(n*theInvRadius);
for ( int i = 1; i < 38; ++i ) {
if(i == 7 || i == 17) i += 4;
if(i == 26) i += 10;
Energy kkmass = sqrt( ndmass2 + sqr(getParticleData(i)->mass()) );
resetMass(level1 + i, kkmass);
if( i < 7 || i == 11 || i == 13 || i == 15 )
resetMass(level2 + i, kkmass);
}
}
}
void UEDBase::bosonMasses(const unsigned int n) {
// Common constants
const Energy2 invRad2 = theInvRadius*theInvRadius;
const double g_em2 = 4.*Constants::pi*alphaEM(invRad2);
const double g_s2 = 4.*Constants::pi*alphaS(invRad2);
const double g_W2 = g_em2/sin2ThetaW();
//Should probably use a function to calculate zeta.
const double zeta3 = 1.20206;
const Energy2 nmass2 = sqr(n*theInvRadius);
const double pi2 = sqr(Constants::pi);
const double norm = 1./16./pi2;
const double nnlogLR = n*n*log(theLambdaR);
long level = 5000000 + n*100000;
//gluon
Energy2 deltaGB = g_s2*invRad2*norm*(23.*nnlogLR - 3.*zeta3/2./pi2 );
resetMass(level + 21, sqrt(nmass2 + deltaGB));
//W+/-
Energy2 deltaGW = g_W2*invRad2*norm*( 15.*nnlogLR - 5.*zeta3/2./pi2 );
Energy2 mw2 = sqr(getParticleData(24)->mass());
resetMass(level + 24, sqrt(mw2 + nmass2 + deltaGW));
//Z and gamma are a mixture of Bn and W3n
deltaGB = -g_em2*invRad2*norm*( 39.*zeta3/2./pi2 + nnlogLR/3. );
Energy2 mz2 = sqr(getParticleData(23)->mass());
Energy2 fp = 0.5*(mz2 + deltaGB + deltaGW + 2.*nmass2);
Energy2 sp = 0.5*sqrt( sqr(deltaGB - deltaGW - 2.*mw2 + mz2)
- 4.*mw2*(mw2 - mz2) );
resetMass(level + 22, sqrt(fp - sp));
resetMass(level + 23, sqrt(fp + sp));
//mixing angle will now depend on both Z* and gamma* mass
//Derived expression:
//
// cos^2_theta_N = ( (n/R)^2 + delta_GW + mw^2 - m_gam*^2)/(m_z*^2 - m_gam*^2)
//
double cn2 = (nmass2 + deltaGW + mw2 - fp + sp)/2./sp;
double sn = sqrt(1. - cn2);
theMixingAngles.insert(make_pair(n, sn));
if( n == 1 ) theSinThetaOne = sn;
//scalars
Energy2 mh2 = sqr(getParticleData(25)->mass());
double lambda_H = mh2/theVeV/theVeV;
deltaGB = nnlogLR*norm*invRad2*(3.*g_W2 + (3.*g_em2/2.) - 2.*lambda_H)
+ sqr(theMbarH);
//H0
Energy2 new_m2 = nmass2 + deltaGB;
resetMass(level + 25, sqrt( mh2 + new_m2 ));
//A0
resetMass(level + 36, sqrt( mz2 + new_m2 ));
//H+
resetMass(level + 37, sqrt( mw2 + new_m2 ));
}
void UEDBase::fermionMasses(const unsigned int n) {
const Energy2 invRad2 = theInvRadius*theInvRadius;
const double g_em2 = 4.*Constants::pi*alphaEM(invRad2);
const double g_s2 = 4.*Constants::pi*alphaS(invRad2);
const double g_W2 = g_em2/sin2ThetaW();
const Energy nmass = n*theInvRadius;
const Energy norm =
nmass*log(theLambdaR)/16./Constants::pi/Constants::pi;
const Energy topMass = getParticleData(6)->mass();
const double ht = sqrt(2)*topMass/theVeV;
//doublets
Energy deltaL = norm*(6.*g_s2 + (27.*g_W2/8.) + (g_em2/8.));
Energy deltaQ = deltaL;
Energy2 shift = sqr(nmass + deltaL);
long level = 5000000 + n*100000;
for(long i = 1; i < 17; ++i) {
if(i == 6) {
i += 5;
deltaL = norm*( (27.*g_W2/8.) + (9.*g_em2/8.) );
shift = sqr(nmass + deltaL);
}
Energy2 new_m2 = sqr(getParticleData(i)->mass()) + shift;
resetMass(level + i, sqrt(new_m2));
}
//singlet shifts
const Energy deltaU = norm*(6.*g_s2 + 2.*g_em2);
const Energy deltaD = norm*(6.*g_s2 + 0.5*g_em2);
const Energy2 shiftU = sqr(nmass + deltaU);
const Energy2 shiftD = sqr(nmass + deltaD);
//Top quarks seperately as they have different corrections
const Energy2 mt2 = sqr(topMass);
const Energy delta_Q3 = -3.*ht*ht*norm/2.;
const Energy deltaTD = deltaQ + delta_Q3;
const Energy deltaTS = deltaU + 2.*delta_Q3;
Energy second_term =
0.5*sqrt( sqr(2.*nmass + deltaTS + deltaTD) + 4.*mt2 );
//doublet
resetMass(level + 6, abs(0.5*(deltaTD - deltaTS) - second_term) );
//singlet
level += 1000000;
resetMass(level + 6, 0.5*(deltaTD - deltaTS) + second_term);
// others
//lepton
Energy delta = 9.*norm*g_em2/2.;
shift = sqr(nmass + delta);
for(long i = 1; i < 17; ) {
if(i == 6) i += 5;
Energy2 smMass2(sqr(getParticleData(i)->mass()));
if(i < 6) {
Energy2 new_m2;
if( i % 2 == 0)
new_m2 = smMass2 + shiftU;
else
new_m2 = smMass2 + shiftD;
resetMass(level + i, sqrt(new_m2));
++i;
}
else {
resetMass(level + i, sqrt(smMass2 + shift));
i += 2;
}
}
}
-
void UEDBase::resetMass(long id, Energy mass) {
theMasses.push_back(make_pair(id, mass));
- tPDPtr particle = getParticleData(id);
- if(!particle) {
- throw InitException() << "UEDBase::resetMass - Trying to reset a mass for "
- << "a ParticleData object that does not exist. ID: "
- << id << Exception::warning;
- return;
- }
- //find the correct interface
- const InterfaceBase * ifc =
- Repository::FindInterface(particle, "NominalMass");
- if(!ifc)
- throw InitException() << "UEDBase::resetMass - There was an error while "
- << "retrieving the NominalMass interface for "
- << particle->fullName()
- << Exception::abortnow;
- //put value into a stream
- ostringstream oss;
- oss << ounit(mass, GeV);
- if(!oss)
- throw InitException() << "UEDBase::resetMass - There was an error while "
- << "reading the new mass into a stream for "
- << particle->fullName()
- << Exception::abortnow;
- ifc->exec(*particle, "set", oss.str());
+ StandardModel::resetMass(id,mass);
}
void UEDBase::writeSpectrum() {
sort(theMasses.begin(), theMasses.end(), lowerMass);
ostream & ofs = CurrentGenerator::current().misc();
ofs << "# MUED Model Particle Spectrum\n"
<< "# R^-1: " << theInvRadius/GeV << " GeV\n"
<< "# Lambda * R: " << theLambdaR << "\n"
<< "# Higgs Mass: " << getParticleData(25)->mass()/GeV << " GeV\n";
ofs << "#\n# ID\t\t\tMass(GeV)\n";
while (!theMasses.empty()) {
IDMassPair tmp = theMasses.back();
tcPDPtr data = getParticleData(tmp.first);
ofs << tmp.first << "\t\t\t" << tmp.second/GeV << "\t\t" << (data? data->PDGName() : "")
<< endl;
theMasses.pop_back();
}
ofs << "#\n";
}
double UEDBase::sinThetaN(const unsigned int n) const {
WAMap::const_iterator pos = theMixingAngles.find(n);
if(pos != theMixingAngles.end())
return pos->second;
else {
throw Exception() << "UEDBase::sinThetaN() - A mixing angle has "
<< "been requested for a level that does not "
<< "exist. Check that the radiative corrections "
<< "for the " << n << "th level have been "
<< "calculated." << Exception::warning;
return 0.0;
}
}
diff --git a/src/LH.model b/src/LH.model
--- a/src/LH.model
+++ b/src/LH.model
@@ -1,132 +1,121 @@
##################################################
# Common setup for Little Higgs models
#
#
# This file does not contain anything that
# users need to touch. User settings are in
# ???-LH.in
#
###################################################
#
# Create particle content
#
###################################################
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
create ThePEG::ParticleData A_H
-setup A_H 32 A_H 500.0 0. 0. 0.0 0 0 3 0
+setup A_H 32 A_H 500.0 0. 0. 0.0 0 0 3 1
create ThePEG::ParticleData Z_H
-setup Z_H 33 Z_H 900.0 0.0 0.0 0.0 0 0 3 0
+setup Z_H 33 Z_H 900.0 0.0 0.0 0.0 0 0 3 1
create ThePEG::ParticleData W_H+
-setup W_H+ 34 W_H+ 500.0 0. 0. 0.0 3 0 3 0
+setup W_H+ 34 W_H+ 500.0 0. 0. 0.0 3 0 3 1
create ThePEG::ParticleData W_H-
-setup W_H- -34 W_H- 500.0 0. 0. 0.0 -3 0 3 0
+setup W_H- -34 W_H- 500.0 0. 0. 0.0 -3 0 3 1
makeanti W_H+ W_H-
create ThePEG::ParticleData T
-setup T 8 T 1000.0 0.0 0.0 0.0 2 3 2 0
+setup T 8 T 1000.0 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData Tbar
-setup Tbar -8 Tbar 1000.0 0.0 0.0 0.0 -2 -3 2 0
+setup Tbar -8 Tbar 1000.0 0.0 0.0 0.0 -2 -3 2 1
makeanti T Tbar
create ThePEG::ParticleData Phi0
-setup Phi0 35 Phi0 1000.0 0. 0. 0.0 0 0 1 0
+setup Phi0 35 Phi0 1000.0 0. 0. 0.0 0 0 1 1
create ThePEG::ParticleData PhiP
-setup PhiP 36 PhiP 1000.0 0. 0. 0.0 0 0 1 0
+setup PhiP 36 PhiP 1000.0 0. 0. 0.0 0 0 1 1
create ThePEG::ParticleData Phi+
-setup Phi+ 37 Phi+ 1000.0 0. 0. 0.0 3 0 1 0
+setup Phi+ 37 Phi+ 1000.0 0. 0. 0.0 3 0 1 1
create ThePEG::ParticleData Phi-
-setup Phi- -37 Phi- 1000.0 0. 0. 0.0 -3 0 1 0
+setup Phi- -37 Phi- 1000.0 0. 0. 0.0 -3 0 1 1
makeanti Phi+ Phi-
create ThePEG::ParticleData Phi++
-setup Phi++ 38 Phi++ 1000.0 0. 0. 0.0 +6 0 1 0
+setup Phi++ 38 Phi++ 1000.0 0. 0. 0.0 +6 0 1 1
create ThePEG::ParticleData Phi--
-setup Phi-- -38 Phi-- 1000.0 0. 0. 0.0 -6 0 1 0
+setup Phi-- -38 Phi-- 1000.0 0. 0. 0.0 -6 0 1 1
makeanti Phi++ Phi--
###################################################
#
# Main directory and model object
#
###################################################
mkdir /Herwig/NewPhysics/LH
cd /Herwig/NewPhysics/LH
create Herwig::LHModel Model HwLHModel.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/LH
cd /Herwig/Vertices/LH
create Herwig::LHFFZVertex FFZVertex
create Herwig::LHFFPVertex FFPVertex
create Herwig::LHFFGVertex FFGVertex
create Herwig::LHFFWVertex FFWVertex
create Herwig::LHFFHVertex FFHVertex
create Herwig::LHWWWVertex WWWVertex
create Herwig::LHWWHVertex WWHVertex
create Herwig::LHWWWWVertex WWWWVertex
create Herwig::LHWHHVertex WHHVertex
create Herwig::LHWWHHVertex WWHHVertex
# LHWHHVertex.h LHWWHH
cd /Herwig/NewPhysics/LH
# SM vertices
set Model:Vertex/GGG /Herwig/Vertices/GGGVertex
set Model:Vertex/GGGG /Herwig/Vertices/GGGGVertex
set Model:Vertex/HGG /Herwig/Vertices/HGGVertex
set Model:Vertex/HPP /Herwig/Vertices/HPPVertex
set Model:Vertex/HHH /Herwig/Vertices/HHHVertex
# LH vertices
set Model:Vertex/FFZ /Herwig/Vertices/LH/FFZVertex
set Model:Vertex/FFP /Herwig/Vertices/LH/FFPVertex
set Model:Vertex/FFG /Herwig/Vertices/LH/FFGVertex
set Model:Vertex/FFW /Herwig/Vertices/LH/FFWVertex
set Model:Vertex/FFH /Herwig/Vertices/LH/FFHVertex
set Model:Vertex/WWW /Herwig/Vertices/LH/WWWVertex
set Model:Vertex/WWH /Herwig/Vertices/LH/WWHVertex
set Model:Vertex/WWWW /Herwig/Vertices/LH/WWWWVertex
set Model:Vertex/WHH /Herwig/Vertices/LH/WHHVertex
set Model:Vertex/WWHH /Herwig/Vertices/LH/WWHHVertex
cd /Herwig/NewPhysics
insert /Herwig/EventHandlers/LEPHandler:PreCascadeHandlers 0 DecayHandler
insert /Herwig/EventHandlers/LHCHandler:PreCascadeHandlers 0 DecayHandler
+# Set the particel to be decayed
+insert NewModel:DecayParticles 0 /Herwig/Particles/A_H
+insert NewModel:DecayParticles 0 /Herwig/Particles/Z_H
+insert NewModel:DecayParticles 0 /Herwig/Particles/W_H+
+insert NewModel:DecayParticles 0 /Herwig/Particles/T
+insert NewModel:DecayParticles 0 /Herwig/Particles/Phi0
+insert NewModel:DecayParticles 0 /Herwig/Particles/PhiP
+insert NewModel:DecayParticles 0 /Herwig/Particles/Phi+
+insert NewModel:DecayParticles 0 /Herwig/Particles/Phi++
+
# Set up the model framework
set LH/Model:ModelGenerator NewModel
cd /Herwig/Generators
# Choose Little Higgs over SM
set LEPGenerator:StandardModelParameters /Herwig/NewPhysics/LH/Model
set LHCGenerator:StandardModelParameters /Herwig/NewPhysics/LH/Model
diff --git a/src/LHC-LH.in b/src/LHC-LH.in
--- a/src/LHC-LH.in
+++ b/src/LHC-LH.in
@@ -1,61 +1,51 @@
##################################################
# Example generator for the MSSM
# 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 LH.model
cd /Herwig/NewPhysics
set LH/Model:f 1*TeV
set LH/Model:VEVRatio 0.01
##################################################
#
# This section contains the user defined settings
#
##################################################
# --- Hard Process ----
# The particle name can be found in the relevant model file
# by searching for its PDG code and noting the text
# '/Herwig/Particles/###' where the hashes denote the name
# Switch to decide whether to include EW diagrams in the
# hard process (On by default)
set HPConstructor:IncludeEW No
# Example hard process: Incoming proton, outgoing squarks
insert HPConstructor:Incoming 0 /Herwig/Particles/g
insert HPConstructor:Incoming 1 /Herwig/Particles/u
insert HPConstructor:Incoming 2 /Herwig/Particles/ubar
insert HPConstructor:Incoming 3 /Herwig/Particles/d
insert HPConstructor:Incoming 4 /Herwig/Particles/dbar
insert HPConstructor:Outgoing 0 /Herwig/Particles/T
-# --- Perturbative Decays ---
-
-# Particles that are specified in the 'DecayParticles'
-# interface will have spin correlations included
-# when they are decayed. If a decay table in SLHA
-# format is not available then set the above
-# 'CreateDecayModes' interface to 'Yes' and the
-# particles list here will have decay modes
-# created also.
-insert NewModel:DecayParticles 0 /Herwig/Particles/T
# Intrinsic pT tune extrapolated to LHC energy
set /Herwig/Shower/Evolver:IntrinsicPtGaussian 2.2*GeV
# Other parameters for 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
saverun LHC-LH LHCGenerator
diff --git a/src/LHC-LHTP.in b/src/LHC-LHTP.in
--- a/src/LHC-LHTP.in
+++ b/src/LHC-LHTP.in
@@ -1,59 +1,51 @@
##################################################
# Example generator for the MSSM
# 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 LHTP.model
cd /Herwig/NewPhysics
+#set /Herwig/NewPhysics/LHTP/Model:SinAlpha 0.1
+
##################################################
#
# This section contains the user defined settings
#
##################################################
# --- Hard Process ----
# The particle name can be found in the relevant model file
# by searching for its PDG code and noting the text
# '/Herwig/Particles/###' where the hashes denote the name
# Switch to decide whether to include EW diagrams in the
# hard process (On by default)
set HPConstructor:IncludeEW No
# Example hard process: Incoming proton, outgoing squarks
insert HPConstructor:Incoming 0 /Herwig/Particles/g
insert HPConstructor:Incoming 1 /Herwig/Particles/u
insert HPConstructor:Incoming 2 /Herwig/Particles/ubar
insert HPConstructor:Incoming 3 /Herwig/Particles/d
insert HPConstructor:Incoming 4 /Herwig/Particles/dbar
insert HPConstructor:Outgoing 0 /Herwig/Particles/TpT
-# --- Perturbative Decays ---
-
-# Particles that are specified in the 'DecayParticles'
-# interface will have spin correlations included
-# when they are decayed. If a decay table in SLHA
-# format is not available then set the above
-# 'CreateDecayModes' interface to 'Yes' and the
-# particles list here will have decay modes
-# created also.
-insert NewModel:DecayParticles 0 /Herwig/Particles/TpT
# Intrinsic pT tune extrapolated to LHC energy
set /Herwig/Shower/Evolver:IntrinsicPtGaussian 2.2*GeV
# Other parameters for run
cd /Herwig/Generators
set LHCGenerator:NumberOfEvents 10000000
set LHCGenerator:RandomNumberGenerator:Seed 31122001
-set LHCGenerator:DebugLevel 1
+set LHCGenerator:DebugLevel 0
set LHCGenerator:PrintEvent 10
set LHCGenerator:MaxErrors 10000
saverun LHC-LHTP LHCGenerator
diff --git a/src/LHTP.model b/src/LHTP.model
--- a/src/LHTP.model
+++ b/src/LHTP.model
@@ -1,183 +1,209 @@
##################################################
# Common setup for Little Higgs models with T-parity
#
#
# This file does not contain anything that
# users need to touch. User settings are in
# ???-LHTP.in
#
###################################################
#
# Create particle content
#
###################################################
cd /Herwig/Particles
#
# using PDG number for excited gauge bosons A_H=Z' Z_H=Z'' W_H=W'
#
create ThePEG::ParticleData A_H
-setup A_H 32 A_H 1000. 0.0 0.0 0.0 0 0 3 0
+setup A_H 32 A_H 1000. 0.0 0.0 0.0 0 0 3 1
create ThePEG::ParticleData Z_H
-setup Z_H 33 Z_H 1000. 0.0 0.0 0.0 0 0 3 0
+setup Z_H 33 Z_H 1000. 0.0 0.0 0.0 0 0 3 1
create ThePEG::ParticleData W_H+
-setup W_H+ 34 W_H+ 1000.0 0.0 0.0 0.0 3 0 3 0
+setup W_H+ 34 W_H+ 1000.0 0.0 0.0 0.0 3 0 3 1
create ThePEG::ParticleData W_H-
-setup W_H- -34 W_H- 1000.0 0.0 0.0 0.0 -3 0 3 0
+setup W_H- -34 W_H- 1000.0 0.0 0.0 0.0 -3 0 3 1
makeanti W_H+ W_H-
#
# extra top quark using 4th generation number
#
create ThePEG::ParticleData TpT
-setup TpT 8 TpT 1000.0 0.0 0.0 0.0 2 3 2 0
+setup TpT 8 TpT 1000.0 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData TpTbar
-setup TpTbar -8 TpTbar 1000.0 0.0 0.0 0.0 -2 -3 2 0
+setup TpTbar -8 TpTbar 1000.0 0.0 0.0 0.0 -2 -3 2 1
makeanti TpT TpTbar
#
# triplet Higgs bosons (Phi0,PhiP,Phi+/- using numbers
# for doublet + Phi++/-- 38)
create ThePEG::ParticleData Phi0
-setup Phi0 35 Phi0 1000.0 0. 0. 0.0 0 0 1 0
+setup Phi0 35 Phi0 1000.0 0. 0. 0.0 0 0 1 1
create ThePEG::ParticleData PhiP
-setup PhiP 36 PhiP 1000.0 0. 0. 0.0 0 0 1 0
+setup PhiP 36 PhiP 1000.0 0. 0. 0.0 0 0 1 1
create ThePEG::ParticleData Phi+
-setup Phi+ 37 Phi+ 1000.0 0. 0. 0.0 3 0 1 0
+setup Phi+ 37 Phi+ 1000.0 0. 0. 0.0 3 0 1 1
create ThePEG::ParticleData Phi-
-setup Phi- -37 Phi- 1000.0 0. 0. 0.0 -3 0 1 0
+setup Phi- -37 Phi- 1000.0 0. 0. 0.0 -3 0 1 1
makeanti Phi+ Phi-
create ThePEG::ParticleData Phi++
-setup Phi++ 38 Phi++ 1000.0 0. 0. 0.0 +6 0 1 0
+setup Phi++ 38 Phi++ 1000.0 0. 0. 0.0 +6 0 1 1
create ThePEG::ParticleData Phi--
-setup Phi-- -38 Phi-- 1000.0 0. 0. 0.0 -6 0 1 0
+setup Phi-- -38 Phi-- 1000.0 0. 0. 0.0 -6 0 1 1
makeanti Phi++ Phi--
#
# T-odd particles using numbers for excited particles
#
create ThePEG::ParticleData dmT
-setup dmT 4000001 dmT 1000.0 0.0 0.0 0.0 -1 3 2 0
+setup dmT 4000001 dmT 1000.0 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData dmTbar
-setup dmTbar -4000001 dmTbar 1000.0 0.0 0.0 0.0 1 -3 2 0
+setup dmTbar -4000001 dmTbar 1000.0 0.0 0.0 0.0 1 -3 2 1
makeanti dmT dmTbar
create ThePEG::ParticleData umT
-setup umT 4000002 umT 1000.0 0.0 0.0 0.0 2 3 2 0
+setup umT 4000002 umT 1000.0 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData umTbar
-setup umTbar -4000002 umTbar 1000.0 0.0 0.0 0.0 -2 -3 2 0
+setup umTbar -4000002 umTbar 1000.0 0.0 0.0 0.0 -2 -3 2 1
makeanti umT umTbar
create ThePEG::ParticleData smT
-setup smT 4000003 smT 1000.0 0.0 0.0 0.0 -1 3 2 0
+setup smT 4000003 smT 1000.0 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData smTbar
-setup smTbar -4000003 smTbar 1000.0 0.0 0.0 0.0 1 -3 2 0
+setup smTbar -4000003 smTbar 1000.0 0.0 0.0 0.0 1 -3 2 1
makeanti smT smTbar
create ThePEG::ParticleData cmT
-setup cmT 4000004 cmT 1000.0 0.0 0.0 0.0 2 3 2 0
+setup cmT 4000004 cmT 1000.0 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData cmTbar
-setup cmTbar -4000004 cmTbar 1000.0 0.0 0.0 0.0 -2 -3 2 0
+setup cmTbar -4000004 cmTbar 1000.0 0.0 0.0 0.0 -2 -3 2 1
makeanti cmT cmTbar
create ThePEG::ParticleData bmT
-setup bmT 4000005 bmT 1000.0 0.0 0.0 0.0 -1 3 2 0
+setup bmT 4000005 bmT 1000.0 0.0 0.0 0.0 -1 3 2 1
create ThePEG::ParticleData bmTbar
-setup bmTbar -4000005 bmTbar 1000.0 0.0 0.0 0.0 1 -3 2 0
+setup bmTbar -4000005 bmTbar 1000.0 0.0 0.0 0.0 1 -3 2 1
makeanti bmT bmTbar
create ThePEG::ParticleData tmT
-setup tmT 4000006 tmT 1000.0 0.0 0.0 0.0 2 3 2 0
+setup tmT 4000006 tmT 1000.0 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData tmTbar
-setup tmTbar -4000006 tmTbar 1000.0 0.0 0.0 0.0 -2 -3 2 0
+setup tmTbar -4000006 tmTbar 1000.0 0.0 0.0 0.0 -2 -3 2 1
makeanti tmT tmTbar
create ThePEG::ParticleData TmT
-setup TmT 4000008 TmT 1000.0 0.0 0.0 0.0 2 3 2 0
+setup TmT 4000008 TmT 1000.0 0.0 0.0 0.0 2 3 2 1
create ThePEG::ParticleData TmTbar
-setup TmTbar -4000008 TmTbar 1000.0 0.0 0.0 0.0 -2 -3 2 0
+setup TmTbar -4000008 TmTbar 1000.0 0.0 0.0 0.0 -2 -3 2 1
makeanti TmT TmTbar
create ThePEG::ParticleData emT-
-setup emT- 4000011 emT- 1000. 0.0 0.0 0.0 -3 0 2 0
+setup emT- 4000011 emT- 1000. 0.0 0.0 0.0 -3 0 2 1
create ThePEG::ParticleData emT+
-setup emT+ -4000011 emT+ 1000. 0.0 0.0 0.0 3 0 2 0
+setup emT+ -4000011 emT+ 1000. 0.0 0.0 0.0 3 0 2 1
makeanti emT- emT+
-create ThePEG::ParticleData muemT-
-setup muemT- 4000013 muemT- 1000. 0.0 0.0 0.0 -3 0 2 0
-create ThePEG::ParticleData muemT+
-setup muemT+ -4000013 muemT+ 1000. 0. 0.0 0.0 3 0 2 0
-makeanti muemT+ muemT-
+create ThePEG::ParticleData mumT-
+setup mumT- 4000013 mumT- 1000. 0.0 0.0 0.0 -3 0 2 1
+create ThePEG::ParticleData mumT+
+setup mumT+ -4000013 mumT+ 1000. 0. 0.0 0.0 3 0 2 1
+makeanti mumT+ mumT-
create ThePEG::ParticleData taumT+
-setup taumT+ -4000015 taumT+ 1000. 0.0 0.0 0.0 3 0 2 0
+setup taumT+ -4000015 taumT+ 1000. 0.0 0.0 0.0 3 0 2 1
create ThePEG::ParticleData taumT-
-setup taumT- 4000015 taumT- 1000. 0.0 0.0 0.0 -3 0 2 0
+setup taumT- 4000015 taumT- 1000. 0.0 0.0 0.0 -3 0 2 1
makeanti taumT- taumT+
create ThePEG::ParticleData nu_emT
-setup nu_emT 4000012 nu_emT 1000. 0.0 0.0 0.0 0 0 2 0
+setup nu_emT 4000012 nu_emT 1000. 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData nu_emTbar
-setup nu_emTbar -4000012 nu_emTbar 1000 0.0 0.0 0.0 0 0 2 0
+setup nu_emTbar -4000012 nu_emTbar 1000 0.0 0.0 0.0 0 0 2 1
makeanti nu_emTbar nu_emT
create ThePEG::ParticleData nu_mumT
-setup nu_mumT 4000014 nu_mumT 1000. 0.0 0.0 0.0 0 0 2 0
+setup nu_mumT 4000014 nu_mumT 1000. 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData nu_mumTbar
-setup nu_mumTbar -4000014 nu_mumTbar 0.0 0.0 0.0 0 0 0 2 0
+setup nu_mumTbar -4000014 nu_mumTbar 0.0 0.0 0.0 0 0 0 2 1
makeanti nu_mumTbar nu_mumT
create ThePEG::ParticleData nu_taumT
-setup nu_taumT 4000016 nu_taumT 1000. 0.0 0.0 0.0 0 0 2 0
+setup nu_taumT 4000016 nu_taumT 1000. 0.0 0.0 0.0 0 0 2 1
create ThePEG::ParticleData nu_taumTbar
-setup nu_taumTbar -4000016 nu_taumTbar 1000. 0.0 0.0 0.0 0 0 2 0
+setup nu_taumTbar -4000016 nu_taumTbar 1000. 0.0 0.0 0.0 0 0 2 1
makeanti nu_taumTbar nu_taumT
###################################################
#
# Main directory and model object
#
###################################################
mkdir /Herwig/NewPhysics/LHTP
cd /Herwig/NewPhysics/LHTP
create Herwig::LHTPModel Model HwLHTPModel.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/LHTP
cd /Herwig/Vertices/LHTP
create Herwig::LHTPFFGVertex FFGVertex
create Herwig::LHTPFFPVertex FFPVertex
create Herwig::LHTPFFWVertex FFWVertex
create Herwig::LHTPFFZVertex FFZVertex
create Herwig::LHTPWWHVertex WWHVertex
create Herwig::LHTPWWWVertex WWWVertex
+create Herwig::LHTPHHHVertex HHHVertex
+create Herwig::LHTPHHHVertex WHHVertex
cd /Herwig/NewPhysics/LHTP
set Model:Vertex/FFG /Herwig/Vertices/LHTP/FFGVertex
set Model:Vertex/FFZ /Herwig/Vertices/LHTP/FFZVertex
set Model:Vertex/FFW /Herwig/Vertices/LHTP/FFWVertex
set Model:Vertex/FFP /Herwig/Vertices/LHTP/FFPVertex
set Model:Vertex/WWH /Herwig/Vertices/LHTP/WWHVertex
set Model:Vertex/WWW /Herwig/Vertices/LHTP/WWWVertex
+set Model:Vertex/HHH /Herwig/Vertices/LHTP/HHHVertex
+set Model:Vertex/HHH /Herwig/Vertices/LHTP/WHHVertex
# Not implemented LHTP yet
set Model:Vertex/FFH /Herwig/Vertices/FFHVertex
set Model:Vertex/WWWW /Herwig/Vertices/WWWWVertex
set Model:Vertex/HGG /Herwig/Vertices/HGGVertex
set Model:Vertex/HPP /Herwig/Vertices/HPPVertex
## Also vertices that have no SM equivalent
# - WHH
-# - HHH
# No LHTP equivalent
set Model:Vertex/GGG /Herwig/Vertices/GGGVertex
set Model:Vertex/GGGG /Herwig/Vertices/GGGGVertex
cd /Herwig/NewPhysics
insert /Herwig/EventHandlers/LEPHandler:PreCascadeHandlers 0 DecayHandler
insert /Herwig/EventHandlers/LHCHandler:PreCascadeHandlers 0 DecayHandler
# Set up the model framework
set LHTP/Model:ModelGenerator NewModel
+# --- Perturbative Decays ---
+insert NewModel:DecayParticles 0 /Herwig/Particles/A_H
+insert NewModel:DecayParticles 0 /Herwig/Particles/Z_H
+insert NewModel:DecayParticles 0 /Herwig/Particles/W_H+
+insert NewModel:DecayParticles 0 /Herwig/Particles/TpT
+insert NewModel:DecayParticles 0 /Herwig/Particles/Phi0
+insert NewModel:DecayParticles 0 /Herwig/Particles/PhiP
+insert NewModel:DecayParticles 0 /Herwig/Particles/Phi+
+insert NewModel:DecayParticles 0 /Herwig/Particles/Phi++
+insert NewModel:DecayParticles 0 /Herwig/Particles/dmT
+insert NewModel:DecayParticles 0 /Herwig/Particles/umT
+insert NewModel:DecayParticles 0 /Herwig/Particles/smT
+insert NewModel:DecayParticles 0 /Herwig/Particles/cmT
+insert NewModel:DecayParticles 0 /Herwig/Particles/bmT
+insert NewModel:DecayParticles 0 /Herwig/Particles/tmT
+insert NewModel:DecayParticles 0 /Herwig/Particles/TmT
+insert NewModel:DecayParticles 0 /Herwig/Particles/emT-
+insert NewModel:DecayParticles 0 /Herwig/Particles/mumT-
+insert NewModel:DecayParticles 0 /Herwig/Particles/taumT-
+insert NewModel:DecayParticles 0 /Herwig/Particles/nu_emT
+insert NewModel:DecayParticles 0 /Herwig/Particles/nu_mumT
+insert NewModel:DecayParticles 0 /Herwig/Particles/nu_taumT
+
cd /Herwig/Generators
# Choose Little Higgs over SM
set LEPGenerator:StandardModelParameters /Herwig/NewPhysics/LHTP/Model
-set LHCGenerator:StandardModelParameters /Herwig/NewPhysics/LHTP/Model
+set LHCGenerator:StandardModelParameters /Herwig/NewPhysics/LHTP/Model
\ No newline at end of file

File Metadata

Mime Type
text/x-diff
Expires
Mon, Jan 20, 10:24 PM (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4242631
Default Alt Text
(376 KB)

Event Timeline