38 #include <sys/types.h> 50 #include "SLHAea/slhaea.h" 51 #include <gsl/gsl_math.h> 52 #include <gsl/gsl_min.h> 66 using namespace LogTags;
84 if ( (lambda_h*lambda_s > 0 ) )
86 check = 2 *
pow( lambda_h * lambda_s , 0.5) + lambda_hs;
88 double check_2 = 2.*
pow(abs(lambda_s),0.5)*ms - mu3;
93 if ( lambda_hs < 0 || lambda_s < 0 || check < 0 || check_2 < 0)
101 ,
const std::vector<SpectrumParameter> required_parameters)
104 std::unique_ptr<SubSpectrum> subspec = spec.
clone_HE();
105 double step = log10(scale) / pts;
108 double ul=3.5449077018110318;
109 for (
int i=0;i<pts;i++)
111 runto =
pow(10,step*
float(i+1.0));
112 if (runto<100){runto=200.0;}
116 subspec -> RunToScale(runto);
118 catch (
const Error&
error)
123 for(std::vector<SpectrumParameter>::const_iterator it = required_parameters.begin();
124 it != required_parameters.end(); ++it)
127 const std::string name = it->name();
128 const std::vector<int> shape = it->shape();
129 std::ostringstream label;
130 label << name <<
" "<< Par::toString.at(tag);
131 if(shape.size()==1 and shape[0]==1)
133 if (abs(subspec->get(tag,name))>ul)
139 else if(shape.size()==1 and shape[0]>1)
141 for(
int k = 1; k<=shape[0]; ++k) {
142 if (abs(subspec->get(tag,name,k))>ul)
149 else if(shape.size()==2)
151 for(
int k = 1; k<=shape[0]; ++k) {
152 for(
int j = 1; j<=shape[0]; ++j) {
153 if (abs(subspec->get(tag,name,k,j))>ul)
169 std::unique_ptr<SubSpectrum>* spec=(std::unique_ptr<SubSpectrum>* )params;
174 std::unique_ptr<SubSpectrum> speccloned2 = speccloned.
clone();
176 if (scale>1.0e21){scale=1.0e21;}
178 if (scale<100.0){scale=100.0;}
183 speccloned2->RunToScale(scale);
186 catch (
const Error&
error)
199 double high_energy_limit,
int check_perturb_pts,
200 const std::vector<SpectrumParameter> required_parameters)
202 std::unique_ptr<SubSpectrum> speccloned = fullspectrum.
clone_HE();
206 double u_1 = 1, u_2 = 5, u_3 = 12;
207 double lambda_1,lambda_2,lambda_3;
208 double lambda_min = 0;
226 for (
int i=1;i<2;i++)
233 double min_u= (lambda_1*(
pow(u_2,2)-
pow(u_3,2)) - lambda_2*(
pow(u_1,2)-
pow(u_3,2)) + lambda_3*(
pow(u_1,2)-
pow(u_2,2)));
234 double denominator = ( lambda_1*(u_2-u_3)+ lambda_2*(u_3-u_1) +lambda_3*(u_1-u_2));
236 min_u=0.5*(min_u/denominator);
237 u_1=min_u-2/(
pow(
float(i),0.01));
239 u_3=min_u+2/(
pow(
float(i),0.01));
245 double mu_lower =
pow(10,u_1);
246 double mu_upper =
pow(10,u_3);
247 mu_min =
pow(10,u_2);
251 F.params = &speccloned;
254 int iteration = 0, max_iteration = 1000;
256 const gsl_min_fminimizer_type *T;
257 gsl_min_fminimizer *s;
259 T = gsl_min_fminimizer_brent;
260 s = gsl_min_fminimizer_alloc (T);
261 gsl_min_fminimizer_set (s, &F, mu_min, mu_lower, mu_upper);
266 status = gsl_min_fminimizer_iterate (s);
268 mu_min = gsl_min_fminimizer_x_minimum (s);
269 mu_lower = gsl_min_fminimizer_x_lower (s);
270 mu_upper = gsl_min_fminimizer_x_upper (s);
272 status = gsl_min_test_interval (mu_lower, mu_upper, 0.0001, 0.0001);
275 while (status == GSL_CONTINUE && iteration < max_iteration);
277 if (iteration == max_iteration)
279 SpecBit_error().raise(
LOCAL_INFO,
"The minimum of the quartic coupling could not be found");
282 gsl_min_fminimizer_free (s);
289 std::cout<<
"minimum value of quartic coupling is "<< lambda_min <<
" at " << mu_min <<
" GeV"<<std::endl;
297 double p=exp(4*140-26/(abs(0.5*lambda_min)))*
pow(LB/(1.2e19),4);
300 cout<<
"vacuum is unstable" << endl;
304 cout<<
"vacuum is metastable" << endl;
307 double pi2_8_over3 = 8.*
pow (
pi , 2 ) / 3.;
308 double conversion = (6.5821195e-25)/(31536000);
310 lifetime=conversion/(exp(3*140-pi2_8_over3/(abs(0.5*lambda_min)))*
pow(1/(1.2e19),3)*
pow(LB,4));
315 LB=high_energy_limit;
318 cout <<
"vacuum is absolutely stable" << endl;
324 double perturb=float(!perturbative);
326 cout <<
"perturbativity checked up to " << LB <<
" result = " << perturbative << endl;
327 cout <<
"Higgs pole mass = " << fullspectrum.
get(
Par::Pole_Mass,
"h0_1") << endl;
336 double high_energy_limit = myPipe::runOptions->getValueOrDef<
double>(1.22e19,
"set_high_scale");
337 int check_perturb_pts = myPipe::runOptions->getValueOrDef<
double>(10,
"check_perturb_pts");
346 double high_energy_limit = myPipe::runOptions->getValueOrDef<
double>(1.22e19,
"set_high_scale");
347 int check_perturb_pts = myPipe::runOptions->getValueOrDef<
double>(10,
"check_perturb_pts");
356 double high_energy_limit = myPipe::runOptions->getValueOrDef<
double>(1.22e19,
"set_high_scale");
357 int check_perturb_pts = myPipe::runOptions->getValueOrDef<
double>(10,
"check_perturb_pts");
360 find_min_lambda_Helper(vs_tuple, *myPipe::Dep::MDM_spectrum, high_energy_limit, check_perturb_pts, required_parameters);
370 dbl_dbl_bool vs_tuple = *myPipe::Dep::high_scale_vacuum_info;
372 if (vs_tuple.
first<1e300)
374 lifetime=vs_tuple.
first;
386 dbl_dbl_bool vs_tuple = *myPipe::Dep::high_scale_vacuum_info;
388 const Options& runOptions=*myPipe::runOptions;
389 bool demand_stable = runOptions.
getValueOrDef<
bool>(
false,
"demand_stable");
390 double stability_scale = runOptions.
getValueOrDef<
double>(1.22e19,
"set_stability_scale");
392 if (demand_stable && (vs_tuple.
second < stability_scale))
398 double conversion = (6.5821195e-25)/(31536000);
399 result=((- ( 1 / ( vs_tuple.
first/conversion ) ) * exp(140) * (1/ (1.2e19) ) ) );
408 dbl_dbl_bool vs_tuple = *myPipe::Dep::high_scale_vacuum_info;
417 dbl_dbl_bool vs_tuple = *myPipe::Dep::high_scale_vacuum_info;
421 invalid_point().
raise(
"Couplings are non-perturbative before scale of vacuum instability");
448 if (vacua.second !=
"JustThermal")
451 width += vevacious_results.
get_width(vacua.first);
453 if (vacua.second !=
"JustQuantum")
460 double lifetime =
hbar/width;
463 double conversion = (6.5821195e-25)/(31536000);
464 result= - 1 / ( lifetime/conversion ) * exp(140) * (1/1.2e19) ;
476 if (vacua.first ==
"global")
478 else if(vacua.first ==
"nearest")
480 for(
auto it = tempmap.begin(); it != tempmap.end(); ++it)
481 result[it->first +
"::" + vacua.first] = it->second;
493 static bool firstrun =
true;
499 std::string vevaciouslibpath = Backends::backendInfo().path_dir(
"vevacious",
"1.0");
501 std::string vevaciouspath = vevaciouslibpath +
"/../";
505 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
511 std::string rankstring = std::to_string(rank);
514 std::string inputspath = opts[
"inputspath"];
517 std::string initfilesPath = inputspath +
"/InitializationFiles/mpirank_"+ rankstring +
"/";
518 std::string modelfilesPath = inputspath +
"/ModelFiles/mpirank_"+ rankstring +
"/";
519 std::string potentialfunctioninitpath = initfilesPath +
"/PotentialFunctionInitialization.xml";
520 std::string potentialminimizerinitpath = initfilesPath +
"/PotentialMinimizerInitialization.xml";
521 std::string tunnelingcalculatorinitpath = initfilesPath +
"/TunnelingCalculatorInitialization.xml";
530 catch(
const std::exception& e)
532 std::ostringstream errmsg;
533 errmsg <<
"Error creating vevacious initialization and model files folders for MPI process " << rankstring;
534 SpecBit_error().forced_throw(
LOCAL_INFO,errmsg.str());
541 std::ifstream ScaleAndBlocksrc(opts.at(
"ScaleAndBlockFileSource") , std::ios::binary);
542 std::ofstream ScaleAndBlockdst(opts.at(
"ScaleAndBlockFile") , std::ios::binary);
544 ScaleAndBlockdst << ScaleAndBlocksrc.rdbuf();
546 std::ifstream ModelFilesrc(opts.at(
"ModelFileSource") , std::ios::binary);
547 std::ofstream ModelFiledst(opts.at(
"ModelFile") , std::ios::binary);
549 ModelFiledst << ModelFilesrc.rdbuf();
551 catch(
const std::exception& e)
553 std::ostringstream errmsg;
554 errmsg <<
"Error copying model and scale/block vevacious files. Check they exist." << rankstring;
555 SpecBit_error().forced_throw(
LOCAL_INFO,errmsg.str());
560 std::string potentialfunctioninit =
561 "<VevaciousPlusPlusPotentialFunctionInitialization>\n" 562 " <LagrangianParameterManagerClass>\n" 564 " SlhaCompatibleWithSarahManager\n" 566 " <ConstructorArguments>\n" 567 " <ScaleAndBlockFile>\n" 568 " " + opts.at(
"ScaleAndBlockFile") +
"\n" 569 " </ScaleAndBlockFile>\n" 570 " </ConstructorArguments>\n" 571 " </LagrangianParameterManagerClass>\n" 572 " <PotentialFunctionClass>\n" 574 " " + opts.at(
"PotentialFunctionClassType") +
"\n" 576 " <ConstructorArguments>\n" 578 " " + opts.at(
"ModelFile") +
581 " <AssumedPositiveOrNegativeTolerance>\n" 583 " </AssumedPositiveOrNegativeTolerance>\n" 584 " </ConstructorArguments>\n" 585 " </PotentialFunctionClass>\n" 586 "</VevaciousPlusPlusPotentialFunctionInitialization>";
587 std::ofstream potentialfunctioninitwrite(potentialfunctioninitpath);
588 potentialfunctioninitwrite << potentialfunctioninit;
589 potentialfunctioninitwrite.close();
591 std::string potentialminimizerinit;
596 if(opts.at(
"homotopybackend") ==
"hom4ps")
601 std::string PathToHom4ps2 = Backends::backendInfo().path_dir(
"hom4ps",
"2.0");
604 potentialminimizerinit =
605 "<VevaciousPlusPlusPotentialMinimizerInitialization>\n" 606 " <PotentialMinimizerClass>\n" 608 " GradientFromStartingPoints\n" 610 " <ConstructorArguments>\n" 611 " <StartingPointFinderClass>\n" 613 " PolynomialAtFixedScalesSolver\n" 615 " <ConstructorArguments>\n" 616 " <NumberOfScales>\n" 618 " </NumberOfScales>\n" 619 " <ReturnOnlyPolynomialMinima>\n" 621 " </ReturnOnlyPolynomialMinima>\n" 622 " <PolynomialSystemSolver>\n" 626 " <ConstructorArguments>\n" 628 " " + PathToHom4ps2 +
"\n" 629 " </PathToHom4ps2>\n" 630 " <Hom4ps2Argument>\n" 632 " </Hom4ps2Argument>\n" 633 " <ResolutionSize>\n" 635 " </ResolutionSize>\n" 636 " </ConstructorArguments>\n" 637 " </PolynomialSystemSolver>\n" 638 " </ConstructorArguments>\n" 639 " </StartingPointFinderClass>\n" 640 " <GradientMinimizerClass>\n" 642 " MinuitPotentialMinimizer\n" 644 " <ConstructorArguments>\n" 645 " <InitialStepSizeFraction>\n" 647 " </InitialStepSizeFraction>\n" 648 " <MinimumInitialStepSize>\n" 650 " </MinimumInitialStepSize>\n" 651 " <MinuitStrategy>\n" 652 " "+ opts.at(
"MinuitStrategy") +
"\n" 653 " </MinuitStrategy>\n" 654 " </ConstructorArguments>\n" 655 " </GradientMinimizerClass>\n" 656 " <ExtremumSeparationThresholdFraction>\n" 658 " </ExtremumSeparationThresholdFraction>\n" 659 " <NonDsbRollingToDsbScalingFactor>\n" 661 " </NonDsbRollingToDsbScalingFactor>\n" 662 " </ConstructorArguments>\n" 663 " </PotentialMinimizerClass>\n" 664 "</VevaciousPlusPlusObjectInitialization>\n";
666 else if(opts.at(
"homotopybackend") ==
"phc")
669 std::string PathToPHC = Backends::backendInfo().path_dir(
"phc",
"2.4.58");
671 std::string PHCSymlink = inputspath +
"Homotopy/mpirank_"+ rankstring +
"/";
674 std::string randomseed = opts[
"phc_random_seed"];
680 catch(
const std::exception& e)
682 std::ostringstream errmsg;
683 errmsg <<
"Error creating PHC folder for MPI process " << rankstring;
684 SpecBit_error().forced_throw(
LOCAL_INFO,errmsg.str());
688 std::string filename(PHCSymlink +
"/phc");
689 std::ifstream in(filename.c_str(), std::ios::binary);
698 std::string systemCommand(
"ln -s " + PathToPHC +
"/phc" +
" " + PHCSymlink );
700 int systemReturn = system( systemCommand.c_str() ) ;
701 if( systemReturn == -1 )
703 std::ostringstream errmsg;
704 errmsg <<
"Error making symlink for PHC in process " << rankstring;
705 SpecBit_error().forced_throw(
LOCAL_INFO,errmsg.str());
710 potentialminimizerinit =
711 "<VevaciousPlusPlusPotentialMinimizerInitialization>\n" 712 " <PotentialMinimizerClass>\n" 714 " GradientFromStartingPoints\n" 716 " <ConstructorArguments>\n" 717 " <StartingPointFinderClass>\n" 719 " PolynomialAtFixedScalesSolver\n" 721 " <ConstructorArguments>\n" 722 " <NumberOfScales>\n" 724 " </NumberOfScales>\n" 725 " <ReturnOnlyPolynomialMinima>\n" 727 " </ReturnOnlyPolynomialMinima>\n" 728 " <PolynomialSystemSolver>\n" 732 " <ConstructorArguments>\n" 734 " " + PHCSymlink +
"\n" 736 " <ResolutionSize>\n" 738 " </ResolutionSize>\n" 740 " " + randomseed +
"\n" 745 " </ConstructorArguments>\n" 746 " </PolynomialSystemSolver>\n" 747 " </ConstructorArguments>\n" 748 " </StartingPointFinderClass>\n" 749 " <GradientMinimizerClass>\n" 751 " MinuitPotentialMinimizer\n" 753 " <ConstructorArguments>\n" 754 " <InitialStepSizeFraction>\n" 756 " </InitialStepSizeFraction>\n" 757 " <MinimumInitialStepSize>\n" 759 " </MinimumInitialStepSize>\n" 760 " <MinuitStrategy>\n" 761 " "+ opts.at(
"MinuitStrategy") +
"\n" 762 " </MinuitStrategy>\n" 763 " </ConstructorArguments>\n" 764 " </GradientMinimizerClass>\n" 765 " <ExtremumSeparationThresholdFraction>\n" 767 " </ExtremumSeparationThresholdFraction>\n" 768 " <NonDsbRollingToDsbScalingFactor>\n" 770 " </NonDsbRollingToDsbScalingFactor>\n" 771 " </ConstructorArguments>\n" 772 " </PotentialMinimizerClass>\n" 773 "</VevaciousPlusPlusObjectInitialization>\n";
776 std::ostringstream errmsg;
777 errmsg <<
"The homotopy_backend option in the YAML file has not been set up properly. Check the input YAML file." << std::endl;
778 SpecBit_error().raise(
LOCAL_INFO,errmsg.str());
781 std::ofstream potentialminimizerinitwrite(potentialminimizerinitpath);
782 potentialminimizerinitwrite << potentialminimizerinit;
783 potentialminimizerinitwrite.close();
787 std::string tunnelingcalculatorinit =
788 "<VevaciousPlusPlusObjectInitialization>\n" 789 " <TunnelingClass>\n" 791 " BounceAlongPathWithThreshold\n" 793 " <ConstructorArguments>\n" 794 " <TunnelingStrategy>\n" 795 " " + opts.at(
"TunnelingStrategy") +
"\n" 796 " </TunnelingStrategy>\n" 797 " <SurvivalProbabilityThreshold>\n" 798 " " + opts.at(
"SurvivalProbabilityThreshold") +
"\n" 799 " </SurvivalProbabilityThreshold>\n" 800 " <ThermalActionResolution>\n" 802 " </ThermalActionResolution>\n" 803 " <CriticalTemperatureAccuracy>\n" 805 " </CriticalTemperatureAccuracy>\n" 806 " <PathResolution>\n" 807 " " + opts.at(
"PathResolution") +
"\n" 808 " </PathResolution>\n" 810 " "+ opts.at(
"pathFindingTimeout") +
"\n" 812 " <MinimumVacuumSeparationFraction>\n" 814 " </MinimumVacuumSeparationFraction>\n" 815 " <BouncePotentialFit>\n" 817 " BubbleShootingOnPathInFieldSpace\n" 819 " <ConstructorArguments>\n" 820 " <NumberShootAttemptsAllowed>\n" 822 " </NumberShootAttemptsAllowed>\n" 823 " <RadialResolution>\n" 824 " "+ opts.at(
"radialResolution") +
"\n" 825 " </RadialResolution>\n" 826 " </ConstructorArguments>\n" 827 " </BouncePotentialFit>\n" 828 " <TunnelPathFinders>\n" 831 " MinuitOnPotentialOnParallelPlanes\n" 833 " <ConstructorArguments>\n" 834 " <NumberOfPathSegments>\n" 836 " </NumberOfPathSegments>\n" 837 " <MinuitStrategy>\n" 838 " "+ opts.at(
"MinuitStrategy") +
"\n" 839 " </MinuitStrategy>\n" 840 " <MinuitTolerance>\n" 842 " </MinuitTolerance>\n" 843 " </ConstructorArguments>\n" 847 " MinuitOnPotentialPerpendicularToPath\n" 849 " <ConstructorArguments>\n" 850 " <NumberOfPathSegments>\n" 852 " </NumberOfPathSegments>\n" 853 " <NumberOfAllowedWorsenings>\n" 855 " </NumberOfAllowedWorsenings>\n" 856 " <ConvergenceThresholdFraction>\n" 858 " </ConvergenceThresholdFraction>\n" 859 " <MinuitDampingFraction>\n" 861 " </MinuitDampingFraction>\n" 862 " <NeighborDisplacementWeights>\n" 865 " </NeighborDisplacementWeights>\n" 866 " <MinuitStrategy>\n" 867 " "+ opts.at(
"MinuitStrategy") +
"\n" 868 " </MinuitStrategy>\n" 869 " <MinuitTolerance>\n" 871 " </MinuitTolerance>\n" 872 " </ConstructorArguments>\n" 874 " </TunnelPathFinders>\n" 875 " </ConstructorArguments>\n" 876 " </TunnelingClass>\n" 877 "</VevaciousPlusPlusObjectInitialization>";
879 std::ofstream tunnelingcalculatorinitwrite(tunnelingcalculatorinitpath);
880 tunnelingcalculatorinitwrite << tunnelingcalculatorinit;
881 tunnelingcalculatorinitwrite.close();
885 std::string inputFilename =
886 inputspath +
"/InitializationFiles/VevaciousPlusPlusObjectInitialization_mpirank_"+ rankstring +
".xml";
889 std::string inputfile =
890 "<VevaciousPlusPlusObjectInitialization>\n" 891 " <PotentialFunctionInitializationFile>\n" 892 " " + potentialfunctioninitpath +
"\n" 893 " </PotentialFunctionInitializationFile>\n" 894 " <PotentialMinimizerInitializationFile>\n" 895 " " + potentialminimizerinitpath +
"\n" 896 " </PotentialMinimizerInitializationFile>\n" 897 " <TunnelingCalculatorInitializationFile>\n" 899 tunnelingcalculatorinitpath +
"\n" 900 " </TunnelingCalculatorInitializationFile>\n" 901 "</VevaciousPlusPlusObjectInitialization>";
902 std::ofstream inputwrite(inputFilename);
903 inputwrite << inputfile;
920 static bool firstrun =
true;
925 std::vector<str> subcaps = Downstream::subcaps->getNames();
929 std::set<std::string> default_choice = {
"global",
"nearest"};
932 if(not subcaps.empty())
for (
const auto& x : subcaps) {result.insert(x);}
934 else {result = default_choice;}
937 std::ostringstream ss;
938 ss <<
"The LogLike calculation 'VS_likelihood' will add up the contributions" << endl;
939 for (
const auto& x : result) ss <<
"- "<< x << endl;
940 ss <<
"from the tunneling calculations. " << endl
941 <<
"You can change this in the ObsLikes section of your YAML file," << endl
942 <<
"by setting sub_capabilities 'VS_likelihood', e.g." << endl
943 <<
" sub_capabilities:" << endl
944 <<
" - nearest" << endl
945 <<
"to only calculate the tunneling probabilities to the nearest minimum." << endl;
962 static bool firstrun =
true;
969 YAML::Node subcaps = Downstream::subcaps->getNode();
972 std::set<std::string> default_choice = {
"quantum",
"thermal"};
976 if(subcaps.IsNull() or subcaps.IsSequence())
977 result = default_choice;
981 for(
const auto& subcap : subcaps)
984 if (subcap.second.IsNull())
985 temp = default_choice;
986 else if(subcap.second.IsScalar())
987 temp.insert(subcap.second.as<
str>());
988 else if(subcap.second.IsSequence())
989 for (
size_t i=0; i<subcap.second.size();i++) temp.insert(subcap.second[i].as<
str>());
991 if (not result.empty() and temp != result)
993 std::ostringstream errmsg;
994 errmsg <<
"Different tunnelling processes selected for different vacua, please select the same for both ";
995 SpecBit_error().raise(
LOCAL_INFO,errmsg.str());
1013 if(tunnelling_strategy.size() == 2 and
1014 tunnelling_strategy.find(
"quantum") != tunnelling_strategy.end() and
1015 tunnelling_strategy.find(
"thermal") != tunnelling_strategy.end())
1017 return "QuantumThenThermal";
1020 else if(tunnelling_strategy.size() == 1 and
1021 tunnelling_strategy.find(
"thermal") != tunnelling_strategy.end())
1023 return "JustThermal";
1026 else if(tunnelling_strategy.size() == 1 and
1027 tunnelling_strategy.find(
"quantum") != tunnelling_strategy.end())
1029 return "JustQuantum";
1033 std::ostringstream errmsg;
1034 errmsg <<
"No valid tunnelling stragety selected. You must select a valid option via";
1035 errmsg <<
"the sub-capabilities of capability VS_likelihood in the following way";
1036 errmsg <<
" - capability: VS_likelihood\n";
1037 errmsg <<
" purpose: LogLike\n";
1038 errmsg <<
" sub_capabilities:\n";
1039 errmsg <<
" - global: [quantum, thermal]\n";
1040 errmsg <<
" - nearest: [quantum, thermal]" << std::endl;
1041 SpecBit_error().raise(
LOCAL_INFO,errmsg.str());
1053 static bool firstrun =
true;
1061 std::string randomseed_gen = std::to_string(
int(
Random::draw() * 2 * 1987.));
1063 opts[
"phc_random_seed"] = runOptions->getValueOrDef<std::string>(randomseed_gen,
"phc_random_seed");
1064 opts[
"MinuitStrategy"] = runOptions->getValueOrDef<std::string>(
"0",
"minuit_strategy");
1065 opts[
"PotentialFunctionClassType"] = runOptions->getValueOrDef<std::string>(
"FixedScaleOneLoopPotential",
"potential_type");
1066 opts[
"homotopybackend"] = runOptions->getValueOrDef<std::string>(
"hom4ps",
"homotopy_backend");
1067 opts[
"pathFindingTimeout"] = runOptions->getValueOrDef<std::string>(
"3600",
"path_finding_timeout");
1068 opts[
"SurvivalProbabilityThreshold"] = runOptions->getValueOrDef<std::string>(
"0.01",
"survival_probability_threshold");
1069 opts[
"radialResolution"] = runOptions->getValueOrDef<std::string>(
"0.1",
"radial_resolution_undershoot_overshoot");
1070 opts[
"PathResolution"] = runOptions->getValueOrDef<std::string>(
"1000",
"PathResolution");
1076 map_str_str file_locations = *Dep::vevacious_file_location;
1077 opts.insert(file_locations.begin(), file_locations.end());
1082 inputspath = opts[
"inputspath"];
1099 vevacious_1_0::VevaciousPlusPlus::VevaciousPlusPlus vevaciousPlusPlus(inputFilename);
1102 double scale = pass_spectrum.
get_scale();
1106 for (
auto it=spec_entry_map.begin(); it!=spec_entry_map.end(); ++it)
1113 return vevaciousPlusPlus;
1121 double lifetime, thermalProbability, thermalWidth;
1125 std::string HomotopyLockfile = inputPath +
"/Homotopy/busy.lock";
1134 while(stat(HomotopyLockfile.c_str(), &buffer)==0)
1137 std::chrono::seconds tSofar = std::chrono::duration_cast<std::chrono::seconds>(tNow - tStart);
1138 if(tSofar >= std::chrono::seconds(30) )
1140 remove( HomotopyLockfile.c_str());
1147 vevaciousPlusPlus.RunPoint(panic_vacuum);
1150 lifetime = vevaciousPlusPlus.GetLifetimeInSeconds();
1151 thermalProbability = vevaciousPlusPlus.GetThermalProbability();
1152 thermalWidth = vevaciousPlusPlus.GetThermalDecayWidth();
1156 if(lifetime == -1 && thermalProbability == -1 )
1158 lifetime = 3.0E+100;
1159 thermalProbability = 1;
1161 else if(lifetime == -1 && thermalProbability != -1)
1163 lifetime = 3.0E+100;
1165 else if(lifetime != -1 && thermalProbability == -1)
1167 thermalProbability = 1;
1178 std::vector<double> BounceActionsThermal_vec = vevaciousPlusPlus.GetThermalThresholdAndActions();
1179 std::vector<double> BounceActions_vec = vevaciousPlusPlus.GetThresholdAndActions();
1182 logger() <<
LogTags::debug <<
"\nVevacious thermal result size "<< BounceActionsThermal_vec.size();
1185 for(std::size_t ii=0; ii<BounceActions_vec.size(); ++ii)
1187 logger() <<
LogTags::debug <<
"\nSetting bounceActionThreshold_[" << ii <<
"]"<< BounceActions_vec.at(ii);
1188 result.
set_results(panic_vacuum,
"bounceActionThreshold_[" + std::to_string(ii) +
"]", BounceActions_vec.at(ii));
1192 for(std::size_t ii=0; ii<BounceActionsThermal_vec.size(); ++ii)
1194 logger() <<
LogTags::debug <<
"\nSetting bounceActionThresholdThermal_[" << ii <<
"]"<< BounceActionsThermal_vec.at(ii);
1195 result.
set_results(panic_vacuum,
"bounceActionThresholdThermal_[" + std::to_string(ii) +
"]", BounceActionsThermal_vec.at(ii));
1206 result.
set_results(panic_vacuum,
"lifetime", lifetime);
1208 result.
set_results(panic_vacuum,
"thermalwidth", thermalWidth);
1209 result.
set_results(panic_vacuum,
"thermalProbability", thermalProbability);
1219 double lifetime = 2.0E+100;
1220 double thermalWidth = 0.;
1221 double thermalProbability= 1;
1223 logger() <<
LogTags::debug <<
"Vevacious could not calculate lifetime. Conservatively setting it to large value."<<
EOM;
1225 result.
set_results(panic_vacuum,
"lifetime", lifetime);
1227 result.
set_results(panic_vacuum,
"thermalwidth", thermalWidth);
1228 result.
set_results(panic_vacuum,
"thermalProbability", thermalProbability);
1245 std::set<std::string> panic_vacua = *Dep::panic_vacua;
1250 if( panic_vacua.find(
"global") != panic_vacua.end() and panic_vacua.find(
"nearest") != panic_vacua.end() )
1253 std::pair<std::vector<double>,std::vector<double>> vevs = vevaciousPlusPlus.RunVacua(
"internal");
1254 std::vector<double> global = vevs.first;
1255 std::vector<double> nearest = vevs.second;
1258 bool compare = std::equal(global.begin(), global.end(), nearest.begin());
1264 if (panic_vacua.find(
"global") != panic_vacua.end() and panic_vacua.find(
"nearest") != panic_vacua.end())
1266 panic_vacua.erase(
"global");
1269 std::ostringstream ss;
1270 ss <<
"Global and nearest minimum are the same. Will only calculate tunnelling" << endl;
1271 ss <<
"probability once." << endl;
1277 std::ostringstream ss;
1278 ss <<
"Global and nearest minimum are not the same. Will calculate tunnelling" << endl;
1279 ss <<
"probability to both." << endl;
1286 for (
auto &panic_vacuum: panic_vacua)
1305 static int pathFinder_number = 2;
1312 for(
auto x : panic_vacua)
1315 std::string panic_vacuum = x.first;
1316 std::string tunnellingStrategy = x.second;
1334 catch(
const std::exception& e)
1352 const Options& runOptions = *myPipe::runOptions;
1358 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
1364 std::string rankstring = std::to_string(rank);
1367 std::string vevaciouslibpath = Backends::backendInfo().path_dir(
"vevacious",
"1.0");
1368 std::string vevaciouspath = vevaciouslibpath +
"/../";
1369 std::string vevaciousresultspath = vevaciouspath +
"/results";
1372 std::string inputspath = runOptions.
getValueOrDef<std::string>(vevaciousresultspath,
"where_to_save_input");
1373 result[
"inputspath"] = inputspath;
1374 std::string modelfilesPath = inputspath +
"/ModelFiles/mpirank_"+ rankstring +
"/";
1376 result[
"ScaleAndBlockFileSource"] = vevaciouspath +
"ModelFiles/LagrangianParameters/MSSM.xml";
1377 result[
"ModelFileSource"] = vevaciouspath +
"ModelFiles/PotentialFunctions/MSSM_StauAndStop_RealVevs.vin";
1378 result[
"ScaleAndBlockFile"] = modelfilesPath +
"ScaleAndBlockFile.xml";
1379 result[
"ModelFile"] = modelfilesPath +
"ModelFile.vin";
1390 static std::string inputspath = *myPipe::Dep::init_vevacious;
1394 std::ostringstream InputsForLog;
1395 InputsForLog << std::fixed << std::setprecision(12) <<
"Passing parameters to Vevacious with values: ";
1397 for (
auto it=myPipe::Param.begin(); it != myPipe::Param.end(); it++)
1399 std::string name = it->first;
1400 double value = *myPipe::Param[name];
1401 InputsForLog <<
"\n " << name <<
": " << value;
1403 std::string InputsForLogString = InputsForLog.str();
1409 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
1414 std::string rankstring = std::to_string(rank);
1416 std::string inputFilename = inputspath +
"/InitializationFiles/VevaciousPlusPlusObjectInitialization_mpirank_"+ rankstring +
".xml";
1426 SLHAea::Coll slhaea = spectrumHE.
getSLHAea(2);
1427 double scale = spectrumHE.
GetScale();
1434 std::vector<std::pair<int,double>> gaugecouplings = { { 1 , SLHAea::to<double>(slhaea.at(
"GAUGE").at(1).at(1)) },
1435 { 2, SLHAea::to<double>(slhaea.at(
"GAUGE").at(2).at(1)) },
1436 { 3, SLHAea::to<double>(slhaea.at(
"GAUGE").at(3).at(1)) }};
1437 result.
add_entry(
"GAUGE", gaugecouplings, 1);
1439 std::vector<std::pair<int,double>> Hmix = { { 1 , SLHAea::to<double>(slhaea.at(
"HMIX").at(1).at(1))},
1440 { 101, SLHAea::to<double>(slhaea.at(
"HMIX").at(101).at(1))},
1441 { 102, SLHAea::to<double>(slhaea.at(
"HMIX").at(102).at(1))},
1442 { 103, SLHAea::to<double>(slhaea.at(
"HMIX").at(103).at(1))},
1443 { 3, SLHAea::to<double>(slhaea.at(
"HMIX").at(3).at(1))}};
1447 std::vector<std::pair<int,double>> minpar = {{ 3, SLHAea::to<double>(slhaea.at(
"MINPAR").at(3).at(1))}};
1450 std::vector<std::pair<int,double>> msoft = { { 21 , SLHAea::to<double>(slhaea.at(
"MSOFT").at(21).at(1))},
1451 { 22 , SLHAea::to<double>(slhaea.at(
"MSOFT").at(22).at(1))},
1452 { 1 , SLHAea::to<double>(slhaea.at(
"MSOFT").at(1).at(1))},
1453 { 2 , SLHAea::to<double>(slhaea.at(
"MSOFT").at(2).at(1))},
1454 { 3 , SLHAea::to<double>(slhaea.at(
"MSOFT").at(3).at(1))}};
1460 std::vector<std::pair<int, double>> treemsoft = {{21, SLHAea::to<double>(slhaea.at(
"TREEMSOFT").at(21).at(1))},
1461 {22, SLHAea::to<double>(slhaea.at(
"TREEMSOFT").at(22).at(1))} };
1462 result.
add_entry(
"TREEMSOFT", treemsoft, 1);
1469 std::vector<std::pair<int, double>> loopmsoft = {{21, SLHAea::to<double>(slhaea.at(
"LOOPMSOFT").at(21).at(1))},
1470 {22, SLHAea::to<double>(slhaea.at(
"LOOPMSOFT").at(22).at(1))}};
1471 result.
add_entry(
"LOOPMSOFT", loopmsoft, 1);
1475 bool diagonalYukawas =
false;
1479 SLHAea::to<double>(slhaea.at(
"YU").at(1,2));
1481 catch (
const std::exception& e) {diagonalYukawas =
true;
logger() <<
LogTags::debug <<
"Diagonal Yukawas detected"<<
EOM;}
1484 if (diagonalYukawas)
1486 std::vector<std::pair<int,double>> Yu = { { 11 , SLHAea::to<double>(slhaea.at(
"YU").at(1,1).at(2))},
1490 { 22, SLHAea::to<double>(slhaea.at(
"YU").at(2,2).at(2))},
1494 { 33, SLHAea::to<double>(slhaea.at(
"YU").at(3,3).at(2))}};
1497 std::vector<std::pair<int,double>> Yd = { { 11 , SLHAea::to<double>(slhaea.at(
"YD").at(1,1).at(2))},
1501 { 22, SLHAea::to<double>(slhaea.at(
"YD").at(2,2).at(2))},
1505 { 33, SLHAea::to<double>(slhaea.at(
"YD").at(3,3).at(2))}};
1508 std::vector<std::pair<int,double>> Ye = { { 11 , SLHAea::to<double>(slhaea.at(
"YE").at(1,1).at(2))},
1512 { 22, SLHAea::to<double>(slhaea.at(
"YE").at(2,2).at(2))},
1516 { 33, SLHAea::to<double>(slhaea.at(
"YE").at(3,3).at(2))}};
1522 std::vector<std::pair<int, double>> Yu = {{11, SLHAea::to<double>(slhaea.at(
"YU").at(1, 1).at(2))},
1523 {12, SLHAea::to<double>(slhaea.at(
"YU").at(1, 2).at(2))},
1524 {13, SLHAea::to<double>(slhaea.at(
"YU").at(1, 3).at(2))},
1525 {21, SLHAea::to<double>(slhaea.at(
"YU").at(2, 1).at(2))},
1526 {22, SLHAea::to<double>(slhaea.at(
"YU").at(2, 2).at(2))},
1527 {23, SLHAea::to<double>(slhaea.at(
"YU").at(2, 3).at(2))},
1528 {31, SLHAea::to<double>(slhaea.at(
"YU").at(3, 1).at(2))},
1529 {32, SLHAea::to<double>(slhaea.at(
"YU").at(3, 2).at(2))},
1530 {33, SLHAea::to<double>(slhaea.at(
"YU").at(3, 3).at(2))}};
1533 std::vector<std::pair<int, double>> Yd = {{11, SLHAea::to<double>(slhaea.at(
"YD").at(1, 1).at(2))},
1534 {12, SLHAea::to<double>(slhaea.at(
"YD").at(1, 2).at(2))},
1535 {13, SLHAea::to<double>(slhaea.at(
"YD").at(1, 3).at(2))},
1536 {21, SLHAea::to<double>(slhaea.at(
"YD").at(2, 1).at(2))},
1537 {22, SLHAea::to<double>(slhaea.at(
"YD").at(2, 2).at(2))},
1538 {23, SLHAea::to<double>(slhaea.at(
"YD").at(2, 3).at(2))},
1539 {31, SLHAea::to<double>(slhaea.at(
"YD").at(3, 1).at(2))},
1540 {32, SLHAea::to<double>(slhaea.at(
"YD").at(3, 2).at(2))},
1541 {33, SLHAea::to<double>(slhaea.at(
"YD").at(3, 3).at(2))}};
1544 std::vector<std::pair<int, double>> Ye = {{11, SLHAea::to<double>(slhaea.at(
"YE").at(1, 1).at(2))},
1545 {12, SLHAea::to<double>(slhaea.at(
"YE").at(1, 2).at(2))},
1546 {13, SLHAea::to<double>(slhaea.at(
"YE").at(1, 3).at(2))},
1547 {21, SLHAea::to<double>(slhaea.at(
"YE").at(2, 1).at(2))},
1548 {22, SLHAea::to<double>(slhaea.at(
"YE").at(2, 2).at(2))},
1549 {23, SLHAea::to<double>(slhaea.at(
"YE").at(2, 3).at(2))},
1550 {31, SLHAea::to<double>(slhaea.at(
"YE").at(3, 1).at(2))},
1551 {32, SLHAea::to<double>(slhaea.at(
"YE").at(3, 2).at(2))},
1552 {33, SLHAea::to<double>(slhaea.at(
"YE").at(3, 3).at(2))}};
1555 std::vector<std::pair<int, double>> Tu = {{11, SLHAea::to<double>(slhaea.at(
"TU").at(1, 1).at(2))},
1556 {12, SLHAea::to<double>(slhaea.at(
"TU").at(1, 2).at(2))},
1557 {13, SLHAea::to<double>(slhaea.at(
"TU").at(1, 3).at(2))},
1558 {21, SLHAea::to<double>(slhaea.at(
"TU").at(2, 1).at(2))},
1559 {22, SLHAea::to<double>(slhaea.at(
"TU").at(2, 2).at(2))},
1560 {23, SLHAea::to<double>(slhaea.at(
"TU").at(2, 3).at(2))},
1561 {31, SLHAea::to<double>(slhaea.at(
"TU").at(3, 1).at(2))},
1562 {32, SLHAea::to<double>(slhaea.at(
"TU").at(3, 2).at(2))},
1563 {33, SLHAea::to<double>(slhaea.at(
"TU").at(3, 3).at(2))}};
1566 std::vector<std::pair<int,double>> Td = { { 11 , SLHAea::to<double>(slhaea.at(
"TD").at(1,1).at(2))},
1567 { 12, SLHAea::to<double>(slhaea.at(
"TD").at(1,2).at(2))},
1568 { 13, SLHAea::to<double>(slhaea.at(
"TD").at(1,3).at(2))},
1569 { 21, SLHAea::to<double>(slhaea.at(
"TD").at(2,1).at(2))},
1570 { 22, SLHAea::to<double>(slhaea.at(
"TD").at(2,2).at(2))},
1571 { 23, SLHAea::to<double>(slhaea.at(
"TD").at(2,3).at(2))},
1572 { 31, SLHAea::to<double>(slhaea.at(
"TD").at(3,1).at(2))},
1573 { 32, SLHAea::to<double>(slhaea.at(
"TD").at(3,2).at(2))},
1574 { 33, SLHAea::to<double>(slhaea.at(
"TD").at(3,3).at(2))}};
1577 std::vector<std::pair<int,double>> Te = { { 11 , SLHAea::to<double>(slhaea.at(
"TE").at(1,1).at(2))},
1578 { 12, SLHAea::to<double>(slhaea.at(
"TE").at(1,2).at(2))},
1579 { 13, SLHAea::to<double>(slhaea.at(
"TE").at(1,3).at(2))},
1580 { 21, SLHAea::to<double>(slhaea.at(
"TE").at(2,1).at(2))},
1581 { 22, SLHAea::to<double>(slhaea.at(
"TE").at(2,2).at(2))},
1582 { 23, SLHAea::to<double>(slhaea.at(
"TE").at(2,3).at(2))},
1583 { 31, SLHAea::to<double>(slhaea.at(
"TE").at(3,1).at(2))},
1584 { 32, SLHAea::to<double>(slhaea.at(
"TE").at(3,2).at(2))},
1585 { 33, SLHAea::to<double>(slhaea.at(
"TE").at(3,3).at(2))}};
1589 std::vector<std::pair<int,double>> msq2 = { { 11 , SLHAea::to<double>(slhaea.at(
"MSQ2").at(1,1).at(2))},
1590 { 12, SLHAea::to<double>(slhaea.at(
"MSQ2").at(1,2).at(2))},
1591 { 13, SLHAea::to<double>(slhaea.at(
"MSQ2").at(1,3).at(2))},
1592 { 21, SLHAea::to<double>(slhaea.at(
"MSQ2").at(2,1).at(2))},
1593 { 22, SLHAea::to<double>(slhaea.at(
"MSQ2").at(2,2).at(2))},
1594 { 23, SLHAea::to<double>(slhaea.at(
"MSQ2").at(2,3).at(2))},
1595 { 31, SLHAea::to<double>(slhaea.at(
"MSQ2").at(3,1).at(2))},
1596 { 32, SLHAea::to<double>(slhaea.at(
"MSQ2").at(3,2).at(2))},
1597 { 33, SLHAea::to<double>(slhaea.at(
"MSQ2").at(3,3).at(2))}};
1600 std::vector<std::pair<int,double>> msl2 = { { 11 , SLHAea::to<double>(slhaea.at(
"MSL2").at(1,1).at(2))},
1601 { 12, SLHAea::to<double>(slhaea.at(
"MSL2").at(1,2).at(2))},
1602 { 13, SLHAea::to<double>(slhaea.at(
"MSL2").at(1,3).at(2))},
1603 { 21, SLHAea::to<double>(slhaea.at(
"MSL2").at(2,1).at(2))},
1604 { 22, SLHAea::to<double>(slhaea.at(
"MSL2").at(2,2).at(2))},
1605 { 23, SLHAea::to<double>(slhaea.at(
"MSL2").at(2,3).at(2))},
1606 { 31, SLHAea::to<double>(slhaea.at(
"MSL2").at(3,1).at(2))},
1607 { 32, SLHAea::to<double>(slhaea.at(
"MSL2").at(3,2).at(2))},
1608 { 33, SLHAea::to<double>(slhaea.at(
"MSL2").at(3,3).at(2))}};
1611 std::vector<std::pair<int,double>> msd2 = { { 11 , SLHAea::to<double>(slhaea.at(
"MSD2").at(1,1).at(2))},
1612 { 12, SLHAea::to<double>(slhaea.at(
"MSD2").at(1,2).at(2))},
1613 { 13, SLHAea::to<double>(slhaea.at(
"MSD2").at(1,3).at(2))},
1614 { 21, SLHAea::to<double>(slhaea.at(
"MSD2").at(2,1).at(2))},
1615 { 22, SLHAea::to<double>(slhaea.at(
"MSD2").at(2,2).at(2))},
1616 { 23, SLHAea::to<double>(slhaea.at(
"MSD2").at(2,3).at(2))},
1617 { 31, SLHAea::to<double>(slhaea.at(
"MSD2").at(3,1).at(2))},
1618 { 32, SLHAea::to<double>(slhaea.at(
"MSD2").at(3,2).at(2))},
1619 { 33, SLHAea::to<double>(slhaea.at(
"MSD2").at(3,3).at(2))}};
1622 std::vector<std::pair<int,double>> mse2 = { { 11 , SLHAea::to<double>(slhaea.at(
"MSE2").at(1,1).at(2))},
1623 { 12, SLHAea::to<double>(slhaea.at(
"MSE2").at(1,2).at(2))},
1624 { 13, SLHAea::to<double>(slhaea.at(
"MSE2").at(1,3).at(2))},
1625 { 21, SLHAea::to<double>(slhaea.at(
"MSE2").at(2,1).at(2))},
1626 { 22, SLHAea::to<double>(slhaea.at(
"MSE2").at(2,2).at(2))},
1627 { 23, SLHAea::to<double>(slhaea.at(
"MSE2").at(2,3).at(2))},
1628 { 31, SLHAea::to<double>(slhaea.at(
"MSE2").at(3,1).at(2))},
1629 { 32, SLHAea::to<double>(slhaea.at(
"MSE2").at(3,2).at(2))},
1630 { 33, SLHAea::to<double>(slhaea.at(
"MSE2").at(3,3).at(2))}};
1633 std::vector<std::pair<int,double>> msu2 = { { 11 , SLHAea::to<double>(slhaea.at(
"MSU2").at(1,1).at(2))},
1634 { 12, SLHAea::to<double>(slhaea.at(
"MSU2").at(1,2).at(2))},
1635 { 13, SLHAea::to<double>(slhaea.at(
"MSU2").at(1,3).at(2))},
1636 { 21, SLHAea::to<double>(slhaea.at(
"MSU2").at(2,1).at(2))},
1637 { 22, SLHAea::to<double>(slhaea.at(
"MSU2").at(2,2).at(2))},
1638 { 23, SLHAea::to<double>(slhaea.at(
"MSU2").at(2,3).at(2))},
1639 { 31, SLHAea::to<double>(slhaea.at(
"MSU2").at(3,1).at(2))},
1640 { 32, SLHAea::to<double>(slhaea.at(
"MSU2").at(3,2).at(2))},
1641 { 33, SLHAea::to<double>(slhaea.at(
"MSU2").at(3,3).at(2))}};
double get(const Par::Tags partype, const std::string &mass) const
Define overloadings of the stream operator for various containers.
void set_tunnelling_strategy(std::set< std::string > &result)
Create a string set containing a list of the tunnelling strategies that vevacious should use...
This class is used to deliver both information defined in the Standard Model (or potentially just QED...
Rollcall header for module SpecBit.
General small utility macros.
map_str_SpectrumEntry get_spec_entry_map()
virtual std::unique_ptr< SubSpectrum > clone() const =0
Clone the SubSpectrum object.
Declarations of convenience (i.e.
map_str_dbl get_global_results()
void clear_results(const str panic_vaccum, int pathFinder_number)
delete all entries of the vevacious results map and set lifetime, probability and all entries of boun...
bool check_perturb_to_min_lambda(const Spectrum &spec, double scale, int pts, const std::vector< SpectrumParameter > required_parameters)
std::chrono::time_point< std::chrono::system_clock > time_point
std::string get_inputFilename()
virtual double GetScale() const
Returns the renormalisation scale of parameters.
Type definition header for module SpecBit.
void find_min_lambda_ScalarSingletDM_Z3(dbl_dbl_bool &vs_tuple)
void find_min_lambda_Helper(dbl_dbl_bool &vs_tuple, const Spectrum &fullspectrum, double high_energy_limit, int check_perturb_pts, const std::vector< SpectrumParameter > required_parameters)
void helper_run_vevacious(vevacious_1_0::VevaciousPlusPlus::VevaciousPlusPlus &vevaciousPlusPlus, VevaciousResultContainer &result, std::string panic_vacuum, std::string inputPath)
Call vevacious, the result is either "Stable", "Metastable" or "Inconclusive" in case a vevacious run...
std::chrono::milliseconds ms
Spectrum Spectrum Spectrum Spectrum Spectrum Spectrum Spectrum ScalarSingletDM_Z3_spectrum
virtual SLHAstruct getSLHAea(int) const
Get spectrum information in SLHAea format (if possible)
ScalarSingletDM_Z2_spectrum
void get_lambdaB(double &result)
double get_width(str panic_vacuum)
void set_scale(double inScale)
void make_vpp_inputs(map_str_str &opts)
Helper function that takes any YAML options and makes the vevacious input, in the form of ...
static double draw()
Draw a single uniform random deviate from the interval (0,1) using the chosen RNG engine...
void get_likelihood_VS(double &result)
Vacuum stability likelihood from a Vevacious run calculating the lifetime of & tunneling probability ...
std::map< std::string, SpectrumEntry > map_str_SpectrumEntry
map mapping the name of a spectrum entry to the SpectrumEntry type.
virtual void raise(const std::string &)
Raise the exception, i.e. throw it. Exact override of base method.
map_str_dbl get_nearest_results()
void prepare_pass_MSSM_spectrum_to_vevacious(SpectrumEntriesForVevacious &result)
This function adds all entries of the spectrum object (as SLHAea) that need to be passed to vevacious...
void check_perturb_min_lambda(double &result)
void helper_catch_vevacious(VevaciousResultContainer &result, std::string panic_vacuum)
Decide how to deal with a failed vevacious run –> set lifetime and thermalProbability conservatively...
const Logging::endofmessage EOM
Explicit const instance of the end of message struct in Gambit namespace.
vec_pair_int_dbl parameters
std::vector< SpectrumParameter > all_parameters_with_tag(Par::Tags tag) const
Function to retreive all parameters matching a certain tag.
EXPORT_SYMBOLS Logging::LogMaster & logger()
Function to retrieve a reference to the Gambit global log object.
vevacious_1_0::VevaciousPlusPlus::VevaciousPlusPlus exec_pass_spectrum_to_vevacious(SpectrumEntriesForVevacious &pass_spectrum)
Execute the passing of the spectrum object (as SLHAea) to vevacious.
std::string str
Shorthand for a standard string.
std::unique_ptr< SubSpectrum > clone_HE() const
EXPORT_SYMBOLS const str & ensure_path_exists(const str &)
Ensure that a path exists (and then return the path, for chaining purposes)
void add_entry(std::string name, vec_pair_int_dbl vec, int dimension)
add a SpectrumEntry type to the 'spec_entry_map' map.
TYPE getValueOrDef(TYPE def, const args &... keys) const
double lambda(double x, double y, double z)
Virtual base class for interacting with spectrum generator output.
void set_inputPath(std::string inPath)
This class is used to wrap the QedQcd object used by SoftSUSY and FlexibleSUSY in a Gambit SubSpectru...
void find_min_lambda_ScalarSingletDM_Z2(dbl_dbl_bool &vs_tuple)
void find_min_lambda_MDM(dbl_dbl_bool &vs_tuple)
std::map< std::string, std::string > map_str_str
Shorthand for a string-to-string map.
void set_panic_vacua(std::set< std::string > &result)
Create a string set containing a list with all likelihoods that vevacious should calculate.
double pow(const double &a)
Outputs a^i.
std::string get_inputPath()
void check_vacuum_stability_vevacious(VevaciousResultContainer &result)
Check stability of global vacuum of the potential with vevacious.
double get_thermalWidth(str panic_vacuum)
void vevacious_file_location_MSSM(map_str_str &result)
Tell GAMBIT which files to work with for the MSSM.
str helper_set_tunnelingStrategy(std::set< std::string > tunnelling_strategy)
Set tunnelling strategy for the different minima, either.
void set_results(str panic_vaccum, str name, double val)
add entries to vevacious result map
invalid_point_exception & invalid_point()
Invalid point exceptions.
std::map< std::string, double > map_str_dbl
Shorthand for a string-to-double map.
double run_lambda(double scale, void *params)
void check_EW_stability_ScalarSingletDM_Z3(double &result)
void compare_panic_vacua(map_str_str &result)
If tunnelling to global and nearest vacuum are requested, this capability compares if the two vacua a...
void get_VS_results(map_str_dbl &result)
get all results from VS as str to dbl map to easily print them
TODO: see if we can use this one:
A small wrapper object for 'options' nodes.
void add_straightPathGoodEnough(str panic_vacuum)
add information to vevacious result map whether the action of drawing a straight path between the phy...
"Standard Model" (low-energy) plus high-energy model container class
void get_expected_vacuum_lifetime(double &lifetime)
class for setting & storing all spectrum entries of type SpectrumEntry that need to be passed to veva...
void lnL_highscale_vacuum_decay_single_field(double &result)
time_point get_clock_now()
Get clock time.
void initialize_vevacious(std::string &inputspath)
Parses the YAML file for any settings, then passes to make_vpp_inputs to create .xml files for vevaci...
void set_inputFilename(std::string inFile)