CGEM BOSS 6.6.5.h
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPto3PAmp Class Reference

#include <EvtPto3PAmp.hh>

+ Inheritance diagram for EvtPto3PAmp:

Public Types

enum  NumType { NBW =0 , RBW_ZEMACH =1 , RBW_KUEHN =2 , RBW_CLEO =3 }
 

Public Member Functions

 EvtPto3PAmp (EvtDalitzPlot dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, EvtSpinType::spintype spin, const EvtPropagator &prop, NumType typeN)
 
 EvtPto3PAmp (const EvtPto3PAmp &other)
 
 ~EvtPto3PAmp ()
 
virtual EvtAmplitude< EvtDalitzPoint > * clone () const
 
virtual EvtComplex amplitude (const EvtDalitzPoint &p) const
 
EvtComplex numerator (const EvtDalitzPoint &p) const
 
double angDep (const EvtDalitzPoint &p) const
 
void set_fd (double R)
 
void set_fb (double R)
 
- Public Member Functions inherited from EvtAmplitude< EvtDalitzPoint >
 EvtAmplitude ()
 
 EvtAmplitude (const EvtAmplitude &)
 
virtual ~EvtAmplitude ()
 
EvtComplex evaluate (const EvtDalitzPoint &p) const
 

Additional Inherited Members

- Protected Member Functions inherited from EvtAmplitude< EvtDalitzPoint >

Detailed Description

Definition at line 25 of file EvtPto3PAmp.hh.

Member Enumeration Documentation

◆ NumType

Enumerator
NBW 
RBW_ZEMACH 
RBW_KUEHN 
RBW_CLEO 

Definition at line 31 of file EvtPto3PAmp.hh.

Constructor & Destructor Documentation

◆ EvtPto3PAmp() [1/2]

EvtPto3PAmp::EvtPto3PAmp ( EvtDalitzPlot dp,
EvtCyclic3::Pair pairAng,
EvtCyclic3::Pair pairRes,
EvtSpinType::spintype spin,
const EvtPropagator & prop,
NumType typeN )

Definition at line 24 of file EvtPto3PAmp.cc.

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{}
virtual EvtAmplitude< T > * clone() const =0
double bigM() const
double m(EvtCyclic3::Index i) const
double g0() const
double m0() const
Index second(Pair i)
Index other(Index i, Index j)
Index first(Pair i)

Referenced by clone().

◆ EvtPto3PAmp() [2/2]

EvtPto3PAmp::EvtPto3PAmp ( const EvtPto3PAmp & other)

Definition at line 39 of file EvtPto3PAmp.cc.

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{}

◆ ~EvtPto3PAmp()

EvtPto3PAmp::~EvtPto3PAmp ( )

Definition at line 51 of file EvtPto3PAmp.cc.

52{
53 if(_prop) delete _prop;
54}

Member Function Documentation

◆ amplitude()

EvtComplex EvtPto3PAmp::amplitude ( const EvtDalitzPoint & p) const
virtual

Implements EvtAmplitude< EvtDalitzPoint >.

Definition at line 68 of file EvtPto3PAmp.cc.

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}
Double_t x[10]
EvtComplex evaluate(const T &p) const
void set_g0(double g0)
EvtComplex numerator(const EvtDalitzPoint &p) const
double formFactor(EvtTwoBodyKine x) const
double widthFactor(EvtTwoBodyKine x) const

◆ angDep()

double EvtPto3PAmp::angDep ( const EvtDalitzPoint & p) const

Definition at line 189 of file EvtPto3PAmp.cc.

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}
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:36
@ INFO
Definition EvtReport.hh:52
static int getSpin2(spintype stype)
static double d(int j, int m1, int m2, double theta)

Referenced by numerator().

◆ clone()

virtual EvtAmplitude< EvtDalitzPoint > * EvtPto3PAmp::clone ( ) const
inlinevirtual

Implements EvtAmplitude< EvtDalitzPoint >.

Definition at line 43 of file EvtPto3PAmp.hh.

44 { return new EvtPto3PAmp(*this); }
EvtPto3PAmp(EvtDalitzPlot dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, EvtSpinType::spintype spin, const EvtPropagator &prop, NumType typeN)

◆ numerator()

EvtComplex EvtPto3PAmp::numerator ( const EvtDalitzPoint & p) const

Definition at line 100 of file EvtPto3PAmp.cc.

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}
double angDep(const EvtDalitzPoint &p) const
double phaseSpaceFactor(EvtTwoBodyKine x, EvtTwoBodyKine::Index) const
Index common(Pair i, Pair j)
Pair combine(Index i, Index j)

Referenced by amplitude().

◆ set_fb()

void EvtPto3PAmp::set_fb ( double R)

Definition at line 62 of file EvtPto3PAmp.cc.

63{
64 _vb.set_f(R);
65}
void set_f(double R)

Referenced by EvtPto3PAmpFactory::processAmp().

◆ set_fd()

void EvtPto3PAmp::set_fd ( double R)

Definition at line 57 of file EvtPto3PAmp.cc.

58{
59 _vd.set_f(R);
60}

Referenced by EvtPto3PAmpFactory::processAmp().


The documentation for this class was generated from the following files: