Page MenuHomeHEPForge

VectorMesonVectorScalarDecayer.cc
No OneTemporary

VectorMesonVectorScalarDecayer.cc

// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the VectorMesonVectorScalarDecayer class.
//
#include "VectorMesonVectorScalarDecayer.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/PDT/DecayMode.h"
#include "ThePEG/Interface/ParVector.h"
#include "Herwig++/Helicity/WaveFunction/ScalarWaveFunction.h"
#include "Herwig++/Helicity/WaveFunction/VectorWaveFunction.h"
#ifdef ThePEG_TEMPLATES_IN_CC_FILE
// #include "VectorMesonVectorScalarDecayer.tcc"
#endif
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
namespace Herwig {
using namespace ThePEG;
using namespace ThePEG::Helicity;
using Helicity::ScalarWaveFunction;
using Helicity::VectorWaveFunction;
using Helicity::outgoing;
VectorMesonVectorScalarDecayer::VectorMesonVectorScalarDecayer()
{
// intermediates
generateIntermediates(false);
// decay of the phi to the a_0 and f_0 and a photon
_incoming.push_back(333);_outgoingV.push_back(22);_outgoingS.push_back(9000111);
_coupling.push_back(0.154/GeV);_maxweight.push_back(17.);
_incoming.push_back(333);_outgoingV.push_back(22);_outgoingS.push_back(9010221);
_coupling.push_back(0.267/GeV);_maxweight.push_back(14.);
// Jpsi decayers
_incoming.push_back(443);_outgoingV.push_back(22);_outgoingS.push_back(10331);
_coupling.push_back(0.00207/GeV);_maxweight.push_back(3.);
_incoming.push_back(443);_outgoingV.push_back(223);_outgoingS.push_back(10331);
_coupling.push_back(0.00144/GeV);_maxweight.push_back(9.);
_incoming.push_back(443);_outgoingV.push_back(333);_outgoingS.push_back(10331);
_coupling.push_back(0.00127/GeV);_maxweight.push_back(9.);
_incoming.push_back(443);_outgoingV.push_back(333);_outgoingS.push_back(9010221);
_coupling.push_back(0.00070/GeV);_maxweight.push_back(12.);
_incoming.push_back(443);_outgoingV.push_back(223);_outgoingS.push_back(9010221);
_coupling.push_back(0.00048/GeV);_maxweight.push_back(13.);
// upsilon(2s)
_incoming.push_back(100553);_outgoingV.push_back(22);_outgoingS.push_back(10551);
_coupling.push_back(0.122/GeV);_maxweight.push_back(2.5);
// upsilon(3s)
_incoming.push_back(200553);_outgoingV.push_back(22);_outgoingS.push_back(110551);
_coupling.push_back(0.174/GeV);_maxweight.push_back(2.5);
// psi2s decays
_incoming.push_back(100443);_outgoingV.push_back(22);_outgoingS.push_back(10441);
_coupling.push_back(0.229/GeV);_maxweight.push_back(5.);
_incoming.push_back(100443);_outgoingV.push_back(22);_outgoingS.push_back(331);
_coupling.push_back(0.0464/GeV);_maxweight.push_back(2.1);
_incoming.push_back(100443);_outgoingV.push_back(22);_outgoingS.push_back(10331);
_coupling.push_back(0.000695/GeV);_maxweight.push_back(2.5);
_incoming.push_back(100443);_outgoingV.push_back(333);_outgoingS.push_back(9010221);
_coupling.push_back(0.000530/GeV);_maxweight.push_back(10.);
// rho' to sigma rho
_incoming.push_back(100213);_outgoingV.push_back(213);_outgoingS.push_back(9000221);
_incoming.push_back(100113);_outgoingV.push_back(113);_outgoingS.push_back(9000221);
_coupling.push_back(0.174/GeV);_maxweight.push_back(2.5);
_coupling.push_back(0.174/GeV);_maxweight.push_back(2.5);
// initial size of the arrays
_initsize = _coupling.size();
}
VectorMesonVectorScalarDecayer::~VectorMesonVectorScalarDecayer() {}
int VectorMesonVectorScalarDecayer::modeNumber(bool & cc,const DecayMode & dm) const
{
int imode(-1);
int id(dm.parent()->id()),idbar(id);
if(dm.parent()->CC()){idbar=dm.parent()->CC()->id();}
ParticleMSet::const_iterator pit(dm.products().begin());
int id1((**pit).id()),id1bar(id1);
if((**pit).CC()){id1bar=(**pit).CC()->id();}
++pit;
int id2((**pit).id()),id2bar(id2);
if((**pit).CC()){id2bar=(**pit).CC()->id();}
unsigned int ix(0);
cc=false;
do
{
if(id ==_incoming[ix])
{if((id1 ==_outgoingV[ix]&&id2 ==_outgoingS[ix])||
(id2 ==_outgoingV[ix]&&id1 ==_outgoingS[ix])){imode=ix;}}
if(idbar==_incoming[ix])
{if((id1bar==_outgoingV[ix]&&id2bar==_outgoingS[ix])||
(id2bar==_outgoingV[ix]&&id1bar==_outgoingS[ix])){imode=ix;cc=true;}}
++ix;
}
while(ix<_incoming.size()&&imode<0);
return imode;
}
void VectorMesonVectorScalarDecayer::persistentOutput(PersistentOStream & os) const
{os << _incoming << _outgoingV << _outgoingS << _maxweight << _coupling;}
void VectorMesonVectorScalarDecayer::persistentInput(PersistentIStream & is, int)
{is >> _incoming >> _outgoingV >> _outgoingS >> _maxweight >> _coupling;}
ClassDescription<VectorMesonVectorScalarDecayer> VectorMesonVectorScalarDecayer::initVectorMesonVectorScalarDecayer;
// Definition of the static class description member.
void VectorMesonVectorScalarDecayer::Init() {
static ClassDocumentation<VectorMesonVectorScalarDecayer> documentation
("The VectorMesonVectorScalarDecayer class is designed for the "
"decay of a vector meson to a vector meson, or the photon, and a "
"scalar meson.");
static ParVector<VectorMesonVectorScalarDecayer,int> interfaceIncoming
("Incoming",
"The PDG code for the incoming particle",
&VectorMesonVectorScalarDecayer::_incoming,
0, 0, 0, -10000000, 10000000, false, false, true);
static ParVector<VectorMesonVectorScalarDecayer,int> interfaceOutcomingVector
("OutgoingVector",
"The PDG code for the outgoing spin-1 particle",
&VectorMesonVectorScalarDecayer::_outgoingV,
0, 0, 0, -10000000, 10000000, false, false, true);
static ParVector<VectorMesonVectorScalarDecayer,int> interfaceOutcomingScalar
("OutgoingScalar",
"The PDG code for the outgoing spin-0 particle",
&VectorMesonVectorScalarDecayer::_outgoingS,
0, 0, 0, -10000000, 10000000, false, false, true);
static ParVector<VectorMesonVectorScalarDecayer,InvEnergy> interfaceCoupling
("Coupling",
"The coupling for the decay mode",
&VectorMesonVectorScalarDecayer::_coupling,
0, 0, 0, 0./GeV, 100./GeV, false, false, true);
static ParVector<VectorMesonVectorScalarDecayer,double> interfaceMaxWeight
("MaxWeight",
"The maximum weight for the decay mode",
&VectorMesonVectorScalarDecayer::_maxweight,
0, 0, 0, 0., 100., false, false, true);
}
// the hadronic currents
vector<LorentzPolarizationVector>
VectorMesonVectorScalarDecayer::decayCurrent(const bool vertex, const int,
const Particle & inpart,
const ParticleVector & decay) const
{
// storage for the current
vector<LorentzPolarizationVector> temp;
bool photon=_outgoingV[imode()]==ParticleID::gamma;
// set up the spin information for the decay products
VectorWaveFunction(temp,decay[0],outgoing,true,photon,vertex);
// workaround for gcc 3.2.3 bug
//ALB ScalarWaveFunction(decay[1],outgoing,true,vertex);
PPtr mytemp = decay[1];
ScalarWaveFunction(mytemp,outgoing,true,vertex);
// calculate the currents
Energy2 p0dotpv(inpart.momentum()*decay[0]->momentum());
Complex epsdot(0.),pre(_coupling[imode()]/inpart.mass());
for(unsigned int ix=0;ix<3;++ix)
{
if(ix==1&&photon)
{temp[ix]=LorentzPolarizationVector();}
else
{
epsdot=temp[ix]*inpart.momentum();
temp[ix]=pre*(p0dotpv*temp[ix]-epsdot*decay[0]->momentum());
}
}
return temp;
}
bool VectorMesonVectorScalarDecayer::twoBodyMEcode(const DecayMode & dm,
int & mecode,
double & coupling) const
{
int imode(-1);
int id(dm.parent()->id()),idbar(id);
if(dm.parent()->CC()){idbar=dm.parent()->CC()->id();}
ParticleMSet::const_iterator pit(dm.products().begin());
int id1((**pit).id()),id1bar(id1);
if((**pit).CC()){id1bar=(**pit).CC()->id();}
++pit;
int id2((**pit).id()),id2bar(id2);
if((**pit).CC()){id2bar=(**pit).CC()->id();}
unsigned int ix(0); bool order(false);
do
{
if(id==_incoming[ix])
{
if(id1 ==_outgoingV[ix]&&id2 ==_outgoingS[ix]){imode=ix;order=true;}
if(id2 ==_outgoingV[ix]&&id1 ==_outgoingS[ix]){imode=ix;order=false;}
}
if(idbar==_incoming[ix]&&imode<0)
{
if(id1bar==_outgoingV[ix]&&id2bar==_outgoingS[ix]){imode=ix;order=true;}
if(id2bar==_outgoingV[ix]&&id1bar==_outgoingS[ix]){imode=ix;order=false;}
}
++ix;
}
while(ix<_incoming.size()&&imode<0);
coupling = _coupling[imode]*dm.parent()->mass();
mecode = 4;
return order;
}
void VectorMesonVectorScalarDecayer::dataBaseOutput(ofstream & output,
bool header) const
{
if(header){output << "update decayers set parameters=\"";}
// parameters for the DecayIntegrator base class
VectorMesonDecayerBase::dataBaseOutput(output,false);
// the rest of the parameters
for(unsigned int ix=0;ix<_incoming.size();++ix)
{
if(ix<_initsize)
{
output << "set " << fullName() << ":Incoming " << ix << " "
<< _incoming[ix] << "\n";
output << "set " << fullName() << ":OutgoingVector " << ix << " "
<< _outgoingV[ix] << "\n";
output << "set " << fullName() << ":OutgoingScalar " << ix << " "
<< _outgoingS[ix] << "\n";
output << "set " << fullName() << ":Coupling " << ix << " "
<< _coupling[ix] << "\n";
output << "set " << fullName() << ":MaxWeight " << ix << " "
<< _maxweight[ix] << "\n";
}
else
{
output << "insert " << fullName() << ":Incoming " << ix << " "
<< _incoming[ix] << "\n";
output << "insert " << fullName() << ":OutgoingVector " << ix << " "
<< _outgoingV[ix] << "\n";
output << "insert " << fullName() << ":OutgoingScalar " << ix << " "
<< _outgoingS[ix] << "\n";
output << "insert " << fullName() << ":Coupling " << ix << " "
<< _coupling[ix] << "\n";
output << "insert " << fullName() << ":MaxWeight " << ix << " "
<< _maxweight[ix] << "\n";
}
}
if(header){output << "\n\" where BINARY ThePEGName=\"" << fullName() << "\";" << endl;}
}
}

File Metadata

Mime Type
text/x-c
Expires
Sun, Feb 23, 3:03 PM (12 m, 24 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4486821
Default Alt Text
VectorMesonVectorScalarDecayer.cc (9 KB)

Event Timeline