Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F7878397
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
85 KB
Subscribers
None
View Options
diff --git a/Decay/WeakCurrents/TwoKaonOnePionCurrent.cc b/Decay/WeakCurrents/TwoKaonOnePionCurrent.cc
--- a/Decay/WeakCurrents/TwoKaonOnePionCurrent.cc
+++ b/Decay/WeakCurrents/TwoKaonOnePionCurrent.cc
@@ -1,1646 +1,1161 @@
// -*- C++ -*-
//
// TwoKaonOnePionCurrent.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 TwoKaonOnePionCurrent class.
//
#include "TwoKaonOnePionCurrent.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"
#include "ThePEG/Helicity/epsilon.h"
using namespace Herwig;
DescribeClass<TwoKaonOnePionCurrent,WeakCurrent>
describeHerwigTwoKaonOnePionCurrent("Herwig::TwoKaonOnePionCurrent",
"HwWeakCurrents.so");
HERWIG_INTERPOLATOR_CLASSDESC(TwoKaonOnePionCurrent,Energy,Energy2)
IBPtr TwoKaonOnePionCurrent::clone() const {
return new_ptr(*this);
}
IBPtr TwoKaonOnePionCurrent::fullclone() const {
return new_ptr(*this);
}
TwoKaonOnePionCurrent::TwoKaonOnePionCurrent() {
// the quarks for the different modes
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);
+ setInitialModes(7);
// rho parameters
- // use local values
- _rhoparameters=true;
// rho parameters for axial-vector pieces
_rho1wgts.push_back( 1.0 ); _rho1wgts.push_back(-0.145);
_rho1wgts.push_back(0.);
_rho1mass.push_back(0.773*GeV);_rho1mass.push_back(1.370*GeV);
_rho1mass.push_back(1.750*GeV);
_rho1width.push_back(0.145*GeV);_rho1width.push_back(0.510*GeV);
_rho1width.push_back(0.120*GeV);
// rho parameters for vector pieces
_rho2wgts.push_back( 1.0 ); _rho2wgts.push_back(-0.25 );
_rho2wgts.push_back(-0.038);
_rho2mass.push_back(0.773*GeV);_rho2mass.push_back(1.500*GeV);
_rho2mass.push_back(1.750*GeV);
_rho2width.push_back(0.145*GeV);_rho2width.push_back(0.220*GeV);
_rho2width.push_back(0.120*GeV);
// K* parameters
- _kstarparameters=true;
// K* parameters for the axial-vector pieces
_kstar1wgts.push_back( 1.0 ); _kstar1wgts.push_back(-0.135);
_kstar1wgts.push_back(0.);
_kstar1mass.push_back(0.892*GeV);_kstar1mass.push_back(1.412*GeV);
_kstar1mass.push_back(1.714*GeV);
_kstar1width.push_back(0.050*GeV);_kstar1width.push_back(0.227*GeV);
_kstar1width.push_back(0.323*GeV);
// K* parameters for vector pieces
_kstar2wgts.push_back( 1.0 ); _kstar2wgts.push_back(-0.25 );
_kstar2wgts.push_back(-0.038);
_kstar2mass.push_back(0.892*GeV);_kstar2mass.push_back(1.412*GeV);
_kstar2mass.push_back(1.714*GeV);
_kstar2width.push_back(0.050*GeV);_kstar2width.push_back(0.227*GeV);
_kstar2width.push_back(0.323*GeV);
// a_1 parameters
- _a1parameters = true;
_initializea1 = false;
_a1opt = true;
_a1mass = 1.251*GeV;
_a1width = 0.475*GeV;
-
_a1runwidth = {0*GeV, 0*GeV, 0*GeV, 0*GeV, 0*GeV,
0*GeV, 0*GeV, 0*GeV, 0*GeV, 0*GeV,
0*GeV, 0*GeV, 1.47729e-06*GeV, 1.19209e-05*GeV, 3.884e-05*GeV,
8.83255e-05*GeV, 0.00016561*GeV, 0.000275439*GeV, 0.000422332*GeV,
0.000610773*GeV, 0.000845357*GeV, 0.00113092*GeV, 0.00147264*GeV,
0.00187616*GeV, 0.0023477*GeV, 0.00289413*GeV, 0.00352315*GeV,
0.00424342*GeV, 0.0050647*GeV, 0.00599808*GeV, 0.00705616*GeV,
0.00825335*GeV, 0.0096062*GeV, 0.0111337*GeV, 0.0128579*GeV,
0.0148041*GeV, 0.017002*GeV, 0.0194858*GeV, 0.0222956*GeV,
0.0254781*GeV, 0.0290874*GeV, 0.0331862*GeV, 0.0378467*GeV,
0.0431501*GeV, 0.0491862*GeV, 0.0560496*GeV, 0.0638341*GeV,
0.0726215*GeV, 0.0824662*GeV, 0.0933765*GeV, 0.105297*GeV,
0.118103*GeV, 0.131602*GeV, 0.145564*GeV, 0.159749*GeV,
0.173938*GeV, 0.18795*GeV, 0.201649*GeV, 0.214943*GeV,
0.227773*GeV, 0.240109*GeV, 0.25194*GeV, 0.263268*GeV,
0.274104*GeV, 0.284466*GeV, 0.294372*GeV, 0.303845*GeV,
0.312905*GeV, 0.321576*GeV, 0.329878*GeV, 0.337832*GeV,
0.345456*GeV, 0.35277*GeV, 0.35979*GeV, 0.366532*GeV,
0.373012*GeV, 0.379243*GeV, 0.38524*GeV, 0.391014*GeV,
0.396577*GeV, 0.401939*GeV, 0.407111*GeV, 0.412102*GeV,
0.416923*GeV, 0.421577*GeV, 0.426078*GeV, 0.430427*GeV,
0.434636*GeV, 0.43871*GeV, 0.442654*GeV, 0.446475*GeV,
0.450177*GeV, 0.453765*GeV, 0.457245*GeV, 0.460621*GeV,
0.463899*GeV, 0.467077*GeV, 0.470164*GeV, 0.473162*GeV,
0.476076*GeV, 0.478909*GeV, 0.481658*GeV, 0.484333*GeV,
0.486934*GeV, 0.489465*GeV, 0.491926*GeV, 0.494321*GeV,
0.496651*GeV, 0.49892*GeV, 0.501128*GeV, 0.503277*GeV,
0.505371*GeV, 0.507409*GeV, 0.509395*GeV, 0.511328*GeV,
0.513212*GeV, 0.515047*GeV, 0.516846*GeV, 0.518624*GeV,
0.520285*GeV, 0.52194*GeV, 0.523553*GeV, 0.525124*GeV,
0.526646*GeV, 0.52814*GeV, 0.529638*GeV, 0.531016*GeV,
0.532401*GeV, 0.533751*GeV, 0.535069*GeV, 0.536354*GeV,
0.537608*GeV, 0.538831*GeV, 0.540039*GeV, 0.541194*GeV,
0.542327*GeV, 0.543438*GeV, 0.544522*GeV, 0.545582*GeV,
0.546616*GeV, 0.54764*GeV, 0.548615*GeV, 0.549581*GeV,
0.550525*GeV, 0.551449*GeV, 0.552351*GeV, 0.55324*GeV,
0.554101*GeV, 0.554944*GeV, 0.555772*GeV, 0.556583*GeV,
0.557373*GeV, 0.558155*GeV, 0.558917*GeV, 0.559664*GeV,
0.560396*GeV, 0.561114*GeV, 0.561849*GeV, 0.562508*GeV,
0.563186*GeV, 0.563851*GeV, 0.564503*GeV, 0.565145*GeV,
0.565774*GeV, 0.566394*GeV, 0.567001*GeV, 0.567595*GeV,
0.568182*GeV, 0.56876*GeV, 0.56933*GeV, 0.569886*GeV,
0.570433*GeV, 0.570976*GeV, 0.571504*GeV, 0.572027*GeV,
0.572542*GeV, 0.573114*GeV, 0.573548*GeV, 0.574108*GeV,
0.574524*GeV, 0.575002*GeV, 0.575473*GeV, 0.575937*GeV,
0.576394*GeV, 0.576845*GeV, 0.57729*GeV, 0.57773*GeV,
0.578173*GeV, 0.5786*GeV, 0.579013*GeV, 0.579431*GeV,
0.579834*GeV, 0.580246*GeV, 0.580649*GeV, 0.581045*GeV,
0.581437*GeV, 0.581827*GeV, 0.582208*GeV, 0.582586*GeV, 0.582959*GeV};
_a1runq2 = { 0*GeV2 , 0.0158678*GeV2, 0.0317356*GeV2, 0.0476034*GeV2, 0.0634712*GeV2,
0.079339*GeV2, 0.0952068*GeV2, 0.111075*GeV2, 0.126942*GeV2, 0.14281*GeV2,
0.158678*GeV2, 0.174546*GeV2, 0.190414*GeV2, 0.206281*GeV2, 0.222149*GeV2,
0.238017*GeV2, 0.253885*GeV2, 0.269753*GeV2, 0.285621*GeV2, 0.301488*GeV2,
0.317356*GeV2, 0.333224*GeV2, 0.349092*GeV2, 0.36496*GeV2, 0.380827*GeV2,
0.396695*GeV2, 0.412563*GeV2, 0.428431*GeV2, 0.444299*GeV2, 0.460166*GeV2,
0.476034*GeV2, 0.491902*GeV2, 0.50777*GeV2, 0.523638*GeV2, 0.539505*GeV2,
0.555373*GeV2, 0.571241*GeV2, 0.587109*GeV2, 0.602977*GeV2, 0.618844*GeV2,
0.634712*GeV2, 0.65058*GeV2, 0.666448*GeV2, 0.682316*GeV2, 0.698183*GeV2,
0.714051*GeV2, 0.729919*GeV2, 0.745787*GeV2, 0.761655*GeV2, 0.777523*GeV2,
0.79339*GeV2, 0.809258*GeV2, 0.825126*GeV2, 0.840994*GeV2, 0.856862*GeV2,
0.872729*GeV2, 0.888597*GeV2, 0.904465*GeV2, 0.920333*GeV2, 0.936201*GeV2,
0.952068*GeV2, 0.967936*GeV2, 0.983804*GeV2, 0.999672*GeV2, 1.01554*GeV2,
1.03141*GeV2, 1.04728*GeV2, 1.06314*GeV2, 1.07901*GeV2, 1.09488*GeV2,
1.11075*GeV2, 1.12661*GeV2, 1.14248*GeV2, 1.15835*GeV2, 1.17422*GeV2,
1.19009*GeV2, 1.20595*GeV2, 1.22182*GeV2, 1.23769*GeV2, 1.25356*GeV2,
1.26942*GeV2, 1.28529*GeV2, 1.30116*GeV2, 1.31703*GeV2, 1.3329*GeV2,
1.34876*GeV2, 1.36463*GeV2, 1.3805*GeV2, 1.39637*GeV2, 1.41223*GeV2,
1.4281*GeV2, 1.44397*GeV2, 1.45984*GeV2, 1.47571*GeV2, 1.49157*GeV2,
1.50744*GeV2, 1.52331*GeV2, 1.53918*GeV2, 1.55505*GeV2, 1.57091*GeV2,
1.58678*GeV2, 1.60265*GeV2, 1.61852*GeV2, 1.63438*GeV2, 1.65025*GeV2,
1.66612*GeV2, 1.68199*GeV2, 1.69786*GeV2, 1.71372*GeV2, 1.72959*GeV2,
1.74546*GeV2, 1.76133*GeV2, 1.77719*GeV2, 1.79306*GeV2, 1.80893*GeV2,
1.8248*GeV2, 1.84067*GeV2, 1.85653*GeV2, 1.8724*GeV2, 1.88827*GeV2,
1.90414*GeV2, 1.92*GeV2, 1.93587*GeV2, 1.95174*GeV2, 1.96761*GeV2,
1.98348*GeV2, 1.99934*GeV2, 2.01521*GeV2, 2.03108*GeV2, 2.04695*GeV2,
2.06281*GeV2, 2.07868*GeV2, 2.09455*GeV2, 2.11042*GeV2, 2.12629*GeV2,
2.14215*GeV2, 2.15802*GeV2, 2.17389*GeV2, 2.18976*GeV2, 2.20563*GeV2,
2.22149*GeV2, 2.23736*GeV2, 2.25323*GeV2, 2.2691*GeV2, 2.28496*GeV2,
2.30083*GeV2, 2.3167*GeV2, 2.33257*GeV2, 2.34844*GeV2, 2.3643*GeV2,
2.38017*GeV2, 2.39604*GeV2, 2.41191*GeV2, 2.42777*GeV2, 2.44364*GeV2,
2.45951*GeV2, 2.47538*GeV2, 2.49125*GeV2, 2.50711*GeV2, 2.52298*GeV2,
2.53885*GeV2, 2.55472*GeV2, 2.57058*GeV2, 2.58645*GeV2, 2.60232*GeV2,
2.61819*GeV2, 2.63406*GeV2, 2.64992*GeV2, 2.66579*GeV2, 2.68166*GeV2,
2.69753*GeV2, 2.71339*GeV2, 2.72926*GeV2, 2.74513*GeV2, 2.761*GeV2,
2.77687*GeV2, 2.79273*GeV2, 2.8086*GeV2, 2.82447*GeV2, 2.84034*GeV2,
2.85621*GeV2, 2.87207*GeV2, 2.88794*GeV2, 2.90381*GeV2, 2.91968*GeV2,
2.93554*GeV2, 2.95141*GeV2, 2.96728*GeV2, 2.98315*GeV2, 2.99902*GeV2,
3.01488*GeV2, 3.03075*GeV2, 3.04662*GeV2, 3.06249*GeV2, 3.07835*GeV2,
3.09422*GeV2, 3.11009*GeV2, 3.12596*GeV2, 3.14183*GeV2, 3.15769*GeV2};
- // K_1 parameters
- _k1parameters=true;
- _k1mass.push_back(1.270*GeV);_k1width.push_back(0.090*GeV);
- _k1mass.push_back(1.402*GeV);_k1width.push_back(0.174*GeV);
- _k1wgta.push_back(0.33);_k1wgta.push_back(1.);
- _k1wgtb.push_back(1.00);_k1wgtb.push_back(0.);
// parameters for the T_omega function
- _omegaopt=true;
_epsomega=0.05;
_omegamass = 0.782*GeV;
_omegawidth = 0.00843*GeV;
_phimass = 1.020*GeV;
_phiwidth = 0.00443*GeV;
_omegaKstarwgt=1./sqrt(2.);
// the pion decay constant
_fpi=130.7*MeV/sqrt(2.);
- _mpi=ZERO;_mK=ZERO;
+ _mpi=ZERO;
+ _mK=ZERO;
_maxmass=ZERO;
_maxcalc=ZERO;
}
void TwoKaonOnePionCurrent::persistentOutput(PersistentOStream & os) const {
os << _a1runinter
<< _rho1wgts << ounit(_rho1mass,GeV) << ounit(_rho1width,GeV)
<< _rho2wgts << ounit(_rho2mass,GeV) << ounit(_rho2width,GeV)
<< _kstar1wgts << ounit(_kstar1mass,GeV) << ounit(_kstar1width,GeV)
<< _kstar2wgts << ounit(_kstar2mass,GeV) << ounit(_kstar2width,GeV)
- << ounit(_a1mass,GeV) << ounit(_a1width,GeV) << ounit(_k1mass,GeV)
- << ounit(_k1width,GeV) << _k1wgta << _k1wgtb
+ << ounit(_a1mass,GeV) << ounit(_a1width,GeV)
<< ounit(_a1runwidth,GeV) << ounit(_a1runq2,GeV2) << _epsomega
<< ounit(_omegamass,GeV) << ounit(_omegawidth,GeV)
<< ounit(_phimass,GeV) << ounit(_phiwidth,GeV) << _omegaKstarwgt
<< ounit(_fpi,GeV) << ounit(_mpi,GeV) << ounit(_mK,GeV)
- << _initializea1 << _rhoparameters << _kstarparameters << _a1parameters
- << _k1parameters << _a1opt << _omegaopt
+ << _initializea1 << _a1opt
<< ounit(_maxmass,GeV) << ounit(_maxcalc,GeV);
}
void TwoKaonOnePionCurrent::persistentInput(PersistentIStream & is, int) {
is >> _a1runinter
>> _rho1wgts >> iunit(_rho1mass,GeV) >> iunit(_rho1width,GeV)
>> _rho2wgts >> iunit(_rho2mass,GeV) >> iunit(_rho2width,GeV)
>> _kstar1wgts >> iunit(_kstar1mass,GeV) >> iunit(_kstar1width,GeV)
>> _kstar2wgts >> iunit(_kstar2mass,GeV) >> iunit(_kstar2width,GeV)
- >> iunit(_a1mass,GeV) >> iunit(_a1width,GeV) >> iunit(_k1mass,GeV)
- >> iunit(_k1width,GeV) >> _k1wgta >> _k1wgtb
+ >> iunit(_a1mass,GeV) >> iunit(_a1width,GeV)
>> iunit(_a1runwidth,GeV) >> iunit(_a1runq2,GeV2) >> _epsomega
>> iunit(_omegamass,GeV) >> iunit(_omegawidth,GeV)
>> iunit(_phimass,GeV) >> iunit(_phiwidth,GeV) >> _omegaKstarwgt
>> iunit(_fpi,GeV) >> iunit(_mpi,GeV) >> iunit(_mK,GeV)
- >> _initializea1 >> _rhoparameters >> _kstarparameters >> _a1parameters
- >> _k1parameters >> _a1opt >> _omegaopt
+ >> _initializea1 >> _a1opt
>> iunit(_maxmass,GeV) >> iunit(_maxcalc,GeV);
}
void TwoKaonOnePionCurrent::Init() {
static ClassDocumentation<TwoKaonOnePionCurrent> documentation
("The TwoKaonOnePionCurrent class implements the model of "
"Z. Phys. C 69 (1996) 243 [arXiv:hep-ph/9503474]"
" for the weak current with three "
"mesons, at least one of which is a kaon",
"The TwoKaonOnePionCurrent class implements the model of "
"\\cite{Finkemeier:1995sr} for the weak current with three "
"mesons, at least one of which is a kaon.",
"\\bibitem{Finkemeier:1995sr}\n"
"M.~Finkemeier and E.~Mirkes,\n"
"Z.\\ Phys.\\ C {\\bf 69} (1996) 243 [arXiv:hep-ph/9503474].\n"
" %%CITATION = ZEPYA,C69,243;%%\n"
);
static Switch<TwoKaonOnePionCurrent,bool> interfaceInitializea1
("Initializea1",
"Initialise the calculation of the a_1 running width",
&TwoKaonOnePionCurrent::_initializea1, false, false, false);
static SwitchOption interfaceInitializea1Initialization
(interfaceInitializea1,
"Yes",
"Initialize the calculation",
true);
static SwitchOption interfaceInitializea1NoInitialization
(interfaceInitializea1,
"No",
"Use the default values",
false);
static Parameter<TwoKaonOnePionCurrent,Energy> interfaceA1Width
("A1Width",
"The a_1 width if using local values.",
&TwoKaonOnePionCurrent::_a1width, GeV, 0.599*GeV, ZERO, 10.0*GeV,
false, false, false);
static Parameter<TwoKaonOnePionCurrent,Energy> interfaceA1Mass
("A1Mass",
"The a_1 mass if using local values.",
&TwoKaonOnePionCurrent::_a1mass, GeV, 1.251*GeV, ZERO, 10.0*GeV,
false, false, false);
static Parameter<TwoKaonOnePionCurrent,Energy> interfaceFPi
("FPi",
"The pion decay constant",
&TwoKaonOnePionCurrent::_fpi, MeV, 92.4*MeV, ZERO, 200.0*MeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceRhoAxialMasses
("RhoAxialMasses",
"The masses for the rho resonances if used local values",
&TwoKaonOnePionCurrent::_rho1mass, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceRhoAxialWidths
("RhoAxialWidths",
"The widths for the rho resonances if used local values",
&TwoKaonOnePionCurrent::_rho1width, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceRhoVectorMasses
("RhoVectorMasses",
"The masses for the rho resonances if used local values",
&TwoKaonOnePionCurrent::_rho2mass, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceRhoVectorWidths
("RhoVectorWidths",
"The widths for the rho resonances if used local values",
&TwoKaonOnePionCurrent::_rho2width, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceKstarAxialMasses
("KstarAxialMasses",
"The masses for the Kstar resonances if used local values",
&TwoKaonOnePionCurrent::_kstar1mass, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceKstarAxialWidths
("KstarAxialWidths",
"The widths for the Kstar resonances if used local values",
&TwoKaonOnePionCurrent::_kstar1width, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceKstarVectorMasses
("KstarVectorMasses",
"The masses for the Kstar resonances if used local values",
&TwoKaonOnePionCurrent::_kstar2mass, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy> interfaceKstarVectorWidths
("KstarVectorWidths",
"The widths for the Kstar resonances if used local values",
&TwoKaonOnePionCurrent::_kstar2width, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,double> interfaceAxialRhoWeight
("AxialRhoWeight",
"The weights of the different rho resonances in the F1,2,3 form factor",
&TwoKaonOnePionCurrent::_rho1wgts,
0, 0, 0, -1000, 1000, false, false, true);
static ParVector<TwoKaonOnePionCurrent,double> interfaceAxialKStarWeight
("AxialKStarWeight",
"The weights of the different Kstar resonances in the F1,2,3 form factor",
&TwoKaonOnePionCurrent::_kstar1wgts,
0, 0, 0, -1000, 1000, false, false, true);
static ParVector<TwoKaonOnePionCurrent,double> interfaceVectorRhoWeight
("VectorRhoWeight",
"The weights of the different rho resonances in the F1,2,3 form factor",
&TwoKaonOnePionCurrent::_rho2wgts,
0, 0, 0, -1000, 1000, false, false, true);
static ParVector<TwoKaonOnePionCurrent,double> interfaceVectorKStarWeight
("VectorKStarWeight",
"The weights of the different Kstar resonances in the F1,2,3 form factor",
&TwoKaonOnePionCurrent::_kstar2wgts,
0, 0, 0, -1000, 1000, false, false, true);
- static Switch<TwoKaonOnePionCurrent,bool> interfaceRhoParameters
- ("RhoParameters",
- "Use local values of the rho meson masses and widths",
- &TwoKaonOnePionCurrent::_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 widths from the particle data objects",
- false);
-
- static Switch<TwoKaonOnePionCurrent,bool> interfaceKstarParameters
- ("KstarParameters",
- "Use local values of the rho meson masses and widths",
- &TwoKaonOnePionCurrent::_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 widths from the particle data objects",
- false);
-
- static Switch<TwoKaonOnePionCurrent,bool> interfacea1Parameters
- ("a1Parameters",
- "Use local values of the rho meson masses and widths",
- &TwoKaonOnePionCurrent::_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 widths from the particle data objects",
- false);
-
- static Switch<TwoKaonOnePionCurrent,bool> interfaceK1Parameters
- ("K1Parameters",
- "Use local values of the rho meson masses and widths",
- &TwoKaonOnePionCurrent::_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 widths from the particle data objects",
- false);
-
static Switch<TwoKaonOnePionCurrent,bool> interfacea1WidthOption
("a1WidthOption",
"Option for the treatment of the a1 width",
&TwoKaonOnePionCurrent::_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<TwoKaonOnePionCurrent,Energy> interfacea1RunningWidth
("a1RunningWidth",
"The values of the a_1 width for interpolation to giving the running width.",
&TwoKaonOnePionCurrent::_a1runwidth, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
false, false, true);
static ParVector<TwoKaonOnePionCurrent,Energy2> interfacea1RunningQ2
("a1RunningQ2",
"The values of the q^2 for interpolation to giving the running width.",
&TwoKaonOnePionCurrent::_a1runq2, GeV2, -1, 1.0*GeV2, ZERO, 10.0*GeV2,
false, false, true);
- static ParVector<TwoKaonOnePionCurrent,Energy> interfaceK1Masses
- ("K1Masses",
- "Masses of the K_1 mesons",
- &TwoKaonOnePionCurrent::_k1mass, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, Interface::limited);
-
- static ParVector<TwoKaonOnePionCurrent,Energy> interfaceK1Widths
- ("K1Widths",
- "Widths of the K_1 mesons",
- &TwoKaonOnePionCurrent::_k1width, GeV, -1, 1.0*GeV, ZERO, 10.0*GeV,
- false, false, Interface::limited);
-
- static ParVector<TwoKaonOnePionCurrent,double> interfaceK1WeightKStarPi
- ("K1WeightKStarPi",
- "The relative weights for the K_1 resonances in the K* pi final-state",
- &TwoKaonOnePionCurrent::_k1wgta, -1, 1.0, 0, 10.0,
- false, false, Interface::limited);
-
- static ParVector<TwoKaonOnePionCurrent,double> interfaceK1WeightRhoK
- ("K1WeightRhoK",
- "The relative weights for the K_1 resonances in the rho K final-state",
- &TwoKaonOnePionCurrent::_k1wgtb, -1, 1.0, 0, 10.0,
- false, false, Interface::limited);
-
static Parameter<TwoKaonOnePionCurrent,double> interfaceEpsOmega
("EpsOmega",
"The omega-phi mixing ",
&TwoKaonOnePionCurrent::_epsomega, 0.05, 0.0, 1.0,
false, false, Interface::limited);
static Parameter<TwoKaonOnePionCurrent,Energy> interfaceOmegaMass
("OmegaMass",
"The mass of the omega meson",
&TwoKaonOnePionCurrent::_omegamass, GeV, 0.782*GeV, ZERO, 10.0*GeV,
false, false, Interface::limited);
static Parameter<TwoKaonOnePionCurrent,Energy> interfaceOmegaWidth
("OmegaWidth",
"The width of the omega meson",
&TwoKaonOnePionCurrent::_omegawidth, GeV, 0.00843*GeV, ZERO, 10.0*GeV,
false, false, Interface::limited);
static Parameter<TwoKaonOnePionCurrent,Energy> interfacePhiMass
("PhiMass",
"The mass of the phi meson",
&TwoKaonOnePionCurrent::_phimass, GeV, 1.020*GeV, ZERO, 10.0*GeV,
false, false, Interface::limited);
static Parameter<TwoKaonOnePionCurrent,Energy> interfacePhiWidth
("PhiWidth",
"The width of the phi meson",
&TwoKaonOnePionCurrent::_phiwidth, GeV, 0.00443*GeV, ZERO, 10.0*GeV,
false, false, Interface::limited);
static Parameter<TwoKaonOnePionCurrent,double> interfaceOmegaKStarWeight
("OmegaKStarWeight",
"The relative weight of the omega-phi and K* terms",
&TwoKaonOnePionCurrent::_omegaKstarwgt, 1./sqrt(2.), 0.0, 100.0,
false, false, Interface::limited);
-
- static Switch<TwoKaonOnePionCurrent,bool> interfaceOmegaParameters
- ("OmegaParameters",
- "Use local values of the omega/phi meson masses and widths",
- &TwoKaonOnePionCurrent::_omegaopt, true, false, false);
- static SwitchOption interfaceOmegaParameterstrue
- (interfaceOmegaParameters,
- "Local",
- "Use local values of the parameters",
- true);
- static SwitchOption interfaceOmegaParametersParticleData
- (interfaceOmegaParameters,
- "ParticleData",
- "Use the masses and widths from the particle data objects",
- false);
}
void TwoKaonOnePionCurrent::inita1Width(int iopt) {
if(iopt==-1) {
_maxcalc=_maxmass;
if(!_initializea1||_maxmass==ZERO) return;
// parameters for the table of values
Energy2 step(sqr(_maxmass)/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<TwoKaonOnePionCurrent>
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(_maxmass); 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);
}
}
-
-// modes handled by this class
-bool TwoKaonOnePionCurrent::acceptMode(int imode) const {
- return imode>=2&&imode<=11&&imode!=8;
-}
-
-
// complete the construction of the decay mode for integration
bool TwoKaonOnePionCurrent::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 ) {
if(abs(icharge)!=3) return false;
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 = getParticleData(ParticleID::a_1minus);
tPDPtr k1[2] = {getParticleData(ParticleID::K_1minus),
getParticleData(ParticleID::Kstar_1minus)};
_maxmass=max(_maxmass,upp);
// the rho0 resonances
tPDPtr rho0[3] ={getParticleData( 113),getParticleData( 100113),
getParticleData( 30113)};
// the charged rho resonances
tPDPtr rhoc[3] ={getParticleData(-213),getParticleData(-100213),
getParticleData(-30213)};
// the K*0 resonances
tPDPtr Kstar0[3]={getParticleData( 313),getParticleData( 100313),
getParticleData( 30313)};
// the charged K* resonances
tPDPtr Kstarc[3]={getParticleData(-323),getParticleData(-100323),
getParticleData(-30323)};
if(icharge==3) {
a1 = a1->CC();
k1[0] = k1[0]->CC();
k1[1] = k1[1]->CC();
for(unsigned int ix=0;ix<3;++ix) {
if(rhoc[ix]) rhoc[ix]=rhoc[ix]->CC();
if(Kstar0[ix]) Kstar0[ix]=Kstar0[ix]->CC();
if(Kstarc[ix]) Kstarc[ix]=Kstarc[ix]->CC();
}
}
- if(imode==2) {
+ if(imode==0) {
// channels for K- pi- K+
for(unsigned int ix=0;ix<3;++ix) {
if(Kstar0[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstar0[ix],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
}
if(rho0[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,rho0[ix],ires+1,iloc+2,
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,Kstar0[iy],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
}
}
}
}
- else if(imode==3) {
+ else if(imode==1) {
// channels for K0 pi- K0bar
for(unsigned int ix=0;ix<3;++ix) {
if(Kstarc[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstarc[ix],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
}
if(rho0[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,rho0[ix],ires+1,iloc+2,
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,Kstarc[iy],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
}
}
}
}
- else if(imode==4) {
+ else if(imode==2) {
// channels for K- pi0 K0
for(unsigned int ix=0;ix<3;++ix) {
if(Kstar0[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstar0[ix],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
}
if(Kstarc[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstarc[ix],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
if(rhoc[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,rhoc[ix],ires+1,iloc+2,
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,Kstar0[iy],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
}
if(Kstarc[iy]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,Kstarc[iy],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
}
}
}
- else if(imode==5) {
- // channels for pi0 pi0 K-
- for(unsigned int ix=0;ix<3;++ix) {
- if(!Kstarc[ix]) continue;
- for(unsigned int ik=0;ik<2;++ik) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,Kstarc[ix],ires+1,iloc+1,
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,Kstarc[ix],ires+1,iloc+2,
- ires+2,iloc+1,ires+2,iloc+3));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!Kstarc[iy]) continue;
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,Kstarc[iy],ires+1,iloc+1,
- ires+2,iloc+2,ires+2,iloc+3));
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,Kstarc[iy],ires+1,iloc+2,
- 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) {
- for(unsigned int ik=0;ik<2;++ik) {
- if(rho0[ix])
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,rho0[ix],ires+1,iloc+1,
- ires+2,iloc+2,ires+2,iloc+3));
- if(Kstar0[ix])
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,Kstar0[ix],ires+1,iloc+2,
- 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,rho0[ix],ires+1,iloc+1,
- ires+2,iloc+2,ires+2,iloc+3));
- }
- if(Kstar0[iy]) {
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,Kstar0[ix],ires+1,iloc+2,
- 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) {
- for(unsigned int ik=0;ik<2;++ik) {
- if(rhoc[ix])
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,rhoc[ix],ires+1,iloc+2,
- ires+2,iloc+1,ires+2,iloc+3));
- if(Kstar0[ix])
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,Kstar0[ix],ires+1,iloc+1,
- ires+2,iloc+2,ires+2,iloc+3));
- if(Kstarc[ix])
- mode->addChannel((PhaseSpaceChannel(phase),ires,k1[ik],ires+1,Kstarc[ix],ires+1,iloc+3,
- ires+2,iloc+1,ires+2,iloc+2));
- }
- for(unsigned int iy=0;iy<3;++iy) {
- if(!Kstarc[ix]) continue;
- if(Kstar0[iy])
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,Kstar0[iy],ires+1,iloc+1,
- ires+2,iloc+2,ires+2,iloc+3));
- if(rhoc[iy])
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1, rhoc[iy],ires+1,iloc+2,
- ires+2,iloc+1,ires+2,iloc+3));
- if(Kstarc[iy])
- mode->addChannel((PhaseSpaceChannel(phase),ires,Kstarc[ix],ires+1,Kstarc[iy],ires+1,iloc+3,
- ires+2,iloc+1,ires+2,iloc+2));
- }
- }
- }
- else if(imode==9||imode==10) {
+ else if(imode==3||imode==4) {
// channels for K_S0 pi- K_S0 and K_L0 pi- K_L0
for(unsigned int ix=0;ix<3;++ix) {
if(Kstarc[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstarc[ix],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstarc[ix],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
for(unsigned int iy=0;iy<3;++iy) {
if(!rhoc[ix]) continue;
if(Kstarc[iy]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,Kstarc[iy],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,Kstarc[iy],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
}
}
}
- else if(imode==11) {
+ else if(imode==5) {
// channels for K_S0 pi- K_L0
for(unsigned int ix=0;ix<3;++ix) {
if(Kstarc[ix]) {
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstarc[ix],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,Kstarc[ix],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
if(rho0[ix])
mode->addChannel((PhaseSpaceChannel(phase),ires,a1,ires+1,rho0[ix],ires+1,iloc+2,
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,Kstarc[ix],ires+1,iloc+1,
ires+2,iloc+2,ires+2,iloc+3));
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoc[ix],ires+1,Kstarc[ix],ires+1,iloc+3,
ires+2,iloc+1,ires+2,iloc+2));
}
}
}
}
- if(_rhoparameters) {
- for(unsigned int ix=0;ix<_rho1mass.size();++ix) {
- if(rhoc[ix]) mode->resetIntermediate(rhoc[ix],_rho1mass[ix],
- _rho1width[ix]);
- if(rho0[ix]) mode->resetIntermediate(rho0[ix],_rho1mass[ix],
- _rho1width[ix]);
- }
+ for(unsigned int ix=0;ix<_rho1mass.size();++ix) {
+ mode->resetIntermediate(rhoc[ix],_rho1mass[ix],
+ _rho1width[ix]);
+ mode->resetIntermediate(rho0[ix],_rho1mass[ix],
+ _rho1width[ix]);
}
// K star parameters in the base class
- if(_kstarparameters) {
- for(unsigned int ix=0;ix<_kstar1mass.size();++ix) {
- if(Kstarc[ix]) mode->resetIntermediate(Kstarc[ix],_kstar1mass[ix],
- _kstar1width[ix]);
- if(Kstar0[ix]) mode->resetIntermediate(Kstar0[ix],_kstar1mass[ix],
- _kstar1width[ix]);
- }
+ for(unsigned int ix=0;ix<_kstar1mass.size();++ix) {
+ mode->resetIntermediate(Kstarc[ix],_kstar1mass[ix],
+ _kstar1width[ix]);
+ mode->resetIntermediate(Kstar0[ix],_kstar1mass[ix],
+ _kstar1width[ix]);
}
return true;
}
void TwoKaonOnePionCurrent::dataBaseOutput(ofstream & os,
bool header,bool create) const {
if(header) os << "update decayers set parameters=\"";
if(create) os << "create Herwig::TwoKaonOnePionCurrent "
<< name() << " HwWeakCurrents.so\n";
for(unsigned int ix=0;ix<_rho1wgts.size();++ix) {
if(ix<3) {
os << "newdef " << name() << ":AxialRhoWeight " << ix
<< " " << _rho1wgts[ix] << "\n";
}
else {
os << "insert " << name() << ":AxialRhoWeight " << ix
<< " " << _rho1wgts[ix] << "\n";
}
}
for(unsigned int ix=0;ix<_kstar1wgts.size();++ix) {
if(ix<3) {
os << "newdef " << name() << ":AxialKStarWeight " << ix
<< " " << _kstar1wgts[ix] << "\n";}
else {
os << "insert " << name() << ":AxialKStarWeight " << ix
<< " " << _kstar1wgts[ix] << "\n";
}
}
for(unsigned int ix=0;ix<_rho2wgts.size();++ix) {
if(ix<3) {
os << "newdef " << name() << ":VectorRhoWeight " << ix
<< " " << _rho2wgts[ix] << "\n";
}
else {
os << "insert " << name() << ":VectorRhoWeight " << ix
<< " " << _rho2wgts[ix] << "\n";
}
}
for(unsigned int ix=0;ix<_kstar2wgts.size();++ix) {
if(ix<3) {
os << "newdef " << name() << ":VectorKStarWeight " << ix
<< " " << _kstar2wgts[ix] << "\n";}
else {
os << "insert " << name() << ":VectorKStarWeight " << ix
<< " " << _kstar2wgts[ix] << "\n";
}
}
os << "newdef " << name() << ":OmegaKStarWeight " << _omegaKstarwgt << "\n";
os << "newdef " << name() << ":EpsOmega " << _epsomega << "\n";
os << "newdef " << name() << ":Initializea1 " << _initializea1 << "\n";
- os << "newdef " << name() << ":RhoParameters " << _rhoparameters << "\n";
- os << "newdef " << name() << ":KstarParameters " << _kstarparameters << "\n";
- os << "newdef " << name() << ":a1Parameters " << _a1parameters << "\n";
- os << "newdef " << name() << ":K1Parameters " << _k1parameters << "\n";
- os << "newdef " << name() << ":OmegaParameters " << _omegaopt << "\n";
os << "newdef " << name() << ":a1WidthOption " << _a1opt << "\n";
for(unsigned int ix=0;ix<_a1runwidth.size();++ix) {
os << "newdef " << name() << ":a1RunningWidth " << ix
<< " " << _a1runwidth[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_a1runq2.size();++ix) {
os << "newdef " << name() << ":a1RunningQ2 " << ix
<< " " << _a1runq2[ix]/GeV2 << "\n";
}
os << "newdef " << name() << ":A1Width " << _a1width/GeV << "\n";
os << "newdef " << name() << ":A1Mass " << _a1mass/GeV << "\n";
os << "newdef " << name() << ":OmegaWidth " << _omegawidth/GeV << "\n";
os << "newdef " << name() << ":OmegaMass " << _omegamass/GeV << "\n";
os << "newdef " << name() << ":PhiWidth " << _phiwidth/GeV << "\n";
os << "newdef " << name() << ":PhiMass " << _phimass/GeV << "\n";
os << "newdef " << name() << ":FPi " << _fpi/MeV << "\n";
- for(unsigned int ix=0;ix<_k1mass.size();++ix) {
- if(ix<2) {
- os << "newdef " << name() << ":K1Masses " << ix
- << " " << _k1mass[ix]/GeV << "\n";
- }
- else {
- os << "insert " << name() << ":K1Masses " << ix
- << " " << _k1mass[ix]/GeV << "\n";
- }
- }
- for(unsigned int ix=0;ix<_k1width.size();++ix) {
- if(ix<2) {
- os << "newdef " << name() << ":K1Widths " << ix
- << " " << _k1width[ix]/GeV << "\n";
- }
- else {
- os << "insert " << name() << ":K1Widths " << ix
- << " " << _k1width[ix]/GeV << "\n";
- }
- }
for(unsigned int ix=0;ix<_rho1mass.size();++ix) {
if(ix<3) os << "newdef " << name() << ":RhoAxialMasses " << ix
<< " " << _rho1mass[ix]/GeV << "\n";
else os << "insert " << name() << ": RhoAxialMasses" << ix
<< " " << _rho1mass[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_rho1width.size();++ix) {
if(ix<3) os << "newdef " << name() << ":RhoAxialWidths " << ix
<< " " << _rho1width[ix]/GeV << "\n";
else os << "insert " << name() << ":RhoAxialWidths " << ix
<< " " << _rho1width[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_rho2mass.size();++ix) {
if(ix<3) os << "newdef " << name() << ":RhoVectorMasses " << ix
<< " " << _rho2mass[ix]/GeV << "\n";
else os << "insert " << name() << ": RhoVectorMasses" << ix
<< " " << _rho2mass[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_rho2width.size();++ix) {
if(ix<3) os << "newdef " << name() << ":RhoVectorWidths " << ix
<< " " << _rho2width[ix]/GeV << "\n";
else os << "insert " << name() << ":RhoVectorWidths " << ix
<< " " << _rho2width[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_kstar1mass.size();++ix) {
if(ix<3) os << "newdef " << name() << ":KstarAxialMasses " << ix
<< " " << _kstar1mass[ix]/GeV << "\n";
else os << "insert " << name() << ": KstarAxialMasses" << ix
<< " " << _kstar1mass[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_kstar1width.size();++ix) {
if(ix<3) os << "newdef " << name() << ":KstarAxialWidths " << ix
<< " " << _kstar1width[ix]/GeV << "\n";
else os << "insert " << name() << ":KstarAxialWidths " << ix
<< " " << _kstar1width[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_kstar2mass.size();++ix) {
if(ix<3) os << "newdef " << name() << ":KstarVectorMasses " << ix
<< " " << _kstar2mass[ix]/GeV << "\n";
else os << "insert " << name() << ": KstarVectorMasses" << ix
<< " " << _kstar2mass[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<_kstar2width.size();++ix) {
if(ix<3) os << "newdef " << name() << ":KstarVectorWidths " << ix
<< " " << _kstar2width[ix]/GeV << "\n";
else os << "insert " << name() << ":KstarVectorWidths " << ix
<< " " << _kstar2width[ix]/GeV << "\n";
}
- for(unsigned int ix=0;ix<_k1wgta.size();++ix) {
- if(ix<2) os << "newdef " << name() << ":K1WeightKStarPi " << ix
- << " " << _k1wgta[ix] << "\n";
- else os << "insert " << name() << ":K1WeightKStarPi " << ix
- << " " << _k1wgta[ix] << "\n";
- }
- for(unsigned int ix=0;ix<_k1wgtb.size();++ix) {
- if(ix<2) os << "newdef " << name() << ":K1WeightRhoK " << ix
- << " " << _k1wgtb[ix] << "\n";
- else os << "insert " << name() << ":K1WeightRhoK " << ix
- << " " << _k1wgtb[ix] << "\n";
- }
WeakCurrent::dataBaseOutput(os,false,false);
if(header) os << "\n\" where BINARY ThePEGName=\""
<< fullName() << "\";" << endl;
}
void TwoKaonOnePionCurrent::doinit() {
WeakCurrent::doinit();
- // the particles we will use a lot
- tPDPtr a1(getParticleData(ParticleID::a_1minus)),
- pi0(getParticleData(ParticleID::pi0)),
- piplus(getParticleData(ParticleID::piplus)),
- piminus(getParticleData(ParticleID::piminus));
- tPDPtr k1[2]={getParticleData(ParticleID::K_1minus),
- getParticleData(ParticleID::Kstar_1minus)};
// masses for the running widths
- _mpi=piplus->mass();
- _mK=getParticleData(ParticleID::K0)->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) {
- for(unsigned int ix=0;ix<2;++ix) {
- _k1mass[ix] = k1[ix]->mass();
- _k1width[ix] = k1[ix]->width();
- }
- }
+ _mpi = getParticleData(ParticleID::piplus)->mass();
+ _mK = getParticleData(ParticleID::K0) ->mass();
// initialise the a_1 running width calculation
inita1Width(-1);
- // rho parameters in the base classs
- tcPDPtr temp;
- unsigned int ix;
- if(_rhoparameters&&_rho1mass.size()<3) {
- ix = _rho1mass.size();
- _rho1mass.resize(3);
- _rho1width.resize(3);
- for(;ix<3;++ix) {
- if(rhoc[ix]) {
- _rho1mass [ix]=rhoc[ix]->mass();
- _rho1width[ix]=rhoc[ix]->width();
- }
- }
- }
- else if(!_rhoparameters) {
- _rho1mass.resize(3);_rho1width.resize(3);
- for(ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- _rho1mass[ix]=rhoc[ix]->mass();
- _rho1width[ix]=rhoc[ix]->width();
- }
- }
- }
- // K star parameters in the base class
- if(_kstarparameters&&_kstar1mass.size()<3) {
- ix = _kstar1mass.size();
- _kstar1mass.resize(3);_kstar1width.resize(3);
- for(;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstar1mass[ix]=Kstarc[ix]->mass();
- _kstar1width[ix]=Kstarc[ix]->width();
- }
- }
- }
- else if(!_kstarparameters) {
- _kstar1mass.resize(3);_kstar1width.resize(3);
- for(ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstar1mass[ix]=Kstarc[ix]->mass();
- _kstar1width[ix]=Kstarc[ix]->width();
- }
- }
- }
- // rho parameters here
- if(_rhoparameters&&_rho2mass.size()<3) {
- ix = _rho2mass.size();
- _rho2mass.resize(3);_rho2width.resize(3);
- for(;ix<3;++ix) {
- if(rhoc[ix]) {
- _rho2mass[ix]=rhoc[ix]->mass();
- _rho2width[ix]=rhoc[ix]->width();
- }
- }
- }
- else if(!_rhoparameters) {
- _rho2mass.resize(3);_rho2width.resize(3);
- for(ix=0;ix<3;++ix) {
- if(rhoc[ix]) {
- _rho2mass[ix]=rhoc[ix]->mass();
- _rho2width[ix]=rhoc[ix]->width();
- }
- }
- }
- // Kstar parameters here
- if(_kstarparameters&&_kstar2width.size()<3) {
- ix = _kstar2mass.size();
- _kstar2mass.resize(3);_kstar2width.resize(3);
- for(;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstar2mass[ix]=Kstarc[ix]->mass();
- _kstar2width[ix]=Kstarc[ix]->width();
- }
- }
- }
- else if(!_kstarparameters) {
- _kstar2mass.resize(3);_kstar2width.resize(3);
- for(ix=0;ix<3;++ix) {
- if(Kstarc[ix]) {
- _kstar2mass[ix]=Kstarc[ix]->mass();
- _kstar2width[ix]=Kstarc[ix]->width();
- }
- }
- }
inita1Width(0);
}
TwoKaonOnePionCurrent::FormFactors
TwoKaonOnePionCurrent::calculateFormFactors(const int ichan,const int imode,
Energy2 q2,Energy2 s1,
Energy2 s2,Energy2 s3) const {
useMe();
Complex F1, F2, F5;
// calculate the K- pi - K+ factor
- if(imode==2) {
+ if(imode==0) {
Complex a1fact(a1BreitWigner(q2)*sqrt(2.)/3.);
if(ichan<0) {
F1 = -a1fact*TKstar1(s1,-1);
F2 = a1fact*Trho1(s2,-1);
F5 = Trho2(q2,-1)*TOmegaKStar(s1,s2,-1)*sqrt(2.);
}
else if(ichan%5==0) F1 = -a1fact*TKstar1(s1, ichan/5);
else if(ichan%5==1) F2 = a1fact*Trho1( s2,(ichan-1)/5);
else if(ichan%5>=2) F5 = Trho2(q2,ichan/5)*TOmegaKStar(s1,s2,2*((ichan-2)%5))
*sqrt(2.);
}
// calculate the K0 pi- K0bar
- else if(imode==3) {
+ else if(imode==1) {
Complex a1fact(a1BreitWigner(q2)*sqrt(2.)/3.);
if(ichan<0) {
F1 =-a1fact*TKstar1(s1,-1);
F2 = a1fact*Trho1 (s2,-1);
F5 =-Trho2(q2,-1)*TOmegaKStar(s1,s2,-1)*sqrt(2.);
}
else if(ichan%5==0) F1 = -a1fact*TKstar1(s1, ichan/5);
else if(ichan%5==1) F2 = a1fact*Trho1 (s2,(ichan-1)/5);
else if(ichan%5>=2) F5 = -Trho2(q2,ichan/5)*TOmegaKStar(s1,s2,2*((ichan-2)%5))
*sqrt(2.);
}
// calculate the K- pi0 k0
- else if(imode==4) {
+ else if(imode==2) {
Complex a1fact(a1BreitWigner(q2)/3.);
if(ichan<0) {
F1 = a1fact*( TKstar1(s1,-1)-TKstar1(s3,-1));
F2 = -a1fact*(2.*Trho1(s2,-1)+TKstar1(s3,-1));
F5 = Trho2(q2,-1)*(TKstar1(s3,-1)-TKstar1(s1,-1))/(1.+_omegaKstarwgt)/sqrt(2.);
}
else if(ichan%9==0) F1 = a1fact*TKstar1(s1,ichan/9)/3.;
else if(ichan%9==1) {
F1 = +a1fact*TKstar1(s3,(ichan-1)/9)/3.;
F2 = -a1fact*TKstar1(s3,(ichan-1)/9)/3.;
}
else if(ichan%9==2) F2 = -a1fact*2.*Trho1(s2,(ichan-2)/9)/3.;
else if(ichan%9<6) F5 =-Trho2(q2,ichan/9)*TKstar1(s1,(ichan-3)%9)
/(1.+_omegaKstarwgt)/sqrt(2.);
else F5 = Trho2(q2,ichan/9)*TKstar1(s3,(ichan-6)%9)
/(1.+_omegaKstarwgt)/sqrt(2.);
}
- // calculate the pi0 pi0 K-
- else if(imode==5) {
- if(ichan<0) {
- Complex K1fact(TK1(q2,0,-1)/6.);
- F1 = K1fact*TKstar1(s1,-1);
- F2 =-K1fact*TKstar1(s2,-1);
- F5 =-0.25*TKstar2(q2,-1)*(TKstar1(s1,-1)-TKstar1(s2,-1));
- }
- else if(ichan%10==0) F1= TK1(q2,0,0)/6.*TKstar1(s1,ichan/10);
- else if(ichan%10==1) F2= -TK1(q2,0,0)/6.*TKstar1(s2,ichan/10);
- else if(ichan%10==2) F1= TK1(q2,0,1)/6.*TKstar1(s1,ichan/10);
- else if(ichan%10==3) F2= -TK1(q2,0,1)/6.*TKstar1(s2,ichan/10);
- else if(ichan%10<7 ) F5 =-sqrt(2.)/4*TKstar2(q2,ichan/10)*TKstar1(s1,(ichan-4)%10);
- else F5 = sqrt(2.)/4*TKstar2(q2,ichan/10)*TKstar1(s2,(ichan-7)%10);
- }
- // calculate the K- pi- pi+
- else if(imode==6) {
- double fact=sqrt(2.)/3.;
- if(ichan<0) {
- F1 = -fact*TK1(q2,1,-1)*Trho1(s1,-1);
- F2 = fact*TK1(q2,0,-1)*TKstar1(s2,-1);
- F5 = -sqrt(0.5)*TKstar2(q2,-1)*(Trho1(s1,-1)+TKstar1(s2,-1));
- }
- else if(ichan%10==0) F1 = -fact*TK1(q2,1,0)*Trho1 (s1,ichan/10);
- else if(ichan%10==1) F2 = fact*TK1(q2,0,0)*TKstar1(s2,ichan/10);
- else if(ichan%10==2) F1 = -fact*TK1(q2,1,1)*Trho1( s1,ichan/10);
- else if(ichan%10==3) F2 = fact*TK1(q2,0,1)*TKstar1(s2,ichan/10);
- else if(ichan%10<7) F5 = -sqrt(0.5)*TKstar2(q2,ichan/10)*Trho1( s1,(ichan-4)%10);
- else F5 = -sqrt(0.5)*TKstar2(q2,ichan/10)*TKstar1(s2,(ichan-7)%10);
- }
- // calculate the pi- K0bar pi0
- else if(imode==7) {
- if(ichan<0) {
- Complex K1facta(TK1(q2,0,-1)),K1factb(TK1(q2,1,-1));
- F1 = K1facta*(TKstar1(s1,-1)-TKstar1(s3,-1))/3.;
- F2 =-(2.*K1factb*Trho1(s2,-1)+K1facta*TKstar1(s3,-1))/3.;
- F5 = -0.5*TKstar2(q2,-1)*(2.*Trho1(s2,-1)+TKstar1(s1,-1)+TKstar1(s3,-1));
- }
- else if(ichan%15==0) F2 =-2.*TK1(q2,0,0)*Trho1 (s2,ichan/15)/3.;
- else if(ichan%15==1) F1 = TK1(q2,1,0)*TKstar1(s1,ichan/15)/3.;
- else if(ichan%15==2) {
- F1 =-TK1(q2,1,0)*TKstar1(s3,ichan/15)/3.;
- F2 =-TK1(q2,1,0)*TKstar1(s3,ichan/15)/3.;
- }
- else if(ichan%15==3) F2 =-2.*TK1(q2,0,1)*Trho1 (s2,ichan/15)/3.;
- else if(ichan%15==4) F1 = TK1(q2,1,1)*TKstar1(s1,ichan/15)/3.;
- else if(ichan%15==5) {
- F1 =-TK1(q2,1,1)*TKstar1(s3,ichan/15)/3.;
- F2 =-TK1(q2,1,1)*TKstar1(s3,ichan/15)/3.;
- }
- else if(ichan%15<9 ) F5 = -0.5*TKstar2(q2,ichan/15)*TKstar1(s1,(ichan- 6)%15);
- else if(ichan%15<12) F5 = - TKstar2(q2,ichan/15)*Trho1 (s2,(ichan- 9)%15);
- else F5 = -0.5*TKstar2(q2,ichan/15)*TKstar1(s3,(ichan-12)%15);
- }
// calculate the K_S0 pi- K_S0 or K_L0 pi- K_L0
- else if(imode==9||imode==10) {
+ else if(imode==3||imode==4) {
Complex a1fact(a1BreitWigner(q2)/6.);
if(ichan<0) {
F1 = a1fact*(TKstar1(s1,-1)+TKstar1(s3,-1));
F2 = a1fact*TKstar1(s3,-1);
F5 = 0.5*Trho2(q2,-1)*(TOmegaKStar(s1,s2,-1)-TOmegaKStar(s3,s2,-1));
}
else if(ichan%8==0) F1=a1fact*TKstar1(s1,ichan/8);
else if(ichan%8==1) {
F1 = a1fact*TKstar1(s3,ichan/8);
F2 = a1fact*TKstar1(s3,ichan/8);
}
else if(ichan%8<5 ) F5 = -Trho2(q2,ichan/8)*TKstar1(s1,(ichan-2)%8)
/(1.+_omegaKstarwgt)/2.;
else F5 = Trho2(q2,ichan/8)*TKstar1(s3,(ichan-5)%8)
/(1.+_omegaKstarwgt)/2.;
}
- else if(imode==11) {
+ else if(imode==5) {
Complex a1fact(a1BreitWigner(q2)/3./sqrt(2.));
if(ichan<0) {
F1 = -a1fact*(TKstar1(s1,-1)-TKstar1(s3,-1));
F2 = a1fact*(2.*Trho1(s2,-1)+TKstar1(s3,-1));
F5 = -Trho2(q2,-1)*(TOmegaKStar(s1,s2,-1)+TOmegaKStar(s3,s2,-1))/sqrt(2.);
}
else if(ichan%9==0) F1 =- a1fact*TKstar1(s1,ichan/9);
else if(ichan%9==1) {
F1 = a1fact*TKstar1(s3,ichan/9);
F2 = a1fact*TKstar1(s3,ichan/9);
}
else if(ichan%9==2) F2 = 2.*a1fact*Trho1( s2,ichan/9);
else if(ichan%9<6 ) F5 = -sqrt(0.5)*TKstar2(q2,ichan/9)*
TOmegaKStar(s1,s2,2*((ichan-3)%9))/sqrt(2.);
else F5 = -sqrt(0.5)*TKstar2(q2,ichan/9)*
TOmegaKStar(s3,s2,2*((ichan-6)%9))/sqrt(2.);
}
return FormFactors(F1 / _fpi,
F2 / _fpi,
InvEnergy(),
InvEnergy(),
-F5 / sqr(Constants::twopi) / pow<3,1>(_fpi));
}
void TwoKaonOnePionCurrent::doinitrun() {
// set up the running a_1 width
inita1Width(0);
WeakCurrent::doinitrun();
}
void TwoKaonOnePionCurrent::doupdate() {
WeakCurrent::doupdate();
// update running width if needed
if ( !touched() ) return;
if(_maxmass!=_maxcalc) inita1Width(-1);
}
double TwoKaonOnePionCurrent::
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(Trho1(s1,-1)),propa(Trho1(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(_rho1mass[0]);
}
Complex TwoKaonOnePionCurrent::Trho1(Energy2 q2,int ires) const {
Complex output(0.);
double norm(0.);
for(unsigned int ix=0,N=_rho1wgts.size();ix<N;++ix) norm+=_rho1wgts[ix];
if(ires<0) {
for(unsigned int ix=0,N=_rho1wgts.size();ix<N;++ix) {
output+=_rho1wgts[ix]*BWrho1(q2,ix);
}
}
else {
unsigned int temp(ires);
if(temp<_rho1wgts.size()) output=_rho1wgts[temp]*BWrho1(q2,temp);
}
return output/norm;
}
Complex TwoKaonOnePionCurrent::Trho2(Energy2 q2,int ires) const {
Complex output(0.);
double norm(0.);
for(unsigned int ix=0,N=_rho2wgts.size();ix<N;++ix) norm+=_rho2wgts[ix];
if(ires<0) {
for(unsigned int ix=0,N=_rho2wgts.size();ix<N;++ix) {
output+=_rho2wgts[ix]*BWrho2(q2,ix);
}
}
else {
unsigned int temp(ires);
if(temp<_rho2wgts.size()) output=_rho2wgts[temp]*BWrho2(q2,temp);
}
return output/norm;
}
Complex TwoKaonOnePionCurrent::TKstar1(Energy2 q2,int ires) const {
Complex output(0.);
double norm(0.);
for(unsigned int ix=0,N=_kstar1wgts.size();ix<N;++ix) norm+=_kstar1wgts[ix];
if(ires<0) {
for(unsigned int ix=0,N=_kstar1wgts.size();ix<N;++ix) {
output+=_kstar1wgts[ix]*BWKstar1(q2,ix);
}
}
else {
unsigned int temp(ires);
if(temp<_kstar1wgts.size()) output=_kstar1wgts[temp]*BWKstar1(q2,temp);
}
return output/norm;
}
Complex TwoKaonOnePionCurrent::TKstar2(Energy2 q2,int ires) const {
Complex output(0.);
double norm(0.);
for(unsigned int ix=0,N=_kstar2wgts.size();ix<N;++ix) norm+=_kstar2wgts[ix];
if(ires<0) {
for(unsigned int ix=0,N=_kstar2wgts.size();ix<N;++ix) {
output+=_kstar2wgts[ix]*BWKstar2(q2,ix);
}
}
else {
unsigned int temp(ires);
if(temp<_kstar2wgts.size()) output=_kstar2wgts[temp]*BWKstar2(q2,temp);
}
return output/norm;
}
Complex TwoKaonOnePionCurrent::BWrho1(Energy2 q2, unsigned int ires) const {
if(ires>=_rho1mass.size()) return 0.;
Energy mass = _rho1mass [ires];
Energy width = _rho1width[ires];
Energy q=sqrt(q2);
Energy pcm0 = Kinematics::pstarTwoBodyDecay(mass,_mpi,_mpi);
Energy pcm = q<=2.*_mpi ? ZERO : Kinematics::pstarTwoBodyDecay(q,_mpi,_mpi);
double ratio = Math::powi(pcm/pcm0, 3);
Energy gam(width*mass*ratio/q);
return sqr(mass)/(sqr(mass)-q2-Complex(0.,1.)*mass*gam);
}
Complex TwoKaonOnePionCurrent::BWrho2(Energy2 q2, unsigned int ires) const {
if(ires>=_rho2mass.size()) return 0.;
Energy mass = _rho2mass [ires];
Energy width = _rho2width[ires];
Energy q=sqrt(q2);
Energy pcm0 = Kinematics::pstarTwoBodyDecay(mass,_mpi,_mpi);
Energy pcm = q<=2.*_mpi ? ZERO : Kinematics::pstarTwoBodyDecay(q,_mpi,_mpi);
double ratio(pcm/pcm0);ratio*=ratio*ratio;
Energy gam(width*mass*ratio/q);
return sqr(mass)/(sqr(mass)-q2-Complex(0.,1.)*mass*gam);
}
Complex TwoKaonOnePionCurrent::BWKstar1(Energy2 q2, unsigned int ires) const {
if(ires>=_kstar1mass.size()) return 0.;
Energy mass = _kstar1mass [ires];
Energy width = _kstar1width[ires];
Energy q=sqrt(q2);
Energy pcm0 = Kinematics::pstarTwoBodyDecay(mass,_mK,_mpi);
Energy pcm = q<=_mpi+_mK ? ZERO : Kinematics::pstarTwoBodyDecay(q,_mK,_mpi);
double ratio(pcm/pcm0);ratio*=ratio*ratio;
Energy gam(width*mass*ratio/q);
return sqr(mass)/(sqr(mass)-q2-Complex(0.,1.)*mass*gam);
}
Complex TwoKaonOnePionCurrent::BWKstar2(Energy2 q2, unsigned int ires) const {
if(ires>=_kstar2mass.size()) return 0.;
Energy mass = _kstar2mass [ires];
Energy width = _kstar2width[ires];
Energy q=sqrt(q2);
Energy pcm0 = Kinematics::pstarTwoBodyDecay(mass,_mK,_mpi);
Energy pcm = q<=_mpi+_mK ? ZERO : Kinematics::pstarTwoBodyDecay(q,_mK,_mpi);
double ratio(pcm/pcm0);ratio*=ratio*ratio;
Energy gam(width*mass*ratio/q);
return sqr(mass)/(sqr(mass)-q2-Complex(0.,1.)*mass*gam);
}
Complex TwoKaonOnePionCurrent::a1BreitWigner(Energy2 q2) const {
Complex ii(0.,1.);
Energy2 m2(_a1mass*_a1mass);
Energy q(sqrt(q2));
return m2/(m2-q2-ii*q*a1Width(q2));
}
-
-Complex TwoKaonOnePionCurrent::TK1(Energy2 q2,unsigned int iopt,int ires) const {
- Complex denom(0),num(0.);
- if(iopt==0) {
- for(unsigned int ix=0;ix<_k1wgta.size();++ix) denom+=_k1wgta[ix];
- if(ires==-1) {
- for(unsigned int ix=0;ix<_k1wgta.size();++ix)
- num+=_k1wgta[ix]*K1BreitWigner(q2,ix);
- }
- else {
- num+=_k1wgta[ires]*K1BreitWigner(q2,ires);
- }
- }
- else if(iopt==1) {
- for(unsigned int ix=0;ix<_k1wgtb.size();++ix) denom+=_k1wgtb[ix];
- if(ires==-1) {
- for(unsigned int ix=0;ix<_k1wgtb.size();++ix)
- num+=_k1wgtb[ix]*K1BreitWigner(q2,ix);
- }
- else {
- num+=_k1wgtb[ires]*K1BreitWigner(q2,ires);
- }
- }
- else {
- return 0.;
- }
- return num/denom;
-}
-
-Complex TwoKaonOnePionCurrent::K1BreitWigner(Energy2 q2,unsigned int ires) const {
- if(ires>=_k1mass.size()) return 0.;
- Energy2 m2=sqr(_k1mass[ires]),mg=_k1mass[ires]*_k1width[ires];
- return (-m2+Complex(0.,1.)*mg)/(q2-m2+Complex(0.,1.)*mg);
-}
Energy TwoKaonOnePionCurrent::a1Width(Energy2 q2) const {
if(!_a1opt) return _a1mass*_a1width*g(q2)/g(_a1mass*_a1mass)/sqrt(q2);
else return (*_a1runinter)(q2);
}
double TwoKaonOnePionCurrent::g(Energy2 q2) const {
double output;
if(q2<9.*_mpi*_mpi) {
output=0.;
}
else if(q2<sqr(_rho1mass[0]+_mpi)) {
double diff=(q2-9.*_mpi*_mpi)/GeV2;
output=4.1*sqr(diff)*diff*(1.-3.3*diff+5.8*sqr(diff));
}
else {
double ratio = q2/GeV2;
output = ratio*(1.623+10.38/ratio-9.32/sqr(ratio)+0.65/(ratio*sqr(ratio)));
}
return output;
}
Complex TwoKaonOnePionCurrent::Tomega(Energy2 q2, int ires) const {
double denom=(1.+_epsomega);
Complex num(0.);
if(ires<0) num=OmegaPhiBreitWigner(q2,0)+_epsomega*OmegaPhiBreitWigner(q2,1);
else if(ires==0) num=OmegaPhiBreitWigner(q2,0);
else num=OmegaPhiBreitWigner(q2,1);
return num/denom;
}
Complex TwoKaonOnePionCurrent::OmegaPhiBreitWigner(Energy2 q2, unsigned int ires) const {
Energy2 m2,mg;
if(ires==0) {
m2=sqr(_omegamass);
mg=_omegamass*_omegawidth;
}
else {
m2=sqr(_phimass);
mg=_phimass*_phiwidth;
}
return (-m2+Complex(0.,1.)*mg)/(q2-m2+Complex(0.,1.)*mg);
}
Complex TwoKaonOnePionCurrent::TOmegaKStar(Energy2 s1,Energy2 s2,int ires) const {
Complex output;
if(ires<0) output = _omegaKstarwgt*TKstar1(s1,-1)+Tomega(s2,-1);
else if(ires%2==0) output = _omegaKstarwgt*TKstar1(s1,ires/2);
else if(ires%2==1) output = Tomega(s2,ires/2);
return output/(1.+_omegaKstarwgt);
}
// the hadronic currents
vector<LorentzPolarizationVectorE>
TwoKaonOnePionCurrent::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 {
// calculate q2,s1,s2,s3
Lorentz5Momentum q;
for(unsigned int ix=0;ix<momenta.size();++ix)
q+=momenta[ix];
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]);
// factor to get dimensions correct
return vector<LorentzPolarizationVectorE>(1,q.mass()*vect);
}
bool TwoKaonOnePionCurrent::accept(vector<int> id) {
+ if(id.size()!=3) return false;
+ int npip(0),npim(0),nkp(0),nkm(0);
+ int npi0(0),nk0(0),nk0bar(0),nks(0),nkl(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::K_S0) ++nks;
+ else if(id[ix]==ParticleID::K_L0) ++nkl;
+ }
+ if ( (nkp==1&&nkm==1&&npip==1) ||
+ (nkp==1&&nkm==1&&npim==1)) return true;
+ else if( (nk0==1&&nk0bar==1&&npip==1) ||
+ (nk0==1&&nk0bar==1&&npim==1)) return true;
+ else if( (nkp==1&&nk0bar==1&&npi0==1) ||
+ (nkm==1&&npi0==1&&nk0==1)) return true;
+ else if( nks==2 && (npip==1||npim==1) ) return true;
+ else if( nkl==2 && (npip==1||npim==1) ) return true;
+ else if( nks==1&&nkl==1 && (npip==1||npim==1) ) return true;
+ return false;
+}
+
+unsigned int TwoKaonOnePionCurrent::decayMode(vector<int> id) {
+ assert(id.size()==3);
int npip(0),npim(0),nkp(0),nkm(0),
npi0(0),nk0(0),nk0bar(0),neta(0),nks(0),nkl(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;
+ if ( (nkp==1&&nkm==1&&npip==1) ||
+ (nkp==1&&nkm==1&&npim==1)) return 0;
else if( (nk0==1&&nk0bar==1&&npip==1) ||
- (nk0==1&&nk0bar==1&&npim==1)) imode= 3;
+ (nk0==1&&nk0bar==1&&npim==1)) return 1;
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);
-}
-
-unsigned int TwoKaonOnePionCurrent::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);
- 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;
+ (nkm==1&&npi0==1&&nk0==1)) return 2;
+ else if( nks==2 && (npip==1||npim==1) ) return 3;
+ else if( nkl==2 && (npip==1||npim==1) ) return 4;
+ else if( nks==1&&nkl==1 && (npip==1||npim==1) ) return 5;
+ assert(false);
}
tPDVector TwoKaonOnePionCurrent::particles(int icharge, unsigned int imode,int,int) {
tPDVector extpart(3);
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) {
+ else if(imode==1) {
extpart[0]=getParticleData(ParticleID::K0);
extpart[1]=getParticleData(ParticleID::piminus);
extpart[2]=getParticleData(ParticleID::Kbar0);
}
- else if(imode==4) {
+ else if(imode==2) {
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) {
+ else if(imode==3) {
extpart[0]=getParticleData(ParticleID::K_S0);
extpart[1]=getParticleData(ParticleID::piminus);
extpart[2]=getParticleData(ParticleID::K_S0);
}
- else if(imode==10) {
+ else if(imode==4) {
extpart[0]=getParticleData(ParticleID::K_L0);
extpart[1]=getParticleData(ParticleID::piminus);
extpart[2]=getParticleData(ParticleID::K_L0);
}
- else if(imode==11) {
+ else if(imode==5) {
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();
}
}
// return the answer
return extpart;
}
-
diff --git a/Decay/WeakCurrents/TwoKaonOnePionCurrent.h b/Decay/WeakCurrents/TwoKaonOnePionCurrent.h
--- a/Decay/WeakCurrents/TwoKaonOnePionCurrent.h
+++ b/Decay/WeakCurrents/TwoKaonOnePionCurrent.h
@@ -1,676 +1,607 @@
// -*- C++ -*-
//
// TwoKaonOnePionCurrent.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_TwoKaonOnePionCurrent_H
#define HERWIG_TwoKaonOnePionCurrent_H
//
// This is the declaration of the TwoKaonOnePionCurrent class.
//
#include "WeakCurrent.h"
namespace Herwig {
using namespace ThePEG;
/**
* The TwoKaonOnePionCurrent class implements the model of M. Finkemeier
* and E.~Mirkes, Z. Phys. C 69 (1996) 243 [arXiv:hep-ph/9503474],
* for the weak current for three mesons where at least one of the mesons is
* a kaon.
*
* \ingroup Decay
*
* This is the base class for the three meson decays of the weak current.
* It is designed so that the currents for the following modes can be implemented
* in classes inheriting from this
- * - \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)
+ * - \f$ K^- \pi^- K^+ \f$, (imode=0)
+ * - \f$ K^0 \pi^- \bar{K}^0\f$, (imode=1)
+ * - \f$ K^- \pi^0 K^0 \f$, (imode=2)
+ * - \f$ \pi^0 \pi^0 K^- \f$, (imode=3)
+ * - \f$ K^- \pi^- \pi^+ \f$, (imode=4)
+ * - \f$ \pi^- \bar{K}^0 \pi^0 \f$, (imode=5)
+ * - \f$ \pi^- \pi^0 \eta \f$, (imode=6)
*
* obviously there are other modes with three pseudoscalar mesons for the decay
* of the weak current but this model original came from \f$\tau\f$ decay where
* these are the only modes. However one case which is important is the inclusion
* of the mixing in the neutral kaon sector for which we include the additional
* currents
* - \f$ K^0_S \pi^- K^0_S\f$, (imode=9)
* - \f$ K^0_L \pi^- K^0_L\f$, (imode=10)
* - \f$ K^0_S \pi^- K^0_L\f$, (imode=11)
*
* In this case the current is given by
* \f[ J^\mu = \left(g^{\mu\nu}-\frac{q^\mu q^\nu}{q^2}\right)
* \left[F_1(p_2-p_3)^\mu +F_2(p_3-p_1)^\mu+F_3(p_1-p_2)^\mu\right]
* +q^\mu F_4
* +F_5\epsilon^{\mu\alpha\beta\gamma}p_1^\alpha p_2^\beta p_3^\gamma
* \f]
* where
* - \f$p_{1,2,3}\f$ are the momenta of the mesons in the order given above.
* - \f$F_1,F_2,F_3,F_4,F_5\f$ are the form factors which must be
* calculated in the calculateFormFactors member which should be implemented
* in classes inheriting from this.
*
* @see WeakCurrent.
*
* \author Peter Richardson
* @see \ref TwoKaonOnePionCurrentInterfaces "The interfaces"
* defined for TwoKaonOnePionCurrent.
*/
class TwoKaonOnePionCurrent: public WeakCurrent {
public:
/**
* The default constructor.
*/
TwoKaonOnePionCurrent();
/** @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 );
//@}
/**
* 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);
/**
* 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) {}
};
-
- /**
- * 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;
public:
/** @name Functions used by the persistent I/O system. */
//@{
/**
* Function used to write out object persistently.
* @param os the persistent output stream written to.
*/
void persistentOutput(PersistentOStream & os) const;
/**
* Function used to read in object persistently.
* @param is the persistent input stream read from.
* @param version the version number of the object when written.
*/
void persistentInput(PersistentIStream & is, int version);
//@}
/**
* The standard Init function used to initialize the interfaces.
* Called exactly once for each class by the class description system
* before the main function starts or
* when this class is dynamically loaded.
*/
static void Init();
protected:
/** @name Clone Methods. */
//@{
/**
* Make a simple clone of this object.
* @return a pointer to the new object.
*/
virtual IBPtr clone() const;
/** Make a clone of this object, possibly modifying the cloned object
* to make it sane.
* @return a pointer to the new object.
*/
virtual IBPtr fullclone() const;
//@}
protected:
/** @name Standard Interfaced functions. */
//@{
/**
* Initialize this object after the setup phase before saving and
* EventGenerator to disk.
* @throws InitException if object could not be initialized properly.
*/
virtual void doinit();
/**
* Initialize this object to the begining of the run phase.
*/
virtual void doinitrun();
/**
* Check sanity of the object during the setup phase.
*/
virtual void doupdate();
//@}
private:
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
TwoKaonOnePionCurrent & operator=(const TwoKaonOnePionCurrent &);
private:
/**
* The \f$\rho\f$ lineshape for the axial-vector terms
* @param q2 The scale \f$q^2\f$ for the lineshape
* @param ires Which \f$\rho\f$ multiplet
*/
Complex Trho1(Energy2 q2,int ires) const;
/**
* The \f$\rho\f$ lineshape for the vector terms
* @param q2 The scale \f$q^2\f$ for the lineshape
* @param ires Which \f$\rho\f$ multiplet
*/
Complex Trho2(Energy2 q2,int ires) const;
/**
* The \f$K^*\f$ lineshape for the axial-vector terms
* @param q2 The scale \f$q^2\f$ for the lineshape
* @param ires Which \f$K^*\f$ multiplet
*/
Complex TKstar1(Energy2 q2,int ires) const;
/**
* The \f$\rho\f$ lineshape for the vector terms
* @param q2 The scale \f$q^2\f$ for the lineshape
* @param ires Which \f$K^*\f$ multiplet
*/
Complex TKstar2(Energy2 q2,int ires) const;
/**
* The \f$\rho\f$ Breit-Wigner for the axial-vector terms
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @param ires Which \f$\rho\f$ multiplet
*/
Complex BWrho1(Energy2 q2, unsigned int ires) const;
/**
* The \f$\rho\f$ Breit-Wigner for the vector terms
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @param ires Which \f$\rho\f$ multiplet
*/
Complex BWrho2(Energy2 q2, unsigned int ires) const;
/**
* The \f$K^*\f$ Breit-Wigner for the axial-vector terms
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @param ires Which \f$K^*\f$ multiplet
*/
Complex BWKstar1(Energy2 q2, unsigned int ires) const;
/**
* The \f$K^*\f$ Breit-Wigner for the vector terms
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @param ires Which \f$K^*\f$ multiplet
*/
Complex BWKstar2(Energy2 q2, unsigned int ires) const;
/**
* \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;
/**
- * The \f$K_1\f$ line shape
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param iopt Whether this is \f$K^*\pi\f$ or \f$\rho K\f$.
- * @param ires the resonance
- */
- Complex TK1(Energy2 q2,unsigned int iopt,int ires) const;
-
- /**
- * The \f$K_1\f$ Breit-Wigner
- * @param q2 The scale \f$q^2\f$ for the Breit-Wigner
- * @param ires the resonance
- * @return The Breit-Wigner
- */
- Complex K1BreitWigner(Energy2 q2,unsigned int ires) const;
-
- /**
* The \f$a_1\f$ running width
* @param q2 The scale \f$q^2\f$ for the Breit-Wigner
* @return The \f$a_1\f$ running width.
*/
Energy a1Width(Energy2 q2) const;
/**
* The \f$g(Q^2)\f$ function of Kuhn and Santamaria
*/
double g(Energy2 q2) const;
/**
* Initialize the \f$a_1\f$ running width
* @param iopt Initialization option (-1 full calculation, 0 set up the interpolation)
*/
void inita1Width(int iopt);
/**
* The \f$T_\omega\f$ function
* @param q2 The scale
* @param ires the resonance
*/
Complex Tomega(Energy2 q2, int ires) const;
/**
* The \f$\omega\f$ and \f$\phi\f$ Breit-Wigner
* @param q2 The scale
* @param ires the resonance
*/
Complex OmegaPhiBreitWigner(Energy2 q2, unsigned int ires) const;
/**
* The \f$\omega-\phi\f$ \f$K^*\f$ form-factor for the \f$F_5\f$ form-factor
* @param s1 The scale \f$s_1\f$.
* @param s2 The scale \f$s_2\f$.
* @param ires Which resonances to use
* @return The mixed Breit-Wigner
*/
Complex TOmegaKStar(Energy2 s1,Energy2 s2,int ires) const;
private:
/**
* Parameters for the \f$\rho\f$ in the axial-vector terms
*/
//@{
/**
* Weight for the different resonances
*/
vector<double> _rho1wgts;
/**
* Masses
*/
vector<Energy> _rho1mass;
/**
* Widths
*/
vector<Energy> _rho1width;
//@}
/**
* Parameters for the \f$\rho\f$ in the vector terms
*/
//@{
/**
* Weight for the different resonances
*/
vector<double> _rho2wgts;
/**
* Masses
*/
vector<Energy> _rho2mass;
/**
* Widths
*/
vector<Energy> _rho2width;
//@}
/**
* Parameters for the \f$K^*\f$ in the axial-vector terms
*/
//@{
/**
* Weight for the different resonances
*/
vector<double> _kstar1wgts;
/**
* Masses
*/
vector<Energy> _kstar1mass;
/**
* Widths
*/
vector<Energy> _kstar1width;
//@}
/**
* Parameters for the \f$K^*\f$ in the vector terms
*/
//@{
/**
* Weight for the different resonances
*/
vector<double> _kstar2wgts;
/**
* Masses
*/
vector<Energy> _kstar2mass;
/**
* Widths
*/
vector<Energy> _kstar2width;
//@}
/**
* Parameters for the three meson resonances
*/
//@{
/**
* The mass of the \f$a_1\f$ resonances.
*/
Energy _a1mass;
/**
* The width of the \f$a_1\f$ resonances.
*/
Energy _a1width;
/**
- * The masses of the \f$aK1\f$ resonances.
- */
- vector<Energy> _k1mass;
-
- /**
- * The widths of the \f$K_1\f$ resonances.
- */
- vector<Energy> _k1width;
-
- /**
- * The weights for the different \f$K_1\f$ resonances for \f$K_1\to K^*\pi\f$
- */
- vector<double> _k1wgta;
-
- /**
- * The weights for the different \f$K_1\f$ resonaces for \f$K_1\to\rho K\f$.
- */
- vector<double> _k1wgtb;
-
- /**
* 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;
//@}
/**
* Parameters for the \f$T_\omega\f$ function
*/
//@{
/**
* Mixing parameter
*/
double _epsomega;
/**
* Mass of the \f$\omega\f$
*/
Energy _omegamass;
/**
* Width of the \f$\omega\f$
*/
Energy _omegawidth;
/**
* Mass of the \f$\phi\f$
*/
Energy _phimass;
/**
* Width of the \f$\phi\f$
*/
Energy _phiwidth;
//@}
/**
* The relative weight of the \f$\omega-\phi\f$ and \f$K^*\f$ where needed.
*/
double _omegaKstarwgt;
/**
* The pion decay constant, \f$f_\pi\f$.
*/
Energy _fpi;
/**
* The pion mass
*/
Energy _mpi;
/**
* The kaon mass
*/
Energy _mK;
/**
* Initialization switches
*/
//@{
/**
* Initialize the running \f$a_1\f$ width.
*/
bool _initializea1;
-
- /**
- * use local values of the \f$\rho\f$ masses and widths
- */
- bool _rhoparameters;
-
- /**
- * use local values of the \f$K^*\f$ resonances masses and widths
- */
- bool _kstarparameters;
-
- /**
- * 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;
-
- /**
- * Option for the \f$\omega-\phi\f$ parameters
- */
- bool _omegaopt;
//@}
/**
* The maximum mass of the hadronic system
*/
Energy _maxmass;
/**
* The maximum mass when the running width was calculated
*/
Energy _maxcalc;
};
}
#endif /* HERWIG_TwoKaonOnePionCurrent_H */
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Nov 19, 6:04 PM (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3805490
Default Alt Text
(85 KB)
Attached To
R563 testingHerwigHG
Event Timeline
Log In to Comment