EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtBtoXsgammaAliGreub.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
25#include "EvtGenBase/EvtPDL.hh"
29
30#include <stdlib.h>
31#include <string>
32using std::endl;
33
34void EvtBtoXsgammaAliGreub::init( int nArg, double* /*args*/ )
35{
36 if ( ( nArg - 1 ) != 0 ) {
37 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
38 << "EvtBtoXsgamma generator model "
39 << "EvtBtoXsgammaAliGreub expected "
40 << "zero arguments but found: " << nArg - 1 << endl;
41 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
42 << "Will terminate execution!" << endl;
43 ::abort();
44 }
45}
46
48{
49 // The special lineshape for strange hadrons X_s in b -> s gamma:
50 // An 18 parameter function fitted to the theoretical mass spectrum
51 // of Ali & Greub for a B meson mass of 5.279 GeV; top quark mass of
52 // 174.3 GeV; strange quark mass of 0.48 GeV (tuned to give minimum
53 // M_Xs of 0.64 GeV) and Fermi momentum of 265 MeV for spectator quark
54 // mass of 150 MeV (from CLEO fit). Truncated at max on high side
55 // and min (just above K pi or KK thresold) on low side.
56 double min = 0.64;
57 double max = 4.5;
58 double xbox, ybox, alifit;
59 double mass = 0.0;
60
61 double par[18];
62 if ( ( Xscode == 30343 ) || ( Xscode == -30343 ) || ( Xscode == 30353 ) ||
63 ( Xscode == -30353 ) ) { // Xsu or Xsd
64 min = 0.6373; // Just above K pi threshold for Xsd/u
65 //min=0.6333; // K pi threshold for neutral Xsd
66 par[0] = -2057.2380371094;
67 par[1] = 2502.2556152344;
68 par[2] = 1151.5632324219;
69 par[3] = 0.82431584596634;
70 par[4] = -4110.5234375000;
71 par[5] = 8445.6757812500;
72 par[6] = -3034.1894531250;
73 par[7] = 1.1557708978653;
74 par[8] = 1765.9311523438;
75 par[9] = 1.3730158805847;
76 par[10] = 0.51371538639069;
77 par[11] = 2.0056934356689;
78 par[12] = 37144.097656250;
79 par[13] = -50296.781250000;
80 par[14] = 27319.095703125;
81 par[15] = -7408.0678710938;
82 par[16] = 1000.8093261719;
83 par[17] = -53.834449768066;
84 } else if ( ( Xscode == 30363 ) || ( Xscode == -30363 ) ) {
85 min = 0.9964; // Just above KK threshold for Xss
86 par[0] = -32263.908203125;
87 par[1] = 57186.589843750;
88 par[2] = -24230.728515625;
89 par[3] = 1.1155973672867;
90 par[4] = -12161.131835938;
91 par[5] = 20162.146484375;
92 par[6] = -7198.8564453125;
93 par[7] = 1.3783323764801;
94 par[8] = 1995.1691894531;
95 par[9] = 1.4655895233154;
96 par[10] = 0.48869228363037;
97 par[11] = 2.1038570404053;
98 par[12] = 55100.058593750;
99 par[13] = -75201.703125000;
100 par[14] = 41096.066406250;
101 par[15] = -11205.986328125;
102 par[16] = 1522.4024658203;
103 par[17] = -82.379623413086;
104 } else {
105 EvtGenReport( EVTGEN_DEBUG, "EvtGen" )
106 << "In EvtBtoXsgammaAliGreub: Particle with id " << Xscode
107 << " is not a Xss particle" << endl;
108 return 0;
109 }
110
111 double boxheight = par[8];
112 double boxwidth = max - min;
113
114 while ( ( mass > max ) || ( mass < min ) ) {
115 xbox = EvtRandom::Flat( boxwidth ) + min;
116 ybox = EvtRandom::Flat( boxheight );
117 if ( xbox < par[3] ) {
118 alifit = par[0] + par[1] * xbox + par[2] * pow( xbox, 2 );
119 } else if ( xbox < par[7] ) {
120 alifit = par[4] + par[5] * xbox + par[6] * pow( xbox, 2 );
121 } else if ( xbox < par[11] ) {
122 alifit = par[8] * exp( -0.5 * pow( ( xbox - par[9] ) / par[10], 2 ) );
123 } else {
124 alifit = par[12] + par[13] * xbox + par[14] * pow( xbox, 2 ) +
125 par[15] * pow( xbox, 3 ) + par[16] * pow( xbox, 4 ) +
126 par[17] * pow( xbox, 5 );
127 }
128 if ( ybox > alifit ) {
129 mass = 0.0;
130 } else {
131 mass = xbox;
132 }
133 }
134 return mass;
135}
EvtComplex exp(const EvtComplex &c)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_DEBUG
Definition EvtReport.hh:53
@ EVTGEN_ERROR
Definition EvtReport.hh:49
double GetMass(int code) override
void init(int, double *) override
static double Flat()
Definition EvtRandom.cpp:95