164 {
165
166
167 int fermiFunction = (int)args[1];
168 _mB = args[2];
169 _mb = args[3];
170 _mu = args[4];
171 _lam1 = args[5];
172 _delta = args[6];
173 _z = args[7];
174 _nIntervalS = args[8];
175 _nIntervalmH = args[9];
176 std::vector<double> mHVect( int( _nIntervalmH + 1.0 ) );
177 massHad = new double[int( _nIntervalmH + 1.0 )];
178 brHad = new double[int( _nIntervalmH + 1.0 )];
179 intervalMH = _nIntervalmH;
180
181
183 << "EvtBtoXsgammaKagan: calculating new hadronic mass spectra. This takes a while..."
184 << endl;
185
186
187
188
189
190 double _mubar = _mu;
191 _mW = 80.33;
192 _mt = 175.0;
193 _alpha = 1. / 137.036;
194 _lambdabar = _mB - _mb;
195 _kappabar = 3.382 - 4.14 * ( sqrt( _z ) - 0.29 );
197 _rer8 = ( 44. / 9. ) - ( 8. / 27. ) * pow(
EvtConst::pi, 2. );
198 _r7 = ( -10. / 3. ) - ( 8. / 9. ) * pow(
EvtConst::pi, 2. );
199 _rer2 = -4.092 + 12.78 * ( sqrt( _z ) - .29 );
200 _gam77 = 32. / 3.;
201 _gam27 = 416. / 81.;
202 _gam87 = -32. / 9.;
203 _lam2 = .12;
204 _beta0 = 23. / 3.;
205 _beta1 = 116. / 3.;
206 _alphasmZ = .118;
207 _mZ = 91.187;
208 _ms = _mb / 50.;
209
210 double eGammaMin = 0.5 * _mB * ( 1. - _delta );
211 double eGammaMax = 0.5 * _mB;
212 double yMin = 2. * eGammaMin / _mB;
213 double yMax = 2. * eGammaMax / _mB;
214 double _CKMrat = 0.976;
215 double Nsl = 1.0;
216
217
222
223
224 _etamu = _alphasmW / _alphasmu;
225 _kSLemmu = ( 12. / 23. ) * ( ( 1. / _etamu ) - 1. );
228
229
230
231 std::vector<double> s22Coeffs( int( _nIntervalS + 1.0 ) );
232 std::vector<double> s27Coeffs( int( _nIntervalS + 1.0 ) );
233 std::vector<double> s28Coeffs( int( _nIntervalS + 1.0 ) );
234
235 double dy = ( yMax - yMin ) / _nIntervalS;
236 double yp = yMin;
237
238 std::vector<double> sCoeffs( 1 );
239 sCoeffs[0] = _z;
240
241
242 EvtItgPtrFunction* mys22Func = new EvtItgPtrFunction( &s22Func, 0., yMax + 0.1, sCoeffs );
243 EvtItgPtrFunction* mys27Func = new EvtItgPtrFunction( &s27Func, 0., yMax + 0.1, sCoeffs );
244
245
246 EvtItgAbsIntegrator* mys22Simp = new EvtItgSimpsonIntegrator( *mys22Func, 1.0e-4, 20 );
247 EvtItgAbsIntegrator* mys27Simp = new EvtItgSimpsonIntegrator( *mys27Func, 1.0e-4, 50 );
248
249 int i;
250
251 for ( i = 0; i < int( _nIntervalS + 1.0 ); i++ )
252 {
253
254 s22Coeffs[i] = ( 16. / 27. ) * mys22Simp->
evaluate( 1.0e-20, yp );
255 s27Coeffs[i] = ( -8. / 9. ) * _z * mys27Simp->
evaluate( 1.0e-20, yp );
256 s28Coeffs[i] = -s27Coeffs[i] / 3.;
257 yp = yp + dy;
258 }
259
260 delete mys22Func;
261 delete mys27Func;
262 delete mys22Simp;
263 delete mys27Simp;
264
265
266
267 std::vector<double> FermiCoeffs( 6 );
268 std::vector<double> varCoeffs( 3 );
269 std::vector<double> DeltaCoeffs( 1 );
270 std::vector<double> s88Coeffs( 2 );
271 std::vector<double> sInitCoeffs( 3 );
272
273 varCoeffs[0] = _mB;
274 varCoeffs[1] = _mb;
275 varCoeffs[2] = 0.;
276
277 DeltaCoeffs[0] = _alphasmu;
278
279 s88Coeffs[0] = _mb;
280 s88Coeffs[1] = _ms;
281
282 sInitCoeffs[0] = _nIntervalS;
283 sInitCoeffs[1] = yMin;
284 sInitCoeffs[2] = yMax;
285
286 FermiCoeffs[0] = fermiFunction;
287 FermiCoeffs[1] = 0.0;
288 FermiCoeffs[2] = 0.0;
289 FermiCoeffs[3] = 0.0;
290 FermiCoeffs[4] = 0.0;
291 FermiCoeffs[5] = 0.0;
292
293
294 std::vector<double> gammaCoeffs( 6 );
295 gammaCoeffs[0] = 76.18009172947146;
296 gammaCoeffs[1] = -86.50532032941677;
297 gammaCoeffs[2] = 24.01409824083091;
298 gammaCoeffs[3] = -1.231739572450155;
299 gammaCoeffs[4] = 0.1208650973866179e-2;
300 gammaCoeffs[5] = -0.5395239384953e-5;
301
302
303
304 if ( fermiFunction == 1 )
305 {
306
307 FermiCoeffs[1] = _lambdabar;
308 FermiCoeffs[2] = ( -3. * pow( _lambdabar, 2. ) / _lam1 ) - 1.;
309 FermiCoeffs[3] = _lam1;
310 FermiCoeffs[4] = 1.0;
311
312 EvtItgPtrFunction* myNormFunc = new EvtItgPtrFunction(
314 EvtItgAbsIntegrator* myNormSimp = new EvtItgSimpsonIntegrator( *myNormFunc, 1.0e-4, 40 );
316 delete myNormFunc;
317 myNormFunc = 0;
318 delete myNormSimp;
319 myNormSimp = 0;
320 }
321 else if ( fermiFunction == 2 )
322 {
323
324 double a =
326 FermiCoeffs[1] = _lambdabar;
327 FermiCoeffs[2] = a;
330 FermiCoeffs[4] = 1.0;
331
332 EvtItgPtrFunction* myNormFunc = new EvtItgPtrFunction(
334 EvtItgAbsIntegrator* myNormSimp = new EvtItgSimpsonIntegrator( *myNormFunc, 1.0e-4, 40 );
336 delete myNormFunc;
337 myNormFunc = 0;
338 delete myNormSimp;
339 myNormSimp = 0;
340 }
341 else if ( fermiFunction == 3 )
342 {
343
345 FermiCoeffs[1] = _mB;
346 FermiCoeffs[2] = _mb;
347 FermiCoeffs[3] = rho;
348 FermiCoeffs[4] = _lambdabar;
349 FermiCoeffs[5] = 1.0;
350
351 EvtItgPtrFunction* myNormFunc = new EvtItgPtrFunction(
353 EvtItgAbsIntegrator* myNormSimp = new EvtItgSimpsonIntegrator( *myNormFunc, 1.0e-4, 40 );
355 delete myNormFunc;
356 myNormFunc = 0;
357 delete myNormSimp;
358 myNormSimp = 0;
359 }
360
361
362 EvtItgThreeCoeffFcn* myDeltaFermiFunc = new EvtItgThreeCoeffFcn(
363 &DeltaFermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs, DeltaCoeffs );
364 EvtItgThreeCoeffFcn* mys88FermiFunc = new EvtItgThreeCoeffFcn(
365 &s88FermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs, s88Coeffs );
366 EvtItgTwoCoeffFcn* mys77FermiFunc =
367 new EvtItgTwoCoeffFcn( &s77FermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs );
368 EvtItgTwoCoeffFcn* mys78FermiFunc =
369 new EvtItgTwoCoeffFcn( &s78FermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs );
370 EvtItgFourCoeffFcn* mys22FermiFunc = new EvtItgFourCoeffFcn(
371 &sFermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs, sInitCoeffs, s22Coeffs );
372 EvtItgFourCoeffFcn* mys27FermiFunc = new EvtItgFourCoeffFcn(
373 &sFermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs, sInitCoeffs, s27Coeffs );
374 EvtItgFourCoeffFcn* mys28FermiFunc = new EvtItgFourCoeffFcn(
375 &sFermiFunc, -_mb, _mB - _mb, FermiCoeffs, varCoeffs, sInitCoeffs, s28Coeffs );
376
377
378 EvtItgSimpsonIntegrator* myDeltaFermiSimp =
379 new EvtItgSimpsonIntegrator( *myDeltaFermiFunc, 1.0e-4, 40 );
380 EvtItgSimpsonIntegrator* mys77FermiSimp =
381 new EvtItgSimpsonIntegrator( *mys77FermiFunc, 1.0e-4, 40 );
382 EvtItgSimpsonIntegrator* mys88FermiSimp =
383 new EvtItgSimpsonIntegrator( *mys88FermiFunc, 1.0e-4, 40 );
384 EvtItgSimpsonIntegrator* mys78FermiSimp =
385 new EvtItgSimpsonIntegrator( *mys78FermiFunc, 1.0e-4, 40 );
386 EvtItgSimpsonIntegrator* mys22FermiSimp =
387 new EvtItgSimpsonIntegrator( *mys22FermiFunc, 1.0e-4, 40 );
388 EvtItgSimpsonIntegrator* mys27FermiSimp =
389 new EvtItgSimpsonIntegrator( *mys27FermiFunc, 1.0e-4, 40 );
390 EvtItgSimpsonIntegrator* mys28FermiSimp =
391 new EvtItgSimpsonIntegrator( *mys28FermiFunc, 1.0e-4, 40 );
392
393
394 double mHmin = sqrt( _mB * _mB - 2. * _mB * eGammaMax );
395 double mHmax = sqrt( _mB * _mB - 2. * _mB * eGammaMin );
396 double dmH = ( mHmax - mHmin ) / _nIntervalmH;
397
398 double mH = mHmin;
399
400
401 for ( i = 0; i < int( _nIntervalmH + 1.0 ); i++ )
402 {
403
404 double ymH = 1. - ( ( mH * mH ) / ( _mB * _mB ) );
405
406
407 myDeltaFermiFunc->
setCoeff( 2, 2, ymH );
408 mys77FermiFunc->
setCoeff( 2, 2, ymH );
409 mys88FermiFunc->
setCoeff( 2, 2, ymH );
410 mys78FermiFunc->
setCoeff( 2, 2, ymH );
411 mys22FermiFunc->
setCoeff( 2, 2, ymH );
412 mys27FermiFunc->
setCoeff( 2, 2, ymH );
413 mys28FermiFunc->
setCoeff( 2, 2, ymH );
414
415
416
417 double deltaResult = myDeltaFermiSimp->
evaluate( ( _mB * ymH - _mb ), _mB - _mb );
418 double s77Result = mys77FermiSimp->
evaluate( ( _mB * ymH - _mb ), _mB - _mb );
419 double s88Result = mys88FermiSimp->
evaluate( ( _mB * ymH - _mb ), _mB - _mb );
420 double s78Result = mys78FermiSimp->
evaluate( ( _mB * ymH - _mb ), _mB - _mb );
421 double s22Result = mys22FermiSimp->
evaluate( ( _mB * ymH - _mb ), _mB - _mb );
422 double s27Result = mys27FermiSimp->
evaluate( ( _mB * ymH - _mb ), _mB - _mb );
423
424 double py =
425 ( pow( _CKMrat, 2. ) * ( 6. / _fz ) * ( _alpha /
EvtConst::pi ) *
426 ( deltaResult * _cDeltatot +
428 ( s77Result * pow( _c70mu, 2. ) +
429 s27Result * _c2mu * ( _c70mu - _c80mu / 3. ) + s78Result * _c70mu * _c80mu +
430 s22Result * _c2mu * _c2mu + s88Result * _c80mu * _c80mu ) ) );
431
432 mHVect[i] = 2. * ( mH / ( _mB * _mB ) ) * 0.105 * Nsl * py;
433
434 massHad[i] = mH;
435 brHad[i] = 2. * ( mH / ( _mB * _mB ) ) * 0.105 * Nsl * py;
436
437 mH = mH + dmH;
438 }
439
440
441 delete myDeltaFermiFunc;
442 myDeltaFermiFunc = 0;
443 delete mys88FermiFunc;
444 mys88FermiFunc = 0;
445 delete mys77FermiFunc;
446 mys77FermiFunc = 0;
447 delete mys78FermiFunc;
448 mys78FermiFunc = 0;
449 delete mys22FermiFunc;
450 mys22FermiFunc = 0;
451 delete mys27FermiFunc;
452 mys27FermiFunc = 0;
453 delete mys28FermiFunc;
454 mys28FermiFunc = 0;
455
456 delete myDeltaFermiSimp;
457 myDeltaFermiSimp = 0;
458 delete mys77FermiSimp;
459 mys77FermiSimp = 0;
460 delete mys88FermiSimp;
461 mys88FermiSimp = 0;
462 delete mys78FermiSimp;
463 mys78FermiSimp = 0;
464 delete mys22FermiSimp;
465 mys22FermiSimp = 0;
466 delete mys27FermiSimp;
467 mys27FermiSimp = 0;
468 delete mys28FermiSimp;
469 mys28FermiSimp = 0;
470}
ostream & report(Severity severity, const char *facility)
static double FermiGaussFunc(double, std::vector< double > const &coeffs)
static double FermiRomanFunc(double, std::vector< double > const &coeffs)
static double FermiRomanFuncRoot(double, double)
static double FermiGaussFuncRoot(double, double, double, std::vector< double > &coeffs)
static double FermiExpFunc(double var, const std::vector< double > &coeffs)
static double Gamma(double, const std::vector< double > &coeffs)
double CalcAlphaS(double)
double evaluate(double lower, double upper) const
double normalisation() const
virtual void setCoeff(int, int, double)
virtual void setCoeff(int, int, double)
virtual void setCoeff(int, int, double)