flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
slha_io.hpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of FlexibleSUSY.
3//
4// FlexibleSUSY is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published
6// by the Free Software Foundation, either version 3 of the License,
7// or (at your option) any later version.
8//
9// FlexibleSUSY is distributed in the hope that it will be useful, but
10// WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with FlexibleSUSY. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
19#ifndef SLHA_IO_H
20#define SLHA_IO_H
21
22#include "slha_format.hpp"
23#include "decays/decay.hpp"
24#include "unitarity.hpp"
25
26#include <complex>
27#include <functional>
28#include <iosfwd>
29#include <memory>
30#include <string>
31#include <vector>
32
33#include <Eigen/Core>
34
35namespace softsusy {
36 class QedQcd;
37} // namespace softsusy
38
39namespace SLHAea {
40 class Coll;
41 class Line;
42} // namespace SLHAea
43
44namespace flexiblesusy {
45
46 class Spectrum_generator_settings;
47 class LToLConversion_settings;
48 class FlexibleDecay_settings;
49 class Physical_input;
50 struct PMNS_parameters;
51
96class SLHA_io {
97public:
98 using Tuple_processor = std::function<void(int, double)>;
99 enum Position { front, back };
100 struct Modsel {
104 void clear() { *this = Modsel(); }
105 };
106
108 double lambdaW{0.}, aCkm{0.}, rhobar{0.}, etabar{0.};
109 void clear() { *this = CKM_wolfenstein(); }
110 };
111
112 SLHA_io();
113 SLHA_io(const SLHA_io&);
114 SLHA_io(SLHA_io&&) noexcept;
116
117 SLHA_io& operator=(const SLHA_io&);
118 SLHA_io& operator=(SLHA_io&&) noexcept;
119
120 void clear();
121
122 // reading functions
123 bool block_exists(const std::string&) const;
124 void fill(softsusy::QedQcd&) const;
125 void fill(FlexibleDecay_settings&) const;
127 void fill(LToLConversion_settings&) const;
128 void fill(Physical_input&) const;
129 const Modsel& get_modsel() const { return modsel; }
130 const SLHAea::Coll& get_data() const;
131 void read_from_file(const std::string&);
132 void read_from_source(const std::string&);
133 void read_from_stream(std::istream&);
134 double read_block(const std::string&, const Tuple_processor&) const;
135 template <class Derived>
136 double read_block(const std::string&, Eigen::PlainObjectBase<Derived>&) const;
137 double read_block(const std::string&, double&) const;
138 double read_entry(const std::string&, int) const;
139 double read_scale(const std::string&) const;
140
141 // writing functions
142 void set_data(const SLHAea::Coll&);
143 void set_block(const std::ostringstream&, Position position = back);
144 void set_block(const std::string&, Position position = back);
145 void set_blocks(const std::vector<std::string>&, Position position = back);
146 void set_block(const std::string&, double, const std::string&, double scale = 0.);
147 template <class Derived>
148 void set_block(const std::string&, const Eigen::MatrixBase<Derived>&, const std::string&, double scale = 0.);
149 template <class Derived>
150 void set_block_imag(const std::string&, const Eigen::MatrixBase<Derived>&, const std::string&, double scale = 0.);
151 void set_hs_or_lilith(std::string const& /* block name */, std::size_t /* n.d.o.f. */, double /* chi2 */, double /* min chi2 in the SM */, double /* SM mh for which SM chi2 was calculated */, double /* p-value */);
152 void set_higgsbounds(std::vector<std::tuple<int, double, double, std::string>> const&);
153 void set_effectivecouplings_block(const std::vector<std::tuple<int, int, int, double, std::string>>&);
156 void set_modsel(const Modsel&);
161 void set_sminputs(const softsusy::QedQcd&);
163 void write_to_file(const std::string&) const;
164 void write_to_stream() const;
165 void write_to_stream(std::ostream&) const;
166
167private:
168 std::unique_ptr<SLHAea::Coll> data;
170
171 static std::string block_head(const std::string& name, double scale);
172 static bool read_scale(const SLHAea::Line& line, double& scale);
173
174 void read_modsel();
175 double read_matrix(const std::string&, double*, int, int) const;
176 double read_matrix(const std::string&, std::complex<double>*, int, int) const;
177 double read_vector(const std::string&, double*, int) const;
178 double read_vector(const std::string&, std::complex<double>*, int) const;
179
180 void set_vector(const std::string&, const double*, const std::string&, double, int);
181 void set_vector(const std::string&, const std::complex<double>*, const std::string&, double, int);
182 void set_matrix(const std::string&, const double*, const std::string&, double, int, int);
183 void set_matrix(const std::string&, const std::complex<double>*, const std::string&, double, int, int);
184
185 void set_vector_imag(const std::string&, const double*, const std::string&, double, int);
186 void set_vector_imag(const std::string&, const std::complex<double>*, const std::string&, double, int);
187 void set_matrix_imag(const std::string&, const double*, const std::string&, double, int, int);
188 void set_matrix_imag(const std::string&, const std::complex<double>*, const std::string&, double, int, int);
189};
190
199template <class Derived>
200double SLHA_io::read_block(const std::string& block_name, Eigen::PlainObjectBase<Derived>& dense) const
201{
202 return dense.cols() == 1
203 ? read_vector(block_name, dense.data(), dense.rows())
204 : read_matrix(block_name, dense.data(), dense.rows(), dense.cols());
205}
206
215template<class Derived>
216void SLHA_io::set_block(const std::string& name,
217 const Eigen::MatrixBase<Derived>& dense,
218 const std::string& symbol, double scale)
219{
220 dense.cols() == 1
221 ? set_vector(name, dense.eval().data(), symbol, scale, dense.rows())
222 : set_matrix(name, dense.eval().data(), symbol, scale, dense.rows(), dense.cols());
223}
224
233template<class Derived>
234void SLHA_io::set_block_imag(const std::string& name,
235 const Eigen::MatrixBase<Derived>& dense,
236 const std::string& symbol, double scale)
237{
238 dense.cols() == 1
239 ? set_vector_imag(name, dense.eval().data(), symbol, scale, dense.rows())
240 : set_matrix_imag(name, dense.eval().data(), symbol, scale, dense.rows(), dense.cols());
241}
242
243} // namespace flexiblesusy
244
245#endif
stores physical input parameters
Handles reading and writing of SLHA files.
Definition slha_io.hpp:96
const Modsel & get_modsel() const
Definition slha_io.hpp:129
void set_vector_imag(const std::string &, const double *, const std::string &, double, int)
Definition slha_io.cpp:1005
double read_vector(const std::string &, double *, int) const
Definition slha_io.cpp:957
void set_modsel(const Modsel &)
Definition slha_io.cpp:829
void set_blocks(const std::vector< std::string > &, Position position=back)
Definition slha_io.cpp:807
void set_matrix(const std::string &, const double *, const std::string &, double, int, int)
Definition slha_io.cpp:993
void set_FlexibleDecay_settings(const FlexibleDecay_settings &)
Definition slha_io.cpp:884
void set_higgsbounds(std::vector< std::tuple< int, double, double, std::string > > const &)
Definition slha_io.cpp:1042
void set_vector(const std::string &, const double *, const std::string &, double, int)
Definition slha_io.cpp:981
void set_effectivecouplings_block(const std::vector< std::tuple< int, int, int, double, std::string > > &)
Definition slha_io.cpp:1055
double read_block(const std::string &, const Tuple_processor &) const
Definition slha_io.cpp:687
void set_settings(const Spectrum_generator_settings &)
Definition slha_io.cpp:858
void set_imnormalized_effectivecouplings_block(EffectiveCoupling_list const &)
Definition slha_io.cpp:1100
void read_from_file(const std::string &)
opens SLHA input file and reads the content
Definition slha_io.cpp:534
bool block_exists(const std::string &) const
Definition slha_io.cpp:508
double read_entry(const std::string &, int) const
Definition slha_io.cpp:739
void read_from_stream(std::istream &)
clears stored data and reads SLHA data from a stream
Definition slha_io.cpp:548
void set_unitarity_infinite_s(Spectrum_generator_settings const &, UnitarityInfiniteS const &)
Definition slha_io.cpp:923
std::unique_ptr< SLHAea::Coll > data
SHLA data.
Definition slha_io.hpp:168
void read_from_source(const std::string &)
reads from source
Definition slha_io.cpp:521
void set_block(const std::ostringstream &, Position position=back)
Definition slha_io.cpp:788
void set_LToLConversion_settings(const LToLConversion_settings &)
Definition slha_io.cpp:871
void set_matrix_imag(const std::string &, const double *, const std::string &, double, int, int)
Definition slha_io.cpp:1017
static std::string block_head(const std::string &name, double scale)
Definition slha_io.cpp:493
double read_scale(const std::string &) const
Definition slha_io.cpp:771
std::function< void(int, double)> Tuple_processor
Definition slha_io.hpp:98
void set_hs_or_lilith(std::string const &, std::size_t, double, double, double, double)
Definition slha_io.cpp:1028
void set_sminputs(const softsusy::QedQcd &)
Definition slha_io.cpp:897
void set_normalized_effectivecouplings_block(EffectiveCoupling_list const &)
Definition slha_io.cpp:1070
const SLHAea::Coll & get_data() const
Definition slha_io.cpp:481
Modsel modsel
data from block MODSEL
Definition slha_io.hpp:169
void set_block_imag(const std::string &, const Eigen::MatrixBase< Derived > &, const std::string &, double scale=0.)
Definition slha_io.hpp:234
void fill(softsusy::QedQcd &) const
Definition slha_io.cpp:578
double read_matrix(const std::string &, double *, int, int) const
Definition slha_io.cpp:969
void set_data(const SLHAea::Coll &)
Definition slha_io.cpp:487
void write_to_file(const std::string &) const
Definition slha_io.cpp:935
void write_to_stream() const
Definition slha_io.cpp:951
void set_physical_input(const Physical_input &)
Definition slha_io.cpp:843
Quark and lepton masses and gauge couplings in QEDxQCD effective theory.
Definition lowe.h:64
Comment if you want default softsusy behaviour.
Definition lowe.cpp:37
bool quark_flavour_violated
MODSEL[6].
Definition slha_io.hpp:101
bool lepton_flavour_violated
MODSEL[6].
Definition slha_io.hpp:102
double parameter_output_scale
MODSEL[12].
Definition slha_io.hpp:103