MaCh3  2.4.2
Reference Guide
Core.h
Go to the documentation of this file.
1 #pragma once
2 
14 
15 // C++ includes
16 #include <sstream>
17 #include <fstream>
18 #include <iostream>
19 #include <vector>
20 #include <iomanip>
21 #include <cmath>
22 #include <limits>
23 
24 namespace M3 {
25  // Run low or high memory versions of structs
26  // N.B. for 64 bit systems sizeof(float) == sizeof(double) so not a huge effect
27  #ifdef _LOW_MEMORY_STRUCTS_
29  using float_t = float;
31  using int_t = short;
33  using uint_t = unsigned short;
35  constexpr static const char* float_t_str_repr = "F";
36  #else
37  using float_t = double;
38  using int_t = int;
39  using uint_t = unsigned;
40  constexpr static const char* float_t_str_repr = "D";
41  #endif
42 
44  template <typename T>
45  constexpr T fmaf_t(T x, T y, T z) {
46  #ifdef _LOW_MEMORY_STRUCTS_
47  return std::fmaf(x, y, z);
48  #else
49  return std::fma(x, y, z);
50  #endif
51  }
53  constexpr static const double _BAD_DOUBLE_ = -999.99;
55  constexpr static const int _BAD_INT_ = -999;
56  constexpr static const double _DEFAULT_RETURN_VAL_ = -999999.123456;
57 
59  constexpr static const double Unity_D = 1.;
60  constexpr static const float Unity_F = 1.;
61  #ifdef _LOW_MEMORY_STRUCTS_
62  constexpr static const float_t Unity = Unity_F;
63  #else
64  constexpr static const float_t Unity = Unity_D;
65  #endif
66  constexpr static const double Zero_D = 0.;
67  constexpr static const float Zero_F = 0.;
68  #ifdef _LOW_MEMORY_STRUCTS_
69  constexpr static const float_t Zero = Zero_F;
70  #else
71  constexpr static const float_t Zero = Zero_D;
72  #endif
73 
75  constexpr static const double KinematicLowBound = std::numeric_limits<double>::lowest();
77  constexpr static const double KinematicUpBound = std::numeric_limits<double>::max();
78 
80  constexpr static const double _LARGE_LOGL_ = 1234567890.0;
81 
83  constexpr static const double _LOW_MC_BOUND_ = .00001;
84 
86  constexpr static const double DefSplineKnotUpBound = 9999;
88  constexpr static const double DefSplineKnotLowBound = -9999;
89 
91  constexpr static const int UnderOverFlowBin = -1;
92 }
93 
95 #ifndef DEBUG
96 #define _noexcept_ noexcept
97 #else
98 #define _noexcept_
99 #endif
100 
102 #ifndef DEBUG
105  #if defined(__GNUC__)
106  #define _restrict_ __restrict__
107  #else
108  #define _restrict_
109  #endif
110 #else
111  #define _restrict_
112 #endif
113 
114 
116 #define _TH2PolyOverflowBins_ 9
117 
118 #ifdef MULTITHREAD
119 #include "omp.h"
120 #endif
121 
126 #define _MaCh3_Safe_Include_Start_ \
127 _Pragma("GCC diagnostic push") \
128 _Pragma("GCC diagnostic ignored \"-Wuseless-cast\"") \
129 _Pragma("GCC diagnostic ignored \"-Wfloat-conversion\"") \
130 _Pragma("GCC diagnostic ignored \"-Wold-style-cast\"") \
131 _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"") \
132 _Pragma("GCC diagnostic ignored \"-Wswitch-enum\"") \
133 _Pragma("GCC diagnostic ignored \"-Wconversion\"") \
134 _Pragma("GCC diagnostic ignored \"-Wshadow\"") \
135 _Pragma("GCC diagnostic ignored \"-Wsuggest-override\"")
136 #if defined(__GNUC__) && __GNUC__ >= 13
137  _Pragma("GCC diagnostic ignored \"-Wdangling-reference\"")
138 #endif
140 #define _MaCh3_Safe_Include_End_ \
141 _Pragma("GCC diagnostic pop")
142 
143 // clang and IntelLLVM need slightly different diagnostics
144 #if defined(__clang__) || defined(__INTEL_LLVM_COMPILER)
145  #undef _MaCh3_Safe_Include_Start_
146  #define _MaCh3_Safe_Include_Start_ \
147  _Pragma("clang diagnostic push") \
148  _Pragma("clang diagnostic ignored \"-Wfloat-conversion\"") \
149  _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \
150  _Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"") \
151  _Pragma("clang diagnostic ignored \"-Wswitch-enum\"") \
152  _Pragma("clang diagnostic ignored \"-Wconversion\"") \
153  _Pragma("clang diagnostic ignored \"-Wshadow\"") \
154  _Pragma("clang diagnostic ignored \"-Wdeprecated-literal-operator\"") \
155  _Pragma("clang diagnostic ignored \"-Wsuggest-override\"")
156  #undef _MaCh3_Safe_Include_End_
157  #define _MaCh3_Safe_Include_End_ \
158  _Pragma("clang diagnostic pop")
159 #endif
Main namespace for MaCh3 software.
unsigned uint_t
Definition: Core.h:39
constexpr static const double DefSplineKnotUpBound
Default value for spline knot capping, default mean not capping is being applied.
Definition: Core.h:86
constexpr static const double _LARGE_LOGL_
Large Likelihood is used it parameter go out of physical boundary, this indicates in MCMC that such s...
Definition: Core.h:80
double float_t
Definition: Core.h:37
constexpr static const double _BAD_DOUBLE_
Default value used for double initialisation.
Definition: Core.h:53
constexpr static const double Zero_D
Definition: Core.h:66
constexpr static const double DefSplineKnotLowBound
Default value for spline knot capping, default mean not capping is being applied.
Definition: Core.h:88
constexpr static const float Unity_F
Definition: Core.h:60
constexpr static const double KinematicLowBound
When parameter has no bound this serves as it. Lowest possible value the system.
Definition: Core.h:75
constexpr static const char * float_t_str_repr
Definition: Core.h:40
constexpr static const double KinematicUpBound
When parameter has no bound this serves as it. Highest possible value the system.
Definition: Core.h:77
constexpr static const float_t Unity
Definition: Core.h:64
constexpr static const float_t Zero
Definition: Core.h:71
constexpr static const int UnderOverFlowBin
Mark bin which is overflow or underflow in MaCh3 binning.
Definition: Core.h:91
constexpr static const int _BAD_INT_
Default value used for int initialisation.
Definition: Core.h:55
constexpr static const float Zero_F
Definition: Core.h:67
constexpr T fmaf_t(T x, T y, T z)
Function template for fused multiply-add.
Definition: Core.h:45
constexpr static const double _LOW_MC_BOUND_
MC prediction lower bound in bin to identify problematic binning definitions and handle LogL calculat...
Definition: Core.h:83
int int_t
Definition: Core.h:38
constexpr static const double _DEFAULT_RETURN_VAL_
Definition: Core.h:56
constexpr static const double Unity_D
Some commonly used variables to which we set pointers to.
Definition: Core.h:59