evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtBlattWeisskopf.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 
23 #include "EvtGenBase/EvtPatches.hh"
24 #include "EvtGenBase/EvtReport.hh"
25 
26 #include <assert.h>
27 #include <iostream>
28 #include <math.h>
29 using std::endl;
30 
31 EvtBlattWeisskopf::EvtBlattWeisskopf( int LL, double R, double p0 ) :
32  _LL( LL ), _radial( R ), _p0( p0 )
33 {
34  if ( R < 0 ) {
35  EvtGenReport( EVTGEN_INFO, "EvtGen" )
36  << "Radius " << R << " negative" << endl;
37  assert( 0 );
38  }
39 
40  _radial = R;
41 
42  // compute formula for nominal momentum
43 
44  _F0 = compute( _p0 );
45  if ( _F0 <= 0 ) {
46  EvtGenReport( EVTGEN_INFO, "EvtGen" )
47  << "Invalid nominal form factor computed " << _F0 << endl;
48  assert( 0 );
49  }
50 }
51 
53  _LL( other._LL ), _radial( other._radial ), _p0( other._p0 ), _F0( other._F0 )
54 {
55 }
56 
57 double EvtBlattWeisskopf::operator()( double p ) const
58 {
59  double ret = compute( p ) / _F0;
60  // EvtGenReport(EVTGEN_INFO,"EvtGen") << p << " " << _p0 << " " << _F0 << " " << _LL << " " << _radial << " " << ret << endl;
61  return ret;
62 }
63 
64 // Blatt-Weisskopf form factors
65 // see e.g. hep-ex/0011065
66 // Dalitz Analysis of the Decay D0->K-pi+pi0 (CLEO)
67 //
68 // p - momentum of either daugher in the meson rest frame,
69 // the mass of the meson is used
70 // pAB - momentum of either daughter in the candidate rest frame
71 // the mass of the candidate is used
72 // R - meson radial parameter
73 //
74 // In the CLEO paper R=5 GeV-1 for D0, R=1.5 for intermediate resonances
75 
76 double EvtBlattWeisskopf::compute( double p ) const
77 {
78  double value( 1.0 );
79 
80  double z = p * _radial;
81  double zSq = z * z;
82 
83  if ( _LL == 0 ) {
84  value = 1.0;
85  } else if ( _LL == 1 ) {
86  value = sqrt( 1.0 / ( 1.0 + zSq ) );
87  } else if ( _LL == 2 ) {
88  value = sqrt( 1.0 / ( zSq * ( zSq + 3.0 ) + 9.0 ) );
89  } else if ( _LL == 3 ) {
90  double denom = zSq * ( zSq * ( zSq + 6.0 ) + 45.0 ) + 225.0;
91  value = sqrt( 1.0 / denom );
92  } else if ( _LL == 4 ) {
93  double denom = zSq * ( zSq * ( zSq * ( zSq + 10.0 ) + 135.0 ) + 1575.0 ) +
94  11025.0;
95  value = sqrt( 1.0 / denom );
96  } else if ( _LL == 5 ) {
97  double denom =
98  zSq * ( zSq * ( zSq * ( zSq * ( zSq + 15.0 ) + 315.0 ) + 6300.0 ) +
99  99225.0 ) +
100  893025.0;
101  value = sqrt( 1.0 / denom );
102  }
103 
104  return value;
105 }
double operator()(double p) const
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
Definition: EvtReport.cpp:33
double compute(double p) const
EvtBlattWeisskopf(int LL, double R, double p0)
Index other(Index i, Index j)
Definition: EvtCyclic3.cpp:156