herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
OneKaonTwoPionCurrent.h
1// -*- C++ -*-
2//
3// OneKaonTwoPionCurrent.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4// Copyright (C) 2002-2019 The Herwig Collaboration
5//
6// Herwig is licenced under version 3 of the GPL, see COPYING for details.
7// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8//
9#ifndef HERWIG_OneKaonTwoPionCurrent_H
10#define HERWIG_OneKaonTwoPionCurrent_H
11//
12// This is the declaration of the OneKaonTwoPionCurrent class.
13//
14
15#include "WeakCurrent.h"
16#include "Herwig/Decay/ResonanceHelpers.h"
17#include <numeric>
18
19namespace Herwig {
20
21using namespace ThePEG;
22
72
73public:
74
79
100 virtual bool createMode(int icharge, tcPDPtr resonance,
101 FlavourInfo flavour,
102 unsigned int imode,PhaseSpaceModePtr mode,
103 unsigned int iloc,int ires,
104 PhaseSpaceChannel phase, Energy upp );
106
107
121 virtual vector<LorentzPolarizationVectorE>
122 current(tcPDPtr resonance,
123 FlavourInfo flavour,
124 const int imode, const int ichan,Energy & scale,
125 const tPDVector & outgoing,
126 const vector<Lorentz5Momentum> & momenta,
127 DecayIntegrator::MEOption meopt) const;
128
134 virtual bool accept(vector<int> id);
135
142 virtual unsigned int decayMode(vector<int> id);
143
152 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
153
160 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
161
162public:
163
171
177 void persistentInput(PersistentIStream & is, int version);
179
186 static void Init();
187
188protected:
189
196 virtual IBPtr clone() const;
197
202 virtual IBPtr fullclone() const;
204
205protected:
206
212 virtual void doinit();
213
214private:
215
221
222private:
223
229 Complex Trho1(Energy2 q2,int ires) const {
230 if(ires>=int(_rho1wgts.size())) return 0.;
231 double norm = std::accumulate(_rho1wgts.begin(),_rho1wgts.end(),0.);
232 unsigned int imin=0,imax=_rho1wgts.size();
233 if(ires>0) {
234 imin=ires;
235 imax=imin+1;
236 }
237 Complex output(0.);
238 for(unsigned int ix=imin;ix<imax;++ix)
239 output+=_rho1wgts[ix]*
240 Resonance::BreitWignerPWave(q2,_rho1mass[ix],_rho1width[ix],_mpi,_mpi);
241 return output/norm;
242 }
243
249 Complex TKstar1(Energy2 q2,int ires) const {
250 if(ires>=int(_kstar1wgts.size())) return 0.;
251 double norm = std::accumulate(_kstar1wgts.begin(),_kstar1wgts.end(),0.);
252 unsigned int imin=0,imax=_kstar1wgts.size();
253 if(ires>0) {
254 imin=ires;
255 imax=imin+1;
256 }
257 Complex output(0.);
258 for(unsigned int ix=imin;ix<imax;++ix)
259 output+=_kstar1wgts[ix]*
260 Resonance::BreitWignerPWave(q2,_kstar1mass[ix],_kstar1width[ix],_mK,_mpi);
261 return output/norm;
262 }
263
269 Complex TKstar2(Energy2 q2,int ires) const {
270 if(ires>=int(_kstar2wgts.size())) return 0.;
271 double norm = std::accumulate(_kstar2wgts.begin(),_kstar2wgts.end(),0.);
272 unsigned int imin=0,imax=_kstar2wgts.size();
273 if(ires>0) {
274 imin=ires;
275 imax=imin+1;
276 }
277 Complex output(0.);
278 for(unsigned int ix=imin;ix<imax;++ix)
279 output+=_kstar2wgts[ix]*
280 Resonance::BreitWignerPWave(q2,_kstar2mass[ix],_kstar2width[ix],_mK,_mpi);
281 return output/norm;
282 }
283
290 Complex TK1(Energy2 q2,unsigned int iopt,int ires) const;
291
292private:
293
301 vector<double> _rho1wgts;
302
306 vector<Energy> _rho1mass;
307
311 vector<Energy> _rho1width;
313
321 vector<double> _kstar1wgts;
322
326 vector<Energy> _kstar1mass;
327
331 vector<Energy> _kstar1width;
333
341 vector<double> _kstar2wgts;
342
346 vector<Energy> _kstar2mass;
347
351 vector<Energy> _kstar2width;
353
358
362 vector<Energy> _k1mass;
363
367 vector<Energy> _k1width;
368
372 vector<double> _k1wgta;
373
377 vector<double> _k1wgtb;
379
383 Energy _fpi;
384
388 Energy _mpi;
389
393 Energy _mK;
395};
396
397}
398
399#endif /* HERWIG_OneKaonTwoPionCurrent_H */
MEOption
Enum for the matrix element option.
The OneKaonTwoPionCurrent class implements the model of M.
vector< Energy > _kstar1width
Widths.
virtual bool accept(vector< int > id)
Accept the decay.
virtual unsigned int decayMode(vector< int > id)
Return the decay mode number for a given set of particles in the current.
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia)
The particles produced by the current.
vector< double > _k1wgtb
The weights for the different resonaces for .
virtual void dataBaseOutput(ofstream &os, bool header, bool create) const
Output the setup information for the particle database.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
static void Init()
The standard Init function used to initialize the interfaces.
vector< Energy > _k1width
The widths of the resonances.
Complex TKstar2(Energy2 q2, int ires) const
The lineshape for the vector terms.
vector< Energy > _rho1width
Widths.
vector< Energy > _kstar2mass
Masses.
vector< double > _k1wgta
The weights for the different resonances for .
vector< Energy > _rho1mass
Masses.
vector< double > _kstar1wgts
Parameters for the in the axial-vector terms.
vector< Energy > _kstar1mass
Masses.
Energy _fpi
The pion decay constant, .
virtual void doinit()
Initialize this object after the setup phase before saving and EventGenerator to disk.
Complex TK1(Energy2 q2, unsigned int iopt, int ires) const
The line shape.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
vector< double > _kstar2wgts
Parameters for the in the vector terms.
virtual vector< LorentzPolarizationVectorE > current(tcPDPtr resonance, FlavourInfo flavour, const int imode, const int ichan, Energy &scale, const tPDVector &outgoing, const vector< Lorentz5Momentum > &momenta, DecayIntegrator::MEOption meopt) const
Hadronic current.
Complex TKstar1(Energy2 q2, int ires) const
The lineshape for the axial-vector terms.
vector< double > _rho1wgts
Parameters for the in the axial-vector terms.
OneKaonTwoPionCurrent & operator=(const OneKaonTwoPionCurrent &)=delete
The assignment operator is private and must never be called.
OneKaonTwoPionCurrent()
The default constructor.
virtual IBPtr clone() const
Make a simple clone of this object.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Complex Trho1(Energy2 q2, int ires) const
The lineshape for the axial-vector terms.
vector< Energy > _k1mass
Parameters for the three meson resonances.
vector< Energy > _kstar2width
Widths.
virtual bool createMode(int icharge, tcPDPtr resonance, FlavourInfo flavour, unsigned int imode, PhaseSpaceModePtr mode, unsigned int iloc, int ires, PhaseSpaceChannel phase, Energy upp)
Complete the construction of the decay mode for integration.classes inheriting from this one.
This class is designed to store the information needed for a given phase-space channel for use by the...
The WeakCurrent class is the base class for the hadronic currents produced in weak decays.
Definition: WeakCurrent.h:59
-*- C++ -*-
std::complex< double > Complex
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< tPDPtr > tPDVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr