gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-252-gf9a3f78
a Global And Modular Bsm Inference Tool
SpecBit.cpp
Go to the documentation of this file.
1 // GAMBIT: Global and Modular BSM Inference Tool
2 // *********************************************
19 
20 #include <string>
21 #include <sstream>
22 
25 
26 // QedQcd header from SoftSUSY (via FlexibleSUSY)
27 #include "flexiblesusy/src/lowe.h"
28 
29 namespace Gambit
30 {
31 
32  namespace SpecBit
33  {
34  using namespace LogTags;
35 
36  // To check if a model is currently being scanned:
37  // bool Pipes::<fname>::ModelInUse(str model_name)
38 
39 
41  // =======================================================================
42  // These are not known to Gambit, but they do basically all the real work.
43  // The Gambit module functions merely wrap the functions here and hook
44  // them up to their dependencies, and input parameters.
45 
47  void setup_QedQcd(softsusy::QedQcd& oneset /*output*/, const SMInputs& sminputs /*input*/)
48  {
49  // Set pole masses (to be treated specially)
50  oneset.setPoleMt(sminputs.mT);
51  //oneset.setPoleMb(...);
52  oneset.setPoleMtau(sminputs.mTau);
53  oneset.setMbMb(sminputs.mBmB);
55  oneset.setMass(softsusy::mDown, sminputs.mD);
56  oneset.setMass(softsusy::mUp, sminputs.mU);
57  oneset.setMass(softsusy::mStrange, sminputs.mS);
58  oneset.setMass(softsusy::mCharm, sminputs.mCmC);
60  oneset.setAlpha(softsusy::ALPHA, 1./sminputs.alphainv);
61  oneset.setAlpha(softsusy::ALPHAS, sminputs.alphaS);
65  oneset.setMass(softsusy::mElectron, sminputs.mE);
66  oneset.setMass(softsusy::mMuon, sminputs.mMu);
67  oneset.setPoleMZ(sminputs.mZ);
68  }
69 
71 
72 
74  // =======================================================================
75  // These are wrapped up in Gambit functor objects according to the
76  // instructions in the rollcall header
77 
79  // Effectively just changes these model parameters into a more convenient form.
80  // But also opens up the possibility of rebuilding this struct from some other
81  // parameterisation.
82  void get_SMINPUTS(SMInputs &result)
83  {
84  namespace myPipe = Pipes::get_SMINPUTS;
85  SMInputs sminputs;
86 
87  // Get values from Params pipe
88  // (as defined in SLHA2)
89  if(myPipe::ModelInUse("StandardModel_SLHA2"))
90  {
91  sminputs.alphainv = *myPipe::Param["alphainv"];
92  sminputs.GF = *myPipe::Param["GF" ];
93  sminputs.alphaS = *myPipe::Param["alphaS" ];
94 
95  sminputs.mZ = *myPipe::Param["mZ" ];
96 
97  sminputs.mE = *myPipe::Param["mE" ];
98  sminputs.mMu = *myPipe::Param["mMu" ];
99  sminputs.mTau = *myPipe::Param["mTau" ];
100 
101  sminputs.mNu1 = *myPipe::Param["mNu1" ];
102  sminputs.mNu2 = *myPipe::Param["mNu2" ];
103  sminputs.mNu3 = *myPipe::Param["mNu3" ];
104 
105  sminputs.mD = *myPipe::Param["mD" ];
106  sminputs.mU = *myPipe::Param["mU" ];
107  sminputs.mS = *myPipe::Param["mS" ];
108  sminputs.mCmC = *myPipe::Param["mCmC" ];
109  sminputs.mBmB = *myPipe::Param["mBmB" ];
110  sminputs.mT = *myPipe::Param["mT" ];
111 
112  sminputs.mNu1 = *myPipe::Param["mNu1" ];
113  sminputs.mNu2 = *myPipe::Param["mNu2" ];
114  sminputs.mNu3 = *myPipe::Param["mNu3" ];
115 
116  // CKM
117  sminputs.CKM.lambda = *myPipe::Param["CKM_lambda" ];
118  sminputs.CKM.A = *myPipe::Param["CKM_A" ];
119  sminputs.CKM.rhobar = *myPipe::Param["CKM_rhobar" ];
120  sminputs.CKM.etabar = *myPipe::Param["CKM_etabar" ];
121 
122  // PMNS
123  sminputs.PMNS.theta12 = *myPipe::Param["theta12"];
124  sminputs.PMNS.theta23 = *myPipe::Param["theta23"];
125  sminputs.PMNS.theta13 = *myPipe::Param["theta13"];
126  sminputs.PMNS.delta13 = *myPipe::Param["delta13"];
127  sminputs.PMNS.alpha1 = *myPipe::Param["alpha1"];
128  sminputs.PMNS.alpha2 = *myPipe::Param["alpha2"];
129 
130  // W mass. Stick with the observed value (set in the default constructor) unless instructed otherwise.
131  if (myPipe::runOptions->getValueOrDef<bool>(false,"enforce_tree_level_MW"))
132  {
133  // Calculate MW from alpha, mZ and G_F, assuming the tree-level relation.
134  const double pionroot2 = pi * pow(2,-0.5);
135  double cosW2 = 0.5 + pow(0.25 - pionroot2 / (sminputs.alphainv * sminputs.GF * pow(sminputs.mZ,2.0)), 0.5);
136  sminputs.mW = sminputs.mZ * pow(cosW2,0.5);
137  }
138 
139  }
140  else
141  {
142  std::ostringstream errmsg;
143  errmsg << "Error mapping Standard Model parameters to SMINPUTS capabilities!";
144  errmsg << "Perhaps you have added a new model to the ALLOWED_MODELS of this ";
145  errmsg << "module function but have not added a corresponding case in the ";
146  errmsg << "function source (here)." << std::endl;
147  SpecBit_error().raise(LOCAL_INFO,errmsg.str());
148  }
149  // Return filled struct
150  result = sminputs;
151  }
152 
154 
155  } // end namespace SpecBit
156 } // end namespace Gambit
157 
Rollcall header for module SpecBit.
#define LOCAL_INFO
Definition: local_info.hpp:34
void get_SMINPUTS(SMInputs &result)
Gambit module functions.
Definition: SpecBit.cpp:82
void setup_QedQcd(softsusy::QedQcd &oneset, const SMInputs &sminputs)
Non-Gambit helper functions.
Definition: SpecBit.cpp:47
const double pi
Header file that includes all GAMBIT headers required for a module source file.
double pow(const double &a)
Outputs a^i.
TODO: see if we can use this one:
Definition: Analysis.hpp:33
Container class for Standard Model input information (defined as in SLHA2)
Definition: sminputs.hpp:29