Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F9514773
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
59 KB
Subscribers
None
View Options
diff --git a/Decay/WeakCurrents/FourPionCzyzCurrent.cc b/Decay/WeakCurrents/FourPionCzyzCurrent.cc
--- a/Decay/WeakCurrents/FourPionCzyzCurrent.cc
+++ b/Decay/WeakCurrents/FourPionCzyzCurrent.cc
@@ -1,1075 +1,1111 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the FourPionCzyzCurrent class.
//
#include "FourPionCzyzCurrent.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/ParVector.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Repository/UseRandom.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "Herwig/Decay/ResonanceHelpers.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
-FourPionCzyzCurrent::FourPionCzyzCurrent()
- : mpip_(140*MeV), mpi0_(140*MeV) { // /**
+FourPionCzyzCurrent::FourPionCzyzCurrent()
+ : mpip_(140*MeV), mpi0_(140*MeV), channelMap_(6,vector<int>()) {
// Masses and widths of the particles
// rho (PDG for most of current)
rhoMasses_ = {0.7755*GeV,1.459*GeV,1.72*GeV};
rhoWidths_ = {0.1494*GeV,0.4 *GeV,0.25*GeV};
// fitted for F_rho
rhoMasses_Frho_ = {0.7755*GeV,1.437*GeV,1.738*GeV,2.12*GeV};
rhoWidths_Frho_ = {0.1494*GeV,0.520*GeV,0.450*GeV,0.30*GeV};
// omega
omegaMass_ = 0.78265*GeV;
omegaWidth_ = 0.00849*GeV;
// f0
f0Mass_ = 1.35*GeV;
f0Width_ = 0.2 *GeV;
// a1
a1Mass_ = 1.23*GeV;
a1Width_ = 0.2*GeV;
// Coefficents for sum over \f$\rho\f$ resonances
beta_a1_ ={1.,-0.066,-0.021,-0.0043};
beta_f0_ ={1.,7e4,-2.5e3,1.9e3};
beta_omega_ ={1.,-0.33,0.012,-0.0053};
beta_B_ ={1.,-0.145};
beta_bar_ ={1.,0.08,-0.0075};
// couplings for the various termsz
c_a1_ = -225./GeV2;
c_f0_ = 64./GeV2;
c_omega_ = -1.47/GeV;
c_rho_ = -2.46;
// meson meson meson couplings
g_rho_pi_pi_ = 5.997;
g_omega_pi_rho_= 42.3/GeV/GeV2/GeV2;
g_rho_gamma_ = 0.1212*GeV2;
addDecayMode(2,-1);
addDecayMode(2,-1);
addDecayMode(1,-1);
addDecayMode(2,-2);
addDecayMode(1,-1);
addDecayMode(2,-2);
setInitialModes(6);
}
IBPtr FourPionCzyzCurrent::clone() const {
return new_ptr(*this);
}
IBPtr FourPionCzyzCurrent::fullclone() const {
return new_ptr(*this);
}
void FourPionCzyzCurrent::persistentOutput(PersistentOStream & os) const {
os << ounit(rhoMasses_,GeV) << ounit(rhoWidths_,GeV)
<< ounit(rhoMasses_Frho_,GeV) << ounit(rhoWidths_Frho_,GeV)
<< ounit(omegaMass_,GeV) << ounit(omegaWidth_,GeV)
<< ounit(f0Mass_,GeV) << ounit(f0Width_,GeV)
<< ounit(a1Mass_,GeV) << ounit(a1Width_,GeV)
<< beta_a1_ << beta_f0_ << beta_omega_ << beta_B_ << beta_bar_
<< ounit(c_a1_,1./GeV2) << ounit(c_f0_,1./GeV2) << ounit(c_omega_,1./GeV) << c_rho_
<< g_rho_pi_pi_ << ounit(g_omega_pi_rho_,1/GeV/GeV2/GeV2) << ounit(g_rho_gamma_,GeV2)
- << ounit(mpip_,GeV) << ounit(mpi0_,GeV);
+ << ounit(mpip_,GeV) << ounit(mpi0_,GeV) << channelMap_;
}
void FourPionCzyzCurrent::persistentInput(PersistentIStream & is, int) {
is >> iunit(rhoMasses_,GeV) >> iunit(rhoWidths_,GeV)
>> iunit(rhoMasses_Frho_,GeV) >> iunit(rhoWidths_Frho_,GeV)
>> iunit(omegaMass_,GeV) >> iunit(omegaWidth_,GeV)
>> iunit(f0Mass_,GeV) >> iunit(f0Width_,GeV)
>> iunit(a1Mass_,GeV) >> iunit(a1Width_,GeV)
>> beta_a1_ >> beta_f0_ >> beta_omega_ >> beta_B_ >> beta_bar_
>> iunit(c_a1_,1./GeV2) >> iunit(c_f0_,1./GeV2) >> iunit(c_omega_,1./GeV) >> c_rho_
>> g_rho_pi_pi_ >> iunit(g_omega_pi_rho_,1/GeV/GeV2/GeV2) >> iunit(g_rho_gamma_,GeV2)
- >> iunit(mpip_,GeV) >> iunit(mpi0_,GeV);
+ >> iunit(mpip_,GeV) >> iunit(mpi0_,GeV) >> channelMap_;
}
// The following static variable is needed for the type
// description system in ThePEG.
DescribeClass<FourPionCzyzCurrent,WeakCurrent>
describeHerwigFourPionCzyzCurrent("Herwig::FourPionCzyzCurrent",
"HwWeakCurrents.so");
void FourPionCzyzCurrent::Init() {
static ClassDocumentation<FourPionCzyzCurrent> documentation
("The FourPionCzyzCurrent class is designed to implement "
"the four pion current for e+e- collisions from Phys.Rev. D77 (2008) 114005",
"The current from \\cite{Czyz:2008kw} was used for four pions.",
"\\bibitem{Czyz:2008kw}\n"
"H.~Czyz, J.~H.~Kuhn and A.~Wapienik,\n"
"%``Four-pion production in tau decays and e+e- annihilation: An Update,''\n"
"Phys.\\ Rev.\\ D {\\bf 77} (2008) 114005\n"
"doi:10.1103/PhysRevD.77.114005\n"
"[arXiv:0804.0359 [hep-ph]].\n"
"%%CITATION = doi:10.1103/PhysRevD.77.114005;%%\n"
"%35 citations counted in INSPIRE as of 02 Aug 2018\n");
static ParVector<FourPionCzyzCurrent,Energy> interfaceRhoMasses
("RhoMasses",
"The masses of the rho mesons used by default in the current",
&FourPionCzyzCurrent::rhoMasses_, GeV, -1, 0.7755*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static ParVector<FourPionCzyzCurrent,Energy> interfaceRhoWidths
("RhoWidths",
"The widths of the rho mesons used by default in the current",
&FourPionCzyzCurrent::rhoWidths_, GeV, -1, 0.1494*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static ParVector<FourPionCzyzCurrent,Energy> interfaceRhoMassesFrho
("RhoMassesFrho",
"The masses of the rho mesons used in the F_rho piece",
&FourPionCzyzCurrent::rhoMasses_Frho_, GeV, -1, 0.7755*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static ParVector<FourPionCzyzCurrent,Energy> interfaceRhoWidthsFrho
("RhoWidthsFrho",
"The widths of the rho mesons used in the F_rho piece",
&FourPionCzyzCurrent::rhoWidths_Frho_, GeV, -1, 0.1494*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy> interfaceomegaMass
("omegaMass",
"The mass of the omega meson",
&FourPionCzyzCurrent::omegaMass_, GeV, 0.78265*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy> interfaceomegaWidth
("omegaWidth",
"The width of the omega meson",
&FourPionCzyzCurrent::omegaWidth_, GeV, 0.00849*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy> interfaceF0Mass
("f0Mass",
"The mass of the f0 meson",
&FourPionCzyzCurrent::f0Mass_, GeV, 1.35*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy> interfaceF0Width
("f0Width",
"The width of the f0 meson",
&FourPionCzyzCurrent::f0Width_, GeV, 0.2*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy> interfaceA1Mass
("a1Mass",
"The mass of the a1 meson",
&FourPionCzyzCurrent::a1Mass_, GeV, 1.23*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy> interfaceA1Width
("a1Width",
"The width of the a1 meson",
&FourPionCzyzCurrent::a1Width_, GeV, 0.2*GeV, 0.0*GeV, 10.0*GeV,
false, false, Interface::limited);
static ParVector<FourPionCzyzCurrent,double> interfacebeta_a1
("beta_a1",
"The coefficients for the sum over rho resonances in the a_1 term",
&FourPionCzyzCurrent::beta_a1_, -1, 1.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<FourPionCzyzCurrent,double> interfacebeta_f0
("beta_f0",
"The coefficients for the sum over rho resonances in the f_0 term",
&FourPionCzyzCurrent::beta_f0_, -1, 1.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<FourPionCzyzCurrent,double> interfacebeta_omega
("beta_omega",
"The coefficients for the sum over rho resonances in the omega term",
&FourPionCzyzCurrent::beta_omega_, -1, 1.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<FourPionCzyzCurrent,double> interfacebeta_B
("beta_B",
"The coefficients for the sum over rho resonances in the B_rho term",
&FourPionCzyzCurrent::beta_B_, -1, 1.0, 0, 0,
false, false, Interface::nolimits);
static ParVector<FourPionCzyzCurrent,double> interfacebeta_bar
("beta_bar",
"The coefficients for the sum over rho resonances in the T_rho term",
&FourPionCzyzCurrent::beta_bar_, -1, 1.0, 0, 0,
false, false, Interface::nolimits);
static Parameter<FourPionCzyzCurrent,InvEnergy2> interfacec_a1
("c_a1",
"The coupling for the a_1 channel",
&FourPionCzyzCurrent::c_a1_, 1./GeV2, -255./GeV2, -1e5/GeV2, 1e5/GeV2,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,InvEnergy2> interfacec_f0
("c_f0",
"The coupling for the f_0 channel",
&FourPionCzyzCurrent::c_f0_, 1./GeV2, 64./GeV2, -1e5/GeV2, 1e5/GeV2,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,InvEnergy> interfacec_omega
("c_omega",
"The coupling for the omega channel",
&FourPionCzyzCurrent::c_omega_, 1./GeV, -1.47/GeV, -1e5/GeV, 1e5/GeV,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,double> interfacec_rho
("c_rho",
"The coupling for the rho channel",
&FourPionCzyzCurrent::c_rho_, -2.46, 0, 0,
false, false, Interface::nolimits);
static Parameter<FourPionCzyzCurrent,double> interfaceg_rho_pi_pi
("g_rho_pi_pi",
"The coupling of rho to two pions",
&FourPionCzyzCurrent::g_rho_pi_pi_, 5.997, 0, 0,
false, false, Interface::nolimits);
static Parameter<FourPionCzyzCurrent,ThePEG::Qty<std::ratio<0,1>, std::ratio<-5,1>, std::ratio<0,1> >> interfaceg_omega_pi_rho
("g_omega_pi_rho",
"The coupling of omega to rho and pi",
&FourPionCzyzCurrent::g_omega_pi_rho_, 1./GeV/GeV2/GeV2, 42.3/GeV/GeV2/GeV2, 0.0/GeV/GeV2/GeV2, 1e5/GeV/GeV2/GeV2,
false, false, Interface::limited);
static Parameter<FourPionCzyzCurrent,Energy2> interfaceg_rho_gamma
("g_rho_gamma",
"The coupling of the rho to the photon",
&FourPionCzyzCurrent::g_rho_gamma_, GeV2, 0.1212*GeV2, 0.0*GeV2, 10.0*GeV2,
false, false, Interface::limited);
}
void FourPionCzyzCurrent::doinit() {
WeakCurrent::doinit();
mpip_ = getParticleData(211)->mass();
mpi0_ = getParticleData(111)->mass();
// test of the current for a fixed momentum configuration
// Lorentz5Momentum q1(0.13061870567796208*GeV,-0.21736300316234394*GeV,
// 0.51725254282500699*GeV,0.59167288008090657*GeV);
// Lorentz5Momentum q2(-1.1388573867484255 *GeV, 0.37727761929037396 *GeV, 0.31336706796993302 *GeV, 1.2472979400305677*GeV);
// Lorentz5Momentum q3(0.11806773412672231 *GeV, 0.17873024832600765 *GeV, 0.10345508827447017 *GeV, 0.27580297667647757*GeV );
// Lorentz5Momentum q4 (7.7487017488620830E-002*GeV, 0.16118198754624435 *GeV, 6.5813182962706746E-002*GeV, 0.23620982448991124*GeV );
// q1.rescaleMass();
// q2.rescaleMass();
// q2.rescaleMass();
// q3.rescaleMass();
// cerr << q1/GeV << " " << q1.mass()/GeV << "\n";
// cerr << q2/GeV << " " << q2.mass()/GeV << "\n";
// cerr << q3/GeV << " " << q3.mass()/GeV << "\n";
// cerr << q4/GeV << " " << q4.mass()/GeV << "\n";
// Lorentz5Momentum Q(q1+q2+q3+q4);
// Q.rescaleMass();
// LorentzVector<complex<InvEnergy> > base = baseCurrent(Q.mass2(),tcPDPtr(),-1,Q,q1,q2,q3,q4);
// LorentzVector<complex<InvEnergy> > test( Complex( 376.35697290395467 , 66.446392015809550 )/GeV,
// Complex( -135.73591401998152 , 112.36912660073307 )/GeV,
// Complex( 83.215302375273723 , -54.986430577097920 )/GeV,
// Complex( -123.56434266557559 , -22.465096431505703 )/GeV);
// cerr << "current test X " << (base.x()-test.x())/(base.x()+test.x()) << "\n";
// cerr << "current test Y " << (base.y()-test.y())/(base.x()+test.y()) << "\n";
// cerr << "current test Z " << (base.z()-test.z())/(base.x()+test.z()) << "\n";
// cerr << "current test T " << (base.t()-test.t())/(base.x()+test.t()) << "\n";
}
void FourPionCzyzCurrent::createChannels(unsigned int imode,
int icharge, tcPDPtr resonance,
unsigned int iloc,int ires,
tPDVector outgoing, PhaseSpaceModePtr mode,
PhaseSpaceChannel phase,
unsigned int j1, unsigned int j2,
- unsigned int j3, unsigned int j4) {
+ unsigned int j3, unsigned int j4,
+ int & nchan) {
tPDPtr rho0[3] = {getParticleData( 113),getParticleData( 100113),getParticleData( 30113)};
tPDPtr rhop[3] = {getParticleData( 213),getParticleData( 100213),getParticleData( 30213)};
tPDPtr rhom[3] = {getParticleData(-213),getParticleData(-100213),getParticleData(-30213)};
tPDPtr omega(getParticleData(ParticleID::omega));
tPDPtr f0(getParticleData(10221));
tPDPtr a1p = getParticleData(ParticleID::a_1plus);
tPDPtr a1m = getParticleData(ParticleID::a_1minus);
tPDPtr a10 = getParticleData(ParticleID::a_10);
if(icharge==3) {
swap(rhop,rhom);
swap(a1p,a1m);
}
int rhoCharge;
tPDPtr rho;
tPDPtr rhoin;
// first the a1 channels
for(unsigned int irho=0;irho<3;++irho) {
tPDPtr rhoin = icharge==0 ? rho0[irho] : rhom[irho];
- if(resonance && rhoin!=resonance) continue;
+ if(resonance && rhoin!=resonance) {
+ nchan+=8;
+ continue;
+ }
int a1Charge;
tPDPtr a1;
for(unsigned int irho2=0;irho2<2;++irho2) {
// // find the a1
a1Charge = outgoing[j1-1]->iCharge()+outgoing[j2-1]->iCharge()+outgoing[j4-1]->iCharge();
a1 = a1Charge==0 ? a10 : a1p;
if(a1->iCharge()!=a1Charge) a1=a1m;
+ assert(abs(a1Charge)<=3);
// find the rho
rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j4-1]->iCharge();
rho = rhoCharge==0 ? rho0[irho2] : rhop[irho2];
if(rho->iCharge()!=rhoCharge) rho = rhom[irho2];
+ assert(abs(rhoCharge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,a1,ires+1,iloc+j3,
ires+2,rho,ires+2,iloc+j2,ires+3,iloc+j1,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
// find the rho
if(imode!=4) {
rhoCharge = outgoing[j2-1]->iCharge()+outgoing[j4-1]->iCharge();
rho = rhoCharge==0 ? rho0[irho2] : rhop[irho2];
if(rho->iCharge()!=rhoCharge) rho = rhom[irho2];
+ assert(abs(rhoCharge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,a1,ires+1,iloc+j3,
ires+2,rho,ires+2,iloc+j1,ires+3,iloc+j2,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
}
+ else ++nchan;
// find the second a1
a1Charge = outgoing[j1-1]->iCharge()+outgoing[j2-1]->iCharge()+outgoing[j3-1]->iCharge();
a1 = a1Charge==0 ? a10 : a1p;
if(a1->iCharge()!=a1Charge) a1=a1m;
+ assert(abs(a1Charge)<=3);
// find the rho
if(imode!=4) {
rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j3-1]->iCharge();
rho = rhoCharge==0 ? rho0[irho2] : rhop[irho2];
if(rho->iCharge()!=rhoCharge) rho = rhom[irho2];
+ assert(abs(rhoCharge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,a1,ires+1,iloc+j4,
ires+2,rho,ires+2,iloc+j2,ires+3,iloc+j1,ires+3,iloc+j3));
+ ++nchan; channelMap_[imode].push_back(nchan);
}
+ else
+ ++nchan;
// find the rho
if(imode!=1) {
rhoCharge = outgoing[j2-1]->iCharge()+outgoing[j3-1]->iCharge();
rho = rhoCharge==0 ? rho0[irho2] : rhop[irho2];
if(rho->iCharge()!=rhoCharge) rho = rhom[irho2];
+ assert(abs(rhoCharge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,a1,ires+1,iloc+j4,
ires+2,rho,ires+2,iloc+j1,ires+3,iloc+j2,ires+3,iloc+j3));
+ ++nchan; channelMap_[imode].push_back(nchan);
}
+ else
+ ++nchan;
}
}
// now the f_0 channel
for(unsigned int irho=0;irho<3;++irho) {
tPDPtr rhoin = icharge==0 ? rho0[irho] : rhom[irho];
if(resonance && rhoin!=resonance) continue;
rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j2-1]->iCharge();
for(unsigned int irho2=0;irho2<3;++irho2) {
rho= rhoCharge==0 ? rho0[irho2] : rhop[irho2];
if(rho->iCharge()!=rhoCharge) rho = rhom[irho2];
+ assert(abs(rhoCharge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,rho,ires+1,f0,
ires+2,iloc+j1,ires+2,iloc+j2,ires+3,iloc+j3,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
}
}
// now the omega channels
if(imode>=1&&imode<=3) {
for(unsigned int irho=0;irho<3;++irho) {
tPDPtr rhoin = icharge==0 ? rho0[irho] : rhom[irho];
if(resonance && rhoin!=resonance) continue;
- rhoCharge = outgoing[j2-1]->iCharge()+outgoing[j3-1]->iCharge();
+ if(imode!=1) {
+ rhoCharge = outgoing[j2-1]->iCharge()+outgoing[j3-1]->iCharge();
+ rho= rhoCharge==0 ? rho0[0] : rhop[0];
+ if(rho->iCharge()!=rhoCharge) rho = rhom[0];
+ assert(abs(rhoCharge)<=3);
+ mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j1,
+ ires+2,rho,ires+2,iloc+j4,ires+3,iloc+j2,ires+3,iloc+j3));
+ ++nchan; channelMap_[imode].push_back(nchan);
+ rhoCharge = outgoing[j2-1]->iCharge()+outgoing[j4-1]->iCharge();
+ rho= rhoCharge==0 ? rho0[0] : rhop[0];
+ if(rho->iCharge()!=rhoCharge) rho = rhom[0];
+ assert(abs(rhoCharge)<=3);
+ mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j1,
+ ires+2,rho,ires+2,iloc+j3,ires+3,iloc+j2,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
+ rhoCharge = outgoing[j3-1]->iCharge()+outgoing[j4-1]->iCharge();
+ rho= rhoCharge==0 ? rho0[0] : rhop[0];
+ if(rho->iCharge()!=rhoCharge) rho = rhom[0];
+ assert(abs(rhoCharge)<=3);
+ mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j1,
+ ires+2,rho,ires+2,iloc+j2,ires+3,iloc+j3,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
+ }
+ else nchan+=3;
+ rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j3-1]->iCharge();
rho= rhoCharge==0 ? rho0[0] : rhop[0];
if(rho->iCharge()!=rhoCharge) rho = rhom[0];
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j1,
- ires+2,rho,ires+2,iloc+j4,ires+3,iloc+j2,ires+3,iloc+j3));
- rhoCharge = outgoing[j2-1]->iCharge()+outgoing[j4-1]->iCharge();
+ assert(abs(rhoCharge)<=3);
+ mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j2,
+ ires+2,rho,ires+2,iloc+j4,ires+3,iloc+j1,ires+3,iloc+j3));
+ ++nchan; channelMap_[imode].push_back(nchan);
+ rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j4-1]->iCharge();
rho= rhoCharge==0 ? rho0[0] : rhop[0];
if(rho->iCharge()!=rhoCharge) rho = rhom[0];
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j1,
- ires+2,rho,ires+2,iloc+j3,ires+3,iloc+j2,ires+3,iloc+j4));
+ assert(abs(rhoCharge)<=3);
+ mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j2,
+ ires+2,rho,ires+2,iloc+j3,ires+3,iloc+j1,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
rhoCharge = outgoing[j3-1]->iCharge()+outgoing[j4-1]->iCharge();
rho= rhoCharge==0 ? rho0[0] : rhop[0];
if(rho->iCharge()!=rhoCharge) rho = rhom[0];
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j1,
- ires+2,rho,ires+2,iloc+j2,ires+3,iloc+j3,ires+3,iloc+j4));
- rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j3-1]->iCharge();
- rho= rhoCharge==0 ? rho0[0] : rhop[0];
- if(rho->iCharge()!=rhoCharge) rho = rhom[0];
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j2,
- ires+2,rho,ires+2,iloc+j4,ires+3,iloc+j1,ires+3,iloc+j3));
- rhoCharge = outgoing[j1-1]->iCharge()+outgoing[j4-1]->iCharge();
- rho= rhoCharge==0 ? rho0[0] : rhop[0];
- if(rho->iCharge()!=rhoCharge) rho = rhom[0];
- mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j2,
- ires+2,rho,ires+2,iloc+j3,ires+3,iloc+j1,ires+3,iloc+j4));
- rhoCharge = outgoing[j3-1]->iCharge()+outgoing[j4-1]->iCharge();
- rho= rhoCharge==0 ? rho0[0] : rhop[0];
- if(rho->iCharge()!=rhoCharge) rho = rhom[0];
+ assert(abs(rhoCharge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,omega,ires+1,iloc+j2,
ires+2,rho,ires+2,iloc+j1,ires+3,iloc+j3,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
}
}
+ else
+ nchan+=18;
// the rho channels cancel for -000 and ++--
- if(imode==0 || imode>3) return;
+ if(imode==0 || imode>3) {
+ nchan+=16;
+ return;
+ }
// rho channels
for(unsigned int irho=0;irho<2;++irho) {
tPDPtr rhoin = icharge==0 ? rho0[irho] : rhom[irho];
if(resonance && rhoin!=resonance) continue;
for(unsigned int irho1=0;irho1<2;++irho1) {
for(unsigned int irho2=0;irho2<2;++irho2) {
int rho1Charge = outgoing[j1-1]->iCharge()+outgoing[j3-1]->iCharge();
tPDPtr rho1= rho1Charge==0 ? rho0[irho1] : rhop[irho1];
if(rho1->iCharge()!=rho1Charge) rho1 = rhom[irho1];
assert(abs(rho1Charge)<=3);
int rho2Charge = outgoing[j2-1]->iCharge()+outgoing[j4-1]->iCharge();
tPDPtr rho2= rho2Charge==0 ? rho0[irho2] : rhop[irho2];
if(rho2->iCharge()!=rho2Charge) rho2 = rhom[irho2];
assert(abs(rho2Charge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,rho1,ires+1,rho2,
ires+2,iloc+j1,ires+2,iloc+j3,ires+3,iloc+j2,ires+3,iloc+j4));
+ ++nchan; channelMap_[imode].push_back(nchan);
assert(icharge==rho1Charge+rho2Charge);
if(imode!=1) {
rho1Charge = outgoing[j1-1]->iCharge()+outgoing[j4-1]->iCharge();
rho1= rho1Charge==0 ? rho0[irho1] : rhop[irho1];
if(rho1->iCharge()!=rho1Charge) rho1 = rhom[irho1];
assert(abs(rho1Charge)<=3);
rho2Charge = outgoing[j2-1]->iCharge()+outgoing[j3-1]->iCharge();
rho2= rho2Charge==0 ? rho0[irho2] : rhop[irho2];
if(rho2->iCharge()!=rho2Charge) rho2 = rhom[irho2];
assert(abs(rho2Charge)<=3);
mode->addChannel((PhaseSpaceChannel(phase),ires,rhoin,ires+1,rho1,ires+1,rho2,
ires+2,iloc+j1,ires+2,iloc+j4,ires+3,iloc+j2,ires+3,iloc+j3));
+ ++nchan; channelMap_[imode].push_back(nchan);
assert(icharge==rho1Charge+rho2Charge);
}
+ else
+ ++nchan;
}
}
}
}
// complete the construction of the decay mode for integration
bool FourPionCzyzCurrent::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((abs(icharge)!=3&&imode<2) ||
(imode>=2&&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;
}
}
// check that the modes are kinematical allowed
Energy min(ZERO);
if(imode==0) min = mpip_+3.*mpi0_;
else if(imode==1) min = 3.*mpip_+ mpi0_;
else if(imode==2||imode==3) min = 2.*mpip_+2.*mpi0_;
else min = 4.*mpip_;
if(min>upp) return false;
// resonances we need
// get the external particles
int iq(0),ia(0);
tPDVector outgoing = particles(icharge,imode,iq,ia);
+ int nchan(-1);
+ channelMap_[imode].clear();
if(imode==0) {
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,4,1,2);
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,4,1,3);
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,3,1,4);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,4,1,2,nchan);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,4,1,3,nchan);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,3,1,4,nchan);
}
else if(imode==1) {
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,2,1,4);
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,1,2,4);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,2,1,4,nchan);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,1,2,4,nchan);
}
// pi0 pi0 pi+ pi-
else if(imode==2||imode==3) {
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,4,1,2);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,3,4,1,2,nchan);
}
else {
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,4,1,3);
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,1,4,2,3);
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,3,1,4);
- createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,1,3,2,4);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,4,1,3,nchan);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,1,4,2,3,nchan);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,2,3,1,4,nchan);
+ createChannels(imode,icharge,resonance,iloc,ires,outgoing,mode,phase,1,3,2,4,nchan);
}
return true;
}
// the particles produced by the current
tPDVector FourPionCzyzCurrent::particles(int icharge, unsigned int imode,
int,int) {
tPDVector output(4);
tPDPtr pi0=getParticleData(ParticleID::pi0);
tPDPtr pip=getParticleData(ParticleID::piplus);
tPDPtr pim=pip->CC();
if(imode==0) {
output[0]=pim;
output[1]=pi0;
output[2]=pi0;
output[3]=pi0;
}
else if(imode==1) {
output[0]=pim;
output[1]=pim;
output[2]=pip;
output[3]=pi0;
}
else if(imode==2||imode==3) {
output[0]=pip;
output[1]=pim;
output[2]=pi0;
output[3]=pi0;
}
else {
output[0]=pip;
output[1]=pip;
output[2]=pim;
output[3]=pim;
}
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 output;
}
// hadronic current
vector<LorentzPolarizationVectorE>
FourPionCzyzCurrent::current(tcPDPtr resonance,
IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
const int imode, const int ichan,Energy & scale,
const tPDVector & outgoing,
const vector<Lorentz5Momentum> & momenta,
DecayIntegrator2::MEOption) const {
int icharge(0);
for(tPDPtr out : outgoing) icharge+=out->iCharge();
// check the total isospin
if(Itotal!=IsoSpin::IUnknown) {
if(Itotal!=IsoSpin::IOne) return vector<LorentzPolarizationVectorE>();
}
// 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>();
}
}
useMe();
// the momenta of the particles
Lorentz5Momentum q1(momenta[0]);
Lorentz5Momentum q2(momenta[1]);
Lorentz5Momentum q3(momenta[2]);
Lorentz5Momentum q4(momenta[3]);
Lorentz5Momentum Q(q1+q2+q3+q4);
Q.rescaleMass();
scale = Q.mass();
LorentzVector<complex<InvEnergy> > output;
+ assert(ichan<int(channelMap_[imode].size()));
+ int ichannelB = ichan<0 ? -1 : channelMap_[imode][ichan];
if(imode==0) {
- if(ichan<51)
- output += baseCurrent(Q.mass2(),resonance,ichan ,Q,q3,q4,q1,q2);
- if(ichan<0 || (ichan>=51&&ichan<102))
- output += baseCurrent(Q.mass2(),resonance,ichan-51,Q,q2,q4,q1,q3);
- if(ichan<0 || ichan>=102)
- output += baseCurrent(Q.mass2(),resonance,ichan-102,Q,q2,q3,q1,q4);
+ if(ichannelB<51)
+ output += baseCurrent(Q.mass2(),resonance,ichannelB ,Q,q3,q4,q1,q2);
+ if(ichannelB<0 || (ichannelB>=67&&ichannelB<133))
+ output += baseCurrent(Q.mass2(),resonance,ichannelB-67,Q,q2,q4,q1,q3);
+ if(ichannelB<0 || ichannelB>=133)
+ output += baseCurrent(Q.mass2(),resonance,ichannelB-133,Q,q2,q3,q1,q4);
output *= sqrt(1./3.);
}
else if(imode==1) {
- if(ichan<117)
- output += baseCurrent(Q.mass2(),resonance,ichan,Q,q3,q2,q1,q4);
- if(ichan<0||ichan>=117)
- output += baseCurrent(Q.mass2(),resonance,ichan-117,Q,q3,q1,q2,q4);
+ if(ichannelB<117)
+ output += baseCurrent(Q.mass2(),resonance,ichannelB,Q,q3,q2,q1,q4);
+ if(ichannelB<0||ichannelB>=67)
+ output += baseCurrent(Q.mass2(),resonance,ichannelB-67,Q,q3,q1,q2,q4);
}
else if(imode==2||imode==3) {
- output = baseCurrent(Q.mass2(),resonance,ichan,Q,q3,q4,q1,q2);
+ output = baseCurrent(Q.mass2(),resonance,ichannelB,Q,q3,q4,q1,q2);
}
else if(imode==4||imode==5) {
- if(ichan<51)
- output += baseCurrent(Q.mass2(),resonance,ichan ,Q,q2,q4,q1,q3);
- if(ichan<0 || (ichan>=51&&ichan<102))
- output += baseCurrent(Q.mass2(),resonance,ichan-51 ,Q,q1,q4,q2,q3);
- if(ichan<0 || (ichan>=102&&ichan<153))
- output += baseCurrent(Q.mass2(),resonance,ichan-102,Q,q2,q3,q1,q4);
- if(ichan<0 || ichan>=153)
- output += baseCurrent(Q.mass2(),resonance,ichan-153,Q,q1,q3,q2,q4);
+ if(ichannelB<67)
+ output += baseCurrent(Q.mass2(),resonance,ichannelB ,Q,q2,q4,q1,q3);
+ if(ichannelB<0 || (ichannelB>=67&&ichannelB<133))
+ output += baseCurrent(Q.mass2(),resonance,ichannelB-67 ,Q,q1,q4,q2,q3);
+ if(ichannelB<0 || (ichannelB>=133&&ichannelB<200))
+ output += baseCurrent(Q.mass2(),resonance,ichannelB-133,Q,q2,q3,q1,q4);
+ if(ichannelB<0 || ichannelB>=200)
+ output += baseCurrent(Q.mass2(),resonance,ichannelB-200,Q,q1,q3,q2,q4);
}
return vector<LorentzPolarizationVectorE>(1,output*Q.mass2());
}
bool FourPionCzyzCurrent::accept(vector<int> id) {
bool allowed(false);
// check four products
if(id.size()!=4){return false;}
int npiminus=0,npiplus=0,npi0=0;
for(unsigned int ix=0;ix<id.size();++ix) {
if(id[ix]==ParticleID:: piplus) ++npiplus;
else if(id[ix]==ParticleID::piminus) ++npiminus;
else if(id[ix]==ParticleID::pi0) ++npi0;
}
if(npiminus==2&&npiplus==1&&npi0==1) allowed=true;
else if(npiminus==1&&npi0==3) allowed=true;
else if(npiplus==2&&npiminus==1&&npi0==1) allowed=true;
else if(npiplus==1&&npi0==3) allowed=true;
else if(npiplus==2&&npiminus==2) allowed=true;
else if(npiplus==1&&npiminus==1&&npi0==2) allowed=true;
return allowed;
}
// the decay mode
unsigned int FourPionCzyzCurrent::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==1) return 0;
else if(npi==2) return 2;
else if(npi==3) return 1;
else return 4;
}
// output the information for the database
void FourPionCzyzCurrent::dataBaseOutput(ofstream & output,bool header,
bool create) const {
if(header) output << "update decayers set parameters=\"";
if(create) output << "create Herwig::FourPionCzyzCurrent "
<< name() << " HwWeakCurrents.so\n";
for(unsigned int ix=0;ix<rhoMasses_.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":RhoMasses " << ix << " " << rhoMasses_[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<rhoWidths_.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":RhoWidths " << ix << " " << rhoWidths_[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<rhoMasses_.size();++ix) {
if(ix<4) output << "newdef ";
else output << "insert ";
output << name() << ":RhoMassesFrho " << ix << " " << rhoMasses_Frho_[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<rhoWidths_.size();++ix) {
if(ix<4) output << "newdef ";
else output << "insert ";
output << name() << ":RhoWidthsFrho " << ix << " " << rhoWidths_Frho_[ix]/GeV << "\n";
}
output << "newdef " << name() << ":omegaMass " << omegaMass_/GeV << "\n";
output << "newdef " << name() << ":omegaWidth " << omegaWidth_/GeV << "\n";
output << "newdef " << name() << ":f0Mass " << f0Mass_/GeV << "\n";
output << "newdef " << name() << ":f0Width " << f0Width_/GeV << "\n";
output << "newdef " << name() << ":a1Mass " << a1Mass_/GeV << "\n";
output << "newdef " << name() << ":a1Width " << a1Width_/GeV << "\n";
for(unsigned int ix=0;ix<beta_a1_.size();++ix) {
if(ix<4) output << "newdef ";
else output << "insert ";
output << name() << ":beta_a1 " << ix << " " << beta_a1_[ix] << "\n";
}
for(unsigned int ix=0;ix<beta_f0_.size();++ix) {
if(ix<4) output << "newdef ";
else output << "insert ";
output << name() << ":beta_f0 " << ix << " " << beta_f0_[ix] << "\n";
}
for(unsigned int ix=0;ix<beta_omega_.size();++ix) {
if(ix<4) output << "newdef ";
else output << "insert ";
output << name() << ":beta_omega " << ix << " " << beta_omega_[ix] << "\n";
}
for(unsigned int ix=0;ix<beta_B_.size();++ix) {
if(ix<2) output << "newdef ";
else output << "insert ";
output << name() << ":beta_B " << ix << " " << beta_B_[ix] << "\n";
}
for(unsigned int ix=0;ix<beta_bar_.size();++ix) {
if(ix<3) output << "newdef ";
else output << "insert ";
output << name() << ":beta_bar " << ix << " " << beta_bar_[ix] << "\n";
}
output << "newdef " << name() << ":c_a1 " << c_a1_*GeV2 << "\n";
output << "newdef " << name() << ":c_f0 " << c_f0_*GeV2 << "\n";
output << "newdef " << name() << ":c_omega " << c_omega_*GeV << "\n";
output << "newdef " << name() << ":c_rho " << c_rho_ << "\n";
output << "newdef " << name() << ":g_rho_pi_pi " << g_rho_pi_pi_ << "\n";
output << "newdef " << name() << ":g_omega_pi_rho "
<< g_omega_pi_rho_*GeV2*GeV2*GeV << "\n";
output << "newdef " << name() << ":g_rho_gamma "
<<g_rho_gamma_/GeV2 << "\n";
WeakCurrent::dataBaseOutput(output,false,false);
if(header) output << "\n\" where BINARY ThePEGName=\""
<< fullName() << "\";" << endl;
}
LorentzVector<complex<InvEnergy> > FourPionCzyzCurrent::
baseCurrent(Energy2 Q2, tcPDPtr resonance,const int ichan,
const Lorentz5Momentum & Q , const Lorentz5Momentum & q1,
const Lorentz5Momentum & q2, const Lorentz5Momentum & q3,
const Lorentz5Momentum & q4) const {
// check the resonance
int ires0(-1);
if(resonance) {
switch(resonance->id()/1000) {
case 0:
ires0=0;
break;
case 100:
ires0=1;
break;
case 30 :
ires0=2;
break;
default:
assert(false);
}
}
// various dot products we'll need
Energy2 m12 = sqr(q1.mass()), m22 = sqr(q2.mass());
Energy2 m32 = sqr(q3.mass()), m42 = sqr(q4.mass());
Energy2 Qq1 = Q*q1, Qq2 = Q*q2, Qq3 = Q*q3, Qq4 = Q*q4;
Energy2 Qm32= Q2-2.*Qq3+m32;
Energy2 Qm42= Q2-2.*Qq4+m42;
Energy2 q1q2 = q1*q2, q1q3 = q1*q3, q1q4 = q1*q4;
Energy2 q2q3 = q2*q3, q2q4 = q2*q4, q3q4 = q3*q4;
// coefficients of the momenta
complex<InvEnergy2> c1(ZERO),c2(ZERO),c34(ZERO),cq(ZERO),c3(ZERO),c4(ZERO);
// first the a_1 terms from A.3 0804.0359 (N.B. sign due defns)
// common coefficent
if(ichan<24) {
int ires1(-1),ires2(-1),iterm(-1);
if(ichan>=0) {
ires1 = ichan/8;
ires2 = (ichan/4)%2;
iterm = ichan%4;
}
if(ires0>=0 && ires1<0) ires1=ires0;
complex<InvEnergy2> a1_fact;
if(ires1<0) {
a1_fact = -c_a1_*
Resonance::F_rho(Q2,beta_a1_,rhoMasses_Frho_,
rhoWidths_Frho_,mpip_,mpip_);
}
else {
if(ires0<0 || ires0==ires1) {
a1_fact = -c_a1_*beta_a1_[ires1]*
Resonance::BreitWignerPWave(Q2,rhoMasses_Frho_[ires1],rhoWidths_Frho_[ires1],mpip_,mpip_)
/std::accumulate(beta_a1_.begin(),beta_a1_.end(),0.);
}
else
a1_fact=ZERO;
}
// first 2 terms
if(iterm<2) {
Complex bw_a1_Qm3 = Resonance::BreitWignera1(Qm32,a1Mass_,a1Width_);
// first term
if(iterm<=0) {
Complex Brhoq1q4(0.);
if(ires2<0) {
Brhoq1q4 = bw_a1_Qm3*
Resonance::F_rho(m12+m42+2.*q1q4,beta_B_,rhoMasses_,rhoWidths_,mpip_,mpip_);
}
else {
Brhoq1q4 = bw_a1_Qm3*beta_B_[ires2]*
Resonance::BreitWignerPWave(m12+m42+2.*q1q4,rhoMasses_[ires2],rhoWidths_[ires2],mpip_,mpip_)/
std::accumulate(beta_B_.begin(),beta_B_.end(),0.);
}
double dot1 = (q1q2-q2q4)/Qm32;
double dot1B = (Qq1-Qq4)/Q2;
double dot1C = Qq3/Q2*dot1;
// coefficients of the momenta to construct the current
c1 += 0.5*a1_fact*Brhoq1q4*( 3.-dot1);
c2 += 0.5*a1_fact*Brhoq1q4*( 1.-dot1);
c34+= 0.5*a1_fact*Brhoq1q4*( 1.+dot1);
cq += 0.5*a1_fact*Brhoq1q4*(-1.+dot1-2.*dot1B-2.*dot1C);
}
// second term
if(iterm<0||iterm==1) {
Complex Brhoq2q4(0.);
if(ires2<0) {
Brhoq2q4= bw_a1_Qm3*
Resonance::F_rho(m12+m42+2.*q2q4,beta_B_,rhoMasses_,rhoWidths_,mpip_,mpip_);
}
else {
Brhoq2q4= bw_a1_Qm3*beta_B_[ires2]*
Resonance::BreitWignerPWave(m12+m42+2.*q2q4,rhoMasses_[ires2],rhoWidths_[ires2],mpip_,mpip_)/
std::accumulate(beta_B_.begin(),beta_B_.end(),0.);
}
double dot2 = (q1q2-q1q4)/Qm32;
double dot2B = (Qq2-Qq4)/Q2;
double dot2C = Qq3/Q2*dot2;
// coefficients of the momenta to construct the current
// a_1 terms
c1 += 0.5*a1_fact*Brhoq2q4*( 1.-dot2);
c2 += 0.5*a1_fact*Brhoq2q4*( 3.-dot2);
c34+= 0.5*a1_fact*Brhoq2q4*( 1.+dot2);
cq += 0.5*a1_fact*Brhoq2q4*(-1.+dot2-2.*dot2B-2.*dot2C);
}
}
// second 2 terms
if(iterm<0||iterm>=2) {
Complex bw_a1_Qm4 = Resonance::BreitWignera1(Qm42,a1Mass_,a1Width_);
// third term
if(iterm<0||iterm==2) {
Complex Brhoq1q3(0.);
if(ires2<0) {
Brhoq1q3 = bw_a1_Qm4*
Resonance::F_rho(m12+m32+2.*q1q3,beta_B_,rhoMasses_,rhoWidths_,mpip_,mpip_);
}
else {
Brhoq1q3 = bw_a1_Qm4*beta_B_[ires2]*
Resonance::BreitWignerPWave(m12+m32+2.*q1q3,rhoMasses_[ires2],rhoWidths_[ires2],mpip_,mpip_)/
std::accumulate(beta_B_.begin(),beta_B_.end(),0.);
}
double dot3 = (q1q2-q2q3)/Qm42;
double dot3B = (Qq1-Qq3)/Q2;
double dot3C = Qq4/Q2*dot3;
// coefficients of the momenta to construct the current
// a_1 terms
c1 += 0.5*a1_fact*Brhoq1q3*(-3.+dot3);
c2 += 0.5*a1_fact*Brhoq1q3*(-1.+dot3);
c34+= 0.5*a1_fact*Brhoq1q3*( 1.+dot3);
cq += 0.5*a1_fact*Brhoq1q3*( 1.-dot3+2.*dot3B+2.*dot3C);
}
// fourth term
if(iterm<0||iterm==3) {
Complex Brhoq2q3(0.);
if(ires2<0) {
Brhoq2q3 = bw_a1_Qm4*
Resonance::F_rho(m12+m32+2.*q2q3,beta_B_,rhoMasses_,rhoWidths_,mpip_,mpip_);
}
else {
Brhoq2q3 = bw_a1_Qm4*beta_B_[ires2]*
Resonance::BreitWignerPWave(m12+m32+2.*q2q3,rhoMasses_[ires2],rhoWidths_[ires2],mpip_,mpip_)/
std::accumulate(beta_B_.begin(),beta_B_.end(),0.);
}
double dot4 = (q1q2-q1q3)/Qm42;
double dot4B = (Qq2-Qq3)/Q2;
double dot4C = Qq4/Q2*dot4;
// coefficients of the momenta to construct the current
// a_1 terms
c1 += 0.5*a1_fact*Brhoq2q3*(-1.+dot4);
c2 += 0.5*a1_fact*Brhoq2q3*(-3.+dot4);
c34+= 0.5*a1_fact*Brhoq2q3*( 1.+dot4);
cq += 0.5*a1_fact*Brhoq2q3*( 1.-dot4+2.*dot4B+2.*dot4C);
}
}
}
// f_0
if(ichan<0 || (ichan>=24 && ichan<33) ) {
int ires1(-1),ires2(-2);
if(ichan>0) {
ires1 = (ichan-24)/3;
ires2 = (ichan-24)%3;
}
Complex rho1(0.);
if(ires0>=0 && ires1<0) ires1=ires0;
if(ires1<0) {
rho1 = Resonance::F_rho(Q2,beta_f0_,rhoMasses_Frho_,rhoWidths_Frho_,mpip_,mpip_);
}
else {
if(ires0<0 || ires0==ires1) {
rho1 = beta_f0_[ires1]*Resonance::BreitWignerPWave(Q2,rhoMasses_Frho_[ires1],rhoWidths_Frho_[ires1],mpip_,mpip_)/
std::accumulate(beta_f0_.begin(),beta_f0_.end(),0.);
}
else
rho1=0.;
}
Complex rho2(0.);
if(ires2<0) {
rho2 = Resonance::F_rho(m32+m42+2.*q3q4,beta_bar_,rhoMasses_,rhoWidths_,mpip_,mpip_);
}
else {
rho2 = beta_bar_[ires2]*Resonance::BreitWignerPWave(m32+m42+2.*q3q4,rhoMasses_[ires2],rhoWidths_[ires2],mpip_,mpip_)/
std::accumulate(beta_bar_.begin(),beta_bar_.end(),0.);
}
complex<InvEnergy2> f0fact = c_f0_*rho1*rho2*
Resonance::BreitWignerSWave(m12+m22+2.*q1q2,f0Mass_,f0Width_,mpip_,mpip_);
// add contribution to the coefficients
c34 -= f0fact;
cq += f0fact*(Qq3-Qq4)/Q2;
}
// omega
- if(ichan<0 || (ichan>=33&&ichan<=51) ) {
+ if(ichan<0 || (ichan>=33&&ichan<=50) ) {
int ires1(-1),iterm(-1);
if(ichan>0) {
ires1 = (ichan-33)/6;
iterm = (ichan-33)%6;
}
Complex rho1(0.);
if(ires0>=0 && ires1<0) ires1=ires0;
if(ires1<0) {
rho1 = Resonance::F_rho(Q2,beta_omega_,rhoMasses_Frho_,rhoWidths_Frho_,mpip_,mpip_);
}
else {
if(ires0<0 || ires0==ires1) {
rho1 = beta_omega_[ires1]*Resonance::BreitWignerPWave(Q2,rhoMasses_Frho_[ires1],rhoWidths_Frho_[ires1],mpip_,mpip_)/
std::accumulate(beta_omega_.begin(),beta_omega_.end(),0.);
}
else
rho1=0.;
}
complex<ThePEG::Qty<std::ratio<0,1>, std::ratio<-6,1>, std::ratio<0,1> > >
wfact = 2.*c_omega_*g_omega_pi_rho_*g_rho_pi_pi_*rho1;
if(iterm<3) {
Complex Hterm(0.);
if(iterm<0) {
Hterm = Resonance::H(rhoMasses_[0],rhoWidths_[0],m22+2.*q2q3+m32,m22+2.*q2q4+m42,
m32+2.*q3q4+m42,mpip_,mpip_);
}
else if(iterm==0)
Hterm = Resonance::BreitWignerPWave(m22+2.*q2q3+m32,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_);
else if(iterm==1)
Hterm = Resonance::BreitWignerPWave(m22+2.*q2q4+m42,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_);
else if(iterm==2)
Hterm = Resonance::BreitWignerPWave(m32+2.*q3q4+m42,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_);
else
assert(false);
complex<ThePEG::Qty<std::ratio<0,1>, std::ratio<-6,1>, std::ratio<0,1> > >
bw_omega_1 = wfact*Resonance::BreitWignerFW(m12-2.*Qq1+Q2,omegaMass_,omegaWidth_)*Hterm;
c2 -= bw_omega_1*(q1q4*Qq3-q1q3*Qq4);
c3 -= bw_omega_1*(q1q2*Qq4-q1q4*Qq2);
c4 -= bw_omega_1*(q1q3*Qq2-q1q2*Qq3);
}
if(iterm<0||iterm>=3) {
Complex Hterm(0.);
if(iterm<0) {
Hterm = Resonance::H(rhoMasses_[0],rhoWidths_[0],m12+2.*q1q3+m32,m12+2.*q1q4+m42,
m32+2.*q3q4+m42,mpip_,mpip_);
}
else if(iterm==3)
Hterm = Resonance::BreitWignerPWave(m12+2.*q1q3+m32,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_);
else if(iterm==4)
Hterm = Resonance::BreitWignerPWave(m12+2.*q1q4+m42,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_);
else if(iterm==5)
Hterm = Resonance::BreitWignerPWave(m32+2.*q3q4+m42,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_);
else
assert(false);
complex<ThePEG::Qty<std::ratio<0,1>, std::ratio<-6,1>, std::ratio<0,1> > >
bw_omega_2 = wfact*Resonance::BreitWignerFW(m22-2.*Qq2+Q2,omegaMass_,omegaWidth_)*Hterm;
c1 -= bw_omega_2*(q2q4*Qq3-q2q3*Qq4);
c3 -= bw_omega_2*(q1q2*Qq4-q2q4*Qq1);
c4 -= bw_omega_2*(q2q3*Qq1-q1q2*Qq3);
}
}
// the rho term
LorentzVector<complex<InvEnergy> > v_rho;
if(ichan<0||ichan>=51) {
int ires1(-1),ires2(-1),ires3(-1),iterm(-1);
if(ichan>0) {
- ires1 = (ichan-51)/32;
- ires2 = ((ichan-51)/16)%2;
- ires3 = ((ichan-51)/8)%2;
- iterm = (ichan-51)%8;
+ ires1 = (ichan-51)/8;
+ ires2 = ((ichan-51)/4)%2;
+ ires3 = ((ichan-51)/2)%2;
+ iterm = (ichan-51)%2;
}
// prefactor
complex<InvEnergy2> rho1;
if(ires0>=0 && ires1<0) ires1=ires0;
if(ires1<0) {
rho1 = Resonance::BreitWignerDiff(Q2,rhoMasses_[0],rhoWidths_[0],
rhoMasses_[1],rhoWidths_[1],mpip_,mpip_);
}
else {
if(ires0<0 || ires0==ires1) {
if(ires1==0)
rho1 = Resonance::BreitWignerPWave(Q2,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
else if(ires1==1)
rho1 = -Resonance::BreitWignerPWave(Q2,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
else
rho1 = ZERO;
}
else
rho1 = ZERO;
}
Complex pre_rho = c_rho_*pow(g_rho_pi_pi_,3)*g_rho_gamma_*rho1;
- complex<InvEnergy2> BW12_q1q3_A(ZERO),BW12_q1q3_B(ZERO),BW12_q1q4_A(ZERO),BW12_q1q4_B(ZERO),
- BW12_q2q3_A(ZERO),BW12_q2q3_B(ZERO),BW12_q2q4_A(ZERO),BW12_q2q4_B(ZERO);
+ complex<InvEnergy2> BW12_q1q3_A(ZERO),BW12_q1q4_A(ZERO),BW12_q2q3_B(ZERO),BW12_q2q4_B(ZERO);
if(ires2<0) {
BW12_q1q3_A = Resonance::BreitWignerDiff(m12+m32+2.*q1q3,rhoMasses_[0],rhoWidths_[0],
rhoMasses_[1],rhoWidths_[1],mpip_,mpip_);
BW12_q1q4_A = Resonance::BreitWignerDiff(m12+m42+2.*q1q4,rhoMasses_[0],rhoWidths_[0],
rhoMasses_[1],rhoWidths_[1],mpip_,mpip_);
- BW12_q2q3_A = Resonance::BreitWignerDiff(m22+m32+2.*q2q3,rhoMasses_[0],rhoWidths_[0],
+ BW12_q2q3_B = Resonance::BreitWignerDiff(m22+m32+2.*q2q3,rhoMasses_[0],rhoWidths_[0],
rhoMasses_[1],rhoWidths_[1],mpip_,mpip_);
- BW12_q2q4_A = Resonance::BreitWignerDiff(m22+m42+2.*q2q4,rhoMasses_[0],rhoWidths_[0],
+
+ BW12_q2q4_B = Resonance::BreitWignerDiff(m22+m42+2.*q2q4,rhoMasses_[0],rhoWidths_[0],
rhoMasses_[1],rhoWidths_[1],mpip_,mpip_);
+
}
else {
if(ires2==0) {
BW12_q1q3_A = Resonance::BreitWignerPWave(m12+m32+2.*q1q3,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
BW12_q1q4_A = Resonance::BreitWignerPWave(m12+m42+2.*q1q4,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
- BW12_q2q3_A = Resonance::BreitWignerPWave(m22+m32+2.*q2q3,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
- BW12_q2q4_A = Resonance::BreitWignerPWave(m22+m42+2.*q2q4,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
}
else {
BW12_q1q3_A = -Resonance::BreitWignerPWave(m12+m32+2.*q1q3,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
BW12_q1q4_A = -Resonance::BreitWignerPWave(m12+m42+2.*q1q4,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
- BW12_q2q3_A = -Resonance::BreitWignerPWave(m22+m32+2.*q2q3,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
- BW12_q2q4_A = -Resonance::BreitWignerPWave(m22+m42+2.*q2q4,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
}
}
- if(ires3<0 || ires3==ires2) {
- BW12_q1q3_B = BW12_q1q3_A;
- BW12_q1q4_B = BW12_q1q4_A;
- BW12_q2q3_B = BW12_q2q3_A;
- BW12_q2q4_B = BW12_q2q4_A;
- }
- else {
+ if(ires3>=0) {
if(ires3==0) {
- BW12_q1q3_B = Resonance::BreitWignerPWave(m12+m32+2.*q1q3,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
- BW12_q1q4_B = Resonance::BreitWignerPWave(m12+m42+2.*q1q4,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
BW12_q2q3_B = Resonance::BreitWignerPWave(m22+m32+2.*q2q3,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
BW12_q2q4_B = Resonance::BreitWignerPWave(m22+m42+2.*q2q4,rhoMasses_[0],rhoWidths_[0],mpip_,mpip_)/sqr(rhoMasses_[0]);
}
else {
- BW12_q1q3_B = -Resonance::BreitWignerPWave(m12+m32+2.*q1q3,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
- BW12_q1q4_B = -Resonance::BreitWignerPWave(m12+m42+2.*q1q4,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
BW12_q2q3_B = -Resonance::BreitWignerPWave(m22+m32+2.*q2q3,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
BW12_q2q4_B = -Resonance::BreitWignerPWave(m22+m42+2.*q2q4,rhoMasses_[1],rhoWidths_[1],mpip_,mpip_)/sqr(rhoMasses_[1]);
}
}
// now the various terms
if(iterm<=0) {
Energy2 d1 = Qq2 - Qq4 + 2.*q2q3 - 2.*q3q4;
v_rho += pre_rho*BW12_q1q3_A*(BW12_q2q4_B*d1 + 2.)*q1;
}
+ if(iterm<=0) {
+ Energy2 d5 = Qq1 - Qq3 + 2.*q1q2 - 2.*q2q3;
+ v_rho += pre_rho*BW12_q2q4_B*(BW12_q1q3_A*d5 + 2.)*q4;
+ }
if(iterm<0||iterm==1) {
- Energy2 d5 = Qq1 - Qq3 + 2.*q1q2 - 2.*q2q3;
- v_rho += pre_rho*BW12_q2q4_A*(BW12_q1q3_B*d5 + 2.)*q4;
- }
- if(iterm<0||iterm==2) {
Energy2 d2 = Qq2 - Qq3 + 2.*q2q4 - 2.*q3q4;
v_rho -= pre_rho*BW12_q1q4_A*(BW12_q2q3_B*d2 + 2.)*q1;
}
- if(iterm<0||iterm==3) {
+ if(iterm<0||iterm==1) {
Energy2 d7 = Qq1 - Qq4 + 2.*q1q2 - 2.*q2q4;
- v_rho -= pre_rho*BW12_q2q3_A*(BW12_q1q4_B*d7 + 2.)*q3;
+ v_rho -= pre_rho*BW12_q2q3_B*(BW12_q1q4_A*d7 + 2.)*q3;
}
- if(iterm<0||iterm==4) {
+ if(iterm<0||iterm==1) {
Energy2 d3 = Qq1 - Qq4 + 2.*q1q3 - 2.*q3q4;
- v_rho += pre_rho*BW12_q2q3_A*(BW12_q1q4_B*d3 + 2.)*q2;
+ v_rho += pre_rho*BW12_q2q3_B*(BW12_q1q4_A*d3 + 2.)*q2;
}
- if(iterm<0||iterm==5) {
+ if(iterm<0||iterm==1) {
Energy2 d6 = Qq2 - Qq3 + 2.*q1q2 - 2.*q1q3;
v_rho += pre_rho*BW12_q1q4_A*(BW12_q2q3_B*d6 + 2.)*q4;
}
- if(iterm<0||iterm==6) {
+ if(iterm<=0) {
Energy2 d4 = Qq1 - Qq3 + 2.*q1q4 - 2.*q3q4;
- v_rho -= pre_rho*BW12_q2q4_A*(BW12_q1q3_B*d4 + 2.)*q2;
+ v_rho -= pre_rho*BW12_q2q4_B*(BW12_q1q3_A*d4 + 2.)*q2;
}
- if(iterm<0||iterm==7) {
+ if(iterm<=0) {
Energy2 d8 = Qq2 - Qq4 + 2.*q1q2 - 2.*q1q4;
v_rho -= pre_rho*BW12_q1q3_A*(BW12_q2q4_B*d8 + 2.)*q3;
}
complex<InvEnergy2> vdot = (Q*v_rho)/Q2;
v_rho = -v_rho + vdot*Q;
}
// put everything together
return c1*q1+c2*q2+(c3+c34)*q3+(c4-c34)*q4+cq*Q+v_rho;
}
diff --git a/Decay/WeakCurrents/FourPionCzyzCurrent.h b/Decay/WeakCurrents/FourPionCzyzCurrent.h
--- a/Decay/WeakCurrents/FourPionCzyzCurrent.h
+++ b/Decay/WeakCurrents/FourPionCzyzCurrent.h
@@ -1,330 +1,335 @@
// -*- C++ -*-
#ifndef Herwig_FourPionCzyzCurrent_H
#define Herwig_FourPionCzyzCurrent_H
//
// This is the declaration of the FourPionCzyzCurrent class.
//
#include "WeakCurrent.h"
namespace Herwig {
using namespace ThePEG;
/** \ingroup Decay
*
* The FourMesonCzyzCurrent class implements the currents from Phys.Rev. D77 (2008) 114005
* for 4 pions
* @see WeakCurrent.
* @see \ref FourPionCzyzCurrentInterfaces "The interfaces"
* defined for FourPionCzyzCurrent.
*
*/
class FourPionCzyzCurrent: public WeakCurrent {
public:
/**
* The default constructor.
*/
FourPionCzyzCurrent();
/** @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 );
/**
* The particles produced by the current. This just returns the two pseudoscalar
* mesons and the photon.
* @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);
//@}
/**
* 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,
DecayIntegrator2::MEOption meopt) const;
/**
* Accept the decay. Checks the particles are the allowed mode.
* @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.
* @param id The id's of the particles in the current.
* @return The number of the mode
*/
virtual unsigned int decayMode(vector<int> id);
/**
* 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;
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:
/**
* Create the channels for 1 term in the current
*/
void createChannels(unsigned int imode,
int icharge, tcPDPtr resonance,
unsigned int iloc,int ires,
tPDVector outgoing, PhaseSpaceModePtr mode,
PhaseSpaceChannel channel,
unsigned int j1, unsigned int j2,
- unsigned int j3, unsigned int j4);
+ unsigned int j3, unsigned int j4,
+ int & nchan);
/**
* Basis current in terms of which all the others can be calculated
*/
LorentzVector<complex<InvEnergy> > baseCurrent(Energy2 Q2,
tcPDPtr resonance,
const int ichan,
const Lorentz5Momentum & Q,
const Lorentz5Momentum & q1,
const Lorentz5Momentum & q2,
const Lorentz5Momentum & q3,
const Lorentz5Momentum & q4) const;
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();
//@}
private:
/**
* The assignment operator is private and must never be called.
* In fact, it should not even be implemented.
*/
FourPionCzyzCurrent & operator=(const FourPionCzyzCurrent &);
private:
/**
* Masses and widths of the particles
*/
//@{
/**
* Rho masses (PDG for most of current)
*/
vector<Energy> rhoMasses_;
/**
* Rho widths (PDG for most of current)
*/
vector<Energy> rhoWidths_;
/**
* Rho masses for the \f$F_\rho\f$ piece
*/
vector<Energy> rhoMasses_Frho_;
/**
* Rho widths for the \f$F_\rho\f$ piece
*/
vector<Energy> rhoWidths_Frho_;
/**
* Omega mass
*/
Energy omegaMass_;
/**
* Omega widths
*/
Energy omegaWidth_;
/**
* \f$f_0\f$ mass
*/
Energy f0Mass_;
/**
* \f$f_0\f$ width
*/
Energy f0Width_;
/**
* \f$a_1\f$ mass
*/
Energy a1Mass_;
/**
* \f$a_1\f$ width
*/
Energy a1Width_;
//@}
/**
* Couplings in the model
*/
//@{
/**
* Coefficents for sum over \f$\rho\f$ resonances in \f$a_1\f$ term
*/
vector<double> beta_a1_;
/**
* Coefficents for sum over \f$\rho\f$ resonances in \f$f_0\f$ term
*/
vector<double> beta_f0_;
/**
* Coefficents for sum over \f$\rho\f$ resonances in \f$\omega\f$ term
*/
vector<double> beta_omega_;
/**
* Coefficents for sum over \f$\rho\f$ resonances in \f$B_\rho\f$ term
*/
vector<double> beta_B_;
/**
* Coefficents for sum over \f$\rho\f$ resonances in \f$T_\rho\f$ term
*/
vector<double> beta_bar_;
/**
* Coupling for the \f$a_1\f$ term
*/
InvEnergy2 c_a1_;
/**
* Coupling for the \f$f_0\f$ term
*/
InvEnergy2 c_f0_;
/**
* Coupling for the \f$\omega\f$ term
*/
InvEnergy c_omega_;
/**
* Coupling for the \f\rho\f$ term
*/
double c_rho_;
/**
* \f$g_{\rho\pi\pi}\f$
*/
double g_rho_pi_pi_;
/**
* \f$g_{\omega\pi\prho}\f$
*/
ThePEG::Qty<std::ratio<0,1>, std::ratio<-5,1>, std::ratio<0,1> > g_omega_pi_rho_;
/**
* \f$g_{\rho\gamma}\f$
*/
Energy2 g_rho_gamma_;
//@}
/**
* Pion masses
*/
Energy mpip_, mpi0_;
+ /**
+ * Map for the phase-space channels
+ */
+ vector<vector<int> > channelMap_;
};
}
#endif /* Herwig_FourPionCzyzCurrent_H */
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Feb 24, 6:43 AM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4494603
Default Alt Text
(59 KB)
Attached To
rHERWIGHG herwighg
Event Timeline
Log In to Comment