gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-252-gf9a3f78
a Global And Modular Bsm Inference Tool
SpecBit_VectorSingletDM.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  using namespace flexiblesusy;
51 
54  {
55  namespace myPipe = Pipes::get_VectorSingletDM_Z2_spectrum;
56  const SMInputs& sminputs = *myPipe::Dep::SMINPUTS;
57 
58  // Initialise an object to carry the Singlet plus Higgs sector information
60 
61  // quantities needed to fill container spectrum, intermediate calculations
62  double alpha_em = 1.0 / sminputs.alphainv;
63  double C = alpha_em * pi / (sminputs.GF * pow(2,0.5));
64  double sinW2 = 0.5 - pow( 0.25 - C/pow(sminputs.mZ,2) , 0.5);
65  double cosW2 = 0.5 + pow( 0.25 - C/pow(sminputs.mZ,2) , 0.5);
66  double e = pow( 4*pi*( alpha_em ),0.5) ;
67 
68  // Higgs sector
69  double mh = *myPipe::Param.at("mH");
70  vectormodel.HiggsPoleMass = mh;
71 
72  double vev = 1. / sqrt(sqrt(2.)*sminputs.GF);
73  vectormodel.HiggsVEV = vev;
74  //vectormodel.LambdaH = GF*pow(mh,2)/pow(2,0.5) ;
75 
76  // VectorSingletDM_Z2 sector
77  vectormodel.VectorPoleMass = *myPipe::Param.at("mV");
78  vectormodel.VectorLambda = *myPipe::Param.at("lambda_hV");
79 
80  if (myPipe::runOptions->getValueOrDef<bool>(false,"impose_pert_unitarity"))
81  {
82  // Invalidate point if the perturbative unitarity constraint is not satisfied
83  if (vectormodel.VectorLambda > (2*pow(vectormodel.VectorPoleMass,2))/pow(vev,2))
84  {
85  std::ostringstream msg;
86  msg << "Parameter point [mV, lambda_hV] = [" << vectormodel.VectorPoleMass << " GeV, "
87  << vectormodel.VectorLambda << "] does not satisfy the perturbative unitarity constraint.";
88  invalid_point().raise(msg.str());
89  }
90  }
91  else {}
92 
93  // Standard model
94  vectormodel.sinW2 = sinW2;
95 
96  // gauge couplings
97  vectormodel.g1 = sqrt(5/3) * e / sqrt(cosW2);
98  vectormodel.g2 = e / sqrt(sinW2);
99  vectormodel.g3 = pow( 4*pi*( sminputs.alphaS ),0.5) ;
100 
101  // Yukawas
102  double sqrt2v = pow(2.0,0.5)/vev;
103  vectormodel.Yu[0] = sqrt2v * sminputs.mU;
104  vectormodel.Yu[1] = sqrt2v * sminputs.mCmC;
105  vectormodel.Yu[2] = sqrt2v * sminputs.mT;
106  vectormodel.Ye[0] = sqrt2v * sminputs.mE;
107  vectormodel.Ye[1] = sqrt2v * sminputs.mMu;
108  vectormodel.Ye[2] = sqrt2v * sminputs.mTau;
109  vectormodel.Yd[0] = sqrt2v * sminputs.mD;
110  vectormodel.Yd[1] = sqrt2v * sminputs.mS;
111  vectormodel.Yd[2] = sqrt2v * sminputs.mBmB;
112 
113  // Create a SubSpectrum object to wrap the EW sector information
114  Models::VectorSingletDM_Z2SimpleSpec vectorspec(vectormodel);
115 
116  // Retrieve any mass cuts
117  static const Spectrum::mc_info mass_cut = myPipe::runOptions->getValueOrDef<Spectrum::mc_info>(Spectrum::mc_info(), "mass_cut");
118  static const Spectrum::mr_info mass_ratio_cut = myPipe::runOptions->getValueOrDef<Spectrum::mr_info>(Spectrum::mr_info(), "mass_ratio_cut");
119 
120  // We don't supply a LE subspectrum here; an SMSimpleSpec will therefore be automatically created from 'sminputs'
121  result = Spectrum(vectorspec,sminputs,&myPipe::Param,mass_cut,mass_ratio_cut);
122 
123  }
124 
125  // print spectrum out, stripped down copy from MSSM version with variable names changed
126  void fill_map_from_VectorSingletDM_Z2spectrum(std::map<std::string,double>&, const Spectrum&);
127 
128  void get_VectorSingletDM_Z2_spectrum_as_map (std::map<std::string,double>& specmap)
129  {
132  fill_map_from_VectorSingletDM_Z2spectrum(specmap, vectordmspec);
133  }
134 
135  void fill_map_from_VectorSingletDM_Z2spectrum(std::map<std::string,double>& specmap, const Spectrum& vectordmspec)
136  {
138  static const SpectrumContents::VectorSingletDM_Z2 contents;
139  static const std::vector<SpectrumParameter> required_parameters = contents.all_parameters();
140 
141  for(std::vector<SpectrumParameter>::const_iterator it = required_parameters.begin();
142  it != required_parameters.end(); ++it)
143  {
144  const Par::Tags tag = it->tag();
145  const std::string name = it->name();
146  const std::vector<int> shape = it->shape();
147 
149 
150  // Check scalar case
151  if(shape.size()==1 and shape[0]==1)
152  {
153  std::ostringstream label;
154  label << name <<" "<< Par::toString.at(tag);
155  specmap[label.str()] = vectordmspec.get_HE().get(tag,name);
156  }
157  // Check vector case
158  else if(shape.size()==1 and shape[0]>1)
159  {
160  for(int i = 1; i<=shape[0]; ++i) {
161  std::ostringstream label;
162  label << name <<"_"<<i<<" "<< Par::toString.at(tag);
163  specmap[label.str()] = vectordmspec.get_HE().get(tag,name,i);
164  }
165  }
166  // Check matrix case
167  else if(shape.size()==2)
168  {
169  for(int i = 1; i<=shape[0]; ++i) {
170  for(int j = 1; j<=shape[0]; ++j) {
171  std::ostringstream label;
172  label << name <<"_("<<i<<","<<j<<") "<<Par::toString.at(tag);
173  specmap[label.str()] = vectordmspec.get_HE().get(tag,name,i,j);
174  }
175  }
176  }
177  // Deal with all other cases
178  else
179  {
180  // ERROR
181  std::ostringstream errmsg;
182  errmsg << "Error, invalid parameter received while converting VectorSingletDM_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.";
183  errmsg << "Problematic parameter was: "<< tag <<", " << name << ", shape="<< shape;
184  utils_error().forced_throw(LOCAL_INFO,errmsg.str());
185  }
186  }
187 
188  }
189 
190  } // end namespace SpecBit
191 } // 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.
void get_VectorSingletDM_Z2_spectrum_as_map(std::map< std::string, double > &specmap)
Declarations of convenience (i.e.
void get_VectorSingletDM_Z2_spectrum(Spectrum &result)
Get a (simple) Spectrum object wrapper for the VectorSingletDM_Z2 model.
EXPORT_SYMBOLS error & utils_error()
Utility errors.
A simple SubSpectrum wrapper for Standard Model Higgs information.
Simple extension of the SMHiggsSimpleSpec "model object" to include vector DM parameters We could eas...
#define LOCAL_INFO
Definition: local_info.hpp:34
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
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...
Spectrum Spectrum Spectrum Spectrum VectorSingletDM_Z2_spectrum
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
void fill_map_from_VectorSingletDM_Z2spectrum(std::map< std::string, double > &, const Spectrum &)
A simple SubSpectrum wrapper for the VectorSingletDM_Z2 model.
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
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.