Page MenuHomeHEPForge

No OneTemporary

Size
133 KB
Referenced Files
None
Subscribers
None
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

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)

Event Timeline