Skip to content

Commit

Permalink
allow user to change loop order of matching at SUSY scale
Browse files Browse the repository at this point in the history
Note: In order to reproduce the pure EFT results for large SUSY
scales, the matching low -> high-scale model must be performed at the
2-loop level (1-loop is not sufficient).  The reason seems to be the
2-loop QCD contribution to the top pole mass used to determine the yt
in the full model.
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Jul 27, 2016
1 parent 38cf798 commit 8e35cbc
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 27 deletions.
Expand Up @@ -130,6 +130,7 @@ void @ModelName@_standard_model_spectrum_generator<T>::run(const softsusy::QedQc
matching.set_models(&eft, &model);
matching.set_constraint(&susy_scale_constraint);
matching.set_scale(this->settings.get(Spectrum_generator_settings::eft_matching_scale));
matching.set_loop_order(this->settings.get(Spectrum_generator_settings::eft_matching_loop_order));

high_scale_constraint.initialize();
susy_scale_constraint.initialize();
Expand Down
Expand Up @@ -125,6 +125,7 @@ void @ModelName@_standard_model_spectrum_generator<T>::run(const softsusy::QedQc
matching.set_models(&eft, &model);
matching.set_constraint(&susy_scale_constraint);
matching.set_scale(this->settings.get(Spectrum_generator_settings::eft_matching_scale));
matching.set_loop_order(this->settings.get(Spectrum_generator_settings::eft_matching_loop_order));

susy_scale_constraint.initialize();
low_scale_constraint .initialize();
Expand Down
91 changes: 75 additions & 16 deletions templates/standard_model_matching.cpp.in
Expand Up @@ -58,32 +58,56 @@ void @ModelName@_standard_model_matching::match_high_to_low_scale_model_tree_lev
* 1-loop Higgs pole masses are equal in both models.
*/
void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
Standard_model& sm, @ModelName@_mass_eigenstates& model)
Standard_model& sm, @ModelName@_mass_eigenstates& model, unsigned loop_order)
{
const auto model_pole_mass_order = model.get_pole_mass_loop_order();
const auto sm_pole_mass_order = sm.get_pole_mass_loop_order();

model.set_pole_mass_loop_order(1);
sm.set_pole_mass_loop_order(1);
if (loop_order == 0) {
match_high_to_low_scale_model_tree_level(sm, model);
return;
}

model.calculate_DRbar_masses();
model.solve_ewsb_one_loop();
model.calculate_M@HiggsBoson@_pole();
// temporarily set loop order to `loop_order'
const unsigned model_pole_mass_order = model.get_pole_mass_loop_order();
const unsigned model_ewsb_order = model.get_ewsb_loop_order();
const unsigned sm_pole_mass_order = sm.get_pole_mass_loop_order();
const unsigned sm_ewsb_order = sm.get_ewsb_loop_order();

sm.calculate_DRbar_masses();
sm.solve_ewsb_one_loop();
sm.calculate_Mhh_pole();
model.set_pole_mass_loop_order(loop_order);
model.set_ewsb_loop_order(loop_order);
sm.set_pole_mass_loop_order(loop_order);
sm.set_ewsb_loop_order(loop_order);

sm.set_Lambdax((Sqr(model.get_physical().M@HiggsBoson_0@) - Sqr(sm.get_physical().Mhh) + Sqr(sm.get_Mhh()))/Sqr(sm.get_v()));
match_high_to_low_scale_model(sm, model);

// reset loop order
model.set_pole_mass_loop_order(model_pole_mass_order);
model.set_ewsb_loop_order(model_ewsb_order);
sm.set_pole_mass_loop_order(sm_pole_mass_order);
sm.set_ewsb_loop_order(sm_ewsb_order);

model.calculate_DRbar_masses();
model.solve_ewsb();
sm.calculate_DRbar_masses();
sm.solve_ewsb();
}


/**
* Calculates \f$\lambda(Q)\f$ at the current loop level from the
* lightest CP-even Higgs boson mass of the @ModelName@ by requiring
* that the Higgs pole masses are equal in both models.
*/
void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
Standard_model& sm, @ModelName@_mass_eigenstates& model)
{
model.calculate_DRbar_masses();
model.solve_ewsb();
model.calculate_M@HiggsBoson@_pole();

sm.calculate_DRbar_masses();
sm.solve_ewsb();
sm.calculate_Mhh_pole();

sm.set_Lambdax((Sqr(model.get_physical().M@HiggsBoson_0@) - Sqr(sm.get_physical().Mhh) + Sqr(sm.get_Mhh()))/Sqr(sm.get_v()));
}

/**
Expand Down Expand Up @@ -173,6 +197,44 @@ static void calculate_SM_pole_masses(@ModelName@_mass_eigenstates& model, Standa
* the @ModelName@ at the 1-loop level from the known Standard Model
* couplings and the SM vev.
*/
void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
@ModelName@_mass_eigenstates& model, Standard_model& sm, unsigned loop_order)
{
if (loop_order == 0) {
match_low_to_high_scale_model_tree_level(model, sm);
return;
}

// temporarily set loop order to `loop_order'
const unsigned model_pole_mass_order = model.get_pole_mass_loop_order();
const unsigned model_ewsb_order = model.get_ewsb_loop_order();
const unsigned sm_pole_mass_order = sm.get_pole_mass_loop_order();
const unsigned sm_ewsb_order = sm.get_ewsb_loop_order();

model.set_pole_mass_loop_order(loop_order);
model.set_ewsb_loop_order(loop_order);
sm.set_pole_mass_loop_order(loop_order);
sm.set_ewsb_loop_order(loop_order);

match_low_to_high_scale_model(model, sm);

// reset loop order
model.set_pole_mass_loop_order(model_pole_mass_order);
model.set_ewsb_loop_order(model_ewsb_order);
sm.set_pole_mass_loop_order(sm_pole_mass_order);
sm.set_ewsb_loop_order(sm_ewsb_order);

model.calculate_DRbar_masses();
model.solve_ewsb();
sm.calculate_DRbar_masses();
sm.solve_ewsb();
}

