SUSY.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include <math.h>
9 #include <sstream>
10 #include <stdexcept>
11 #include "StandardModelMatching.h"
12 #include "SUSY.h"
13 #include "SUSYSpectrum.h"
14 
15 
16 const std::string SUSY::SUSYvars[NSUSYvars] = {
17  "m1r", "m1i", "m2r", "m2i", "m3" , "muHr", "muHi", "mHptree", "tanb", "Q_SUSY"
18 };
19 
21 : StandardModel(),
22  msQhat2(3,3,0.), msUhat2(3,3,0.), msDhat2(3,3,0.),msLhat2(3,3,0.), msNhat2(3,3,0.), msEhat2(3,3,0.),
23  TUhat(3,3,0.), TDhat(3,3,0.), TNhat(3,3,0.), TEhat(3,3,0.),
24  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.),
25  U(2,2,0.), V(2,2,0.), N(4,4,0.),
26  Ru(6,6,0.), Rd(6,6,0.), Rdresum(6,6,0.), Rn(6,6,0.), Rl(6,6,0.)
27 {
28  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("m1r", boost::cref(m1.real())));
29  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("m1i", boost::cref(m1.imag())));
30  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("m2r", boost::cref(m2.real())));
31  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("m2i", boost::cref(m2.imag())));
32  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("m3", boost::cref(m3)));
33  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("muHr", boost::cref(muH.real())));
34  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("muHi", boost::cref(muH.imag())));
35  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("mHptree", boost::cref(mHptree)));
36  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("tanb", boost::cref(tanb)));
37  ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >("Q_SUSY", boost::cref(Q_SUSY)));
38 }
39 
41  if (IsModelInitialized()) {
42  if (mySUSYMatching != NULL) delete(mySUSYMatching);
43  if (mySUSYSpectrum != NULL) delete(mySUSYSpectrum);
44  }
45 }
47 // Initialization
48 
50 {
51  mySUSYMatching = new SUSYMatching(*this);
52  mySUSYSpectrum = new SUSYSpectrum(*this);
53  setFlagStr("Mw", "NORESUM");
55  setModelSUSY();
56  return(true);
57 }
58 
60 // Parameters
61 
62 bool SUSY::Init(const std::map<std::string, double>& DPars)
63 {
64  return(StandardModel::Init(DPars));
65 }
66 
68 {
69  if(!StandardModel::PreUpdate()) return (false);
70 
71  return (true);
72 }
73 
74 bool SUSY::Update(const std::map<std::string, double>& DPars)
75 {
76  if(!PreUpdate()) return (false);
77 
78  UpdateError = false;
79 
80  for (std::map<std::string, double>::const_iterator it = DPars.begin(); it != DPars.end(); it++)
81  setParameter(it->first, it->second);
82 
83  if (UpdateError) return (false);
84 
85  if(!PostUpdate()) return (false);
86 
87  return (true);
88 }
89 
91  if (!StandardModel::PostUpdate()) return (false);
93 
94  /* use approximate GUT relation if M1 & M2 are zero */
95  if (m1.abs() == 0. && m2.abs() == 0.) {
96  m1.real() = m3 / 6.;
97  m2.real() = m3 / 3.;
98  }
99  /* Compute Higgs and sparticle spectra without FeynHiggs */
100  /* sfermions */
101  for (int i = 0; i < 6; i++) {
102  m_sn2(i) = 0.; // heavy decoupled masses for i=3-5
103  m_se2(i) = 0.;
104  m_su2(i) = 0.;
105  m_sd2(i) = 0.;
106  m_sdresum2(i) = 0.;
107  for (int j = 0; j < 6; j++) {
108  /* R: first (second) index for mass (gauge) eigenstates */
109  /* UASf: second (third) index for gauge (mass) eigenstates */
110  Rn.assign(i, j, 0.);
111  Rl.assign(i, j, 0.);
112  Ru.assign(i, j, 0.);
113  Rd.assign(i, j, 0.);
114  Rdresum.assign(i, j, 0.);
115  }
116  }
117 
118  /* charginos */
119  for (int i = 0; i < 2; i++) {
120  mch(i) = 0.;
121  for (int j = 0; j < 2; j++) {
122  /* U and V: first (second) index for mass (gauge) eigenstates */
123  /* Ucha and VCha: first (second) index for gauge (mass) eigenstates */
124  U.assign(i, j, 0.);
125  V.assign(i, j, 0.);
126  }
127  }
128 
129  /* neutralinos */
130  for (int i = 0; i < 4; i++) {
131  mneu(i) = 0.;
132  for (int j = 0; j < 4; j++)
133  /* N: first (second) index for mass (gauge) eigenstates */
134  /* Zneu: first (second) index for gauge (mass) eigenstates */
135  N.assign(i, j, 0.);
136  }
137 
138  if (!mySUSYSpectrum->CalcHiggs(mh, saeff)) return (false);
139  if (!mySUSYSpectrum->CalcChargino(U, V, mch)) return (false);
140  if (!mySUSYSpectrum->CalcNeutralino(N, mneu)) return (false);
141  if (!mySUSYSpectrum->CalcSup(Ru, m_su2)) return (false);
143  if (!mySUSYSpectrum->CalcSdown(Rd, m_sd2)) return (false);
145  if (!mySUSYSpectrum->CalcSneutrino(Rn, m_sn2)) return (false);
147  if (!mySUSYSpectrum->CalcSelectron(Rl, m_se2)) return (false);
149 
150  /* Set the mass of the SM-like Higgs */
151  mHl = mh[0];
152  /* allowed range for the use of EWSMApproximateFormulae class */
153  if (mHl < 10. || mHl > 1000.) {
154  std::cout << "WARNING: mh=" << mHl << " in SUSY::PostUpdate" << std::endl;
155  return (false);
156  }
157 
158  if (Q_SUSY == -1 || Q_SUSY == 0) Q_SUSY = sqrt(sqrt(m_su2(2) * m_su2(5)));
159 
160  /* Necessary for updating StandardModel parameters in StandardModelMatching,
161  * and SUSY and SUSY-derived parameters in SUSYMatching */
162  mySUSYMatching->StandardModelMatching::updateSMParameters();
164 
165  return (true);
166 }
167 
168 void SUSY::setParameter(const std::string name, const double& value)
169 {
170  if (name.compare("m1r") == 0)
171  m1.real() = value;
172  else if (name.compare("m1i") == 0)
173  m1.imag() = value;
174  else if (name.compare("m2r") == 0)
175  m2.real() = value;
176  else if (name.compare("m2i") == 0)
177  m2.imag() = value;
178  else if (name.compare("m3") == 0)
179  m3 = value;
180  else if (name.compare("muHr") == 0)
181  muH.real() = value;
182  else if (name.compare("muHi") == 0)
183  muH.imag() = value;
184  else if (name.compare("mHptree") == 0)
185  mHptree = value;
186  else if (name.compare("tanb") == 0)
187  SetTanb(value);
188  else if (name.compare("Q_SUSY") == 0)
189  Q_SUSY = value;
190  else
191  StandardModel::setParameter(name, value);
192 }
193 
194 bool SUSY::CheckParameters(const std::map<std::string, double>& DPars)
195 {
196  for(int i=0; i<NSUSYvars; i++)
197  if(DPars.find(SUSYvars[i])==DPars.end()) {
198  std::cout << "missing mandatory SUSY parameter " << SUSYvars[i] << std::endl;
199  return false;
200  }
201  return(StandardModel::CheckParameters(DPars));
202 }
203 
204 void SUSY::SetTanb(const double tanb)
205 {
206  this->tanb = tanb;
207  if (tanb < 0.)
208  throw std::runtime_error("SUSY::setTanb(): Negative tanb is not allowed");
209 
210  /* cosb and sinb are defined to be positive, corresponding to 0<=beta<=pi/2 */
211  cosb = sqrt(1. / (1. + tanb * tanb));
212  sinb = tanb * cosb;
213 }
214 
216 {
217  /* initializations */
222 
223  /* Convert the top-quark pole mass to the MSbar mass */
224  double mtbar = Mp2Mbar(mtpole, FULLNLO);
225 
226  double Q_SUSY_temp = Q_SUSY;
227  if( Q_SUSY == -1 || Q_SUSY == 0) Q_SUSY = sqrt( sqrt(msQhat2(2,2).abs() * msUhat2(2,2).abs() ) );
228 
229  for (int i = 0; i < 3; i++) {
230  /* Run the quark masses to scale Q */
231  if (i != 2)
232  mu_Q[i] = Mrun(Q_SUSY, getQuarks((quark)(UP + 2 * i)).getMass_scale(),
233  getQuarks((quark)(UP + 2 * i)).getMass(), FULLNLO);
234  else
235  mu_Q[i] = Mrun(Q_SUSY, mtbar, FULLNLO);
236  md_Q[i] = Mrun(Q_SUSY, getQuarks((quark)(DOWN + 2 * i)).getMass_scale(),
237  getQuarks((quark)(DOWN + 2 * i)).getMass(), FULLNLO);
238  me_Q[i] = getLeptons((lepton)(ELECTRON + 2 * i)).getMass();
239  mn_Q[i] = getLeptons((lepton)(NEUTRINO_1 + 2 * i)).getMass();
240 
241  /* Convert MSbar to DRbar */
242  mu_Q[i] = MS2DRqmass(Q_SUSY, mu_Q[i]);
243  md_Q[i] = MS2DRqmass(Q_SUSY, md_Q[i]);
244 
245  Yu.assign(i, i, mu_Q[i] / v2() * sqrt(2.));
246  Yd.assign(i, i, md_Q[i] / v1() * sqrt(2.));
247  Ye.assign(i, i, me_Q[i] / v1() * sqrt(2.));
248  Yn.assign(i, i, mn_Q[i] / v2() * sqrt(2.));
249  }
250 
251  Yu = VCKM.transpose()*Yu;
252  Yn = Yn * UPMNS.hconjugate();
253 
254  Q_SUSY = Q_SUSY_temp;
255 
256 }
257 
259 // Flags
260 
261 bool SUSY::setFlag(const std::string name, const bool value)
262 {
263  return(StandardModel::setFlag(name,value));
264 }
265 
267 
268 double SUSY::v1() const
269 {
270  return (v() * cosb);
271 }
272 
273 double SUSY::v2() const
274 {
275  return (v() * sinb);
276 }
277 
278 double SUSY::getMGl() const
279 {
280  return m3;
281 }
double sinb
Definition: SUSY.h:495
gslpp::matrix< gslpp::complex > msUhat2
Definition: SUSY.h:499
gslpp::matrix< gslpp::complex > Rdresum
Definition: SUSY.h:509
gslpp::matrix< gslpp::complex > Ye
The Yukawa matrix of the charged leptons.
gslpp::complex saeff
Definition: SUSY.h:504
double md_Q[3]
Definition: SUSY.h:512
gslpp::vector< double > m_se2
Definition: SUSY.h:506
virtual bool PostUpdate()
The post-update method for StandardModel.
virtual bool setFlagStr(const std::string name, const std::string value)
A method to set a flag of StandardModel.
gslpp::matrix< gslpp::complex > UPMNS
The PMNS matrix.
virtual bool InitializeModel()
Definition: SUSY.cpp:49
double m3
Definition: SUSY.h:492
bool CalcChargino(gslpp::matrix< gslpp::complex > &U_i, gslpp::matrix< gslpp::complex > &V_i, gslpp::vector< double > &mch_i)
Computes the chargino spectrum at tree level.
quark
An enum type for quarks.
Definition: QCD.h:730
gslpp::matrix< gslpp::complex > Ru
Definition: SUSY.h:509
virtual void setParameter(const std::string name, const double &value)
Definition: SUSY.cpp:168
gslpp::vector< double > mneu
Definition: SUSY.h:505
double v1() const
Definition: SUSY.cpp:268
Particle getLeptons(const StandardModel::lepton p) const
A get method to retrieve the member object of a lepton.
bool CalcSelectron(gslpp::matrix< gslpp::complex > &Rl_i, gslpp::vector< double > &m_se2_i)
Computes the charged-slepton spectrum at tree level.
A base class for defining operations on matrices, both real and complex.
gslpp::matrix< gslpp::complex > V
Definition: SUSY.h:509
SUSYMatching * mySUSYMatching
Definition: SUSY.h:517
gslpp::complex m2
Definition: SUSY.h:491
gslpp::matrix< gslpp::complex > N
Definition: SUSY.h:509
bool CalcSdown(gslpp::matrix< gslpp::complex > &Rd_i, gslpp::vector< double > &m_sd2_i)
Computes the down-type squark spectrum at tree level.
gslpp::matrix< gslpp::complex > Yn
The Yukawa matrix of the neutrinos.
const double & real() const
virtual bool PreUpdate()
Definition: SUSY.cpp:67
SUSY()
A SUSY constructor.
Definition: SUSY.cpp:20
gslpp::matrix< gslpp::complex > Rn
Definition: SUSY.h:509
virtual void computeYukawas()
Definition: SUSY.cpp:215
bool UpdateError
A boolean set to false if update is successful.
Definition: Model.h:192
bool CalcHiggs(double mh[4], gslpp::complex &saeff_i)
Computes the Higgs spectrum at tree level.
virtual bool InitializeModel()
A method to initialize the model.
Definition: QCD.h:731
A model class for the Standard Model.
double mHl
The Higgs mass in GeV.
SUSYSpectrum * mySUSYSpectrum
Definition: SUSY.h:488
gslpp::matrix< gslpp::complex > Yu
The Yukawa matrix of the up-type quarks.
gslpp::matrix< gslpp::complex > U
Definition: SUSY.h:509
void setModelInitialized(bool ModelInitialized)
A set method to fix the failure or success of the initialization of the model.
Definition: Model.h:142
gslpp::matrix< gslpp::complex > Rl
Definition: SUSY.h:509
gslpp::vector< double > m_sn2
Definition: SUSY.h:506
bool IsModelInitialized() const
A method to check if the model is initialized.
Definition: Model.h:133
virtual double v() const
The Higgs vacuum expectation value. where is the Fermi constant, measured through muon decays...
virtual bool Init(const std::map< std::string, double > &DPars)
A method to initialize the model parameters.
virtual void setParameter(const std::string name, const double &value)
A method to set the value of a parameter of StandardModel.
double tanb
Definition: SUSY.h:492
virtual bool PreUpdate()
The pre-update method for StandardModel.
double cosb
Definition: SUSY.h:495
gslpp::complex m1
Definition: SUSY.h:491
Definition: QCD.h:732
gslpp::matrix< gslpp::complex > Rd
Definition: SUSY.h:509
bool CalcSup(gslpp::matrix< gslpp::complex > &Ru_i, gslpp::vector< double > &m_su2_i)
Computes the up-type squark spectrum at tree level.
void SortSfermionMasses(gslpp::vector< double > &m_sf2, gslpp::matrix< gslpp::complex > &Rf) const
Particle getQuarks(const quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:869
double mn_Q[3]
Definition: SUSY.h:512
void setModelSUSY()
Definition: Model.h:175
bool CalcNeutralino(gslpp::matrix< gslpp::complex > &N_i, gslpp::vector< double > &mneu_i)
Computes the neutralino spectrum at tree level.
gslpp::matrix< gslpp::complex > Yd
The Yukawa matrix of the down-type quarks.
virtual bool CheckParameters(const std::map< std::string, double > &DPars)
A method to check if all the mandatory parameters for StandardModel have been provided in model initi...
A class for the matching in the MSSM.
Definition: SUSYMatching.h:31
gslpp::vector< double > m_sd2
Definition: SUSY.h:506
double getMGl() const
Gets the gluino mass obtained from FHGetPara().
Definition: SUSY.cpp:278
double abs() const
double mh[4]
Definition: SUSY.h:503
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
double mHptree
Definition: SUSY.h:492
const double & imag() const
virtual bool Update(const std::map< std::string, double > &DPars)
Definition: SUSY.cpp:74
static const int NSUSYvars
Definition: SUSY.h:28
Definition: VCKM.h:13
double mu_Q[3]
Definition: SUSY.h:512
virtual bool CheckParameters(const std::map< std::string, double > &DPars)
Definition: SUSY.cpp:194
gslpp::vector< double > m_su2
Definition: SUSY.h:506
double Q_SUSY
Definition: SUSY.h:492
static const std::string SUSYvars[NSUSYvars]
Definition: SUSY.h:29
virtual bool Init(const std::map< std::string, double > &DPars)
Definition: SUSY.cpp:62
~SUSY()
A SUSY destructor.
Definition: SUSY.cpp:40
bool CalcSneutrino(gslpp::matrix< gslpp::complex > &Rn_i, gslpp::vector< double > &m_sn2_i)
Computes the sneutrino spectrum at tree level.
gslpp::matrix< gslpp::complex > msQhat2
Definition: SUSY.h:499
gslpp::vector< double > mch
Definition: SUSY.h:505
virtual bool setFlag(const std::string name, const bool value)
A method to set a flag of StandardModel.
double me_Q[3]
Definition: SUSY.h:512
gslpp::vector< double > m_sdresum2
Definition: SUSY.h:506
virtual bool PostUpdate()
Definition: SUSY.cpp:90
std::map< std::string, boost::reference_wrapper< const double > > ModelParamMap
Definition: Model.h:200
void updateSUSYParameters()
Updates to new SUSY parameter sets.
lepton
An enum type for leptons.
friend class SUSYSpectrum
Friend classes of SUSY class.
Definition: SUSY.h:34
double v2() const
Definition: SUSY.cpp:273
virtual bool setFlag(const std::string, const bool)
Definition: SUSY.cpp:261
gslpp::complex muH
Definition: SUSY.h:491
virtual void SetTanb(const double tanb)
Definition: SUSY.cpp:204
complex sqrt(const complex &z)