BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TUtil.h
Go to the documentation of this file.
1#include "TConstant.h"
2#include "TLorentzVector.h"
3#include <complex>
4
5typedef std::complex<double> complex_t;
6
7inline complex_t operator+( const double& x, const complex_t& y ) { return y + x; }
8
9inline complex_t operator-( const double& x, const complex_t& y ) { return -( y - x ); }
10
11namespace rb {
12 inline double Gamma( const double Q2, const double M2, const double G, const double mkpp2,
13 const double mkmp2 ) {
14 const double mkmp22 = mkmp2 * mkmp2;
15 double beta2_q = ( Q2 * Q2 - 2 * Q2 * mkpp2 + mkmp22 ) / pow( Q2 - mkpp2, 2 );
16 double beta2_M = ( M2 * M2 - 2 * M2 * mkpp2 + mkmp22 ) / pow( M2 - mkpp2, 2 );
17 double beta2 = beta2_q / beta2_M;
18 double beta = sqrt( beta2 );
19 return G * M2 / Q2 * beta2 * beta;
20 }
21
22 inline complex_t R( double Q2, double M2, double G, double Mp2, double Mm2 ) {
23 if ( Q2 < Mp2 ) return 0;
24 const complex_t I( 0, 1 );
25 double Q = sqrt( Q2 );
26 complex_t prop = M2 / ( Q2 - M2 + I * ( Gamma( Q2, M2, G, Mp2, Mm2 ) * Q ) );
27 return prop;
28 }
29
30 inline TLorentzVector PseudoScalars3( const TLorentzVector& qp, const TLorentzVector& qm,
31 const TLorentzVector& q0 ) {
32 // The hadronic current
33 // here for 3pi J_\mu=\epsilon_{a b g \mu}q+_{a}q-_{b}q0_{g}
34
35 double Jx = qp.Y() * qm.Z() * q0.T() - qp.Y() * qm.T() * q0.Z() +
36 qp.T() * qm.Y() * q0.Z() - qp.T() * qm.Z() * q0.Y() +
37 qp.Z() * qm.T() * q0.Y() - qp.Z() * qm.Y() * q0.T();
38
39 double Jy = qp.X() * qm.Z() * q0.T() - qp.X() * qm.T() * q0.Z() +
40 qp.T() * qm.X() * q0.Z() - qp.T() * qm.Z() * q0.X() +
41 qp.Z() * qm.T() * q0.X() - qp.Z() * qm.X() * q0.T();
42
43 double Jz = qp.Y() * qm.X() * q0.T() - qp.Y() * qm.T() * q0.X() +
44 qp.T() * qm.Y() * q0.X() - qp.T() * qm.X() * q0.Y() +
45 qp.X() * qm.T() * q0.Y() - qp.X() * qm.Y() * q0.T();
46
47 double Jt = qp.Y() * qm.Z() * q0.X() - qp.Y() * qm.X() * q0.Z() +
48 qp.X() * qm.Y() * q0.Z() - qp.X() * qm.Z() * q0.Y() +
49 qp.Z() * qm.X() * q0.Y() - qp.Z() * qm.Y() * q0.X();
50
51 TLorentzVector J( Jx, Jy, Jz, Jt );
52 return J;
53 }
54
55} // namespace rb
const DifComplex I
complex_t operator-(const double &x, const complex_t &y)
Definition TUtil.h:9
complex_t operator+(const double &x, const complex_t &y)
Definition TUtil.h:7
std::complex< double > complex_t
Definition TUtil.h:5
Definition TConstant.h:3
complex_t R(double Q2, double M2, double G, double Mp2, double Mm2)
Definition TUtil.h:22
double Gamma(const double Q2, const double M2, const double G, const double mkpp2, const double mkmp2)
Definition TUtil.h:12
TLorentzVector PseudoScalars3(const TLorentzVector &qp, const TLorentzVector &qm, const TLorentzVector &q0)
Definition TUtil.h:30