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"; }
VertexType::T _theName
Name of vertex.
PersistentIStream is used to read persistent objects from a stream where they were previously written...
unsigned int size() const
Access to the particle information.
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...
A concreate implementation of ClassDescriptionBase describing an abstract class with persistent data...
bool isIncoming(tPDPtr p) const
Is a particle allowed as an incoming particle?
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...
unsigned int orderInGs() const
Get the order in .
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.
void orderInGs(unsigned int order)
Set the order in .
This is the main namespace within which all identifiers in ThePEG are declared.
unsigned int _coupopt
option for the coupling
double strongCoupling(Energy2 q2) const
Strong coupling.
set< tPDPtr > _inpart
ParticleData pointers for the allowed incoming particles.
Complex _norm
The overall coupling.
bool isOutgoing(tPDPtr p) const
Is a particle allowed as an outgoing particle?
double _ee
Fixed value of the electromagentic coupling to use.
The VertexBase class is the base class for all helicity amplitude vertices.
Energy2 invariant(unsigned int ix, unsigned int iy) const
Get one of the kinematic invariants.
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.
Complex norm() const
Get the coupling.
double electroMagneticCoupling(Energy2 q2) const
Electromagnetic coupling.
bool kinematics() const
Whether or not to calculate the kinematics invariants.
void orderInGem(unsigned int order)
Set 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...
double weakCoupling(Energy2 q2) const
Weak coupling.
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.
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.
The default concrete implementation of ClassTraitsBase.
VertexType::T getName() const
Get name of Vertex.
void norm(const Complex &coup)
Members for the amplitude calculations.
unsigned int getNpoint() const
Get number of lines on Vertex.
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.
unsigned int orderInGem() const
Get the order in .
const set< tPDPtr > & outgoing() const
Get the list of outgoing particles.
The templated ClassTraitsBase class defines a set of default information about classes used by ThePEG...