00001 #include "TLorentzVector.h"
00002 #include "TConstant.h"
00003 #include <complex>
00004
00005 typedef std::complex<double> complex_t;
00006
00007 inline complex_t operator+(const double &x, const complex_t &y) {
00008 return y + x;
00009 }
00010
00011 inline complex_t operator-(const double &x, const complex_t &y) {
00012 return -(y - x);
00013 }
00014
00015 namespace rb{
00016 inline double Gamma(const double Q2,
00017 const double M2, const double G,
00018 const double mkpp2, const double mkmp2){
00019 const double mkmp22 = mkmp2*mkmp2;
00020 double beta2_q = (Q2*Q2 - 2*Q2*mkpp2 + mkmp22)/pow(Q2 - mkpp2,2);
00021 double beta2_M = (M2*M2 - 2*M2*mkpp2 + mkmp22)/pow(M2 - mkpp2,2);
00022 double beta2 = beta2_q/beta2_M;
00023 double beta = sqrt(beta2);
00024 return G*M2/Q2*beta2*beta;
00025 }
00026
00027 inline complex_t R(double Q2,
00028 double M2, double G,
00029 double Mp2, double Mm2){
00030 if(Q2<Mp2) return 0;
00031 const complex_t I(0,1);
00032 double Q = sqrt(Q2);
00033 complex_t prop = M2/(Q2 - M2 + I*(Gamma(Q2,M2,G,Mp2,Mm2)*Q));
00034 return prop;
00035 }
00036
00037 inline TLorentzVector PseudoScalars3(const TLorentzVector &qp,
00038 const TLorentzVector &qm,
00039 const TLorentzVector &q0){
00040
00041
00042
00043 double Jx = qp.Y()*qm.Z()*q0.T()
00044 - qp.Y()*qm.T()*q0.Z()
00045 + qp.T()*qm.Y()*q0.Z()
00046 - qp.T()*qm.Z()*q0.Y()
00047 + qp.Z()*qm.T()*q0.Y()
00048 - qp.Z()*qm.Y()*q0.T();
00049
00050 double Jy = qp.X()*qm.Z()*q0.T()
00051 - qp.X()*qm.T()*q0.Z()
00052 + qp.T()*qm.X()*q0.Z()
00053 - qp.T()*qm.Z()*q0.X()
00054 + qp.Z()*qm.T()*q0.X()
00055 - qp.Z()*qm.X()*q0.T();
00056
00057 double Jz = qp.Y()*qm.X()*q0.T()
00058 - qp.Y()*qm.T()*q0.X()
00059 + qp.T()*qm.Y()*q0.X()
00060 - qp.T()*qm.X()*q0.Y()
00061 + qp.X()*qm.T()*q0.Y()
00062 - qp.X()*qm.Y()*q0.T();
00063
00064 double Jt = qp.Y()*qm.Z()*q0.X()
00065 - qp.Y()*qm.X()*q0.Z()
00066 + qp.X()*qm.Y()*q0.Z()
00067 - qp.X()*qm.Z()*q0.Y()
00068 + qp.Z()*qm.X()*q0.Y()
00069 - qp.Z()*qm.Y()*q0.X();
00070
00071 TLorentzVector J(Jx,Jy,Jz,Jt);
00072 return J;
00073 }
00074
00075 }