gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-252-gf9a3f78
a Global And Modular Bsm Inference Tool
SpecBit_DiracSingletDM.cpp
Go to the documentation of this file.
1 // GAMBIT: Global and Modular BSM Inference Tool
2 // *********************************************
25 
26 #include <string>
27 #include <sstream>
28 
30 
34 
40 
41 // Switch for debug mode
42 //#define SPECBIT_DEBUG
43 
44 namespace Gambit
45 {
46 
47  namespace SpecBit
48  {
49  using namespace LogTags;
50 
53  {
54  namespace myPipe = Pipes::get_DiracSingletDM_Z2_spectrum;
55  const SMInputs& sminputs = *myPipe::Dep::SMINPUTS;
56 
57  // Initialise an object to carry the Dirac plus Higgs sector information
59 
60  // quantities needed to fill container spectrum, intermediate calculations
61  double alpha_em = 1.0 / sminputs.alphainv;
62  double C = alpha_em * pi / (sminputs.GF * pow(2,0.5));
63  double sinW2 = 0.5 - pow( 0.25 - C/pow(sminputs.mZ,2) , 0.5);
64  double cosW2 = 0.5 + pow( 0.25 - C/pow(sminputs.mZ,2) , 0.5);
65  double e = pow( 4*pi*( alpha_em ),0.5) ;
66 
67  // Higgs sector
68  double mh = *myPipe::Param.at("mH");
69  diracmodel.HiggsPoleMass = mh;
70 
71  double vev = 1. / sqrt(sqrt(2.)*sminputs.GF);
72  diracmodel.HiggsVEV = vev;
73  // diracmodel.LambdaH = GF*pow(mh,2)/pow(2,0.5) ;
74 
75  // DiracSingletDM_Z2 sector
76  diracmodel.DiracPoleMass = *myPipe::Param.at("mF");
77  diracmodel.DiracLambda = *myPipe::Param.at("lF");
78  diracmodel.DiracXi = *myPipe::Param.at("xi");
79 
80  // Invalidate point if the EFT validity constraint is not satisfied
81  // See https://arxiv.org/abs/1512.06458v4 for more details
82  if (myPipe::runOptions->getValueOrDef<bool>(false,"impose_EFT_validity"))
83  {
84  // Different EFT validity constraints for different model parametrisations.
85  if (myPipe::ModelInUse("DiracSingletDM_Z2_sps"))
86  {
87  // Invadlidate point if the EFT validity constraint is not satisfied,
88  // for each coupling independently.
89  double gs = diracmodel.DiracLambda * std::cos(diracmodel.DiracXi);
90  double gp = diracmodel.DiracLambda * std::sin(diracmodel.DiracXi);
91 
92  if (myPipe::runOptions->getValueOrDef<bool>(false,"impose_EFT_validity"))
93  {
94  if (gs >= (4*pi)/(2*diracmodel.DiracPoleMass))
95  {
96  std::ostringstream msg;
97  msg << "Parameter point [mF, lF_s] = [" << diracmodel.DiracPoleMass << " GeV, "
98  << gs << "/GeV] does not satisfy the EFT validity constraint.";
99  invalid_point().raise(msg.str());
100  }
101  if (gp >= (4*pi)/(2*diracmodel.DiracPoleMass))
102  {
103  std::ostringstream msg;
104  msg << "Parameter point [mF, lF_ps] = [" << diracmodel.DiracPoleMass << " GeV, "
105  << gp << "/GeV] does not satisfy the EFT validity constraint.";
106  invalid_point().raise(msg.str());
107  }
108  }
109  }
110  else
111  {
112  // Parametrisation with lambda/Lambda, xi
113  if (diracmodel.DiracLambda >= (4*pi)/(2*diracmodel.DiracPoleMass))
114  {
115  std::ostringstream msg;
116  msg << "Parameter point [mF, lF] = [" << diracmodel.DiracPoleMass << " GeV, "
117  << diracmodel.DiracLambda << "/GeV] does not satisfy the EFT validity constraint.";
118  invalid_point().raise(msg.str());
119  }
120  }
121  }
122 
123  // Standard model
124  diracmodel.sinW2 = sinW2;
125 
126  // gauge couplings
127  diracmodel.g1 = sqrt(5/3) * e / sqrt(cosW2);
128  diracmodel.g2 = e / sqrt(sinW2);
129  diracmodel.g3 = pow( 4*pi*( sminputs.alphaS ),0.5) ;
130 
131  // Yukawas
132  double sqrt2v = pow(2.0,0.5)/vev;
133  diracmodel.Yu[0] = sqrt2v * sminputs.mU;
134  diracmodel.Yu[1] = sqrt2v * sminputs.mCmC;
135  diracmodel.Yu[2] = sqrt2v * sminputs.mT;
136  diracmodel.Ye[0] = sqrt2v * sminputs.mE;
137  diracmodel.Ye[1] = sqrt2v * sminputs.mMu;
138  diracmodel.Ye[2] = sqrt2v * sminputs.mTau;
139  diracmodel.Yd[0] = sqrt2v * sminputs.mD;
140  diracmodel.Yd[1] = sqrt2v * sminputs.mS;
141  diracmodel.Yd[2] = sqrt2v * sminputs.mBmB;
142 
143  // Create a SubSpectrum object to wrap the EW sector information
144  Models::DiracSingletDM_Z2SimpleSpec diracspec(diracmodel);
145 
146  // Retrieve any mass cuts
147  static const Spectrum::mc_info mass_cut = myPipe::runOptions->getValueOrDef<Spectrum::mc_info>(Spectrum::mc_info(), "mass_cut");
148  static const Spectrum::mr_info mass_ratio_cut = myPipe::runOptions->getValueOrDef<Spectrum::mr_info>(Spectrum::mr_info(), "mass_ratio_cut");
149 
150  // We don't supply a LE subspectrum here; an SMSimpleSpec will therefore be automatically created from 'sminputs'
151  result = Spectrum(diracspec,sminputs,&myPipe::Param,mass_cut,mass_ratio_cut);
152 
153  }
154 
155  // print spectrum out, stripped down copy from MSSM version with variable names changed
156  void fill_map_from_DiracSingletDM_Z2spectrum(std::map<std::string,double>&, const Spectrum&);
157 
158  void get_DiracSingletDM_Z2_spectrum_as_map (std::map<std::string,double>& specmap)
159  {
161  const Spectrum& diracdmspec(*myPipe::Dep::DiracSingletDM_Z2_spectrum);
162  fill_map_from_DiracSingletDM_Z2spectrum(specmap, diracdmspec);
163  }
164 
165  void fill_map_from_DiracSingletDM_Z2spectrum(std::map<std::string,double>& specmap, const Spectrum& diracdmspec)
166  {
168  static const SpectrumContents::DiracSingletDM_Z2 contents;
169  static const std::vector<SpectrumParameter> required_parameters = contents.all_parameters();
170 
171  for(std::vector<SpectrumParameter>::const_iterator it = required_parameters.begin();
172  it != required_parameters.end(); ++it)
173  {
174  const Par::Tags tag = it->tag();
175  const std::string name = it->name();
176  const std::vector<int> shape = it->shape();
177 
179 
180  // Check scalar case
181  if(shape.size()==1 and shape[0]==1)
182  {
183  std::ostringstream label;
184  label << name <<" "<< Par::toString.at(tag);
185  specmap[label.str()] = diracdmspec.get_HE().get(tag,name);
186  }
187  // Check vector case
188  else if(shape.size()==1 and shape[0]>1)
189  {
190  for(int i = 1; i<=shape[0]; ++i) {
191  std::ostringstream label;
192  label << name <<"_"<<i<<" "<< Par::toString.at(tag);
193  specmap[label.str()] = diracdmspec.get_HE().get(tag,name,i);
194  }
195  }
196  // Check matrix case
197  else if(shape.size()==2)
198  {
199  for(int i = 1; i<=shape[0]; ++i) {
200  for(int j = 1; j<=shape[0]; ++j) {
201  std::ostringstream label;
202  label << name <<"_("<<i<<","<<j<<") "<<Par::toString.at(tag);
203  specmap[label.str()] = diracdmspec.get_HE().get(tag,name,i,j);
204  }
205  }
206  }
207  // Deal with all other cases
208  else
209  {
210  // ERROR
211  std::ostringstream errmsg;
212  errmsg << "Error, invalid parameter received while converting DiracSingletDM_Z2spectrum to map of strings! This should no be possible if the spectrum content verification routines were working correctly; they must be buggy, please report this.";
213  errmsg << "Problematic parameter was: "<< tag <<", " << name << ", shape="<< shape;
214  utils_error().forced_throw(LOCAL_INFO,errmsg.str());
215  }
216  }
217 
218  }
219 
220  } // end namespace SpecBit
221 } // end namespace Gambit
Define overloadings of the stream operator for various containers.
This class is used to deliver both information defined in the Standard Model (or potentially just QED...
Rollcall header for module SpecBit.
General small utility macros.
Declarations of convenience (i.e.
EXPORT_SYMBOLS error & utils_error()
Utility errors.
A simple SubSpectrum wrapper for Standard Model Higgs information.
#define LOCAL_INFO
Definition: local_info.hpp:34
void fill_map_from_DiracSingletDM_Z2spectrum(std::map< std::string, double > &, const Spectrum &)
void get_DiracSingletDM_Z2_spectrum_as_map(std::map< std::string, double > &specmap)
virtual void raise(const std::string &)
Raise the exception, i.e. throw it.
Definition: exceptions.cpp:422
virtual double get(const Par::Tags, const str &, const SpecOverrideOptions=use_overrides, const SafeBool check_antiparticle=SafeBool(true)) const =0
const double pi
void get_DiracSingletDM_Z2_spectrum(Spectrum &result)
Get a (simple) Spectrum object wrapper for the DiracSingletDM_Z2 model.
Header file that includes all GAMBIT headers required for a module source file.
Spectrum Spectrum
This class is used to wrap the QedQcd object used by SoftSUSY and FlexibleSUSY in a Gambit SubSpectru...
Simple extension of the SMHiggsSimpleSpec "model object" to include Dirac DM parameters We could easi...
double pow(const double &a)
Outputs a^i.
std::vector< YAML::sdd > mc_info
Typedefs for making it easier to manipulate mass cut and mass ratio cut info.
Definition: spectrum.hpp:119
Spectrum Spectrum Spectrum Spectrum Spectrum Spectrum mh
invalid_point_exception & invalid_point()
Invalid point exceptions.
Spectrum Spectrum Spectrum Spectrum Spectrum Spectrum Spectrum Spectrum SMINPUTS
std::vector< YAML::ssdd > mr_info
Definition: spectrum.hpp:120
TODO: see if we can use this one:
Definition: Analysis.hpp:33
A simple SubSpectrum wrapper for the DiracSingletDM_Z2 model.
SubSpectrum & get_HE()
Definition: spectrum.cpp:225
"Standard Model" (low-energy) plus high-energy model container class
Definition: spectrum.hpp:110
Container class for Standard Model input information (defined as in SLHA2)
Definition: sminputs.hpp:29
std::vector< SpectrumParameter > all_parameters() const
Function to retreive all parameters.