diff --git a/.gitattributes b/.gitattributes index 34891c396..8f09ffe6a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -41,6 +41,7 @@ model_files/complexMSSM export-ignore model_files/cCMSSM export-ignore model_files/CMSSMCPV export-ignore model_files/NMSSMCPV export-ignore +model_files/SMtower export-ignore models/fmssm export-ignore models/fmssmn export-ignore diff --git a/model_files/SMtower/FlexibleSUSY.m.in b/model_files/SMtower/FlexibleSUSY.m.in new file mode 100644 index 000000000..e1f5ce173 --- /dev/null +++ b/model_files/SMtower/FlexibleSUSY.m.in @@ -0,0 +1,64 @@ + +FSModelName = "@CLASSNAME@"; +FSEigenstates = SARAH`EWSB; +FSDefaultSARAHModel = SM; +OnlyLowEnergyFlexibleSUSY = True; +SMTower = True; + +(* SM input parameters *) + +MINPAR = { {1, LambdaIN} }; +EXTPAR = { {0, Qin} }; + +EWSBOutputParameters = { mu2 }; + +SUSYScale = Qin; + +SUSYScaleFirstGuess = Qin; + +SUSYScaleInput = { + {\[Lambda], LambdaIN} +}; + +LowScale = LowEnergyConstant[MT]; + +LowScaleFirstGuess = LowEnergyConstant[MT]; + +LowScaleInput = { + {v, 2 MZDRbar / Sqrt[GUTNormalization[g1]^2 g1^2 + g2^2]}, + {Yu, Automatic}, + {Yd, Automatic}, + {Ye, Automatic}, + FSSolveEWSBFor[EWSBOutputParameters] +}; + +InitialGuessAtLowScale = { + {v, LowEnergyConstant[vev]}, + {Yu, Automatic}, + {Yd, Automatic}, + {Ye, Automatic} +}; + +SUSYScaleUserMatching = { + {v, vev} +}; + +SMParticles = { + Electron, TopQuark, BottomQuark, + VectorP, VectorZ, VectorG, VectorW, Neutrino, + Hp, Ah, (* goldstones *) + hh (* Higgs *) +}; + +UseSM3LoopRGEs = True; +UseHiggs2LoopSM = True; + +DefaultPoleMassPrecision = HighPrecision; +HighPoleMassPrecision = {hh}; +MediumPoleMassPrecision = {}; +LowPoleMassPrecision = {}; + +SARAH`ParameterDefinitions = Append[ + Cases[SARAH`ParameterDefinitions, {p_ /; p =!= SARAH`\[Lambda], ___}], + {SARAH`\[Lambda], { Description -> "SM Higgs Selfcouplings" } } +]; diff --git a/model_files/SMtower/LesHouches.in.SMtower b/model_files/SMtower/LesHouches.in.SMtower new file mode 100644 index 000000000..fbc7973cc --- /dev/null +++ b/model_files/SMtower/LesHouches.in.SMtower @@ -0,0 +1,41 @@ +Block MODSEL # Select model +# 12 1000 # parameter output scale (GeV) +Block FlexibleSUSY + 0 1.000000000e-04 # precision goal + 1 0 # max. iterations (0 = automatic) + 2 0 # algorithm (0 = two_scale, 1 = lattice) + 3 1 # calculate SM pole masses + 4 2 # pole mass loop order + 5 2 # EWSB loop order + 6 3 # beta-functions loop order + 7 2 # threshold corrections loop order + 8 1 # Higgs 2-loop corrections O(alpha_t alpha_s) + 9 0 # Higgs 2-loop corrections O(alpha_b alpha_s) + 10 1 # Higgs 2-loop corrections O((alpha_t + alpha_b)^2) + 11 0 # Higgs 2-loop corrections O(alpha_tau^2) + 12 0 # force output + 13 1 # Top quark 2-loop corrections QCD + 14 1.000000000e-11 # beta-function zero threshold + 15 0 # calculate observables (a_muon, ...) +Block SMINPUTS # Standard Model inputs + 1 1.279340000e+02 # alpha^(-1) SM MSbar(MZ) + 2 1.166370000e-05 # G_Fermi + 3 1.176000000e-01 # alpha_s(MZ) SM MSbar + 4 9.118760000e+01 # MZ(pole) + 5 4.200000000e+00 # mb(mb) SM MSbar + 6 1.733400000e+02 # mtop(pole) + 7 1.777000000e+00 # mtau(pole) + 8 0.000000000e+00 # mnu3(pole) + 9 80.404 # MW pole + 11 5.109989020e-04 # melectron(pole) + 12 0.000000000e+00 # mnu1(pole) + 13 1.056583570e-01 # mmuon(pole) + 14 0.000000000e+00 # mnu2(pole) + 21 4.750000000e-03 # md(2 GeV) MS-bar + 22 2.400000000e-03 # mu(2 GeV) MS-bar + 23 1.040000000e-01 # ms(2 GeV) MS-bar + 24 1.270000000e+00 # mc(mc) MS-bar +Block MINPAR # Input parameters + 1 0.192 # Lambda(Qin) +Block EXTPAR # Input parameters + 0 1000 # input scale Qin diff --git a/test/test_SMtower.sh b/test/test_SMtower.sh new file mode 100755 index 000000000..ab292de96 --- /dev/null +++ b/test/test_SMtower.sh @@ -0,0 +1,132 @@ +#!/bin/sh + +BASEDIR=$(dirname $0) +MODELDIR=${BASEDIR}/../models + +. "$BASEDIR/test.sh" + +# prints SLHA block +print_slha_block_awk=' +BEGIN { + is_block = 0; + if (block == "") { + print "Error: block name not defined"; + print " Please define the block name with -v block="; + exit 1 + } +} +{ + pattern = "^block[[:blank:]]*" tolower(block) "([^[:graph:]].*)?$"; + not_pattern = "^block[[:blank:]]*.*$"; + + if (tolower($0) ~ pattern) { + is_block = 1 + } else if (tolower($0) ~ not_pattern) { + is_block = 0 + }; + + if (is_block) + print $0 +} +' + +# prints block entry +# expects block entry keys in the form x or x:y or x:y:z etc. +print_block_entry_awk=' +{ + len = split(keys,k,":"); + + matches = 1; + + for (i in k) { + if ($(i) != k[i]) + matches = 0 + } + + if (matches == 1) + print $(len + 1) +} +' + +input=" +Block MODSEL # Select model +# 12 1000 # parameter output scale (GeV) +Block FlexibleSUSY + 0 1.000000000e-04 # precision goal + 1 0 # max. iterations (0 = automatic) + 2 0 # algorithm (0 = two_scale, 1 = lattice) + 3 1 # calculate SM pole masses + 4 1 # pole mass loop order + 5 1 # EWSB loop order + 6 3 # beta-functions loop order + 7 2 # threshold corrections loop order + 8 1 # Higgs 2-loop corrections O(alpha_t alpha_s) + 9 0 # Higgs 2-loop corrections O(alpha_b alpha_s) + 10 1 # Higgs 2-loop corrections O((alpha_t + alpha_b)^2) + 11 0 # Higgs 2-loop corrections O(alpha_tau^2) + 12 0 # force output + 13 1 # Top quark 2-loop corrections QCD + 14 1.000000000e-11 # beta-function zero threshold + 15 0 # calculate observables (a_muon, ...) +Block SMINPUTS # Standard Model inputs + 1 1.279340000e+02 # alpha^(-1) SM MSbar(MZ) + 2 1.166370000e-05 # G_Fermi + 3 1.176000000e-01 # alpha_s(MZ) SM MSbar + 4 9.118760000e+01 # MZ(pole) + 5 4.200000000e+00 # mb(mb) SM MSbar + 6 1.733400000e+02 # mtop(pole) + 7 1.777000000e+00 # mtau(pole) + 8 0.000000000e+00 # mnu3(pole) + 9 80.404 # MW pole + 11 5.109989020e-04 # melectron(pole) + 12 0.000000000e+00 # mnu1(pole) + 13 1.056583570e-01 # mmuon(pole) + 14 0.000000000e+00 # mnu2(pole) + 21 4.750000000e-03 # md(2 GeV) MS-bar + 22 2.400000000e-03 # mu(2 GeV) MS-bar + 23 1.040000000e-01 # ms(2 GeV) MS-bar + 24 1.270000000e+00 # mc(mc) MS-bar +Block MINPAR # Input parameters + 1 0.192 # Lambda(Qin) +Block EXTPAR # Input parameters + 0 1000 # input scale Qin + 1 173.34 # scale QEWSB +" + +run_sg() { + local SG="$1" + local slha_input="$2" + local slha_output= + local block= + local value= + local output_block=MASS + local output_entry=25 + + # run the spectrum generator + slha_output=$(echo "$slha_input" | $SG --slha-input-file=- 2>/dev/null) + + block=$(echo "$slha_output" | awk -v block="$output_block" "$print_slha_block_awk") + value=$(echo "$block" | awk -v keys="$output_entry" "$print_block_entry_awk" | tail -n 1) + + [ "x$value" = "x" ] && value="-" + + echo $value +} + +error=0 + +MhSM=$(run_sg "$MODELDIR/SM/run_SM.x" "$input") +MhSMtower=$(run_sg "$MODELDIR/SMtower/run_SMtower.x" "$input") + +echo "Mh in the SM : $MhSM" +echo "Mh in the SMtower: $MhSMtower" + +CHECK_EQUAL_FRACTION "$MhSM" "$MhSMtower" "0.0001" || error=$(expr $error + 1) + +if [ "x$error" != "x0" ] ; then + echo "Test FAILED: There were $error errors." +else + echo "All tests passed." +fi + +exit $error diff --git a/test/test_run_all_spectrum_generators.sh b/test/test_run_all_spectrum_generators.sh index 23596f42a..da360f1dd 100755 --- a/test/test_run_all_spectrum_generators.sh +++ b/test/test_run_all_spectrum_generators.sh @@ -74,6 +74,7 @@ SM,_DEFAULT_,0 cSM,${DEFAULT_SM_INPUT},0 SMEWSBAtMZ,${DEFAULT_SM_INPUT},0 SMHighPrecision,${DEFAULT_SM_INPUT},0 +SMtower,_DEFAULT_,0 SMSSM,_DEFAULT_,0 SplitMSSM,_DEFAULT_,0 SSM,_DEFAULT_,0