Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F7879790
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
View Options
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
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Nov 19, 9:01 PM (1 d, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3806194
Default Alt Text
(9 KB)
Attached To
R563 testingHerwigHG
Event Timeline
Log In to Comment