Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8723801
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
141 KB
Subscribers
None
View Options
diff --git a/Decay/WeakCurrents/EtaPiPiCurrent.cc b/Decay/WeakCurrents/EtaPiPiCurrent.cc
--- a/Decay/WeakCurrents/EtaPiPiCurrent.cc
+++ b/Decay/WeakCurrents/EtaPiPiCurrent.cc
@@ -1,328 +1,327 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the EtaPiPiCurrent class.
//
#include "EtaPiPiCurrent.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Repository/UseRandom.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Helicity/epsilon.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
EtaPiPiCurrent::EtaPiPiCurrent() : fpi_(93.3*MeV) {
rhoMasses_ = {0.77549*GeV,1.470*GeV,1.76*GeV};
rhoWidths_ = {0.1494 *GeV,0.28 *GeV,0.3 *GeV};
amp_ = {1. , -0.385, -0.08};
phase_ = {0. , -5.6, -3.9};
// set up for the modes in the base class
addDecayMode(2,-1);
addDecayMode(1,-1);
addDecayMode(2,-2);
setInitialModes(3);
}
IBPtr EtaPiPiCurrent::clone() const {
return new_ptr(*this);
}
IBPtr EtaPiPiCurrent::fullclone() const {
return new_ptr(*this);
}
void EtaPiPiCurrent::doinit() {
WeakCurrent::doinit();
// check consistency of parametrers
if(rhoMasses_.size() != rhoWidths_.size())
throw InitException() << "Inconsistent parameters in EtaPiPiCurrent"
<< "::doinit()" << Exception::abortnow;
// weights for the rho channels
if(amp_.size()!=phase_.size())
throw InitException() << "The vectors containing the weights and phase for the"
<< " rho channel must be the same size in "
<< "EtaPiPiCurrent::doinit()" << Exception::runerror;
// combine mags and phase
weights_.clear();
for(unsigned int ix=0;ix<amp_.size();++ix) {
weights_.push_back(amp_[ix]*(cos(phase_[ix])+Complex(0.,1.)*sin(phase_[ix])));
}
}
void EtaPiPiCurrent::persistentOutput(PersistentOStream & os) const {
os << weights_ << amp_ << phase_ << ounit(fpi_,MeV)
<< ounit(rhoMasses_,GeV) << ounit(rhoWidths_,GeV);
}
void EtaPiPiCurrent::persistentInput(PersistentIStream & is, int) {
is >> weights_ >> amp_ >> phase_ >> iunit(fpi_,MeV)
>> iunit(rhoMasses_,GeV) >> iunit(rhoWidths_,GeV);
}
// The following static variable is needed for the type
// description system in ThePEG.
DescribeClass<EtaPiPiCurrent,WeakCurrent>
describeHerwigEtaPiPiCurrent("Herwig::EtaPiPiCurrent", "HwWeakCurrents.so");
void EtaPiPiCurrent::Init() {
static ClassDocumentation<EtaPiPiCurrent> documentation
("There is no documentation for the EtaPiPiCurrent class");
static ParVector<EtaPiPiCurrent,Energy> interfaceRhoMasses
("RhoMasses",
"The masses of the different rho resonances for the pi pi channel",
&EtaPiPiCurrent::rhoMasses_, MeV, -1, 775.8*MeV, ZERO, 10000.*MeV,
false, false, true);
static ParVector<EtaPiPiCurrent,Energy> interfaceRhoWidths
("RhoWidths",
"The widths of the different rho resonances for the pi pi channel",
&EtaPiPiCurrent::rhoWidths_, MeV, -1, 150.3*MeV, ZERO, 1000.*MeV,
false, false, true);
static ParVector<EtaPiPiCurrent,double> interfaceRhoMagnitude
("RhoMagnitude",
"Magnitude of the weight of the different resonances for the pi pi channel",
&EtaPiPiCurrent::amp_, -1, 0., 0, 0,
false, false, Interface::nolimits);
static ParVector<EtaPiPiCurrent,double> interfaceRhoPhase
("RhoPhase",
"Phase of the weight of the different resonances for the pi pi channel",
&EtaPiPiCurrent::phase_, -1, 0., 0, 0,
false, false, Interface::nolimits);
static Parameter<EtaPiPiCurrent,Energy> interfaceFPi
("FPi",
"The pion decay constant",
&EtaPiPiCurrent::fpi_, MeV, 93.3*MeV, ZERO, 200.0*MeV,
false, false, true);
}
// complete the construction of the decay mode for integration
bool EtaPiPiCurrent::createMode(int icharge, tcPDPtr resonance,
IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
unsigned int imode,PhaseSpaceModePtr mode,
unsigned int iloc,int ires,
PhaseSpaceChannel phase, Energy upp ) {
// check the charge
if((imode==0 && abs(icharge)!=3) ||
(imode>0 && icharge !=0)) return false;
// check the total isospin
if(Itotal!=IsoSpin::IUnknown) {
if(Itotal!=IsoSpin::IOne) return false;
}
// check I_3
if(i3!=IsoSpin::I3Unknown) {
switch(i3) {
case IsoSpin::I3Zero:
if(imode==0) return false;
break;
case IsoSpin::I3One:
if(imode==1 || icharge ==-3) return false;
break;
case IsoSpin::I3MinusOne:
if(imode==1 || icharge ==3) return false;
default:
return false;
}
}
// make sure that the decays are kinematically allowed
int iq(0),ia(0);
tPDVector part = particles(icharge,imode,iq,ia);
Energy min=ZERO;
for(tPDPtr p : part) min += p->massMin();
if(min>upp) return false;
// set up the resonances
tPDPtr res[3];
if(icharge==0) {
res[0] =getParticleData(113);
res[1] =getParticleData(100113);
res[2] =getParticleData(30113);
}
else {
res[0] =getParticleData(213);
res[1] =getParticleData(100213);
res[2] =getParticleData(30213);
if(icharge==-3) {
for(unsigned int ix=0;ix<3;++ix) {
if(res[ix]&&res[ix]->CC()) res[ix]=res[ix]->CC();
}
}
}
// create the channels
for(unsigned int ix=0;ix<3;++ix) {
if(!res[ix]) continue;
if(resonance && resonance != res[ix]) continue;
mode->addChannel((PhaseSpaceChannel(phase),ires,res[ix],ires+1,res[0],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
// reset the masses in the intergrators
for(unsigned int ix=0;ix<3;++ix) {
if(ix<rhoMasses_.size()&&res[ix]) {
mode->resetIntermediate(res[ix],rhoMasses_[ix],rhoWidths_[ix]);
}
}
return true;
}
// the particles produced by the current
tPDVector EtaPiPiCurrent::particles(int icharge, unsigned int imode,
int,int) {
tPDVector output(3);
+ output[0]=getParticleData(ParticleID::piplus);
output[2]=getParticleData(ParticleID::eta);
if(imode==0) {
- output[0]=getParticleData(ParticleID::piplus);
output[1]=getParticleData(ParticleID::pi0);
if(icharge==-3) {
for(unsigned int ix=0;ix<output.size();++ix) {
if(output[ix]->CC()) output[ix]=output[ix]->CC();
}
}
}
else {
- output[0]=getParticleData(ParticleID::piplus);
output[1]=getParticleData(ParticleID::piminus);
}
return output;
}
// hadronic current
vector<LorentzPolarizationVectorE>
EtaPiPiCurrent::current(tcPDPtr resonance,
- IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
- const int imode, const int ichan,Energy & scale,
- const tPDVector & outgoing,
- const vector<Lorentz5Momentum> & momenta,
- DecayIntegrator::MEOption) const {
+ IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
+ const int imode, const int ichan,Energy & scale,
+ const tPDVector & outgoing,
+ const vector<Lorentz5Momentum> & momenta,
+ DecayIntegrator::MEOption) const {
useMe();
// check the isospin
if(Itotal!=IsoSpin::IUnknown && Itotal!=IsoSpin::IOne)
return vector<LorentzPolarizationVectorE>();
int icharge = outgoing[0]->iCharge()+outgoing[1]->iCharge();
// check I_3
if(i3!=IsoSpin::I3Unknown) {
switch(i3) {
case IsoSpin::I3Zero:
if(imode==0) return vector<LorentzPolarizationVectorE>();
break;
case IsoSpin::I3One:
if(imode==1 || icharge ==-3) return vector<LorentzPolarizationVectorE>();
break;
case IsoSpin::I3MinusOne:
if(imode==1 || icharge ==3) return vector<LorentzPolarizationVectorE>();
default:
return vector<LorentzPolarizationVectorE>();
}
}
Lorentz5Momentum Q=momenta[0]+momenta[1]+momenta[2];
Q.rescaleMass();
Energy2 s1 = (momenta[0]+momenta[1]).m2();
Complex BW1 = Resonance::BreitWignerPWave(s1,rhoMasses_[0],rhoWidths_[0],
momenta[0].mass(),momenta[1].mass());
vector<Complex> BWs = {Resonance::BreitWignerPWave(Q.mass2(),rhoMasses_[0],rhoWidths_[0],
momenta[0].mass(),momenta[1].mass()),
Resonance::BreitWignerFW(Q.mass2(),rhoMasses_[1],
rhoWidths_[1]*pow(Q.mass()/rhoMasses_[1],3)),
Resonance::BreitWignerFW(Q.mass2(),rhoMasses_[2],
rhoWidths_[2]*pow(Q.mass()/rhoMasses_[2],3))};
Complex denom = std::accumulate(weights_.begin(),weights_.end(),Complex(0.));
unsigned int imin=0,imax=3;
if(resonance) {
switch(resonance->id()/1000) {
case 0:
imax = 1;
break;
case 100:
imin = 1;
imax = 2;
break;
case 30 :
imin = 2;
imax = 3;
break;
default:
assert(false);
}
}
if(ichan>0) {
imin = ichan;
imax = ichan+1;
}
// form factor
Complex fact(0.);
for(unsigned int ix=imin;ix<imax;++ix) {
fact += weights_[ix]*BWs[ix];
}
fact *= -0.25*Complex(0.,1.)/sqr(Constants::pi)/sqrt(3.)/denom*BW1;
if(imode==0) fact *=sqrt(2.);
scale=Q.mass();
LorentzPolarizationVectorE output = fact/pow<3,1>(fpi_)*Q.mass()*
Helicity::epsilon(momenta[0],momenta[1],momenta[2]);
return vector<LorentzPolarizationVectorE>(1,output);
}
bool EtaPiPiCurrent::accept(vector<int> id) {
// check there are only three particles
if(id.size()!=3) return false;
unsigned int npip(0),npim(0),npi0(0),neta(0);
for(unsigned int ix=0;ix<id.size();++ix) {
if(id[ix]==ParticleID::piplus) ++npip;
else if(id[ix]==ParticleID::piminus) ++npim;
else if(id[ix]==ParticleID::pi0) ++npi0;
else if(id[ix]==ParticleID::eta) ++neta;
}
if( (npip==1&&npim==1&&neta==1) ||
(npi0==1&&npim+npip==1&&neta==1))
return true;
else
return false;
}
// the decay mode
unsigned int EtaPiPiCurrent::decayMode(vector<int> idout) {
unsigned int npi(0);
for(unsigned int ix=0;ix<idout.size();++ix) {
if(abs(idout[ix])==ParticleID::piplus) ++npi;
}
if(npi==2) return 1;
else return 0;
}
// output the information for the database
void EtaPiPiCurrent::dataBaseOutput(ofstream & output,bool header,
bool create) const {
if(header) output << "update decayers set parameters=\"";
if(create) output << "create Herwig::EtaPiPiCurrent "
<< name() << " HwWeakCurrents.so\n";
unsigned int ix;
for(ix=0;ix<rhoMasses_.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":RhoMasses " << ix << " " << rhoMasses_[ix]/MeV << "\n";
}
for(ix=0;ix<rhoWidths_.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":RhoWidths " << ix << " " << rhoWidths_[ix]/MeV << "\n";
}
for(ix=0;ix<weights_.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":RhoMagnitude " << ix << " " << amp_[ix] << "\n";
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":RhoPhase " << ix << " " << phase_[ix] << "\n";
}
output << "newdef " << name() << ":FPi " << fpi_/MeV << "\n";
WeakCurrent::dataBaseOutput(output,false,false);
if(header) output << "\n\" where BINARY ThePEGName=\""
<< fullName() << "\";" << endl;
}
diff --git a/Decay/WeakCurrents/EtaPiPiDefaultCurrent.cc b/Decay/WeakCurrents/EtaPiPiDefaultCurrent.cc
--- a/Decay/WeakCurrents/EtaPiPiDefaultCurrent.cc
+++ b/Decay/WeakCurrents/EtaPiPiDefaultCurrent.cc
@@ -1,1252 +1,364 @@
// -*- C++ -*-
//
// EtaPiPiDefaultCurrent.cc is a part of Herwig - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2017 The Herwig Collaboration
//
// Herwig is licenced under version 3 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the EtaPiPiDefaultCurrent class.
//
#include "EtaPiPiDefaultCurrent.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig/PDT/ThreeBodyAllOnCalculator.h"
#include "ThePEG/Utilities/DescribeClass.h"
using namespace Herwig;
using namespace ThePEG;
DescribeClass<EtaPiPiDefaultCurrent,WeakCurrent>
describeHerwigEtaPiPiDefaultCurrent("Herwig::EtaPiPiDefaultCurrent",
"HwWeakCurrents.so");
-HERWIG_INTERPOLATOR_CLASSDESC(EtaPiPiDefaultCurrent,Energy,Energy2)
-
EtaPiPiDefaultCurrent::EtaPiPiDefaultCurrent() {
- // the quarks for the different modes
+ // set up for the modes in the base class
addDecayMode(2,-1);
- addDecayMode(2,-1);
- addDecayMode(2,-1);
- addDecayMode(2,-1);
- addDecayMode(2,-1);
- addDecayMode(2,-3);
- addDecayMode(2,-3);
- addDecayMode(2,-3);
- addDecayMode(2,-1);
- addDecayMode(2,-1);
- addDecayMode(2,-1);
- addDecayMode(2,-1);
- setInitialModes(12);
+ addDecayMode(1,-1);
+ addDecayMode(2,-2);
+ setInitialModes(3);
// the pion decay constant
_fpi=130.7*MeV/sqrt(2.);
- _mpi=ZERO;_mK=ZERO;
+ _mpi=ZERO;
// set the initial weights for the resonances
// the rho weights
- _rhoF123wgts.push_back(1.0);_rhoF123wgts.push_back(-0.145);
- _rhoF123wgts.push_back(0.);
- _rhoF5wgts.push_back(-26.);_rhoF5wgts.push_back(6.5);
- _rhoF5wgts.push_back(1.);
- // the Kstar weights
- _kstarF123wgts.push_back(1.);
- _kstarF5wgts.push_back(1.);
- // relative rho/Kstar weights
- _rhoKstarwgt=-0.2;
- // local values of the a_1 parameters
- _a1parameters=true;_a1mass=1.251*GeV;_a1width=0.599*GeV;
- _a1opt=true;
- // local values of the K_1 parameters
- _k1parameters=true;_k1mass=1.402*GeV,_k1width=0.174*GeV;
+ _rhoF123wgts = { 1.0,-0.145,0.};
+ _rhoF5wgts = {-26., 6.5,1.};
// local values of the rho parameters
- _rhoparameters=true;
- _rhoF123masses.push_back(0.773*GeV);_rhoF123masses.push_back(1.370*GeV);
- _rhoF123masses.push_back(1.750*GeV);
- _rhoF123widths.push_back(0.145*GeV);_rhoF123widths.push_back(0.510*GeV);
- _rhoF123widths.push_back(0.120*GeV);
- _rhoF5masses.push_back(0.773*GeV);_rhoF5masses.push_back(1.500*GeV);
- _rhoF5masses.push_back(1.750*GeV);
- _rhoF5widths.push_back(0.145*GeV);_rhoF5widths.push_back(0.220*GeV);
- _rhoF5widths.push_back(0.120*GeV);
- // local values for the Kstar parameters
- _kstarparameters=true;
- _kstarF123masses.push_back(0.8921*GeV);
- _kstarF123widths.push_back(0.0513*GeV);
- _kstarF5masses.push_back(0.8921*GeV);
- _kstarF5widths.push_back(0.0513*GeV);
- // initialization of the a_1 running width
- _initializea1=false;
- double a1q2in[200]={0,15788.6,31577.3,47365.9,63154.6,78943.2,94731.9,110521,
- 126309,142098,157886,173675,189464,205252,221041,236830,
- 252618,268407,284196,299984,315773,331562,347350,363139,
- 378927,394716,410505,426293,442082,457871,473659,489448,
- 505237,521025,536814,552603,568391,584180,599969,615757,
- 631546,647334,663123,678912,694700,710489,726278,742066,
- 757855,773644,789432,805221,821010,836798,852587,868375,
- 884164,899953,915741,931530,947319,963107,978896,994685,
- 1.01047e+06,1.02626e+06,1.04205e+06,1.05784e+06,1.07363e+06,
- 1.08942e+06,1.10521e+06,1.12099e+06,1.13678e+06,1.15257e+06,
- 1.16836e+06,1.18415e+06,1.19994e+06,1.21573e+06,1.23151e+06,
- 1.2473e+06,1.26309e+06,1.27888e+06,1.29467e+06,1.31046e+06,
- 1.32625e+06,1.34203e+06,1.35782e+06,1.37361e+06,1.3894e+06,
- 1.40519e+06,1.42098e+06,1.43677e+06,1.45256e+06,1.46834e+06
- ,1.48413e+06,1.49992e+06,1.51571e+06,1.5315e+06,1.54729e+06,
- 1.56308e+06,1.57886e+06,1.59465e+06,1.61044e+06,1.62623e+06,
- 1.64202e+06,1.65781e+06,1.6736e+06,1.68939e+06,1.70517e+06,
- 1.72096e+06,1.73675e+06,1.75254e+06,1.76833e+06,1.78412e+06,
- 1.79991e+06,1.81569e+06,1.83148e+06,1.84727e+06,1.86306e+06,
- 1.87885e+06,1.89464e+06,1.91043e+06,1.92621e+06,1.942e+06,
- 1.95779e+06,1.97358e+06,1.98937e+06,2.00516e+06,2.02095e+06,
- 2.03674e+06,2.05252e+06,2.06831e+06,2.0841e+06,2.09989e+06,
- 2.11568e+06,2.13147e+06,2.14726e+06,2.16304e+06,2.17883e+06,
- 2.19462e+06,2.21041e+06,2.2262e+06,2.24199e+06,2.25778e+06,
- 2.27356e+06,2.28935e+06,2.30514e+06,2.32093e+06,2.33672e+06,
- 2.35251e+06,2.3683e+06,2.38409e+06,2.39987e+06,2.41566e+06,
- 2.43145e+06,2.44724e+06,2.46303e+06,2.47882e+06,2.49461e+06,
- 2.51039e+06,2.52618e+06,2.54197e+06,2.55776e+06,2.57355e+06,
- 2.58934e+06,2.60513e+06,2.62092e+06,2.6367e+06,2.65249e+06,
- 2.66828e+06,2.68407e+06,2.69986e+06,2.71565e+06,2.73144e+06,
- 2.74722e+06,2.76301e+06,2.7788e+06,2.79459e+06,2.81038e+06,
- 2.82617e+06,2.84196e+06,2.85774e+06,2.87353e+06,2.88932e+06,
- 2.90511e+06,2.9209e+06,2.93669e+06,2.95248e+06,2.96827e+06,
- 2.98405e+06,2.99984e+06,3.01563e+06,3.03142e+06,3.04721e+06,
- 3.063e+06,3.07879e+06,3.09457e+06,3.11036e+06,3.12615e+06,
- 3.14194e+06};
- double a1widthin[200]={0,0,0,0,0,0,0,0,0,0,0,0,0.00153933,0.0136382,0.0457614,
- 0.105567,0.199612,0.333825,0.513831,0.745192,1.0336,1.38501,
- 1.80581,2.30295,2.88403,3.5575,4.33278,5.22045,6.23243,
- 7.38223,8.68521,10.1589,11.8234,13.7018,15.8206,18.2107,
- 20.9078,23.9533,27.3954,31.2905,35.7038,40.7106,46.3984,
- 52.8654,60.2207,68.581,78.0637,88.7754,100.794,114.145,
- 128.783,144.574,161.299,178.683,196.426,214.248,231.908,
- 249.221,266.059,282.336,298.006,313.048,327.46,341.254,
- 354.448,367.066,379.133,390.677,401.726,412.304,422.439,
- 432.155,441.474,450.419,459.01,467.267,475.207,482.847,
- 490.203,497.29,504.121,510.71,517.068,523.207,529.138,
- 534.869,540.411,545.776,550.961,556.663,560.851,565.566,
- 570.137,574.569,578.869,583.041,587.091,591.023,594.843,
- 598.553,602.16,605.664,609.072,612.396,615.626,618.754,
- 621.796,624.766,627.656,630.47,633.21,635.878,638.5,
- 641.006,643.471,645.873,648.213,650.493,652.715,654.88,
- 656.99,659.047,661.052,663.007,664.963,666.771,668.6,
- 670.351,672.075,673.828,675.397,676.996,678.567,680.083,
- 681.589,683.023,684.457,685.825,687.18,688.499,689.789,
- 691.058,692.284,693.501,694.667,695.82,696.947,698.05,
- 699.129,700.186,701.221,702.234,703.226,704.198,705.158,
- 706.085,707.001,707.899,708.78,709.644,710.474,711.334,
- 712.145,712.943,713.727,714.505,715.266,716.015,716.751,
- 717.474,718.183,718.88,719.645,720.243,720.91,721.565,
- 722.211,722.851,723.473,724.094,724.697,725.296,725.886,
- 726.468,727.041,727.608,728.166,728.718,729.262,729.808,
- 730.337,730.856,731.374,731.883,732.386,732.884,733.373,
- 733.859,734.339,734.813};
-
- vector<double> tmp1(a1widthin,a1widthin+200);
- _a1runwidth.clear();
- std::transform(tmp1.begin(), tmp1.end(),
- back_inserter(_a1runwidth),
- [](double x){return x*GeV;});
-
- vector<double> tmp2(a1q2in,a1q2in+200);
- _a1runq2.clear();
- std::transform(tmp2.begin(), tmp2.end(),
- back_inserter(_a1runq2),
- [](double x){return x*GeV2;});
-
- _maxmass=ZERO;
- _maxcalc=ZERO;
+ _rhoF123masses = {0.773*GeV,1.370*GeV,1.750*GeV};
+ _rhoF123widths = {0.145*GeV,0.510*GeV,0.120*GeV};
+ _rhoF5masses = {0.773*GeV,1.500*GeV,1.750*GeV};
+ _rhoF5widths = {0.145*GeV,0.220*GeV,0.120*GeV};
}
void EtaPiPiDefaultCurrent::doinit() {
WeakCurrent::doinit();
// the particles we will use a lot
- tPDPtr a1(getParticleData(ParticleID::a_1minus)),
- k1(getParticleData(ParticleID::Kstar_1minus)),pi0(getParticleData(ParticleID::pi0)),
- piplus(getParticleData(ParticleID::piplus)),
- piminus(getParticleData(ParticleID::piminus));
+ tPDPtr piplus(getParticleData(ParticleID::piplus));
// masses for the running widths
_mpi=piplus->mass();
- _mK=getParticleData(ParticleID::Kminus)->mass();
- // the charged rho resonances
- tPDPtr rhoc[3]={getParticleData(-213),getParticleData(-100213),
- getParticleData(-30213)};
- // the charged K* resonances
- tPDPtr Kstarc[3]={getParticleData(-323),getParticleData(-100323),
- getParticleData(-30323)};
- if(!_a1parameters) {
- _a1mass=a1->mass();
- _a1width=a1->width();
- }
- // mass and width of the k_1
- if(!_k1parameters) {
- _k1mass=k1->mass();
- _k1width=k1->width();
- }
- // initialise the a_1 running width calculation
- inita1Width(-1);
- // rho parameters in the base classs
- tcPDPtr temp;
- unsigned int ix;
- if(_rhoparameters&&_rhoF123masses.size()<3) {
- ix = _rhoF123masses.size();
- _rhoF123masses.resize(3);_rhoF123widths.resize(3);
- for(;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF123masses[ix]=rhoc[ix]->mass();
- _rhoF123widths[ix]=rhoc[ix]->width();
- }
- }
- }
- else if(!_rhoparameters) {
- _rhoF123masses.resize(3);_rhoF123widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF123masses[ix]=rhoc[ix]->mass();
- _rhoF123widths[ix]=rhoc[ix]->width();
- }
- }
- }
- // K star parameters in the base class
- if(_kstarparameters&&_kstarF123masses.size()<3) {
- ix = _kstarF123masses.size();
- _kstarF123masses.resize(3);_kstarF123widths.resize(3);
- for(;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF123masses[ix]=Kstarc[ix]->mass();
- _kstarF123widths[ix]=Kstarc[ix]->width();
- }
- }
- }
- else if(!_kstarparameters) {
- _kstarF123masses.resize(3);_kstarF123widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF123masses[ix]=Kstarc[ix]->mass();
- _kstarF123widths[ix]=Kstarc[ix]->width();
- }
- }
- }
- // rho parameters here
- if(_rhoparameters&&_rhoF5masses.size()<3) {
- ix = _rhoF5masses.size();
- _rhoF5masses.resize(3);_rhoF5widths.resize(3);
- for(;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF5masses[ix]=rhoc[ix]->mass();
- _rhoF5widths[ix]=rhoc[ix]->width();
- }
- }
- }
- else if(!_rhoparameters) {
- _rhoF5masses.resize(3);_rhoF5widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF5masses[ix]=rhoc[ix]->mass();
- _rhoF5widths[ix]=rhoc[ix]->width();
- }
- }
- }
- // Kstar parameters here
- if(_kstarparameters&&_kstarF5widths.size()<3) {
- ix = _kstarF5masses.size();
- _kstarF5masses.resize(3);_kstarF5widths.resize(3);
- for(;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF5masses[ix]=Kstarc[ix]->mass();
- _kstarF5widths[ix]=Kstarc[ix]->width();
- }
- }
- }
- else if(!_kstarparameters) {
- _kstarF5masses.resize(3);_kstarF5widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF5masses[ix]=Kstarc[ix]->mass();
- _kstarF5widths[ix]=Kstarc[ix]->width();
- }
- }
- }
}
void EtaPiPiDefaultCurrent::persistentOutput(PersistentOStream & os) const {
- os << _rhoF123wgts << _kstarF123wgts << _rhoF5wgts << _kstarF5wgts
- << _rhoKstarwgt << ounit(_a1runwidth,GeV)<< ounit(_a1runq2,GeV2)
- << _initializea1
- << ounit(_a1mass,GeV)<< ounit(_a1width,GeV)<< ounit(_k1mass,GeV)
- << ounit(_k1width,GeV)<< ounit(_fpi,GeV) << ounit(_mpi,GeV)<< ounit(_mK,GeV)
- <<_rhoparameters << ounit(_rhoF123masses,GeV) << ounit(_rhoF5masses,GeV)
- << ounit(_rhoF123widths,GeV)
- << ounit(_rhoF5widths,GeV) << _kstarparameters << ounit(_kstarF123masses,GeV)
- <<ounit(_kstarF5masses,GeV)
- << ounit(_kstarF123widths,GeV) << ounit(_kstarF5widths,GeV) << _a1parameters
- << _k1parameters
- << _a1opt << ounit(_maxmass,GeV) << ounit(_maxcalc,GeV) << _a1runinter;
+ os << _rhoF123wgts << _rhoF5wgts << ounit(_fpi,GeV) << ounit(_mpi,GeV)
+ << ounit(_rhoF123masses,GeV) << ounit(_rhoF5masses,GeV)
+ << ounit(_rhoF123widths,GeV) << ounit(_rhoF5widths,GeV);
}
void EtaPiPiDefaultCurrent::persistentInput(PersistentIStream & is, int) {
- is >> _rhoF123wgts >> _kstarF123wgts >> _rhoF5wgts >> _kstarF5wgts
- >> _rhoKstarwgt >> iunit(_a1runwidth,GeV) >> iunit(_a1runq2,GeV2)
- >> _initializea1
- >> iunit(_a1mass,GeV) >> iunit(_a1width,GeV) >> iunit(_k1mass,GeV)
- >> iunit(_k1width,GeV) >> iunit(_fpi,GeV) >> iunit(_mpi,GeV) >> iunit(_mK,GeV)
- >>_rhoparameters >> iunit(_rhoF123masses,GeV) >> iunit(_rhoF5masses,GeV)
- >> iunit(_rhoF123widths,GeV)
- >> iunit(_rhoF5widths,GeV) >> _kstarparameters >> iunit(_kstarF123masses,GeV)
- >>iunit(_kstarF5masses,GeV)
- >> iunit(_kstarF123widths,GeV) >> iunit(_kstarF5widths,GeV) >> _a1parameters
- >> _k1parameters
- >> _a1opt >> iunit(_maxmass,GeV) >> iunit(_maxcalc,GeV) >> _a1runinter;
+ is >> _rhoF123wgts >> _rhoF5wgts >> iunit(_fpi,GeV) >> iunit(_mpi,GeV)
+ >> iunit(_rhoF123masses,GeV) >> iunit(_rhoF5masses,GeV)
+ >> iunit(_rhoF123widths,GeV) >> iunit(_rhoF5widths,GeV);
}
void EtaPiPiDefaultCurrent::Init() {
static ClassDocumentation<EtaPiPiDefaultCurrent> documentation
("The EtaPiPiDefaultCurrent class is designed to implement "
"the three meson decays of the tau, ie pi- pi- pi+, pi0 pi0 pi-, "
"K- pi- K+, K0 pi- Kbar0, K- pi0 K0,pi0 pi0 K-, K- pi- pi+, "
"pi- Kbar0 pi0, pi- pi0 eta. It uses the same currents as those in TAUOLA.",
"The three meson decays of the tau, ie pi- pi- pi+, pi0 pi0 pi-, "
"K- pi- K+, K0 pi- Kbar0, K- pi0 K0,pi0 pi0 K-, K- pi- pi+, "
"and pi- Kbar0 pi0, pi- pi0 eta "
"use the same currents as \\cite{Jadach:1993hs,Kuhn:1990ad,Decker:1992kj}.",
"%\\cite{Jadach:1993hs}\n"
"\\bibitem{Jadach:1993hs}\n"
" S.~Jadach, Z.~Was, R.~Decker and J.~H.~Kuhn,\n"
" %``The Tau Decay Library Tauola: Version 2.4,''\n"
" Comput.\\ Phys.\\ Commun.\\ {\\bf 76}, 361 (1993).\n"
" %%CITATION = CPHCB,76,361;%%\n"
"%\\cite{Kuhn:1990ad}\n"
"\\bibitem{Kuhn:1990ad}\n"
" J.~H.~Kuhn and A.~Santamaria,\n"
" %``Tau decays to pions,''\n"
" Z.\\ Phys.\\ C {\\bf 48}, 445 (1990).\n"
" %%CITATION = ZEPYA,C48,445;%%\n"
"%\\cite{Decker:1992kj}\n"
"\\bibitem{Decker:1992kj}\n"
" R.~Decker, E.~Mirkes, R.~Sauer and Z.~Was,\n"
" %``Tau decays into three pseudoscalar mesons,''\n"
" Z.\\ Phys.\\ C {\\bf 58}, 445 (1993).\n"
" %%CITATION = ZEPYA,C58,445;%%\n"
);
-
static ParVector<EtaPiPiDefaultCurrent,double> interfaceF123RhoWgt
("F123RhoWeight",
"The weights of the different rho resonances in the F1,2,3 form factor",
&EtaPiPiDefaultCurrent::_rhoF123wgts,
0, 0, 0, -1000, 1000, false, false, true);
- static ParVector<EtaPiPiDefaultCurrent,double> interfaceF123KstarWgt
- ("F123KstarWeight",
- "The weights of the different Kstar resonances in the F1,2,3 form factor",
- &EtaPiPiDefaultCurrent::_kstarF123wgts,
- 0, 0, 0, -1000, 1000, false, false, true);
-
static ParVector<EtaPiPiDefaultCurrent,double> interfaceF5RhoWgt
("F5RhoWeight",
"The weights of the different rho resonances in the F1,2,3 form factor",
&EtaPiPiDefaultCurrent::_rhoF5wgts,
0, 0, 0, -1000, 1000, false, false, true);
- static ParVector<EtaPiPiDefaultCurrent,double> interfaceF5KstarWgt
- ("F5KstarWeight",
- "The weights of the different Kstar resonances in the F1,2,3 form factor",
- &EtaPiPiDefaultCurrent::_kstarF5wgts,
- 0, 0, 0, -1000, 1000, false, false, true);
-
- static Parameter<EtaPiPiDefaultCurrent,double> interfaceRhoKstarWgt
- ("RhoKstarWgt",
- "The relative weights of the rho and K* in the F5 form factor",
- &EtaPiPiDefaultCurrent::_rhoKstarwgt, -0.2, -10., 10.,
- false, false, false);
-
- static Switch<EtaPiPiDefaultCurrent,bool> interfaceInitializea1
- ("Initializea1",
- "Initialise the calculation of the a_1 running width",
- &EtaPiPiDefaultCurrent::_initializea1, false, false, false);
- static SwitchOption interfaceInitializea1Initialization
- (interfaceInitializea1,
- "Yes",
- "Initialize the calculation",
- true);
- static SwitchOption interfaceInitializea1NoInitialization
- (interfaceInitializea1,
- "No",
- "Use the default values",
- false);
-
- static Switch<EtaPiPiDefaultCurrent,bool> interfaceRhoParameters
- ("RhoParameters",
- "Use local values of the rho meson masses and widths",
- &EtaPiPiDefaultCurrent::_rhoparameters, true, false, false);
- static SwitchOption interfaceRhoParameterstrue
- (interfaceRhoParameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceRhoParametersParticleData
- (interfaceRhoParameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<EtaPiPiDefaultCurrent,bool> interfaceKstarParameters
- ("KstarParameters",
- "Use local values of the rho meson masses and widths",
- &EtaPiPiDefaultCurrent::_kstarparameters, true, false, false);
- static SwitchOption interfaceKstarParameterstrue
- (interfaceKstarParameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceKstarParametersParticleData
- (interfaceKstarParameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<EtaPiPiDefaultCurrent,bool> interfacea1Parameters
- ("a1Parameters",
- "Use local values of the rho meson masses and widths",
- &EtaPiPiDefaultCurrent::_a1parameters, true, false, false);
- static SwitchOption interfacea1Parameterstrue
- (interfacea1Parameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfacea1ParametersParticleData
- (interfacea1Parameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<EtaPiPiDefaultCurrent,bool> interfaceK1Parameters
- ("K1Parameters",
- "Use local values of the rho meson masses and widths",
- &EtaPiPiDefaultCurrent::_k1parameters, true, false, false);
- static SwitchOption interfaceK1Parameterstrue
- (interfaceK1Parameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceK1ParametersParticleData
- (interfaceK1Parameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<EtaPiPiDefaultCurrent,bool> interfacea1WidthOption
- ("a1WidthOption",
- "Option for the treatment of the a1 width",
- &EtaPiPiDefaultCurrent::_a1opt, true, false, false);
- static SwitchOption interfacea1WidthOptionLocal
- (interfacea1WidthOption,
- "Local",
- "Use a calculation of the running width based on the parameters as"
- " interpolation table.",
- true);
- static SwitchOption interfacea1WidthOptionParam
- (interfacea1WidthOption,
- "Kuhn",
- "Use the parameterization of Kuhn and Santamaria for default parameters."
- " This should only be used for testing vs TAUOLA",
- false);
-
- static ParVector<EtaPiPiDefaultCurrent,Energy> interfacea1RunningWidth
- ("a1RunningWidth",
- "The values of the a_1 width for interpolation to giving the running width.",
- &EtaPiPiDefaultCurrent::_a1runwidth, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<EtaPiPiDefaultCurrent,Energy2> interfacea1RunningQ2
- ("a1RunningQ2",
- "The values of the q^2 for interpolation to giving the running width.",
- &EtaPiPiDefaultCurrent::_a1runq2, GeV2, -1, 1.0*GeV2, ZERO, 10.0*GeV2,
- false, false, true);
-
- static Parameter<EtaPiPiDefaultCurrent,Energy> interfaceA1Width
- ("A1Width",
- "The a_1 width if using local values.",
- &EtaPiPiDefaultCurrent::_a1width, GeV, 0.599*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static Parameter<EtaPiPiDefaultCurrent,Energy> interfaceA1Mass
- ("A1Mass",
- "The a_1 mass if using local values.",
- &EtaPiPiDefaultCurrent::_a1mass, GeV, 1.251*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static Parameter<EtaPiPiDefaultCurrent,Energy> interfaceK1Width
- ("K1Width",
- "The K_1 width if using local values.",
- &EtaPiPiDefaultCurrent::_k1width, GeV, 0.174*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static Parameter<EtaPiPiDefaultCurrent,Energy> interfaceK1Mass
- ("K1Mass",
- "The K_1 mass if using local values.",
- &EtaPiPiDefaultCurrent::_k1mass, GeV, 1.402*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
static ParVector<EtaPiPiDefaultCurrent,Energy> interfacerhoF123masses
("rhoF123masses",
"The masses for the rho resonances if used local values",
&EtaPiPiDefaultCurrent::_rhoF123masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<EtaPiPiDefaultCurrent,Energy> interfacerhoF123widths
("rhoF123widths",
"The widths for the rho resonances if used local values",
&EtaPiPiDefaultCurrent::_rhoF123widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<EtaPiPiDefaultCurrent,Energy> interfacerhoF5masses
("rhoF5masses",
"The masses for the rho resonances if used local values",
&EtaPiPiDefaultCurrent::_rhoF5masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<EtaPiPiDefaultCurrent,Energy> interfacerhoF5widths
("rhoF5widths",
"The widths for the rho resonances if used local values",
&EtaPiPiDefaultCurrent::_rhoF5widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
- static ParVector<EtaPiPiDefaultCurrent,Energy> interfaceKstarF123masses
- ("KstarF123masses",
- "The masses for the Kstar resonances if used local values",
- &EtaPiPiDefaultCurrent::_kstarF123masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<EtaPiPiDefaultCurrent,Energy> interfaceKstarF123widths
- ("KstarF123widths",
- "The widths for the Kstar resonances if used local values",
- &EtaPiPiDefaultCurrent::_kstarF123widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<EtaPiPiDefaultCurrent,Energy> interfaceKstarF5masses
- ("KstarF5masses",
- "The masses for the Kstar resonances if used local values",
- &EtaPiPiDefaultCurrent::_kstarF5masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<EtaPiPiDefaultCurrent,Energy> interfaceKstarF5widths
- ("KstarF5widths",
- "The widths for the Kstar resonances if used local values",
- &EtaPiPiDefaultCurrent::_kstarF5widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
static Parameter<EtaPiPiDefaultCurrent,Energy> interfaceFPi
("FPi",
"The pion decay constant",
&EtaPiPiDefaultCurrent::_fpi, MeV, 92.4*MeV, ZERO, 200.0*MeV,
false, false, true);
}
-
-// modes handled by this class
-bool EtaPiPiDefaultCurrent::acceptMode(int imode) const {
- return imode>=0&&imode<=8;
-}
-
-// calculate the form-factors
-EtaPiPiDefaultCurrent::FormFactors
-EtaPiPiDefaultCurrent::calculateFormFactors(const int ichan, const int imode,
- Energy2 q2, Energy2 s1,
- Energy2 s2, Energy2 s3) const {
- useMe();
- Complex F1, F2, F3, F4, F5;
- F1 = F2 = F3 = F4 = F5 = 0.0;
- // calculate the pi- pi- pi+ factor
- if(imode==0) {
- Complex a1fact(a1BreitWigner(q2)*2./3.);
- if(ichan<0) {
- F1= a1fact*BrhoF123(s1,-1);
- F2 =-a1fact*BrhoF123(s2,-1);
- }
- else if(ichan%2==0) F1 = a1fact*BrhoF123(s1, ichan/2);
- else if(ichan%2==1) F2 =-a1fact*BrhoF123(s2,(ichan-1)/2);
- }
- // calculate the pi0 pi0 pi- factor
- else if(imode==1) {
- Complex a1fact(a1BreitWigner(q2)*2./3.);
- if(ichan<0) {
- F1 = a1fact*BrhoF123(s1,-1);
- F2 =-a1fact*BrhoF123(s2,-1);
- }
- else if(ichan%2==0) F1 = a1fact*BrhoF123(s1, ichan/2);
- else if(ichan%2==1) F2 =-a1fact*BrhoF123(s2,(ichan-1)/2);
- }
- // calculate the K- pi - K+ factor
- else if(imode==2) {
- Complex a1fact(a1BreitWigner(q2)*sqrt(2.)/3.);
- if(ichan<0) {
- F1 =-a1fact*BKstarF123(s1,-1);
- F2 = a1fact*BrhoF123(s2,-1);
- F5 = BrhoF5(q2,-1)*FKrho(s1,s2,-1)*sqrt(2.);
- }
- else if(ichan%8==0) F1 =-a1fact*BKstarF123(s1,ichan/8);
- else if(ichan%8==1) F2 = a1fact*BrhoF123(s2,(ichan-1)/8);
- else if(ichan%8>=2) F5 = BrhoF5(q2,ichan/8)*FKrho(s1,s2,(ichan-2)%8)*sqrt(2.);
- }
- // calculate the K0 pi- K0bar
- else if(imode==3) {
- Complex a1fact(a1BreitWigner(q2)*sqrt(2.)/3.);
- if(ichan<0) {
- F1 =-a1fact*BKstarF123(s1,-1);
- F2 = a1fact*BrhoF123(s2,-1);
- F5 =-BrhoF5(q2,-1)*FKrho(s1,s2,-1)*sqrt(2.);
- }
- else if(ichan%8==0) F1 = -a1fact*BKstarF123(s1,ichan/8);
- else if(ichan%8==1) F2 = a1fact*BrhoF123(s2,(ichan-1)/8);
- else if(ichan%8>=2) F5 = -BrhoF5(q2,ichan/8)*FKrho(s1,s2,(ichan-2)%8)*sqrt(2.);
- }
- // calculate the K- pi0 k0
- else if(imode==4) {
- Complex a1fact(a1BreitWigner(q2));
- if(ichan<0){F2 =-a1fact*BrhoF123(s2,-1);}
- else{F2 =-a1fact*BrhoF123(s2,ichan);}
- }
- // calculate the pi0 pi0 K-
- else if(imode==5) {
- Complex K1fact(K1BreitWigner(q2)/6.);
- if(ichan<0) {
- F1 = K1fact*BKstarF123(s1,-1);
- F2 =-K1fact*BKstarF123(s2,-1);
- }
- else if(ichan%2==0) F1 = K1fact*BKstarF123(s1,ichan/2);
- else F2 =-K1fact*BKstarF123(s2,(ichan-1)/2);
- }
- // calculate the K- pi- pi+
- else if(imode==6) {
- Complex K1fact(K1BreitWigner(q2)*sqrt(2.)/3.);
- if(ichan<0) {
- F1 =-K1fact*BrhoF123(s1,-1);
- F2 = K1fact*BKstarF123(s2,-1);
- F5 =-BKstarF123(q2,-1)*FKrho(s2,s1,-1)*sqrt(2.);
- }
- else if(ichan%8==0) F1 =-K1fact*BrhoF123(s1,ichan/8);
- else if(ichan%8==1) F2 = K1fact*BKstarF123(s2,(ichan-1)/8);
- else F5 = -BKstarF123(q2,ichan/8)*FKrho(s2,s1,(ichan-2)%8)*sqrt(2.);
- }
- // calculate the pi- K0bar pi0
- else if(imode==7) {
- Complex K1fact(K1BreitWigner(q2));
- if(ichan<0) {
- F2 =-K1fact*BrhoF123(s2,-1);
- F5 =-2.*BKstarF123(q2,-1)*FKrho(s1,s2,-1);
- }
- else if(ichan%7==0) F2 =-K1fact*BrhoF123(s2,ichan/7);
- else F5 =-2.*BKstarF123(q2,ichan/7)*FKrho(s1,s2,(ichan-1)%7);
- }
- // calculate the pi- pi0 eta
- else if(imode==8) {
- if(ichan<0) F5 = BrhoF5(q2, -1)*BrhoF123(s3, -1)*sqrt(2./3.);
- else F5 = BrhoF5(q2,ichan/3)*BrhoF123(s3,ichan%3)*sqrt(2./3.);
- }
- // multiply by the prefactors
- using Constants::twopi;
- return FormFactors(F1/_fpi,
- F2/_fpi,
- F3/_fpi,
- F4/_fpi,
- -F5/sqr(twopi)/pow<3,1>(_fpi)
- );
-}
// complete the construction of the decay mode for integration
bool EtaPiPiDefaultCurrent::createMode(int icharge, tcPDPtr resonance,
- IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
- unsigned int imode,PhaseSpaceModePtr mode,
- unsigned int iloc,int ires,
- PhaseSpaceChannel phase, Energy upp ) {
+ IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
+ unsigned int imode,PhaseSpaceModePtr mode,
+ unsigned int iloc,int ires,
+ PhaseSpaceChannel phase, Energy upp ) {
+ // check the charge
+ if((imode==0 && abs(icharge)!=3) ||
+ (imode>0 && icharge !=0)) return false;
+ // check the total isospin
+ if(Itotal!=IsoSpin::IUnknown) {
+ if(Itotal!=IsoSpin::IOne) return false;
+ }
+ // check I_3
+ if(i3!=IsoSpin::I3Unknown) {
+ switch(i3) {
+ case IsoSpin::I3Zero:
+ if(imode==0) return false;
+ break;
+ case IsoSpin::I3One:
+ if(imode==1 || icharge ==-3) return false;
+ break;
+ case IsoSpin::I3MinusOne:
+ if(imode==1 || icharge ==3) return false;
+ default:
+ return false;
+ }
+ }
+ // make sure that the decays are kinematically allowed
int iq(0),ia(0);
- if(!acceptMode(imode)) return false;
+ tPDVector part = particles(icharge,imode,iq,ia);
tPDVector extpart(particles(1,imode,iq,ia));
Energy min(ZERO);
for(unsigned int ix=0;ix<extpart.size();++ix) min+=extpart[ix]->massMin();
if(min>upp) return false;
- // the particles we will use a lot
- tPDPtr a1,k1;
- if(icharge==-3) {
- a1=getParticleData(ParticleID::a_1minus);
- k1=getParticleData(ParticleID::Kstar_1minus);
- }
- else if(icharge==3) {
- a1=getParticleData(ParticleID::a_1plus);
- k1=getParticleData(ParticleID::Kstar_1plus);
+ // set up the resonances
+ tPDPtr res[3];
+ if(icharge==0) {
+ res[0] =getParticleData(113);
+ res[1] =getParticleData(100113);
+ res[2] =getParticleData(30113);
}
else {
- return false;
- }
- _maxmass=max(_maxmass,upp);
- // the rho0 resonances
- tPDPtr rho0[3] = { getParticleData(113), getParticleData(100113), getParticleData(30113)};
- tPDPtr rhoc[3] = {getParticleData(-213),getParticleData(-100213),getParticleData(-30213)};
- tPDPtr Kstar0[3] = { getParticleData(313), getParticleData(100313), getParticleData(30313)};
- tPDPtr Kstarc[3] = {getParticleData(-323),getParticleData(-100323),getParticleData(-30323)};
- if(icharge==3) {
- for(unsigned int ix=0;ix<3;++ix) {
- rhoc [ix] = rhoc[ix]->CC();
- Kstar0[ix] = Kstar0[ix]->CC();
- Kstarc[ix] = Kstarc[ix]->CC();
- }
- }
- if(imode==0) {
- // channels for pi- pi- pi+
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rho0[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,rho0[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rho0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==1) {
- // channels for pi0 pi0 pi-
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rhoc[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,rhoc[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rhoc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==2) {
- // channels for K- pi- K+
- for(unsigned int ix=0;ix<3;++ix) {
- if(Kstar0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,Kstar0[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rho0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!rhoc[ix]) continue;
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+1,ires+1,Kstar0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+2,ires+1,rho0[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
+ res[0] =getParticleData(213);
+ res[1] =getParticleData(100213);
+ res[2] =getParticleData(30213);
+ if(icharge==-3) {
+ for(unsigned int ix=0;ix<3;++ix) {
+ if(res[ix]&&res[ix]->CC()) res[ix]=res[ix]->CC();
}
}
}
- else if(imode==3) {
- // channels for K0 pi- K0bar
- for(unsigned int ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,Kstarc[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rho0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!rhoc[ix]) continue;
- if(Kstarc[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+1,ires+1,Kstarc[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+2,ires+1,rho0[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
+ // channels for pi- pi0 eta
+ for(unsigned int ix=0;ix<3;++ix) {
+ if(resonance && resonance != res[ix]) continue;
+ for(unsigned int iy=0;iy<3;++iy) {
+ mode->addChannel((PhaseSpaceChannel(phase),ires,res[ix],ires+1,iloc+3,ires+1,res[iy],
+ ires+2,iloc+1,ires+2,iloc+2));
}
}
- else if(imode==4) {
- // channels for K- pi0 K0
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rhoc[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rhoc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==5) {
- // channels for pi0 pi0 K-
- for(unsigned int ix=0;ix<3;++ix) {
- if(!Kstarc[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+1,ires+1,Kstarc[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+2,ires+1,Kstarc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==6) {
- // channels for K- pi- pi+
- for(unsigned int ix=0;ix<3;++ix) {
- if(rho0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+1,ires+1,rho0[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(Kstar0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+2,ires+1,Kstar0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!Kstarc[ix]) continue;
- if(rho0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+1,ires+1,rho0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+2,ires+1,Kstar0[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- }
- }
- else if(imode==7) {
- // channels for pi- kbar0 pi0
- for(unsigned int ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+2,ires+1,rhoc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!Kstarc[ix]) continue;
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+1,ires+1,Kstar0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rhoc[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+2,ires+1,rhoc[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- }
- }
- else if(imode==8) {
- // channels for pi- pi0 eta
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rhoc[ix]) continue;
- for(unsigned int iy=0;iy<3;++iy) {
- if(!rho0[iy]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+1,ires+1,rho0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- }
- }
- if(_rhoparameters) {
- if(imode!=8) {
- for(unsigned int ix=0;ix<_rhoF123masses.size();++ix) {
- if(rhoc[ix]) mode->resetIntermediate(rhoc[ix],_rhoF123masses[ix],
- _rhoF123widths[ix]);
- if(rho0[ix]) mode->resetIntermediate(rho0[ix],_rhoF123masses[ix],
- _rhoF123widths[ix]);
- }
- }
- else {
- for(unsigned int ix=0;ix<_rhoF5masses.size();++ix) {
- if(rhoc[ix]) mode->resetIntermediate(rhoc[ix],_rhoF5masses[ix],
- _rhoF5widths[ix]);
- if(rho0[ix]) mode->resetIntermediate(rho0[ix],_rhoF5masses[ix],
- _rhoF5widths[ix]);
- }
- }
- }
- // K star parameters in the base class
- if(_kstarparameters) {
- for(unsigned int ix=0;ix<_kstarF123masses.size();++ix) {
- if(Kstarc[ix]) mode->resetIntermediate(Kstarc[ix],_kstarF123masses[ix],
- _kstarF123widths[ix]);
- if(Kstar0[ix]) mode->resetIntermediate(Kstar0[ix],_kstarF123masses[ix],
- _kstarF123widths[ix]);
- }
- }
+ // reset the rho masses
+ for(unsigned int ix=0;ix<_rhoF5masses.size();++ix)
+ mode->resetIntermediate(res[ix],_rhoF5masses[ix],_rhoF5widths[ix]);
return true;
}
-// initialisation of the a_1 width
-// (iopt=-1 initialises, iopt=0 starts the interpolation)
-void EtaPiPiDefaultCurrent::inita1Width(int iopt) {
- if(iopt==-1) {
- _maxcalc=_maxmass;
- if(!_initializea1||_maxmass==ZERO) return;
- // parameters for the table of values
- Energy2 step(sqr(_maxcalc)/199.);
- // integrator to perform the integral
- vector<double> inweights;inweights.push_back(0.5);inweights.push_back(0.5);
- vector<int> intype;intype.push_back(2);intype.push_back(3);
- Energy mrho(getParticleData(ParticleID::rhoplus)->mass()),
- wrho(getParticleData(ParticleID::rhoplus)->width());
- vector<Energy> inmass(2,mrho),inwidth(2,wrho);
- vector<double> inpow(2,0.0);
- ThreeBodyAllOnCalculator<EtaPiPiDefaultCurrent>
- widthgen(inweights,intype,inmass,inwidth,inpow,*this,0,_mpi,_mpi,_mpi);
- // normalisation constant to give physical width if on shell
- double a1const(_a1width/(widthgen.partialWidth(sqr(_a1mass))));
- // loop to give the values
- _a1runq2.clear(); _a1runwidth.clear();
- for(Energy2 moff2(ZERO); moff2<=sqr(_maxcalc); moff2+=step) {
- _a1runwidth.push_back(widthgen.partialWidth(moff2)*a1const);
- _a1runq2.push_back(moff2);
- }
- }
- // set up the interpolator
- else if(iopt==0) {
- _a1runinter = make_InterpolatorPtr(_a1runwidth,_a1runq2,3);
- }
-}
-
void EtaPiPiDefaultCurrent::dataBaseOutput(ofstream & output,bool header,
bool create) const {
if(header) output << "update decayers set parameters=\"";
if(create) output << "create Herwig::EtaPiPiDefaultCurrent "
<< name() << " HwWeakCurrents.so\n";
+ output << "newdef " << name() << ":FPi " << _fpi/MeV << "\n";
for(unsigned int ix=0;ix<_rhoF123wgts.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":F123RhoWeight " << ix << " " << _rhoF123wgts[ix] << "\n";
}
- for(unsigned int ix=0;ix<_kstarF123wgts.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":F123KstarWeight " << ix << " "
- << _kstarF123wgts[ix] << "\n";
- }
for(unsigned int ix=0;ix<_rhoF5wgts.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":F5RhoWeight " << ix << " " << _rhoF5wgts[ix] << "\n";
}
- for(unsigned int ix=0;ix<_kstarF5wgts.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":F5KstarWeight " << ix << " " << _kstarF5wgts[ix] << "\n";
- }
- output << "newdef " << name() << ":RhoKstarWgt " << _rhoKstarwgt << "\n";
- output << "newdef " << name() << ":Initializea1 " << _initializea1 << "\n";
- output << "newdef " << name() << ":RhoParameters " << _rhoparameters << "\n";
- output << "newdef " << name() << ":KstarParameters " << _kstarparameters << "\n";
- output << "newdef " << name() << ":a1Parameters " << _a1parameters << "\n";
- output << "newdef " << name() << ":K1Parameters " << _k1parameters << "\n";
- output << "newdef " << name() << ":a1WidthOption " << _a1opt << "\n";
- for(unsigned int ix=0;ix<_a1runwidth.size();++ix) {
- output << "newdef " << name() << ":a1RunningWidth " << ix
- << " " << _a1runwidth[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_a1runq2.size();++ix) {
- output << "newdef " << name() << ":a1RunningQ2 " << ix
- << " " << _a1runq2[ix]/GeV2 << "\n";
- }
- output << "newdef " << name() << ":A1Width " << _a1width/GeV << "\n";
- output << "newdef " << name() << ":A1Mass " << _a1mass/GeV << "\n";
- output << "newdef " << name() << ":K1Width " << _k1width/GeV << "\n";
- output << "newdef " << name() << ":K1Mass " << _k1mass/GeV << "\n";
- output << "newdef " << name() << ":FPi " << _fpi/MeV << "\n";
for(unsigned int ix=0;ix<_rhoF123masses.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":rhoF123masses " << ix
<< " " << _rhoF123masses[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_rhoF123widths.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":rhoF123widths " << ix << " "
<< _rhoF123widths[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_rhoF5masses.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":rhoF5masses " << ix << " "
<< _rhoF5masses[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_rhoF5widths.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":rhoF5widths " << ix << " "
<< _rhoF5widths[ix]/GeV << "\n";
}
- for(unsigned int ix=0;ix<_kstarF123masses.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF123masses " << ix << " "
- << _kstarF123masses[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF123widths.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF123widths " << ix << " "
- << _kstarF123widths[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF5masses.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF5masses " << ix << " "
- << _kstarF5masses[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF5widths.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF5widths " << ix << " "
- << _kstarF5widths[ix]/GeV << "\n";
- }
WeakCurrent::dataBaseOutput(output,false,false);
if(header) output << "\n\" where BINARY ThePEGName=\""
<< fullName() << "\";" << endl;
}
-void EtaPiPiDefaultCurrent::doinitrun() {
- // set up the running a_1 width
- inita1Width(0);
- WeakCurrent::doinitrun();
-}
-
-void EtaPiPiDefaultCurrent::doupdate() {
- WeakCurrent::doupdate();
- // update running width if needed
- if ( !touched() ) return;
- if(_maxmass!=_maxcalc) inita1Width(-1);
-}
-
-Complex EtaPiPiDefaultCurrent::rhoKBreitWigner(Energy2 q2,unsigned int itype,
- unsigned int ires) const {
- Energy q(sqrt(q2)),mass,width,mout[2]={_mpi,_mpi};
- // get the mass and width of the requested resonance
- if(itype==0) {
- mass=_rhoF123masses[ires];
- width=_rhoF123widths[ires];
- }
- else if(itype==1) {
- mass=_rhoF5masses[ires];
- width=_rhoF5widths[ires];
- }
- else if(itype==2) {
- mass=_kstarF123masses[ires];
- width=_kstarF123widths[ires];
- }
- else if(itype==3) {
- mass=_kstarF5masses[ires];
- width=_kstarF5widths[ires];
- }
- else {
- return 0.;
- }
- // calculate the momenta for the running widths
- if(itype>1) mout[0]=_mK;
- Energy pcm0(Kinematics::pstarTwoBodyDecay(mass,mout[0],mout[1]));
- Energy pcm(ZERO);
- if(mout[0]+mout[1]<q){pcm=Kinematics::pstarTwoBodyDecay(q,mout[0],mout[1]);}
- double ratio = Math::Pow<3>(pcm/pcm0);
- Energy gamrun(width*mass*ratio/q);
- Complex ii(0.,1.);
- complex<Energy2> denom(q2-mass*mass+ii*mass*gamrun), numer(-mass*mass);
- return numer/denom;
-}
-
-double EtaPiPiDefaultCurrent::
-threeBodyMatrixElement(const int , const Energy2 q2,
- const Energy2 s3, const Energy2 s2,
- const Energy2 s1, const Energy ,
- const Energy , const Energy ) const {
- Energy2 mpi2(sqr(_mpi));
- Complex propb(BrhoF123(s1,-1)),propa(BrhoF123(s2,-1));
- // the matrix element
- Energy2 output(ZERO);
- // first resonance
- output += ((s1-4.*mpi2) + 0.25*(s3-s2)*(s3-s2)/q2) * real(propb*conj(propb));
- // second resonance
- output += ((s2-4.*mpi2) + 0.25*(s3-s1)*(s3-s1)/q2) * real(propa*conj(propa));
- // the interference term
- output += (0.5*q2-s3-0.5*mpi2+0.25*(s3-s2)*(s3-s1)/q2)*real(propa*conj(propb)+
- propb*conj(propa));
- return output/sqr(_rhoF123masses[0]);
-}
-
-
// the hadronic currents
vector<LorentzPolarizationVectorE>
EtaPiPiDefaultCurrent::current(tcPDPtr resonance,
- IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
- const int imode, const int ichan, Energy & scale,
- const tPDVector & ,
- const vector<Lorentz5Momentum> & momenta,
- DecayIntegrator::MEOption) const {
+ IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
+ const int imode, const int ichan, Energy & scale,
+ const tPDVector & outgoing,
+ const vector<Lorentz5Momentum> & momenta,
+ DecayIntegrator::MEOption) const {
+ useMe();
+ // check the isospin
+ if(Itotal!=IsoSpin::IUnknown && Itotal!=IsoSpin::IOne)
+ return vector<LorentzPolarizationVectorE>();
+ int icharge = outgoing[0]->iCharge()+outgoing[1]->iCharge();
+ // check I_3
+ if(i3!=IsoSpin::I3Unknown) {
+ switch(i3) {
+ case IsoSpin::I3Zero:
+ if(imode==0) return vector<LorentzPolarizationVectorE>();
+ break;
+ case IsoSpin::I3One:
+ if(imode==1 || icharge ==-3) return vector<LorentzPolarizationVectorE>();
+ break;
+ case IsoSpin::I3MinusOne:
+ if(imode==1 || icharge ==3) return vector<LorentzPolarizationVectorE>();
+ default:
+ return vector<LorentzPolarizationVectorE>();
+ }
+ }
// calculate q2,s1,s2,s3
- Lorentz5Momentum q;
- for(unsigned int ix=0;ix<momenta.size();++ix)
- q+=momenta[ix];
+ Lorentz5Momentum q = momenta[0] + momenta[1] + momenta[2];
q.rescaleMass();
scale=q.mass();
Energy2 q2=q.mass2();
- Energy2 s1 = (momenta[1]+momenta[2]).m2();
- Energy2 s2 = (momenta[0]+momenta[2]).m2();
Energy2 s3 = (momenta[0]+momenta[1]).m2();
- FormFactors F = calculateFormFactors(ichan,imode,q2,s1,s2,s3);
- //if(inpart.id()==ParticleID::tauplus){F.F5=conj(F.F5);}
- // the first three form-factors
- LorentzPolarizationVector vect;
- vect = (F.F2-F.F1)*momenta[2]
- +(F.F1-F.F3)*momenta[1]
- +(F.F3-F.F2)*momenta[0];
- // multiply by the transverse projection operator
- complex<InvEnergy> dot=(vect*q)/q2;
- // scalar and parity violating terms
- vect += (F.F4-dot)*q;
- if(F.F5!=complex<InvEnergy3>())
- vect += Complex(0.,1.)*F.F5*Helicity::epsilon(momenta[0],
- momenta[1],
- momenta[2]);
+ // the form factor
+ Complex F5(0.);
+ int ires1(-1),ires2(-1);
+ if(ichan>=0) {
+ ires1 = ichan/3;
+ ires2 = ichan%3;
+ }
+ else {
+ if(resonance) {
+ switch(resonance->id()/1000) {
+ case 0:
+ ires1 = 0;
+ break;
+ case 100:
+ ires1 = 1;
+ break;
+ case 30 :
+ ires1 = 2;
+ break;
+ default:
+ assert(false);
+ }
+ }
+ }
+ F5 = BrhoF5(q2,ires1)*BrhoF123(s3,ires2)*sqrt(2./3.);
+ // constant the current
+ LorentzPolarizationVector vect = -Complex(0.,1.)*F5/sqr(Constants::twopi)/pow<3,1>(_fpi)*
+ Helicity::epsilon(momenta[0],momenta[1],momenta[2]);
// factor to get dimensions correct
return vector<LorentzPolarizationVectorE>(1,q.mass()*vect);
}
bool EtaPiPiDefaultCurrent::accept(vector<int> id) {
- int npip(0),npim(0),nkp(0),nkm(0),
- npi0(0),nk0(0),nk0bar(0),neta(0),nks(0),nkl(0);
+ // check there are only three particles
+ if(id.size()!=3) return false;
+ unsigned int npip(0),npim(0),npi0(0),neta(0);
for(unsigned int ix=0;ix<id.size();++ix) {
if(id[ix]==ParticleID::piplus) ++npip;
else if(id[ix]==ParticleID::piminus) ++npim;
- else if(id[ix]==ParticleID::Kplus) ++nkp;
- else if(id[ix]==ParticleID::Kminus) ++nkm;
else if(id[ix]==ParticleID::pi0) ++npi0;
- else if(id[ix]==ParticleID::K0) ++nk0;
- else if(id[ix]==ParticleID::Kbar0) ++nk0bar;
else if(id[ix]==ParticleID::eta) ++neta;
- else if(id[ix]==ParticleID::K_S0) ++nks;
- else if(id[ix]==ParticleID::K_L0) ++nkl;
}
- int imode(-1);
- if( (npip==2&&npim==1) || (npim==2&&npip==1) ) imode= 0;
- else if( (npip==1&&npi0==2) || (npim==1&&npi0==2) ) imode= 1;
- else if( (nkp==1&&nkm==1&&npip==1) ||
- (nkp==1&&nkm==1&&npim==1)) imode= 2;
- else if( (nk0==1&&nk0bar==1&&npip==1) ||
- (nk0==1&&nk0bar==1&&npim==1)) imode= 3;
- else if( (nkp==1&&nk0bar==1&&npi0==1) ||
- (nkm==1&&npi0==1&&nk0==1)) imode= 4;
- else if( (nkp==1&&npi0==2) || (npi0==2&&nkm==1) ) imode= 5;
- else if( (npip==1&&npim==1&&nkp==1) ||
- (nkm==1&&npim==1&&npip==1) ) imode= 6;
- else if( (nk0==1&&npip==1&&npi0==1) ||
- (npim==1&&nk0bar==1&&npi0==1)) imode= 7;
- else if( (npip==1&&npi0==1&&neta==1) ||
- (npim==1&&npi0==1&&neta==1)) imode= 8;
- else if( nks==2 && (npip==1||npim==1) ) imode= 9;
- else if( nkl==2 && (npip==1||npim==1) ) imode=10;
- else if( nks==1&&nkl==1 && (npip==1||npim==1) ) imode=11;
- return imode==-1 ? false : acceptMode(imode);
+ if( (npip==1&&npim==1&&neta==1) ||
+ (npi0==1&&npim+npip==1&&neta==1))
+ return true;
+ else
+ return false;
}
unsigned int EtaPiPiDefaultCurrent::decayMode(vector<int> id) {
- int npip(0),npim(0),nkp(0),nkm(0),
- npi0(0),nk0(0),nk0bar(0),neta(0),nks(0),nkl(0);
+ unsigned int npi(0);
for(unsigned int ix=0;ix<id.size();++ix) {
- if(id[ix]==ParticleID::piplus) ++npip;
- else if(id[ix]==ParticleID::piminus) ++npim;
- else if(id[ix]==ParticleID::Kplus) ++nkp;
- else if(id[ix]==ParticleID::Kminus) ++nkm;
- else if(id[ix]==ParticleID::pi0) ++npi0;
- else if(id[ix]==ParticleID::K0) ++nk0;
- else if(id[ix]==ParticleID::Kbar0) ++nk0bar;
- else if(id[ix]==ParticleID::eta) ++neta;
- else if(id[ix]==ParticleID::K_S0) ++nks;
- else if(id[ix]==ParticleID::K_L0) ++nkl;
+ if(abs(id[ix])==ParticleID::piplus) ++npi;
}
- int imode(-1);
- if( (npip==2&&npim==1) || (npim==2&&npip==1) ) imode= 0;
- else if( (npip==1&&npi0==2) || (npim==1&&npi0==2) ) imode= 1;
- else if( (nkp==1&&nkm==1&&npip==1) ||
- (nkp==1&&nkm==1&&npim==1)) imode= 2;
- else if( (nk0==1&&nk0bar==1&&npip==1) ||
- (nk0==1&&nk0bar==1&&npim==1)) imode= 3;
- else if( (nkp==1&&nk0bar==1&&npi0==1) ||
- (nkm==1&&npi0==1&&nk0==1)) imode= 4;
- else if( (nkp==1&&npi0==2) || (npi0==2&&nkm==1) ) imode= 5;
- else if( (npip==1&&npim==1&&nkp==1) ||
- (nkm==1&&npim==1&&npip==1) ) imode= 6;
- else if( (nk0==1&&npip==1&&npi0==1) ||
- (npim==1&&nk0bar==1&&npi0==1)) imode= 7;
- else if( (npip==1&&npi0==1&&neta==1) ||
- (npim==1&&npi0==1&&neta==1)) imode= 8;
- else if( nks==2 && (npip==1||npim==1) ) imode= 9;
- else if( nkl==2 && (npip==1||npim==1) ) imode=10;
- else if( nks==1&&nkl==1 && (npip==1||npim==1) ) imode=11;
- return imode;
+ if(npi==2) return 1;
+ else return 0;
}
tPDVector EtaPiPiDefaultCurrent::particles(int icharge, unsigned int imode,int,int) {
- tPDVector extpart(3);
+ tPDVector output(3);
+ output[0]=getParticleData(ParticleID::piplus);
+ output[2]=getParticleData(ParticleID::eta);
if(imode==0) {
- extpart[0]=getParticleData(ParticleID::piminus);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::piplus);
- }
- else if(imode==1) {
- extpart[0]=getParticleData(ParticleID::pi0);
- extpart[1]=getParticleData(ParticleID::pi0);
- extpart[2]=getParticleData(ParticleID::piminus);
- }
- else if(imode==2) {
- extpart[0]=getParticleData(ParticleID::Kminus);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::Kplus);
- }
- else if(imode==3) {
- extpart[0]=getParticleData(ParticleID::K0);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::Kbar0);
- }
- else if(imode==4) {
- extpart[0]=getParticleData(ParticleID::Kminus);
- extpart[1]=getParticleData(ParticleID::pi0);
- extpart[2]=getParticleData(ParticleID::K0);
- }
- else if(imode==5) {
- extpart[0]=getParticleData(ParticleID::pi0);
- extpart[1]=getParticleData(ParticleID::pi0);
- extpart[2]=getParticleData(ParticleID::Kminus);
- }
- else if(imode==6) {
- extpart[0]=getParticleData(ParticleID::Kminus);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::piplus);
- }
- else if(imode==7) {
- extpart[0]=getParticleData(ParticleID::piminus);
- extpart[1]=getParticleData(ParticleID::Kbar0);
- extpart[2]=getParticleData(ParticleID::pi0);
- }
- else if(imode==8) {
- extpart[0]=getParticleData(ParticleID::piminus);
- extpart[1]=getParticleData(ParticleID::pi0);
- extpart[2]=getParticleData(ParticleID::eta);
- }
- else if(imode==9) {
- extpart[0]=getParticleData(ParticleID::K_S0);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::K_S0);
- }
- else if(imode==10) {
- extpart[0]=getParticleData(ParticleID::K_L0);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::K_L0);
- }
- else if(imode==11) {
- extpart[0]=getParticleData(ParticleID::K_S0);
- extpart[1]=getParticleData(ParticleID::piminus);
- extpart[2]=getParticleData(ParticleID::K_L0);
- }
- // conjugate the particles if needed
- if(icharge==3) {
- for(unsigned int ix=0;ix<3;++ix) {
- if(extpart[ix]->CC()) extpart[ix]=extpart[ix]->CC();
+ output[1]=getParticleData(ParticleID::pi0);
+ if(icharge==-3) {
+ for(unsigned int ix=0;ix<output.size();++ix) {
+ if(output[ix]->CC()) output[ix]=output[ix]->CC();
+ }
}
}
- // return the answer
- return extpart;
+ else {
+ output[1]=getParticleData(ParticleID::piminus);
+ }
+ return output;
}
-
diff --git a/Decay/WeakCurrents/EtaPiPiDefaultCurrent.h b/Decay/WeakCurrents/EtaPiPiDefaultCurrent.h
--- a/Decay/WeakCurrents/EtaPiPiDefaultCurrent.h
+++ b/Decay/WeakCurrents/EtaPiPiDefaultCurrent.h
@@ -1,632 +1,282 @@
// -*- C++ -*-
//
// EtaPiPiDefaultCurrent.h is a part of Herwig - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2017 The Herwig Collaboration
//
// Herwig is licenced under version 3 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef HERWIG_EtaPiPiDefaultCurrent_H
#define HERWIG_EtaPiPiDefaultCurrent_H
//
// This is the declaration of the EtaPiPiDefaultCurrent class.
//
#include "WeakCurrent.h"
#include "Herwig/Utilities/Interpolator.h"
#include "Herwig/Utilities/Kinematics.h"
#include "ThePEG/StandardModel/StandardModelBase.h"
#include "Herwig/Decay/ResonanceHelpers.h"
+#include <numeric>
namespace Herwig {
using namespace ThePEG;
/** \ingroup Decay
*
- * The EtaPiPiDefaultCurrent class implements the currents from Z.Phys.C58:445 (1992),
- * this paper uses the form from Z.Phys.C48:445 (1990) for the \f$a_1\f$ width and
- * is the default model in TAUOLA.
+ * The EtaPiPiDefaultCurrent class implements the current from Z.Phys.C58:445 (1992),
+ * for \f$ \pi^- \pi^0 \eta \f$.
*
- * The following three meson modes are implemented.
*
- * - \f$ \pi^- \pi^- \pi^+ \f$, (imode=0)
- * - \f$ \pi^0 \pi^0 \pi^- \f$, (imode=1)
- * - \f$ K^- \pi^- K^+ \f$, (imode=2)
- * - \f$ K^0 \pi^- \bar{K}^0\f$, (imode=3)
- * - \f$ K^- \pi^0 K^0 \f$, (imode=4)
- * - \f$ \pi^0 \pi^0 K^- \f$, (imode=5)
- * - \f$ K^- \pi^- \pi^+ \f$, (imode=6)
- * - \f$ \pi^- \bar{K}^0 \pi^0 \f$, (imode=7)
- * - \f$ \pi^- \pi^0 \eta \f$, (imode=8)
- *
- * using the currents from TAUOLA
- *
- *
- * @see WeakCurrent,
- * @see WeakCurrent.
- * @see Defaulta1MatrixElement
+ * @see WeakCurrent
*
*/
class EtaPiPiDefaultCurrent: public WeakCurrent {
- /**
- * The matrix element for the running \f$a_1\f$ width is a friend to
- * keep some members private.
- */
- friend class Defaulta1MatrixElement;
-
public:
/**
* Default constructor
*/
EtaPiPiDefaultCurrent();
/**
* Hadronic current. This method is purely virtual and must be implemented in
* all classes inheriting from this one.
* @param resonance If specified only include terms with this particle
* @param Itotal If specified the total isospin of the current
* @param I3 If specified the thrid component of isospin
* @param imode The mode
* @param ichan The phase-space channel the current is needed for.
* @param scale The invariant mass of the particles in the current.
* @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 current.
*/
virtual vector<LorentzPolarizationVectorE>
current(tcPDPtr resonance,
IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
const int imode, const int ichan,Energy & scale,
const tPDVector & outgoing,
const vector<Lorentz5Momentum> & momenta,
DecayIntegrator::MEOption meopt) const;
/**
* Accept the decay. Checks the mesons against the list.
* @param id The id's of the particles in the current.
* @return Can this current have the external particles specified.
*/
virtual bool accept(vector<int> id);
/**
* Return the decay mode number for a given set of particles in the current.
* Checks the mesons against the list.
* @param id The id's of the particles in the current.
* @return The number of the mode
*/
virtual unsigned int decayMode(vector<int> id);
/**
* The particles produced by the current. This returns the mesons for the mode.
* @param icharge The total charge of the particles in the current.
* @param imode The mode for which the particles are being requested
* @param iq The PDG code for the quark
* @param ia The PDG code for the antiquark
* @return The external particles for the current.
*/
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
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);
//@}
/**
* Standard Init function used to initialize the interfaces.
*/
static void Init();
public:
/** @name Methods for the construction of the phase space integrator. */
//@{
/**
* Complete the construction of the decay mode for integration.classes inheriting
* from this one.
* This method is purely virtual and must be implemented in the classes inheriting
* from WeakCurrent.
* @param icharge The total charge of the outgoing particles in the current.
* @param resonance If specified only include terms with this particle
* @param Itotal If specified the total isospin of the current
* @param I3 If specified the thrid component of isospin
* @param imode The mode in the current being asked for.
* @param mode The phase space mode for the integration
* @param iloc The location of the of the first particle from the current in
* the list of outgoing particles.
* @param ires The location of the first intermediate for the current.
* @param phase The prototype phase space channel for the integration.
* @param upp The maximum possible mass the particles in the current are
* allowed to have.
* @return Whether the current was sucessfully constructed.
*/
virtual bool createMode(int icharge, tcPDPtr resonance,
IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
unsigned int imode,PhaseSpaceModePtr mode,
unsigned int iloc,int ires,
PhaseSpaceChannel phase, Energy upp );
//@}
/**
* 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
* @param create Whether or not to add a statement creating the object
*/
virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
-
- /**
- * the matrix element for the \f$a_1\f$ decay to calculate the running width
- * @param imode The mode for which the matrix element is needed.
- * @param q2 The mass of the decaying off-shell \f$a_1\f$, \f$q^2\f$.
- * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
- * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
- * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
- * @param m1 The mass of the first outgoing particle.
- * @param m2 The mass of the second outgoing particle.
- * @param m3 The mass of the third outgoing particle.
- * @return The matrix element squared summed over spins.
- */
- double threeBodyMatrixElement(const int imode, const Energy2 q2,
- const Energy2 s3, const Energy2 s2,
- const Energy2 s1, const Energy m1,
- const Energy m2, const Energy m3) const;
-
-
-protected:
-
- /**
- * Helper class for form factors
- */
- struct FormFactors {
-
- /**
- * @param F1 The \f$F_1\f$ form factor
- */
- complex<InvEnergy> F1;
-
- /**
- * @param F2 The \f$F_2\f$ form factor
- */
- complex<InvEnergy> F2;
-
- /**
- * @param F3 The \f$F_3\f$ form factor
- */
- complex<InvEnergy> F3;
-
- /**
- * @param F4 The \f$F_4\f$ form factor
- */
- complex<InvEnergy> F4;
-
- /**
- * @param F5 The \f$F_5\f$ form factor
- */
- complex<InvEnergy3> F5;
-
- /**
- * Constructor
- * @param f1 The \f$F_1\f$ form factor
- * @param f2 The \f$F_2\f$ form factor
- * @param f3 The \f$F_3\f$ form factor
- * @param f4 The \f$F_4\f$ form factor
- * @param f5 The \f$F_5\f$ form factor
- */
- FormFactors(complex<InvEnergy> f1 = InvEnergy(),
- complex<InvEnergy> f2 = InvEnergy(),
- complex<InvEnergy> f3 = InvEnergy(),
- complex<InvEnergy> f4 = InvEnergy(),
- complex<InvEnergy3> f5 = InvEnergy3())
- : F1(f1), F2(f2), F3(f3), F4(f4), F5(f5) {}
- };
-
-protected:
-
- /**
- * Can the current handle a particular set of mesons.
- * As this current includes all the allowed modes this is always true.
- */
- virtual bool acceptMode(int) const;
-
- /**
- * Calculate the form factor for the current. Implements the form factors
- * described above.
- * @param ichan The phase space channel
- * @param imode The mode
- * @param q2 The scale \f$q^2\f$ for the current.
- * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
- * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
- * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
- */
- virtual FormFactors calculateFormFactors(const int ichan, const int imode,
- Energy2 q2,
- Energy2 s1, Energy2 s2, Energy2 s3) const;
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const {return new_ptr(*this);}
/** 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 {return new_ptr(*this);}
//@}
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();
-
- /**
- * Check sanity of the object during the setup phase.
- */
- virtual void doupdate();
- //@}
-
private:
/**
* Private and non-existent assignment operator.
*/
EtaPiPiDefaultCurrent & operator=(const EtaPiPiDefaultCurrent &);
private:
/**
* The \f$\rho\f$ Breit-Wigner for the \f$F_{1,2,3}\f$ form factors.
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @param ires Which \f$\rho\f$ multiplet
* @return The Breit-Wigner
*/
Complex BrhoF123(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_rhoF123wgts.size()));ix<N;++ix) {
- norm+=_rhoF123wgts[ix];
- }
+ Complex output(0.);
+ Complex norm = std::accumulate(_rhoF123wgts.begin(),_rhoF123wgts.end(),Complex(0.));
if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_rhoF123wgts.size()));ix<N;++ix) {
- output+=_rhoF123wgts[ix]*rhoKBreitWigner(q2,0,ix);
+ for(unsigned int ix=0;ix<_rhoF123wgts.size();++ix) {
+ output+=_rhoF123wgts[ix]*
+ Resonance::BreitWignerPWave(q2,_rhoF123masses[ix],
+ _rhoF123widths[ix],_mpi,_mpi);
}
}
else {
- unsigned int temp(ires);
- if(temp<_rhoF123wgts.size()&&temp<3)
- output=_rhoF123wgts[temp]*rhoKBreitWigner(q2,0,temp);
- else
- output=0.;
+ assert(ires<=int(_rhoF123wgts.size()));
+ output=_rhoF123wgts[ires]*
+ Resonance::BreitWignerPWave(q2,_rhoF123masses[ires],
+ _rhoF123widths[ires],_mpi,_mpi);
}
return output/norm;
}
/**
* The \f$\rho\f$ Breit-Wigner for the \f$F_5\f$ form factors.
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @param ires Which \f$\rho\f$ multiplet
* @return The Breit-Wigner
*/
Complex BrhoF5(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_rhoF5wgts.size()));ix<N;++ix) {
- norm+=_rhoF5wgts[ix];
- }
+ Complex output(0.);
+ Complex norm = std::accumulate(_rhoF5wgts.begin(),_rhoF5wgts.end(),Complex(0.0));
if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_rhoF5wgts.size()));ix<N;++ix) {
- output+=_rhoF5wgts[ix]*rhoKBreitWigner(q2,1,ix);
+ for(unsigned int ix=0;ix<_rhoF5wgts.size();++ix) {
+ output+=_rhoF5wgts[ix]*
+ Resonance::BreitWignerPWave(q2,_rhoF5masses[ix],
+ _rhoF5widths[ix],_mpi,_mpi);
}
}
else {
- unsigned int temp(ires);
- if(temp<_rhoF5wgts.size()&&temp<3) {
- output=_rhoF5wgts[temp]*rhoKBreitWigner(q2,1,temp);
- }
+ assert(ires<=int(_rhoF123wgts.size()));
+ output=_rhoF5wgts[ires]*
+ Resonance::BreitWignerPWave(q2,_rhoF5masses[ires],
+ _rhoF5widths[ires],_mpi,_mpi);
}
return output/norm;
}
- /**
- * The \f$K^*\f$ Breit-Wigner for the \f$F_{1,2,3}\f$ form factors.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires Which \f$\rho\f$ multiplet
- * @return The Breit-Wigner
- */
- Complex BKstarF123(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_kstarF123wgts.size()));ix<N;++ix) {
- norm+=_kstarF123wgts[ix];
- }
- if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_kstarF123wgts.size()));ix<N;++ix) {
- output+=_kstarF123wgts[ix]*rhoKBreitWigner(q2,2,ix);
- }
- }
- else {
- unsigned int temp(ires);
- if(temp<_kstarF123wgts.size()&&temp<3) {
- output=_kstarF123wgts[temp]*rhoKBreitWigner(q2,2,temp);
- }
- }
- return output/norm;
- }
-
- /**
- * The \f$K^*\f$ Breit-Wigner for the \f$F_5\f$ form factors.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires Which \f$\rho\f$ multiplet
- * @return The Breit-Wigner
- */
- Complex BKstarF5(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_kstarF5wgts.size()));ix<N;++ix) {
- norm+=_kstarF5wgts[ix];
- }
- if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_kstarF5wgts.size()));ix<N;++ix) {
- output+=_kstarF5wgts[ix]*rhoKBreitWigner(q2,3,ix);
- }
- }
- else {
- unsigned int temp(ires);
- if(temp<_kstarF5wgts.size()&&temp<3) {
- output=_kstarF5wgts[ires]*rhoKBreitWigner(q2,3,temp);
- }
- }
- return output/norm;
- }
-
- /**
- * Mixed Breit Wigner for the \f$F_5\f$ form factor
- * @param si The scale \f$s_1\f$.
- * @param sj The scale \f$s_2\f$.
- * @param ires Which resonances to use
- * @return The mixed Breit-Wigner
- */
- Complex FKrho(Energy2 si,Energy2 sj,int ires) const {
- Complex output;
- if(ires<0){output = _rhoKstarwgt*BKstarF123(si,-1)+BrhoF123(sj,-1);}
- else if(ires%2==0){output= _rhoKstarwgt*BKstarF123(si,ires/2);}
- else if(ires%2==1){output=BrhoF123(sj,ires/2);}
- output /=(1.+_rhoKstarwgt);
- return output;
- }
-
- /**
- * \f$a_1\f$ Breit-Wigner
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @return The Breit-Wigner
- */
- Complex a1BreitWigner(Energy2 q2) const {
- if(!_a1opt)
- return Resonance::BreitWignera1(q2,_a1mass,_a1width);
- Complex ii(0.,1.);
- Energy2 m2(_a1mass*_a1mass);
- Energy q(sqrt(q2));
- Energy width = (*_a1runinter)(q2);
- return m2/(m2-q2-ii*q*width);
- }
-
- /**
- * The \f$K_1\f$ Breit-Wigner
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @return The Breit-Wigner
- */
- Complex K1BreitWigner(Energy2 q2) const {
- Energy2 m2 = sqr(_k1mass);
- Complex ii(0.,1.);
- complex<Energy2> fact(m2 - ii*_k1mass*_k1width);
- return fact/(fact-q2);
- }
-
- /**
- * Initialize the \f$a_1\f$ running width
- * @param iopt Initialization option (-1 full calculation, 0 set up the interpolation)
- */
- void inita1Width(int iopt);
-
- /**
- * Breit-Wigners for the \f$\rho\f$ and \f$K^*\f$.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner.
- * @param itype The type of Breit-Wigner, \e i.e. which masses and widths to use.x
- * @param ires Which multiplet to use.
- */
- Complex rhoKBreitWigner(Energy2 q2,unsigned int itype,unsigned int ires) const;
-
private:
/**
* Parameters for the \f$\rho\f$ Breit-Wigner in the
* \f$F_{1,2,3}\f$ form factors.
*/
vector<double> _rhoF123wgts;
-
- /**
- * Parameters for the \f$K^*\f$ Breit-Wigner in the
- * \f$F_{1,2,3}\f$ form factors.
- */
- vector<double> _kstarF123wgts;
/**
* Parameters for the \f$\rho\f$ Breit-Wigner in the
* \f$F_5\f$ form factors.
*/
vector<double> _rhoF5wgts;
/**
- * Parameters for the \f$K^*\f$ Breit-Wigner in the
- * \f$F_5\f$ form factors.
- */
- vector<double> _kstarF5wgts;
-
- /**
- * The relative weight of the \f$\rho\f$ and \f$K^*\f$ where needed.
- */
- double _rhoKstarwgt;
-
- /**
- * The \f$a_1\f$ width for the running \f$a_1\f$ width calculation.
- */
- vector<Energy> _a1runwidth;
-
- /**
- * The \f$q^2\f$ for the running \f$a_1\f$ width calculation.
- */
- vector<Energy2> _a1runq2;
-
-
- /**
- * The interpolator for the running \f$a_1\f$ width calculation.
- */
- Interpolator<Energy,Energy2>::Ptr _a1runinter;
-
- /**
- * Initialize the running \f$a_1\f$ width.
- */
- bool _initializea1;
-
- /**
- * The mass of the \f$a_1\f$ resonances.
- */
- Energy _a1mass;
-
- /**
- * The width of the \f$a_1\f$ resonances.
- */
- Energy _a1width;
-
- /**
- * The mass of the \f$aK1\f$ resonances.
- */
- Energy _k1mass;
-
- /**
- * The width of the \f$K_1\f$ resonances.
- */
- Energy _k1width;
-
- /**
* The pion decay constant, \f$f_\pi\f$.
*/
Energy _fpi;
/**
* The pion mass
*/
Energy _mpi;
/**
- * The kaon mass
- */
- Energy _mK;
-
- /**
- * use local values of the \f$\rho\f$ masses and widths
- */
- bool _rhoparameters;
-
- /**
* The \f$\rho\f$ masses for the \f$F_{1,2,3}\f$ form factors.
*/
vector<Energy> _rhoF123masses;
/**
* The \f$\rho\f$ masses for the \f$F_5\f$ form factors.
*/
vector<Energy> _rhoF5masses;
/**
* The \f$\rho\f$ widths for the \f$F_{1,2,3}\f$ form factors.
*/
vector<Energy> _rhoF123widths;
/**
* The \f$\rho\f$ widths for the \f$F_5\f$ form factors.
*/
vector<Energy> _rhoF5widths;
-
- /**
- * use local values of the \f$K^*\f$ resonances masses and widths
- */
- bool _kstarparameters;
-
- /**
- * The \f$K^*\f$ masses for the \f$F_{1,2,3}\f$ form factors.
- */
- vector<Energy> _kstarF123masses;
-
- /**
- * The \f$K^*\f$ masses for the \f$F_5\f$ form factors.
- */
- vector<Energy> _kstarF5masses;
-
- /**
- * The \f$K^*\f$ widths for the \f$F_{1,2,3}\f$ form factors.
- */
- vector<Energy> _kstarF123widths;
-
- /**
- * The \f$K^*\f$ widths for the \f$F_5\f$ form factors.
- */
- vector<Energy> _kstarF5widths;
-
- /**
- * Use local values of the \f$a_1\f$ parameters
- */
- bool _a1parameters;
-
- /**
- * Use local values of the \f$K_1\f$ parameters
- */
- bool _k1parameters;
-
- /**
- * Option for the \f$a_1\f$ width
- */
- bool _a1opt;
-
- /**
- * The maximum mass of the hadronic system
- */
- Energy _maxmass;
-
- /**
- * The maximum mass when the running width was calculated
- */
- Energy _maxcalc;
-
};
}
#endif /* HERWIG_EtaPiPiDefaultCurrent_H */
diff --git a/Decay/WeakCurrents/Makefile.am b/Decay/WeakCurrents/Makefile.am
--- a/Decay/WeakCurrents/Makefile.am
+++ b/Decay/WeakCurrents/Makefile.am
@@ -1,56 +1,54 @@
BUILT_SOURCES = WeakCurrents__all.cc
CLEANFILES = WeakCurrents__all.cc
WeakCurrents__all.cc : $(DIR_H_FILES) $(DIR_CC_FILES) Makefile
@echo "Concatenating .cc files into $@"
@$(top_srcdir)/cat_with_cpplines $(DIR_CC_FILES) > $@
EXTRA_DIST = $(ALL_H_FILES) $(ALL_CC_FILES)
DIR_H_FILES = $(addprefix $(srcdir)/,$(ALL_H_FILES))
ALL_H_FILES = \
FourPionNovosibirskCurrent.h \
ScalarMesonCurrent.h\
ThreeMesonCurrentBase.h \
-ThreeMesonDefaultCurrent.h\
ThreePionDefaultCurrent.h\
OneKaonTwoPionDefaultCurrent.h \
TwoKaonOnePionDefaultCurrent.h \
EtaPiPiDefaultCurrent.h \
ThreePionCLEOCurrent.h\
TwoPionRhoCurrent.h\
KPiKStarCurrent.h\
TwoPionPhotonCurrent.h\
VectorMesonCurrent.h\
FivePionCurrent.h \
KPiCurrent.h\
KaonThreeMesonCurrent.h\
TwoPionCzyzCurrent.h\
TwoKaonCzyzCurrent.h\
ThreePionCzyzCurrent.h\
FourPionCzyzCurrent.h\
EtaPiPiCurrent.h
DIR_CC_FILES = $(addprefix $(srcdir)/,$(ALL_CC_FILES))
ALL_CC_FILES = \
FourPionNovosibirskCurrent.cc \
ScalarMesonCurrent.cc \
ThreeMesonCurrentBase.cc \
-ThreeMesonDefaultCurrent.cc \
ThreePionDefaultCurrent.cc \
OneKaonTwoPionDefaultCurrent.cc \
TwoKaonOnePionDefaultCurrent.cc \
EtaPiPiDefaultCurrent.cc \
ThreePionCLEOCurrent.cc \
TwoPionRhoCurrent.cc \
KPiKStarCurrent.cc \
TwoPionPhotonCurrent.cc \
VectorMesonCurrent.cc \
FivePionCurrent.cc \
KPiCurrent.cc \
KaonThreeMesonCurrent.cc \
TwoPionCzyzCurrent.cc \
TwoKaonCzyzCurrent.cc \
ThreePionCzyzCurrent.cc \
FourPionCzyzCurrent.cc\
EtaPiPiCurrent.cc
diff --git a/Decay/WeakCurrents/ThreeMesonDefaultCurrent.cc b/Decay/WeakCurrents/ThreeMesonDefaultCurrent.cc
deleted file mode 100644
--- a/Decay/WeakCurrents/ThreeMesonDefaultCurrent.cc
+++ /dev/null
@@ -1,1053 +0,0 @@
-// -*- C++ -*-
-//
-// ThreeMesonDefaultCurrent.cc is a part of Herwig - A multi-purpose Monte Carlo event generator
-// Copyright (C) 2002-2017 The Herwig Collaboration
-//
-// Herwig is licenced under version 3 of the GPL, see COPYING for details.
-// Please respect the MCnet academic guidelines, see GUIDELINES for details.
-//
-//
-// This is the implementation of the non-inlined, non-templated member
-// functions of the ThreeMesonDefaultCurrent class.
-//
-
-#include "ThreeMesonDefaultCurrent.h"
-#include "ThePEG/Interface/ClassDocumentation.h"
-#include "ThePEG/Interface/Switch.h"
-#include "ThePEG/Interface/Parameter.h"
-#include "ThePEG/Interface/ParVector.h"
-#include "ThePEG/Persistency/PersistentOStream.h"
-#include "ThePEG/Persistency/PersistentIStream.h"
-#include "Herwig/PDT/ThreeBodyAllOnCalculator.h"
-#include "ThePEG/Utilities/DescribeClass.h"
-
-using namespace Herwig;
-using namespace ThePEG;
-
-DescribeClass<ThreeMesonDefaultCurrent,ThreeMesonCurrentBase>
-describeHerwigThreeMesonDefaultCurrent("Herwig::ThreeMesonDefaultCurrent",
- "HwWeakCurrents.so");
-HERWIG_INTERPOLATOR_CLASSDESC(ThreeMesonDefaultCurrent,Energy,Energy2)
-
-
-ThreeMesonDefaultCurrent::ThreeMesonDefaultCurrent() {
- // the pion decay constant
- _fpi=130.7*MeV/sqrt(2.);
- _mpi=ZERO;_mK=ZERO;
- // set the initial weights for the resonances
- // the rho weights
- _rhoF123wgts.push_back(1.0);_rhoF123wgts.push_back(-0.145);
- _rhoF123wgts.push_back(0.);
- _rhoF5wgts.push_back(-26.);_rhoF5wgts.push_back(6.5);
- _rhoF5wgts.push_back(1.);
- // the Kstar weights
- _kstarF123wgts.push_back(1.);
- _kstarF5wgts.push_back(1.);
- // relative rho/Kstar weights
- _rhoKstarwgt=-0.2;
- // local values of the a_1 parameters
- _a1parameters=true;_a1mass=1.251*GeV;_a1width=0.599*GeV;
- _a1opt=true;
- // local values of the K_1 parameters
- _k1parameters=true;_k1mass=1.402*GeV,_k1width=0.174*GeV;
- // local values of the rho parameters
- _rhoparameters=true;
- _rhoF123masses.push_back(0.773*GeV);_rhoF123masses.push_back(1.370*GeV);
- _rhoF123masses.push_back(1.750*GeV);
- _rhoF123widths.push_back(0.145*GeV);_rhoF123widths.push_back(0.510*GeV);
- _rhoF123widths.push_back(0.120*GeV);
- _rhoF5masses.push_back(0.773*GeV);_rhoF5masses.push_back(1.500*GeV);
- _rhoF5masses.push_back(1.750*GeV);
- _rhoF5widths.push_back(0.145*GeV);_rhoF5widths.push_back(0.220*GeV);
- _rhoF5widths.push_back(0.120*GeV);
- // local values for the Kstar parameters
- _kstarparameters=true;
- _kstarF123masses.push_back(0.8921*GeV);
- _kstarF123widths.push_back(0.0513*GeV);
- _kstarF5masses.push_back(0.8921*GeV);
- _kstarF5widths.push_back(0.0513*GeV);
- // initialization of the a_1 running width
- _initializea1=false;
- double a1q2in[200]={0,15788.6,31577.3,47365.9,63154.6,78943.2,94731.9,110521,
- 126309,142098,157886,173675,189464,205252,221041,236830,
- 252618,268407,284196,299984,315773,331562,347350,363139,
- 378927,394716,410505,426293,442082,457871,473659,489448,
- 505237,521025,536814,552603,568391,584180,599969,615757,
- 631546,647334,663123,678912,694700,710489,726278,742066,
- 757855,773644,789432,805221,821010,836798,852587,868375,
- 884164,899953,915741,931530,947319,963107,978896,994685,
- 1.01047e+06,1.02626e+06,1.04205e+06,1.05784e+06,1.07363e+06,
- 1.08942e+06,1.10521e+06,1.12099e+06,1.13678e+06,1.15257e+06,
- 1.16836e+06,1.18415e+06,1.19994e+06,1.21573e+06,1.23151e+06,
- 1.2473e+06,1.26309e+06,1.27888e+06,1.29467e+06,1.31046e+06,
- 1.32625e+06,1.34203e+06,1.35782e+06,1.37361e+06,1.3894e+06,
- 1.40519e+06,1.42098e+06,1.43677e+06,1.45256e+06,1.46834e+06
- ,1.48413e+06,1.49992e+06,1.51571e+06,1.5315e+06,1.54729e+06,
- 1.56308e+06,1.57886e+06,1.59465e+06,1.61044e+06,1.62623e+06,
- 1.64202e+06,1.65781e+06,1.6736e+06,1.68939e+06,1.70517e+06,
- 1.72096e+06,1.73675e+06,1.75254e+06,1.76833e+06,1.78412e+06,
- 1.79991e+06,1.81569e+06,1.83148e+06,1.84727e+06,1.86306e+06,
- 1.87885e+06,1.89464e+06,1.91043e+06,1.92621e+06,1.942e+06,
- 1.95779e+06,1.97358e+06,1.98937e+06,2.00516e+06,2.02095e+06,
- 2.03674e+06,2.05252e+06,2.06831e+06,2.0841e+06,2.09989e+06,
- 2.11568e+06,2.13147e+06,2.14726e+06,2.16304e+06,2.17883e+06,
- 2.19462e+06,2.21041e+06,2.2262e+06,2.24199e+06,2.25778e+06,
- 2.27356e+06,2.28935e+06,2.30514e+06,2.32093e+06,2.33672e+06,
- 2.35251e+06,2.3683e+06,2.38409e+06,2.39987e+06,2.41566e+06,
- 2.43145e+06,2.44724e+06,2.46303e+06,2.47882e+06,2.49461e+06,
- 2.51039e+06,2.52618e+06,2.54197e+06,2.55776e+06,2.57355e+06,
- 2.58934e+06,2.60513e+06,2.62092e+06,2.6367e+06,2.65249e+06,
- 2.66828e+06,2.68407e+06,2.69986e+06,2.71565e+06,2.73144e+06,
- 2.74722e+06,2.76301e+06,2.7788e+06,2.79459e+06,2.81038e+06,
- 2.82617e+06,2.84196e+06,2.85774e+06,2.87353e+06,2.88932e+06,
- 2.90511e+06,2.9209e+06,2.93669e+06,2.95248e+06,2.96827e+06,
- 2.98405e+06,2.99984e+06,3.01563e+06,3.03142e+06,3.04721e+06,
- 3.063e+06,3.07879e+06,3.09457e+06,3.11036e+06,3.12615e+06,
- 3.14194e+06};
- double a1widthin[200]={0,0,0,0,0,0,0,0,0,0,0,0,0.00153933,0.0136382,0.0457614,
- 0.105567,0.199612,0.333825,0.513831,0.745192,1.0336,1.38501,
- 1.80581,2.30295,2.88403,3.5575,4.33278,5.22045,6.23243,
- 7.38223,8.68521,10.1589,11.8234,13.7018,15.8206,18.2107,
- 20.9078,23.9533,27.3954,31.2905,35.7038,40.7106,46.3984,
- 52.8654,60.2207,68.581,78.0637,88.7754,100.794,114.145,
- 128.783,144.574,161.299,178.683,196.426,214.248,231.908,
- 249.221,266.059,282.336,298.006,313.048,327.46,341.254,
- 354.448,367.066,379.133,390.677,401.726,412.304,422.439,
- 432.155,441.474,450.419,459.01,467.267,475.207,482.847,
- 490.203,497.29,504.121,510.71,517.068,523.207,529.138,
- 534.869,540.411,545.776,550.961,556.663,560.851,565.566,
- 570.137,574.569,578.869,583.041,587.091,591.023,594.843,
- 598.553,602.16,605.664,609.072,612.396,615.626,618.754,
- 621.796,624.766,627.656,630.47,633.21,635.878,638.5,
- 641.006,643.471,645.873,648.213,650.493,652.715,654.88,
- 656.99,659.047,661.052,663.007,664.963,666.771,668.6,
- 670.351,672.075,673.828,675.397,676.996,678.567,680.083,
- 681.589,683.023,684.457,685.825,687.18,688.499,689.789,
- 691.058,692.284,693.501,694.667,695.82,696.947,698.05,
- 699.129,700.186,701.221,702.234,703.226,704.198,705.158,
- 706.085,707.001,707.899,708.78,709.644,710.474,711.334,
- 712.145,712.943,713.727,714.505,715.266,716.015,716.751,
- 717.474,718.183,718.88,719.645,720.243,720.91,721.565,
- 722.211,722.851,723.473,724.094,724.697,725.296,725.886,
- 726.468,727.041,727.608,728.166,728.718,729.262,729.808,
- 730.337,730.856,731.374,731.883,732.386,732.884,733.373,
- 733.859,734.339,734.813};
-
- vector<double> tmp1(a1widthin,a1widthin+200);
- _a1runwidth.clear();
- std::transform(tmp1.begin(), tmp1.end(),
- back_inserter(_a1runwidth),
- [](double x){return x*GeV;});
-
- vector<double> tmp2(a1q2in,a1q2in+200);
- _a1runq2.clear();
- std::transform(tmp2.begin(), tmp2.end(),
- back_inserter(_a1runq2),
- [](double x){return x*GeV2;});
-
- _maxmass=ZERO;
- _maxcalc=ZERO;
-}
-
-void ThreeMesonDefaultCurrent::doinit() {
- ThreeMesonCurrentBase::doinit();
- // the particles we will use a lot
- tPDPtr a1(getParticleData(ParticleID::a_1minus)),
- k1(getParticleData(ParticleID::Kstar_1minus)),pi0(getParticleData(ParticleID::pi0)),
- piplus(getParticleData(ParticleID::piplus)),
- piminus(getParticleData(ParticleID::piminus));
- // masses for the running widths
- _mpi=piplus->mass();
- _mK=getParticleData(ParticleID::Kminus)->mass();
- // the charged rho resonances
- tPDPtr rhoc[3]={getParticleData(-213),getParticleData(-100213),
- getParticleData(-30213)};
- // the charged K* resonances
- tPDPtr Kstarc[3]={getParticleData(-323),getParticleData(-100323),
- getParticleData(-30323)};
- if(!_a1parameters) {
- _a1mass=a1->mass();
- _a1width=a1->width();
- }
- // mass and width of the k_1
- if(!_k1parameters) {
- _k1mass=k1->mass();
- _k1width=k1->width();
- }
- // initialise the a_1 running width calculation
- inita1Width(-1);
- // rho parameters in the base classs
- tcPDPtr temp;
- unsigned int ix;
- if(_rhoparameters&&_rhoF123masses.size()<3) {
- ix = _rhoF123masses.size();
- _rhoF123masses.resize(3);_rhoF123widths.resize(3);
- for(;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF123masses[ix]=rhoc[ix]->mass();
- _rhoF123widths[ix]=rhoc[ix]->width();
- }
- }
- }
- else if(!_rhoparameters) {
- _rhoF123masses.resize(3);_rhoF123widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF123masses[ix]=rhoc[ix]->mass();
- _rhoF123widths[ix]=rhoc[ix]->width();
- }
- }
- }
- // K star parameters in the base class
- if(_kstarparameters&&_kstarF123masses.size()<3) {
- ix = _kstarF123masses.size();
- _kstarF123masses.resize(3);_kstarF123widths.resize(3);
- for(;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF123masses[ix]=Kstarc[ix]->mass();
- _kstarF123widths[ix]=Kstarc[ix]->width();
- }
- }
- }
- else if(!_kstarparameters) {
- _kstarF123masses.resize(3);_kstarF123widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF123masses[ix]=Kstarc[ix]->mass();
- _kstarF123widths[ix]=Kstarc[ix]->width();
- }
- }
- }
- // rho parameters here
- if(_rhoparameters&&_rhoF5masses.size()<3) {
- ix = _rhoF5masses.size();
- _rhoF5masses.resize(3);_rhoF5widths.resize(3);
- for(;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF5masses[ix]=rhoc[ix]->mass();
- _rhoF5widths[ix]=rhoc[ix]->width();
- }
- }
- }
- else if(!_rhoparameters) {
- _rhoF5masses.resize(3);_rhoF5widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- _rhoF5masses[ix]=rhoc[ix]->mass();
- _rhoF5widths[ix]=rhoc[ix]->width();
- }
- }
- }
- // Kstar parameters here
- if(_kstarparameters&&_kstarF5widths.size()<3) {
- ix = _kstarF5masses.size();
- _kstarF5masses.resize(3);_kstarF5widths.resize(3);
- for(;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF5masses[ix]=Kstarc[ix]->mass();
- _kstarF5widths[ix]=Kstarc[ix]->width();
- }
- }
- }
- else if(!_kstarparameters) {
- _kstarF5masses.resize(3);_kstarF5widths.resize(3);
- for(ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstarF5masses[ix]=Kstarc[ix]->mass();
- _kstarF5widths[ix]=Kstarc[ix]->width();
- }
- }
- }
-}
-
-void ThreeMesonDefaultCurrent::persistentOutput(PersistentOStream & os) const {
- os << _rhoF123wgts << _kstarF123wgts << _rhoF5wgts << _kstarF5wgts
- << _rhoKstarwgt << ounit(_a1runwidth,GeV)<< ounit(_a1runq2,GeV2)
- << _initializea1
- << ounit(_a1mass,GeV)<< ounit(_a1width,GeV)<< ounit(_k1mass,GeV)
- << ounit(_k1width,GeV)<< ounit(_fpi,GeV) << ounit(_mpi,GeV)<< ounit(_mK,GeV)
- <<_rhoparameters << ounit(_rhoF123masses,GeV) << ounit(_rhoF5masses,GeV)
- << ounit(_rhoF123widths,GeV)
- << ounit(_rhoF5widths,GeV) << _kstarparameters << ounit(_kstarF123masses,GeV)
- <<ounit(_kstarF5masses,GeV)
- << ounit(_kstarF123widths,GeV) << ounit(_kstarF5widths,GeV) << _a1parameters
- << _k1parameters
- << _a1opt << ounit(_maxmass,GeV) << ounit(_maxcalc,GeV) << _a1runinter;
-}
-
-void ThreeMesonDefaultCurrent::persistentInput(PersistentIStream & is, int) {
- is >> _rhoF123wgts >> _kstarF123wgts >> _rhoF5wgts >> _kstarF5wgts
- >> _rhoKstarwgt >> iunit(_a1runwidth,GeV) >> iunit(_a1runq2,GeV2)
- >> _initializea1
- >> iunit(_a1mass,GeV) >> iunit(_a1width,GeV) >> iunit(_k1mass,GeV)
- >> iunit(_k1width,GeV) >> iunit(_fpi,GeV) >> iunit(_mpi,GeV) >> iunit(_mK,GeV)
- >>_rhoparameters >> iunit(_rhoF123masses,GeV) >> iunit(_rhoF5masses,GeV)
- >> iunit(_rhoF123widths,GeV)
- >> iunit(_rhoF5widths,GeV) >> _kstarparameters >> iunit(_kstarF123masses,GeV)
- >>iunit(_kstarF5masses,GeV)
- >> iunit(_kstarF123widths,GeV) >> iunit(_kstarF5widths,GeV) >> _a1parameters
- >> _k1parameters
- >> _a1opt >> iunit(_maxmass,GeV) >> iunit(_maxcalc,GeV) >> _a1runinter;
-}
-
-void ThreeMesonDefaultCurrent::Init() {
-
- static ClassDocumentation<ThreeMesonDefaultCurrent> documentation
- ("The ThreeMesonDefaultCurrent class is designed to implement "
- "the three meson decays of the tau, ie pi- pi- pi+, pi0 pi0 pi-, "
- "K- pi- K+, K0 pi- Kbar0, K- pi0 K0,pi0 pi0 K-, K- pi- pi+, "
- "pi- Kbar0 pi0, pi- pi0 eta. It uses the same currents as those in TAUOLA.",
- "The three meson decays of the tau, ie pi- pi- pi+, pi0 pi0 pi-, "
- "K- pi- K+, K0 pi- Kbar0, K- pi0 K0,pi0 pi0 K-, K- pi- pi+, "
- "and pi- Kbar0 pi0, pi- pi0 eta "
- "use the same currents as \\cite{Jadach:1993hs,Kuhn:1990ad,Decker:1992kj}.",
- "%\\cite{Jadach:1993hs}\n"
- "\\bibitem{Jadach:1993hs}\n"
- " S.~Jadach, Z.~Was, R.~Decker and J.~H.~Kuhn,\n"
- " %``The Tau Decay Library Tauola: Version 2.4,''\n"
- " Comput.\\ Phys.\\ Commun.\\ {\\bf 76}, 361 (1993).\n"
- " %%CITATION = CPHCB,76,361;%%\n"
- "%\\cite{Kuhn:1990ad}\n"
- "\\bibitem{Kuhn:1990ad}\n"
- " J.~H.~Kuhn and A.~Santamaria,\n"
- " %``Tau decays to pions,''\n"
- " Z.\\ Phys.\\ C {\\bf 48}, 445 (1990).\n"
- " %%CITATION = ZEPYA,C48,445;%%\n"
- "%\\cite{Decker:1992kj}\n"
- "\\bibitem{Decker:1992kj}\n"
- " R.~Decker, E.~Mirkes, R.~Sauer and Z.~Was,\n"
- " %``Tau decays into three pseudoscalar mesons,''\n"
- " Z.\\ Phys.\\ C {\\bf 58}, 445 (1993).\n"
- " %%CITATION = ZEPYA,C58,445;%%\n"
- );
-
-
- static ParVector<ThreeMesonDefaultCurrent,double> interfaceF123RhoWgt
- ("F123RhoWeight",
- "The weights of the different rho resonances in the F1,2,3 form factor",
- &ThreeMesonDefaultCurrent::_rhoF123wgts,
- 0, 0, 0, -1000, 1000, false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,double> interfaceF123KstarWgt
- ("F123KstarWeight",
- "The weights of the different Kstar resonances in the F1,2,3 form factor",
- &ThreeMesonDefaultCurrent::_kstarF123wgts,
- 0, 0, 0, -1000, 1000, false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,double> interfaceF5RhoWgt
- ("F5RhoWeight",
- "The weights of the different rho resonances in the F1,2,3 form factor",
- &ThreeMesonDefaultCurrent::_rhoF5wgts,
- 0, 0, 0, -1000, 1000, false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,double> interfaceF5KstarWgt
- ("F5KstarWeight",
- "The weights of the different Kstar resonances in the F1,2,3 form factor",
- &ThreeMesonDefaultCurrent::_kstarF5wgts,
- 0, 0, 0, -1000, 1000, false, false, true);
-
- static Parameter<ThreeMesonDefaultCurrent,double> interfaceRhoKstarWgt
- ("RhoKstarWgt",
- "The relative weights of the rho and K* in the F5 form factor",
- &ThreeMesonDefaultCurrent::_rhoKstarwgt, -0.2, -10., 10.,
- false, false, false);
-
- static Switch<ThreeMesonDefaultCurrent,bool> interfaceInitializea1
- ("Initializea1",
- "Initialise the calculation of the a_1 running width",
- &ThreeMesonDefaultCurrent::_initializea1, false, false, false);
- static SwitchOption interfaceInitializea1Initialization
- (interfaceInitializea1,
- "Yes",
- "Initialize the calculation",
- true);
- static SwitchOption interfaceInitializea1NoInitialization
- (interfaceInitializea1,
- "No",
- "Use the default values",
- false);
-
- static Switch<ThreeMesonDefaultCurrent,bool> interfaceRhoParameters
- ("RhoParameters",
- "Use local values of the rho meson masses and widths",
- &ThreeMesonDefaultCurrent::_rhoparameters, true, false, false);
- static SwitchOption interfaceRhoParameterstrue
- (interfaceRhoParameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceRhoParametersParticleData
- (interfaceRhoParameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<ThreeMesonDefaultCurrent,bool> interfaceKstarParameters
- ("KstarParameters",
- "Use local values of the rho meson masses and widths",
- &ThreeMesonDefaultCurrent::_kstarparameters, true, false, false);
- static SwitchOption interfaceKstarParameterstrue
- (interfaceKstarParameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceKstarParametersParticleData
- (interfaceKstarParameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<ThreeMesonDefaultCurrent,bool> interfacea1Parameters
- ("a1Parameters",
- "Use local values of the rho meson masses and widths",
- &ThreeMesonDefaultCurrent::_a1parameters, true, false, false);
- static SwitchOption interfacea1Parameterstrue
- (interfacea1Parameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfacea1ParametersParticleData
- (interfacea1Parameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<ThreeMesonDefaultCurrent,bool> interfaceK1Parameters
- ("K1Parameters",
- "Use local values of the rho meson masses and widths",
- &ThreeMesonDefaultCurrent::_k1parameters, true, false, false);
- static SwitchOption interfaceK1Parameterstrue
- (interfaceK1Parameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceK1ParametersParticleData
- (interfaceK1Parameters,
- "ParticleData",
- "Use the masses and wdiths from the particle data objects",
- false);
-
- static Switch<ThreeMesonDefaultCurrent,bool> interfacea1WidthOption
- ("a1WidthOption",
- "Option for the treatment of the a1 width",
- &ThreeMesonDefaultCurrent::_a1opt, true, false, false);
- static SwitchOption interfacea1WidthOptionLocal
- (interfacea1WidthOption,
- "Local",
- "Use a calculation of the running width based on the parameters as"
- " interpolation table.",
- true);
- static SwitchOption interfacea1WidthOptionParam
- (interfacea1WidthOption,
- "Kuhn",
- "Use the parameterization of Kuhn and Santamaria for default parameters."
- " This should only be used for testing vs TAUOLA",
- false);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfacea1RunningWidth
- ("a1RunningWidth",
- "The values of the a_1 width for interpolation to giving the running width.",
- &ThreeMesonDefaultCurrent::_a1runwidth, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy2> interfacea1RunningQ2
- ("a1RunningQ2",
- "The values of the q^2 for interpolation to giving the running width.",
- &ThreeMesonDefaultCurrent::_a1runq2, GeV2, -1, 1.0*GeV2, ZERO, 10.0*GeV2,
- false, false, true);
-
- static Parameter<ThreeMesonDefaultCurrent,Energy> interfaceA1Width
- ("A1Width",
- "The a_1 width if using local values.",
- &ThreeMesonDefaultCurrent::_a1width, GeV, 0.599*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static Parameter<ThreeMesonDefaultCurrent,Energy> interfaceA1Mass
- ("A1Mass",
- "The a_1 mass if using local values.",
- &ThreeMesonDefaultCurrent::_a1mass, GeV, 1.251*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static Parameter<ThreeMesonDefaultCurrent,Energy> interfaceK1Width
- ("K1Width",
- "The K_1 width if using local values.",
- &ThreeMesonDefaultCurrent::_k1width, GeV, 0.174*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static Parameter<ThreeMesonDefaultCurrent,Energy> interfaceK1Mass
- ("K1Mass",
- "The K_1 mass if using local values.",
- &ThreeMesonDefaultCurrent::_k1mass, GeV, 1.402*GeV, ZERO, 10.0*GeV,
- false, false, false);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfacerhoF123masses
- ("rhoF123masses",
- "The masses for the rho resonances if used local values",
- &ThreeMesonDefaultCurrent::_rhoF123masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfacerhoF123widths
- ("rhoF123widths",
- "The widths for the rho resonances if used local values",
- &ThreeMesonDefaultCurrent::_rhoF123widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfacerhoF5masses
- ("rhoF5masses",
- "The masses for the rho resonances if used local values",
- &ThreeMesonDefaultCurrent::_rhoF5masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfacerhoF5widths
- ("rhoF5widths",
- "The widths for the rho resonances if used local values",
- &ThreeMesonDefaultCurrent::_rhoF5widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfaceKstarF123masses
- ("KstarF123masses",
- "The masses for the Kstar resonances if used local values",
- &ThreeMesonDefaultCurrent::_kstarF123masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfaceKstarF123widths
- ("KstarF123widths",
- "The widths for the Kstar resonances if used local values",
- &ThreeMesonDefaultCurrent::_kstarF123widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfaceKstarF5masses
- ("KstarF5masses",
- "The masses for the Kstar resonances if used local values",
- &ThreeMesonDefaultCurrent::_kstarF5masses, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static ParVector<ThreeMesonDefaultCurrent,Energy> interfaceKstarF5widths
- ("KstarF5widths",
- "The widths for the Kstar resonances if used local values",
- &ThreeMesonDefaultCurrent::_kstarF5widths, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, true);
-
- static Parameter<ThreeMesonDefaultCurrent,Energy> interfaceFPi
- ("FPi",
- "The pion decay constant",
- &ThreeMesonDefaultCurrent::_fpi, MeV, 92.4*MeV, ZERO, 200.0*MeV,
- false, false, true);
-}
-
-// modes handled by this class
-bool ThreeMesonDefaultCurrent::acceptMode(int imode) const {
- return imode>=0&&imode<=8;
-}
-
-// calculate the form-factors
-ThreeMesonDefaultCurrent::FormFactors
-ThreeMesonDefaultCurrent::calculateFormFactors(const int ichan, const int imode,
- Energy2 q2, Energy2 s1,
- Energy2 s2, Energy2 s3) const {
- useMe();
- Complex F1, F2, F3, F4, F5;
- F1 = F2 = F3 = F4 = F5 = 0.0;
- // calculate the pi- pi- pi+ factor
- if(imode==0) {
- Complex a1fact(a1BreitWigner(q2)*2./3.);
- if(ichan<0) {
- F1= a1fact*BrhoF123(s1,-1);
- F2 =-a1fact*BrhoF123(s2,-1);
- }
- else if(ichan%2==0) F1 = a1fact*BrhoF123(s1, ichan/2);
- else if(ichan%2==1) F2 =-a1fact*BrhoF123(s2,(ichan-1)/2);
- }
- // calculate the pi0 pi0 pi- factor
- else if(imode==1) {
- Complex a1fact(a1BreitWigner(q2)*2./3.);
- if(ichan<0) {
- F1 = a1fact*BrhoF123(s1,-1);
- F2 =-a1fact*BrhoF123(s2,-1);
- }
- else if(ichan%2==0) F1 = a1fact*BrhoF123(s1, ichan/2);
- else if(ichan%2==1) F2 =-a1fact*BrhoF123(s2,(ichan-1)/2);
- }
- // calculate the K- pi - K+ factor
- else if(imode==2) {
- Complex a1fact(a1BreitWigner(q2)*sqrt(2.)/3.);
- if(ichan<0) {
- F1 =-a1fact*BKstarF123(s1,-1);
- F2 = a1fact*BrhoF123(s2,-1);
- F5 = BrhoF5(q2,-1)*FKrho(s1,s2,-1)*sqrt(2.);
- }
- else if(ichan%8==0) F1 =-a1fact*BKstarF123(s1,ichan/8);
- else if(ichan%8==1) F2 = a1fact*BrhoF123(s2,(ichan-1)/8);
- else if(ichan%8>=2) F5 = BrhoF5(q2,ichan/8)*FKrho(s1,s2,(ichan-2)%8)*sqrt(2.);
- }
- // calculate the K0 pi- K0bar
- else if(imode==3) {
- Complex a1fact(a1BreitWigner(q2)*sqrt(2.)/3.);
- if(ichan<0) {
- F1 =-a1fact*BKstarF123(s1,-1);
- F2 = a1fact*BrhoF123(s2,-1);
- F5 =-BrhoF5(q2,-1)*FKrho(s1,s2,-1)*sqrt(2.);
- }
- else if(ichan%8==0) F1 = -a1fact*BKstarF123(s1,ichan/8);
- else if(ichan%8==1) F2 = a1fact*BrhoF123(s2,(ichan-1)/8);
- else if(ichan%8>=2) F5 = -BrhoF5(q2,ichan/8)*FKrho(s1,s2,(ichan-2)%8)*sqrt(2.);
- }
- // calculate the K- pi0 k0
- else if(imode==4) {
- Complex a1fact(a1BreitWigner(q2));
- if(ichan<0){F2 =-a1fact*BrhoF123(s2,-1);}
- else{F2 =-a1fact*BrhoF123(s2,ichan);}
- }
- // calculate the pi0 pi0 K-
- else if(imode==5) {
- Complex K1fact(K1BreitWigner(q2)/6.);
- if(ichan<0) {
- F1 = K1fact*BKstarF123(s1,-1);
- F2 =-K1fact*BKstarF123(s2,-1);
- }
- else if(ichan%2==0) F1 = K1fact*BKstarF123(s1,ichan/2);
- else F2 =-K1fact*BKstarF123(s2,(ichan-1)/2);
- }
- // calculate the K- pi- pi+
- else if(imode==6) {
- Complex K1fact(K1BreitWigner(q2)*sqrt(2.)/3.);
- if(ichan<0) {
- F1 =-K1fact*BrhoF123(s1,-1);
- F2 = K1fact*BKstarF123(s2,-1);
- F5 =-BKstarF123(q2,-1)*FKrho(s2,s1,-1)*sqrt(2.);
- }
- else if(ichan%8==0) F1 =-K1fact*BrhoF123(s1,ichan/8);
- else if(ichan%8==1) F2 = K1fact*BKstarF123(s2,(ichan-1)/8);
- else F5 = -BKstarF123(q2,ichan/8)*FKrho(s2,s1,(ichan-2)%8)*sqrt(2.);
- }
- // calculate the pi- K0bar pi0
- else if(imode==7) {
- Complex K1fact(K1BreitWigner(q2));
- if(ichan<0) {
- F2 =-K1fact*BrhoF123(s2,-1);
- F5 =-2.*BKstarF123(q2,-1)*FKrho(s1,s2,-1);
- }
- else if(ichan%7==0) F2 =-K1fact*BrhoF123(s2,ichan/7);
- else F5 =-2.*BKstarF123(q2,ichan/7)*FKrho(s1,s2,(ichan-1)%7);
- }
- // calculate the pi- pi0 eta
- else if(imode==8) {
- if(ichan<0) F5 = BrhoF5(q2, -1)*BrhoF123(s3, -1)*sqrt(2./3.);
- else F5 = BrhoF5(q2,ichan/3)*BrhoF123(s3,ichan%3)*sqrt(2./3.);
- }
- // multiply by the prefactors
- using Constants::twopi;
- return FormFactors(F1/_fpi,
- F2/_fpi,
- F3/_fpi,
- F4/_fpi,
- -F5/sqr(twopi)/pow<3,1>(_fpi)
- );
-}
-
-// complete the construction of the decay mode for integration
-bool ThreeMesonDefaultCurrent::createMode(int icharge, tcPDPtr resonance,
- IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
- unsigned int imode,PhaseSpaceModePtr mode,
- unsigned int iloc,int ires,
- PhaseSpaceChannel phase, Energy upp ) {
- int iq(0),ia(0);
- if(!acceptMode(imode)) return false;
- tPDVector extpart(particles(1,imode,iq,ia));
- Energy min(ZERO);
- for(unsigned int ix=0;ix<extpart.size();++ix) min+=extpart[ix]->massMin();
- if(min>upp) return false;
- // the particles we will use a lot
- tPDPtr a1,k1;
- if(icharge==-3) {
- a1=getParticleData(ParticleID::a_1minus);
- k1=getParticleData(ParticleID::Kstar_1minus);
- }
- else if(icharge==3) {
- a1=getParticleData(ParticleID::a_1plus);
- k1=getParticleData(ParticleID::Kstar_1plus);
- }
- else {
- return false;
- }
- _maxmass=max(_maxmass,upp);
- // the rho0 resonances
- tPDPtr rho0[3] = { getParticleData(113), getParticleData(100113), getParticleData(30113)};
- tPDPtr rhoc[3] = {getParticleData(-213),getParticleData(-100213),getParticleData(-30213)};
- tPDPtr Kstar0[3] = { getParticleData(313), getParticleData(100313), getParticleData(30313)};
- tPDPtr Kstarc[3] = {getParticleData(-323),getParticleData(-100323),getParticleData(-30323)};
- if(icharge==3) {
- for(unsigned int ix=0;ix<3;++ix) {
- rhoc [ix] = rhoc[ix]->CC();
- Kstar0[ix] = Kstar0[ix]->CC();
- Kstarc[ix] = Kstarc[ix]->CC();
- }
- }
- if(imode==0) {
- // channels for pi- pi- pi+
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rho0[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,rho0[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rho0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==1) {
- // channels for pi0 pi0 pi-
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rhoc[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,rhoc[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rhoc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==2) {
- // channels for K- pi- K+
- for(unsigned int ix=0;ix<3;++ix) {
- if(Kstar0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,Kstar0[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rho0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!rhoc[ix]) continue;
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+1,ires+1,Kstar0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+2,ires+1,rho0[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- }
- }
- else if(imode==3) {
- // channels for K0 pi- K0bar
- for(unsigned int ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+1,ires+1,Kstarc[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rho0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!rhoc[ix]) continue;
- if(Kstarc[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+1,ires+1,Kstarc[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rho0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+2,ires+1,rho0[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- }
- }
- else if(imode==4) {
- // channels for K- pi0 K0
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rhoc[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,iloc+2,ires+1,rhoc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==5) {
- // channels for pi0 pi0 K-
- for(unsigned int ix=0;ix<3;++ix) {
- if(!Kstarc[ix]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+1,ires+1,Kstarc[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+2,ires+1,Kstarc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- else if(imode==6) {
- // channels for K- pi- pi+
- for(unsigned int ix=0;ix<3;++ix) {
- if(rho0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+1,ires+1,rho0[ix],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(Kstar0[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+2,ires+1,Kstar0[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!Kstarc[ix]) continue;
- if(rho0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+1,ires+1,rho0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+2,ires+1,Kstar0[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- }
- }
- else if(imode==7) {
- // channels for pi- kbar0 pi0
- for(unsigned int ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1,ires+1,iloc+2,ires+1,rhoc[ix],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!Kstarc[ix]) continue;
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+1,ires+1,Kstar0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(rhoc[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,iloc+2,ires+1,rhoc[iy],
- ires+2,iloc+1,ires+2,iloc+3));
- }
- }
- }
- }
- else if(imode==8) {
- // channels for pi- pi0 eta
- for(unsigned int ix=0;ix<3;++ix) {
- if(!rhoc[ix]) continue;
- for(unsigned int iy=0;iy<3;++iy) {
- if(!rho0[iy]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,iloc+1,ires+1,rho0[iy],
- ires+2,iloc+2,ires+2,iloc+3));
- }
- }
- }
- if(_rhoparameters) {
- if(imode!=8) {
- for(unsigned int ix=0;ix<_rhoF123masses.size();++ix) {
- if(rhoc[ix]) mode->resetIntermediate(rhoc[ix],_rhoF123masses[ix],
- _rhoF123widths[ix]);
- if(rho0[ix]) mode->resetIntermediate(rho0[ix],_rhoF123masses[ix],
- _rhoF123widths[ix]);
- }
- }
- else {
- for(unsigned int ix=0;ix<_rhoF5masses.size();++ix) {
- if(rhoc[ix]) mode->resetIntermediate(rhoc[ix],_rhoF5masses[ix],
- _rhoF5widths[ix]);
- if(rho0[ix]) mode->resetIntermediate(rho0[ix],_rhoF5masses[ix],
- _rhoF5widths[ix]);
- }
- }
- }
- // K star parameters in the base class
- if(_kstarparameters) {
- for(unsigned int ix=0;ix<_kstarF123masses.size();++ix) {
- if(Kstarc[ix]) mode->resetIntermediate(Kstarc[ix],_kstarF123masses[ix],
- _kstarF123widths[ix]);
- if(Kstar0[ix]) mode->resetIntermediate(Kstar0[ix],_kstarF123masses[ix],
- _kstarF123widths[ix]);
- }
- }
- return true;
-}
-
-// initialisation of the a_1 width
-// (iopt=-1 initialises, iopt=0 starts the interpolation)
-void ThreeMesonDefaultCurrent::inita1Width(int iopt) {
- if(iopt==-1) {
- _maxcalc=_maxmass;
- if(!_initializea1||_maxmass==ZERO) return;
- // parameters for the table of values
- Energy2 step(sqr(_maxcalc)/199.);
- // integrator to perform the integral
- vector<double> inweights;inweights.push_back(0.5);inweights.push_back(0.5);
- vector<int> intype;intype.push_back(2);intype.push_back(3);
- Energy mrho(getParticleData(ParticleID::rhoplus)->mass()),
- wrho(getParticleData(ParticleID::rhoplus)->width());
- vector<Energy> inmass(2,mrho),inwidth(2,wrho);
- vector<double> inpow(2,0.0);
- ThreeBodyAllOnCalculator<ThreeMesonDefaultCurrent>
- widthgen(inweights,intype,inmass,inwidth,inpow,*this,0,_mpi,_mpi,_mpi);
- // normalisation constant to give physical width if on shell
- double a1const(_a1width/(widthgen.partialWidth(sqr(_a1mass))));
- // loop to give the values
- _a1runq2.clear(); _a1runwidth.clear();
- for(Energy2 moff2(ZERO); moff2<=sqr(_maxcalc); moff2+=step) {
- _a1runwidth.push_back(widthgen.partialWidth(moff2)*a1const);
- _a1runq2.push_back(moff2);
- }
- }
- // set up the interpolator
- else if(iopt==0) {
- _a1runinter = make_InterpolatorPtr(_a1runwidth,_a1runq2,3);
- }
-}
-
-void ThreeMesonDefaultCurrent::dataBaseOutput(ofstream & output,bool header,
- bool create) const {
- if(header) output << "update decayers set parameters=\"";
- if(create) output << "create Herwig::ThreeMesonDefaultCurrent "
- << name() << " HwWeakCurrents.so\n";
- for(unsigned int ix=0;ix<_rhoF123wgts.size();++ix) {
- if(ix<3) output << "newdef ";
- else output << "insert ";
- output << name() << ":F123RhoWeight " << ix << " " << _rhoF123wgts[ix] << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF123wgts.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":F123KstarWeight " << ix << " "
- << _kstarF123wgts[ix] << "\n";
- }
- for(unsigned int ix=0;ix<_rhoF5wgts.size();++ix) {
- if(ix<3) output << "newdef ";
- else output << "insert ";
- output << name() << ":F5RhoWeight " << ix << " " << _rhoF5wgts[ix] << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF5wgts.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":F5KstarWeight " << ix << " " << _kstarF5wgts[ix] << "\n";
- }
- output << "newdef " << name() << ":RhoKstarWgt " << _rhoKstarwgt << "\n";
- output << "newdef " << name() << ":Initializea1 " << _initializea1 << "\n";
- output << "newdef " << name() << ":RhoParameters " << _rhoparameters << "\n";
- output << "newdef " << name() << ":KstarParameters " << _kstarparameters << "\n";
- output << "newdef " << name() << ":a1Parameters " << _a1parameters << "\n";
- output << "newdef " << name() << ":K1Parameters " << _k1parameters << "\n";
- output << "newdef " << name() << ":a1WidthOption " << _a1opt << "\n";
- for(unsigned int ix=0;ix<_a1runwidth.size();++ix) {
- output << "newdef " << name() << ":a1RunningWidth " << ix
- << " " << _a1runwidth[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_a1runq2.size();++ix) {
- output << "newdef " << name() << ":a1RunningQ2 " << ix
- << " " << _a1runq2[ix]/GeV2 << "\n";
- }
- output << "newdef " << name() << ":A1Width " << _a1width/GeV << "\n";
- output << "newdef " << name() << ":A1Mass " << _a1mass/GeV << "\n";
- output << "newdef " << name() << ":K1Width " << _k1width/GeV << "\n";
- output << "newdef " << name() << ":K1Mass " << _k1mass/GeV << "\n";
- output << "newdef " << name() << ":FPi " << _fpi/MeV << "\n";
- for(unsigned int ix=0;ix<_rhoF123masses.size();++ix) {
- if(ix<3) output << "newdef ";
- else output << "insert ";
- output << name() << ":rhoF123masses " << ix
- << " " << _rhoF123masses[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_rhoF123widths.size();++ix) {
- if(ix<3) output << "newdef ";
- else output << "insert ";
- output << name() << ":rhoF123widths " << ix << " "
- << _rhoF123widths[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_rhoF5masses.size();++ix) {
- if(ix<3) output << "newdef ";
- else output << "insert ";
- output << name() << ":rhoF5masses " << ix << " "
- << _rhoF5masses[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_rhoF5widths.size();++ix) {
- if(ix<3) output << "newdef ";
- else output << "insert ";
- output << name() << ":rhoF5widths " << ix << " "
- << _rhoF5widths[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF123masses.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF123masses " << ix << " "
- << _kstarF123masses[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF123widths.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF123widths " << ix << " "
- << _kstarF123widths[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF5masses.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF5masses " << ix << " "
- << _kstarF5masses[ix]/GeV << "\n";
- }
- for(unsigned int ix=0;ix<_kstarF5widths.size();++ix) {
- if(ix<1) output << "newdef ";
- else output << "insert ";
- output << name() << ":KstarF5widths " << ix << " "
- << _kstarF5widths[ix]/GeV << "\n";
- }
- ThreeMesonCurrentBase::dataBaseOutput(output,false,false);
- if(header) output << "\n\" where BINARY ThePEGName=\""
- << fullName() << "\";" << endl;
-}
-
-void ThreeMesonDefaultCurrent::doinitrun() {
- // set up the running a_1 width
- inita1Width(0);
- ThreeMesonCurrentBase::doinitrun();
-}
-
-void ThreeMesonDefaultCurrent::doupdate() {
- ThreeMesonCurrentBase::doupdate();
- // update running width if needed
- if ( !touched() ) return;
- if(_maxmass!=_maxcalc) inita1Width(-1);
-}
-
-Complex ThreeMesonDefaultCurrent::rhoKBreitWigner(Energy2 q2,unsigned int itype,
- unsigned int ires) const {
- Energy q(sqrt(q2)),mass,width,mout[2]={_mpi,_mpi};
- // get the mass and width of the requested resonance
- if(itype==0) {
- mass=_rhoF123masses[ires];
- width=_rhoF123widths[ires];
- }
- else if(itype==1) {
- mass=_rhoF5masses[ires];
- width=_rhoF5widths[ires];
- }
- else if(itype==2) {
- mass=_kstarF123masses[ires];
- width=_kstarF123widths[ires];
- }
- else if(itype==3) {
- mass=_kstarF5masses[ires];
- width=_kstarF5widths[ires];
- }
- else {
- return 0.;
- }
- // calculate the momenta for the running widths
- if(itype>1) mout[0]=_mK;
- Energy pcm0(Kinematics::pstarTwoBodyDecay(mass,mout[0],mout[1]));
- Energy pcm(ZERO);
- if(mout[0]+mout[1]<q){pcm=Kinematics::pstarTwoBodyDecay(q,mout[0],mout[1]);}
- double ratio = Math::Pow<3>(pcm/pcm0);
- Energy gamrun(width*mass*ratio/q);
- Complex ii(0.,1.);
- complex<Energy2> denom(q2-mass*mass+ii*mass*gamrun), numer(-mass*mass);
- return numer/denom;
-}
-
-double ThreeMesonDefaultCurrent::
-threeBodyMatrixElement(const int , const Energy2 q2,
- const Energy2 s3, const Energy2 s2,
- const Energy2 s1, const Energy ,
- const Energy , const Energy ) const {
- Energy2 mpi2(sqr(_mpi));
- Complex propb(BrhoF123(s1,-1)),propa(BrhoF123(s2,-1));
- // the matrix element
- Energy2 output(ZERO);
- // first resonance
- output += ((s1-4.*mpi2) + 0.25*(s3-s2)*(s3-s2)/q2) * real(propb*conj(propb));
- // second resonance
- output += ((s2-4.*mpi2) + 0.25*(s3-s1)*(s3-s1)/q2) * real(propa*conj(propa));
- // the interference term
- output += (0.5*q2-s3-0.5*mpi2+0.25*(s3-s2)*(s3-s1)/q2)*real(propa*conj(propb)+
- propb*conj(propa));
- return output/sqr(_rhoF123masses[0]);
-}
diff --git a/Decay/WeakCurrents/ThreeMesonDefaultCurrent.h b/Decay/WeakCurrents/ThreeMesonDefaultCurrent.h
deleted file mode 100644
--- a/Decay/WeakCurrents/ThreeMesonDefaultCurrent.h
+++ /dev/null
@@ -1,534 +0,0 @@
-// -*- C++ -*-
-//
-// ThreeMesonDefaultCurrent.h is a part of Herwig - A multi-purpose Monte Carlo event generator
-// Copyright (C) 2002-2017 The Herwig Collaboration
-//
-// Herwig is licenced under version 3 of the GPL, see COPYING for details.
-// Please respect the MCnet academic guidelines, see GUIDELINES for details.
-//
-#ifndef HERWIG_ThreeMesonDefaultCurrent_H
-#define HERWIG_ThreeMesonDefaultCurrent_H
-//
-// This is the declaration of the ThreeMesonDefaultCurrent class.
-//
-#include "ThreeMesonCurrentBase.h"
-#include "Herwig/Utilities/Interpolator.h"
-#include "Herwig/Utilities/Kinematics.h"
-#include "ThePEG/StandardModel/StandardModelBase.h"
-#include "Herwig/Decay/ResonanceHelpers.h"
-
-namespace Herwig {
-using namespace ThePEG;
-
-/** \ingroup Decay
- *
- * The ThreeMesonDefaultCurrent class implements the currents from Z.Phys.C58:445 (1992),
- * this paper uses the form from Z.Phys.C48:445 (1990) for the \f$a_1\f$ width and
- * is the default model in TAUOLA.
- *
- * The following three meson modes are implemented.
- *
- * - \f$ \pi^- \pi^- \pi^+ \f$, (imode=0)
- * - \f$ \pi^0 \pi^0 \pi^- \f$, (imode=1)
- * - \f$ K^- \pi^- K^+ \f$, (imode=2)
- * - \f$ K^0 \pi^- \bar{K}^0\f$, (imode=3)
- * - \f$ K^- \pi^0 K^0 \f$, (imode=4)
- * - \f$ \pi^0 \pi^0 K^- \f$, (imode=5)
- * - \f$ K^- \pi^- \pi^+ \f$, (imode=6)
- * - \f$ \pi^- \bar{K}^0 \pi^0 \f$, (imode=7)
- * - \f$ \pi^- \pi^0 \eta \f$, (imode=8)
- *
- * using the currents from TAUOLA
- *
- *
- * @see ThreeMesonCurrentBase,
- * @see WeakCurrent.
- * @see Defaulta1MatrixElement
- *
- */
-class ThreeMesonDefaultCurrent: public ThreeMesonCurrentBase {
-
- /**
- * The matrix element for the running \f$a_1\f$ width is a friend to
- * keep some members private.
- */
- friend class Defaulta1MatrixElement;
-
-public:
-
- /**
- * Default constructor
- */
- ThreeMesonDefaultCurrent();
-
- /** @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);
- //@}
-
- /**
- * Standard Init function used to initialize the interfaces.
- */
- static void Init();
-
-public:
-
- /** @name Methods for the construction of the phase space integrator. */
- //@{
- /**
- * Complete the construction of the decay mode for integration.classes inheriting
- * from this one.
- * This method is purely virtual and must be implemented in the classes inheriting
- * from WeakCurrent.
- * @param icharge The total charge of the outgoing particles in the current.
- * @param resonance If specified only include terms with this particle
- * @param Itotal If specified the total isospin of the current
- * @param I3 If specified the thrid component of isospin
- * @param imode The mode in the current being asked for.
- * @param mode The phase space mode for the integration
- * @param iloc The location of the of the first particle from the current in
- * the list of outgoing particles.
- * @param ires The location of the first intermediate for the current.
- * @param phase The prototype phase space channel for the integration.
- * @param upp The maximum possible mass the particles in the current are
- * allowed to have.
- * @return Whether the current was sucessfully constructed.
- */
- virtual bool createMode(int icharge, tcPDPtr resonance,
- IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
- unsigned int imode,PhaseSpaceModePtr mode,
- unsigned int iloc,int ires,
- PhaseSpaceChannel phase, Energy upp );
- //@}
-
- /**
- * 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
- * @param create Whether or not to add a statement creating the object
- */
- virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
-
- /**
- * the matrix element for the \f$a_1\f$ decay to calculate the running width
- * @param imode The mode for which the matrix element is needed.
- * @param q2 The mass of the decaying off-shell \f$a_1\f$, \f$q^2\f$.
- * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
- * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
- * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
- * @param m1 The mass of the first outgoing particle.
- * @param m2 The mass of the second outgoing particle.
- * @param m3 The mass of the third outgoing particle.
- * @return The matrix element squared summed over spins.
- */
- double threeBodyMatrixElement(const int imode, const Energy2 q2,
- const Energy2 s3, const Energy2 s2,
- const Energy2 s1, const Energy m1,
- const Energy m2, const Energy m3) const;
-
-protected:
-
- /**
- * Can the current handle a particular set of mesons.
- * As this current includes all the allowed modes this is always true.
- */
- virtual bool acceptMode(int) const;
-
- /**
- * Calculate the form factor for the current. Implements the form factors
- * described above.
- * @param ichan The phase space channel
- * @param imode The mode
- * @param q2 The scale \f$q^2\f$ for the current.
- * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
- * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
- * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
- */
- virtual FormFactors calculateFormFactors(const int ichan, const int imode,
- Energy2 q2,
- Energy2 s1, Energy2 s2, Energy2 s3) const;
-
-protected:
-
- /** @name Clone Methods. */
- //@{
- /**
- * Make a simple clone of this object.
- * @return a pointer to the new object.
- */
- virtual IBPtr clone() const {return new_ptr(*this);}
-
- /** 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 {return new_ptr(*this);}
- //@}
-
-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();
-
- /**
- * Check sanity of the object during the setup phase.
- */
- virtual void doupdate();
- //@}
-
-private:
-
- /**
- * Private and non-existent assignment operator.
- */
- ThreeMesonDefaultCurrent & operator=(const ThreeMesonDefaultCurrent &);
-
-private:
-
- /**
- * The \f$\rho\f$ Breit-Wigner for the \f$F_{1,2,3}\f$ form factors.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires Which \f$\rho\f$ multiplet
- * @return The Breit-Wigner
- */
- Complex BrhoF123(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_rhoF123wgts.size()));ix<N;++ix) {
- norm+=_rhoF123wgts[ix];
- }
- if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_rhoF123wgts.size()));ix<N;++ix) {
- output+=_rhoF123wgts[ix]*rhoKBreitWigner(q2,0,ix);
- }
- }
- else {
- unsigned int temp(ires);
- if(temp<_rhoF123wgts.size()&&temp<3)
- output=_rhoF123wgts[temp]*rhoKBreitWigner(q2,0,temp);
- else
- output=0.;
- }
- return output/norm;
- }
-
- /**
- * The \f$\rho\f$ Breit-Wigner for the \f$F_5\f$ form factors.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires Which \f$\rho\f$ multiplet
- * @return The Breit-Wigner
- */
- Complex BrhoF5(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_rhoF5wgts.size()));ix<N;++ix) {
- norm+=_rhoF5wgts[ix];
- }
- if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_rhoF5wgts.size()));ix<N;++ix) {
- output+=_rhoF5wgts[ix]*rhoKBreitWigner(q2,1,ix);
- }
- }
- else {
- unsigned int temp(ires);
- if(temp<_rhoF5wgts.size()&&temp<3) {
- output=_rhoF5wgts[temp]*rhoKBreitWigner(q2,1,temp);
- }
- }
- return output/norm;
- }
-
- /**
- * The \f$K^*\f$ Breit-Wigner for the \f$F_{1,2,3}\f$ form factors.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires Which \f$\rho\f$ multiplet
- * @return The Breit-Wigner
- */
- Complex BKstarF123(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_kstarF123wgts.size()));ix<N;++ix) {
- norm+=_kstarF123wgts[ix];
- }
- if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_kstarF123wgts.size()));ix<N;++ix) {
- output+=_kstarF123wgts[ix]*rhoKBreitWigner(q2,2,ix);
- }
- }
- else {
- unsigned int temp(ires);
- if(temp<_kstarF123wgts.size()&&temp<3) {
- output=_kstarF123wgts[temp]*rhoKBreitWigner(q2,2,temp);
- }
- }
- return output/norm;
- }
-
- /**
- * The \f$K^*\f$ Breit-Wigner for the \f$F_5\f$ form factors.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires Which \f$\rho\f$ multiplet
- * @return The Breit-Wigner
- */
- Complex BKstarF5(Energy2 q2,int ires) const {
- Complex output(0.),norm(0.);
- for(unsigned int ix=0,N=min(3,int(_kstarF5wgts.size()));ix<N;++ix) {
- norm+=_kstarF5wgts[ix];
- }
- if(ires<0) {
- for(unsigned int ix=0,N=min(3,int(_kstarF5wgts.size()));ix<N;++ix) {
- output+=_kstarF5wgts[ix]*rhoKBreitWigner(q2,3,ix);
- }
- }
- else {
- unsigned int temp(ires);
- if(temp<_kstarF5wgts.size()&&temp<3) {
- output=_kstarF5wgts[ires]*rhoKBreitWigner(q2,3,temp);
- }
- }
- return output/norm;
- }
-
- /**
- * Mixed Breit Wigner for the \f$F_5\f$ form factor
- * @param si The scale \f$s_1\f$.
- * @param sj The scale \f$s_2\f$.
- * @param ires Which resonances to use
- * @return The mixed Breit-Wigner
- */
- Complex FKrho(Energy2 si,Energy2 sj,int ires) const {
- Complex output;
- if(ires<0){output = _rhoKstarwgt*BKstarF123(si,-1)+BrhoF123(sj,-1);}
- else if(ires%2==0){output= _rhoKstarwgt*BKstarF123(si,ires/2);}
- else if(ires%2==1){output=BrhoF123(sj,ires/2);}
- output /=(1.+_rhoKstarwgt);
- return output;
- }
-
- /**
- * \f$a_1\f$ Breit-Wigner
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @return The Breit-Wigner
- */
- Complex a1BreitWigner(Energy2 q2) const {
- if(!_a1opt)
- return Resonance::BreitWignera1(q2,_a1mass,_a1width);
- Complex ii(0.,1.);
- Energy2 m2(_a1mass*_a1mass);
- Energy q(sqrt(q2));
- Energy width = (*_a1runinter)(q2);
- return m2/(m2-q2-ii*q*width);
- }
-
- /**
- * The \f$K_1\f$ Breit-Wigner
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @return The Breit-Wigner
- */
- Complex K1BreitWigner(Energy2 q2) const {
- Energy2 m2 = sqr(_k1mass);
- Complex ii(0.,1.);
- complex<Energy2> fact(m2 - ii*_k1mass*_k1width);
- return fact/(fact-q2);
- }
-
- /**
- * Initialize the \f$a_1\f$ running width
- * @param iopt Initialization option (-1 full calculation, 0 set up the interpolation)
- */
- void inita1Width(int iopt);
-
- /**
- * Breit-Wigners for the \f$\rho\f$ and \f$K^*\f$.
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner.
- * @param itype The type of Breit-Wigner, \e i.e. which masses and widths to use.x
- * @param ires Which multiplet to use.
- */
- Complex rhoKBreitWigner(Energy2 q2,unsigned int itype,unsigned int ires) const;
-
-private:
-
- /**
- * Parameters for the \f$\rho\f$ Breit-Wigner in the
- * \f$F_{1,2,3}\f$ form factors.
- */
- vector<double> _rhoF123wgts;
-
- /**
- * Parameters for the \f$K^*\f$ Breit-Wigner in the
- * \f$F_{1,2,3}\f$ form factors.
- */
- vector<double> _kstarF123wgts;
-
- /**
- * Parameters for the \f$\rho\f$ Breit-Wigner in the
- * \f$F_5\f$ form factors.
- */
- vector<double> _rhoF5wgts;
-
- /**
- * Parameters for the \f$K^*\f$ Breit-Wigner in the
- * \f$F_5\f$ form factors.
- */
- vector<double> _kstarF5wgts;
-
- /**
- * The relative weight of the \f$\rho\f$ and \f$K^*\f$ where needed.
- */
- double _rhoKstarwgt;
-
- /**
- * The \f$a_1\f$ width for the running \f$a_1\f$ width calculation.
- */
- vector<Energy> _a1runwidth;
-
- /**
- * The \f$q^2\f$ for the running \f$a_1\f$ width calculation.
- */
- vector<Energy2> _a1runq2;
-
-
- /**
- * The interpolator for the running \f$a_1\f$ width calculation.
- */
- Interpolator<Energy,Energy2>::Ptr _a1runinter;
-
- /**
- * Initialize the running \f$a_1\f$ width.
- */
- bool _initializea1;
-
- /**
- * The mass of the \f$a_1\f$ resonances.
- */
- Energy _a1mass;
-
- /**
- * The width of the \f$a_1\f$ resonances.
- */
- Energy _a1width;
-
- /**
- * The mass of the \f$aK1\f$ resonances.
- */
- Energy _k1mass;
-
- /**
- * The width of the \f$K_1\f$ resonances.
- */
- Energy _k1width;
-
- /**
- * The pion decay constant, \f$f_\pi\f$.
- */
- Energy _fpi;
-
- /**
- * The pion mass
- */
- Energy _mpi;
-
- /**
- * The kaon mass
- */
- Energy _mK;
-
- /**
- * use local values of the \f$\rho\f$ masses and widths
- */
- bool _rhoparameters;
-
- /**
- * The \f$\rho\f$ masses for the \f$F_{1,2,3}\f$ form factors.
- */
- vector<Energy> _rhoF123masses;
-
- /**
- * The \f$\rho\f$ masses for the \f$F_5\f$ form factors.
- */
- vector<Energy> _rhoF5masses;
-
- /**
- * The \f$\rho\f$ widths for the \f$F_{1,2,3}\f$ form factors.
- */
- vector<Energy> _rhoF123widths;
-
- /**
- * The \f$\rho\f$ widths for the \f$F_5\f$ form factors.
- */
- vector<Energy> _rhoF5widths;
-
- /**
- * use local values of the \f$K^*\f$ resonances masses and widths
- */
- bool _kstarparameters;
-
- /**
- * The \f$K^*\f$ masses for the \f$F_{1,2,3}\f$ form factors.
- */
- vector<Energy> _kstarF123masses;
-
- /**
- * The \f$K^*\f$ masses for the \f$F_5\f$ form factors.
- */
- vector<Energy> _kstarF5masses;
-
- /**
- * The \f$K^*\f$ widths for the \f$F_{1,2,3}\f$ form factors.
- */
- vector<Energy> _kstarF123widths;
-
- /**
- * The \f$K^*\f$ widths for the \f$F_5\f$ form factors.
- */
- vector<Energy> _kstarF5widths;
-
- /**
- * Use local values of the \f$a_1\f$ parameters
- */
- bool _a1parameters;
-
- /**
- * Use local values of the \f$K_1\f$ parameters
- */
- bool _k1parameters;
-
- /**
- * Option for the \f$a_1\f$ width
- */
- bool _a1opt;
-
- /**
- * The maximum mass of the hadronic system
- */
- Energy _maxmass;
-
- /**
- * The maximum mass when the running width was calculated
- */
- Energy _maxcalc;
-
-};
-
-}
-
-#endif /* THEPEG_ThreeMesonDefaultCurrent_H */
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Jan 20, 9:32 PM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4242484
Default Alt Text
(141 KB)
Attached To
rHERWIGHG herwighg
Event Timeline
Log In to Comment