BOSS 8.0.0
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 ()
virtual ~EvtAmplitude ()
EvtComplex evaluate (const EvtDalitzPoint &p) const

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 29 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 23 of file EvtPto3PAmp.cc.

27 , _pairAng( pairAng )
28 , _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 ) ),
35 prop.m0(), spin ) {}
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(), and EvtPto3PAmp().

◆ EvtPto3PAmp() [2/2]

EvtPto3PAmp::EvtPto3PAmp ( const EvtPto3PAmp & other)

Definition at line 37 of file EvtPto3PAmp.cc.

39 , _pairAng( other._pairAng )
40 , _pairRes( other._pairRes )
41 , _spin( other._spin )
42 , _typeN( other._typeN )
43 , _prop( ( other._prop ) ? (EvtPropagator*)other._prop->clone() : 0 )
44 , _g0( other._g0 )
45 , _vb( other._vb )
46 , _vd( other._vd ) {}

◆ ~EvtPto3PAmp()

EvtPto3PAmp::~EvtPto3PAmp ( )

Definition at line 48 of file EvtPto3PAmp.cc.

48 {
49 if ( _prop ) delete _prop;
50}

Member Function Documentation

◆ amplitude()

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

Implements EvtAmplitude< EvtDalitzPoint >.

Definition at line 56 of file EvtPto3PAmp.cc.

56 {
57 EvtComplex amp( 1.0, 0.0 );
58
59 double m = sqrt( x.q( _pairRes ) );
60 EvtTwoBodyKine vd( x.m( EvtCyclic3::first( _pairRes ) ),
61 x.m( EvtCyclic3::second( _pairRes ) ), m );
62 EvtTwoBodyKine vb( m, x.m( EvtCyclic3::other( _pairRes ) ), x.bigM() );
63
64 // Compute mass-dependent width for relativistic propagators
65
66 if ( _typeN != NBW ) { _prop->set_g0( _g0 * _vd.widthFactor( vd ) ); }
67
68 // Compute propagator
69
70 amp *= _prop->evaluate( m );
71
72 // Compute form-factors
73
74 amp *= _vd.formFactor( vd );
75 amp *= _vb.formFactor( vb );
76
77 amp *= numerator( x );
78
79 return amp;
80}
Double_t x[10]
EvtComplex numerator(const EvtDalitzPoint &p) const

◆ angDep()

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

Definition at line 161 of file EvtPto3PAmp.cc.

161 {
162 // Angular dependece for factorizable amplitudes
163 // unphysical cosines indicate we are in big trouble
164
165 double cosTh = x.cosTh( _pairAng, _pairRes );
166 if ( fabs( cosTh ) > 1. )
167 {
168
169 report( INFO, "EvtGen" ) << "cosTh " << cosTh << endl;
170 assert( 0 );
171 }
172
173 // in units of half-spin
174
175 return EvtdFunction::d( EvtSpinType::getSpin2( _spin ), 2 * 0, 2 * 0, acos( cosTh ) );
176}
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ 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 38 of file EvtPto3PAmp.hh.

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

Referenced by EvtPto3PAmp(), and EvtPto3PAmp().

◆ numerator()

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

Definition at line 82 of file EvtPto3PAmp.cc.

82 {
83 EvtComplex ret( 0., 0. );
84 double m = sqrt( x.q( _pairRes ) );
85 EvtTwoBodyKine vd( x.m( EvtCyclic3::first( _pairRes ) ),
86 x.m( EvtCyclic3::second( _pairRes ) ), m );
87 EvtTwoBodyKine vb( m, x.m( EvtCyclic3::other( _pairRes ) ), x.bigM() );
88
89 // Non-relativistic Breit-Wigner
90
91 if ( NBW == _typeN ) { ret = angDep( x ); }
92
93 // Standard relativistic Zemach propagator
94
95 else if ( RBW_ZEMACH == _typeN )
96 { ret = _vd.phaseSpaceFactor( vd, EvtTwoBodyKine::AB ) * angDep( x ); }
97
98 // Kuehn-Santamaria normalization:
99
100 else if ( RBW_KUEHN == _typeN ) { ret = _prop->m0() * _prop->m0() * angDep( x ); }
101
102 // CLEO amplitude is not factorizable
103 //
104 // The CLEO amplitude numerator is proportional to:
105 //
106 // m2_AC - m2_BC + (m2_D - m2_C)(m2_B - m2_A)/m2_0
107 //
108 // m2_AC = (eA + eC)^2 + (P - P_C cosTh(BC))^2
109 // m2_BC = (eB + eC)^2 + (P + P_C cosTh(BC))^2
110 //
111 // The first term m2_AB-m2_BC is therefore a p-wave term
112 // - 4PP_C cosTh(BC)
113 // The second term is an s-wave, the amplitude
114 // does not factorize!
115 //
116 // The first term is just Zemach. However, the sign is flipped!
117 // Let's consistently use the convention in which the amplitude
118 // is proportional to +cosTh(BC). In the CLEO expressions, I will
119 // therefore exchange AB to get rid of the sign flip.
120
121 if ( RBW_CLEO == _typeN )
122 {
123
124 Index iA = other( _pairAng ); // A = other(BC)
125 Index iB = common( _pairRes, _pairAng ); // B = common(AB,BC)
126 Index iC = other( _pairRes ); // C = other(AB)
127
128 double M = x.bigM();
129 double mA = x.m( iA );
130 double mB = x.m( iB );
131 double mC = x.m( iC );
132 double qAB = x.q( combine( iA, iB ) );
133 double qBC = x.q( combine( iB, iC ) );
134 double qCA = x.q( combine( iC, iA ) );
135
136 double m0 = _prop->m0();
137
138 if ( _spin == EvtSpinType::SCALAR ) ret = EvtComplex( 1., 0. );
139 else if ( _spin == EvtSpinType::VECTOR )
140 {
141
142 ret = qBC - qCA + ( M * M - mC * mC ) * ( mA * mA - mB * mB ) / m0 / m0;
143 ;
144 }
145 else if ( _spin == EvtSpinType::TENSOR )
146 {
147
148 double x1 = qBC - qCA + ( M * M - mC * mC ) * ( mA * mA - mB * mB ) / m0 / m0;
149 double x2 = M * M - mC * mC;
150 double x3 = qAB - 2 * M * M - 2 * mC * mC + x2 * x2 / m0 / m0;
151 double x4 = mB * mB - mA * mA;
152 double x5 = qAB - 2 * mB * mB - 2 * mA * mA + x4 * x4 / m0 / m0;
153 ret = ( x1 * x1 - 1. / 3. * x3 * x5 );
154 }
155 else assert( 0 );
156 }
157
158 return ret;
159}
double angDep(const EvtDalitzPoint &p) 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 54 of file EvtPto3PAmp.cc.

54{ _vb.set_f( R ); }

Referenced by EvtPto3PAmpFactory::processAmp().

◆ set_fd()

void EvtPto3PAmp::set_fd ( double R)

Definition at line 52 of file EvtPto3PAmp.cc.

52{ _vd.set_f( R ); }

Referenced by EvtPto3PAmpFactory::processAmp().


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