Skip to content
Snippets Groups Projects
KpoleMatrix.cc 2.73 KiB
Newer Older
Bertram Kopf's avatar
Bertram Kopf committed
#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);
    
  }  
}

Bertram Kopf's avatar
Bertram Kopf committed
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);
Bertram Kopf's avatar
Bertram Kopf committed
    }
  }
  
}

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]);