Line data Source code
1 : #include "EvtGenBase/EvtPatches.hh"
2 : /*******************************************************************************
3 : * Project: BaBar detector at the SLAC PEP-II B-factory
4 : * Package: EvtGenBase
5 : * File: $Id: EvtBlattWeisskopf.cpp,v 1.3 2009-03-16 15:56:37 robbep Exp $
6 : * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
7 : *
8 : * Copyright (C) 2002 Caltech
9 : *******************************************************************************/
10 :
11 : #include <iostream>
12 : #include <assert.h>
13 : #include <math.h>
14 : #include "EvtGenBase/EvtBlattWeisskopf.hh"
15 : #include "EvtGenBase/EvtReport.hh"
16 : using std::endl;
17 :
18 : EvtBlattWeisskopf::EvtBlattWeisskopf(int LL, double R, double p0)
19 0 : : _LL(LL), _radial(R), _p0(p0)
20 0 : {
21 0 : if(R < 0) {
22 :
23 0 : report(Severity::Info,"EvtGen") << "Radius " << R << " negative" << endl;
24 0 : assert(0);
25 : }
26 :
27 0 : _radial = R;
28 :
29 : // compute formula for nominal momentum
30 :
31 0 : _F0 = compute(_p0);
32 0 : if(_F0 <= 0) {
33 :
34 0 : report(Severity::Info,"EvtGen") << "Invalid nominal form factor computed " << _F0 << endl;
35 0 : assert(0);
36 : }
37 0 : }
38 :
39 : EvtBlattWeisskopf::EvtBlattWeisskopf(const EvtBlattWeisskopf& other)
40 0 : : _LL(other._LL), _radial(other._radial), _p0(other._p0), _F0(other._F0)
41 0 : {}
42 :
43 : EvtBlattWeisskopf::~EvtBlattWeisskopf()
44 0 : {}
45 :
46 : double EvtBlattWeisskopf::operator()(double p) const
47 : {
48 0 : double ret = compute(p)/_F0;
49 : // report(Severity::Info,"EvtGen") << p << " " << _p0 << " " << _F0 << " " << _LL << " " << _radial << " " << ret << endl;
50 0 : 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 :
65 : double EvtBlattWeisskopf::compute(double p) const
66 : {
67 :
68 : double value(1.0);
69 :
70 0 : double z = p*_radial;
71 0 : double zSq = z*z;
72 :
73 0 : if (_LL == 0) {
74 : value = 1.0;
75 0 : } else if (_LL == 1) {
76 0 : value = sqrt(1.0/(1.0 + zSq));
77 0 : } else if (_LL == 2) {
78 0 : value = sqrt(1.0/(zSq*(zSq + 3.0) + 9.0));
79 0 : } else if (_LL == 3) {
80 0 : double denom = zSq*(zSq*(zSq + 6.0) + 45.0) + 225.0;
81 0 : value = sqrt(1.0/denom);
82 0 : } else if (_LL == 4) {
83 0 : double denom = zSq*(zSq*(zSq*(zSq + 10.0) + 135.0) + 1575.0) + 11025.0;
84 0 : value = sqrt(1.0/denom);
85 0 : } else if (_LL == 5) {
86 0 : double denom = zSq*(zSq*(zSq*(zSq*(zSq + 15.0) + 315.0) + 6300.0) + 99225.0) + 893025.0;
87 0 : value = sqrt(1.0/denom);
88 0 : }
89 :
90 0 : return value;
91 :
92 : }
|