SoftSUSY is hosted by Hepforge, IPPP Durham
SOFTSUSY  4.1
nmssmjacobian.h
Go to the documentation of this file.
1 
6 #ifndef NMSSMJACOBIAN_H
7 #define NMSSMJACOBIAN_H
8 
9 #include "linalg.h"
10 
11 #include <utility>
12 
13 namespace softsusy {
14 
15  class NmssmSoftsusy;
16 
58  class NmssmJacobian {
59  public:
60 
61  explicit NmssmJacobian(bool doTop = false);
62  ~NmssmJacobian();
63 
66  bool displayIncludeTopFlag() const { return includeTop; }
67 
70  void setIncludeTopFlag(bool flag) { includeTop = flag; }
71 
74  bool displayUseRunningMassesFlag() const { return useRunningMasses; }
75 
78  void setUseRunningMassesFlag(bool flag) { useRunningMasses = flag; }
79 
82  bool displayUseSugraTrilinearsFlag() const { return useSugraTrilinears; }
83 
86  void setUseSugraTrilinearsFlag(bool flag) { useSugraTrilinears = flag; }
87 
89  void resetError() { hasError = false; }
90 
93  bool displayError() const { return hasError; }
94 
96  void resetWarnings() {
97  failedVevIterationWarning = false;
98  inaccurateHiggsMassWarning = false;
99  }
100 
103  bool displayWarning() const {
104  return failedVevIterationWarning || inaccurateHiggsMassWarning; }
105 
109  return failedVevIterationWarning;
110  }
111 
115  return inaccurateHiggsMassWarning;
116  }
117 
121  return worstCaseHiggsAccuracy;
122  }
123 
127  DoubleMatrix displayRGFlowJacobian() const { return jacRGFlow; }
128 
132  DoubleMatrix displayRGFlowJacobianErrors() const { return jacRGFlowErrors; }
133 
137  DoubleMatrix displayEWSBJacobian() const { return jacEWSB; }
138 
142  DoubleMatrix displayEWSBJacobianErrors() const { return jacEWSBErrors; }
143 
147  DoubleMatrix displayInverseRGFlowJacobian() const { return invJacRGFlow; }
148 
153  return invJacRGFlowErrors;
154  }
155 
159  DoubleMatrix displayInverseEWSBJacobian() const { return invJacEWSB; }
160 
165  return invJacEWSBErrors;
166  }
167 
171  double calcFTJacobian(const NmssmSoftsusy& m);
172 
177  double calcFTJacobian(const NmssmSoftsusy& m, double mx);
178 
182  double calcFTInverseJacobian(const NmssmSoftsusy& m);
183 
188  double calcFTInverseJacobian(const NmssmSoftsusy& m, double mx);
189 
193  double calcFTInverseJacobianLogs(const NmssmSoftsusy& m);
194 
199  double calcFTInverseJacobianLogs(const NmssmSoftsusy& m, double mx);
200 
205  double calcDeltaJ(const NmssmSoftsusy& m);
206 
211  double calcDeltaJ(const NmssmSoftsusy& m, double mx);
212 
216  double calcDeltaJLogs(const NmssmSoftsusy& m);
217 
222  double calcDeltaJLogs(const NmssmSoftsusy& m, double mx);
223 
224  private:
225  enum Parameters { Mzsq, Tanb, Svev, Mtsq, Lambda, Kappa,
226  SMu, M3Sq, XiS, Mh1Sq, Mh2Sq, MsSq, Yt };
227 
228  DoubleMatrix jacRGFlow;
229  DoubleMatrix jacEWSB;
230  DoubleMatrix invJacRGFlow;
231  DoubleMatrix invJacEWSB;
232 
233  DoubleMatrix jacRGFlowErrors;
234  DoubleMatrix jacEWSBErrors;
235  DoubleMatrix invJacRGFlowErrors;
236  DoubleMatrix invJacEWSBErrors;
237 
238  bool includeTop;
239  bool useRunningMasses;
240  bool useSugraTrilinears;
241  bool hasError;
242  bool failedVevIterationWarning;
243  bool inaccurateHiggsMassWarning;
244 
245  double worstCaseHiggsAccuracy;
246 
247  struct EWSBPars {
248  NmssmSoftsusy* model;
249  Parameters independent;
250  Parameters dependent;
251  DoubleVector outputs;
252  bool useRunningMasses;
253  bool useSugraTrilinears;
254  bool failedVevIteration;
255  bool inaccurateHiggsMass;
256  double higgsMassAccuracy;
257 
258  EWSBPars()
259  : model(0), independent(Mzsq), dependent(Lambda),
260  outputs(3), useRunningMasses(false),
261  useSugraTrilinears(false), failedVevIteration(false),
262  inaccurateHiggsMass(false), higgsMassAccuracy(0.)
263  {}
264  };
265 
266  struct RGFlowPars {
267  NmssmSoftsusy* model;
268  Parameters independent;
269  Parameters dependent;
270  double toScale;
271  bool useSugraTrilinears;
272  };
273 
274  static double calcMz(NmssmSoftsusy& model, bool getRunningMass = false);
275  static double calcMt(NmssmSoftsusy& model, bool getRunningMass = false);
276 
277  static double calcRunningParameter(double x, void* parameters);
278  static double calcLogRunningParameter(double x, void* parameters);
279  std::pair<double,double> calcRGDerivative(NmssmSoftsusy& model,
280  Parameters dep, Parameters indep,
281  double toScale) const;
282  std::pair<double,double> calcRGLogDerivative(NmssmSoftsusy& model,
283  Parameters dep, Parameters indep,
284  double toScale) const;
285  double calcRGFlowJacobian(NmssmSoftsusy& model, double startScale,
286  double endScale);
287  double calcRGFlowJacobianLogs(NmssmSoftsusy& model, double startScale,
288  double endScale);
289  static int ewsbOutputErrors(const DoubleVector & guess, void* parameters,
290  DoubleVector & errors);
291  static void fixEWSBOutputs(EWSBPars* pars, int & err);
292  static double calcEWSBParameter(double x, void* parameters);
293  static double calcEWSBOutput(double x, void* parameters);
294  static double calcLogEWSBOutput(double x, void* parameters);
295  std::pair<double,double> calcEWSBOutputDerivative(NmssmSoftsusy& model,
296  Parameters dep,
297  Parameters indep);
298  std::pair<double,double> calcEWSBOutputLogDerivative(NmssmSoftsusy& model,
299  Parameters dep,
300  Parameters indep);
301  std::pair<double,double> calcEWSBParameterDerivative(NmssmSoftsusy& model,
302  Parameters dep,
303  Parameters indep);
304  double calcEWSBJacobian(NmssmSoftsusy& model);
305  double calcInverseEWSBJacobian(NmssmSoftsusy& model);
306  double calcInverseEWSBJacobianLogs(NmssmSoftsusy& model);
307 
308  bool checkDerivativeErrors(DoubleMatrix& derivs, const DoubleMatrix& errors,
309  const std::vector<double>& paramValues) const;
310  };
311 
312 }
313 
314 #endif
global variable declaration
Definition: def.cpp:13
double calcFTInverseJacobian(const NmssmSoftsusy &m)
Calculates the Jacobian transforming observables to parameters.
Definition: nmssmjacobian.cpp:170
Class for calculating Jacobian fine-tuning measure.
Definition: nmssmjacobian.h:58
DoubleVector is of variable length, and contains double precision.
Definition: linalg.h:35
bool displayUseSugraTrilinearsFlag() const
Displays whether SUGRA style trilinears are assumed.
Definition: nmssmjacobian.h:82
Contains all supersymmetric NMSSM parameters, incorporating R_p NMSSM.
Definition: nmssmsoftsusy.h:42
DoubleVector and DoubleMatrix classes of doubles and operations between them, complexified copies als...
bool displayFailedVevIterationWarning() const
Displays whether the VEV iteration failed.
Definition: nmssmjacobian.h:108
void setUseRunningMassesFlag(bool flag)
Sets whether to use running or pole masses in derivatives.
Definition: nmssmjacobian.h:78
DoubleMatrix displayRGFlowJacobianErrors() const
Displays the error in the Jacobian for transforming from high- to low-scale parameters.
Definition: nmssmjacobian.h:132
DoubleMatrix displayInverseRGFlowJacobian() const
Displays the Jacobian for transforming from low- to high-scale parameters.
Definition: nmssmjacobian.h:147
DoubleMatrix displayRGFlowJacobian() const
Displays the Jacobian for transforming from high- to low-scale parameters.
Definition: nmssmjacobian.h:127
bool displayInaccurateHiggsMassWarning() const
Displays whether an inaccurate Higgs mass was encountered.
Definition: nmssmjacobian.h:114
double calcFTJacobian(const NmssmSoftsusy &m)
Calculates the Jacobian transforming parameters to observables.
Definition: nmssmjacobian.cpp:233
DoubleMatrix displayInverseEWSBJacobianErrors() const
Displays the error in the Jacobian for transforming observables to low-scale parameters.
Definition: nmssmjacobian.h:164
double calcDeltaJ(const NmssmSoftsusy &m)
Calculates the fine-tuning using the Jacobian measure.
Definition: nmssmjacobian.cpp:45
Matrix from 1..rows, 1..cols of double values.
Definition: linalg.h:214
double calcFTInverseJacobianLogs(const NmssmSoftsusy &m)
Calculates the Jacobian transforming observables to parameters.
Definition: nmssmjacobian.cpp:201
double displayWorstCaseHiggsAccuracy() const
Returns the worst achieved accuracy for the Higgs masses.
Definition: nmssmjacobian.h:120
void resetError()
Resets the error status to false.
Definition: nmssmjacobian.h:89
void setIncludeTopFlag(bool flag)
Sets whether to include top Yukawa derivatives.
Definition: nmssmjacobian.h:70
bool displayIncludeTopFlag() const
Displays whether the top Yukawa is included in the tuning.
Definition: nmssmjacobian.h:66
bool displayWarning() const
Displays whether a warning was flagged during the calculation.
Definition: nmssmjacobian.h:103
void resetWarnings()
Resets the warning status to false.
Definition: nmssmjacobian.h:96
double calcDeltaJLogs(const NmssmSoftsusy &m)
Calculates the fine-tuning using logarithmic derivatives.
Definition: nmssmjacobian.cpp:108
DoubleMatrix displayEWSBJacobian() const
Displays the Jacobian for transforming low-scale parameters to observables.
Definition: nmssmjacobian.h:137
DoubleMatrix displayInverseRGFlowJacobianErrors() const
Displays the error in the Jacobian for transforming from low- to high-scale parameters.
Definition: nmssmjacobian.h:152
bool displayUseRunningMassesFlag() const
Displays whether running or pole masses are being used.
Definition: nmssmjacobian.h:74
void setUseSugraTrilinearsFlag(bool flag)
Sets whether to assume SUGRA style trilinears.
Definition: nmssmjacobian.h:86
bool displayError() const
Displays whether an error occurred during the calculation.
Definition: nmssmjacobian.h:93
DoubleMatrix displayEWSBJacobianErrors() const
Displays the error in the Jacobian for transforming low-scale parameters to observables.
Definition: nmssmjacobian.h:142
DoubleMatrix displayInverseEWSBJacobian() const
Displays the Jacobian for transforming observables to low-scale parameters.
Definition: nmssmjacobian.h:159