BOSS 7.0.7
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBlattWeisskopf.cc
Go to the documentation of this file.
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, [email protected], 2001-2002
7 *
8 * Copyright (C) 2002 Caltech
9 *******************************************************************************/
10
11#include <iostream>
12#include <assert.h>
13#include <math.h>
16using std::endl;
17
18EvtBlattWeisskopf::EvtBlattWeisskopf(int LL, double R, double p0)
19 : _LL(LL), _radial(R), _p0(p0)
20{
21 if(R < 0) {
22
23 report(INFO,"EvtGen") << "Radius " << R << " negative" << endl;
24 assert(0);
25 }
26
27 _radial = R;
28
29 // compute formula for nominal momentum
30
31 _F0 = compute(_p0);
32 if(_F0 <= 0) {
33
34 report(INFO,"EvtGen") << "Invalid nominal form factor computed " << _F0 << endl;
35 assert(0);
36 }
37}
38
40 : _LL(other._LL), _radial(other._radial), _p0(other._p0), _F0(other._F0)
41{}
42
44{}
45
46double EvtBlattWeisskopf::operator()(double p) const
47{
48 double ret = compute(p)/_F0;
49 // report(INFO,"EvtGen") << p << " " << _p0 << " " << _F0 << " " << _LL << " " << _radial << " " << 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{
67 if(p < 0) {
68
69 report(INFO,"EvtGen") << "Momentum " << p << " negative in form factor calculation" << endl;
70 assert(0);
71 }
72 else {
73 double rp = p*_radial;
74 double rp2 = rp*rp;
75 double rp4 = rp2*rp2;
76 double rp6 = rp2 * rp4;
77 double rp8 = rp4 * rp4;
78
79 double x = p*p*_radial*_radial;
80
81 if(0 == _LL) return 1.;
82 else
83 if(1 == _LL) return sqrt(1.0/(1.0+x));
84 else
85 if(2 == _LL) return sqrt(1.0/(1.0+x/3.0+x*x/9.0));
86 else
87 if(3 == _LL) return 1.0/sqrt(225 + 45*rp2 + 6*rp4 + rp6 );
88 else
89 if(4 == _LL) return 1.0/sqrt(11025 + 1575*rp2 + 135*rp4 + 10*rp6 + rp8 );
90 else {
91 report(INFO,"EvtGen") << "Angular momentum " << _LL << " not implemented" << endl;
92 assert(0);
93 }
94 }
95}
96
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ INFO
Definition: EvtReport.hh:52
double operator()(double p) const
EvtBlattWeisskopf(int LL, double R, double p0)
double x[1000]