BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPto3PAmp.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: EvtPto3PAmp.cc,v 1.1.1.2 2007/10/26 05:03:14 pingrg Exp $
6 * Author: Alexei Dvoretskii, [email protected], 2001-2002
7 *
8 * Copyright (C) 2002 Caltech
9 *******************************************************************************/
10
11#include <assert.h>
12#include <math.h>
13#include <iostream>
19using std::endl;
22
23
26 const EvtPropagator& prop, NumType typeN)
28 _pairAng(pairAng), _pairRes(pairRes),
29 _spin(spin),
30 _typeN(typeN),
31 _prop((EvtPropagator*) prop.clone()),
32 _g0(prop.g0()),
33 _vb(prop.m0(),dp.m(EvtCyclic3::other(pairRes)),dp.bigM(),spin),
34 _vd(dp.m(EvtCyclic3::first(pairRes)),dp.m(EvtCyclic3::second(pairRes)),prop.m0(),spin)
35{}
36
37
38
41 _pairAng(other._pairAng),
42 _pairRes(other._pairRes),
43 _spin(other._spin),
44 _typeN(other._typeN),
45 _prop( (other._prop) ? (EvtPropagator*) other._prop->clone() : 0),
46 _g0(other._g0),
47 _vb(other._vb), _vd(other._vd)
48{}
49
50
52{
53 if(_prop) delete _prop;
54}
55
56
57void EvtPto3PAmp::set_fd(double R)
58{
59 _vd.set_f(R);
60}
61
62void EvtPto3PAmp::set_fb(double R)
63{
64 _vb.set_f(R);
65}
66
67
69{
70 EvtComplex amp(1.0,0.0);
71
72 double m = sqrt(x.q(_pairRes));
73 EvtTwoBodyKine vd(x.m(EvtCyclic3::first(_pairRes)),
74 x.m(EvtCyclic3::second(_pairRes)),m);
75 EvtTwoBodyKine vb(m,x.m(EvtCyclic3::other(_pairRes)),x.bigM());
76
77
78 // Compute mass-dependent width for relativistic propagators
79
80 if(_typeN != NBW) {
81
82 _prop->set_g0(_g0*_vd.widthFactor(vd));
83 }
84
85 // Compute propagator
86
87 amp *= _prop->evaluate(m);
88
89 // Compute form-factors
90
91 amp *= _vd.formFactor(vd);
92 amp *= _vb.formFactor(vb);
93
94 amp *= numerator(x);
95
96 return amp;
97}
98
99
101{
102 EvtComplex ret(0.,0.);
103 double m = sqrt(x.q(_pairRes));
104 EvtTwoBodyKine vd(x.m(EvtCyclic3::first(_pairRes)),
105 x.m(EvtCyclic3::second(_pairRes)),m);
106 EvtTwoBodyKine vb(m,x.m(EvtCyclic3::other(_pairRes)),x.bigM());
107
108 // Non-relativistic Breit-Wigner
109
110 if(NBW == _typeN) {
111
112 ret = angDep(x);
113 }
114
115 // Standard relativistic Zemach propagator
116
117 else if(RBW_ZEMACH == _typeN) {
118
120 }
121
122 // Kuehn-Santamaria normalization:
123
124 else if(RBW_KUEHN == _typeN) {
125
126 ret = _prop->m0()*_prop->m0() * angDep(x);
127 }
128
129
130 // CLEO amplitude is not factorizable
131 //
132 // The CLEO amplitude numerator is proportional to:
133 //
134 // m2_AC - m2_BC + (m2_D - m2_C)(m2_B - m2_A)/m2_0
135 //
136 // m2_AC = (eA + eC)^2 + (P - P_C cosTh(BC))^2
137 // m2_BC = (eB + eC)^2 + (P + P_C cosTh(BC))^2
138 //
139 // The first term m2_AB-m2_BC is therefore a p-wave term
140 // - 4PP_C cosTh(BC)
141 // The second term is an s-wave, the amplitude
142 // does not factorize!
143 //
144 // The first term is just Zemach. However, the sign is flipped!
145 // Let's consistently use the convention in which the amplitude
146 // is proportional to +cosTh(BC). In the CLEO expressions, I will
147 // therefore exchange AB to get rid of the sign flip.
148
149
150 if(RBW_CLEO == _typeN) {
151
152 Index iA = other(_pairAng); // A = other(BC)
153 Index iB = common(_pairRes,_pairAng); // B = common(AB,BC)
154 Index iC = other(_pairRes); // C = other(AB)
155
156 double M = x.bigM();
157 double mA = x.m(iA);
158 double mB = x.m(iB);
159 double mC = x.m(iC);
160 double qAB = x.q(combine(iA,iB));
161 double qBC = x.q(combine(iB,iC));
162 double qCA = x.q(combine(iC,iA));
163
164 double m0 = _prop->m0();
165
166 if(_spin == EvtSpinType::SCALAR) ret = EvtComplex(1.,0.);
167 else
168 if(_spin == EvtSpinType::VECTOR) {
169
170 ret = qBC - qCA + (M*M - mC*mC)*(mA*mA - mB*mB)/m0/m0;;
171 }
172 else
173 if(_spin == EvtSpinType::TENSOR) {
174
175 double x1 = qBC - qCA + (M*M - mC*mC)*(mA*mA - mB*mB)/m0/m0;
176 double x2 = M*M - mC*mC;
177 double x3 = qAB - 2*M*M - 2*mC*mC + x2*x2/m0/m0;
178 double x4 = mB*mB - mA*mA;
179 double x5 = qAB - 2*mB*mB - 2*mA*mA + x4*x4/m0/m0;
180 ret = (x1*x1 - 1./3.*x3*x5);
181 }
182 else assert(0);
183 }
184
185 return ret;
186}
187
188
189double EvtPto3PAmp::angDep(const EvtDalitzPoint& x) const
190{
191 // Angular dependece for factorizable amplitudes
192 // unphysical cosines indicate we are in big trouble
193
194 double cosTh = x.cosTh(_pairAng,_pairRes);
195 if(fabs(cosTh) > 1.) {
196
197 report(INFO,"EvtGen") << "cosTh " << cosTh << endl;
198 assert(0);
199 }
200
201 // in units of half-spin
202
203 return EvtdFunction::d(EvtSpinType::getSpin2(_spin),2*0,2*0,acos(cosTh));
204}
205
Double_t x[10]
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:36
@ INFO
Definition EvtReport.hh:52
EvtComplex evaluate(const T &p) const
double m0() const
void set_g0(double g0)
double angDep(const EvtDalitzPoint &p) const
void set_fb(double R)
void set_fd(double R)
EvtComplex numerator(const EvtDalitzPoint &p) const
virtual EvtComplex amplitude(const EvtDalitzPoint &p) const
EvtPto3PAmp(EvtDalitzPlot dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, EvtSpinType::spintype spin, const EvtPropagator &prop, NumType typeN)
static int getSpin2(spintype stype)
double formFactor(EvtTwoBodyKine x) const
void set_f(double R)
double widthFactor(EvtTwoBodyKine x) const
double phaseSpaceFactor(EvtTwoBodyKine x, EvtTwoBodyKine::Index) const
static double d(int j, int m1, int m2, double theta)
Index second(Pair i)
Index other(Index i, Index j)
Index first(Pair i)