Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F19250761
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
133 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/Models/RSModel/RSModelVVVGRVertex.cc b/Models/RSModel/RSModelVVVGRVertex.cc
--- a/Models/RSModel/RSModelVVVGRVertex.cc
+++ b/Models/RSModel/RSModelVVVGRVertex.cc
@@ -1,115 +1,115 @@
// -*- C++ -*-
//
// RSModelVVVGRVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 RSModelVVVGRVertex class.
//
#include "RSModelVVVGRVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
using namespace ThePEG;
RSModelVVVGRVertex::RSModelVVVGRVertex() : _couplast(2,0.), _q2last(2,0.*GeV2) {
vector<long> first,second,third,fourth;
first.push_back(24);
second.push_back(-24);
third.push_back(22);
fourth.push_back(39);
first.push_back(24);
second.push_back(-24);
third.push_back(23);
fourth.push_back(39);
first.push_back(21);
second.push_back(21);
third.push_back(21);
fourth.push_back(39);
setList(first,second,third,fourth);
_theKappa=InvEnergy();
_zfact=0.;
}
void RSModelVVVGRVertex::doinit() {
VVVTVertex::doinit();
- _zfact = sqrt((1.-generator()->standardModel()->sin2ThetaW())/
- generator()->standardModel()->sin2ThetaW());
+ _zfact = sqrt((1.-sin2ThetaW())/
+ sin2ThetaW());
// set the graviton coupling
tcHwRSPtr hwRS=dynamic_ptr_cast<tcHwRSPtr>(generator()->standardModel());
if(hwRS){_theKappa=2./hwRS->lambda_pi();}
else{throw InitException();}
}
void RSModelVVVGRVertex::persistentOutput(PersistentOStream & os) const {
os << ounit(_theKappa,InvGeV) << _zfact;
}
void RSModelVVVGRVertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(_theKappa,InvGeV) >> _zfact;
}
ClassDescription<RSModelVVVGRVertex> RSModelVVVGRVertex::initRSModelVVVGRVertex;
// Definition of the static class description member.
void RSModelVVVGRVertex::Init() {
static ClassDocumentation<RSModelVVVGRVertex> documentation
("The RSModelVVVGRVertex class is the four point coupling"
" of three vector bosons and a graviton in the Randell-Sundrum model.");
}
// couplings for the VVVGR vertex
void RSModelVVVGRVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b,
tcPDPtr c, tcPDPtr) {
int ida=a->id();
int idb=b->id();
int idc=c->id();
// first the overall normalisation
if(ida==21 && idb==21 && idc==21) {
if(q2!=_q2last[1]||_couplast[1]==0.) {
_couplast[1] = strongCoupling(q2);
_q2last[1]=q2;
}
setNorm(Complex(_couplast[1]*_theKappa*UnitRemoval::E));
}
else {
if(q2!=_q2last[0]||_couplast[0]==0.) {
_couplast[0] = electroMagneticCoupling(q2);
_q2last[0]=q2;
}
// 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) )
setNorm(Complex(_couplast[0]*_theKappa*UnitRemoval::E));
// 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) )
setNorm(-Complex(_couplast[0]*_theKappa*UnitRemoval::E));
// W- W+ Z and cylic perms
else if((ida==-24 && idb== 24 && idc== 23) ||
(ida== 23 && idb==-24 && idc== 24) ||
(ida== 24 && idb== 23 && idc==-24) )
setNorm(Complex(_couplast[0]*_zfact*_theKappa*UnitRemoval::E));
// W+ W- Z (anticylic perms of above)
else if((ida== 24 && idb==-24 && idc== 23) ||
(ida== 23 && idb== 24 && idc==-24) ||
(ida==-24 && idb== 23 && idc== 24) )
setNorm(-Complex(_couplast[0]*_zfact*_theKappa*UnitRemoval::E));
else throw HelicityConsistencyError() << "RSModelVVVGRVertex::setCoupling "
<< "Invalid particles in VVVGR Vertex"
<< Exception::runerror;
}
}
diff --git a/Models/StandardModel/SMFFZVertex.cc b/Models/StandardModel/SMFFZVertex.cc
--- a/Models/StandardModel/SMFFZVertex.cc
+++ b/Models/StandardModel/SMFFZVertex.cc
@@ -1,95 +1,95 @@
// -*- C++ -*-
//
// SMFFZVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SMFFZVertex class.
//
#include "SMFFZVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
using namespace ThePEG;
void SMFFZVertex::persistentOutput(PersistentOStream & os) const {
os << _gl << _gr;
}
void SMFFZVertex::persistentInput(PersistentIStream & is, int) {
is >> _gl >> _gr;
}
ClassDescription<SMFFZVertex>
SMFFZVertex::initSMFFZVertex;
// Definition of the static class description member.
void SMFFZVertex::Init() {
static ClassDocumentation<SMFFZVertex> documentation
("The SMFFZVertex class is the implementation of"
"the coupling of the Z boson to the Standard Model fermions");
}
void SMFFZVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr,tcPDPtr) {
// first the overall normalisation
if(q2!=_q2last||_couplast==0.) {
_couplast = -electroMagneticCoupling(q2);
_q2last=q2;
}
setNorm(_couplast);
// the left and right couplings
int iferm=abs(a->id());
if((iferm>=1 && iferm<=6)||(iferm>=11 &&iferm<=16)) {
setLeft(_gl[iferm]);
setRight(_gr[iferm]);
}
else
throw HelicityConsistencyError() << "SMFFZVertex::setCoupling "
<< "Unknown particle in Z vertex"
<< Exception::runerror;
}
SMFFZVertex::SMFFZVertex() : _gl(17,0.0), _gr(17,0.0),
_couplast(0.0), _q2last(ZERO) {
// PDG codes for the particles
vector<long> first,second,third;
// the quarks
for(int ix=1;ix<7;++ix) {
first.push_back(-ix);
second.push_back(ix);
third.push_back(23);
}
// the leptons
for(int ix=11;ix<17;++ix) {
first.push_back(-ix);
second.push_back(ix);
third.push_back(23);
}
setList(first,second,third);
}
void SMFFZVertex::doinit() {
tcSMPtr sm = generator()->standardModel();
- double sw2=sm->sin2ThetaW();
+ double sw2 = sin2ThetaW();
double fact = 0.25/sqrt(sw2*(1.-sw2));
for(int ix=1;ix<4;++ix) {
_gl[2*ix-1] = fact*(sm->vd() + sm->ad() );
_gl[2*ix ] = fact*(sm->vu() + sm->au() );
_gl[2*ix+9 ] = fact*(sm->ve() + sm->ae() );
_gl[2*ix+10] = fact*(sm->vnu() + sm->anu());
_gr[2*ix-1] = fact*(sm->vd() - sm->ad() );
_gr[2*ix ] = fact*(sm->vu() - sm->au() );
_gr[2*ix+9 ] = fact*(sm->ve() - sm->ae() );
_gr[2*ix+10] = fact*(sm->vnu() - sm->anu());
}
orderInGem(1);
orderInGs(0);
FFVVertex::doinit();
}
diff --git a/Models/StandardModel/SMHPPVertex.cc b/Models/StandardModel/SMHPPVertex.cc
--- a/Models/StandardModel/SMHPPVertex.cc
+++ b/Models/StandardModel/SMHPPVertex.cc
@@ -1,198 +1,198 @@
// -*- C++ -*-
//
// SMHPPVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SMHPPVertex class.
//
#include "SMHPPVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace Herwig;
using namespace ThePEG;
void SMHPPVertex::persistentOutput(PersistentOStream & os) const {
os << _theSM << ounit(_mw,GeV) << massopt << _minloop << _maxloop
<< _CoefRepresentation;
}
void SMHPPVertex::persistentInput(PersistentIStream & is, int) {
is >> _theSM >> iunit(_mw, GeV) >> massopt >> _minloop >> _maxloop
>> _CoefRepresentation;
setCoefScheme(_CoefRepresentation);
}
ClassDescription<SMHPPVertex> SMHPPVertex::initSMHPPVertex;
// Definition of the static class description member.
void SMHPPVertex::Init() {
static ClassDocumentation<SMHPPVertex> documentation
("This class implements the h0->gamma,gamma vertex.");
static Parameter<SMHPPVertex,unsigned int> interfaceMinQuarkInLoop
("MinQuarkInLoop",
"The minimum flavour of the quarks to include in the loops",
&SMHPPVertex::_minloop, 6, 1, 6,
false, false, Interface::limited);
static Parameter<SMHPPVertex,unsigned int> interfaceMaxQuarkInLoop
("MaxQuarkInLoop",
"The maximum flavour of the quarks to include in the loops",
&SMHPPVertex::_maxloop, 6, 1, 6,
false, false, Interface::limited);
static Switch<SMHPPVertex,unsigned int> interfaceMassOption
("LoopMassScheme",
"Switch for the treatment of the masses in the loops ",
&SMHPPVertex::massopt, 2, false, false);
static SwitchOption interfaceHeavyMass
(interfaceMassOption,
"PoleMasses",
"The loop is calculcated with the pole quark masses",
1);
static SwitchOption interfaceNormalMass
(interfaceMassOption,
"RunningMasses",
"running quark masses are taken in the loop",
2);
static Switch<SMHPPVertex,unsigned int> interfaceScheme
("CoefficientScheme",
"Which scheme for the tensor coefficients is applied",
&SMHPPVertex::_CoefRepresentation, 1, false, false);
static SwitchOption interfaceSchemeSimplified
(interfaceScheme,
"Simplified",
"Represection suitable for the simplified the H-g-g and H-gamma-gamma vertices",
1);
static SwitchOption interfaceSchemeGeneral
(interfaceScheme,
"General",
"Represection suitable for the Passarino-Veltman tensor reduction scheme",
2);
}
void SMHPPVertex::setCoupling(Energy2 q2, tcPDPtr part2,
tcPDPtr part3, tcPDPtr part1) {
if( part1->id() != ParticleID::h0 && part2->id() != ParticleID::gamma &&
part3->id() != ParticleID::gamma )
throw HelicityConsistencyError()
<< "SMHPPVertex::setCoupling() - The particle content of this vertex "
<< "is incorrect: " << part1->id() << " " << part2->id() << " "
<< part3->id() << Exception::runerror;
unsigned int Qminloop = _minloop;
unsigned int Qmaxloop = _maxloop;
if (_maxloop < _minloop) {
Qmaxloop=_minloop;
Qminloop=_maxloop;
}
switch (_CoefRepresentation) {
case 1: {
if(q2 != _q2last||_couplast==0.) {
double g = weakCoupling(q2);
_couplast = UnitRemoval::E * pow(g,3)/_mw/sqr(Constants::pi)/sqrt(2.)/16.;
_q2last = q2;
}
setNorm(_couplast);
Complex loop(0.);
// quark loops
for (unsigned int i = Qminloop; i <= Qmaxloop; ++i) {
tcPDPtr qrk = getParticleData(i);
Energy mass = (2 == massopt) ? _theSM->mass(q2,qrk) : qrk->mass();
Charge charge = qrk->charge();
loop += sqr(charge/ThePEG::Units::eplus) * Af(sqr(mass)/q2);
}
// lepton loops
unsigned int Lminloop = 3; // still fixed value
unsigned int Lmaxloop = 3; // still fixed value
for (unsigned int i = Lminloop; i <= Lmaxloop; ++i) {
tcPDPtr lpt = getParticleData(9 + 2*i);
Energy mass = (2 == massopt) ? _theSM->mass(q2,lpt) : lpt->mass();
Charge charge = lpt->charge();
loop += sqr(charge/ThePEG::Units::eplus) * Af(sqr(mass)/q2)/3.; // 3. -> no color!
}
// W loop
loop += Aw(sqr(_mw)/q2);
a00(loop);
a11(0.0);
a12(0.0);
a21(-loop);
a22(0.0);
aEp(0.0);
break;
}
case 2: {
if(q2 != _q2last||_couplast==0.) {
double e = electroMagneticCoupling(q2);
- _couplast = pow(e,3)/_theSM->sin2ThetaW();
+ _couplast = pow(e,3)/sin2ThetaW();
_q2last = q2;
}
setNorm(_couplast);
type.resize(3,PDT::SpinUnknown);
type[0] = PDT::Spin1Half;
type[1] = PDT::Spin1Half;
type[2] = PDT::Spin1;
masses.resize(3,ZERO);
masses[0] = _theSM->mass(q2,getParticleData(ParticleID::t));
masses[1] = _theSM->mass(q2,getParticleData(ParticleID::b));
masses[2] = _mw;
double copl = -_theSM->mass(q2,getParticleData(6))*(4./3.)/_mw/2.;
couplings.push_back(make_pair(copl, copl));
copl = -_theSM->mass(q2,getParticleData(5))*(4./3.)/_mw/2.;
couplings.push_back(make_pair(copl, copl));
couplings.push_back(make_pair(UnitRemoval::InvE*_mw, UnitRemoval::InvE*_mw));
VVSLoopVertex::setCoupling(q2, part1, part2, part3);
break;
}
}
}
Complex SMHPPVertex::Af(const double tau) const {
return tau*(4. - W2(tau)*(1. - 4.*tau));
}
Complex SMHPPVertex::Aw(const double tau) const {
return 12.*W2(tau)*tau*(4.*tau - 2.) - 12.*tau - 2.;
}
Complex SMHPPVertex::W2(double lambda) const {
double pi = Constants::pi;
if (0.0 == lambda)
return 0.0;
if (lambda < 0.0)
return 4.*sqr(asinh(0.5*sqrt(-1./lambda)));
double root(0.5*sqrt(1./lambda));
Complex ac(0.);
if(root < 1.) {
ac = -sqr(asin(root));
} else {
// formulae from NPB297,221
double ex = acosh(root);
ac = sqr(ex) - 0.25*sqr(pi) - pi*ex*Complex(0.,1.);
/*
// formulae from Higgs hunter's guide (gives the same result).
double pl = .5 + .5*sqrt(1. - 4.*lambda);
double ms = .5 - .5*sqrt(1. - 4.*lambda);
double lg = 0.5*log(pl/ms);
ac = sqr(lg) - 0.25*sqr(pi) - pi*lg*Complex(0.,1.);
*/
}
return 4.*ac;
}
diff --git a/Models/StandardModel/SMWWHVertex.cc b/Models/StandardModel/SMWWHVertex.cc
--- a/Models/StandardModel/SMWWHVertex.cc
+++ b/Models/StandardModel/SMWWHVertex.cc
@@ -1,76 +1,76 @@
// -*- C++ -*-
//
// SMWWHVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 WWHVertex class.
//
#include "SMWWHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
using namespace ThePEG::Helicity;
SMWWHVertex::SMWWHVertex()
: _couplast(0.), _q2last(ZERO), _mw(ZERO), _zfact(0.) {
// particles
vector<long> first,second,third;
first.push_back(24);
second.push_back(-24);
third.push_back(25);
first.push_back(23);
second.push_back(23);
third.push_back(25);
setList(first,second,third);
}
void SMWWHVertex::doinit() {
// parameters
_mw = getParticleData(ThePEG::ParticleID::Wplus)->mass();
- _zfact = 1./(1.-generator()->standardModel()->sin2ThetaW());
+ _zfact = 1./(1.-sin2ThetaW());
// order in the couplings
orderInGem(1);
orderInGs(0);
// base class
VVSVertex::doinit();
}
void SMWWHVertex::persistentOutput(PersistentOStream & os) const {
os << ounit(_mw,GeV) << _zfact;
}
void SMWWHVertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(_mw,GeV) >> _zfact;
}
ClassDescription<SMWWHVertex>SMWWHVertex::initSMWWHVertex;
// Definition of the static class description member.
void SMWWHVertex::Init() {
static ClassDocumentation<SMWWHVertex> documentation
("The SMWWHVertex class is the implementation"
" of the helicity amplitude calculation for the coupling of the Standard"
" Model electroweak gauge bosons to the Higgs.");
}
void SMWWHVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr, tcPDPtr) {
int ibos=abs(a->id());
// first the overall normalisation
if(q2!=_q2last||_couplast==0.) {
_couplast = weakCoupling(q2) * UnitRemoval::InvE * _mw;
_q2last=q2;
}
if(ibos==24) setNorm(_couplast);
else if(ibos==23) setNorm(_couplast*_zfact);
else
throw HelicityConsistencyError() << "SMWWHVertex::setCoupling "
<< "Invalid particles in WWH Vertex"
<< Exception::runerror;
}
diff --git a/Models/StandardModel/SMWWWVertex.cc b/Models/StandardModel/SMWWWVertex.cc
--- a/Models/StandardModel/SMWWWVertex.cc
+++ b/Models/StandardModel/SMWWWVertex.cc
@@ -1,107 +1,107 @@
// -*- C++ -*-
//
// SMWWWVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SMWWWVertex class.
//
#include "SMWWWVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
void SMWWWVertex::persistentOutput(PersistentOStream & os) const {
os << _zfact;
}
void SMWWWVertex::persistentInput(PersistentIStream & is, int) {
is >> _zfact;
}
ClassDescription<SMWWWVertex>
SMWWWVertex::initSMWWWVertex;
// Definition of the static class description member.
void SMWWWVertex::Init() {
static ClassDocumentation<SMWWWVertex> documentation
("The SMWWWVertex class is the implementation of the "
"Standard Model triple electroweak boson coupling.");
}
// couplings for the WWW vertex
void SMWWWVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr b, tcPDPtr c,
Direction d1,Direction d2,Direction d3) {
using ThePEG::Helicity::intermediate;
int ida=a->id();
int idb=b->id();
int idc=c->id();
if(abs(ida)!=24&&idb!=-idc) {
if(d2!=intermediate) idc=-idc;
if(d3!=intermediate) idb=-idb;
}
else if(abs(idb)!=24&&ida!=idc) {
if(d3!=intermediate) ida=-ida;
if(d1!=intermediate) idc=-idc;
}
else if(abs(idc)!=24&&ida!=-idb) {
if(d2!=intermediate) ida=-ida;
if(d1!=intermediate) idb=-idb;
}
// first the overall normalisation
if(q2!=_q2last||_couplast==0.) {
_couplast = electroMagneticCoupling(q2);
_q2last=q2;
}
// 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) ) setNorm(_couplast);
// 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) ) setNorm(-_couplast);
// W- W+ Z and cylic perms
else if((ida==-24 && idb== 24 && idc== 23) ||
(ida== 23 && idb==-24 && idc== 24) ||
(ida== 24 && idb== 23 && idc==-24) ) setNorm(_couplast*_zfact);
// W+ W- Z (anticylic perms of above)
else if((ida== 24 && idb==-24 && idc== 23) ||
(ida== 23 && idb== 24 && idc==-24) ||
(ida==-24 && idb== 23 && idc== 24) ) setNorm(-_couplast*_zfact);
else
throw Helicity::HelicityConsistencyError()
<< "SMWWWVertex::setCoupling "
<< "Invalid particles in WWW Vertex"
<< a->PDGName() << " " << b->PDGName() << " " << c->PDGName()
<< Exception::runerror;
}
SMWWWVertex::SMWWWVertex() : _zfact(0.),_couplast(0.),
_q2last(sqr(Constants::MaxEnergy)) {
// particles
vector<long> first,second,third;
first.push_back(24);
second.push_back(-24);
third.push_back(22);
first.push_back(24);
second.push_back(-24);
third.push_back(23);
setList(first,second,third);
}
void SMWWWVertex::doinit() {
orderInGem(1);
orderInGs(0);
VVVVertex::doinit();
// factor for the Z vertex
- double sw2=generator()->standardModel()->sin2ThetaW();
+ double sw2=sin2ThetaW();
_zfact = sqrt((1.-sw2)/sw2);
}
diff --git a/Models/StandardModel/SMWWWWVertex.cc b/Models/StandardModel/SMWWWWVertex.cc
--- a/Models/StandardModel/SMWWWWVertex.cc
+++ b/Models/StandardModel/SMWWWWVertex.cc
@@ -1,190 +1,190 @@
// -*- C++ -*-
//
// SMWWWWVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SMWWWWVertex class.
//
#include "SMWWWWVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
using namespace ThePEG;
SMWWWWVertex::SMWWWWVertex()
: _couplast(0.0), _q2last(sqr(Constants::MaxEnergy)),
_vfact(4,0.0), _sw2(0.), _cw2(0.) {
// particles
vector<long> first,second,third,fourth;
first.push_back(24);
first.push_back(23);
first.push_back(22);
first.push_back(22);
second.push_back(-24);
second.push_back(24);
second.push_back(24);
second.push_back(24);
third.push_back(24);
third.push_back(23);
third.push_back(22);
third.push_back(23);
fourth.push_back(-24);
fourth.push_back(-24);
fourth.push_back(-24);
fourth.push_back(-24);
setList(first,second,third,fourth);
}
void SMWWWWVertex::doinit() {
orderInGem(2);
orderInGs(0);
VVVVVertex::doinit();
// couplings
- _sw2 = generator()->standardModel()->sin2ThetaW();
+ _sw2 = sin2ThetaW();
_cw2 = 1.-_sw2;
double sw = sqrt(_sw2);
double cw = sqrt(_cw2);
_vfact[0] = -1./_sw2;
_vfact[1] = _cw2/_sw2;
_vfact[2] = 1.;
_vfact[3] = cw/sw;
// pointer for intermediate particles
_gamma = getParticleData(ThePEG::ParticleID::gamma);
_Z0 = getParticleData(ThePEG::ParticleID::Z0);
_wplus = getParticleData(ThePEG::ParticleID::Wplus);
_wminus = getParticleData(ThePEG::ParticleID::Wminus);
}
void SMWWWWVertex::persistentOutput(PersistentOStream & os) const {
os << _gamma << _Z0 << _wplus << _wminus
<< _vfact << _sw2 << _cw2;
}
void SMWWWWVertex::persistentInput(PersistentIStream & is, int) {
is >> _gamma >> _Z0 >> _wplus >> _wminus
>> _vfact >> _sw2 >> _cw2;
}
ClassDescription<SMWWWWVertex>SMWWWWVertex::initSMWWWWVertex;
// Definition of the static class description member.
void SMWWWWVertex::Init() {
static ClassDocumentation<SMWWWWVertex> documentation
("The SMWWWWVertex class is the implementation of the"
" Standard Model quartic electroweka gauge boson coupling.");
}
// couplings for the WWWW vertex
void SMWWWWVertex::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) ++ngamma;
else if (id[ix]==23) ++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) {
iorder[iy]=ix;
++iy;
}
}
// then the Z bosons
for(int ix=0;iy<ngamma+nz&&ix<4;++ix) {
if(id[ix]==23) {
iorder[iy]=ix;
++iy;
}
}
// then the W+
for(int ix=0;iy<3&&ix<4;++ix) {
if(id[ix]==24) {
iorder[iy]=ix;
++iy;
}
}
if (iy!=3) throw HelicityConsistencyError()
<< "SMWWWWVertex::setCoupling Error setting order"
<< Exception::runerror;
// finally the W-
for(int ix=0;iy<4&&ix<4;++ix) {
if(id[ix]==-24) {
iorder[iy]=ix;
++iy;
}
}
if(iy!=4)
throw HelicityConsistencyError()
<< "SMWWWWVertex::setCoupling Error setting order"
<< Exception::warning;
}
else {
int iy=0;
// first the W+
for(int ix=0;iy<3&&ix<4;++ix) {
if(id[ix]==24) {
iorder[iy]=ix;
++iy;
}
}
if(iy!=2) throw HelicityConsistencyError()
<< "SMWWWWVertex::setCoupling Error setting order"
<< Exception::warning;
// finally the W-
for(int ix=0;iy<4&&ix<4;++ix) {
if(id[ix]==-24) {
iorder[iy]=ix;
++iy;
}
}
if(iy!=4) throw HelicityConsistencyError()
<< "SMWWWWVertex::setCoupling Error setting order"
<< Exception::warning;
setIntermediate(_gamma,_Z0,_sw2,_cw2);
}
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;
}
// id's of the first two particles
int ida(0),idb(0);
if(iorder[0]==0) ida = abs(a->id());
else if(iorder[0]==1) ida = abs(b->id());
else if(iorder[0]==2) ida = abs(c->id());
else if(iorder[0]==3) ida = abs(d->id());
if(iorder[1]==0) idb = abs(a->id());
else if(iorder[1]==1) idb = abs(b->id());
else if(iorder[1]==2) idb = abs(c->id());
else if(iorder[1]==3) idb = abs(d->id());
// WWWW coupling
if(ida==24) setNorm(_vfact[0]*_couplast);
// ZZWW coupling
else if(ida==23&&idb==23) setNorm(_vfact[1]*_couplast);
// gamma gamma WW coupling
else if(ida==22&&idb==22) setNorm(_couplast);
// gamma Z WW coupling
else if(ida==22&&idb==23) setNorm(_vfact[3]*_couplast);
else throw HelicityConsistencyError()
<< "SMWWWWVertex::setCoupling unknown particles"
<< Exception::runerror;
}
diff --git a/Models/Susy/SSCCZVertex.cc b/Models/Susy/SSCCZVertex.cc
--- a/Models/Susy/SSCCZVertex.cc
+++ b/Models/Susy/SSCCZVertex.cc
@@ -1,132 +1,132 @@
// -*- C++ -*-
//
// SSCCZVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSCCZVertex class.
//
#include "SSCCZVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
SSCCZVertex::SSCCZVertex() : _sw2(0.), _cw(0.), _couplast(0.),
_q2last(), _id1last(0), _id2last(0),
_leftlast(0.), _rightlast(0.), _gblast(0){
vector<long> first, second, third;
for(unsigned int ix = 0; ix < 2; ++ix) {
long ic1(1000024);
if(ix == 1) ic1 = 1000037;
for(unsigned int iy = 0; iy < 2; ++iy) {
long ic2(1000024);
if(iy == 1) ic2 = 1000037;
first.push_back(-ic1);
second.push_back(ic2);
third.push_back(23);
}
}
//photon
first.push_back(-1000024);
second.push_back(1000024);
third.push_back(22);
first.push_back(-1000037);
second.push_back(1000037);
third.push_back(22);
setList(first, second, third);
}
void SSCCZVertex::doinit() {
FFVVertex::doinit();
tSusyBasePtr theSS = dynamic_ptr_cast<SusyBasePtr>(generator()->standardModel());
if(!theSS)
throw InitException() << "SSCCZVertex::doinit - The model pointer "
<< "is null! "
<< Exception::abortnow;
- _sw2 = theSS->sin2ThetaW();
+ _sw2 = sin2ThetaW();
_cw = sqrt(1. - _sw2);
_theU = theSS->charginoUMix();
_theV = theSS->charginoVMix();
if(!_theU || !_theV)
throw InitException() << "SSCCZVertex::doinit - "
<< "A mixing matrix pointer is null. U: "
<< _theU << " V: " << _theV
<< Exception::abortnow;
orderInGs(0);
orderInGem(1);
}
void SSCCZVertex::persistentOutput(PersistentOStream & os) const {
os << _sw2 << _cw << _theU << _theV;
}
void SSCCZVertex::persistentInput(PersistentIStream & is, int) {
is >> _sw2 >> _cw >> _theU >> _theV;
}
ClassDescription<SSCCZVertex> SSCCZVertex::initSSCCZVertex;
// Definition of the static class description member.
void SSCCZVertex::Init() {
static ClassDocumentation<SSCCZVertex> documentation
("This class implements the coupling of a Z/gamma to a pair of"
" charginos. ");
}
void SSCCZVertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3) {
long ichar1(abs(part1->id())), ichar2(abs(part2->id())),
boson(part3->id());
if( (boson != ParticleID::gamma && boson != ParticleID::Z0) ||
(ichar1 != 1000024 && ichar1 != 1000037) ||
(ichar2 != 1000024 && ichar2 != 1000037) ) {
throw HelicityConsistencyError()
<< "SSCCZVertex::setCoupling() - An incorrect particle has been found. "
<< part1->id() << " " << part2->id() << " " << part3->id()
<< Exception::warning;
setNorm(0.); setLeft(0.), setRight(0.);
return;
}
if(_q2last != q2||_couplast==0.) {
_q2last = q2;
_couplast = electroMagneticCoupling(q2);
}
setNorm(_couplast);
if(boson != _gblast || ichar1 != _id1last || ichar2 != _id2last) {
_gblast = boson;
_id1last = ichar1;
_id2last = ichar2;
if( boson == ParticleID::Z0 ){
unsigned int ic1(0), ic2(0);
if(ichar1 == 1000037) ic1 = 1;
if(ichar2 == 1000037) ic2 = 1;
_leftlast = -(*_theV)(ic1, 0)*conj((*_theV)(ic2, 0)) -
0.5*(*_theV)(ic1, 1)*conj((*_theV)(ic2, 1));
_rightlast = -conj((*_theU)(ic1, 0))*(*_theU)(ic2, 0) -
0.5*conj((*_theU)(ic1, 1))*(*_theU)(ic2, 1);
if(ichar1 == ichar2) {
_leftlast += _sw2;
_rightlast += _sw2;
}
_leftlast /= sqrt(_sw2)*_cw;
_rightlast /= sqrt(_sw2)*_cw;
}
else {
_leftlast = -1.;
_rightlast = -1.;
}
}
setLeft(_leftlast);
setRight(_rightlast);
}
diff --git a/Models/Susy/SSCNWVertex.cc b/Models/Susy/SSCNWVertex.cc
--- a/Models/Susy/SSCNWVertex.cc
+++ b/Models/Susy/SSCNWVertex.cc
@@ -1,162 +1,162 @@
// -*- C++ -*-
//
// SSCNWVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSCNWVertex class.
//
#include "SSCNWVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
SSCNWVertex::SSCNWVertex() : _sw(0.), _couplast(0.), _q2last(ZERO),
_id1last(0), _id2last(0), _leftlast(0.),
_rightlast(0.) {
vector<long> first, second, third;
//iw == -1 outgoing W-, iw == +1 outgoing W+
for(int iw = -1; iw < 2; iw += 2) {
for(unsigned int ine = 0; ine < 5; ++ine) {
long neu(1000022);
if(ine == 1) neu = 1000023;
if(ine == 2) neu = 1000025;
if(ine == 3) neu = 1000035;
if(ine == 4) neu = 1000045;
for(unsigned int ic = 0; ic < 2; ++ic) {
long cha(1000024);
if(ic == 1) cha = 1000037;
first.push_back(-iw*cha);
second.push_back(neu);
third.push_back(iw*24);
}
}
}
setList(first, second, third);
}
void SSCNWVertex::doinit() {
FFVVertex::doinit();
tSusyBasePtr theSS = dynamic_ptr_cast<SusyBasePtr>(generator()->standardModel());
if(!theSS)
throw InitException() << "SSCNWVertex::doinit() - The model pointer is null!"
<< Exception::abortnow;
- _sw = sqrt(theSS->sin2ThetaW());
+ _sw = sqrt(sin2ThetaW());
_theN = theSS->neutralinoMix();
_theU = theSS->charginoUMix();
_theV = theSS->charginoVMix();
if(!_theN || !_theU || ! _theV)
throw InitException() << "SSCNWVertex::doinit() - "
<< "A mixing matrix pointer is null."
<< " N: " << _theN << " U: " << _theU << " V: "
<< _theV << Exception::abortnow;
orderInGs(0);
orderInGem(1);
}
void SSCNWVertex::persistentOutput(PersistentOStream & os) const {
os << _sw << _theN << _theU << _theV;
}
void SSCNWVertex::persistentInput(PersistentIStream & is, int) {
is >> _sw >> _theN >> _theU >> _theV;
}
ClassDescription<SSCNWVertex> SSCNWVertex::initSSCNWVertex;
// Definition of the static class description member.
void SSCNWVertex::Init() {
static ClassDocumentation<SSCNWVertex> documentation
("This class implements the coupling of a W boson to a "
"neutralino and a chargino");
}
void SSCNWVertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3) {
long neu, cha;
if(abs(part1->id()) == ParticleID::Wplus) {
if(part2->charged()) {
cha = part2->id();
neu = part3->id();
}
else {
cha = part3->id();
neu = part2->id();
}
}
else if(abs(part2->id()) == ParticleID::Wplus) {
if(part1->charged()) {
cha = part1->id();
neu = part3->id();
}
else {
cha = part3->id();
neu = part1->id();
}
}
else if(abs(part3->id()) == ParticleID::Wplus) {
if(part1->charged()) {
cha = part1->id();
neu = part2->id();
}
else {
cha = part2->id();
neu = part1->id();
}
}
else
throw HelicityConsistencyError()
<< "SSCNWVertex::setCoupling() - There is no W-boson in this vertex! "
<< part1->id() << " " << part2->id() << " " << part3->id()
<< Exception::warning;
if((abs(cha) == 1000024 || abs(cha) == 1000037) &&
(abs(neu) == 1000022 || abs(neu) == 1000023 ||
abs(neu) == 1000025 || abs(neu) == 1000035 ||
abs(neu) == 1000045) ) {
if(q2 != _q2last||_couplast==0.) {
_q2last = q2;
_couplast = weakCoupling(q2);;
}
setNorm(_couplast);
if(abs(cha) != _id1last || abs(neu) != _id2last) {
_id1last = abs(cha);
_id2last = abs(neu);
unsigned int eigc(0);
if(abs(cha) == 1000037) eigc = 1;
unsigned int eign(0);
if(abs(neu) == 1000023) eign = 1;
if(abs(neu) == 1000025) eign = 2;
if(abs(neu) == 1000035) eign = 3;
if(abs(neu) == 1000045) eign = 4;
_leftlast = (*_theN)(eign, 1)*conj((*_theV)(eigc, 0)) -
( (*_theN)(eign, 3)*conj((*_theV)(eigc, 1))/sqrt(2));
_rightlast = conj((*_theN)(eign, 1))*(*_theU)(eigc, 0) +
( conj((*_theN)(eign, 2))*(*_theU)(eigc, 1)/sqrt(2));
}
setLeft(_leftlast);
setRight(_rightlast);
}
else
throw HelicityConsistencyError() << "SSCNWVertex::setCoupling() - "
<< "Something other than a neutralino or a "
<< "chargino has appeared in this vertex "
<< neu << " " << cha
<< Exception::warning;
}
diff --git a/Models/Susy/SSGOGOHVertex.cc b/Models/Susy/SSGOGOHVertex.cc
--- a/Models/Susy/SSGOGOHVertex.cc
+++ b/Models/Susy/SSGOGOHVertex.cc
@@ -1,271 +1,271 @@
// -*- C++ -*-
//
// SSGOGOHVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSGOGOHVertex class.
//
#include "SSGOGOHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include <cassert>
using namespace ThePEG::Helicity;
using namespace Herwig;
SSGOGOHVertex::SSGOGOHVertex() : theMw(), theSij(2, vector<Complex>(2,0.0)),
theQij(2, vector<Complex>(2,0.0)),
theQijLp(4, vector<Complex>(2,0.0)),
theQijRp(4, vector<Complex>(2,0.0)),
theSijdp(4, vector<Complex>(4,0.0)),
theQijdp(4, vector<Complex>(4,0.0)),
theSa(0.0), theSb(0.0),
theCa(0.0), theCb(0.0), theCoupLast(0.0),
theLLast(0.0), theRLast(0.0), theHLast(0),
theID1Last(0), theID2Last(0), theq2last() {
vector<long> first, second, third;
long neu[4] = {1000022, 1000023, 1000025, 1000035};
long chg[2] = {1000024, 1000037};
long higgs[3] = {25, 35, 36};
for(unsigned int i = 0; i < 4; ++i) {
//neutralinos
for(unsigned int j = 0; j < 4; ++j) {
for(unsigned int k = 0; k < 4; ++k) {
if( i < 3 ) {
first.push_back(neu[j]);
second.push_back(neu[k]);
third.push_back(higgs[i]);
//charginos
if( j < 2 && k < 2 ) {
first.push_back(-chg[j]);
second.push_back(chg[k]);
third.push_back(higgs[i]);
}
}
else {
if( k == 2 ) break;
first.push_back(-chg[k]);
second.push_back(neu[j]);
third.push_back(37);
first.push_back(chg[k]);
second.push_back(neu[j]);
third.push_back(-37);
}
}
}
}
setList(first, second, third);
}
SSGOGOHVertex::~SSGOGOHVertex() {}
void SSGOGOHVertex::doinit() {
FFSVertex::doinit();
tMSSMPtr theMSSM = dynamic_ptr_cast<tMSSMPtr>(generator()->standardModel());
if( !theMSSM )
throw InitException()
<< "SSGOGOHVertex::doinit() - The pointer to the MSSM object is null!"
<< Exception::abortnow;
theMw = getParticleData(ParticleID::Wplus)->mass();
- double theSw = sqrt(theMSSM->sin2ThetaW());
+ double theSw = sqrt(sin2ThetaW());
double tw = theSw/sqrt(1. - theSw*theSw);
double tanb = theMSSM->tanBeta();
theSb = tanb/sqrt(1. + sqr(tanb));
theCb = sqrt( 1. - sqr(theSb) );
theSa = sin(theMSSM->higgsMixingAngle());
theCa = sqrt(1. - sqr(theSa));
MixingMatrix nmix = *theMSSM->neutralinoMix();
MixingMatrix umix = *theMSSM->charginoUMix();
MixingMatrix vmix = *theMSSM->charginoVMix();
for(unsigned int i = 0; i < 4; ++i) {
for(unsigned int j = 0; j < 4; ++j) {
if( i < 2 && j < 2 ) {
theQij[i][j] = vmix(i,0)*umix(j,1)/sqrt(2);
theSij[i][j] = vmix(i,1)*umix(j,0)/sqrt(2);
}
if( j < 2 ) {
theQijLp[i][j] = nmix(i, 3)*vmix(j,0)
+ (nmix(i,1) + nmix(i,0)*tw)*vmix(j,1)/sqrt(2);
theQijRp[i][j] = nmix(i, 2)*umix(j,0)
- (nmix(i,1) + nmix(i,0)*tw)*umix(j,1)/sqrt(2);
}
theQijdp[i][j] = 0.5*( nmix(i,2)*( nmix(j,1) - tw*nmix(j,0) )
+ nmix(j,2)*( nmix(i,1) - tw*nmix(i,0) ) );
theSijdp[i][j] = 0.5*( nmix(i,3)*( nmix(j,1) - tw*nmix(j,0) )
+ nmix(j,3)*( nmix(i,1) - tw*nmix(i,0) ) );
}
}
orderInGem(1);
orderInGs(0);
}
void SSGOGOHVertex::persistentOutput(PersistentOStream & os) const {
os << theSij << theQij << theQijLp << theQijRp << theSijdp
<< theQijdp << ounit(theMw,GeV) << theSa << theSb << theCa
<< theCb;
}
void SSGOGOHVertex::persistentInput(PersistentIStream & is, int) {
is >> theSij >> theQij >> theQijLp >> theQijRp >> theSijdp
>> theQijdp >> iunit(theMw,GeV) >> theSa >> theSb >> theCa
>> theCb;
}
ClassDescription<SSGOGOHVertex> SSGOGOHVertex::initSSGOGOHVertex;
// Definition of the static class description member.
void SSGOGOHVertex::Init() {
static ClassDocumentation<SSGOGOHVertex> documentation
("The coupling of the higgs bosons to SM fermions in the MSSM");
}
void SSGOGOHVertex::setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
tcPDPtr particle3, int) {
long id1(particle1->id()), id2(particle2->id()),
id3(particle3->id()), higgsID(0), f1ID(0), f2ID(0);
if( abs(id1) == ParticleID::h0 || abs(id1) == ParticleID::H0 ||
abs(id1) == ParticleID::A0 || abs(id1) == ParticleID::Hplus ) {
higgsID = abs(id1);
f1ID = id2;
f2ID = id3;
}
else if( abs(id2) == ParticleID::h0 || abs(id2) == ParticleID::H0 ||
abs(id2) == ParticleID::A0 || abs(id2) == ParticleID::Hplus ) {
higgsID = abs(id2);
f1ID = id1;
f2ID = id3;
}
else if( abs(id3) == ParticleID::h0 || abs(id3) == ParticleID::H0 ||
abs(id3) == ParticleID::A0 || abs(id3) == ParticleID::Hplus ) {
higgsID = abs(id3);
f1ID = id1;
f2ID = id2;
}
else {
throw HelicityConsistencyError()
<< "SSGOGOHVertex::setCoupling - There is no higgs particle in "
<< "this vertex. Particles: " << id1 << " " << id2 << " " << id3
<< Exception::warning;
return;
}
if( f1ID < 0 ) swap(f1ID, f2ID);
if( q2 != theq2last || theCoupLast == 0. ) {
theCoupLast = weakCoupling(q2);
theq2last = q2;
}
if( higgsID == theHLast && f1ID == theID1Last && f2ID == theID2Last) {
setNorm(theCoupLast);
setLeft(theLLast);
setRight(theRLast);
return;
}
theHLast = higgsID;
theID1Last = f1ID;
theID2Last = f2ID;
if( higgsID == ParticleID::h0 ) {
//charginos
if( abs(f2ID) == ParticleID::SUSY_chi_1plus ||
abs(f2ID) == ParticleID::SUSY_chi_2plus ) {
unsigned int ei = (abs(f1ID) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
unsigned int ej = (abs(f2ID) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
theLLast = conj(theQij[ej][ei])*theSa - conj(theSij[ej][ei])*theCa;
theRLast = theQij[ei][ej]*theSa - theSij[ei][ej]*theCa;
}
//neutralinos
else {
unsigned int ei(f1ID - ParticleID::SUSY_chi_10),
ej(f2ID - ParticleID::SUSY_chi_10);
if( ei > 1 )
ei = ( ei == 13 ) ? 3 : 2;
if( ej > 1 )
ej = ( ej == 13 ) ? 3 : 2;
theLLast = conj(theQijdp[ej][ei])*theSa + conj(theSijdp[ej][ei])*theCa;
theRLast = theQijdp[ei][ej]*theSa + theSijdp[ei][ej]*theCa ;
}
}
else if( higgsID == ParticleID::H0 ) {
//charginos
if( abs(f2ID) == ParticleID::SUSY_chi_1plus ||
abs(f2ID) == ParticleID::SUSY_chi_2plus ) {
unsigned int ei = (abs(f1ID) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
unsigned int ej = (abs(f2ID) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
theLLast = -conj(theQij[ej][ei])*theCa - conj(theSij[ej][ei])*theSa;
theRLast = -theQij[ei][ej]*theCa - theSij[ei][ej]*theSa;
}
//neutralinos
else {
unsigned int ei(f1ID - ParticleID::SUSY_chi_10),
ej(f2ID - ParticleID::SUSY_chi_10);
if( ei > 1 )
ei = ( ei == 13 ) ? 3 : 2;
if( ej > 1 )
ej = ( ej == 13 ) ? 3 : 2;
theLLast = -conj(theQijdp[ej][ei])*theCa + conj(theSijdp[ej][ei])*theSa;
theRLast = -theQijdp[ei][ej]*theCa + theSijdp[ei][ej]*theSa;
}
}
else if( higgsID == ParticleID::A0 ) {
if( abs(f2ID) == ParticleID::SUSY_chi_1plus ||
abs(f2ID) == ParticleID::SUSY_chi_2plus ) {
unsigned int ei = (abs(f1ID) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
unsigned int ej = (abs(f2ID) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
theLLast = Complex(0.,1.)*( conj(theQij[ej][ei])*theSb
+ conj(theSij[ej][ei])*theCb );
theRLast = -Complex(0.,1.)*(theQij[ei][ej]*theSb + theSij[ei][ej]*theCb);
}
//neutralinos
else {
unsigned int ei(f1ID - ParticleID::SUSY_chi_10),
ej(f2ID - ParticleID::SUSY_chi_10);
if( ei > 1 )
ei = ( ei == 13 ) ? 3 : 2;
if( ej > 1 )
ej = ( ej == 13 ) ? 3 : 2;
theLLast = Complex(0.,1.)*( conj(theQijdp[ej][ei])*theSb
- conj(theSijdp[ej][ei])*theCb );
theRLast = -Complex(0.,1.)*(theQijdp[ei][ej]*theSb - theSijdp[ei][ej]*theCb);
}
}
//charged higgs
else {
unsigned int ei(0),ej(0);
long chg(f2ID), neu(f1ID);
if( abs(neu) == ParticleID::SUSY_chi_1plus ||
abs(neu) == ParticleID::SUSY_chi_2plus ) swap(chg, neu);
ej = ( abs(chg) == ParticleID::SUSY_chi_1plus) ? 0 : 1;
ei = neu - ParticleID::SUSY_chi_10;
if( ei > 1 )
ei = ( ei == 13 ) ? 3 : 2;
theLLast = -theQijLp[ei][ej]*theCb;
theRLast = -theQijRp[ei][ej]*theSb;
if( chg < 0 ) {
Complex tmp = theLLast;
theLLast = conj(theRLast);
theRLast = conj(tmp);
}
}
setNorm(theCoupLast);
setLeft(theLLast);
setRight(theRLast);
}
diff --git a/Models/Susy/SSHGGVertex.cc b/Models/Susy/SSHGGVertex.cc
--- a/Models/Susy/SSHGGVertex.cc
+++ b/Models/Susy/SSHGGVertex.cc
@@ -1,181 +1,181 @@
// -*- C++ -*-
//
// SSHGGVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSHGGVertex class.
//
#include "SSHGGVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include <cassert>
using namespace ThePEG::Helicity;
using namespace Herwig;
SSHGGVertex::SSHGGVertex() : theSw(0.), theMw(), theZfact(),
theQt11(0.), theQt22(0.), theQb11(0.),
theQb22(0.), theSqmass(4,ZERO),
theTanB(0.),theSinA(0.),
theCosA(0.), theSinB(0.), theCosB(0.),
theSinApB(0.), theCosApB(0.), theCouplast(0.),
theq2last(), theHaveCoeff(false) {
//PDG codes for particles at vertices
vector<long> first(3,21), second(3,21), third(3);
third[0] = 25;
third[1] = 35;
third[2] = 36;
setList(first,second,third);
}
void SSHGGVertex::doinit() {
theMSSM = dynamic_ptr_cast<tMSSMPtr>(generator()->standardModel());
if( !theMSSM )
throw InitException()
<< "SSHGGVertex::doinit() - The pointer to the MSSM object is null!"
<< Exception::abortnow;
theMw = getParticleData(ParticleID::Wplus)->mass();
thetop = getParticleData(ParticleID::t);
thebot = getParticleData(ParticleID::b);
- theSw = sqrt(theMSSM->sin2ThetaW());
+ theSw = sqrt(sin2ThetaW());
theZfact = getParticleData(ParticleID::Z0)->mass()/sqrt(1. - sqr(theSw));
theSinA = sin(theMSSM->higgsMixingAngle());
theCosA = sqrt(1. - sqr(theSinA));
theTanB = theMSSM->tanBeta();
theSinB = theTanB/sqrt(1. + sqr(theTanB));
theCosB = sqrt( 1. - sqr(theSinB) );
theSinApB = theSinA*theCosB + theCosA*theSinB;
theCosApB = theCosA*theCosB - theSinA*theSinB;
MixingMatrix stop = *theMSSM->stopMix();
MixingMatrix sbot = *theMSSM->sbottomMix();
theQt11 = stop(0,0)*stop(0,0);
theQt22 = stop(1,1)*stop(1,1);
theQb11 = sbot(0,0)*sbot(0,0);
theQb22 = sbot(1,1)*sbot(1,1);
assert( theSqmass.size() == 4 );
theSqmass[0] = getParticleData(ParticleID::SUSY_b_1)->mass();
theSqmass[1] = getParticleData(ParticleID::SUSY_t_1)->mass();
theSqmass[2] = getParticleData(ParticleID::SUSY_b_2)->mass();
theSqmass[3] = getParticleData(ParticleID::SUSY_t_2)->mass();
orderInGs(2);
orderInGem(1);
VVSLoopVertex::doinit();
}
void SSHGGVertex::persistentOutput(PersistentOStream & os) const {
os << theMSSM << theSw << ounit(theMw,GeV) << ounit(theZfact,GeV) << theQt11
<< theQt22 << theQb11 << theQb22 << thetop << thebot << theTanB
<< theSinA << theCosA << theSinB << theCosB << theSinApB << theCosApB
<< ounit(theSqmass, GeV);
}
void SSHGGVertex::persistentInput(PersistentIStream & is, int) {
is >> theMSSM >> theSw >> iunit(theMw,GeV) >> iunit(theZfact,GeV) >> theQt11
>> theQt22 >> theQb11 >> theQb22 >> thetop >> thebot >> theTanB
>> theSinA >> theCosA >> theSinB >> theCosB >> theSinApB >> theCosApB
>> iunit(theSqmass, GeV);
}
ClassDescription<SSHGGVertex> SSHGGVertex::initSSHGGVertex;
// Definition of the static class description member.
void SSHGGVertex::Init() {
static ClassDocumentation<SSHGGVertex> documentation
("This class implements the higgs-gluon-gluon effective "
"vertex in the MSSM including stop, sbottom and top quarks "
"loops.");
}
void SSHGGVertex::setCoupling(Energy2 q2, tcPDPtr particle2,
tcPDPtr particle3, tcPDPtr particle1) {
long higgs(abs(particle1->id()));
if( higgs != ParticleID::h0 &&
higgs != ParticleID::H0 &&
higgs != ParticleID::A0 &&
particle2->id() != ParticleID::g && particle3->id() != ParticleID::g )
throw HelicityConsistencyError()
<< "SSHGGVertex::setCoupling(): This vertex has the incorrect "
<< "particle content in it. " << higgs << " "
<< particle2->id() << " " << particle3->id();
if( q2 != theq2last || theCouplast == 0.) {
theCouplast = sqr(strongCoupling(q2))*weakCoupling(q2);
Energy mt = theMSSM->mass(q2, thetop);
if( higgs == ParticleID::h0 || higgs == ParticleID::H0 ) {
setNParticles(5);
masses.insert(masses.begin(), theSqmass.begin(), theSqmass.end());
masses.push_back(mt);
type.resize(5, PDT::Spin0);
type[4] = PDT::Spin1Half;
couplings.resize(5, make_pair(0., 0.));
Energy mb = theMSSM->mass(q2, thebot);
complex<Energy> brac1 = theZfact*theQb11*(0.5 + theMSSM->ed()*theSw*theSw);
complex<Energy> brac2 = theZfact*theQt11*(0.5 - theMSSM->eu()*theSw*theSw);
complex<Energy> brac3 = theZfact*theQb22*theMSSM->ed()*theSw*theSw;
complex<Energy> brac4 = theZfact*theQt22*theMSSM->eu()*theSw*theSw;
if( higgs == ParticleID::h0 ) {
Complex coup =
(theQb11*mb*mb*theSinA/theMw/theCosB - theSinApB*brac1)*UnitRemoval::InvE;
couplings[0] = make_pair(coup, coup);
coup = (theSinApB*brac2
- theQt11*mt*mt*theCosA/theMw/theSinB)*UnitRemoval::InvE;
couplings[1] = make_pair(coup, coup);
coup = (theQb22*mb*mb*theSinA/theMw/theCosB
+ theSinApB*brac3)*UnitRemoval::InvE;
couplings[2] = make_pair(coup, coup);
coup = (theSinApB*brac4
- theQt22*mt*mt*theCosA/theMw/theSinB)*UnitRemoval::InvE;
couplings[3] = make_pair(coup, coup);
coup = -(mt*theCosA/2./theMw/theSinB);
couplings[4] = make_pair(coup, coup);
}
else {
Complex coup = (theCosApB*brac1
- theQb11*mb*mb*theCosA/theMw/theSinB)*UnitRemoval::InvE;
couplings[0] = make_pair(coup, coup);
coup = -(theCosApB*brac2
+ theQt11*mt*mt*theSinA/theMw/theSinB)*UnitRemoval::InvE;
couplings[1] = make_pair(coup, coup);
coup = -(theCosApB*brac3
+ theQb22*mb*mb*theCosA/theMw/theCosB)*UnitRemoval::InvE;
couplings[2] = make_pair(coup, coup);
coup = -(theSinApB*brac4
+ theQt22*mt*mt*theSinA/theMw/theSinB)*UnitRemoval::InvE;
couplings[3] = make_pair(coup, coup);
coup = -mt*theSinA/2./theMw/theSinB;
couplings[4] = make_pair(coup, coup);
}
}
else {
setNParticles(1);
masses.resize(1, mt);
type.resize(1, PDT::Spin1Half);
Complex coup = Complex(0., 1.)*mt/2./theMw/theTanB;
couplings.resize(1, make_pair(coup, -coup));
}
theq2last = q2;
theHaveCoeff = false;
}
setNorm(theCouplast);
//calculate tensor coefficients
if( !theHaveCoeff ) {
VVSLoopVertex::setCoupling(q2, particle2, particle3, particle1);
theHaveCoeff = true;
}
}
diff --git a/Models/Susy/SSHHHVertex.cc b/Models/Susy/SSHHHVertex.cc
--- a/Models/Susy/SSHHHVertex.cc
+++ b/Models/Susy/SSHHHVertex.cc
@@ -1,175 +1,175 @@
// -*- C++ -*-
//
// SSHHHVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSHHHVertex class.
//
#include "SSHHHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include <cassert>
using namespace ThePEG::Helicity;
using namespace Herwig;
SSHHHVertex::SSHHHVertex() : theMw(ZERO), theZfact(ZERO), theSw(0.),
theSbpa(0.), theCbpa(0.), theSbma(0.),
theCbma(0.), theS2a(0.), theC2a(0.),
theS2b(0.), theC2b(0.), theElast(0.),
theq2last(ZERO)
{
vector<long> first, second, third;
int sec = 35;
for(long h = 25; h < 36; h += 10) {
//self-coupling
first.push_back(h);
second.push_back(h);
third.push_back(h);
//first-second
first.push_back(h);
second.push_back(sec);
third.push_back(sec);
//pseudo-scalar
first.push_back(h);
second.push_back(36);
third.push_back(36);
//charged higgs
first.push_back(h);
second.push_back(37);
third.push_back(37);
sec = 25;
}
setList(first, second, third);
}
void SSHHHVertex::doinit() {
SSSVertex::doinit();
tMSSMPtr theMSSM = dynamic_ptr_cast<tMSSMPtr>(generator()->standardModel());
if( !theMSSM )
throw InitException()
<< "SSHHHVertex::doinit() - The pointer to the MSSM object is null!"
<< Exception::abortnow;
theMw = getParticleData(ParticleID::Wplus)->mass();
- theSw = sqrt(theMSSM->sin2ThetaW());
+ theSw = sqrt(sin2ThetaW());
theZfact = getParticleData(ParticleID::Z0)->mass()/2./theSw/sqrt(1. - sqr(theSw));
double tanbeta = theMSSM->tanBeta();
double sinbeta = tanbeta/sqrt(1. + sqr(tanbeta));
double cosbeta = sqrt(1. - sqr(sinbeta));
double sinalpha = sin(theMSSM->higgsMixingAngle());
double cosalpha = sqrt( 1. - sqr(sinalpha) );
theS2a = 2.*sinalpha*cosalpha;
theS2b = 2.*sinbeta*cosbeta;
theC2a = cosalpha*cosalpha - sinalpha*sinalpha;
theC2b = cosbeta*cosbeta - sinbeta*sinbeta;
theSbpa = sinbeta*cosalpha + sinalpha*cosbeta;
theCbpa = cosbeta*cosalpha - sinbeta*sinalpha;
theSbma = sinbeta*cosalpha - sinalpha*cosbeta;
theCbma = cosbeta*cosalpha + sinbeta*sinalpha;
orderInGem(1);
orderInGs(0);
}
void SSHHHVertex::persistentOutput(PersistentOStream & os) const {
os << ounit(theMw,GeV) << ounit(theZfact,GeV) << theSw
<< theSbpa << theCbpa << theSbma << theCbma << theS2a << theC2a
<< theS2b << theC2b;
}
void SSHHHVertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(theMw,GeV) >> iunit(theZfact,GeV) >> theSw
>> theSbpa >> theCbpa >> theSbma >> theCbma >> theS2a >> theC2a
>> theS2b >> theC2b;
}
ClassDescription<SSHHHVertex> SSHHHVertex::initSSHHHVertex;
// Definition of the static class description member.
void SSHHHVertex::Init() {
static ClassDocumentation<SSHHHVertex> documentation
("This is the coupling of a higgs to a pair of higgs bosons "
"in the MSSM.");
}
void SSHHHVertex::setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
tcPDPtr particle3) {
long ids[3] = { abs(particle1->id()), abs(particle2->id()),
abs(particle3->id()) };
long h1(0), h2(0), h3(0), hc(0);
for(unsigned int i = 0; i < 3; ++i) {
if( ids[i] == ParticleID::h0) ++h1;
else if( ids[i] == ParticleID::H0) ++h2;
else if( ids[i] == ParticleID::A0) ++h3;
else if( ids[i] == ParticleID::Hplus) ++hc;
else {
throw HelicityConsistencyError()
<< "SSHHHVertex::setCoupling - There is an unrecognised particle in "
<< "this vertex! " << ids[i] << Exception::runerror;
break;
}
}
assert(h1 + h2 + h3 + hc == 3);
complex<Energy> coupling;
bool unrec(false);
if( h1 == 3 || h2 == 3 ) {
coupling = -3.*theZfact*theC2a;
if( h1 == 3 )
coupling *= theCbpa;
else
coupling *= theSbpa;
}
else if( h1 == 1 ) {
if( h2 == 2 )
coupling = theZfact*( 2.*theS2a*theCbpa + theSbpa*theC2a );
else if( h3 == 2 )
coupling = -theZfact*theC2b*theSbpa;
else if( hc == 2 )
coupling = -theMw*theSbma/theSw - theZfact*theC2b*theSbpa;
else unrec = true;
}
else if( h2 == 1 ){
if( h1 == 2 )
coupling = -theZfact*( 2.*theS2a*theSbpa - theCbpa*theC2a );
else if( h3 == 2 )
coupling = theZfact*theC2b*theCbpa;
else if( hc == 2 )
coupling = -theMw*theCbma/theSw + theZfact*theC2b*theCbpa;
else unrec = true;
}
if( unrec ) {
throw HelicityConsistencyError()
<< "SSHHHVertex::setCoupling - Trying to calculate the coupling "
<< "for an unrecognised combination of particles "
<< ids[0] << " " << ids[1] << " " << ids[2] << Exception::runerror;
setNorm(0.);
return;
}
if( q2 != theq2last || theElast==0. ) {
theq2last = q2;
theElast = electroMagneticCoupling(q2);;
}
setNorm(theElast*coupling*UnitRemoval::InvE);
}
diff --git a/Models/Susy/SSHSFSFVertex.cc b/Models/Susy/SSHSFSFVertex.cc
--- a/Models/Susy/SSHSFSFVertex.cc
+++ b/Models/Susy/SSHSFSFVertex.cc
@@ -1,494 +1,494 @@
// -*- C++ -*-
//
// SSHSFSFVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSHSFSFVertex class.
//
#include "SSHSFSFVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include <cassert>
using namespace ThePEG::Helicity;
using namespace Herwig;
SSHSFSFVertex::SSHSFSFVertex() : theMix(3), theTriC(9, complex<Energy>(ZERO)),
theSinA(0.0),
theCosA(0.0), theSinB(0.0), theCosB(0.0),
theTanB(0.0), theSinAB(0.0), theCosAB(0.0),
theMw(ZERO), theMz(ZERO), theMu(ZERO),
theSw(0.0), theCw(0.0), theCoupLast(ZERO),
theq2Last(ZERO), theHLast(0), theSF1Last(0),
theSF2Last(0) {
vector<long> first,second,third;
int higgs = 25;
//h0,H0
for(unsigned int i = 0; i < 2; ++i) {
if( i == 1 ) higgs = 35;
//quarks
for(unsigned int j = 1; j < 7; ++j) {
long lj = 1000000 + j;
long rj = 2000000 + j;
//LLbar
first.push_back(higgs);
second.push_back(lj);
third.push_back(-lj);
//RRbar
first.push_back(higgs);
second.push_back(rj);
third.push_back(-rj);
//LRbar
first.push_back(higgs);
second.push_back(lj);
third.push_back(-rj);
//RLbar
first.push_back(higgs);
second.push_back(rj);
third.push_back(-lj);
}
for(unsigned int j = 11; j < 17; ++j) {
long lj = 1000000 + j;
long rj = 2000000 + j;
first.push_back(higgs);
second.push_back(lj);
third.push_back(-lj);
if( j % 2 != 0) {
first.push_back(higgs);
second.push_back(rj);
third.push_back(-rj);
//LRbar
first.push_back(higgs);
second.push_back(lj);
third.push_back(-rj);
//RLbar
first.push_back(higgs);
second.push_back(rj);
third.push_back(-lj);
}
}
}
//A0
for(unsigned int j = 1; j < 7; ++j) {
long lj = 1000000 + j;
long rj = 2000000 + j;
//LRbar
first.push_back(36);
second.push_back(lj);
third.push_back(-rj);
//RLbar
first.push_back(36);
second.push_back(rj);
third.push_back(-lj);
}
for(unsigned int j = 11; j < 17; j += 2) {
long lj = 1000000 + j;
long rj = 2000000 + j;
first.push_back(36);
second.push_back(lj);
third.push_back(-rj);
first.push_back(36);
second.push_back(rj);
third.push_back(-lj);
}
//outgoing H+
for(long ii = 2; ii < 7; ii += 2) {
//LL
first.push_back(37);
second.push_back( 999999 + ii);
third.push_back(-1000000 - ii);
//RR
first.push_back(37);
second.push_back(1999999 + ii);
third.push_back(-2000000 - ii);
//RL
first.push_back(37);
second.push_back(1999999 + ii);
third.push_back(-1000000 - ii);
//LR
first.push_back(37);
second.push_back( 999999 + ii);
third.push_back(-2000000 - ii);
}
for(long ii = 11; ii < 17; ii += 2) {
first.push_back(37);
second.push_back(1000000 + ii);
third.push_back(-1000001 - ii);
first.push_back(37);
second.push_back(2000000 + ii);
third.push_back(-1000001 - ii);
}
//outgoing H-
for(long ii = 2; ii < 7; ii += 2) {
//LL
first.push_back(-37);
second.push_back(1000000 + ii);
third.push_back(- 999999 - ii);
//RR
first.push_back(-37);
second.push_back(2000000 + ii);
third.push_back(-1999999 - ii);
//RL
first.push_back(-37);
second.push_back(1000000 + ii);
third.push_back(-1999999 - ii);
//LR
first.push_back(-37);
second.push_back(2000000 + ii);
third.push_back(- 999999 - ii);
}
for(long ii = 11; ii < 17; ii += 2) {
first.push_back(-37);
second.push_back(1000001 + ii);
third.push_back(-1000000 - ii);
first.push_back(-37);
second.push_back(1000001 + ii);
third.push_back(-2000000 - ii);
}
setList(first, second, third);
}
void SSHSFSFVertex::doinit() {
SSSVertex::doinit();
tMSSMPtr theMSSM = dynamic_ptr_cast<tMSSMPtr>(generator()->standardModel());
if( !theMSSM )
throw InitException() << "SSHSFSFVertex::doinit - A problem occurred"
<< "while trying to cast the SM pointer to "
<< "a Susy one." << Exception::abortnow;
//mixing vector should have been sized correctly already
assert( theMix.size() == 3 );
theMix[0] = theMSSM->stopMix();
theMix[1] = theMSSM->sbottomMix();
theMix[2] = theMSSM->stauMix();
if(!theMix[0] || !theMix[1] || !theMix[2])
throw InitException() << "SSHSFSFVertex::doinit - "
<< "A null mixing matrix pointer. stop: " << theMix[0]
<< " sbottom: " << theMix[1] << " stau: " << theMix[2]
<< Exception::abortnow;
//trilinear vector should have been sized correctly already
assert( theTriC.size() == 9 );
//vector has been zeroed in constructor
theTriC[4]=theMSSM->bottomTrilinear().real();
theTriC[5]=theMSSM->topTrilinear().real();
theTriC[8]=theMSSM->tauTrilinear().real();
//Masses
theMw = getParticleData(ParticleID::Wplus)->mass();
theMz = getParticleData(ParticleID::Z0)->mass();
//parameters
theSinA = sin(theMSSM->higgsMixingAngle());
theCosA = sqrt(1. - sqr(theSinA));
theTanB = theMSSM->tanBeta();
theMu = theMSSM->muParameter();
theSinB = theTanB/sqrt(1. + sqr(theTanB));
theCosB = sqrt( 1. - sqr(theSinB) );
theSinAB = theSinA*theCosB + theCosA*theSinB;
theCosAB = theCosA*theCosB - theSinA*theSinB;
- theSw = sqrt(theMSSM->sin2ThetaW());
- theCw = sqrt(1. - theMSSM->sin2ThetaW());
+ theSw = sqrt(sin2ThetaW());
+ theCw = sqrt(1. - sin2ThetaW());
orderInGem(1);
orderInGs(0);
}
void SSHSFSFVertex::persistentOutput(PersistentOStream & os) const {
os << theMix << theSinA << theCosA << theSinB
<< theCosB << theTanB << ounit(theMu, GeV) << theSinAB << theCosAB
<< ounit(theMw,GeV) << ounit(theMz,GeV) << theSw << theCw
<< ounit(theTriC,GeV);
}
void SSHSFSFVertex::persistentInput(PersistentIStream & is, int) {
is >> theMix >> theSinA >> theCosA >> theSinB
>> theCosB >> theTanB >> iunit(theMu, GeV) >> theSinAB >> theCosAB
>> iunit(theMw,GeV) >> iunit(theMz,GeV) >> theSw >> theCw
>> iunit(theTriC,GeV);
}
ClassDescription<SSHSFSFVertex> SSHSFSFVertex::initSSHSFSFVertex;
// Definition of the static class description member.
void SSHSFSFVertex::Init() {
static ClassDocumentation<SSHSFSFVertex> documentation
("The coupling of an MSSM Higgs to a pair of sfermions.");
}
void SSHSFSFVertex::setCoupling(Energy2 q2, tcPDPtr particle1,
tcPDPtr particle2, tcPDPtr particle3) {
long id1(abs(particle1->id())), id2(abs(particle2->id())),
id3(abs(particle3->id())), higgsID(0), sq1ID(0), sq2ID(0);
if( id1 == ParticleID::h0 || id1 == ParticleID::H0 ||
id1 == ParticleID::A0 || id1 == ParticleID::Hplus ) {
higgsID = id1;
sq1ID = id2;
sq2ID = id3;
}
else if( id2 == ParticleID::h0 || id2 == ParticleID::H0 ||
id2 == ParticleID::A0 || id2 == ParticleID::Hplus ) {
higgsID = id2;
sq1ID = id1;
sq2ID = id3;
}
else if( id3 == ParticleID::h0 || id3 == ParticleID::H0 ||
id3 == ParticleID::A0 || id3 == ParticleID::Hplus ) {
higgsID = id3;
sq1ID = id1;
sq2ID = id2;
}
else {
throw HelicityConsistencyError()
<< "SSHSFSFVertex::setCoupling - There is no higgs particle in "
<< "this vertex. Particles: " << id1 << " " << id2 << " " << id3
<< Exception::warning;
return;
}
assert( higgsID != 0 && sq1ID != 0 && sq2ID != 0);
if( q2 != theq2Last || thegLast==0.) {
thegLast = weakCoupling(q2);
theq2Last = q2;
}
if( higgsID == theHLast && sq1ID == theSF1Last && sq2ID == theSF2Last) {
setNorm(thegLast*theCoupLast*UnitRemoval::InvE);
return;
}
theHLast = higgsID;
theSF1Last = sq1ID;
theSF2Last = sq2ID;
if( higgsID == ParticleID::Hplus )
chargedHiggs(sq1ID, sq2ID);
else {
long smID(0);
unsigned int alpha(sq1ID/1000000 - 1), beta(sq2ID/1000000 - 1);
if( sq1ID/1000000 == 2 )
smID = sq1ID - 2000000;
else
smID = sq1ID - 1000000;
if( smID < 7 ) {
if( smID % 2 == 0 )
upSF(higgsID, smID, alpha, beta);
else
downSF(higgsID, smID, alpha, beta);
}
else
leptonSF(higgsID, smID, alpha, beta);
}
setNorm(thegLast*theCoupLast*UnitRemoval::InvE);
}
void SSHSFSFVertex::downSF(long higgs, long smID,
unsigned int alpha, unsigned int beta) {
assert( smID < 7 && smID % 2 != 0);
Energy fmass = getParticleData(smID)->mass();
double mfacta = 0.5*fmass/theMw;
if( higgs == ParticleID::A0 ){
theCoupLast = -Complex(1.,0.)*mfacta*(theTriC[smID - 1]*theTanB + theMu);
return;
}
Energy mfactb = sqr(fmass)/theMw/theCosB;
Energy facta = theMz/theCw;
double factb = generator()->standardModel()->ed()*theSw*theSw;
//mixing parameters
Complex q1a(0.), q1b(0.), q2a(0.), q2b(0.);
if( smID == 1 || smID == 3) {
q1a = (alpha == 0) ? 1.0 : 0.0;
q1b = (beta == 0) ? 1.0 : 0.0;
q2a = (alpha == 0) ? 0.0 : 1.0;
q2b = (beta == 0) ? 0.0 : 1.0;
}
else {
q1a = (*theMix[1])(alpha, 0);
q1b = (*theMix[1])(beta, 0);
q2a = (*theMix[1])(alpha, 1);
q2b = (*theMix[1])(beta, 1);
}
Complex fbrac = (q1a*q1b*(0.5 + factb) - factb*q2a*q2b);
Complex sbrac = (q1a*q1b + q2a*q2b);
Complex tbrac = (q2a*q1b + q1a*q2b);
if( higgs == ParticleID::h0) {
theCoupLast = -facta*theSinAB*fbrac + mfactb*theSinA*sbrac
+ mfacta*(theTriC[smID - 1]*theSinA + theMu*theCosA)*tbrac/theCosB;
}
else if( higgs == ParticleID::H0 ) {
theCoupLast = facta*theCosAB*fbrac - mfactb*theCosA*sbrac
+ mfacta*(theMu*theSinA - theTriC[smID - 1]*theCosA)*tbrac/theCosB;
}
else
throw HelicityConsistencyError()
<< "SSHSFSFVertex::downSF - Unrecognised higgs particle "
<< higgs << Exception::warning;
}
void SSHSFSFVertex::upSF(long higgs, long smID,
unsigned int alpha, unsigned int beta) {
assert( smID < 7 && smID % 2 == 0);
Energy fmass = getParticleData(smID)->mass();
double mfacta = 0.5*fmass/theMw;
if( higgs == ParticleID::A0 ){
theCoupLast = -Complex(1.,0.)*mfacta*(theTriC[smID - 1]/theTanB + theMu);
return;
}
Energy mfactb = sqr(fmass)/theMw/theSinB;
Energy facta = theMz/theCw;
double factb = generator()->standardModel()->eu()*theSw*theSw;
//mixing parameters
Complex q1a(0.), q1b(0.), q2a(0.), q2b(0.);
if( smID == 2 || smID == 4) {
q1a = (alpha == 0) ? 1.0 : 0.0;
q1b = (beta == 0) ? 1.0 : 0.0;
q2a = (alpha == 0) ? 0.0 : 1.0;
q2b = (beta == 0) ? 0.0 : 1.0;
}
else {
q1a = (*theMix[2])(alpha, 0);
q1b = (*theMix[2])(beta, 0);
q2a = (*theMix[2])(alpha, 1);
q2b = (*theMix[2])(beta, 1);
}
Complex fbrac = (q1a*q1b*(0.5 - factb) - factb*q2a*q2b);
Complex sbrac = (q1a*q1b + q2a*q2b);
Complex tbrac = (q2a*q1b + q1a*q2b);
if( higgs == ParticleID::h0) {
theCoupLast = facta*theSinAB*fbrac - mfactb*theCosA*sbrac
- mfacta*(theTriC[smID - 1]*theCosA + theMu*theSinA)*tbrac/theSinB;
}
else if( higgs == ParticleID::H0 ) {
theCoupLast = -facta*theCosAB*fbrac - mfactb*theSinA*sbrac
- mfacta*(theTriC[smID - 1]*theSinA - theMu*theCosA )*tbrac/theSinB;
}
else
throw HelicityConsistencyError()
<< "SSHSFSFVertex::upSF - Unrecognised higgs particle "
<< higgs << Exception::warning;
}
void SSHSFSFVertex::leptonSF(long higgs, long smID,
unsigned int alpha, unsigned int beta) {
assert( smID >= 11 && smID <= 16 );
Energy facta = theMz/theCw;
if( smID % 2 == 0 ) {
theCoupLast = complex<Energy>(facta/2.);
if( higgs == ParticleID::h0)
theCoupLast *= theSinAB;
else
theCoupLast *= -theCosAB;
return;
}
Energy fmass = getParticleData(smID)->mass();
double mfacta = fmass/2./theMw;
if( higgs == ParticleID::A0 ) {
theCoupLast = -Complex(0.,1.)*mfacta*(theTriC[(smID + 1)/2]*theTanB + theMu);
return;
}
Energy mfactb = fmass*fmass/theMw/theCosB;
double factb = theSw*theSw;
//mixing parameters
Complex l1a(0.), l1b(0.), l2a(0.), l2b(0.);
if( smID == 11 || smID == 13) {
l1a = (alpha == 0) ? 1.0 : 0.0;
l1b = (beta == 0) ? 1.0 : 0.0;
l2a = (alpha == 0) ? 0.0 : 1.0;
l2b = (beta == 0) ? 0.0 : 1.0;
}
else {
l1a = (*theMix[2])(alpha, 0);
l1b = (*theMix[2])(beta, 0);
l2a = (*theMix[2])(alpha, 1);
l2b = (*theMix[2])(beta, 1);
}
Complex fbrac = (l1a*l1b*(0.5 - factb) + factb*l2a*l2b);
Complex sbrac = (l1a*l1b + l2a*l2b);
Complex tbrac = (l2a*l1b + l1a*l2b);
if( higgs == ParticleID::h0) {
theCoupLast = -facta*theSinAB*fbrac + mfactb*theSinA*sbrac
+ mfacta*(theTriC[(smID + 1)/2]*theSinA + theMu*theCosA)*tbrac/theCosB;
}
else if( higgs == ParticleID::H0 ) {
theCoupLast = facta*theCosAB*fbrac - mfactb*theCosA*sbrac
+ mfacta*(theMu*theSinA - theTriC[(smID + 1)/2]*theCosA)*tbrac/theCosB;
}
else
throw HelicityConsistencyError()
<< "SSHSFSFVertex::leptonSF - Unrecognised higgs particle "
<< higgs << Exception::warning;
}
void SSHSFSFVertex::chargedHiggs(long id1, long id2) {
//have id1 as up-type
if( id1 % 2 != 0)
swap(id1, id2);
unsigned int beta(0);
if( id2/1000000 == 2 )
beta = 1;
else
beta = 0;
long smdID = (beta == 0) ? id2 - 1000000 : id2 - 2000000;
Energy mfd = getParticleData(smdID)->mass();
Energy2 facta = sqr(theMw)*2.*theSinB*theCosB;
if( smdID == 11 || smdID == 13 || smdID == 15) {
Complex l1b = (beta == 0) ? 1.0 : 0.0;
Complex l2b = (beta == 0) ? 0.0 : 1.0;
if( smdID == 15 ) {
l1b = (*theMix[2])(beta, 0);
l2b = (*theMix[2])(beta, 1);
}
theCoupLast = ( l1b*(mfd*mfd*theTanB - facta)
+ l2b*mfd*(theTriC[(smdID + 1)/2]*theTanB + theMu)
)/theMw/sqrt(2.);
}
else {
unsigned int alpha(0);
if( id1/1000000 == 2 )
alpha = 1;
else
alpha = 0;
long smuID = (alpha == 0) ? id1 - 1000000 : id1 - 2000000;
Energy mfu = getParticleData(smuID)->mass();
Complex q1a(0.0), q1b(0.0), q2a(0.0), q2b(0.0);
if( smuID == 2 || smuID == 4 ) {
q1a = (alpha == 0) ? 1.0 : 0.0;
q2a = (alpha == 0) ? 0.0 : 1.0;
}
else {
q1a = (*theMix[0])(alpha, 0);
q2a = (*theMix[0])(1, alpha);
}
if( smdID == 1 || smdID == 3 ) {
q1b = (beta == 0) ? 1.0 : 0.0;
q2b = (beta == 0) ? 0.0 : 1.0;
}
else {
q1b = (*theMix[1])(0, beta);
q2b = (*theMix[1])(1, beta);
}
theCoupLast = ( q1a*q1b*(mfd*mfd*theTanB + mfu*mfu/theTanB - facta)
+ q2a*q2b*mfu*mfd*(theTanB + (1./theTanB))
+ q1a*q1b*mfd*(theTriC[smdID - 1]*theTanB + theMu)
+ q2a*q1b*mfu*(theMu + theTriC[(smuID + 1)/2]/theTanB)
)/theMw/sqrt(2.);
}
}
diff --git a/Models/Susy/SSNFSVertex.cc b/Models/Susy/SSNFSVertex.cc
--- a/Models/Susy/SSNFSVertex.cc
+++ b/Models/Susy/SSNFSVertex.cc
@@ -1,250 +1,250 @@
// -*- C++ -*-
//
// SSNFSVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSNFSVertex class.
//
#include "SSNFSVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
SSNFSVertex::SSNFSVertex() : _sw(0.), _cw(0.), _mw(),
_sb(0.), _cb(0.), _q2last(), _couplast(0.),
_leftlast(0.), _rightlast(0.), _id1last(0),
_id2last(0) {
vector<long> first,second,third;
long neut[5] = {1000022, 1000023, 1000025, 1000035, 1000045};
for(unsigned int nl = 0; nl < 5; ++nl) {
//quarks
for(long ix=1;ix<7;++ix){
first.push_back(neut[nl]);
second.push_back(ix);
third.push_back(-(1000000+ix));
first.push_back(neut[nl]);
second.push_back(ix);
third.push_back(-(2000000+ix));
first.push_back(neut[nl]);
second.push_back(-ix);
third.push_back((1000000+ix));
first.push_back(neut[nl]);
second.push_back(-ix);
third.push_back((2000000+ix));
}
//leptons
for(long ix=11;ix<17;++ix){
first.push_back(neut[nl]);
second.push_back(ix);
third.push_back(-(1000000+ix));
first.push_back(neut[nl]);
second.push_back(-ix);
third.push_back((1000000+ix));
if( ix % 2 != 0 ) {
first.push_back(neut[nl]);
second.push_back(ix);
third.push_back(-(2000000+ix));
first.push_back(neut[nl]);
second.push_back(-ix);
third.push_back((2000000+ix));
}
}
}
setList(first,second,third);
}
void SSNFSVertex::persistentOutput(PersistentOStream & os) const {
os << _stop << _sbot << _stau << _nmix << _theSS << _sw << _cw
<< ounit(_mw,GeV) << _sb << _cb;
}
void SSNFSVertex::persistentInput(PersistentIStream & is, int) {
is >> _stop >> _sbot >> _stau >> _nmix >> _theSS >> _sw >> _cw
>> iunit(_mw,GeV) >> _sb >> _cb;
}
void SSNFSVertex::doinit() {
FFSVertex::doinit();
_theSS = dynamic_ptr_cast<MSSMPtr>(generator()->standardModel());
if(!_theSS)
throw InitException() << "SSGSSVertex::doinit() - "
<< "The model pointer is null."
<< Exception::abortnow;
_stop = _theSS->stopMix();
_sbot = _theSS->sbottomMix();
_stau = _theSS->stauMix();
_nmix = _theSS->neutralinoMix();
if(!_stop || !_stau || !_sbot || !_nmix)
throw InitException() << "SSNFSVertex::doinit() - "
<< "A mixing matrix pointer is null."
<< " stop: " << _stop << " sbottom: "
<< _sbot << " stau: " << _stau
<< " N: " << _nmix << Exception::abortnow;
- _sw = sqrt(_theSS->sin2ThetaW());
+ _sw = sqrt(sin2ThetaW());
_mw = getParticleData(24)->mass();
double tb = _theSS->tanBeta();
_cw = sqrt(1. - sqr(_sw));
_sb = tb/sqrt(1 + sqr(tb));
_cb = sqrt(1 - sqr(_sb));
orderInGem(1);
orderInGs(0);
}
ClassDescription<SSNFSVertex> SSNFSVertex::initSSNFSVertex;
// Definition of the static class description member.
void SSNFSVertex::Init() {
static ClassDocumentation<SSNFSVertex> documentation
("The SSNFSVertex implements the coupling of a neutralino to "
"a fermion-sfermion");
}
void SSNFSVertex::setCoupling(Energy2 q2,tcPDPtr part1,
tcPDPtr part2,tcPDPtr part3, int iinc) {
long isc(abs(part3->id())), ism(abs(part1->id())),
ineut(abs(part2->id()));
tcPDPtr smfermion = part1;
if( ism / 1000000 == 1 ) {
swap( ism, ineut);
smfermion = part2;
}
if(q2!=_q2last || _couplast==0.) {
_couplast = -sqrt(2)*weakCoupling(q2);
_q2last=q2;
}
setNorm(_couplast);
if( ineut != _id1last || ism != _id2last || isc != _id3last ) {
_id1last = ineut;
_id2last = ism;
_id3last = isc;
// determine neutralino and squark eigenstates
unsigned int alpha(isc/1000000 - 1), nl(0);
switch( ineut ) {
case 1000022 : nl = 0;
break;
case 1000023 : nl = 1;
break;
case 1000025 : nl = 2;
break;
case 1000035 : nl = 3;
break;
case 1000045 : nl = 4;
break;
default : {}
}
// common primed neutralino matrices
Complex n2prime = (*_nmix)(nl,1)*_cw - (*_nmix)(nl,0)*_sw;
//handle neutrinos first
if( ism == 12 || ism == 14 || ism == 16 ) {
_leftlast = Complex(0., 0.);
_rightlast = n2prime/2./_cw;
}
else {
Complex n1prime = (*_nmix)(nl,0)*_cw + (*_nmix)(nl,1)*_sw;
tcPDPtr smf = getParticleData(ism);
double qf = smf->charge()/eplus;
Complex bracketl = qf*_sw*( conj(n1prime) - _sw*conj(n2prime)/_cw );
double y = _theSS->mass(q2, smf)/2./_mw;
double lambda(0.);
//neutralino mixing element
Complex nlf(0.);
if( ism % 2 == 0 ) {
y /= _sb;
lambda = -0.5 + qf*sqr(_sw);
nlf = (*_nmix)(nl,3);
}
else {
y /= _cb;
lambda = 0.5 + qf*sqr(_sw);
nlf = (*_nmix)(nl,2);
}
Complex bracketr = _sw*qf*n1prime - n2prime*lambda/_cw;
//heavy quarks
if( ism == 5 || ism == 6 || ism == 15 ) {
Complex ma1(0.), ma2(0.);
if( ism == 5 ) {
ma1 = (*_sbot)(alpha,0);
ma2 = (*_sbot)(alpha,1);
} else if( ism == 6 ) {
ma1 = (*_stop)(alpha,0);
ma2 = (*_stop)(alpha,1);
} else {
ma1 = (*_stau)(alpha,0);
ma2 = (*_stau)(alpha,1);
}
_leftlast = y*conj(nlf)*ma1 - ma2*bracketl;
_rightlast = y*nlf*ma2 + ma1*bracketr;
}
else {
if( alpha == 0 ) {
_leftlast = y*conj(nlf);
_rightlast = bracketr;
}
else {
_leftlast = -bracketl;
_rightlast = y*nlf;
}
}
}
}
//determine the helicity order of the vertex
tcPDPtr incoming;
switch( iinc ) {
case 1 : incoming = part1;
break;
case 2 : incoming = part2;
break;
default : incoming = part3;
}
if( incoming->iSpin() == PDT::Spin0 ) {
if( incoming->id() > 0 ) {
setLeft(_leftlast);
setRight(_rightlast);
}
else {
setLeft(conj(_rightlast));
setRight(conj(_leftlast));
}
}
else if( incoming->id() == smfermion->id() ) {
if(incoming->id() > 0) {
setLeft(conj(_rightlast));
setRight(conj(_leftlast));
}
else {
setLeft(_leftlast);
setRight(_rightlast);
}
}
else {
if( smfermion->id() < 0 ) {
setLeft(conj(_rightlast));
setRight(conj(_leftlast));
}
else {
setLeft(_leftlast);
setRight(_rightlast);
}
}
}
diff --git a/Models/Susy/SSNNZVertex.cc b/Models/Susy/SSNNZVertex.cc
--- a/Models/Susy/SSNNZVertex.cc
+++ b/Models/Susy/SSNNZVertex.cc
@@ -1,157 +1,157 @@
// -*- C++ -*-
//
// SSNNZVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSNNZVertex class.
//
#include "SSNNZVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig++/Models/Susy/MixingMatrix.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
SSNNZVertex::SSNNZVertex() : _sw(0.), _cw(0.), _id1last(0),
_id2last(0), _q2last(), _couplast(0.),
_leftlast(0.), _rightlast(0.) {
vector<long> first, second, third(25, 23);
for(unsigned int i = 0; i < 5; ++i) {
long neu1;
if(i == 0) neu1 = 1000022;
else if(i == 1) neu1 = 1000023;
else if(i == 2) neu1 = 1000025;
else if(i == 3) neu1 = 1000035;
else neu1 = 1000045;
for(unsigned int j = 0; j < 5; ++j) {
long neu2;
if(j == 0) neu2 = 1000022;
else if(j == 1) neu2 = 1000023;
else if(j == 2) neu2 = 1000025;
else if(j == 3) neu2 = 1000035;
else neu2 = 1000045;
first.push_back(neu1);
second.push_back(neu2);
}
}
setList(first, second, third);
}
void SSNNZVertex::doinit() {
FFVVertex::doinit();
tSusyBasePtr theSS = dynamic_ptr_cast<SusyBasePtr>(generator()->standardModel());
if(!theSS)
throw InitException() << "SSNNZVertex::doinit() - "
<< "The model pointer is null."
<< Exception::abortnow;
_theN = theSS->neutralinoMix();
if(!_theN)
throw InitException() << "SSNNZVertex::doinit - The neutralino "
<< "mixing matrix pointer is null."
<< Exception::abortnow;
- _sw = sqrt(theSS->sin2ThetaW());
+ _sw = sqrt(sin2ThetaW());
_cw = sqrt(1 - _sw*_sw);
orderInGem(1);
orderInGs(0);
}
void SSNNZVertex::persistentOutput(PersistentOStream & os) const {
os << _sw << _cw << _theN;
}
void SSNNZVertex::persistentInput(PersistentIStream & is, int) {
is >> _sw >> _cw >> _theN;
_id1last = 0;
_id2last = 0;
_q2last = ZERO;
_couplast = 0.;
_leftlast = 0.;
_rightlast = 0.;
}
ClassDescription<SSNNZVertex> SSNNZVertex::initSSNNZVertex;
// Definition of the static class description member.
void SSNNZVertex::Init() {
static ClassDocumentation<SSNNZVertex> documentation
("The coupling of a Z-boson to a pair of neutralinos");
}
void SSNNZVertex::setCoupling(Energy2 q2,tcPDPtr part1,
tcPDPtr part2,tcPDPtr part3) {
long ic1(0), ic2(0);
if(part1->id() == ParticleID::Z0) {
ic1 = part2->id();
ic2 = part3->id();
}
else if(part2->id() == ParticleID::Z0) {
ic1 = part1->id();
ic2 = part3->id();
}
else if(part3->id() == ParticleID::Z0) {
ic1 = part1->id();
ic2 = part2->id();
}
else
throw HelicityConsistencyError() << "There is no Z0 in the ZNNVertex!"
<< Exception::warning;
if(ic1 == ParticleID::SUSY_chi_10 || ic1 == ParticleID::SUSY_chi_20 ||
ic1 == ParticleID::SUSY_chi_30 || ic1 == ParticleID::SUSY_chi_40 ||
ic2 == ParticleID::SUSY_chi_10 || ic2 == ParticleID::SUSY_chi_20 ||
ic2 == ParticleID::SUSY_chi_30 || ic2 == ParticleID::SUSY_chi_40 ||
ic1 == 1000045 || ic2 == 1000045 ) {
if(q2 != _q2last || _couplast==0.) {
_q2last = q2;
_couplast = weakCoupling(q2)/_cw;
}
if(ic1 != _id1last || ic2 != _id2last) {
_id1last = ic1;
_id2last = ic2;
unsigned int neu1(ic1 - 1000022), neu2(ic2 - 1000022);
if(neu1 > 1) {
if(ic1 == 1000025)
neu1 = 2;
else if(ic1 == 1000035)
neu1 = 3;
else
neu1 = 4;
}
if(neu2 > 1) {
if(ic2 == 1000025)
neu2 = 2;
else if(ic2 == 1000035)
neu2 = 3;
else
neu2 = 4;
}
_leftlast = 0.5*( (*_theN)(neu1, 3)*conj((*_theN)(neu2, 3)) -
(*_theN)(neu1, 2)*conj((*_theN)(neu2, 2)) );
_rightlast = -conj(_leftlast);
}
setNorm(_couplast);
setLeft(_leftlast);
setRight(_rightlast);
}
else
throw HelicityConsistencyError() << "A particle other than a Z0 "
<< "or a ~chi_i0 exists in the "
<< "SSNNZVertex " << ic1 << " "
<< ic2 << Exception::warning;
}
diff --git a/Models/Susy/SSWHHVertex.cc b/Models/Susy/SSWHHVertex.cc
--- a/Models/Susy/SSWHHVertex.cc
+++ b/Models/Susy/SSWHHVertex.cc
@@ -1,183 +1,183 @@
// -*- C++ -*-
//
// SSWHHVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSWHHVertex class.
//
#include "SSWHHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include <cassert>
using namespace ThePEG::Helicity;
using namespace Herwig;
SSWHHVertex::SSWHHVertex() :
theSw(0.), theS2w(0.), theC2w(0.), thesbma(0.), thecbma(0.),
theGBlast(0), theHlast(0), theCouplast(0.), theq2last(ZERO),
theElast(0.) {
vector<long> first, second, third;
//photon
first.push_back(22);
second.push_back(37);
third.push_back(-37);
//Z
first.push_back(23);
second.push_back(36);
third.push_back(25);
first.push_back(23);
second.push_back(36);
third.push_back(35);
first.push_back(23);
second.push_back(37);
third.push_back(-37);
//outgoing W+
first.push_back(24);
second.push_back(-37);
third.push_back(25);
first.push_back(24);
second.push_back(-37);
third.push_back(35);
first.push_back(24);
second.push_back(-37);
third.push_back(36);
//outgoing W-
first.push_back(-24);
second.push_back(37);
third.push_back(25);
first.push_back(-24);
second.push_back(37);
third.push_back(35);
first.push_back(-24);
second.push_back(37);
third.push_back(36);
setList(first, second, third);
}
void SSWHHVertex::doinit() {
VSSVertex::doinit();
tMSSMPtr theMSSM = dynamic_ptr_cast<tMSSMPtr>(generator()->standardModel());
if( !theMSSM )
throw InitException()
<< "SSWHHVertex::doinit() - The pointer to the MSSM object is null!"
<< Exception::abortnow;
- theSw = sqrt(theMSSM->sin2ThetaW());
+ theSw = sqrt(sin2ThetaW());
double cw = sqrt(1. - sqr(theSw));
theS2w = 2.*theSw*cw;
theC2w = cw*cw - theSw*theSw;
double sina = sin(theMSSM->higgsMixingAngle());
double cosa = sqrt(1. - sqr(sina));
double tanb = theMSSM->tanBeta();
double sinb = tanb/sqrt(1. + sqr(tanb));
double cosb = sqrt( 1. - sqr(sinb) );
thesbma = sinb*cosa - sina*cosb;
thecbma = cosa*cosb + sina*sinb;
orderInGs(0);
orderInGem(1);
}
void SSWHHVertex::persistentOutput(PersistentOStream & os) const {
os << theSw << theS2w << theC2w << thesbma << thecbma;
}
void SSWHHVertex::persistentInput(PersistentIStream & is, int) {
is >> theSw >> theS2w >> theC2w >> thesbma >> thecbma;
}
ClassDescription<SSWHHVertex> SSWHHVertex::initSSWHHVertex;
// Definition of the static class description member.
void SSWHHVertex::Init() {
static ClassDocumentation<SSWHHVertex> documentation
("The coupling of a pair of higgs bosons and a SM gauge boson");
}
void SSWHHVertex::setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
tcPDPtr particle3) {
long id1(abs(particle1->id())), id2(abs(particle2->id())),
id3(abs(particle3->id())), gboson(0), h1ID(0), h2ID(0);
if( id1 == ParticleID::Z0 || id1 == ParticleID::gamma ||
id1 == ParticleID::Wplus ) {
gboson = id1;
h1ID = id2;
h2ID = id3;
}
else if( id2 == ParticleID::Z0 || id2 == ParticleID::gamma ||
id2 == ParticleID::Wplus ) {
gboson = id2;
h1ID = id1;
h2ID = id3;
}
else if( id3 == ParticleID::Z0 || id3 == ParticleID::gamma ||
id3 == ParticleID::Wplus ) {
gboson = id3;
h1ID = id1;
h2ID = id2;
}
else {
throw HelicityConsistencyError()
<< "SSWHHVertex::setCoupling - There is no gauge boson particle in "
<< "this vertex. Particles: " << id1 << " " << id2 << " " << id3
<< Exception::warning;
return;
}
long higgs(0);
if( gboson == ParticleID::Wplus )
higgs = (h1ID == ParticleID::Hplus) ? h2ID : h1ID;
else
higgs = (h1ID >= ParticleID::A0) ? h2ID : h1ID;
if( higgs != ParticleID::h0 && higgs != ParticleID::H0 &&
higgs != ParticleID::A0 && higgs != ParticleID::Hplus) {
throw HelicityConsistencyError()
<< "SSWHHVertex::setCoupling - There is no higgs in this "
<< "this vertex. " << higgs << Exception::warning;
setNorm(0.0);
return;
}
if( gboson != theGBlast || higgs != theHlast ) {
theGBlast = gboson;
theHlast = higgs;
//photon
if( gboson == ParticleID::gamma )
theCouplast = 1.;
else if( gboson == ParticleID::Z0 ) {
if( higgs == ParticleID::Hplus )
theCouplast = theC2w/theS2w;
else if( higgs == ParticleID::h0 )
theCouplast = -Complex(0., 1.)*thecbma/theS2w;
else
theCouplast = Complex(0., 1.)*thesbma/theS2w;
}
else {
if( higgs == ParticleID::h0 ) {
theCouplast = -0.5*thecbma/theSw;
}
else if( higgs == ParticleID::H0)
theCouplast = 0.5*thesbma/theSw;
else
theCouplast = Complex(0., 0.5)/theSw;
}
}
if( q2 != theq2last || theElast==0.) {
theq2last = q2;
theElast = electroMagneticCoupling(q2);
}
setNorm(theElast*theCouplast);
}
diff --git a/Models/Susy/SSWSSVertex.cc b/Models/Susy/SSWSSVertex.cc
--- a/Models/Susy/SSWSSVertex.cc
+++ b/Models/Susy/SSWSSVertex.cc
@@ -1,288 +1,288 @@
// -*- C++ -*-
//
// SSWSSVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSWSSVertex class.
//
#include "SSWSSVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
SSWSSVertex::SSWSSVertex():_sw(0.), _cw(0.), _q2last(),_couplast(0.),
_ulast(0), _dlast(0), _gblast(0),
_factlast(0.) {
vector<long> first,second,third;
//W-
//LL-squarks
for(long ix=1000001;ix<1000006;ix+=2) {
first.push_back(-24);
second.push_back(ix+1);
third.push_back(-ix);
}
//1-2 stop sbottom
first.push_back(-24);
second.push_back(1000006);
third.push_back(-2000005);
//2-1 stop sbottom
first.push_back(-24);
second.push_back(2000006);
third.push_back(-1000005);
//2-2 stop sbottom
first.push_back(-24);
second.push_back(2000006);
third.push_back(-2000005);
//LL-sleptons
for(long ix=1000011;ix<1000016;ix+=2) {
first.push_back(-24);
second.push_back(-ix);
third.push_back(ix+1);
}
//2-L stau
first.push_back(-24);
second.push_back(-2000015);
third.push_back(1000016);
//W+
for(long ix=1000001;ix<1000006;ix+=2) {
first.push_back(24);
second.push_back(-(ix+1));
third.push_back(ix);
}
//1-2 stop sbottom
first.push_back(24);
second.push_back(-1000006);
third.push_back(2000005);
//2-1 stop sbottom
first.push_back(24);
second.push_back(-2000006);
third.push_back(1000005);
//2-2 stop sbottom
first.push_back(24);
second.push_back(-2000006);
third.push_back(2000005);
//LL-sleptons
for(long ix=1000011;ix<1000016;ix+=2) {
first.push_back(24);
second.push_back(ix);
third.push_back(-ix-1);
}
//2-L stau
first.push_back(24);
second.push_back(2000015);
third.push_back(-1000016);
//---Z0----
//LL-sleptons
for(long ix=1000011;ix<1000017;++ix) {
first.push_back(23);
second.push_back(ix);
third.push_back(-ix);
}
//RR-sleptons
for(long ix=2000011;ix<2000016;ix+=2) {
first.push_back(23);
second.push_back(ix);
third.push_back(-ix);
}
//L-Rbar stau
first.push_back(23);
second.push_back(1000015);
third.push_back(-2000015);
//Lbar-R stau
first.push_back(23);
second.push_back(-1000015);
third.push_back(2000015);
//LL squarks
for(long ix=1000001;ix<1000007;++ix) {
first.push_back(23);
second.push_back(ix);
third.push_back(-ix);
}
//RR squarks
for(long ix=2000001;ix<2000007;++ix) {
first.push_back(23);
second.push_back(ix);
third.push_back(-ix);
}
//L-Rbar stop
first.push_back(23);
second.push_back(1000006);
third.push_back(-2000006);
//Lbar-R stop
first.push_back(23);
second.push_back(-1000006);
third.push_back(2000006);
//L-Rbar sbottom
first.push_back(23);
second.push_back(1000005);
third.push_back(-2000005);
//Lbar-R sbottom
first.push_back(23);
second.push_back(-1000005);
third.push_back(2000005);
//----gamma----
//sleptons
for(long ix=1000011;ix<1000016;ix+=2) {
first.push_back(22);
second.push_back(ix);
third.push_back(-ix);
}
for(long ix=2000011;ix<2000016;ix+=2) {
first.push_back(22);
second.push_back(ix);
third.push_back(-ix);
}
//squarks
for(long ix=1000001;ix<1000007;++ix) {
first.push_back(22);
second.push_back(ix);
third.push_back(-ix);
}
for(long ix=2000001;ix<2000007;++ix) {
first.push_back(22);
second.push_back(ix);
third.push_back(-ix);
}
setList(first,second,third);
}
void SSWSSVertex::doinit() {
VSSVertex::doinit();
tMSSMPtr theSS = dynamic_ptr_cast<MSSMPtr>(generator()->standardModel());
if(!theSS)
throw InitException() << "SSWSSVertex::doinit() - "
<< "The model pointer is null."
<< Exception::abortnow;
- _sw = sqrt(theSS->sin2ThetaW());
+ _sw = sqrt(sin2ThetaW());
_cw = sqrt( 1. - sqr(_sw) );
_stop = theSS->stopMix();
_sbottom = theSS->sbottomMix();
_stau = theSS->stauMix();
if(!_stop || !_stau || !_sbottom)
throw InitException() << "SSWSSVertex::doinit() - "
<< "A mixing matrix pointer is null."
<< " stop: " << _stop << " sbottom: " << _sbottom
<< " stau: " << _stau << Exception::abortnow;
orderInGem(1);
orderInGs(0);
}
void SSWSSVertex::persistentOutput(PersistentOStream & os) const {
os << _sw << _cw << _stau << _stop << _sbottom;
}
void SSWSSVertex::persistentInput(PersistentIStream & is, int) {
is >> _sw >> _cw >> _stau >> _stop >> _sbottom;
}
ClassDescription<SSWSSVertex> SSWSSVertex::initSSWSSVertex;
// Definition of the static class description member.
void SSWSSVertex::Init() {
static ClassDocumentation<SSWSSVertex> documentation
("This is the implementation of the coupling of an SM boson "
"a pair of sfermions");
}
void SSWSSVertex::setCoupling(Energy2 q2,tcPDPtr part1,
tcPDPtr part2,tcPDPtr part3){
long boson(abs(part1->id()));
if( boson != ParticleID::Wplus && boson != ParticleID::Z0 &&
boson != ParticleID::gamma ) {
throw HelicityConsistencyError()
<< "SSWSSVertex::setCoupling() - The vector particle in this "
<< "vertex is not a W/Z. " << boson << Exception::warning;
setNorm(0.);
}
long sf1(abs(part2->id())),sf2(abs(part3->id()));
if( (sf1 > 1000006 && sf1 < 1000011 && sf1 > 1000016) ||
(sf1 > 2000006 && sf1 < 2000011 && sf1 > 2000016) ||
(sf2 > 1000006 && sf2 < 1000011 && sf2 > 1000016) ||
(sf2 > 2000006 && sf2 < 2000011 && sf2 > 2000016) )
throw HelicityConsistencyError()
<< "SSWSSVertex::setCoupling() - There are no sfermions in "
<< "this vertex! " << part2->id() << " " << part3->id()
<< Exception::warning;
if( sf1 % 2 != 0 ) swap(sf1, sf2);
if( sf1 != _ulast || sf2 != _dlast || boson != _gblast) {
_gblast = boson;
_ulast = sf1;
_dlast = sf2;
//photon is simplest
if( boson == ParticleID::gamma )
_factlast = getParticleData(sf1)->charge()/eplus;
else {
//determine which helicity state
unsigned int alpha(sf1/1000000 - 1), beta(sf2/1000000 - 1);
//mixing factors
Complex m1a(0.), m1b(0.);
if( sf1 == ParticleID::SUSY_t_1 || sf1 == ParticleID::SUSY_t_2 )
m1a = (*_stop)(alpha, 0);
else if( sf1 == ParticleID::SUSY_b_1 || sf1 == ParticleID::SUSY_b_2 )
m1a = (*_sbottom)(alpha, 0);
else if( sf1 == ParticleID::SUSY_tau_1minus ||
sf1 == ParticleID::SUSY_tau_2minus )
m1a = (*_stau)(alpha, 0);
else
m1a = (alpha == 0) ? Complex(1.) : Complex(0.);
if( sf2 == ParticleID::SUSY_t_1 || sf2 == ParticleID::SUSY_t_2 )
m1b = (*_stop)(beta, 0);
else if( sf2 == ParticleID::SUSY_b_1 || sf2 == ParticleID::SUSY_b_2 )
m1b = (*_sbottom)(beta, 0);
else if( sf2 == ParticleID::SUSY_tau_1minus ||
sf2 == ParticleID::SUSY_tau_2minus )
m1b = (*_stau)(beta, 0);
else
m1b = (beta == 0) ? Complex(1.) : Complex(0.);
//W boson
if( boson == ParticleID::Wplus ) {
_factlast = m1a*m1b/sqrt(2)/_sw;
}
//Z boson
else {
if( sf1 == ParticleID::SUSY_nu_eL || sf1 == ParticleID::SUSY_nu_muL ||
sf1 == ParticleID::SUSY_nu_tauL ) {
_factlast = 1./_cw/2./_sw;
}
else {
double lmda(1.);
if( sf2 % 2 == 0 ) lmda = -1.;
_factlast = lmda*m1a*m1b;
if( alpha == beta) {
double ef = getParticleData(sf1)->charge()/eplus;
_factlast += 2.*ef*sqr(_sw);
}
_factlast *= -1./2./_cw/_sw;
}
}
}
}
if( q2 != _q2last || _couplast==0. ) {
_q2last = q2;
_couplast = electroMagneticCoupling(q2);
}
setNorm(_couplast*_factlast);
}
diff --git a/Models/Susy/SSWWHVertex.cc b/Models/Susy/SSWWHVertex.cc
--- a/Models/Susy/SSWWHVertex.cc
+++ b/Models/Susy/SSWWHVertex.cc
@@ -1,146 +1,146 @@
// -*- C++ -*-
//
// SSWWHVertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 SSWWHVertex class.
//
#include "SSWWHVertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
#include <cassert>
using namespace ThePEG::Helicity;
using namespace Herwig;
SSWWHVertex::SSWWHVertex() : theh0Wfact(ZERO), theH0Wfact(ZERO),
theh0Zfact(ZERO), theH0Zfact(ZERO),
theCoupLast(ZERO), theElast(0.0),
theq2last(ZERO), theHlast(0),
theGBlast(0) {
vector<long> first, second, third;
//ZZh0
first.push_back(23);
second.push_back(23);
third.push_back(25);
//WWh0
first.push_back(-24);
second.push_back(24);
third.push_back(25);
//ZZH0
first.push_back(23);
second.push_back(23);
third.push_back(35);
//WWH0
first.push_back(-24);
second.push_back(24);
third.push_back(35);
setList(first, second, third);
}
SSWWHVertex::~SSWWHVertex() {}
void SSWWHVertex::doinit() {
VVSVertex::doinit();
tMSSMPtr theMSSM = dynamic_ptr_cast<tMSSMPtr>(generator()->standardModel());
if( !theMSSM )
throw InitException()
<< "SSWWHVertex::doinit() - The pointer to the MSSM object is null!"
<< Exception::abortnow;
Energy mw = getParticleData(ParticleID::Wplus)->mass();
Energy mz = getParticleData(ParticleID::Z0)->mass();
- double sw = sqrt(theMSSM->sin2ThetaW());
+ double sw = sqrt(sin2ThetaW());
double sinalp = sin(theMSSM->higgsMixingAngle());
double cosalp = sqrt(1. - sqr(sinalp));
double tanbeta = theMSSM->tanBeta();
double sinbeta = tanbeta/sqrt(1. + sqr(tanbeta));
double cosbeta = sqrt( 1. - sqr(sinbeta) );
double sinbma = sinbeta*cosalp - cosbeta*sinalp;
double cosbma = cosbeta*cosalp + sinbeta*sinalp;
theh0Wfact = mw*sinbma/sw;
theH0Wfact = mw*cosbma/sw;
theh0Zfact = mz*sinbma/sw/sqrt(1. - sw*sw);
theH0Zfact = mz*cosbma/sw/sqrt(1. - sw*sw);
orderInGem(1);
orderInGs(0);
}
void SSWWHVertex::persistentOutput(PersistentOStream & os) const {
os << ounit(theh0Wfact,GeV) << ounit(theH0Wfact,GeV)
<< ounit(theh0Zfact,GeV) << ounit(theH0Zfact,GeV);
}
void SSWWHVertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(theh0Wfact,GeV) >> iunit(theH0Wfact,GeV)
>> iunit(theh0Zfact,GeV) >> iunit(theH0Zfact,GeV);
}
ClassDescription<SSWWHVertex> SSWWHVertex::initSSWWHVertex;
// Definition of the static class description member.
void SSWWHVertex::Init() {
static ClassDocumentation<SSWWHVertex> documentation
("This is the coupling of a pair of SM gauge bosons"
"to the higgs particles in the MSSM");
}
void SSWWHVertex::setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
tcPDPtr particle3) {
long id1(abs(particle1->id())), id2(abs(particle2->id())),
id3(abs(particle3->id())), higgsID(0), bosonID(0);
if( id1 == ParticleID::h0 || id1 == ParticleID::H0 ) {
higgsID = id1;
bosonID = id2;
}
else if( id2 == ParticleID::h0 || id2 == ParticleID::H0) {
higgsID = id2;
bosonID = id1;
}
else if( id3 == ParticleID::h0 || id3 == ParticleID::H0 ) {
higgsID = id3;
bosonID = id1;
}
else {
throw HelicityConsistencyError()
<< "SSWWHVertex::setCoupling - The incorrect type of higgs particle "
<< "in this vertex. Particles: " << id1 << " " << id2 << " " << id3
<< Exception::warning;
return;
setNorm(0.0);
}
if( bosonID != ParticleID::Wplus && bosonID != ParticleID::Z0 ) {
throw HelicityConsistencyError()
<< "SSWWHVertex::setCoupling - The gauge boson id is incorrect "
<< bosonID << Exception::warning;
return;
setNorm(0.0);
}
assert( higgsID == ParticleID::h0 || higgsID == ParticleID::H0 );
assert( bosonID == ParticleID::Z0 || bosonID == ParticleID::Wplus );
if( higgsID != theHlast || bosonID != theGBlast) {
if( higgsID == ParticleID::h0 )
theCoupLast = (bosonID == ParticleID::Z0) ? theh0Zfact : theh0Wfact;
else
theCoupLast = (bosonID == ParticleID::Z0) ? theH0Zfact : theH0Wfact;
}
if( q2 != theq2last ) {
theq2last = q2;
theElast = electroMagneticCoupling(q2);
}
setNorm(theElast*theCoupLast*UnitRemoval::InvE);
}
diff --git a/Models/UED/UEDF1F0H1Vertex.cc b/Models/UED/UEDF1F0H1Vertex.cc
--- a/Models/UED/UEDF1F0H1Vertex.cc
+++ b/Models/UED/UEDF1F0H1Vertex.cc
@@ -1,254 +1,254 @@
// -*- C++ -*-
//
// UEDF1F0H1Vertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 UEDF1F0H1Vertex class.
//
#include "UEDF1F0H1Vertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
UEDF1F0H1Vertex::UEDF1F0H1Vertex() : theRadius(ZERO), theMw(ZERO),
theSinThetaW(0.), theq2Last(ZERO),
theCoupLast(0.), theLeftLast(0.),
theRightLast(0.), theAntiLast(0),
theFermLast(0), theHLast(0) {
vector<long> anti, ferm, kkhiggs;
long heavy[3] = {5, 6, 15};
//h0
for( unsigned int i = 0; i < 3; ++i ) {
anti.push_back(-5100000 - i);
ferm.push_back(5100000 + i);
kkhiggs.push_back(25);
anti.push_back(-6100000 - i);
ferm.push_back(6100000 + i);
kkhiggs.push_back(25);
anti.push_back(-5100000 - i);
ferm.push_back(6100000 + i);
kkhiggs.push_back(25);
anti.push_back(-6100000 - i);
ferm.push_back(5100000 + i);
kkhiggs.push_back(25);
}
// Neutral KK-Higgs
long higgs[2] = {5100025, 5100036};
for( unsigned int h = 0; h < 2; ++h ) {
for( unsigned int i = 0; i < 3; ++i ) {
anti.push_back(-heavy[i]);
ferm.push_back(5100000 + heavy[i]);
kkhiggs.push_back(higgs[h]);
anti.push_back(-5100000 - heavy[i]);
ferm.push_back(heavy[i]);
kkhiggs.push_back(higgs[h]);
anti.push_back(-heavy[i]);
ferm.push_back(6100000 + heavy[i]);
kkhiggs.push_back(higgs[h]);
anti.push_back(-6100000 - heavy[i]);
ferm.push_back(heavy[i]);
kkhiggs.push_back(higgs[h]);
}
}
//KK-charged higgs
//outgoing H+
anti.push_back(-5100006);
ferm.push_back(5);
kkhiggs.push_back(5100037);
anti.push_back(-6100006);
ferm.push_back(5);
kkhiggs.push_back(5100037);
anti.push_back(-6);
ferm.push_back(5100005);
kkhiggs.push_back(5100037);
anti.push_back(-6);
ferm.push_back(6100005);
kkhiggs.push_back(5100037);
anti.push_back(-5100016);
ferm.push_back(15);
kkhiggs.push_back(5100037);
anti.push_back(-6100016);
ferm.push_back(15);
kkhiggs.push_back(5100037);
anti.push_back(-16);
ferm.push_back(5100015);
kkhiggs.push_back(5100037);
anti.push_back(-16);
ferm.push_back(6100015);
kkhiggs.push_back(5100037);
//outgoing H-
anti.push_back(-5100005);
ferm.push_back(6);
kkhiggs.push_back(-5100037);
anti.push_back(-6100005);
ferm.push_back(6);
kkhiggs.push_back(-5100037);
anti.push_back(-5);
ferm.push_back(5100006);
kkhiggs.push_back(-5100037);
anti.push_back(-5);
ferm.push_back(6100006);
kkhiggs.push_back(-5100037);
anti.push_back(-5100015);
ferm.push_back(16);
kkhiggs.push_back(-5100037);
anti.push_back(-6100015);
ferm.push_back(16);
kkhiggs.push_back(-5100037);
anti.push_back(-15);
ferm.push_back(5100016);
kkhiggs.push_back(-5100037);
anti.push_back(-15);
ferm.push_back(6100016);
kkhiggs.push_back(-5100037);
setList(anti, ferm, kkhiggs);
}
void UEDF1F0H1Vertex::doinit() {
FFSVertex::doinit();
tUEDBasePtr UEDBase =
dynamic_ptr_cast<tUEDBasePtr>(generator()->standardModel());
if(!UEDBase)
throw InitException() << "UEDF1F0H1Vertex::doinit() - The pointer to "
<< "the UEDBase object is null!"
<< Exception::runerror;
theRadius = UEDBase->compactRadius();
- theSinThetaW = sqrt(UEDBase->sin2ThetaW());
- theCosThetaW = sqrt(1. - UEDBase->sin2ThetaW());
+ theSinThetaW = sqrt(sin2ThetaW());
+ theCosThetaW = sqrt(1. - sin2ThetaW());
theMw = getParticleData(24)->mass();
theMz = getParticleData(23)->mass();
orderInGs(0);
orderInGem(1);
}
void UEDF1F0H1Vertex::persistentOutput(PersistentOStream & os) const {
os << ounit(theRadius,1/GeV) << ounit(theMw,GeV) << theSinThetaW
<< ounit(theMz, GeV) << theCosThetaW;
}
void UEDF1F0H1Vertex::persistentInput(PersistentIStream & is, int) {
is >> iunit(theRadius,1/GeV) >> iunit(theMw,GeV) >> theSinThetaW
>> iunit(theMz, GeV) >> theCosThetaW;
}
ClassDescription<UEDF1F0H1Vertex> UEDF1F0H1Vertex::initUEDF1F0H1Vertex;
// Definition of the static class description member.
void UEDF1F0H1Vertex::Init() {
static ClassDocumentation<UEDF1F0H1Vertex> documentation
("The coupling involving a KK-Higgs and a pair of fermions.");
}
void UEDF1F0H1Vertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3, int) {
long anti(abs(part1->id())), ferm(abs(part2->id())), higgs(part3->id());
if( ferm > 17 ) swap( ferm, anti);
if( anti != theAntiLast || ferm != theFermLast || higgs != theHLast ) {
theAntiLast = anti;
theFermLast = ferm;
theHLast = higgs;
tcPDPtr pd;
if( higgs != 25 ) {
pd = getParticleData(ferm);
}
else {
long smid = ( ferm/1000000 == 5 ) ? ferm - 5100000 : ferm - 6100000;
pd = getParticleData(smid);
}
Energy mf = pd->mass();
double alpha = mf*theRadius/2.;
double salpha = sin(alpha);
double calpha = cos(alpha);
double fact(0.);
if( abs(higgs) == 5100037 ) {
fact = theRadius/2./sqrt(1. + sqr(theMw*theRadius)) * UnitRemoval::E;
theRightLast = theRadius*theMw;
if(anti/1000000 == 5) {
Energy mfk = getParticleData(anti - 5100000)->mass();
theLeftLast = (theMw*calpha - (mfk*salpha/theRadius/theMw))
* UnitRemoval::InvE;
theRightLast *= calpha*mfk* UnitRemoval::InvE;
}
else {
Energy mfk = getParticleData(anti - 6100000)->mass();
theLeftLast = (theMw*salpha +(mfk*calpha/theRadius/theMw))
* UnitRemoval::InvE;
theRightLast *= -salpha*mfk*UnitRemoval::InvE;
}
theLeftLast *= fact;
theRightLast *= fact;
if( higgs < 0 ) swap( theLeftLast, theRightLast );
}
else if( higgs == 5100025 ) {
fact = mf/theMw/2.;
if( anti/1000000 == 5 )
theLeftLast = salpha + calpha;
else
theLeftLast = salpha - calpha;
theRightLast = theLeftLast;
theLeftLast *= fact;
theRightLast *= fact;
}
else if( higgs == 5100036 ) {
fact = theRadius/theCosThetaW/sqrt(1.+sqr(theMz*theRadius))*UnitRemoval::E;
double i3f = ( ferm % 2 == 0 ) ? 0.5 : -0.5;
double qf = pd->charge()/eplus;
if( anti/1000000 == 5 ) {
theLeftLast = (theMz*calpha*(i3f - qf*sqr(theSinThetaW))
- mf*salpha/theRadius/theMw) * UnitRemoval::InvE;
theRightLast = (-theMz*salpha*qf*sqr(theSinThetaW)
+ mf*calpha/theRadius/theMw) * UnitRemoval::InvE;
}
else {
theLeftLast = (theMz*salpha*(i3f - qf*sqr(theSinThetaW))
- mf*calpha/theRadius/theMw) * UnitRemoval::InvE;
theRightLast = (-theMz*calpha*qf*sqr(theSinThetaW)
+ mf*salpha/theRadius/theMw)*UnitRemoval::InvE;
}
theLeftLast *= fact;
theRightLast *= fact;
}
else {
theLeftLast = mf*calpha*salpha/2./theMw;
if( ferm/1000000 == 5 ) theLeftLast *= -1.;
theRightLast = theLeftLast;
}
}
if(q2 != theq2Last || theCoupLast == 0.) {
theq2Last = q2;
theCoupLast = weakCoupling(q2);
}
setNorm(theCoupLast);
setLeft(theLeftLast);
setRight(theRightLast);
}
diff --git a/Models/UED/UEDF1F0W1Vertex.cc b/Models/UED/UEDF1F0W1Vertex.cc
--- a/Models/UED/UEDF1F0W1Vertex.cc
+++ b/Models/UED/UEDF1F0W1Vertex.cc
@@ -1,247 +1,247 @@
// -*- C++ -*-
//
// UEDF1F0W1Vertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 UEDF1F0W1Vertex class.
//
#include "UEDF1F0W1Vertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig++/Models/StandardModel/StandardCKM.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
UEDF1F0W1Vertex::UEDF1F0W1Vertex() : theSinW(0.), theCosW(0.), theSinOne(0.),
theCosOne(0.), theSinWmO(0.),
theCosWmO(0.),
theCKM(0, vector<Complex>(0, 0.)),
theq2last(),
theCouplast(0.), theLlast(0.),
theRlast(0.), theGBlast(0),
theKKlast(0), theSMlast(0) {
vector<long> ferm, anti, wboson;
//outgoing W+
for(long i = 2; i < 7; i += 2) {
for(long j = 1; j < 6; j += 2) {
anti.push_back(-i);
ferm.push_back(5100000 + j);
wboson.push_back(5100024);
anti.push_back(-(5100000 + i));
ferm.push_back(j);
wboson.push_back(5100024);
}
}
for(long i = 11; i < 17; i += 2) {
anti.push_back(-i - 1);
ferm.push_back(5100000 + i);
wboson.push_back(5100024);
anti.push_back(-(5100001 + i));
ferm.push_back(i);
wboson.push_back(5100024);
}
//outgoing W-
for(long i = 1; i < 6; i += 2) {
for(long j = 2 ; j < 7; j += 2) {
anti.push_back(-i);
ferm.push_back(5100000 + j);
wboson.push_back(-5100024);
anti.push_back(-(5100000 + i));
ferm.push_back(j);
wboson.push_back(-5100024);
}
}
for(long i = 11; i < 17; i += 2) {
anti.push_back(-i);
ferm.push_back(5100001 + i);
wboson.push_back(-5100024);
anti.push_back(-(5100000 + i));
ferm.push_back(i + 1);
wboson.push_back(-5100024);
}
long boson[2] = {5100022,5100023};
for(long b = 0; b < 2; ++b) {
//QQ
for(int i = 1; i < 7; ++i) {
anti.push_back(-i);
ferm.push_back(i + 5100000);
wboson.push_back(boson[b]);
anti.push_back(-(i + 5100000));
ferm.push_back(i);
wboson.push_back(boson[b]);
anti.push_back(-i);
ferm.push_back(i + 6100000);
wboson.push_back(boson[b]);
anti.push_back(-(i + 6100000));
ferm.push_back(i);
wboson.push_back(boson[b]);
}
//LL
for(int i = 11; i < 17; ++i) {
anti.push_back(-i);
ferm.push_back(i + 5100000);
wboson.push_back(boson[b]);
anti.push_back(-(i + 5100000));
ferm.push_back(i);
wboson.push_back(boson[b]);
if( i % 2 != 0 ) {
anti.push_back(-i);
ferm.push_back(i + 6100000);
wboson.push_back(boson[b]);
anti.push_back(-(i + 6100000));
ferm.push_back(i);
wboson.push_back(boson[b]);
}
}
}
setList(anti, ferm, wboson);
}
void UEDF1F0W1Vertex::doinit() {
FFVVertex::doinit();
tUEDBasePtr UEDBase =
dynamic_ptr_cast<tUEDBasePtr>(generator()->standardModel());
if(!UEDBase)
throw InitException() << "UEDF1F0W1Vertex::doinit() - The pointer to "
<< "the UEDBase object is null!"
<< Exception::runerror;
- theSinW = sqrt(UEDBase->sin2ThetaW());
+ theSinW = sqrt(sin2ThetaW());
theCosW = sqrt( 1. - sqr(theSinW));
theSinOne = UEDBase->sinThetaOne();
theCosOne = sqrt(1. - sqr(theSinOne));
theSinWmO = theSinW*theCosOne - theSinOne*theCosW;
theCosWmO = theCosW*theCosOne + theSinW*theSinOne;
theCKM = dynamic_ptr_cast<Ptr<StandardCKM>::transient_pointer>
(UEDBase->CKM())->getUnsquaredMatrix(UEDBase->families());
orderInGs(0);
orderInGem(1);
}
void UEDF1F0W1Vertex::persistentOutput(PersistentOStream & os) const {
os << theSinW << theCosW << theSinOne << theCosOne
<< theSinWmO << theCosWmO << theCKM;
}
void UEDF1F0W1Vertex::persistentInput(PersistentIStream & is, int) {
is >> theSinW >> theCosW >> theSinOne >> theCosOne
>> theSinWmO >> theCosWmO >> theCKM;
}
ClassDescription<UEDF1F0W1Vertex> UEDF1F0W1Vertex::initUEDF1F0W1Vertex;
// Definition of the static class description member.
void UEDF1F0W1Vertex::Init() {
static ClassDocumentation<UEDF1F0W1Vertex> documentation
("This is the coupling of a KK1 W boson to a KK1 fermion and "
"a SM fermion.");
}
void UEDF1F0W1Vertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3) {
long id1(abs(part1->id())), id2(abs(part2->id())),
id3(abs(part3->id())), kkparticle(0), gboson(0), smID(0);
if( id1 == 5100022 || id1 == 5100023 || id1 == 5100024 ) {
gboson = id1;
if( id2 > 5000000 ) {
kkparticle = id2;
smID = id3;
}
else {
kkparticle = id3;
smID = id2;
}
}
else if( id2 == 5100022 || id2 == 5100023 || id2 == 5100024 ) {
gboson = id2;
if( id1 > 5000000 ) {
kkparticle = id1;
smID = id3;
}
else {
kkparticle = id3;
smID = id1;
}
}
else if( id3 == 5100022 || id3 == 5100023 || id3 == 5100024 ) {
gboson = id3;
if( id1 > 5000000 ) {
kkparticle = id1;
smID = id2;
}
else {
kkparticle = id2;
smID = id1;
}
}
else {
throw HelicityLogicalError()
<< "UEDF1F0W1Vertex::setCoupling - There is no KK gauge boson "
<< "in this vertex." << Exception::warning;
return;
}
if( (kkparticle >= 5100001 && kkparticle <= 5100006) ||
(kkparticle >= 6100001 && kkparticle <= 6100006) ||
(kkparticle >= 5100011 && kkparticle <= 5100016) ||
(kkparticle >= 6100011 && kkparticle <= 6100016) ) {
if(q2 != theq2last || theCouplast == 0.) {
theq2last = q2;
theCouplast = electroMagneticCoupling(q2);
}
if( gboson != theGBlast || kkparticle != theKKlast || smID != theSMlast ) {
theGBlast = gboson;
theKKlast = kkparticle;
theSMlast = smID;
if( gboson == 5100024 ) {
Complex ckm(1.);
if( smID >= 1 && smID <= 6 ) {
long smIDb(kkparticle - 5100000);
if( smID % 2 != 0 ) swap(smID, smIDb);
ckm = theCKM[smID/2 - 1][(smIDb - 1)/2];
}
theLlast = -ckm/sqrt(2)/theSinW;
theRlast = 0.;
}
else if( gboson == 5100022 || gboson == 5100023 ) {
double Qf = getParticleData(smID)->charge()/eplus;
if( kkparticle/1000000 == 5 ) {
theRlast = 0.;
double I3f = (abs(smID) % 2 == 0) ? 0.5 : -0.5;
if( gboson == 5100023 )
theLlast = (Qf*theSinOne
- I3f*theCosWmO/theSinW)/theCosW;
else
theLlast = -(Qf*theCosOne
- I3f*theSinWmO/theSinW)/theCosW;
}
else {
theLlast = 0.;
if( gboson == 5100023 )
theRlast = Qf*theSinOne/theCosW;
else
theRlast = -Qf*theCosOne/theCosW;
}
}
}
setNorm(theCouplast);
setLeft(theLlast);
setRight(theRlast);
}
else
throw HelicityLogicalError() << "UEDF1F0W1Vertex::setCoupling - "
<< "There is an unknown particle in this vertex! "
<< kkparticle
<< Exception::warning;
}
diff --git a/Models/UED/UEDF1F1Z0Vertex.cc b/Models/UED/UEDF1F1Z0Vertex.cc
--- a/Models/UED/UEDF1F1Z0Vertex.cc
+++ b/Models/UED/UEDF1F1Z0Vertex.cc
@@ -1,162 +1,162 @@
// -*- C++ -*-
//
// UEDF1F1Z0Vertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 UEDF1F1Z0Vertex class.
//
#include "UEDF1F1Z0Vertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
UEDF1F1Z0Vertex::UEDF1F1Z0Vertex() : theSin2ThW(0.0), theCosThW(0.0), theRadius(),
theID1Last(0), theID2Last(0) ,
theq2Last(ZERO), theCoupLast(0.),
theLeftLast(0.), theRightLast(0.) {
vector<long> anti, ferm, boson(25, 23);
//QQ, uu, dd
for(long i = 5100001; i < 6100007; ++i) {
if(i == 5100007) i += 999994;
anti.push_back(-i);
ferm.push_back(i);
}
//top/bottom quark l/r mixing
anti.push_back(-5100006); ferm.push_back(6100006);
anti.push_back(-6100006); ferm.push_back(5100006);
anti.push_back(-5100005); ferm.push_back(6100005);
anti.push_back(-6100005); ferm.push_back(5100005);
//leptons
for(long i = 5100011; i < 5100017; ++i) {
anti.push_back(-i);
ferm.push_back(i);
}
for(long i = 6100011; i < 6100017; i +=2) {
anti.push_back(-i);
ferm.push_back(i);
}
setList(anti, ferm, boson);
}
void UEDF1F1Z0Vertex::doinit() {
FFVVertex::doinit();
UEDBasePtr model = dynamic_ptr_cast<tUEDBasePtr>(generator()->standardModel());
if(!model)
throw InitException() << "UEDF1F1Z0Vertex::doinit() - The pointer to "
<< "the UEDBase object is null!"
<< Exception::runerror;
- theSin2ThW = model->sin2ThetaW();
+ theSin2ThW = sin2ThetaW();
theCosThW = sqrt(1. - theSin2ThW);
theRadius = model->compactRadius();
orderInGs(0);
orderInGem(1);
}
void UEDF1F1Z0Vertex::persistentOutput(PersistentOStream & os) const {
os << theSin2ThW << theCosThW << ounit(theRadius,1/GeV);
}
void UEDF1F1Z0Vertex::persistentInput(PersistentIStream & is, int) {
is >> theSin2ThW >> theCosThW >> iunit(theRadius,1/GeV);
}
ClassDescription<UEDF1F1Z0Vertex> UEDF1F1Z0Vertex::initUEDF1F1Z0Vertex;
// Definition of the static class description member.
void UEDF1F1Z0Vertex::Init() {
static ClassDocumentation<UEDF1F1Z0Vertex> documentation
("This is the implementation of the level-1 fermion pair Z_0 boson "
"coupling.");
}
void UEDF1F1Z0Vertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3) {
if( part3->id() != 23 ) {
setNorm(0.0);
setLeft(0.0);
setRight(0.0);
throw HelicityLogicalError()
<< "UEDF1F1Z0Vertex::setCoupling - The vector boson in this vertex "
<< "is not a Z^0 boson. ID: " << part3->id() << "\n"
<< Exception::warning;
return;
}
long ianti(abs(part1->id())), iferm(abs(part2->id()));
bool ferma = (iferm >= 5100001 && iferm <= 5100006) ||
(iferm >= 6100001 && iferm <= 6100006) ||
(iferm >= 5100011 && iferm <= 5100016) ||
(iferm >= 6100011 && iferm <= 6100016);
bool fermb = (ianti >= 5100001 && ianti <= 5100006) ||
(ianti >= 6100001 && ianti <= 6100006) ||
(ianti >= 5100011 && ianti <= 5100016) ||
(ianti >= 6100011 && ianti <= 6100016);
if( ferma && fermb ) {
if(q2 != theq2Last || theCoupLast == 0. ) {
theq2Last = q2;
theCoupLast = 0.5*weakCoupling(q2)/theCosThW;
}
if( ianti != theID1Last || iferm != theID2Last) {
theID1Last = ianti;
theID2Last = iferm;
int stateA = ianti/1000000;
int stateB = iferm/1000000;
long smID = (stateA == 6) ? ianti - 6100000 : ianti - 5100000;
// L/R mixing
double alpha = atan(getParticleData(smID)->mass()*theRadius)/2.;
double sin2al = sqr(sin(alpha));
double cos2al = 1. - sin2al;
if(stateA == 5 && stateB == 5) {
if(smID >= 11 && smID <= 16)
theLeftLast = -cos2al + 2.*theSin2ThW;
else if(smID <= 6 && smID % 2 == 0)
theLeftLast = cos2al - 4.*theSin2ThW/3.;
else
theLeftLast = -cos2al + 2.*theSin2ThW/3.;
theRightLast = theLeftLast;
}
else if(stateA == 6 && stateB == 6) {
if(smID >= 11 && smID <= 16)
theLeftLast = -sin2al + 2.*theSin2ThW;
else if(smID <=6 && smID % 2 == 0)
theLeftLast = sin2al - 4.*theSin2ThW/3.;
else
theLeftLast = -sin2al + 2.*theSin2ThW/3.;
theRightLast = theLeftLast;
}
else {
theLeftLast = sqrt(sin2al*cos2al);
if(smID % 2 == 0) theLeftLast *= -1.;
theRightLast = -theLeftLast;
}
}
setNorm(theCoupLast);
setLeft(theLeftLast);
setRight(theRightLast);
}
else {
throw HelicityLogicalError() << "UEDF1F1Z0Vertex::setCoupling - "
<< "There is an unknown particle(s) in the "
<< "UED F^(1) F^(1) Z^(0) vertex. ID: "
<< ianti << " " << iferm
<< Exception::warning;
setNorm(0.0);
setLeft(0.0);
setRight(0.0);
}
}
diff --git a/Models/UED/UEDW0W1W1Vertex.cc b/Models/UED/UEDW0W1W1Vertex.cc
--- a/Models/UED/UEDW0W1W1Vertex.cc
+++ b/Models/UED/UEDW0W1W1Vertex.cc
@@ -1,135 +1,135 @@
// -*- C++ -*-
//
// UEDW0W1W1Vertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 UEDW0W1W1Vertex class.
//
#include "UEDW0W1W1Vertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
UEDW0W1W1Vertex::UEDW0W1W1Vertex() : theSinW(0.), theCosW(0.),
theSinThetaOne(0.), theCosThetaOne(0.),
theq2last(), theElast(0.), theCouplast(0.),
theSMlast(0), theKKlast(0) {
vector<long> first(6), second(6), third(6);
first[0] = 22;
second[0] = -5100024;
third[0] = 5100024;
first[1] = 24;
second[1] = -5100024;
third[1] = 5100022;
first[2] = -24;
second[2] = 5100024;
third[2] = 5100022;
first[3] = 24;
second[3] = -5100024;
third[3] = 5100023;
first[4] = -24;
second[4] = 5100024;
third[4] = 5100023;
first[5] = 23;
second[5] = -5100024;
third[5] = 5100024;
setList(first, second, third);
}
void UEDW0W1W1Vertex::doinit() {
VVVVertex::doinit();
tUEDBasePtr model = dynamic_ptr_cast<tUEDBasePtr>(generator()->standardModel());
if(!model)
throw InitException() << "UEDW0W1W1Vertex::doinit() - The pointer to "
<< "the UEDBase object is null!"
<< Exception::runerror;
- theSinW = sqrt(model->sin2ThetaW());
+ theSinW = sqrt(sin2ThetaW());
theCosW = sqrt( 1. - sqr(theSinW) );
theSinThetaOne = model->sinThetaOne();
theCosThetaOne = sqrt( 1. - sqr(theSinThetaOne));
orderInGs(0);
orderInGem(1);
}
void UEDW0W1W1Vertex::persistentOutput(PersistentOStream & os) const {
os << theSinW << theCosW << theSinThetaOne << theCosThetaOne;
}
void UEDW0W1W1Vertex::persistentInput(PersistentIStream & is, int) {
is >> theSinW >> theCosW >> theSinThetaOne >> theCosThetaOne;
}
ClassDescription<UEDW0W1W1Vertex> UEDW0W1W1Vertex::initUEDW0W1W1Vertex;
// Definition of the static class description member.
void UEDW0W1W1Vertex::Init() {
static ClassDocumentation<UEDW0W1W1Vertex> documentation
("The coupling of an SM W boson to a level 1 KK W and KK Z and KK photon");
}
void UEDW0W1W1Vertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3,Direction,Direction,Direction) {
long id1(abs(part1->id())), id2(abs(part2->id())), id3(abs(part3->id())),
smID(0), kkparticle(0);
double perm(-1.);
if( id1 == 22 || id1 == 23 || id1 == 24 ) {
if( part1->id() < 0 ) perm = 1.;
smID = id1;
kkparticle = (id2 == 5100024) ? id3 : id2;
}
else if( id2 == 22 || id2 == 23 || id2 == 24 ) {
if( part2->id() < 0 ) perm = 1.;
smID = id2;
kkparticle = (id1 == 5100024) ? id3 : id1;
}
else if( id3 == 22 || id3 == 23 || id3 == 24 ) {
if( part3->id() < 0 ) perm = 1.;
smID = id3;
kkparticle = (id1 == 5100024) ? id2 : id1;
}
else {
throw HelicityLogicalError()
<< "UEDW0W1W1Vertex::setCoupling() - There is no SM gauge boson in "
<< "this vertex. " << id1 << " " << id2 << " " << id3
<< Exception::warning;
setNorm(0.);
return;
}
if( q2 != theq2last || theElast == 0.) {
theq2last = q2;
theElast = electroMagneticCoupling(q2);
}
if( smID != theSMlast || kkparticle != theKKlast ) {
theSMlast = smID;
theKKlast = kkparticle;
if( smID == 22 )
theCouplast = 1.;
else if(smID == 23)
theCouplast = theCosW/theSinW;
else {
if( kkparticle == 5100023 )
theCouplast = theCosThetaOne/theSinW;
else
theCouplast = theSinThetaOne/theSinW;
}
}
setNorm(perm*theElast*theCouplast);
}
diff --git a/Models/UED/UEDZ0A1h1Vertex.cc b/Models/UED/UEDZ0A1h1Vertex.cc
--- a/Models/UED/UEDZ0A1h1Vertex.cc
+++ b/Models/UED/UEDZ0A1h1Vertex.cc
@@ -1,98 +1,98 @@
// -*- C++ -*-
//
// UEDZ0A1h1Vertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 UEDZ0A1h1Vertex class.
//
#include "UEDZ0A1h1Vertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
UEDZ0A1h1Vertex::UEDZ0A1h1Vertex() : theSin2ThetaW(0.), theKappa(0.),
theq2Last(ZERO), theCoupLast(0.) {
setList(vector<long>(1, 23), vector<long>(1, 5100036),
vector<long>(1, 5100025));
}
void UEDZ0A1h1Vertex::doinit() {
VSSVertex::doinit();
tUEDBasePtr UEDBase =
dynamic_ptr_cast<tUEDBasePtr>(generator()->standardModel());
if(!UEDBase)
throw InitException() << "UEDZ0A1h1Vertex::doinit() - The pointer to "
<< "the UEDBase object is null!"
<< Exception::runerror;
- double sw2 = UEDBase->sin2ThetaW();
+ double sw2 = sin2ThetaW();
theSin2ThetaW = 2.*sqrt(sw2*(1. - sw2));
Energy2 mz2 = sqr(getParticleData(23)->mass());
InvEnergy2 rad2 = sqr(UEDBase->compactRadius());
theKappa = 1./sqrt(1. + mz2*rad2);
orderInGs(0);
orderInGem(0);
}
void UEDZ0A1h1Vertex::persistentOutput(PersistentOStream & os) const {
os << theSin2ThetaW << theKappa;
}
void UEDZ0A1h1Vertex::persistentInput(PersistentIStream & is, int) {
is >> theSin2ThetaW >> theKappa;
}
ClassDescription<UEDZ0A1h1Vertex> UEDZ0A1h1Vertex::initUEDZ0A1h1Vertex;
// Definition of the static class description member.
void UEDZ0A1h1Vertex::Init() {
static ClassDocumentation<UEDZ0A1h1Vertex> documentation
("The coupling of an SM Z boson to a level-1 CP-Odd pseudo-scalar "
"and level 1 higgs.");
}
void UEDZ0A1h1Vertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3) {
long scaA(0), scaB(0);
if(part1->id() == ParticleID::Z0) {
scaA = part2->id();
scaB = part3->id();
}
else if(part2->id() == ParticleID::Z0) {
scaA = part1->id();
scaB = part3->id();
}
else if(part3->id() == ParticleID::Z0) {
scaA = part1->id();
scaB = part2->id();
}
else {
throw HelicityLogicalError() << "UEDZ0A1h1Vertex::setCoupling - "
<< "There is no SM Z boson in this vertex"
<< Exception::warning;
}
if( (scaA == 5100036 && scaB == 5100025) ||
(scaB == 5100036 && scaA == 5100025) ) {
if(q2 != theq2Last || theCoupLast == 0.) {
theq2Last = q2;
theCoupLast = theKappa*electroMagneticCoupling(q2)/theSin2ThetaW;
}
setNorm(theCoupLast);
}
else
throw HelicityLogicalError() << "UEDZ0A1h1Vertex::setCoupling - "
<< "There is an unknown particle in this "
<< "vertex. " << scaA << " " << scaB
<< Exception::warning;
}
diff --git a/Models/UED/UEDZ0H1H1Vertex.cc b/Models/UED/UEDZ0H1H1Vertex.cc
--- a/Models/UED/UEDZ0H1H1Vertex.cc
+++ b/Models/UED/UEDZ0H1H1Vertex.cc
@@ -1,93 +1,93 @@
// -*- C++ -*-
//
// UEDZ0H1H1Vertex.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2007 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 UEDZ0H1H1Vertex class.
//
#include "UEDZ0H1H1Vertex.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/PDT/EnumParticles.h"
using namespace ThePEG::Helicity;
using namespace Herwig;
UEDZ0H1H1Vertex::UEDZ0H1H1Vertex() : theCosThetaW(0.), theCosTheta2W(0.), theMw2(),
theR2(), theq2Last(ZERO), theCoupLast(0.) {
setList(vector<long>(1, 23), vector<long>(1, 5100037),
vector<long>(1, -5100037));
}
void UEDZ0H1H1Vertex::doinit() {
VSSVertex::doinit();
tUEDBasePtr theUEDBase = dynamic_ptr_cast<tUEDBasePtr>(generator()->standardModel());
if(!theUEDBase)
throw InitException() << "UEDZ0H1H1Vertex::doinit() - The pointer to "
<< "the UEDBase object is null!"
<< Exception::runerror;
- theCosThetaW = sqrt(1. - theUEDBase->sin2ThetaW());
- theCosTheta2W = 1. - 2.*theUEDBase->sin2ThetaW();
+ theCosThetaW = sqrt(1. - sin2ThetaW());
+ theCosTheta2W = 1. - 2.*sin2ThetaW();
theMw2 = sqr(getParticleData(24)->mass());
theR2 = sqr(theUEDBase->compactRadius());
orderInGs(0);
orderInGem(1);
}
void UEDZ0H1H1Vertex::persistentOutput(PersistentOStream & os) const {
os << theCosThetaW << theCosTheta2W
<< ounit(theMw2,GeV2) << ounit(theR2,1/GeV2);
}
void UEDZ0H1H1Vertex::persistentInput(PersistentIStream & is, int) {
is >> theCosThetaW >> theCosTheta2W
>> iunit(theMw2,GeV2) >> iunit(theR2,1/GeV2);
}
ClassDescription<UEDZ0H1H1Vertex> UEDZ0H1H1Vertex::initUEDZ0H1H1Vertex;
// Definition of the static class description member.
void UEDZ0H1H1Vertex::Init() {
static ClassDocumentation<UEDZ0H1H1Vertex> documentation
("This is the coupling of the SM Z boson to the level-1 charged higgs.");
}
void UEDZ0H1H1Vertex::setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
tcPDPtr part3) {
long kkhiggs(0);
if(part1->id() == ParticleID::Z0)
kkhiggs = abs(part2->id());
else if(part2->id() == ParticleID::Z0)
kkhiggs = abs(part1->id());
else if(part3->id() == ParticleID::Z0)
kkhiggs = abs(part1->id());
else {
throw HelicityLogicalError() << "UEDZ0H1H1Vertex::setCoupling - There is no "
<< "SM photon in this vertex!."
<< Exception::warning;
return;
}
if(kkhiggs == 5100037) {
if(q2 != theq2Last || theCoupLast == 0.) {
theq2Last = q2;
theCoupLast =
Complex(0., 1.)*weakCoupling(q2);
theCoupLast *= ( (theCosTheta2W/2./theCosThetaW)
- sqr(theCosThetaW)*theMw2*theR2 )/(1. + theMw2*theR2);
}
setNorm(theCoupLast);
}
else
throw HelicityLogicalError() << "UEDZ0H1H1Vertex::setCoupling - There is no "
<< "level-1 higgs in this vertex! " << kkhiggs
<< Exception::warning;
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Sep 30, 5:44 AM (5 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6566310
Default Alt Text
(133 KB)
Attached To
Mode
rHERWIGHG herwighg
Attached
Detach File
Event Timeline
Log In to Comment