/**
* Calculates the gauge and Yukawa couplings and the SM-like VEV in
* the @ModelName@ at the current loop level from the known Standard
* Model couplings and the SM vev.
*/
void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
@ModelName@_mass_eigenstates& model, Standard_model& sm)
{
Expand Down Expand Up @@ -234,9 +296,6 @@ void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
}

@setYukawas@

model.calculate_DRbar_masses();
model.solve_ewsb();
}

} // namespace flexiblesusy
5 changes: 4 additions & 1 deletion templates/standard_model_matching.hpp.in
Expand Up @@ -34,8 +34,11 @@ class @ModelName@_standard_model_matching
{
public:
static void match_high_to_low_scale_model_tree_level(standard_model::Standard_model&, @ModelName@_mass_eigenstates&);
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&);
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&, unsigned);
static void match_low_to_high_scale_model_tree_level(@ModelName@_mass_eigenstates&, standard_model::Standard_model&);
static void match_low_to_high_scale_model(@ModelName@_mass_eigenstates&, standard_model::Standard_model&, unsigned);
protected:
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&);
static void match_low_to_high_scale_model(@ModelName@_mass_eigenstates&, standard_model::Standard_model&);
};

Expand Down
37 changes: 28 additions & 9 deletions templates/standard_model_two_scale_matching.cpp.in
Expand Up @@ -30,14 +30,19 @@
namespace flexiblesusy {

CLASSNAME::@ModelName@_standard_model_Matching()
: model(0), eft(0), constraint(0), scale(0.)
: model(0), eft(0), constraint(0), scale(0.), loop_order(1)
{}

CLASSNAME::@ModelName@_standard_model_Matching(
standard_model::StandardModel<Two_scale>* low_,
@ModelName@<Two_scale>* high_,
Constraint<Two_scale>* constraint_)
: model(high_), eft(low_), constraint(constraint_), scale(0.)
Constraint<Two_scale>* constraint_,
unsigned loop_order_)
: model(high_)
, eft(low_)
, constraint(constraint_)
, scale(0.)
, loop_order(loop_order_)
{}

CLASSNAME::~@ModelName@_standard_model_Matching()
Expand Down Expand Up @@ -70,10 +75,10 @@ void CLASSNAME::match_high_to_low_scale_model()
eft->run_to(get_scale());
model->run_to(get_scale());

if (!model->get_thresholds())
@ModelName@_standard_model_matching::match_high_to_low_scale_model_tree_level(*eft, *model);
if (model->get_thresholds() && loop_order)
@ModelName@_standard_model_matching::match_high_to_low_scale_model(*eft, *model, loop_order);
else
@ModelName@_standard_model_matching::match_high_to_low_scale_model(*eft, *model);
@ModelName@_standard_model_matching::match_high_to_low_scale_model_tree_level(*eft, *model);
}

void CLASSNAME::match_low_to_high_scale_model()
Expand All @@ -86,10 +91,14 @@ void CLASSNAME::match_low_to_high_scale_model()
eft->run_to(get_scale());
model->run_to(get_scale());

if (!model->get_thresholds())
@ModelName@_standard_model_matching::match_low_to_high_scale_model_tree_level(*model, *eft);
// 2-loop QCD contributions to Mt needed when matching low ->
// high-scale model to reproduce the pure EFT result at high SUSY
// scales

if (model->get_thresholds() && loop_order)
@ModelName@_standard_model_matching::match_low_to_high_scale_model(*model, *eft, 2 /* loop_order */);
else
@ModelName@_standard_model_matching::match_low_to_high_scale_model(*model, *eft);
@ModelName@_standard_model_matching::match_low_to_high_scale_model_tree_level(*model, *eft);
}

void CLASSNAME::match_high_to_low_scale_model_tree_level()
Expand Down Expand Up @@ -118,6 +127,16 @@ void CLASSNAME::match_low_to_high_scale_model_tree_level()
@ModelName@_standard_model_matching::match_low_to_high_scale_model_tree_level(*model, *eft);
}

unsigned CLASSNAME::get_loop_order() const
{
return loop_order;
}

void CLASSNAME::set_loop_order(unsigned loop_order_)
{
loop_order = loop_order_;
}

void CLASSNAME::set_constraint(Constraint<Two_scale>* constraint_)
{
constraint = constraint_;
Expand Down
6 changes: 5 additions & 1 deletion templates/standard_model_two_scale_matching.hpp.in
Expand Up @@ -42,7 +42,8 @@ public:

@ModelName@_standard_model_Matching(standard_model::StandardModel<Two_scale>*,
@ModelName@<Two_scale>*,
Constraint<Two_scale>*);
Constraint<Two_scale>*,
unsigned);

virtual ~@ModelName@_standard_model_Matching();

Expand All @@ -51,6 +52,8 @@ public:
virtual void match_high_to_low_scale_model();
virtual void match_low_to_high_scale_model();

unsigned get_loop_order() const;
void set_loop_order(unsigned);
void set_scale(double);
void set_constraint(Constraint<Two_scale>*);
void match_high_to_low_scale_model_tree_level();
Expand All @@ -61,6 +64,7 @@ private:
standard_model::StandardModel<Two_scale>* eft;
Constraint<Two_scale>* constraint;
double scale;
unsigned loop_order;
};

} // namespace flexiblesusy
Expand Down

0 comments on commit 8e35cbc

Please sign in to comment.