File: ParticleTraits.h
Description:
ParticleTraits is a templated class defining a general
interface to any particle class. To make another particle type
PType available to some general Pythia7 routines, the
ParticleTraits should be specialized to that class
implementing relevant methods of the general
ParticleTraits class below. Typically one needs
specialisation both for the class itself and of pointers to the
class.
See
also:
namespace Pythia7
template <typename PType>
STRUCT
ParticleTraits
Public members:
static PType & ref(PType & p) {
return p;
Return a reference to the particle.
static LorentzMomentum momentum(const PType & p) {
return p.momentum();
Return the momentum of particle p.
static Energy mass(const PType & p) {
return p.mass();
Return the mass of particle p.
static void transform(PType & p, const LorentzRotation & r) {
p.transform(r);
Perform a Lorentz transformation on particle p.
static void set5Momentum(PType & p, const Lorentz5Momentum & q) {
p.set5Momentum(q);
Set the momentum and mass of a particle.
static void set3Momentum(PType & p, const Momentum3 & q) {
p.set3Momentum(q);
Set the 3-momentum and mass of a particle.
static int iCharge(const PType & p) {
return p.data().iCharge();
Return charge of particle p in units of e/3.
template <>
STRUCT
ParticleTraits<PPtr>
Public members:
static Particle & ref(tPPtr p) {
return *p;
static const LorentzMomentum & momentum(tPPtr p) {
return p->momentum();
static Energy mass(tPPtr p) {
return p->mass();
static void transform(tPPtr p, const LorentzRotation & r) {
p->transform(r);
static void set5Momentum(tPPtr p, const Lorentz5Momentum & q) {
p->set5Momentum(q);
static void set3Momentum(tPPtr p, const Momentum3 & q) {
p->set3Momentum(q);
static int iCharge(tPPtr p) {
return p->data().iCharge();
template <>
STRUCT
ParticleTraits<cPPtr>
Public members:
static const Particle & ref(tcPPtr p) {
return *p;
static const LorentzMomentum & momentum(tcPPtr & p) {
return p->momentum();
static Energy mass(tcPPtr p) {
return p->mass();
static int iCharge(tcPPtr & p) {
return p->data().iCharge();
template <>
STRUCT
ParticleTraits<tPPtr>
Public members:
static Particle & ref(tPPtr p) {
return *p;
static const LorentzMomentum & momentum(tPPtr p) {
return p->momentum();
static Energy mass(tPPtr p) {
return p->mass();
static void transform(tPPtr p, const LorentzRotation & r) {
p->transform(r);
static void set5Momentum(tPPtr p, const Lorentz5Momentum & q) {
p->set5Momentum(q);
static void set3Momentum(tPPtr p, const Momentum3 & q) {
p->set3Momentum(q);
static int iCharge(tPPtr p) {
return p->data().iCharge();
template <>
STRUCT
ParticleTraits<tcPPtr>
Public members:
static const Particle & ref(tcPPtr p) {
return *p;
static const LorentzMomentum & momentum(tcPPtr p) {
return p->momentum();
static Energy mass(tcPPtr p) {
return p->mass();
static int iCharge(tcPPtr p) {
return p->data().iCharge();
template <>
STRUCT
ParticleTraits<LorentzMomentum>
Public members:
static LorentzMomentum & ref(LorentzMomentum & p) {
return p;
static const LorentzMomentum & momentum(const LorentzMomentum & p) {
return p;
static Energy mass(const LorentzMomentum & p) {
return p.m();
static void transform(LorentzMomentum & p, const LorentzRotation & r) {
p.transform(r);
static void set5Momentum(LorentzMomentum & p, const Lorentz5Momentum & q) {
p = q;
static void set3Momentum(LorentzMomentum & p, const Momentum3 & q) {
p = LorentzMomentum(q, sqrt(q.mag2() + p.m2()));
template <>
STRUCT
ParticleTraits<Lorentz5Momentum>
Public members:
static Lorentz5Momentum & ref(Lorentz5Momentum & p) {
return p;
static const LorentzMomentum & momentum(const Lorentz5Momentum & p) {
return p;
static Energy mass(const Lorentz5Momentum & p) {
return p.mass();
static void transform(Lorentz5Momentum & p, const LorentzRotation & r) {
p.transform(r);
static void set5Momentum(Lorentz5Momentum & p, const Lorentz5Momentum & q) {
p = q;
static void set3Momentum(Lorentz5Momentum & p, const Momentum3 & q) {
p = Lorentz5Momentum(p.mass(), q);
STRUCT
Transformer
Public members:
Transformer(const LorentzRotation & rin) : r(rin) {}
Transformer(const Transformer & t) : r(t.r) {}
template <typename PType>
void operator()(const PType & p) {
ParticleTraits<PType>::transform(p, r);
const LorentzRotation & r;
DEFINED MACROS
INCLUDED FILES