Skip to content

Commit

Permalink
backporting GM2Calc 0.2.7
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Aug 6, 2015
1 parent b91f725 commit c0e1db3
Show file tree
Hide file tree
Showing 25 changed files with 640 additions and 161 deletions.
37 changes: 34 additions & 3 deletions addons/gm2calc/MSSMNoFV_onshell.cpp
Expand Up @@ -25,6 +25,7 @@
#include <cmath>
#include <complex>
#include <iostream>
#include <sstream>

#define WARNING(message) std::cerr << "Warning: " << message << '\n';

Expand All @@ -45,7 +46,6 @@ namespace {
}
}

namespace flexiblesusy {
namespace gm2calc {

MSSMNoFV_onshell::MSSMNoFV_onshell()
Expand Down Expand Up @@ -82,6 +82,15 @@ void MSSMNoFV_onshell::set_alpha_thompson(double alpha)
EL0 = calculate_e(alpha);
}

void MSSMNoFV_onshell::set_TB(double tanb)
{
const double vev = std::sqrt(sqr(vu) + sqr(vd));
const double sinb = tanb / std::sqrt(1 + tanb*tanb);
const double cosb = 1. / std::sqrt(1 + tanb*tanb);
set_vd(vev * cosb);
set_vu(vev * sinb);
}

/**
* Returns the electromagnetig gauge coupling in the Thompson limit.
*/
Expand Down Expand Up @@ -110,7 +119,11 @@ void MSSMNoFV_onshell::convert_to_onshell(double precision) {
convert_yukawa_couplings(); // first guess of resummed yukawas
convert_mf2(precision, 1000);
convert_yukawa_couplings();

// final mass spectrum
get_problems().clear();
calculate_DRbar_masses();
check_problems();
}

/**
Expand All @@ -127,7 +140,11 @@ void MSSMNoFV_onshell::calculate_masses() {
convert_vev();
convert_yukawa_couplings_treelevel();
convert_yukawa_couplings(); // tan(beta) resummation in Yukawas
calculate_DRbar_masses(); // final mass spectrum

// final mass spectrum
get_problems().clear();
calculate_DRbar_masses();
check_problems();

// copy SUSY masses to physical struct
copy_susy_masses_to_pole();
Expand All @@ -143,6 +160,21 @@ void MSSMNoFV_onshell::check_input()
throw EInvalidInput("Z mass is zero");
if (is_zero(get_MM()))
throw EInvalidInput("Muon mass is zero");
if (is_zero(get_MassB()))
throw EInvalidInput("Bino mass M1 is zero");
if (is_zero(get_MassWB()))
throw EInvalidInput("Bino mass M2 is zero");
if (is_zero(get_MassG()))
throw EInvalidInput("Gluino mass M3 is zero");
}

void MSSMNoFV_onshell::check_problems()
{
if (get_problems().have_problem()) {
std::ostringstream sstr;
sstr << get_problems();
throw EPhysicalProblem(sstr.str());
}
}

void MSSMNoFV_onshell::copy_susy_masses_to_pole()
Expand Down Expand Up @@ -461,4 +493,3 @@ std::ostream& operator<<(std::ostream& os, const MSSMNoFV_onshell& model)
}

} // gm2calc
} // namespace flexiblesusy
4 changes: 2 additions & 2 deletions addons/gm2calc/MSSMNoFV_onshell.hpp
Expand Up @@ -23,7 +23,6 @@
#include <limits>
#include <Eigen/Core>

namespace flexiblesusy {
namespace gm2calc {

class MSSMNoFV_onshell : public MSSMNoFV_onshell_mass_eigenstates {
Expand All @@ -44,6 +43,7 @@ class MSSMNoFV_onshell : public MSSMNoFV_onshell_mass_eigenstates {
void set_Au(unsigned i, unsigned k, double a) { Au(i,k) = a; }
void set_Ad(unsigned i, unsigned k, double a) { Ad(i,k) = a; }
void set_MA0(double m) { get_physical().MAh(1) = m; }
void set_TB(double);

double get_MUDIM() const {return get_scale();}
double get_EL0() const {return EL0;}
Expand Down Expand Up @@ -105,6 +105,7 @@ class MSSMNoFV_onshell : public MSSMNoFV_onshell_mass_eigenstates {
unsigned find_bino_like_neutralino();

void check_input();
void check_problems();
void convert_gauge_couplings();
void convert_BMu();
void convert_mf2(double, unsigned);
Expand All @@ -115,6 +116,5 @@ class MSSMNoFV_onshell : public MSSMNoFV_onshell_mass_eigenstates {
};

} // namespace gm2calc
} // namespace flexiblesusy

#endif
70 changes: 41 additions & 29 deletions addons/gm2calc/MSSMNoFV_onshell_mass_eigenstates.cpp
Expand Up @@ -32,7 +32,6 @@
#include "eigen_utils.hpp"
#include "linalg2.hpp"
#include "numerics2.hpp"
#include "error.hpp"
#include "ffunctions.hpp"

#include <cmath>
Expand Down Expand Up @@ -65,9 +64,9 @@ void Hermitianize(Eigen::MatrixBase<Derived>& m)
}
} // anonymous namespace

namespace flexiblesusy {
namespace gm2calc {

using namespace gm2calc;
using namespace flexiblesusy;

#define CLASSNAME MSSMNoFV_onshell_mass_eigenstates
#define PHYSICAL(parameter) physical.parameter
Expand All @@ -78,6 +77,7 @@ CLASSNAME::MSSMNoFV_onshell_mass_eigenstates()
, force_output(false)
, precision(1.0e-3)
, physical()
, problems()
, MVG(0), MGlu(0), MVP(0), MVZ(0), MFd(0), MFs(0), MFb(0), MFu(0), MFc(0),
MFt(0), MFve(0), MFvm(0), MFvt(0), MFe(0), MFm(0), MFtau(0), MSveL(0), MSvmL
(0), MSvtL(0), MSd(Eigen::Array<double,2,1>::Zero()), MSu(Eigen::Array<
Expand Down Expand Up @@ -133,6 +133,16 @@ void CLASSNAME::set_physical(const MSSMNoFV_onshell_physical& physical_)
physical = physical_;
}

const MSSMNoFV_onshell_problems& CLASSNAME::get_problems() const
{
return problems;
}

MSSMNoFV_onshell_problems& CLASSNAME::get_problems()
{
return problems;
}

int CLASSNAME::solve_ewsb_tree_level()
{
return solve_ewsb_tree_level_via_soft_higgs_masses();
Expand Down Expand Up @@ -232,6 +242,7 @@ void CLASSNAME::print(std::ostream& ostr) const
ostr << "UP = " << UP << '\n';

physical.print(ostr);
problems.print(ostr);
}

/**
Expand Down Expand Up @@ -423,6 +434,7 @@ void CLASSNAME::clear()
MSSMNoFV_onshell_soft_parameters::clear();
clear_DRbar_parameters();
physical.clear();
problems.clear();
}

std::string CLASSNAME::name() const
Expand Down Expand Up @@ -670,7 +682,7 @@ void CLASSNAME::calculate_MSveL()
MSveL = std::abs(mass_matrix_SveL);

// if (MSveL < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::SveL);
// problems.flag_tachyon("SveL");

MSveL = std::sqrt(std::abs(MSveL));
}
Expand All @@ -688,8 +700,8 @@ void CLASSNAME::calculate_MSvmL()
const auto mass_matrix_SvmL = get_mass_matrix_SvmL();
MSvmL = std::abs(mass_matrix_SvmL);

// if (MSvmL < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::SvmL);
if (MSvmL < 0.)
problems.flag_tachyon("SvmL");

MSvmL = std::sqrt(std::abs(MSvmL));
}
Expand All @@ -708,7 +720,7 @@ void CLASSNAME::calculate_MSvtL()
MSvtL = std::abs(mass_matrix_SvtL);

// if (MSvtL < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::SvtL);
// problems.flag_tachyon("SvtL");

MSvtL = std::sqrt(std::abs(MSvtL));
}
Expand Down Expand Up @@ -736,7 +748,7 @@ void CLASSNAME::calculate_MSd()
fs_diagonalize_hermitian(mass_matrix_Sd, MSd, ZD);

// if (MSd.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Sd);
// problems.flag_tachyon("Sd");

MSd = sqrt(MSd.cwiseAbs());
}
Expand Down Expand Up @@ -764,7 +776,7 @@ void CLASSNAME::calculate_MSu()
fs_diagonalize_hermitian(mass_matrix_Su, MSu, ZU);

// if (MSu.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Su);
// problems.flag_tachyon("Su");

MSu = sqrt(MSu.cwiseAbs());
}
Expand Down Expand Up @@ -792,7 +804,7 @@ void CLASSNAME::calculate_MSe()
fs_diagonalize_hermitian(mass_matrix_Se, MSe, ZE);

// if (MSe.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Se);
// problems.flag_tachyon("Se");

MSe = sqrt(MSe.cwiseAbs());
}
Expand All @@ -819,8 +831,8 @@ void CLASSNAME::calculate_MSm()
const auto mass_matrix_Sm(get_mass_matrix_Sm());
fs_diagonalize_hermitian(mass_matrix_Sm, MSm, ZM);

// if (MSm.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Sm);
if (MSm.minCoeff() < 0.)
problems.flag_tachyon("Sm");

MSm = sqrt(MSm.cwiseAbs());
}
Expand All @@ -847,8 +859,8 @@ void CLASSNAME::calculate_MStau()
const auto mass_matrix_Stau(get_mass_matrix_Stau());
fs_diagonalize_hermitian(mass_matrix_Stau, MStau, ZTau);

// if (MStau.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Stau);
if (MStau.minCoeff() < 0.)
problems.flag_tachyon("Stau");

MStau = sqrt(MStau.cwiseAbs());
}
Expand Down Expand Up @@ -876,7 +888,7 @@ void CLASSNAME::calculate_MSs()
fs_diagonalize_hermitian(mass_matrix_Ss, MSs, ZS);

// if (MSs.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Ss);
// problems.flag_tachyon("Ss");

MSs = sqrt(MSs.cwiseAbs());
}
Expand Down Expand Up @@ -904,7 +916,7 @@ void CLASSNAME::calculate_MSc()
fs_diagonalize_hermitian(mass_matrix_Sc, MSc, ZC);

// if (MSc.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Sc);
// problems.flag_tachyon("Sc");

MSc = sqrt(MSc.cwiseAbs());
}
Expand All @@ -931,8 +943,8 @@ void CLASSNAME::calculate_MSb()
const auto mass_matrix_Sb(get_mass_matrix_Sb());
fs_diagonalize_hermitian(mass_matrix_Sb, MSb, ZB);

// if (MSb.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Sb);
if (MSb.minCoeff() < 0.)
problems.flag_tachyon("Sb");

MSb = sqrt(MSb.cwiseAbs());
}
Expand All @@ -959,8 +971,8 @@ void CLASSNAME::calculate_MSt()
const auto mass_matrix_St(get_mass_matrix_St());
fs_diagonalize_hermitian(mass_matrix_St, MSt, ZT);

// if (MSt.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::St);
if (MSt.minCoeff() < 0.)
problems.flag_tachyon("St");

MSt = sqrt(MSt.cwiseAbs());
}
Expand All @@ -986,8 +998,8 @@ void CLASSNAME::calculate_Mhh()
const auto mass_matrix_hh(get_mass_matrix_hh());
fs_diagonalize_hermitian(mass_matrix_hh, Mhh, ZH);

// if (Mhh.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::hh);
if (Mhh.minCoeff() < 0.)
problems.flag_tachyon("hh");

Mhh = sqrt(Mhh.cwiseAbs());
}
Expand Down Expand Up @@ -1018,8 +1030,8 @@ void CLASSNAME::calculate_MAh()
const auto mass_matrix_Ah(get_mass_matrix_Ah());
fs_diagonalize_hermitian(mass_matrix_Ah, MAh, ZA);

// if (MAh.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Ah);
if (MAh.minCoeff() < 0.)
problems.flag_tachyon("Ah");

MAh = sqrt(MAh.cwiseAbs());
}
Expand All @@ -1044,8 +1056,8 @@ void CLASSNAME::calculate_MHpm()
const auto mass_matrix_Hpm(get_mass_matrix_Hpm());
fs_diagonalize_hermitian(mass_matrix_Hpm, MHpm, ZP);

// if (MHpm.minCoeff() < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::Hpm);
if (MHpm.minCoeff() < 0.)
problems.flag_tachyon("Hpm");

MHpm = sqrt(MHpm.cwiseAbs());
}
Expand Down Expand Up @@ -1106,8 +1118,8 @@ void CLASSNAME::calculate_MVWm()
const auto mass_matrix_VWm = get_mass_matrix_VWm();
MVWm = std::abs(mass_matrix_VWm);

// if (MVWm < 0.)
// problems.flag_tachyon(MSSMNoFV_onshell_info::VWm);
if (MVWm < 0.)
problems.flag_tachyon("VWm");

MVWm = std::sqrt(std::abs(MVWm));
}
Expand Down Expand Up @@ -1148,4 +1160,4 @@ std::ostream& operator<<(std::ostream& ostr, const MSSMNoFV_onshell_mass_eigenst
return ostr;
}

} // namespace flexiblesusy
} // namespace gm2calc
7 changes: 4 additions & 3 deletions addons/gm2calc/MSSMNoFV_onshell_mass_eigenstates.hpp
Expand Up @@ -32,13 +32,13 @@

#include "MSSMNoFV_onshell_soft_parameters.hpp"
#include "MSSMNoFV_onshell_physical.hpp"
#include "MSSMNoFV_onshell_problems.hpp"

#include <iosfwd>
#include <string>

#include <Eigen/Core>

namespace flexiblesusy {
namespace gm2calc {

/**
Expand All @@ -64,13 +64,14 @@ class MSSMNoFV_onshell_mass_eigenstates : public MSSMNoFV_onshell_soft_parameter
void set_physical(const MSSMNoFV_onshell_physical&);
const MSSMNoFV_onshell_physical& get_physical() const;
MSSMNoFV_onshell_physical& get_physical();
const MSSMNoFV_onshell_problems& get_problems() const;
MSSMNoFV_onshell_problems& get_problems();
int solve_ewsb_tree_level();
int solve_ewsb();

std::string name() const;
void print(std::ostream&) const;


double get_MVG() const { return MVG; }
double get_MGlu() const { return MGlu; }
double get_MVP() const { return MVP; }
Expand Down Expand Up @@ -238,6 +239,7 @@ class MSSMNoFV_onshell_mass_eigenstates : public MSSMNoFV_onshell_soft_parameter
bool force_output; ///< switch to force output of pole masses
double precision; ///< RG running precision
MSSMNoFV_onshell_physical physical; ///< contains the pole masses and mixings
MSSMNoFV_onshell_problems problems; ///< problems

int solve_ewsb_tree_level_via_soft_higgs_masses();

Expand Down Expand Up @@ -301,6 +303,5 @@ class MSSMNoFV_onshell_mass_eigenstates : public MSSMNoFV_onshell_soft_parameter
std::ostream& operator<<(std::ostream&, const MSSMNoFV_onshell_mass_eigenstates&);

} // namespace gm2calc
} // namespace flexiblesusy

#endif

0 comments on commit c0e1db3

Please sign in to comment.