9 #ifndef ThePEG_VertexBase_H 10 #define ThePEG_VertexBase_H 14 #include <ThePEG/Interface/Interfaced.h> 15 #include <ThePEG/PDT/ParticleData.h> 16 #include <ThePEG/Helicity/HelicityDefinitions.h> 17 #include <ThePEG/Repository/EventGenerator.h> 18 #include "ThePEG/StandardModel/StandardModelBase.h" 19 #include "VertexBase.fh" 28 namespace VertexType {
64 VertexBase(VertexType::T name,
bool kine=
false);
99 unsigned int size()
const {
return _particles.size(); }
107 return _inpart.find(p) != _inpart.end();
115 return _outpart.find(p) != _outpart.end();
121 const set<tPDPtr> &
incoming()
const {
return _inpart; }
126 const set<tPDPtr> &
outgoing()
const {
return _outpart; }
138 vector<long> search(
unsigned int ilist,
long id)
const;
145 vector<tPDPtr> search(
unsigned int ilist,
tcPDPtr id)
const;
154 bool allowed(
long id1,
long id2,
long id3,
long id4 = 0)
const;
159 VertexType::T
getName()
const {
return _theName; }
188 double val = 4.0*
Constants::pi*generator()->standardModel()->alphaS(q2);
193 return sqrt(4.0*
Constants::pi*generator()->standardModel()->alphaS());
203 return sqrt(4.0*
Constants::pi*generator()->standardModel()->alphaEMME(q2));
205 return sqrt(4.0*
Constants::pi*generator()->standardModel()->alphaEMMZ());
215 return sqrt(4.0*
Constants::pi*generator()->standardModel()->alphaEMME(q2)/
216 generator()->standardModel()->sin2ThetaW());
217 else if( _coupopt == 1 )
218 return sqrt(4.0*
Constants::pi*generator()->standardModel()->alphaEMMZ()/
219 generator()->standardModel()->sin2ThetaW());
224 double sin2ThetaW()
const {
225 if( _coupopt == 0 || _coupopt == 1)
226 return generator()->standardModel()->sin2ThetaW();
241 virtual void doinit();
259 virtual IVector getReferences();
271 void addToList(
const vector<long> & ids);
281 void addToList(
long ida,
long idb,
long idc,
long idd = 0);
304 complex<Energy> mass=-GeV,
305 complex<Energy> width=-GeV);
316 complex<Energy> mass=-GeV,
317 complex<Energy> width=-GeV) {
318 return _norm*propagator(iopt,q2,part,mass,width);
345 _kine[0][1]=p0*p1;_kine[1][0]=_kine[0][1];
346 _kine[0][2]=p0*p2;_kine[2][0]=_kine[0][2];
347 _kine[1][2]=p1*p2;_kine[2][1]=_kine[1][2];
361 _kine[0][1]=p0*p1;_kine[1][0]=_kine[0][1];
362 _kine[0][2]=p0*p2;_kine[2][0]=_kine[0][2];
363 _kine[0][3]=p0*p3;_kine[3][0]=_kine[0][3];
364 _kine[1][2]=p1*p2;_kine[2][1]=_kine[1][2];
365 _kine[1][3]=p1*p3;_kine[3][1]=_kine[1][3];
366 _kine[2][3]=p2*p3;_kine[3][2]=_kine[2][3];
374 for(ix=0;ix<p.size();++ix) {
375 for(iy=0;iy<=ix;++ix) {
376 _kine[ix][iy]=p[ix]*p[iy];
377 _kine[iy][ix]=_kine[ix][iy];
385 Energy2
invariant(
unsigned int ix ,
unsigned int iy)
const {
386 assert ( ix < _npoint && iy < _npoint );
387 return _kine[ix][iy];
403 void orderInGs(
unsigned int order) { _ordergS = order; }
528 static string className() {
return "ThePEG::VertexBase"; }
bool kinematics() const
Whether or not to calculate the kinematics invariants.
VertexType::T _theName
Name of vertex.
PersistentIStream is used to read persistent objects from a stream where they were previously written...
double weakCoupling(Energy2 q2) const
Weak coupling.
unsigned int getNpoint() const
Get number of lines on Vertex.
std::complex< double > Complex
ThePEG code should use Complex for all complex scalars.
double _sw
Fixed value of to use.
PersistentOStream is used to write objects persistently to a stream from which they can be read in ag...
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
vector< vector< PDPtr > > _particles
Storage of the particles.
Rebinder is a class associating pairs of pointers to objects.
set< tPDPtr > _outpart
ParticleData pointers for the allowed outgoing particles.
static AbstractClassDescription< ThePEG::Helicity::VertexBase > initVertexBase
Describe a concrete class with persistent data.
const set< tPDPtr > & outgoing() const
Get the list of outgoing particles.
void orderInGs(unsigned int order)
Set the order in .
This is the main namespace within which all identifiers in ThePEG are declared.
unsigned int size() const
Access to the particle information.
unsigned int _coupopt
option for the coupling
set< tPDPtr > _inpart
ParticleData pointers for the allowed incoming particles.
VertexType::T getName() const
Get name of Vertex.
Complex _norm
The overall coupling.
double electroMagneticCoupling(Energy2 q2) const
Electromagnetic coupling.
double _ee
Fixed value of the electromagentic coupling to use.
The VertexBase class is the base class for all helicity amplitude vertices.
double strongCoupling(Energy2 q2) const
Strong coupling.
double _gs
Fixed value of strong coupling to use.
unsigned int _ordergS
Order of vertex in .
unsigned int _ordergEM
Order of vertex in .
bool _calckinematics
Whether or not to calculate the kinematic invariants for the vertex.
const T UNDEFINED
Undefined Enum for the Lorentz structures.
ostream & operator<<(ostream &, const VertexBase &)
Output the information on the vertex.
void orderInGem(unsigned int order)
Set the order in .
unsigned int orderInGs() const
Get the order in .
void calculateKinematics(const vector< Lorentz5Momentum > &p)
Calculate the kinematics for a n-point vertex.
The Interfaced class is derived from the InterfacedBase class adding a couple of things particular to...
const double pi
Good old .
void calculateKinematics(const Lorentz5Momentum &p0, const Lorentz5Momentum &p1, const Lorentz5Momentum &p2, const Lorentz5Momentum &p3)
Calculate the kinematics for a 4-point vertex.
unsigned int _npoint
Number of particles at the vertex.
vector< vector< Energy2 > > _kine
Kinematica quantities needed for loop vertices.
unsigned int orderInGem() const
Get the order in .
Complex norm() const
Get the coupling.
void kinematics(bool kine)
Set whether or not to calculate the kinematics invariants.
void calculateKinematics(const Lorentz5Momentum &p0, const Lorentz5Momentum &p1, const Lorentz5Momentum &p2)
Calculate the kinematics for a 3-point vertex.
Energy2 invariant(unsigned int ix, unsigned int iy) const
Get one of the kinematic invariants.
The default concrete implementation of ClassTraitsBase.
bool isOutgoing(tPDPtr p) const
Is a particle allowed as an outgoing particle?
bool isIncoming(tPDPtr p) const
Is a particle allowed as an incoming particle?
void norm(const Complex &coup)
Members for the amplitude calculations.
vector< IBPtr > IVector
A vector of pointers to InterfacedBase objects.
BaseClassTraits describes the base classes of the templated class.
Complex normPropagator(int iopt, Energy2 q2, tcPDPtr part, complex< Energy > mass=-GeV, complex< Energy > width=-GeV)
Calculate propagator multiplied by coupling.
const set< tPDPtr > & incoming() const
Get the list of incoming particles.
The templated ClassTraitsBase class defines a set of default information about classes used by ThePEG...