Skip to content

Commit

Permalink
Test both signs of \mu in the VCMSSM
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Dec 9, 2016
1 parent 66f4428 commit d7179f5
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 12 deletions.
22 changes: 16 additions & 6 deletions test/test_VCMSSM.hpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#ifndef TEST_VCMSSM_H
#define TEST_VCMSSM_H

#include "VCMSSM_two_scale_model.hpp"
#include "CMSSM_two_scale_model.hpp"
#include "CMSSM_mass_eigenstates.hpp"
#include "VCMSSM_mass_eigenstates.hpp"

#include "ew_input.hpp"
#include "wrappers.hpp"

void setup_VCMSSM_const(flexiblesusy::VCMSSM<flexiblesusy::Two_scale>& m,
void setup_VCMSSM_const(flexiblesusy::VCMSSM_mass_eigenstates& m,
const flexiblesusy::VCMSSM_input_parameters& input)
{
using namespace flexiblesusy;
Expand Down Expand Up @@ -75,7 +75,7 @@ void setup_VCMSSM_const(flexiblesusy::VCMSSM<flexiblesusy::Two_scale>& m,
m.set_vMSSM(vev);
}

void setup_VCMSSM(flexiblesusy::VCMSSM<flexiblesusy::Two_scale>& m,
void setup_VCMSSM(flexiblesusy::VCMSSM_mass_eigenstates& m,
flexiblesusy::VCMSSM_input_parameters& input)
{
input.m0 = 125.;
Expand All @@ -87,9 +87,19 @@ void setup_VCMSSM(flexiblesusy::VCMSSM<flexiblesusy::Two_scale>& m,
setup_VCMSSM_const(m, input);
}

void match_CMSSM_to_VCMSSM(flexiblesusy::CMSSM<flexiblesusy::Two_scale>& cmssm,
const flexiblesusy::VCMSSM<flexiblesusy::Two_scale>& vcmssm)
void match_CMSSM_to_VCMSSM(flexiblesusy::CMSSM_mass_eigenstates& cmssm,
const flexiblesusy::VCMSSM_mass_eigenstates& vcmssm)
{
using namespace flexiblesusy;

const VCMSSM_input_parameters vcmssm_input(vcmssm.get_input());
CMSSM_input_parameters cmssm_input;
cmssm_input.m0 = vcmssm_input.m0;
cmssm_input.m12 = vcmssm_input.m12;
cmssm_input.Azero = vcmssm_input.Azero;
cmssm_input.SignMu = vcmssm_input.SignMu;
cmssm.set_input_parameters(cmssm_input);

cmssm.set_scale(vcmssm.get_scale());
cmssm.set_loops(vcmssm.get_loops());
cmssm.set_g1(vcmssm.get_g1());
Expand Down
140 changes: 134 additions & 6 deletions test/test_VCMSSM_ewsb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ using namespace flexiblesusy;
BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_tree_level )
{
VCMSSM_input_parameters input;
VCMSSM<Two_scale> vcmssm(input);
VCMSSM_mass_eigenstates vcmssm(input);
const double precision = 1.0e-5;
setup_VCMSSM(vcmssm, input);

// initial guess
const double vev = Sqrt(Sqr(vcmssm.get_vd()) + Sqr(vcmssm.get_vu()));
vcmssm.set_Mu(500.);
vcmssm.set_Mu(input.SignMu * 500.);
vcmssm.set_vu(vev * Sin(ArcTan(input.TBGuess)));
vcmssm.set_vd(vev * Cos(ArcTan(input.TBGuess)));

Expand All @@ -34,7 +34,60 @@ BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_tree_level )
// check that the EWSB solution respects the chosen sign of Mu
BOOST_CHECK_EQUAL(input.SignMu, Sign(vcmssm_Mu_soln));

CMSSM<Two_scale> cmssm;
CMSSM_mass_eigenstates cmssm;
match_CMSSM_to_VCMSSM(cmssm, vcmssm);

// initial guess: VCMSSM solution with small perturbation
const double shift = 5.;
cmssm.set_Mu(vcmssm_Mu_soln + shift);
cmssm.set_BMu(vcmssm_BMu + shift);

cmssm.set_ewsb_iteration_precision(precision);
const int cmssm_error = cmssm.solve_ewsb_tree_level();

BOOST_CHECK_EQUAL(cmssm_error, 0);

BOOST_CHECK_SMALL(cmssm.get_ewsb_eq_hh_1(), precision);
BOOST_CHECK_SMALL(cmssm.get_ewsb_eq_hh_2(), precision);

const double cmssm_Mu_soln = cmssm.get_Mu();
const double cmssm_BMu_soln = cmssm.get_BMu();

BOOST_CHECK_CLOSE_FRACTION(vcmssm_Mu_soln, cmssm_Mu_soln, precision);
BOOST_CHECK_CLOSE_FRACTION(vcmssm_BMu, cmssm_BMu_soln, precision);
}

BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_tree_level_negative_Mu )
{
VCMSSM_input_parameters input;
VCMSSM_mass_eigenstates vcmssm(input);
const double precision = 1.0e-5;
setup_VCMSSM(vcmssm, input);

input.SignMu = -1;
vcmssm.set_input_parameters(input);

// initial guess
const double vev = Sqrt(Sqr(vcmssm.get_vd()) + Sqr(vcmssm.get_vu()));
vcmssm.set_Mu(input.SignMu * 500.);
vcmssm.set_vu(vev * Sin(ArcTan(input.TBGuess)));
vcmssm.set_vd(vev * Cos(ArcTan(input.TBGuess)));

vcmssm.set_ewsb_iteration_precision(precision);
const int vcmssm_error = vcmssm.solve_ewsb_tree_level();

BOOST_CHECK_EQUAL(vcmssm_error, 0);

BOOST_CHECK_SMALL(vcmssm.get_ewsb_eq_hh_1(), precision);
BOOST_CHECK_SMALL(vcmssm.get_ewsb_eq_hh_2(), precision);

const double vcmssm_Mu_soln = vcmssm.get_Mu();
const double vcmssm_BMu = vcmssm.get_BMu();

// check that the EWSB solution respects the chosen sign of Mu
BOOST_CHECK_EQUAL(input.SignMu, Sign(vcmssm_Mu_soln));

CMSSM_mass_eigenstates cmssm;
match_CMSSM_to_VCMSSM(cmssm, vcmssm);

// initial guess: VCMSSM solution with small perturbation
Expand All @@ -60,13 +113,88 @@ BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_tree_level )
BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_one_loop )
{
VCMSSM_input_parameters vcmssm_input;
VCMSSM<Two_scale> vcmssm(vcmssm_input);
VCMSSM_mass_eigenstates vcmssm(vcmssm_input);
const double precision = 1.0e-5;
setup_VCMSSM(vcmssm, vcmssm_input);

// initial guess
const double vev = Sqrt(Sqr(vcmssm.get_vd()) + Sqr(vcmssm.get_vu()));
vcmssm.set_Mu(vcmssm_input.SignMu * 100.);
vcmssm.set_vu(vev * Sin(ArcTan(vcmssm_input.TBGuess)));
vcmssm.set_vd(vev * Cos(ArcTan(vcmssm_input.TBGuess)));

vcmssm.calculate_DRbar_masses();

vcmssm.set_ewsb_iteration_precision(precision);
const int vcmssm_error = vcmssm.solve_ewsb_one_loop();

BOOST_CHECK_EQUAL(vcmssm_error, 0);

const std::complex<double> vcmssm_tadpole_hh_1(vcmssm.tadpole_hh(0));
const std::complex<double> vcmssm_tadpole_hh_2(vcmssm.tadpole_hh(1));

BOOST_CHECK_SMALL(Im(vcmssm_tadpole_hh_1), 1.0e-12);
BOOST_CHECK_SMALL(Im(vcmssm_tadpole_hh_2), 1.0e-12);

BOOST_CHECK_SMALL(vcmssm.get_ewsb_eq_hh_1() - Re(vcmssm_tadpole_hh_1), 1.0);
BOOST_CHECK_SMALL(vcmssm.get_ewsb_eq_hh_2() - Re(vcmssm_tadpole_hh_2), 1.0);

const double vcmssm_Mu_soln = vcmssm.get_Mu();
const double vcmssm_BMu = vcmssm.get_BMu();

// check that the EWSB solution respects the chosen sign of Mu
BOOST_CHECK_EQUAL(vcmssm_input.SignMu, Sign(vcmssm_Mu_soln));

CMSSM_input_parameters cmssm_input;
cmssm_input.m12 = vcmssm_input.m12;
cmssm_input.m0 = vcmssm_input.m0;
cmssm_input.Azero = vcmssm_input.Azero;
cmssm_input.TanBeta = vcmssm.get_vu() / vcmssm.get_vd();
cmssm_input.SignMu = vcmssm_input.SignMu;
CMSSM_mass_eigenstates cmssm(cmssm_input);
match_CMSSM_to_VCMSSM(cmssm, vcmssm);

cmssm.calculate_DRbar_masses();

// initial guess: VCMSSM solution with small perturbation
const double shift = 5.;
cmssm.set_Mu(vcmssm_Mu_soln + shift);
cmssm.set_BMu(vcmssm_BMu + shift);

cmssm.set_ewsb_iteration_precision(precision);
const int cmssm_error = cmssm.solve_ewsb_one_loop();

BOOST_CHECK_EQUAL(cmssm_error, 0);

const std::complex<double> cmssm_tadpole_hh_1(cmssm.tadpole_hh(0));
const std::complex<double> cmssm_tadpole_hh_2(cmssm.tadpole_hh(1));

BOOST_CHECK_SMALL(Im(cmssm_tadpole_hh_1), 1.0e-12);
BOOST_CHECK_SMALL(Im(cmssm_tadpole_hh_2), 1.0e-12);

BOOST_CHECK_SMALL(cmssm.get_ewsb_eq_hh_1() - Re(cmssm_tadpole_hh_1), 2.0);
BOOST_CHECK_SMALL(cmssm.get_ewsb_eq_hh_2() - Re(cmssm_tadpole_hh_2), 2.0);

const double cmssm_Mu_soln = cmssm.get_Mu();
const double cmssm_BMu_soln = cmssm.get_BMu();

BOOST_CHECK_CLOSE_FRACTION(vcmssm_Mu_soln, cmssm_Mu_soln, precision);
BOOST_CHECK_CLOSE_FRACTION(vcmssm_BMu, cmssm_BMu_soln, precision);
}

BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_one_loop_negative_Mu )
{
VCMSSM_input_parameters vcmssm_input;
VCMSSM_mass_eigenstates vcmssm(vcmssm_input);
const double precision = 1.0e-5;
setup_VCMSSM(vcmssm, vcmssm_input);

vcmssm_input.SignMu = -1;
vcmssm.set_input_parameters(vcmssm_input);

// initial guess
const double vev = Sqrt(Sqr(vcmssm.get_vd()) + Sqr(vcmssm.get_vu()));
vcmssm.set_Mu(100.);
vcmssm.set_Mu(vcmssm_input.SignMu * 100.);
vcmssm.set_vu(vev * Sin(ArcTan(vcmssm_input.TBGuess)));
vcmssm.set_vd(vev * Cos(ArcTan(vcmssm_input.TBGuess)));

Expand Down Expand Up @@ -98,7 +226,7 @@ BOOST_AUTO_TEST_CASE( test_VCMSSM_ewsb_one_loop )
cmssm_input.Azero = vcmssm_input.Azero;
cmssm_input.TanBeta = vcmssm.get_vu() / vcmssm.get_vd();
cmssm_input.SignMu = vcmssm_input.SignMu;
CMSSM<Two_scale> cmssm(cmssm_input);
CMSSM_mass_eigenstates cmssm(cmssm_input);
match_CMSSM_to_VCMSSM(cmssm, vcmssm);

cmssm.calculate_DRbar_masses();
Expand Down

0 comments on commit d7179f5

Please sign in to comment.