Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F9501368
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
24 KB
Subscribers
None
View Options
diff --git a/Decay/HeavyMeson/HQETStrongDecayer.cc b/Decay/HeavyMeson/HQETStrongDecayer.cc
--- a/Decay/HeavyMeson/HQETStrongDecayer.cc
+++ b/Decay/HeavyMeson/HQETStrongDecayer.cc
@@ -1,426 +1,439 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the HQETStrongDecayer class.
//
#include "HQETStrongDecayer.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
#include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
#include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
#include "Herwig/Decay/TwoBodyDecayMatrixElement.h"
#include "Herwig/Utilities/Kinematics.h"
#include "ThePEG/Helicity/epsilon.h"
#include "ThePEG/Helicity/HelicityFunctions.h"
using namespace Herwig;
HQETStrongDecayer::HQETStrongDecayer()
- : fPi_(130.2*MeV), g_(0.565), h_(0.565), f_(0.565/3.), deltaEta_(1./43.7), Lambda_(1.*GeV),
+ : fPi_(130.2*MeV), g_(0.565), h_(0.565), f_(0.565/3.), deltaEta_(1./43.7), Lambda_(1.*GeV), psi_(0.),
incoming_ ({413,413,423,433, //D* decay modes: VtoSS
415,415,425,425,435,435, //D*_2 decay modes: TtoSS
415,415,425,425,435,435, //D*_2 decay modes: TtoVS
10413,10413,10423,10423,10433,10433, //D_1 decay modes: VtoVS
10411,10411,10421,10421,10431, //D*_0 decay modes: StoSS
20413,20413,20423,20423,20433}), //D'_1 decay modes: VtoVS
outgoingH_({421,411,421,431,
411,421,411,421,411,421,
413,423,413,423,413,423,
413,423,413,423,413,423,
411,421,411,421,431,
413,423,413,423,433}),
outgoingL_({211,111,111,111,
111,211,-211,111,311,321,
111,211,-211,111,311,321,
111,211,-211,111,311,321,
111,211,-211,111,111,
111,211,-211,111,111}),
type_ ({1, 1, 1, -1,
2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5,
6, 6, 6, 6, 6}),
maxWeight_({1., 1., 1., 1.,
1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1.,
1., 1., 1., 1., 1.})
{}
void HQETStrongDecayer::doinit() {
DecayIntegrator::doinit();
// check consistence of the parameters
unsigned int isize=incoming_.size();
if(isize!=outgoingH_.size()||isize!=outgoingL_.size()||
isize!=maxWeight_.size()||isize!=type_ .size())
throw InitException() << "Inconsistent parameters in HQETStrongDecayer"
<< Exception::abortnow;
// set up the integration channels
PhaseSpaceModePtr mode;
for(unsigned int ix=0;ix<incoming_.size();++ix) {
tPDPtr in = getParticleData(incoming_[ix]);
tPDVector out = {getParticleData(outgoingH_[ix]),
getParticleData(outgoingL_[ix])};
if(in&&out[0]&&out[1])
mode=new_ptr(PhaseSpaceMode(in,out,maxWeight_[ix]));
else
mode=PhaseSpaceModePtr();
addMode(mode);
}
}
void HQETStrongDecayer::doinitrun() {
DecayIntegrator::doinitrun();
if(initialize()) {
for(unsigned int ix=0;ix<incoming_.size();++ix)
if(mode(ix)) maxWeight_[ix] = mode(ix)->maxWeight();
}
}
IBPtr HQETStrongDecayer::clone() const {
return new_ptr(*this);
}
IBPtr HQETStrongDecayer::fullclone() const {
return new_ptr(*this);
}
void HQETStrongDecayer::persistentOutput(PersistentOStream & os) const {
os << ounit(fPi_,MeV) << g_ << h_ << f_<< deltaEta_ << ounit(Lambda_,GeV) << maxWeight_;
}
void HQETStrongDecayer::persistentInput(PersistentIStream & is, int) {
is >> iunit(fPi_,MeV) >> g_ >> h_ >> f_ >> deltaEta_ >> iunit(Lambda_,GeV) >> maxWeight_;
}
// The following static variable is needed for the type
// description system in ThePEG.
DescribeClass<HQETStrongDecayer,DecayIntegrator>
describeHerwigHQETStrongDecayer("Herwig::HQETStrongDecayer", "HwHMDecay.so");
void HQETStrongDecayer::Init() {
static ClassDocumentation<HQETStrongDecayer> documentation
("The HQETStrongDecayer class performs the strong decays of excited heavy mesons using HQET results.");
static Parameter<HQETStrongDecayer,Energy> interfacefPi
("fPi",
"The pion decay constant",
&HQETStrongDecayer::fPi_, MeV, 130.2*MeV, 100.0*MeV, 200.0*MeV,
false, false, Interface::limited);
static Parameter<HQETStrongDecayer,double> interfaceg
("g",
"The coupling for D* decays",
&HQETStrongDecayer::g_, 0.565, 0.0, 1.0,
false, false, Interface::limited);
static Parameter<HQETStrongDecayer,double> interfaceh
("h",
"The coupling for D_1, D*_2 and D*_2s decays",
&HQETStrongDecayer::h_, 0.565, 0.0, 1.0,
false, false, Interface::limited);
static Parameter<HQETStrongDecayer,double> interfacef
("f",
"The coupling for D*_0 and D'_1 decays",
&HQETStrongDecayer::f_, 0.565/3., 0.0, 1.0,
false, false, Interface::limited);
static ParVector<HQETStrongDecayer,double> interfaceMaxWeight
("MaxWeight",
"The maximum weight for the decay mode",
&HQETStrongDecayer::maxWeight_,
0, 0, 0, 0., 100000., false, false, true);
static Parameter<HQETStrongDecayer,double> interfaceDeltaEta
("DeltaEta",
"The mixing parameter for eta-pi0 of isospin violating decays",
&HQETStrongDecayer::deltaEta_, 1./43.7, 0.0, 1.,
false, false, Interface::limited);
static Parameter<HQETStrongDecayer,Energy> interfacefLambda
("Lambda",
"Strong decays momentum scale",
&HQETStrongDecayer::Lambda_, GeV, 1.*GeV, .1*GeV, 2.*GeV,
false, false, Interface::limited);
+
+ static Parameter<HQETStrongDecayer,double> interfacefpsi
+ ("psi",
+ "D_1 mixing angle",
+ &HQETStrongDecayer::psi_, 0., -M_PI/2., M_PI/2.,
+ false, false, Interface::limited);
}
int HQETStrongDecayer::modeNumber(bool & cc,tcPDPtr parent,
const tPDVector & children) const {
if(children.size()!=2) return -1;
int id(parent->id());
int idbar = parent->CC() ? parent->CC()->id() : id;
int id1(children[0]->id());
int id1bar = children[0]->CC() ? children[0]->CC()->id() : id1;
int id2(children[1]->id());
int id2bar = children[1]->CC() ? children[1]->CC()->id() : id2;
int imode(-1);
unsigned int ix(0);
cc=false;
do {
if(id ==incoming_[ix]) {
if((id1 ==outgoingH_[ix]&&id2 ==outgoingL_[ix])||
(id2 ==outgoingH_[ix]&&id1 ==outgoingL_[ix])) imode=ix;
}
if(idbar==incoming_[ix]) {
if((id1bar==outgoingH_[ix]&&id2bar==outgoingL_[ix])||
(id2bar==outgoingH_[ix]&&id1bar==outgoingL_[ix])) {
imode=ix;
cc=true;
}
}
++ix;
}
while(ix<incoming_.size()&&imode<0);
return imode;
}
void HQETStrongDecayer::
constructSpinInfo(const Particle & part, ParticleVector decay) const {
switch (part.dataPtr()->iSpin()) {
case PDT::Spin0:
Helicity::ScalarWaveFunction::constructSpinInfo(const_ptr_cast<tPPtr>(&part),
Helicity::incoming,true);
break;
case PDT::Spin1:
Helicity::VectorWaveFunction::constructSpinInfo(vecIn_,const_ptr_cast<tPPtr>(&part),
Helicity::incoming,true,false);
break;
case PDT::Spin2:
Helicity::TensorWaveFunction::constructSpinInfo(tensorIn_,const_ptr_cast<tPPtr>(&part),
Helicity::incoming,true,false);
break;
default:
assert(false);
}
// set up the spin information for the decay products
for(unsigned int ix=0;ix<decay.size();++ix) {
switch (decay[ix]->dataPtr()->iSpin()) {
case PDT::Spin1:
Helicity::VectorWaveFunction::constructSpinInfo(vecOut_,decay[ix],
Helicity::outgoing,true,false);
break;
case PDT::Spin0:
Helicity::ScalarWaveFunction::constructSpinInfo(decay[ix],Helicity::outgoing,true);
break;
default:
assert(false);
}
}
}
// matrix elememt for the process
double HQETStrongDecayer::me2(const int, const Particle & part,
const tPDVector & outgoing,
const vector<Lorentz5Momentum> & momenta,
MEOption meopt) const {
if(!ME()) {
if(abs(type_[imode()])==1) {
ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin1,PDT::Spin0,PDT::Spin0)));
}
if(abs(type_[imode()])==2) {
ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin2,PDT::Spin0,PDT::Spin0)));
}
if(abs(type_[imode()])==3) {
ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin2,PDT::Spin1,PDT::Spin0)));
}
if(abs(type_[imode()])==4 || abs(type_[imode()])==6) {
ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin1,PDT::Spin1,PDT::Spin0)));
}
if(abs(type_[imode()])==5) {
ME(new_ptr(TwoBodyDecayMatrixElement(PDT::Spin0,PDT::Spin0,PDT::Spin0)));
}
}
// stuff for incoming particle
if(meopt==Initialize) {
if(abs(type_[imode()])==1 || abs(type_[imode()])==4 || abs(type_[imode()])==6) {
rho_ = RhoDMatrix(PDT::Spin1);
Helicity::VectorWaveFunction::calculateWaveFunctions(vecIn_,rho_,const_ptr_cast<tPPtr>(&part),
Helicity::incoming,false);
}
else if(abs(type_[imode()])==2 || abs(type_[imode()])==3) {
rho_ = RhoDMatrix(PDT::Spin2);
Helicity::TensorWaveFunction::calculateWaveFunctions(tensorIn_,rho_,const_ptr_cast<tPPtr>(&part),
Helicity::incoming,false);
}
else if(abs(type_[imode()])==5) {
rho_ = RhoDMatrix(PDT::Spin0);
Helicity::ScalarWaveFunction::calculateWaveFunctions(rho_,const_ptr_cast<tPPtr>(&part),
Helicity::incoming);
}
else {
cerr << "Unknown decay mode: type " << type_[imode()] << " for " << part << "\n";
assert(false);
}
}
// calculate the matrix element
Energy pcm = Kinematics::pstarTwoBodyDecay(part.mass(),momenta[0].mass(),
momenta[1].mass()); //test subject
-
+
double test(0.);
// HeavyVectorMeson to PScalarMeson + PScalarMeson
if(abs(type_[imode()])==1) {
InvEnergy fact = -2.*g_/fPi_*sqrt(momenta[0].mass()/part.mass());
for(unsigned int ix=0;ix<3;++ix) {
(*ME())(ix,0,0) = fact*(vecIn_[ix]*momenta[1]);
}
// analytic test of the answer
test = 4.*sqr(g_)*momenta[0].mass()*sqr(pcm)/3./sqr(fPi_)/part.mass();
}
// HeavyTensorMeson to PScalarMeson + PScalarMeson
else if(abs(type_[imode()])==2) {
InvEnergy2 fact = -2.*h_/fPi_*sqrt(momenta[0].mass()/part.mass())/Lambda_;
for(unsigned int ix=0;ix<5;++ix) {
(*ME())(ix,0,0) = fact*(tensorIn_[ix]*momenta[1]*momenta[0]);
}
// analytic test of the answer
test = 8.*sqr(h_)*momenta[0].mass()*sqr(sqr(pcm))/15./sqr(fPi_)/sqr(Lambda_)/part.mass();
}
// HeavyTensorMeson to VectorMeson + PScalarMeson
else if(abs(type_[imode()])==3) {
// get the polarization vectors
vecOut_={
HelicityFunctions::polarizationVector(-momenta[0],0,Helicity::outgoing),
HelicityFunctions::polarizationVector(-momenta[0],1,Helicity::outgoing),
HelicityFunctions::polarizationVector(-momenta[0],2,Helicity::outgoing)};
InvEnergy3 fact = -2.*h_/fPi_*sqrt(momenta[0].mass()/part.mass())/Lambda_/part.mass();
for(unsigned int ix=0;ix<5;++ix) {
for(unsigned int iy=0;iy<3;++iy) {
LorentzVector<complex<InvEnergy> > vtemp =
fact*epsilon(momenta[0],vecOut_[iy],momenta[1]);
(*ME())(ix,iy,0) = (momenta[1]*tensorIn_[ix]).dot(vtemp);
}
}
// analytic test of the answer
test = 4.*sqr(h_)*momenta[0].mass()*sqr(sqr(pcm))/5./sqr(fPi_)/sqr(Lambda_)/part.mass();
}
// PVectorMeson to VectorMeson + PScalarMeson
else if(abs(type_[imode()])==4 || abs(type_[imode()])==6) {
// get the polarization vectors
vecOut_={HelicityFunctions::polarizationVector(-momenta[0],0,Helicity::outgoing),
HelicityFunctions::polarizationVector(-momenta[0],1,Helicity::outgoing),
HelicityFunctions::polarizationVector(-momenta[0],2,Helicity::outgoing)};
if(abs(type_[imode()])==4) {
- InvEnergy2 fact = sqrt(2./3.)*(h_/fPi_)*sqrt(momenta[0].mass()/part.mass())/Lambda_*momenta[0].mass()/part.mass();
+ InvEnergy2 factD1 = sqrt(2./3.)*(h_/fPi_)*sqrt(momenta[0].mass()/part.mass())
+ /Lambda_*momenta[0].mass()/part.mass();
+ InvEnergy factD1prim = -(f_/fPi_)*sqrt(momenta[0].mass()/part.mass());
for(unsigned int ix=0;ix<3;++ix) {
for(unsigned int iy=0;iy<3;++iy) {
- (*ME())(ix,iy,0)=Complex(fact*(vecOut_[iy].dot(vecIn_[ix])
+ (*ME())(ix,iy,0) = cos(psi_)*Complex(factD1*(vecOut_[iy].dot(vecIn_[ix])
*(momenta[1].mass2()-sqr(part.momentum()*momenta[1]/part.mass()))
- 3.*(vecIn_[ix]*momenta[1])*(vecOut_[iy]*momenta[1])));
+ (*ME())(ix,iy,0) += sin(psi_)*Complex(factD1prim*(momenta[1]*(part.momentum()/part.mass()
+ + momenta[0]/momenta[0].mass())*vecIn_[ix].dot(vecOut_[iy])
+ - vecOut_[iy].dot(part.momentum())*vecIn_[ix].dot(momenta[1])/part.mass()
+ - vecOut_[iy].dot(momenta[1] )*vecIn_[ix].dot(momenta[0])/momenta[0].mass()));
}
}
// analytic test of the answer
test = 4.*sqr(h_)*momenta[0].mass()*sqr(sqr(pcm))/3./sqr(fPi_)/sqr(Lambda_)/part.mass()*
- (25.-2.*sqr(momenta[0].mass()/part.mass())+10.*sqr(momenta[1].mass()/part.mass())+sqr((sqr(momenta[0].mass())-sqr(momenta[1].mass()))/sqr(part.mass())))/24.;
+ (25.-2.*sqr(momenta[0].mass()/part.mass())+10.*sqr(momenta[1].mass()/part.mass())
+ +sqr((sqr(momenta[0].mass())-sqr(momenta[1].mass()))/sqr(part.mass())))/24.;
}
else if(abs(type_[imode()])==6) {
InvEnergy fact = -(f_/fPi_)*sqrt(momenta[0].mass()/part.mass());
for(unsigned int ix=0;ix<3;++ix) {
for(unsigned int iy=0;iy<3;++iy) {
(*ME())(ix,iy,0)=
Complex(fact*(momenta[1]*(part.momentum()/part.mass() + momenta[0]/momenta[0].mass())
* vecIn_[ix].dot(vecOut_[iy])
- vecOut_[iy].dot(part.momentum())*vecIn_[ix].dot(momenta[1])/part.mass()
- vecOut_[iy].dot(momenta[1] )*vecIn_[ix].dot(momenta[0])/momenta[0].mass()));
}
}
// analytic test of the answer
test = sqr(f_)/(4.*sqr(fPi_))*sqr(part.mass()-momenta[0].mass())
* sqr(part.mass()+momenta[0].mass()-momenta[1].mass())
* sqr(part.mass()+momenta[0].mass()+momenta[1].mass())
/ (part.mass()*momenta[0].mass())/sqr(part.mass());
}
}
// ScalarMeson to ScalarMeson + ScalarMeson
else if(abs(type_[imode()])==5) {
InvEnergy fact = f_/fPi_*sqrt(momenta[0].mass()/part.mass());
(*ME())(0,0,0) = fact*momenta[1]*(part.momentum()/part.mass() + momenta[0]/momenta[0].mass());
// analytic test of the answer
test = sqr(f_)/(4.*sqr(fPi_))*(momenta[0].mass()/part.mass())
* sqr(part.mass()-momenta[0].mass())
* sqr(part.mass()+momenta[0].mass()-momenta[1].mass())
* sqr(part.mass()+momenta[0].mass()+momenta[1].mass())
/ part.mass()/momenta[0].mass()/sqr(part.mass());
}
else {
assert(false);
}
double output = ME()->contract(rho_).real();
// testing
double ratio = (output-test)/(output+test);
generator()->log() << "testing matrix element for " << part.PDGName() << " -> "
<< outgoing[0]->PDGName() << " " << outgoing[1]->PDGName() << " "
<< output << " " << test << " " << ratio << endl;
// isospin factors
if(abs(outgoing[1]->id())==ParticleID::pi0) {
output *= type_[imode()]>0 ? 0.5 : 0.125*sqr(deltaEta_);
}
// return the answer
return output;
}
bool HQETStrongDecayer::twoBodyMEcode(const DecayMode & dm,int & mecode,
double & coupling) const {
// int imode(-1);
// int id(dm.parent()->id());
// int idbar = dm.parent()->CC() ? dm.parent()->CC()->id() : id;
// ParticleMSet::const_iterator pit(dm.products().begin());
// int id1((**pit).id());
// int id1bar = (**pit).CC() ? (**pit).CC()->id() : id1;
// ++pit;
// int id2((**pit).id());
// int id2bar = (**pit).CC() ? (**pit).CC()->id() : id2;
// unsigned int ix(0); bool order(false);
// do {
// if(id ==incoming_[ix]) {
// if(id1==outgoingH_[ix]&&id2==outgoingL_[ix]) {
// imode=ix;
// order=true;
// }
// if(id2==outgoingH_[ix]&&id1==outgoingL_[ix]) {
// imode=ix;
// order=false;
// }
// }
// if(idbar==incoming_[ix]&&imode<0) {
// if(id1bar==outgoingH_[ix]&&id2bar==outgoingL_[ix]) {
// imode=ix;
// order=true;
// }
// if(id2bar==outgoingH_[ix]&&id1bar==outgoingL_[ix]) {
// imode=ix;
// order=false;
// }
// }
// ++ix;
// }
// while(ix<incoming_.size()&&imode<0);
// coupling=_coupling[imode]*dm.parent()->mass();
// mecode=7;
// return order;
}
void HQETStrongDecayer::dataBaseOutput(ofstream & output,
bool header) const {
if(header) output << "update decayers set parameters=\"";
// parameters for the DecayIntegrator base class
DecayIntegrator::dataBaseOutput(output,false);
// the rest of the parameters
// couplings
output << "newdef " << name() << ":fPi " << fPi_/MeV << "\n";
output << "newdef " << name() << ":g " << g_ << "\n";
if(header) output << "\n\" where BINARY ThePEGName=\""
<< fullName() << "\";" << endl;
for(unsigned int ix=0;ix<incoming_.size();++ix) {
output << "newdef " << name() << ":MaxWeight " << ix << " " << maxWeight_[ix] << "\n";
}
}
diff --git a/Decay/HeavyMeson/HQETStrongDecayer.h b/Decay/HeavyMeson/HQETStrongDecayer.h
--- a/Decay/HeavyMeson/HQETStrongDecayer.h
+++ b/Decay/HeavyMeson/HQETStrongDecayer.h
@@ -1,244 +1,249 @@
// -*- C++ -*-
#ifndef Herwig_HQETStrongDecayer_H
#define Herwig_HQETStrongDecayer_H
//
// This is the declaration of the HQETStrongDecayer class.
//
#include "Herwig/Decay/DecayIntegrator.h"
#include "Herwig/Decay/PhaseSpaceMode.h"
#include "ThePEG/Helicity/LorentzPolarizationVector.h"
namespace Herwig {
using namespace ThePEG;
/** \ingroup Decay
* The HQETStrongDecayer class implements the strong decays of excited heavy, i.e. bottom and charm mesons, using
* heavy quark effective theory results
*
* @see \ref HQETStrongDecayerInterfaces "The interfaces"
* defined for HQETStrongDecayer.
*/
class HQETStrongDecayer: public DecayIntegrator {
public:
/**
* The default constructor.
*/
HQETStrongDecayer();
/**
* Which of the possible decays is required
* @param cc Is this mode the charge conjugate
* @param parent The decaying particle
* @param children The decay products
*/
virtual int modeNumber(bool & cc, tcPDPtr parent,
const tPDVector & children) const;
/**
* Return the matrix element squared for a given mode and phase-space channel.
* @param ichan The channel we are calculating the matrix element for.
* @param part The decaying Particle.
* @param outgoing The particles produced in the decay
* @param momenta The momenta of the particles produced in the decay
* @param meopt Option for the calculation of the matrix element
* @return The matrix element squared for the phase-space configuration.
*/
double me2(const int ichan,const Particle & part,
const tPDVector & outgoing,
const vector<Lorentz5Momentum> & momenta,
MEOption meopt) const;
/**
* Construct the SpinInfos for the particles produced in the decay
*/
virtual void constructSpinInfo(const Particle & part,
ParticleVector outgoing) const;
/**
* Specify the \f$1\to2\f$ matrix element to be used in the running width calculation.
* @param dm The DecayMode
* @param mecode The code for the matrix element as described
* in the GenericWidthGenerator class, in this case 7.
* @param coupling The coupling for the matrix element.
* @return True or False if this mode can be handled.
*/
bool twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const;
/**
* Output the setup information for the particle database
* @param os The stream to output the information to
* @param header Whether or not to output the information for MySQL
*/
virtual void dataBaseOutput(ofstream & os,bool header) const;
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
/**
* Initialize this object to the begining of the run phase.
*/
virtual void doinitrun();
//@}
private:
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
HQETStrongDecayer & operator=(const HQETStrongDecayer &) = delete;
private:
/**
* Coupings for the decays
*/
//@{
/**
* Pion decay constant
*/
Energy fPi_;
/**
* Coupling for decays within the \f$(0^-,1^-)\f$ multiplet
*/
double g_;
/**
* Coupling for decays within the \f$(1^+ ,2^+)\f$ multiplet
*/
double h_;
/**
* Coupling for decays within the \f$(0^+ ,1^+)\f$ multiplet
*/
double f_;
/**
+ * D_1 mixing angle
+ */
+ double psi_;
+
+ /**
* \f$\eta-\pi^0 \f$ mixing for isospin violating decays
*/
double deltaEta_;
//@}
/**
* A momentum scale characterising the convergence of the
* derivative expansion. We expect Lambda_ ~ 1 GeV.
*/
Energy Lambda_;
//@}
/**
* Particles etc for thye different modes
*/
//@{
/**
* the PDG codes for the incoming particles
*/
vector<int> incoming_;
/**
* the PDG codes for outgoing heavy meson
*/
vector<int> outgoingH_;
/**
* the PDG codes for outgoing light meson
*/
vector<int> outgoingL_;
/**
* Type of decay
*/
vector<int> type_;
/**
* the maximum weight for the decay
*/
vector<double> maxWeight_;
//@}
/**
* Storage of wavefunctions etx
*/
//@{
/**
* Storage of the \f$\rho\f$ matrix
*/
mutable RhoDMatrix rho_;
/**
* Storage of polarization vectors of the decaying particle
*/
mutable vector<Helicity::LorentzPolarizationVector> vecIn_;
/**
* Storage of polarization tensors of the decaying particle
*/
mutable vector<Helicity::LorentzTensor<double> > tensorIn_;
/**
* Storage of polarization vectors of the decay product
*/
mutable vector<Helicity::LorentzPolarizationVector> vecOut_;
//@}
};
}
#endif /* Herwig_HQETStrongDecayer_H */
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sun, Feb 23, 2:24 PM (15 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4482031
Default Alt Text
(24 KB)
Attached To
rHERWIGHG herwighg
Event Timeline
Log In to Comment