Page MenuHomeHEPForge

No OneTemporary

diff --git a/Decay/WeakCurrents/EtaPhiCurrent.cc b/Decay/WeakCurrents/EtaPhiCurrent.cc
--- a/Decay/WeakCurrents/EtaPhiCurrent.cc
+++ b/Decay/WeakCurrents/EtaPhiCurrent.cc
@@ -1,267 +1,266 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the EtaPhiCurrent class.
//
#include "EtaPhiCurrent.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Repository/UseRandom.h"
#include "ThePEG/Repository/EventGenerator.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
EtaPhiCurrent::EtaPhiCurrent() {
addDecayMode(3,-3);
setInitialModes(3);
// Masses for the resonances
- resMasses_ = {1.670*GeV};
+ resMasses_ = {1.670*GeV,2.14*GeV};
// widths for the resonances
- resWidths_ = {124*MeV};
+ resWidths_ = {122*MeV,43.5*MeV};
// amplitudes
- amp_ = {0.177/GeV};
+ amp_ = {0.175/GeV,0.00409/GeV};
// phases
- phase_ = {0.};
+ phase_ = {0.,2.19};
}
IBPtr EtaPhiCurrent::clone() const {
return new_ptr(*this);
}
IBPtr EtaPhiCurrent::fullclone() const {
return new_ptr(*this);
}
void EtaPhiCurrent::doinit() {
WeakCurrent::doinit();
assert(phase_.size()==amp_.size());
couplings_.clear();
Complex ii(0.,1.);
for(unsigned int ix=0;ix<amp_.size();++ix) {
- double phi = phase_[ix]/180.*Constants::pi;
- couplings_.push_back(amp_[ix]*(cos(phi)+ii*sin(phi)));
+ couplings_.push_back(amp_[ix]*(cos(phase_[ix])+ii*sin(phase_[ix])));
}
}
void EtaPhiCurrent::persistentOutput(PersistentOStream & os) const {
os << ounit(resMasses_,GeV) << ounit(resWidths_,GeV)
<< ounit(amp_,1./GeV) << phase_ << ounit(couplings_,1./GeV);
}
void EtaPhiCurrent::persistentInput(PersistentIStream & is, int) {
is >> iunit(resMasses_,GeV) >> iunit(resWidths_,GeV)
>> iunit(amp_,1./GeV) >> phase_ >> iunit(couplings_,1./GeV);
}
// The following static variable is needed for the type
// description system in ThePEG.
DescribeClass<EtaPhiCurrent,WeakCurrent>
describeHerwigEtaPhiCurrent("Herwig::EtaPhiCurrent",
"HwWeakCurrents.so");
void EtaPhiCurrent::Init() {
static ClassDocumentation<EtaPhiCurrent> documentation
("The EtaPhiCurrent class implements a current based"
" on the model of SND for eta + phi "
"The current based on the model of \\cite{Achasov:2018ygm}"
" for eta and phi was used.",
"\\bibitem{Achasov:2018ygm}\n"
"M.~N.~Achasov {\\it et al.},\n"
"%``Measurement of the $e^+e^−\\to\\eta K^+K^−$ Cross Section by Means of the SND Detector,''\n"
"Phys.\\ Atom.\\ Nucl.\\ {\\bf 81} (2018) no.2, 205\n"
" [Yad.\\ Fiz.\\ {\\bf 81} (2018) no.2, 195].\n"
"doi:10.1134/S1063778818020023\n"
"%%CITATION = doi:10.1134/S1063778818020023;%%\n");
static ParVector<EtaPhiCurrent,Energy> interfaceResonanceMasses
("ResonanceMasses",
"The masses of the resonances for the form factor",
&EtaPhiCurrent::resMasses_, GeV, 1, 1680*MeV, 0.5*GeV, 10.0*GeV,
false, false, Interface::limited);
static ParVector<EtaPhiCurrent,Energy> interfaceResonanceWidths
("ResonanceWidths",
"The widths of the resonances for the form factor",
&EtaPhiCurrent::resWidths_, GeV, 1, 150*MeV, 0.5*GeV, 10.0*GeV,
false, false, Interface::limited);
static ParVector<EtaPhiCurrent,InvEnergy> interfaceAmplitude
("Amplitude",
"The amplitudes of the couplings",
&EtaPhiCurrent::amp_, 0.00115/GeV, 1, 1./GeV, 0.0/GeV, 10/GeV,
false, false, Interface::limited);
static ParVector<EtaPhiCurrent,double> interfacePhase
("Phase",
- "The phases of the couplings in degrees",
- &EtaPhiCurrent::phase_, 1, 0., 0.0, 360.0,
+ "The phases of the couplings in radians",
+ &EtaPhiCurrent::phase_, 1, 0., 0.0, 2.*Constants::pi,
false, false, Interface::limited);
}
// complete the construction of the decay mode for integration
bool EtaPhiCurrent::createMode(int icharge, tcPDPtr resonance,
IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
unsigned int, PhaseSpaceModePtr mode,
unsigned int iloc,int ires,
PhaseSpaceChannel phase, Energy upp ) {
// check the charge
if(icharge!=0) return false;
// check the total isospin
if(Itotal!=IsoSpin::IUnknown) {
if(Itotal!=IsoSpin::IZero) return false;
}
// check I_3
if(i3!=IsoSpin::I3Unknown) {
if(i3!=IsoSpin::I3Zero) return false;
}
// check that the mode is are kinematical allowed
Energy min = getParticleData(ParticleID::eta)->mass()+
getParticleData(ParticleID::phi)->massMin();
if(min>upp) return false;
// resonances for the intermediate channels
tPDVector res = {getParticleData(100333)};
// set up the integration channels;
for(unsigned int ix=0;ix<res.size();++ix) {
if(resonance && resonance!=res[ix]) continue;
mode->addChannel((PhaseSpaceChannel(phase),ires,res[ix],
ires+1,iloc+1,ires+1,iloc+2));
}
// reset the masses and widths of the resonances if needed
for(unsigned int ix=0;ix<res.size();++ix) {
mode->resetIntermediate(res[ix],resMasses_[ix],resWidths_[ix]);
}
return true;
}
// the particles produced by the current
tPDVector EtaPhiCurrent::particles(int icharge, unsigned int imode,int,int) {
assert(icharge==0 && imode<=1);
return {getParticleData(ParticleID::eta),getParticleData(ParticleID::phi)};
}
void EtaPhiCurrent::constructSpinInfo(ParticleVector decay) const {
vector<LorentzPolarizationVector> temp(3);
for(unsigned int ix=0;ix<3;++ix) {
temp[ix] = HelicityFunctions::polarizationVector(-decay[1]->momentum(),
ix,Helicity::outgoing);
}
ScalarWaveFunction::constructSpinInfo(decay[0],outgoing,true);
VectorWaveFunction::constructSpinInfo(temp,decay[1],
outgoing,true,true);
}
// the hadronic currents
vector<LorentzPolarizationVectorE>
EtaPhiCurrent::current(tcPDPtr resonance,
IsoSpin::IsoSpin Itotal, IsoSpin::I3 i3,
const int, const int ichan, Energy & scale,
const tPDVector & ,
const vector<Lorentz5Momentum> & momenta,
DecayIntegrator::MEOption) const {
// check the total isospin
if(Itotal!=IsoSpin::IUnknown) {
if(Itotal!=IsoSpin::IZero) return vector<LorentzPolarizationVectorE>();
}
// check I_3
if(i3!=IsoSpin::I3Unknown) {
if(i3!=IsoSpin::I3Zero) return vector<LorentzPolarizationVectorE>();
}
useMe();
// polarization vectors of the photon
vector<LorentzPolarizationVector> temp(3);
for(unsigned int ix=0;ix<3;++ix) {
temp[ix] = HelicityFunctions::polarizationVector(-momenta[1],ix,Helicity::outgoing);
}
// total momentum of the system
Lorentz5Momentum q(momenta[0]+momenta[1]);
// overall hadronic mass
q.rescaleMass();
scale=q.mass();
Energy2 q2(q.m2());
unsigned int imin = 0;
unsigned int imax = couplings_.size();
if(ichan>0) {
imin = ichan;
imax = imin+1;
}
if(resonance) {
switch(abs(resonance->id())) {
- case 100223:
+ case 100333:
imin=0;
break;
default:
assert(false);
}
imax=imin+1;
}
// compute the form factor
complex<InvEnergy> formFactor(ZERO);
// loop over the resonances
for(unsigned int ix=imin;ix<imax;++ix) {
Energy2 mR2(sqr(resMasses_[ix]));
// compute the width
Energy width = resWidths_[ix];
formFactor += couplings_[ix]*mR2/(mR2-q2-Complex(0.,1.)*q.mass()*width);
}
// calculate the current
vector<LorentzPolarizationVectorE> ret(3);
for(unsigned int ix=0;ix<3;++ix) {
ret[ix] += formFactor*Helicity::epsilon(q,temp[ix],momenta[1]);
}
return ret;
}
bool EtaPhiCurrent::accept(vector<int> id) {
if(id.size()!=2) return false;
unsigned int neta(0),nphi(0);
for(unsigned int ix=0;ix<id.size();++ix) {
if(abs(id[ix])==ParticleID::eta) ++neta;
else if(id[ix]==ParticleID::phi) ++nphi;
}
return nphi == 1 && neta==1;
}
unsigned int EtaPhiCurrent::decayMode(vector<int>) {
return 0;
}
// output the information for the database
void EtaPhiCurrent::dataBaseOutput(ofstream & output,bool header,
bool create) const {
if(header) output << "update decayers set parameters=\"";
if(create) output << "create Herwig::EtaPhiCurrent " << name()
<< " HwWeakCurrents.so\n";
for(unsigned int ix=0;ix<resMasses_.size();++ix) {
if(ix<1) output << "newdef " << name() << ":ResonanceMasses " << ix
<< " " << resMasses_[ix]/GeV << "\n";
else output << "insert " << name() << ":ResonanceMasses " << ix
<< " " << resMasses_[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<resWidths_.size();++ix) {
if(ix<1) output << "newdef " << name() << ":ResonanceWidths " << ix
<< " " << resWidths_[ix]/GeV << "\n";
else output << "insert " << name() << ":ResonanceWidths " << ix
<< " " << resWidths_[ix]/GeV << "\n";
}
for(unsigned int ix=0;ix<amp_.size();++ix) {
if(ix<1) output << "newdef " << name() << ":Amplitude " << ix
<< " " << amp_[ix]*GeV << "\n";
else output << "insert " << name() << ":Amplitude " << ix
<< " " << amp_[ix]*GeV << "\n";
}
for(unsigned int ix=0;ix<phase_.size();++ix) {
if(ix<1) output << "newdef " << name() << ":Phase " << ix
<< " " << phase_[ix] << "\n";
else output << "insert " << name() << ":Phase " << ix
<< " " << phase_[ix] << "\n";
}
WeakCurrent::dataBaseOutput(output,false,false);
if(header) output << "\n\" where BINARY ThePEGName=\""
<< fullName() << "\";" << endl;
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 9:01 PM (1 d, 2 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3806194
Default Alt Text
(9 KB)

Event Timeline