Skip to content

Commit

Permalink
use tree-level parameters in the self-energies
Browse files Browse the repository at this point in the history
Note: The tree-level parameters must be kept as an additional object.
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Jan 8, 2017
1 parent 0b0bc3e commit c8cdee4
Show file tree
Hide file tree
Showing 12 changed files with 113 additions and 34 deletions.
68 changes: 44 additions & 24 deletions templates/standard_model_matching.cpp.in
Expand Up @@ -109,7 +109,7 @@ void @ModelName@_standard_model_matching::match_high_to_low_scale_model_tree_lev
* @param idx Higgs index (in mass ordered Higgs multiplet)
*/
void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
Standard_model& sm, @ModelName@_mass_eigenstates& model, unsigned loop_order, unsigned idx)
Standard_model& sm, @ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l, unsigned loop_order, unsigned idx)
{
if (loop_order == 0) {
match_high_to_low_scale_model_tree_level(sm, model, idx);
Expand All @@ -120,7 +120,7 @@ void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
const auto los_sm = make_raii_set_loop_order(sm, loop_order);
const auto los_model = make_raii_set_loop_order(model, loop_order);

match_high_to_low_scale_model(sm, model, idx);
match_high_to_low_scale_model(sm, model, model_0l, idx);

model.get_physical().clear();
sm.get_physical().clear();
Expand All @@ -138,15 +138,32 @@ double calculate_Mhh_pole(const Standard_model& sm)
return SignedAbsSqrt(M_loop);
}

double calculate_Mhh_pole(const @ModelName@_mass_eigenstates& model, unsigned idx)
double calculate_Mhh_pole(@ModelName@_mass_eigenstates model, @ModelName@_mass_eigenstates model_0l, unsigned idx)
{
const auto mh = model.get_M@HiggsBoson(idx)@;
const auto self_energy = Re(model.self_energy_@HiggsBoson@(mh));
// solve at tree-level to obtain plain tree-level mass matrix
model.calculate_DRbar_masses();
model.solve_ewsb_tree_level();
const auto M_tree = model.get_mass_matrix_@HiggsBoson@();
const decltype(M_tree) M_loop = M_tree - self_energy;

// calculate 1L self-energy using tree-level parameters
const auto mh = model_0l.get_Mhh(idx);
const auto self_energy = Re(model_0l.self_energy_hh(mh));

// calculate 1L tadpoles using tree-level parameters
model_0l.set_ewsb_loop_order(1);
const auto tadpole_0l_1l = model_0l.tadpole_equations();
model_0l.set_ewsb_loop_order(0);
const auto tadpole_0l = model_0l.tadpole_equations();
std::remove_const<decltype(tadpole_0l_1l)>::type tadpole_1l = tadpole_0l_1l - tadpole_0l;

tadpole_1l(0) /= model_0l.get_vd(); // @todo generalize
tadpole_1l(1) /= model_0l.get_vu();

std::remove_const<decltype(M_tree)>::type M_loop = M_tree - self_energy;
M_loop.diagonal() -= tadpole_1l;

// @todo generalize
decltype(model.get_physical().M@HiggsBoson@) Mhh2;
decltype(model.get_physical().Mhh) Mhh2;
fs_diagonalize_hermitian(M_loop, Mhh2);

return SignedAbsSqrt(Mhh2(idx));
Expand All @@ -165,7 +182,7 @@ double calculate_Mhh_pole(const @ModelName@_mass_eigenstates& model, unsigned id
* @param idx Higgs index (in mass ordered Higgs multiplet)
*/
void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
Standard_model& sm, @ModelName@_mass_eigenstates& model, unsigned idx)
Standard_model& sm, @ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l, unsigned idx)
{
model.calculate_DRbar_masses();
model.solve_ewsb();
Expand All @@ -174,7 +191,7 @@ void @ModelName@_standard_model_matching::match_high_to_low_scale_model(
sm.solve_ewsb();

const double Mhh_sm = calculate_Mhh_pole(sm);
const double Mhh_bsm = calculate_Mhh_pole(model, idx);
const double Mhh_bsm = calculate_Mhh_pole(model, model_0l, idx);

sm.set_Lambdax((Sqr(Mhh_bsm) - Sqr(Mhh_sm) + Sqr(sm.get_Mhh()))/Sqr(sm.get_v()));
}
Expand Down Expand Up @@ -218,7 +235,7 @@ void @ModelName@_standard_model_matching::match_low_to_high_scale_model_tree_lev
* 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)
@ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l, Standard_model& sm, unsigned loop_order)
{
if (loop_order == 0) {
match_low_to_high_scale_model_tree_level(model, sm);
Expand All @@ -229,7 +246,7 @@ void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
const auto los_sm = make_raii_set_loop_order(sm, loop_order);
const auto los_model = make_raii_set_loop_order(model, loop_order);

match_low_to_high_scale_model(model, sm);
match_low_to_high_scale_model(model, model_0l, sm);

model.get_physical().clear();
sm.get_physical().clear();
Expand Down Expand Up @@ -309,10 +326,11 @@ double calculate_MW_pole(const Standard_model& sm)
return SignedAbsSqrt(M_loop);
}

double calculate_MW_pole(const @ModelName@_mass_eigenstates& model)
double calculate_MW_pole(const @ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l)
{
const double mw = model.get_M@VectorW(0)@;
const double self_energy = Re(model.self_energy_@VectorW@(mw));
const double p = model_0l.get_M@VectorW(0)@;
const double self_energy = Re(model_0l.self_energy_@VectorW@(p));
const double M_loop = Sqr(mw) - self_energy;

return SignedAbsSqrt(M_loop);
Expand All @@ -327,24 +345,25 @@ double calculate_MZ_pole(const Standard_model& sm)
return SignedAbsSqrt(M_loop);
}

double calculate_MZ_pole(const @ModelName@_mass_eigenstates& model)
double calculate_MZ_pole(const @ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l)
{
const double mz = model.get_M@VectorZ(0)@;
const double self_energy = Re(model.self_energy_@VectorZ@(mz));
const double p = model_0l.get_M@VectorZ(0)@;
const double self_energy = Re(model_0l.self_energy_@VectorZ@(p));
const double M_loop = Sqr(mz) - self_energy;

return SignedAbsSqrt(M_loop);
}

double calculate_MW_DRbar(const Standard_model& sm, @ModelName@_mass_eigenstates& model, unsigned loop_order = 1)
double calculate_MW_DRbar(const Standard_model& sm, @ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l, unsigned loop_order = 1)
{
double mw = 0.;

if (loop_order == 0) {
mw = sm.get_MVWp();
} else {
const double MW_sm = calculate_MW_pole(sm);
const double MW_bsm = calculate_MW_pole(model);
const double MW_bsm = calculate_MW_pole(model, model_0l);
const double mw2 = Sqr(MW_sm) - Sqr(MW_bsm) + Sqr(model.get_M@VectorW(0)@);

if (mw2 < 0.)
Expand All @@ -358,15 +377,15 @@ double calculate_MW_DRbar(const Standard_model& sm, @ModelName@_mass_eigenstates
return mw;
}

double calculate_MZ_DRbar(const Standard_model& sm, @ModelName@_mass_eigenstates& model, unsigned loop_order = 1)
double calculate_MZ_DRbar(const Standard_model& sm, @ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l, unsigned loop_order = 1)
{
double mz = 0.;

if (loop_order == 0) {
mz = sm.get_MVZ();
} else {
const double MZ_sm = calculate_MZ_pole(sm);
const double MZ_bsm = calculate_MZ_pole(model);
const double MZ_bsm = calculate_MZ_pole(model, model_0l);
const double mz2 = Sqr(MZ_sm) - Sqr(MZ_bsm) + Sqr(model.get_M@VectorZ(0)@);

if (mz2 < 0.)
Expand All @@ -388,7 +407,7 @@ double calculate_MZ_DRbar(const Standard_model& sm, @ModelName@_mass_eigenstates
* Model couplings and the SM vev.
*/
void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
@ModelName@_mass_eigenstates& model, Standard_model& sm)
@ModelName@_mass_eigenstates& model, const @ModelName@_mass_eigenstates& model_0l, Standard_model& sm)
{
model.calculate_DRbar_masses();
model.solve_ewsb();
Expand All @@ -399,12 +418,12 @@ void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
const double alpha_em = Sqr(sm.get_g1() * sm.get_g2() * standard_model_info::normalization_g1 * standard_model_info::normalization_g2)
/(4. * Pi * (Sqr(sm.get_g1()*standard_model_info::normalization_g1) + Sqr(sm.get_g2()*standard_model_info::normalization_g2)));
const double alpha_s = Sqr(sm.get_g3() * standard_model_info::normalization_g3)/(4. * Pi);
const double delta_alpha_em = calculate_delta_alpha_em(alpha_em, model);
const double delta_alpha_s = calculate_delta_alpha_s(alpha_s, model, 0);
const double delta_alpha_em = calculate_delta_alpha_em(alpha_em, model_0l);
const double delta_alpha_s = calculate_delta_alpha_s(alpha_s, model_0l, 0);

// running W, Z masses (via 1L matching)
const double mW2_1L = Sqr(calculate_MW_DRbar(sm, model));
const double mZ2_1L = Sqr(calculate_MZ_DRbar(sm, model));
const double mW2_1L = Sqr(calculate_MW_DRbar(sm, model, model_0l));
const double mZ2_1L = Sqr(calculate_MZ_DRbar(sm, model, model_0l));

const Eigen::Matrix<double, 3, 3> upQuarksDRbar = calculate_MFu_DRbar(sm, model, 0);
const Eigen::Matrix<double, 3, 3> downQuarksDRbar = calculate_MFd_DRbar(sm, model, 0);
Expand All @@ -426,6 +445,7 @@ void @ModelName@_standard_model_matching::match_low_to_high_scale_model(
@applyUserMatching@
}


@setYukawas@
}

Expand Down
8 changes: 4 additions & 4 deletions templates/standard_model_matching.hpp.in
Expand Up @@ -34,12 +34,12 @@ class @ModelName@_standard_model_matching
{
public:
static void match_high_to_low_scale_model_tree_level(standard_model::Standard_model&, @ModelName@_mass_eigenstates&, unsigned);
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&, unsigned, unsigned);
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&, const @ModelName@_mass_eigenstates&, unsigned, 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);
static void match_low_to_high_scale_model(@ModelName@_mass_eigenstates&, const @ModelName@_mass_eigenstates&, standard_model::Standard_model&, unsigned);
protected:
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&, unsigned);
static void match_low_to_high_scale_model(@ModelName@_mass_eigenstates&, standard_model::Standard_model&);
static void match_high_to_low_scale_model(standard_model::Standard_model&, @ModelName@_mass_eigenstates&, const @ModelName@_mass_eigenstates&, unsigned);
static void match_low_to_high_scale_model(@ModelName@_mass_eigenstates&, const @ModelName@_mass_eigenstates&, standard_model::Standard_model&);
};

} // namespace flexiblesusy
Expand Down
Expand Up @@ -41,6 +41,7 @@ namespace flexiblesusy {

@ModelName@_standard_model_initial_guesser<Two_scale>::@ModelName@_standard_model_initial_guesser(
@ModelName@<Two_scale>* model_,
@ModelName@<Two_scale>* model_0l_,
standard_model::StandardModel<Two_scale>* eft_,
const softsusy::QedQcd& qedqcd_,
const standard_model::Standard_model_low_scale_constraint<Two_scale>& low_constraint_,
Expand All @@ -49,6 +50,7 @@ namespace flexiblesusy {
)
: Initial_guesser<Two_scale>()
, model(model_)
, model_0l(model_0l_)
, eft(eft_)
, qedqcd(qedqcd_)
, mu_guess(0.)
Expand Down Expand Up @@ -232,12 +234,17 @@ void @ModelName@_standard_model_initial_guesser<Two_scale>::guess_model_paramete
@initialGuessAtSUSYScale@
}

*model_0l = *model;
model_0l->set_pole_mass_loop_order(0);
model_0l->set_ewsb_loop_order(0);

eft->run_to(susy_scale_guess, running_precision);
eft->calculate_DRbar_masses();

//get gauge and Yukawa couplings from effective theory
@ModelName@_standard_model_matching_up<Two_scale> matching_up;
matching_up.set_models(eft, model);
matching_up.set_model_0l(model_0l);
matching_up.set_scale(scale_getter);
matching_up.match_tree_level();

Expand Down Expand Up @@ -266,6 +273,10 @@ void @ModelName@_standard_model_initial_guesser<Two_scale>::guess_model_paramete

// calculate tree-level spectrum
model->calculate_DRbar_masses();

*model_0l = *model;
model_0l->set_pole_mass_loop_order(0);
model_0l->set_ewsb_loop_order(0);
}

} // namespace flexiblesusy
Expand Up @@ -51,7 +51,7 @@ class @ModelName@_standard_model_initial_guesser;
template<>
class @ModelName@_standard_model_initial_guesser<Two_scale> : public Initial_guesser<Two_scale> {
public:
@ModelName@_standard_model_initial_guesser(@ModelName@<Two_scale>*,
@ModelName@_standard_model_initial_guesser(@ModelName@<Two_scale>*, @ModelName@<Two_scale>*,
standard_model::StandardModel<Two_scale>*,
const softsusy::QedQcd&,
const standard_model::Standard_model_low_scale_constraint<Two_scale>&,
Expand All @@ -64,6 +64,7 @@ public:

private:
@ModelName@<Two_scale>* model; ///< pointer to model class
@ModelName@<Two_scale>* model_0l; ///< pointer to model class
standard_model::StandardModel<Two_scale>* eft; ///< pointer to effective low energy model
softsusy::QedQcd qedqcd; ///< Standard Model low-energy data
double mu_guess; ///< guessed DR-bar mass of up-quark
Expand Down
Expand Up @@ -77,6 +77,11 @@ void @ModelName@_spectrum_generator<Two_scale>::run_except(const softsusy::QedQc
model.set_thresholds(this->settings.get(Spectrum_generator_settings::threshold_corrections_loop_order));
model.set_zero_threshold(this->settings.get(Spectrum_generator_settings::beta_zero_threshold));

// tree-level parameters
model_0l = this->model;
model_0l.set_pole_mass_loop_order(0);
model_0l.set_ewsb_loop_order(0);

eft.clear();
eft.do_force_output(this->settings.get(Spectrum_generator_settings::force_output));
eft.set_loops(this->settings.get(Spectrum_generator_settings::beta_loop_order));
Expand All @@ -102,12 +107,14 @@ void @ModelName@_spectrum_generator<Two_scale>::run_except(const softsusy::QedQc
const auto scale_getter = [this] () { return susy_scale_constraint.get_scale(); };

matching_up.set_models(&eft, &model);
matching_up.set_model_0l(&model_0l);
matching_up.set_scale(scale_getter);
matching_up.set_scale(this->settings.get(Spectrum_generator_settings::eft_matching_scale));
matching_up.set_loop_order(this->settings.get(Spectrum_generator_settings::eft_matching_loop_order_up));
matching_up.set_higgs_index(index);

matching_down.set_models(&model, &eft);
matching_down.set_model_0l(&model_0l);
matching_down.set_scale(scale_getter);
matching_down.set_scale(this->settings.get(Spectrum_generator_settings::eft_matching_scale));
matching_down.set_loop_order(this->settings.get(Spectrum_generator_settings::eft_matching_loop_order_down));
Expand Down Expand Up @@ -138,7 +145,7 @@ void @ModelName@_spectrum_generator<Two_scale>::run_except(const softsusy::QedQc
cct.add_convergence_tester(&model_ct);
cct.add_convergence_tester(&eft_ct);

@ModelName@_standard_model_initial_guesser<Two_scale> initial_guesser(&model, &eft, qedqcd,
@ModelName@_standard_model_initial_guesser<Two_scale> initial_guesser(&model, &model_0l, &eft, qedqcd,
low_scale_constraint,
susy_scale_constraint,
high_scale_constraint);
Expand Down
Expand Up @@ -68,6 +68,7 @@ protected:

private:
RGFlow<Two_scale> solver{};
@ModelName@<Two_scale> model_0l{};
@ModelName@_high_scale_constraint<Two_scale> high_scale_constraint{};
@ModelName@_susy_scale_constraint<Two_scale> susy_scale_constraint{};
standard_model::Standard_model_low_scale_constraint<Two_scale> low_scale_constraint{};
Expand Down
Expand Up @@ -40,13 +40,15 @@ namespace flexiblesusy {

@ModelName@_standard_model_initial_guesser<Two_scale>::@ModelName@_standard_model_initial_guesser(
@ModelName@<Two_scale>* model_,
@ModelName@<Two_scale>* model_0l_,
standard_model::StandardModel<Two_scale>* eft_,
const softsusy::QedQcd& qedqcd_,
const standard_model::Standard_model_low_scale_constraint<Two_scale>& low_constraint_,
const @ModelName@_susy_scale_constraint<Two_scale>& susy_constraint_
)
: Initial_guesser<Two_scale>()
, model(model_)
, model_0l(model_0l_)
, eft(eft_)
, qedqcd(qedqcd_)
, mu_guess(0.)
Expand Down Expand Up @@ -213,12 +215,17 @@ void @ModelName@_standard_model_initial_guesser<Two_scale>::guess_model_paramete
// apply susy-scale first guess
@initialGuessAtSUSYScale@

*model_0l = *model;
model_0l->set_pole_mass_loop_order(0);
model_0l->set_ewsb_loop_order(0);

eft->run_to(susy_scale_guess, running_precision);
eft->calculate_DRbar_masses();

//get gauge and Yukawa couplings from effective theory
@ModelName@_standard_model_matching_up<Two_scale> matching_up;
matching_up.set_models(eft, model);
matching_up.set_model_0l(model_0l);
matching_up.set_scale(scale_getter);
matching_up.match_tree_level();

Expand All @@ -233,6 +240,10 @@ void @ModelName@_standard_model_initial_guesser<Two_scale>::guess_model_paramete

// calculate tree-level spectrum
model->calculate_DRbar_masses();

*model_0l = *model;
model_0l->set_pole_mass_loop_order(0);
model_0l->set_ewsb_loop_order(0);
}

} // namespace flexiblesusy
Expand Up @@ -50,7 +50,7 @@ class @ModelName@_standard_model_initial_guesser;
template<>
class @ModelName@_standard_model_initial_guesser<Two_scale> : public Initial_guesser<Two_scale> {
public:
@ModelName@_standard_model_initial_guesser(@ModelName@<Two_scale>*,
@ModelName@_standard_model_initial_guesser(@ModelName@<Two_scale>*, @ModelName@<Two_scale>*,
standard_model::StandardModel<Two_scale>*,
const softsusy::QedQcd&,
const standard_model::Standard_model_low_scale_constraint<Two_scale>&,
Expand All @@ -62,6 +62,7 @@ public:

private:
@ModelName@<Two_scale>* model; ///< pointer to model class
@ModelName@<Two_scale>* model_0l; ///< pointer to model class
standard_model::StandardModel<Two_scale>* eft; ///< pointer to effective model class
softsusy::QedQcd qedqcd; ///< Standard Model low-energy data
double mu_guess; ///< guessed DR-bar mass of up-quark
Expand Down

0 comments on commit c8cdee4

Please sign in to comment.