Newer
Older
#include "qft++/matrix/KpoleMatrix.hh"
#include "qft++/relativistic-quantum-mechanics/Utils.hh"
KpoleMatrix::KpoleMatrix(const vector<double>& g_i, const double mass_0, const vector< pair<double, double> >& mDecPair, int orbMom):
Matrix< complex<double> >::Matrix(int(g_i.size()), int(g_i.size()))
, _orbMom(orbMom)
, _g_i(g_i)
, _poleMass(mass_0)
,_mDecPair(mDecPair)
{
//calculate phase-space factors
for (int i=0; i<int(_g_i.size()); ++i){
complex<double> tmpRhoPoleFactors=phaseSpaceFac(_poleMass,_mDecPair[i].first, _mDecPair[i].second);
_rhoPoleFactors.push_back(tmpRhoPoleFactors);
complex<double> tmpBreakupFactors=breakupMomQ(_poleMass,_mDecPair[i].first, _mDecPair[i].second);
_breakupFactors.push_back(tmpBreakupFactors);
}
}
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
KpoleMatrix::KpoleMatrix(const KpoleMatrix &theCopy):
Matrix< complex<double> >::Matrix(int(theCopy._g_i.size()), int(theCopy._g_i.size()))
, _orbMom(theCopy._orbMom)
,_g_i(theCopy._g_i)
, _poleMass(theCopy._poleMass)
,_mDecPair(theCopy._mDecPair)
{
//calculate phase-space factors
for (int i=0; i<int(_g_i.size()); ++i){
complex<double> tmpRhoPoleFactors=phaseSpaceFac(_poleMass,_mDecPair[i].first, _mDecPair[i].second);
_rhoPoleFactors.push_back(tmpRhoPoleFactors);
complex<double> tmpBreakupFactors=breakupMomQ(_poleMass,_mDecPair[i].first, _mDecPair[i].second);
_breakupFactors.push_back(tmpBreakupFactors);
}
}
KpoleMatrix::~KpoleMatrix(){
}
void KpoleMatrix::updateMatrix(const double mass){
//calculate phase-space factors
vector< complex<double> > rhoFactors;
vector< complex<double> > barrierFactors;
for (int i=0; i< int(_g_i.size()); ++i){
complex<double> tmpRhoFactors=phaseSpaceFac(mass,_mDecPair[i].first, _mDecPair[i].second);
rhoFactors.push_back(tmpRhoFactors);
complex<double> tmpBarrierFactor(1.,0.);
if(_orbMom>0) tmpBarrierFactor=pow(breakupMomQ(mass, _mDecPair[i].first, _mDecPair[i].second)/_breakupFactors[i], _orbMom);
barrierFactors.push_back(tmpBarrierFactor);
}
for (int i=0; i< int(_g_i.size()); ++i){
for (int j=0; j< int(_g_i.size()); ++j){
this->operator()(i,j)= ( _g_i[i]*_g_i[j]*sqrt(rhoFactors[i]*barrierFactors[i]*rhoFactors[j]*barrierFactors[j]))/(_poleMass*_poleMass-mass*mass);
}
}
}
void KpoleMatrix::updateMatrixRel(const double mass){
updateMatrix(mass);
vector< complex<double> > rhoFactors;
for (int i=0; i< int(_g_i.size()); ++i){
complex<double> tmpRhoFactors=phaseSpaceFac(mass,_mDecPair[i].first, _mDecPair[i].second);
rhoFactors.push_back(tmpRhoFactors);
}
for (int i=0; i< int(_g_i.size()); ++i){
for (int j=0; j< int(_g_i.size()); ++j){
this->operator()(i,j) /= sqrt(rhoFactors[i]*rhoFactors[j]);