BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBlattWeisskopf.cc
Go to the documentation of this file.
1#include "EvtPatches.hh"
2/*******************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
4 * Package: EvtGenBase
5 * File: $Id: EvtBlattWeisskopf.cc,v 1.2 2015/07/01 12:28:24 pingrg Exp $
6 * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
7 *
8 * Copyright (C) 2002 Caltech
9 *******************************************************************************/
10
11#include "EvtBlattWeisskopf.hh"
12#include "EvtReport.hh"
13#include <assert.h>
14#include <cstdlib>
15#include <iostream>
16#include <math.h>
17using std::endl;
18
19EvtBlattWeisskopf::EvtBlattWeisskopf( int LL, double R, double p0 )
20 : _LL( LL ), _radial( R ), _p0( p0 ) {
21 if ( R < 0 )
22 {
23
24 report( INFO, "EvtGen" ) << "Radius " << R << " negative" << endl;
25 assert( 0 );
26 }
27
28 _radial = R;
29
30 // compute formula for nominal momentum
31
32 _F0 = compute( _p0 );
33 if ( _F0 <= 0 )
34 {
35
36 report( INFO, "EvtGen" ) << "Invalid nominal form factor computed " << _F0 << endl;
37 assert( 0 );
38 }
39}
40
42 : _LL( other._LL ), _radial( other._radial ), _p0( other._p0 ), _F0( other._F0 ) {}
43
45
46double EvtBlattWeisskopf::operator()( double p ) const {
47 double ret = compute( p ) / _F0;
48 // report(INFO,"EvtGen") << p << " " << _p0 << " " << _F0 << " " << _LL << " " << _radial <<
49 // " " << ret << endl;
50 return ret;
51}
52
53// Blatt-Weisskopf form factors
54// see e.g. hep-ex/0011065
55// Dalitz Analysis of the Decay D0->K-pi+pi0 (CLEO)
56//
57// p - momentum of either daugher in the meson rest frame,
58// the mass of the meson is used
59// pAB - momentum of either daughter in the candidate rest frame
60// the mass of the candidate is used
61// R - meson radial parameter
62//
63// In the CLEO paper R=5 GeV-1 for D0, R=1.5 for intermediate resonances
64
65double EvtBlattWeisskopf::compute( double p ) const {
66 if ( p < 0 )
67 {
68
69 report( INFO, "EvtGen" ) << "Momentum " << p << " negative in form factor calculation"
70 << endl;
71 abort();
72 }
73 else
74 {
75 double rp = p * _radial;
76 double rp2 = rp * rp;
77 double rp4 = rp2 * rp2;
78 double rp6 = rp2 * rp4;
79 double rp8 = rp4 * rp4;
80
81 double x = p * p * _radial * _radial;
82
83 if ( 0 == _LL ) return 1.;
84 else if ( 1 == _LL ) return sqrt( 1.0 / ( 1.0 + x ) );
85 else if ( 2 == _LL ) return sqrt( 1.0 / ( 1.0 + x / 3.0 + x * x / 9.0 ) );
86 else if ( 3 == _LL ) return 1.0 / sqrt( 225 + 45 * rp2 + 6 * rp4 + rp6 );
87 else if ( 4 == _LL ) return 1.0 / sqrt( 11025 + 1575 * rp2 + 135 * rp4 + 10 * rp6 + rp8 );
88 else
89 {
90 report( INFO, "EvtGen" ) << "Angular momentum " << _LL << " not implemented" << endl;
91 abort();
92 }
93 }
94}
Double_t x[10]
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ INFO
Definition EvtReport.hh:52
double operator()(double p) const
EvtBlattWeisskopf(int LL, double R, double p0)