herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
FivePionCurrent.h
1// -*- C++ -*-
2//
3// FivePionCurrent.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_FivePionCurrent_H
10#define HERWIG_FivePionCurrent_H
11//
12// This is the declaration of the FivePionCurrent class.
13//
14
15#include "WeakCurrent.h"
16#include "ThePEG/Helicity/epsilon.h"
17
18namespace Herwig {
19
20using namespace ThePEG;
21
29
30public:
31
36
57 virtual bool createMode(int icharge, tcPDPtr resonance,
58 FlavourInfo flavour,
59 unsigned int imode,PhaseSpaceModePtr mode,
60 unsigned int iloc,int ires,
61 PhaseSpaceChannel phase, Energy upp );
62
71 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
73
87 virtual vector<LorentzPolarizationVectorE>
88 current(tcPDPtr resonance,
89 FlavourInfo flavour,
90 const int imode, const int ichan,Energy & scale,
91 const tPDVector & outgoing,
92 const vector<Lorentz5Momentum> & momenta,
93 DecayIntegrator::MEOption meopt) const;
94
100 virtual bool accept(vector<int> id);
101
107 virtual unsigned int decayMode(vector<int> id);
108
115 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
116
117public:
118
126
132 void persistentInput(PersistentIStream & is, int version);
134
141 static void Init();
142
143protected:
144
154 Complex rhoBreitWigner(Energy2 scale) const {
155 Energy2 m2=sqr(_rhomass);
156 return m2/(m2-scale-Complex(0.,1.)*_rhomass*_rhowidth);
157 }
158
163 Complex a1BreitWigner(Energy2 scale) const {
164 Energy2 m2=sqr(_a1mass);
165 return m2/(m2-scale-Complex(0.,1.)*_a1mass*_a1width);
166 }
167
172 Complex omegaBreitWigner(Energy2 scale) const {
173 Energy2 m2=sqr(_omegamass);
174 return m2/(m2-scale-Complex(0.,1.)*_omegamass*_omegawidth);
175 }
176
181 Complex sigmaBreitWigner(Energy2 scale) const {
182 Energy2 m2=sqr(_sigmamass);
183 return m2/(m2-scale-Complex(0.,1.)*_sigmamass*_sigmawidth);
184 }
186
203 rhoOmegaCurrent(unsigned int iopt,
204 const Lorentz5Momentum & Q,
205 const Lorentz5Momentum & q1,
206 const Lorentz5Momentum & q2,
207 const Lorentz5Momentum & q3,
208 const Lorentz5Momentum & q4,
209 const Lorentz5Momentum & q5) const {
210 // prefactor
211 complex<InvEnergy7> pre(_preomega*a1BreitWigner(Q.m2())*
212 omegaBreitWigner((q1+q2+q3).m2())*
213 rhoBreitWigner((q4+q5).m2()));
214 // omega piece
215 Complex omega(-1.);
216 if(_rhoomega) {
217 if(iopt==1) omega=rhoBreitWigner((q2+q3).m2());
218 else if(iopt==2) omega=rhoBreitWigner((q1+q3).m2());
219 else if(iopt==3) omega=rhoBreitWigner((q1+q2).m2());
220 else
221 omega=rhoBreitWigner((q2+q3).m2())+rhoBreitWigner((q1+q3).m2())+
222 rhoBreitWigner((q1+q2).m2());
223 }
224 LorentzVector<complex<Energy3> > omegacurrent(Helicity::epsilon(q1,q2,q3));
226 pre * omega * Helicity::epsilon(q4-q5,omegacurrent,Q);
227 return output;
228 }
229
242 a1SigmaCurrent(unsigned int iopt,
243 const Lorentz5Momentum & Q,
244 const Lorentz5Momentum & q1,
245 const Lorentz5Momentum & q2,
246 const Lorentz5Momentum & q3,
247 const Lorentz5Momentum & q4,
248 const Lorentz5Momentum & q5) const {
249 Lorentz5Momentum pa1(q1+q2+q3);pa1.rescaleMass();
250 Energy2 ma12(pa1.m2());
251 complex<InvEnergy3> pre(_presigma*a1BreitWigner(Q.m2())*a1BreitWigner(ma12)*
252 sigmaBreitWigner((q4+q5).m2()));
253 Energy2 pdot[2]={q2*(q1-q3),q1*(q2-q3)};
255 {(pdot[0]/ma12*pa1-q1+q3)*rhoBreitWigner((q1+q3).m2()),
256 (pdot[1]/ma12*pa1-q2+q3)*rhoBreitWigner((q2+q3).m2())};
258 if(iopt==1) total = rho[0];
259 else if(iopt==2) total = rho[1];
260 else total = rho[0]+rho[1];
261 Complex qdot = total * Q / Q.m2();
263 cq = cq * qdot;
264 cq -= total;
265 return pre * cq;
266 }
268
269protected:
270
277 virtual IBPtr clone() const {return new_ptr(*this);}
278
283 virtual IBPtr fullclone() const {return new_ptr(*this);}
285
286protected:
287
295 virtual void doinit();
297
298private:
299
305
306private:
307
315 Energy _rhomass;
316
320 Energy _a1mass;
321
326
331
335 Energy _rhowidth;
336
340 Energy _a1width;
341
346
352
357
362
370 Energy2 _c;
371
375 double _c0;
376
380 InvEnergy _fomegarhopi;
381
385 double _grhopipi;
386
390 Energy _garhopi;
391
395 Energy _faaf;
396
400 Energy _ffpipi;
402
410 InvEnergy7 _preomega;
411
415 InvEnergy3 _presigma;
417};
418
419}
420
421#endif /* HERWIG_FivePionCurrent_H */
MEOption
Enum for the matrix element option.
Here is the documentation of the FivePionCurrent class.
Energy _faaf
The parameter.
FivePionCurrent & operator=(const FivePionCurrent &)=delete
The assignment operator is private and must never be called.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Energy _rhowidth
The width for the .
virtual IBPtr clone() const
Make a simple clone of this object.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
double _c0
The parameter.
virtual bool accept(vector< int > id)
Accept the decay.
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.
Energy2 _c
Normalisation parameters for the different currents.
LorentzVector< complex< InvEnergy2 > > rhoOmegaCurrent(unsigned int iopt, const Lorentz5Momentum &Q, const Lorentz5Momentum &q1, const Lorentz5Momentum &q2, const Lorentz5Momentum &q3, const Lorentz5Momentum &q4, const Lorentz5Momentum &q5) const
Currents for the different channels.
Energy _garhopi
The parameter.
FivePionCurrent()
The default constructor.
Energy _a1mass
The mass of the for the current.
Complex omegaBreitWigner(Energy2 scale) const
Breit-Wigner for the .
Complex a1BreitWigner(Energy2 scale) const
Breit-Wigner for the .
Energy _rhomass
The masses and widths of the intermediate particles.
double _grhopipi
The parameter.
Energy _a1width
The width.
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.
virtual unsigned int decayMode(vector< int > id)
Return the decay mode number for a given set of particles in the current.
InvEnergy _fomegarhopi
The parameter.
Energy _omegamass
The mass of the for the current.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
Energy _ffpipi
The parameter.
Complex sigmaBreitWigner(Energy2 scale) const
Breit-Wigner for the .
Energy _sigmamass
The mass of the for the current.
LorentzVector< complex< InvEnergy2 > > a1SigmaCurrent(unsigned int iopt, const Lorentz5Momentum &Q, const Lorentz5Momentum &q1, const Lorentz5Momentum &q2, const Lorentz5Momentum &q3, const Lorentz5Momentum &q4, const Lorentz5Momentum &q5) const
The current.
Complex rhoBreitWigner(Energy2 scale) const
Methods to calculate the Breit-Wigner distributions for the various mesons.
Energy _sigmawidth
The width.
InvEnergy7 _preomega
Values cached to avoid unnessacary calculations.
virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia)
The particles produced by the current.
static void Init()
The standard Init function used to initialize the interfaces.
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.
Energy _omegawidth
The width.
bool _rhoomega
Option for the treatment of Breit-Wigners in decay.
bool _localparameters
use local values of the particle masses
InvEnergy3 _presigma
Prefactor for the current.
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
Value2 m2() const
-*- C++ -*-
auto epsilon(const LorentzVector< A > &a, const LorentzVector< B > &b, const LorentzVector< C > &c, const LorentzVector< D > &d) -> decltype(a.x() *b.y() *c.z() *d.t())
std::complex< double > Complex
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< tPDPtr > tPDVector
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
constexpr auto sqr(const T &x) -> decltype(x *x)