Skip to content

Commit

Permalink
use RAII to set and reset temporary loop order for the tower
Browse files Browse the repository at this point in the history
which is exception safe
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Aug 15, 2016
1 parent a148146 commit 2f3549f
Showing 1 changed file with 50 additions and 40 deletions.
90 changes: 50 additions & 40 deletions templates/standard_model_matching.cpp.in
Expand Up @@ -39,6 +39,54 @@ namespace flexiblesusy {
#define SMPARAMETER(p) sm.get_##p()
#define INPUTPARAMETER(p) model.get_input().p

namespace {

class Loop_order_setter {
public:
Loop_order_setter(
Standard_model* sm_, @ModelName@_mass_eigenstates* model_, unsigned loop_order_)
: sm(sm_), model(model_), loop_order(loop_order_)
{
assert(sm);
assert(model);

// store old loop orders
model_pole_mass_order = model->get_pole_mass_loop_order();
model_ewsb_order = model->get_ewsb_loop_order();
sm_pole_mass_order = sm->get_pole_mass_loop_order();
sm_ewsb_order = sm->get_ewsb_loop_order();

// temporarily set loop order to `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);
}

~Loop_order_setter() {
// 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();
}
private:
Standard_model* sm;
@ModelName@_mass_eigenstates* model;
unsigned loop_order; ///< temporary loop order
unsigned model_pole_mass_order; ///< old model pole mass loop order
unsigned model_ewsb_order; ///< old model EWSB loop order
unsigned sm_pole_mass_order; ///< old SM pole mass loop order
unsigned sm_ewsb_order; ///< old SM EWSB loop order
};

} // anonymous namespace

/**
* Calculates \f$\lambda(Q)\f$ at the tree level from the lightest
* CP-even Higgs boson mass of the @ModelName@.
Expand Down Expand Up @@ -66,31 +114,12 @@ void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
}

// 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);
Loop_order_setter los(&sm, &model, loop_order);

match_high_to_low_scale_model(sm, model);

model.get_physical().clear();
sm.get_physical().clear();

// 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();
}


Expand Down Expand Up @@ -198,31 +227,12 @@ void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
}

// 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);
Loop_order_setter los(&sm, &model, loop_order);

match_low_to_high_scale_model(model, sm);

model.get_physical().clear();
sm.get_physical().clear();

// 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();
}

/**
Expand Down

0 comments on commit 2f3549f

Please sign in to comment.