herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
BtoSGammaKagan.h
1// -*- C++ -*-
2//
3// BtoSGammaKagan.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_BtoSGammaKagan_H
10#define HERWIG_BtoSGammaKagan_H
11//
12// This is the declaration of the BtoSGammaKagan class.
13//
14
15#include "Herwig/Utilities/Interpolator.h"
16#include "BtoSGammaHadronicMass.h"
17#include "ThePEG/Config/Complex.h"
18#include "ThePEG/Config/Constants.h"
19
20namespace Herwig {
21
22using namespace ThePEG;
23using namespace ThePEG::Constants;
24
31
35 friend struct KaganIntegrand;
36
37public:
38
43
51 virtual Energy hadronicMass(Energy mb,Energy mquark);
52
59 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
60
61public:
62
70
76 void persistentInput(PersistentIStream & is, int version);
78
85 static void Init();
86
87public:
88
98 double operator ()(double x) const {
99 if(_iopt==0) {
100 double reg(realG(x/_zratio)),img(imagG(x/_zratio));
101 return 16./27.*(1.-x)*(_zratio*_zratio/x/x*(sqr(reg)+sqr(img))+_zratio/x*reg+0.25);
102 }
103 else {
104 return -8./9.*_zratio*(realG(x/_zratio)+0.5*x/_zratio);
105 }
106 }
107 typedef double ValType;
108 typedef double ArgType;
109
114 InvEnergy smeared(Energy kp) const {
115 InvEnergy fermi = exponentialFermiFunction(kp,_fermilambda,_fermia,
117 if(_iopt==1) fermi *=KNLO(_MB*_y/(_mb+kp))*_MB/(_mb+kp);
118 return fermi;
119 }
121
122protected:
123
130 virtual IBPtr clone() const {return new_ptr(*this);}
131
136 virtual IBPtr fullclone() const {return new_ptr(*this);}
138
139protected:
140
148 virtual void doinit();
149
154 virtual void doinitrun();
156
157private:
158
164
165private:
166
174 double Delta(double y, double alphaS) const {
175 if(y>_ycut) return 0.;
176 double ln(log(1.-y));
177 return -4./3./pi/(1.-y)*alphaS*(ln+1.75)*exp(-2.*alphaS/3./pi*ln*(ln+3.5));
178 }
179
183 double semiLeptonicf() const {
184 double z2=sqr(_zratio);
185 return 1.-8.*_zratio*(1.-z2)-sqr(z2)-12.*z2*log(_zratio);
186 }
187
193 double s22(double y) const {return (*_s22inter)(y);}
194
200 double s27(double y) const {return (*_s27inter)(y);}
201
206 double s77(double y) const {
207 if(y>_ycut) y=_ycut;
208 return 1./3.*(7.+y*(1.-2.*y)-2.*(1.+y)*log(1.-y));
209 }
210
215 double s78(double y) const {
216 if(y>_ycut) y=_ycut;
217 return 8./9.*((1.-y)/y*log(1.-y)+1.+0.25*y*y);
218 }
219
224 double s88(double y) const {
225 double ratio(_mb/_ms),y2(sqr(y));
226 if(y>_ycut) y=_ycut;
227 return 1./27.*(2.*(2.-2.*y+y2)/y*(log(1.-y)+2.*log(ratio))-2.*y2-y-8.*(1.-y)/y);
228 }
229
233 double realG(double t) const {
234 if(t<4.) {
235 double at(atan(sqrt(t/(4.-t))));
236 return -2.*sqr(at);
237 }
238 else {
239 double ln(log(0.5*(sqrt(t)+sqrt(t-4.))));
240 return 2.*(sqr(ln)-0.25*sqr(pi));
241 }
242 }
243
247 double imagG(double t) const {
248 if(t<4.) return 0.;
249 else return -2.*pi*log(0.5*(sqrt(t)+sqrt(t-4.)));
250 }
251
256 double alphaS(Energy Q) {
257 double lo(1.-0.5*_beta0*_alphaSZ/pi*log(_mz/Q));
258 return _alphaSZ/lo*(1.-0.25*_beta1/_beta0*_alphaSZ/pi*log(lo)/lo);
259 }
260
265
269 double KNLO(double y) const {
270 return _delta*Delta(y,_alphaSM)
271 +_alphaSM/pi*(s22(y)*sqr(_c20)+s77(y)*sqr(_c70)
272 +s88(y)*sqr(_c80)+s78(y)*_c70*_c80
273 +s27(y)*_c20*(_c70-_c80/3.));
274 }
276
277private:
278
279
284
292 Energy _mt;
293
297 Energy _mb;
298
302 Energy _mc;
303
307 Energy _ms;
308
312 double _msovermb;
313
317 double _zratio;
319
323 Energy2 _lambda2;
324
332 Energy _mw;
333
337 Energy _mz;
338
342 Energy _MB;
344
350 double _c20;
351
355 double _c70;
356
360 double _c80;
361
365 double _beta0;
366
370 double _beta1;
371
375 double _alpha;
376
380 double _alphaSZ;
381
385 Energy _mub;
386
390 double _alphaSM;
391
395 double _ckm;
399 double _delta;
401
410
415
420
424 vector<Energy> _mHinter;
425
429 vector<InvEnergy> _spectrum;
430
434 InvEnergy _spectmax;
435
439 unsigned int _maxtry;
441
450
454 double _fermia;
455
459 InvEnergy _ferminorm;
460
466
474 double _ycut;
475
479 double _y;
480
484 double _deltacut;
485
489 unsigned int _nsfunct;
490
494 unsigned int _nspect;
495
499 unsigned int _iopt;
501
502};
503
509
513 KaganIntegrand(Ptr<BtoSGammaKagan>::pointer in) : _kagan(in) {};
514
518 InvEnergy operator ()(Energy arg) const {return _kagan->smeared(arg);}
520 typedef InvEnergy ValType;
522 typedef Energy ArgType;
523
527 Ptr<BtoSGammaKagan>::pointer _kagan;
528};
529}
530
531#endif /* HERWIG_BtoSGammaKagan_H */
The BtoSGammaHadronicMass class is the base class for the implementation of models of the hadronic ma...
InvEnergy exponentialFermiFunction(Energy scale, Energy lambda, double a, InvEnergy norm, Energy2 lambda1) const
Exponential function of the form, , where taken from hep-ph/9805303.
The BtoSGammaKagan class implements the model of hep-ph/9805303 for the hadronic mass spectrum in de...
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
double operator()(double x) const
Members which return integrands.
BtoSGammaKagan()
The default constructor.
InvEnergy _spectmax
Maximum value of the spectrum for unweighting.
double _ckm
The CKM perfactor for the decay.
double _alphaSM
the strong coupling at the renormalisation scale .
double KNLO(double y) const
The function at parton level from hep-ph/9805303.
double semiLeptonicf() const
Kinematic function from semi-leptonic decay for normaalisation.
unsigned int _nsfunct
Number of points for the interpolation of the s functions.
Energy _mc
charm quark mass
Energy _mub
The renormalisation scale.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
double _fermia
The power from from hep-ph/9805303.
double s77(double y) const
function from hep-ph/9805303
double _c80
The leading order coefficient.
virtual void dataBaseOutput(ofstream &os, bool header, bool create) const
Output the setup information for the particle database.
virtual void doinitrun()
Initialize this object.
double _alphaSZ
The strong coupling at the Z mass.
double _delta
Pre-factor for the correction term involving .
double _beta1
Second -function coefficient.
double _c70
The leading order coefficient.
unsigned int _nspect
Number of points for the interpolation of the spectrum.
double _ycut
Techincal parameters for the integration of the spectrum.
Interpolator< InvEnergy, Energy >::Ptr _pmHinter
Interpolator for the spectrum.
double imagG(double t) const
The imaginary part of the function from hep-ph/9805303.
double _y
Value of the energy fraction for which the integral is being performed.
unsigned int _iopt
The function currently being integrated.
double _c20
The leading order coefficient.
double _deltacut
Cut-off on the photon energies.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
Energy _mb
bottom quark mass
double _zratio
The ratio of the charm to bottom quark masses squared, .
double s88(double y) const
function from hep-ph/9805303
Energy _mt
Quark masses and related parameters.
Energy _fermilambda
Parameters for the Fermi function.
bool _initialize
Initialisation of mass spectrum.
double alphaS(Energy Q)
Strong coupling at the scale .
double _alpha
The electromagentic coupling.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
double _msovermb
Ratio of the strange quark mass to the bottom quark mass.
Interpolator< double, double >::Ptr _s22inter
Interpolators for the integrate functions and related parameters.
Energy _ms
strange quark mass
Energy _mw
Masses of other particles.
double s22(double y) const
function from hep-ph/9805303.
void calculateWilsonCoefficients()
Calculate the wilson coefficients we need.
Energy _MB
Mass of the decaying B meson.
double s78(double y) const
function from hep-ph/9805303
static void Init()
The standard Init function used to initialize the interfaces.
vector< Energy > _mHinter
Values of for the interpolation of the spectrum.
Energy2 _fermilambda1
scale related to the kinetic energy of the b quark.
double _beta0
First -function coefficient.
double Delta(double y, double alphaS) const
The derivative of the Sudakov form-factor from hep-ph/9805303.
unsigned int _maxtry
Maximum number of tries for unweighting.
Energy _mz
the Z mass
double realG(double t) const
The real part of the function from hep-ph/9805303.
virtual IBPtr clone() const
Make a simple clone of this object.
InvEnergy _ferminorm
The normalisation from hep-ph/9805303.
double s27(double y) const
function from hep-ph/9805303.
InvEnergy smeared(Energy kp) const
Operator to return the integrand of the smeared function or Fermi function depending on the value of ...
Interpolator< double, double >::Ptr _s27inter
Interpolator for the function.
BtoSGammaKagan & operator=(const BtoSGammaKagan &)=delete
The assignment operator is private and must never be called.
Energy2 _lambda2
The hadronic parameter from hep-ph/9805303.
vector< InvEnergy > _spectrum
Values of the differential rate for the interpolation of the spectrum.
virtual Energy hadronicMass(Energy mb, Energy mquark)
Returns the hadronic mass.
Ptr< Interpolator< ValT, ArgT > >::pointer Ptr
Pointer to an Interpolator.
Definition: Interpolator.h:38
-*- C++ -*-
constexpr double pi
double sqrt(int x)
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
A struct for the integrand which can access the dimensional value member of the BtoSGammaKagan class.
Energy ArgType
Argument type for GaussianIntegrator.
Ptr< BtoSGammaKagan >::pointer _kagan
A pointer to the form factor to supply the integrand.
InvEnergy ValType
Return type for GaussianIntegrator.
KaganIntegrand(Ptr< BtoSGammaKagan >::pointer in)
The constructor.
InvEnergy operator()(Energy arg) const
Get the function value.