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