17 const std::string SUSY::SUSYvars[NSUSYvars] = {
18 "m1r",
"m1i",
"m2r",
"m2i",
"m3" ,
"muHr",
"muHi",
"mHptree",
"tanb",
"Q_SUSY"
23 msQhat2(3,3,0.), msUhat2(3,3,0.), msDhat2(3,3,0.),msLhat2(3,3,0.), msNhat2(3,3,0.), msEhat2(3,3,0.),
24 TUhat(3,3,0.), TDhat(3,3,0.), TNhat(3,3,0.), TEhat(3,3,0.),
25 mch(2,0.), mneu(4,0.), m_su2(6,0.), m_sd2(6,0.), m_sdresum2(6,0.), m_sn2(6,0.), m_se2(6,0.),
26 U(2,2,0.), V(2,2,0.), N(4,4,0.),
27 Ru(6,6,0.), Rd(6,6,0.), Rdresum(6,6,0.), Rn(6,6,0.), Rl(6,6,0.),SUSYM(*this)
30 ModelParamMap.insert(std::make_pair(
"m1r", std::cref(m1.real())));
31 ModelParamMap.insert(std::make_pair(
"m1i", std::cref(m1.imag())));
32 ModelParamMap.insert(std::make_pair(
"m2r", std::cref(m2.real())));
33 ModelParamMap.insert(std::make_pair(
"m2i", std::cref(m2.imag())));
34 ModelParamMap.insert(std::make_pair(
"m3", std::cref(m3)));
35 ModelParamMap.insert(std::make_pair(
"muHr", std::cref(muH.real())));
36 ModelParamMap.insert(std::make_pair(
"muHi", std::cref(muH.imag())));
37 ModelParamMap.insert(std::make_pair(
"mHptree", std::cref(mHptree)));
38 ModelParamMap.insert(std::make_pair(
"tanb", std::cref(tanb)));
39 ModelParamMap.insert(std::make_pair(
"Q_SUSY", std::cref(Q_SUSY)));
46 if (IsModelInitialized()) {
47 if (mySUSYSpectrum != NULL)
delete(mySUSYSpectrum);
48 if (myEWSUSY != NULL)
delete(myEWSUSY);
54 bool SUSY::InitializeModel()
57 else mySUSYSpectrum = NULL;
58 myEWSUSY =
new EWSUSY(*
this);
59 setFlagStr(
"Mw",
"NORESUM");
68 bool SUSY::Init(
const std::map<std::string, double>& DPars)
73 bool SUSY::PreUpdate()
80 bool SUSY::Update(
const std::map<std::string, double>& DPars)
82 if(!PreUpdate())
return (
false);
86 for (std::map<std::string, double>::const_iterator it = DPars.begin(); it != DPars.end(); it++)
87 setParameter(it->first, it->second);
89 if (UpdateError)
return (
false);
91 if(!PostUpdate())
return (
false);
96 bool SUSY::PostUpdate()
104 if(m1.abs() == 0. && m2.abs() == 0.) {
111 for (
int i = 0; i < 6; i++) {
117 for (
int j = 0; j < 6; j++) {
124 Rdresum.assign(i, j, 0.);
129 for (
int i = 0; i < 2; i++) {
131 for (
int j = 0; j < 2; j++) {
140 for (
int i = 0; i < 4; i++) {
142 for (
int j = 0; j < 4; j++)
148 if (!mySUSYSpectrum->CalcHiggs(mh, saeff))
return (
false);
149 if (!mySUSYSpectrum->CalcChargino(U, V, mch))
return (
false);
150 if (!mySUSYSpectrum->CalcNeutralino(N, mneu))
return (
false);
151 if (!mySUSYSpectrum->CalcSup(Ru, m_su2))
return (
false);
152 mySUSYSpectrum->SortSfermionMasses(m_su2, Ru);
153 if (!mySUSYSpectrum->CalcSdown(Rd, m_sd2))
return (
false);
154 mySUSYSpectrum->SortSfermionMasses(m_sd2, Rd);
155 if (!mySUSYSpectrum->CalcSneutrino(Rn, m_sn2))
return (
false);
156 mySUSYSpectrum->SortSfermionMasses(m_sn2, Rn);
157 if (!mySUSYSpectrum->CalcSelectron(Rl, m_se2))
return (
false);
158 mySUSYSpectrum->SortSfermionMasses(m_se2, Rl);
162 if (mh[0] < 10. || mh[0] > 1000.) {
163 std::stringstream out;
165 throw std::runtime_error(
"SUSY::PostUpdate(): mh=" + out.str() +
" is out of range for EWSMApproximateFormulae");
170 if( Q_SUSY == -1 || Q_SUSY == 0) Q_SUSY =
sqrt(
sqrt(m_su2(2) * m_su2(5)) );
173 myEWSUSY->SetRosiekParameters();
177 SUSYM.getObj().updateSMParameters();
178 SUSYM.getObj().updateSUSYParameters();
183 void SUSY::setParameter(
const std::string name,
const double& value)
185 if (name.compare(
"m1r") == 0)
187 else if (name.compare(
"m1i") == 0)
189 else if (name.compare(
"m2r") == 0)
191 else if (name.compare(
"m2i") == 0)
193 else if (name.compare(
"m3") == 0)
195 else if (name.compare(
"muHr") == 0)
197 else if (name.compare(
"muHi") == 0)
199 else if (name.compare(
"mHptree") == 0)
201 else if (name.compare(
"tanb") == 0)
203 else if (name.compare(
"Q_SUSY") == 0)
209 bool SUSY::CheckParameters(
const std::map<std::string, double>& DPars)
211 for(
int i=0; i<NSUSYvars; i++)
212 if(DPars.find(SUSYvars[i])==DPars.end()) {
213 std::cout <<
"ERROR: missing mandatory SUSY parameter " << SUSYvars[i] << std::endl;
214 raiseMissingModelParameterCount();
215 addMissingModelParameter(SUSYvars[i]);
220 void SUSY::SetTanb(
const double tanb)
224 throw std::runtime_error(
"SUSY::setTanb(): Negative tanb is not allowed");
227 cosb =
sqrt(1. / (1. + tanb * tanb));
231 void SUSY::computeYukawas()
240 double mtbar = Mp2Mbar(mtpole,
FULLNLO);
242 double Q_SUSY_temp = Q_SUSY;
243 if( Q_SUSY == -1 || Q_SUSY == 0) Q_SUSY =
sqrt(
sqrt(msQhat2(2,2).abs() * msUhat2(2,2).abs() ) );
245 for (
int i = 0; i < 3; i++) {
248 mu_Q[i] = Mrun(Q_SUSY, getQuarks((quark)(UP + 2 * i)).getMass_scale(),
249 getQuarks((quark)(UP + 2 * i)).getMass(),
FULLNLO);
251 mu_Q[i] = Mrun(Q_SUSY, mtbar,
FULLNLO);
252 md_Q[i] = Mrun(Q_SUSY, getQuarks((quark)(DOWN + 2 * i)).getMass_scale(),
253 getQuarks((quark)(DOWN + 2 * i)).getMass(),
FULLNLO);
254 me_Q[i] = getLeptons((lepton)(ELECTRON + 2 * i)).getMass();
255 mn_Q[i] = getLeptons((lepton)(NEUTRINO_1 + 2 * i)).getMass();
258 mu_Q[i] = MS2DRqmass(Q_SUSY, mu_Q[i]);
259 md_Q[i] = MS2DRqmass(Q_SUSY, md_Q[i]);
261 Yu.assign(i, i, mu_Q[i] / v2() *
sqrt(2.));
262 Yd.assign(i, i, md_Q[i] / v1() *
sqrt(2.));
263 Ye.assign(i, i, me_Q[i] / v1() *
sqrt(2.));
264 Yn.assign(i, i, mn_Q[i] / v2() *
sqrt(2.));
267 Yu = myCKM.getCKM().transpose()*Yu;
268 Yn = Yn * myPMNS.getPMNS().hconjugate();
270 Q_SUSY = Q_SUSY_temp;
274 void SUSY::SetSoftTerms()
284 bool SUSY::setFlag(
const std::string name,
const bool value)
287 if(name.compare(
"Flag_H") == 0) {
300 double SUSY::v1()
const
305 double SUSY::v2()
const
310 double SUSY::getMGl()
const
318 double SUSY::Mw()
const
324 double SUSY::Mw_dRho()
const