herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
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 
20 namespace Herwig {
21 
22 using namespace ThePEG;
23 using namespace ThePEG::Constants;
24 
31 
35  friend struct KaganIntegrand;
36 
37 public:
38 
43 
51  virtual Energy hadronicMass(Energy mb,Energy mquark);
52 
59  virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
60 
61 public:
62 
69  void persistentOutput(PersistentOStream & os) const;
70 
76  void persistentInput(PersistentIStream & is, int version);
78 
85  static void Init();
86 
87 public:
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,
116  _ferminorm,_fermilambda1);
117  if(_iopt==1) fermi *=KNLO(_MB*_y/(_mb+kp))*_MB/(_mb+kp);
118  return fermi;
119  }
121 
122 protected:
123 
130  virtual IBPtr clone() const {return new_ptr(*this);}
131 
136  virtual IBPtr fullclone() const {return new_ptr(*this);}
138 
139 protected:
140 
148  virtual void doinit();
149 
154  virtual void doinitrun();
156 
157 private:
158 
163  BtoSGammaKagan & operator=(const BtoSGammaKagan &) = delete;
164 
165 private:
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 
264  void calculateWilsonCoefficients();
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 
277 private:
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 
449  Energy _fermilambda;
450 
454  double _fermia;
455 
459  InvEnergy _ferminorm;
460 
464  Energy2 _fermilambda1;
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 */
InvEnergy _spectmax
Maximum value of the spectrum for unweighting.
bool _initialize
Initialisation of mass spectrum.
double realG(double t) const
The real part of the function from hep-ph/9805303.
double s88(double y) const
function from hep-ph/9805303
double sqrt(int x)
double KNLO(double y) const
The function at parton level from hep-ph/9805303.
unsigned int _maxtry
Maximum number of tries for unweighting.
InvEnergy smeared(Energy kp) const
Operator to return the integrand of the smeared function or Fermi function depending on the value of ...
The BtoSGammaKagan class implements the model of hep-ph/9805303 for the hadronic mass spectrum in de...
double s22(double y) const
function from hep-ph/9805303.
double _ycut
Techincal parameters for the integration of the spectrum.
The BtoSGammaHadronicMass class is the base class for the implementation of models of the hadronic ma...
double _alphaSZ
The strong coupling at the Z mass.
Energy _mw
Masses of other particles.
double _y
Value of the energy fraction for which the integral is being performed.
double _c70
The leading order coefficient.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
virtual IBPtr clone() const
Make a simple clone of this object.
constexpr double pi
A struct for the integrand which can access the dimensional value member of the BtoSGammaKagan class...
constexpr auto sqr(const T &x) -> decltype(x *x)
double _beta0
First -function coefficient.
double _ckm
The CKM perfactor for the decay.
Energy _mb
bottom quark mass
double Delta(double y, double alphaS) const
The derivative of the Sudakov form-factor from hep-ph/9805303.
double semiLeptonicf() const
Kinematic function from semi-leptonic decay for normaalisation.
Interpolator< InvEnergy, Energy >::Ptr _pmHinter
Interpolator for the spectrum.
double _zratio
The ratio of the charm to bottom quark masses squared, .
vector< InvEnergy > _spectrum
Values of the differential rate for the interpolation of the spectrum.
unsigned int _nsfunct
Number of points for the interpolation of the s functions.
double _alpha
The electromagentic coupling.
Energy ArgType
Argument type for GaussianIntegrator.
Ptr< BtoSGammaKagan >::pointer _kagan
A pointer to the form factor to supply the integrand.
Energy2 _lambda2
The hadronic parameter from hep-ph/9805303.
Energy _MB
Mass of the decaying B meson.
double s77(double y) const
function from hep-ph/9805303
Energy _mc
charm quark mass
double _delta
Pre-factor for the correction term involving .
double _alphaSM
the strong coupling at the renormalisation scale .
InvEnergy ValType
Return type for GaussianIntegrator.
Energy2 _fermilambda1
scale related to the kinetic energy of the b quark.
double s27(double y) const
function from hep-ph/9805303.
double _msovermb
Ratio of the strange quark mass to the bottom quark mass.
Energy _mub
The renormalisation scale.
unsigned int _iopt
The function currently being integrated.
KaganIntegrand(Ptr< BtoSGammaKagan >::pointer in)
The constructor.
double _beta1
Second -function coefficient.
vector< Energy > _mHinter
Values of for the interpolation of the spectrum.
double _c80
The leading order coefficient.
double s78(double y) const
function from hep-ph/9805303
double _c20
The leading order coefficient.
-*- C++ -*-
Energy _mt
Quark masses and related parameters.
double alphaS(Energy Q)
Strong coupling at the scale .
double _fermia
The power from from hep-ph/9805303.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
double imagG(double t) const
The imaginary part of the function from hep-ph/9805303.
Energy _fermilambda
Parameters for the Fermi function.
double _deltacut
Cut-off on the photon energies.
Interpolator< double, double >::Ptr _s22inter
Interpolators for the integrate functions and related parameters.
Interpolator< double, double >::Ptr _s27inter
Interpolator for the function.
unsigned int _nspect
Number of points for the interpolation of the spectrum.
InvEnergy _ferminorm
The normalisation from hep-ph/9805303.
Energy _mz
the Z mass
Energy _ms
strange quark mass