herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
OneKaonTwoPionDefaultCurrent.h
1// -*- C++ -*-
2//
3// OneKaonTwoPionDefaultCurrent.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_OneKaonTwoPionDefaultCurrent_H
10#define HERWIG_OneKaonTwoPionDefaultCurrent_H
11//
12// This is the declaration of the OneKaonTwoPionDefaultCurrent class.
13//
14#include "WeakCurrent.h"
15#include "Herwig/Utilities/Interpolator.h"
16#include "Herwig/Utilities/Kinematics.h"
17#include "ThePEG/StandardModel/StandardModelBase.h"
18#include "Herwig/Decay/ResonanceHelpers.h"
19#include <numeric>
20
21namespace Herwig {
22using namespace ThePEG;
23
44
45public:
46
51
65 virtual vector<LorentzPolarizationVectorE>
66 current(tcPDPtr resonance,
67 FlavourInfo flavour,
68 const int imode, const int ichan,Energy & scale,
69 const tPDVector & outgoing,
70 const vector<Lorentz5Momentum> & momenta,
71 DecayIntegrator::MEOption meopt) const;
72
78 virtual bool accept(vector<int> id);
79
86 virtual unsigned int decayMode(vector<int> id);
87
96 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
97
98public:
99
107
113 void persistentInput(PersistentIStream & is, int version);
115
119 static void Init();
120
121public:
122
143 virtual bool createMode(int icharge, tcPDPtr resonance,
144 FlavourInfo flavour,
145 unsigned int imode,PhaseSpaceModePtr mode,
146 unsigned int iloc,int ires,
147 PhaseSpaceChannel phase, Energy upp );
149
156 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
157
158protected:
159
166 virtual IBPtr clone() const {return new_ptr(*this);}
167
172 virtual IBPtr fullclone() const {return new_ptr(*this);}
174
175protected:
176
182 virtual void doinit();
183
184private:
185
190
191private:
192
199 Complex BrhoF123(Energy2 q2,int ires) const {
200 if(ires>=int(_rhoF123wgts.size())) return 0.;
201 Complex output(0.);
202 Complex norm = std::accumulate(_rhoF123wgts.begin(),
203 _rhoF123wgts.end(),Complex(0.));
204 unsigned int imin=0,imax=_rhoF123wgts.size();
205 if(ires>0) {
206 imin=ires;
207 imax=imin+1;
208 }
209 for(unsigned int ix=imin;ix<imax;++ix)
210 output+=_rhoF123wgts[ix]*Resonance::BreitWignerPWave(q2,_rhoF123masses[ix],
212 return output/norm;
213 }
214
221 Complex BKstarF123(Energy2 q2,int ires) const {
222 if(ires>=int(_kstarF123wgts.size())) return 0.;
223 Complex output(0.);
224 Complex norm = std::accumulate(_kstarF123wgts.begin(),
225 _kstarF123wgts.end(),Complex(0.));
226 unsigned int imin=0,imax=_kstarF123wgts.size();
227 if(ires>0) {
228 imin=ires;
229 imax=imin+1;
230 }
231 assert(imax<=_kstarF123wgts.size());
232 for(unsigned int ix=imin;ix<imax;++ix)
233 output+=_kstarF123wgts[ix]*Resonance::BreitWignerPWave(q2,_kstarF123masses[ix],
235 return output/norm;
236 }
237
245 Complex FKrho(Energy2 si,Energy2 sj,int ires) const {
246 Complex output;
247 if(ires<0)
248 output = _rhoKstarwgt*BKstarF123(si,-1)+BrhoF123(sj,-1);
249 else if(ires%2==0)
250 output= _rhoKstarwgt*BKstarF123(si,ires/2);
251 else if(ires%2==1)
252 output=BrhoF123(sj,ires/2);
253 return output/(1.+_rhoKstarwgt);
254 }
255
256private:
257
262 vector<double> _rhoF123wgts;
263
268 vector<double> _kstarF123wgts;
269
274 vector<double> _kstarF5wgts;
275
280
284 Energy _k1mass;
285
289 Energy _k1width;
290
294 Energy _fpi;
295
299 Energy _mpi;
300
304 Energy _mK;
305
309 vector<Energy> _rhoF123masses;
310
314 vector<Energy> _rhoF123widths;
315
319 vector<Energy> _kstarF123masses;
320
324 vector<Energy> _kstarF5masses;
325
329 vector<Energy> _kstarF123widths;
330
334 vector<Energy> _kstarF5widths;
335};
336
337}
338
339#endif /* HERWIG_OneKaonTwoPionDefaultCurrent_H */
MEOption
Enum for the matrix element option.
The OneKaonTwoPionDefaultCurrent class implements the currents from Z.Phys.C58:445 (1992),...
Complex BrhoF123(Energy2 q2, int ires) const
The Breit-Wigner for the form factors.
vector< double > _rhoF123wgts
Parameters for the Breit-Wigner in the form factors.
virtual void doinit()
Initialize this object after the setup phase before saving and EventGenerator to disk.
vector< Energy > _rhoF123widths
The widths for the form factors.
OneKaonTwoPionDefaultCurrent & operator=(const OneKaonTwoPionDefaultCurrent &)=delete
Private and non-existent assignment operator.
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.
static void Init()
Standard Init function used to initialize the interfaces.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
vector< Energy > _rhoF123masses
The masses for the form factors.
vector< Energy > _kstarF123masses
The masses for the form factors.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia)
The particles produced by the current.
virtual bool accept(vector< int > id)
Accept the decay.
Energy _k1width
The width of the resonances.
vector< Energy > _kstarF5widths
The widths for the form factors.
virtual unsigned int decayMode(vector< int > id)
Return the decay mode number for a given set of particles in the current.
OneKaonTwoPionDefaultCurrent()
Default constructor.
virtual IBPtr clone() const
Make a simple clone of this object.
vector< Energy > _kstarF123widths
The widths for the form factors.
vector< Energy > _kstarF5masses
The masses for the form factors.
Energy _k1mass
The mass of the resonances.
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.
vector< double > _kstarF123wgts
Parameters for the Breit-Wigner in the form factors.
double _rhoKstarwgt
The relative weight of the and where needed.
virtual void dataBaseOutput(ofstream &os, bool header, bool create) const
Output the setup information for the particle database.
Complex BKstarF123(Energy2 q2, int ires) const
The Breit-Wigner for the form factors.
Complex FKrho(Energy2 si, Energy2 sj, int ires) const
Mixed Breit Wigner for the form factor.
vector< double > _kstarF5wgts
Parameters for the Breit-Wigner in the form factors.
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