a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
GeneralTHDMEffectivePot.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016 HEPfit Collaboration
3 * All rights reserved.
4 *
5 * For the licensing terms see doc/COPYING.
6 */
7
9#include <Math/Minimizer.h>
10#include <Math/Factory.h>
11#include <Math/Functor.h>
12#include "GeneralTHDM.h"
13#include "GeneralTHDMcache.h"
14
16//: myGTHDM(static_cast<const GeneralTHDM&> (SM_i)),
17: mat_neutral(4,4,0.)
18{}
19
20const double* EffectivePot_GTHDM::potentialminimizer(double S1_start, double S2_start, double S3_start)
21{
22 ROOT::Math::Minimizer *minimizer = ROOT::Math::Factory::CreateMinimizer("Minuit","Migrad");
23
24 minimizer->SetMaxFunctionCalls(10000);
25 minimizer->SetMaxIterations(1000);
26 minimizer->SetTolerance(0.01);
27
28 ROOT::Math::Functor fwrap(this,&EffectivePot_GTHDM::potentialfunction,3);
29
30 minimizer->SetFunction(fwrap);
31 minimizer->SetVariable(0, "S1", S1_start, 0.1);
32 minimizer->SetVariable(1, "S2", S2_start, 0.1);
33 minimizer->SetVariable(2, "S3", S3_start, 0.1);
34
35 minimizer->Minimize();
36
37 const double *minimum = minimizer->X();
38
39// std::cout << "min_S1 = " << minimum[0] << std::endl;
40// std::cout << "min_S2 = " << minimum[1] << std::endl;
41// std::cout << "min_S3 = " << minimum[2] << std::endl << std::endl;
42
43 return(minimum);
44}
45
46double EffectivePot_GTHDM::potentialfunction(const double *Svec)
47{
48 const double S1 = Svec[0];
49 const double S2 = Svec[1];
50 const double S3 = Svec[2];
51
52 double Func = 3./2.*S1*S1*S1*S1 + 3.*S1*S1*S1 - 5.*S1 + S2*S2;
53
54 double TraceMn2 = (Mneutral_2(S1,S2,S3))(0,0) + (Mneutral_2(S1,S2,S3))(1,1) +
55 (Mneutral_2(S1,S2,S3))(2,2) + (Mneutral_2(S1,S2,S3))(3,3);
56
57 return Func + TraceMn2;
58}
59
60gslpp::matrix<double> EffectivePot_GTHDM::Mneutral_2(const double S1, const double S2, const double S3)
61{
62
63 mat_neutral.assign(0,0, S1);
64 mat_neutral.assign(1,1, 2.*S2);
65 mat_neutral.assign(2,2, 3.*S1);
66 mat_neutral.assign(3,3, 4.*S3*S3);
67
68 return mat_neutral;
69}
70
72: ThObservable(SM_i), myEffectivePot_GTHDM(SM_i)
73{}
74
76{
77 return (myEffectivePot_GTHDM.potentialminimizer(-0.39,0.,0.))[0];
78}
79
81: ThObservable(SM_i), myEffectivePot_GTHDM(SM_i)
82{}
83
85{
86 return (myEffectivePot_GTHDM.potentialminimizer(-0.38,0.,0.))[0];
87}
EffectivePot_GTHDM(const StandardModel &SM_i)
EffectivePot_GTHDM constructor.
const double * potentialminimizer(double S1_start, double S2_start, double S3_start)
gslpp::matrix< double > mat_neutral
gslpp::matrix< double > Mneutral_2(const double S1, const double S2, const double S3)
double potentialfunction(const double *Svec)
EffectivePotMin1_GTHDM(const StandardModel &SM_i)
EffectivePotMin1_GTHDM constructor.
EffectivePot_GTHDM myEffectivePot_GTHDM
EffectivePot_GTHDM myEffectivePot_GTHDM
EffectivePotMin2_GTHDM(const StandardModel &SM_i)
EffectivePotMin2_GTHDM constructor.
A model class for the Standard Model.
A class for a model prediction of an observable.
Definition: ThObservable.h:25