BSMPT 3.0.7
BSMPT - Beyond the Standard Model Phase Transitions : A C++ package for the computation of the EWPT in BSM models
Loading...
Searching...
No Matches
Logger.h
Go to the documentation of this file.
1// Copyright (C) 2020 Philipp Basler, Margarete Mühlleitner and Jonas Müller
2// SPDX-FileCopyrightText: 2021 Philipp Basler, Margarete Mühlleitner and Jonas
3// Müller
4//
5// SPDX-License-Identifier: GPL-3.0-or-later
6
7#pragma once
8
9#include <fstream>
10#include <iostream>
11#include <map>
12#include <vector>
13
17namespace BSMPT
18{
19
20class Logger;
21class parser;
22
23void ShowLoggerHelp();
24void SetLogger(const parser &argparser);
25void SetLogger(const std::vector<std::string> &args);
26
27enum class LoggingLevel
28{
29 None,
30 Default,
31 MinimizerDetailed,
32 MinTracerDetailed,
33 TransitionDetailed,
34 GWDetailed,
35 BounceDetailed,
36 ProgDetailed,
37 EWBGDetailed,
38 Debug,
39 Complete
40};
41
46{
47public:
48 friend Logger;
49 BSMPTLogger(std::ostream &os) : mOstream{os.rdbuf()} {}
50 BSMPTLogger(const BSMPTLogger &) = delete;
51 BSMPTLogger(BSMPTLogger &&) = delete;
52 BSMPTLogger &operator=(const BSMPTLogger &) = delete;
53 BSMPTLogger &operator=(BSMPTLogger &&) = delete;
54
55private:
60 void SetOStream(std::ostream &Ostream);
65 void SetOStream(const std::string &file);
66 template <typename T>
67 void
68 Write(LoggingLevel level, const T &toWrite, const std::string &file, int line)
69 {
70 auto pos = mCurrentSetup.find(level);
71 if (pos != mCurrentSetup.end() and pos->second)
72 {
73 if (not file.empty())
74 {
75 mOstream << "file: " << file << "; ";
76 }
77 if (line >= 0)
78 {
79 mOstream << "Line: " << line << "; ";
80 }
81 mOstream << toWrite << std::endl;
82 }
83 }
84 void SetLevel(const std::map<LoggingLevel, bool> &level);
85 void SetLevel(LoggingLevel level, bool enable);
86 void Disable();
87
88 std::ostream mOstream;
89 std::ofstream mfilestream;
90
91 std::map<LoggingLevel, bool> mCurrentSetup{
92 {LoggingLevel::Default, true},
93 {LoggingLevel::EWBGDetailed, false},
94 {LoggingLevel::ProgDetailed, false},
95 {LoggingLevel::MinimizerDetailed, false},
96 {LoggingLevel::MinTracerDetailed, false},
97 {LoggingLevel::TransitionDetailed, false},
98 {LoggingLevel::BounceDetailed, false},
99 {LoggingLevel::GWDetailed, false},
100 {LoggingLevel::Debug, false}};
101};
102
104{
105public:
106 Logger(const Logger &) = delete;
107 Logger(Logger &&) = delete;
108 Logger &operator=(const Logger &) = delete;
109 Logger &operator=(Logger &&) = delete;
110
111 static void SetLevel(const std::map<LoggingLevel, bool> &Setup)
112 {
113 Instance().SetLevel(Setup);
114 }
115 static void SetLevel(LoggingLevel level, bool enable)
116 {
117 Instance().SetLevel(level, enable);
118 }
119
120 static void SetOStream(std::ostream &Ostream)
121 {
122 Instance().SetOStream(Ostream);
123 }
124 static void SetOStream(const std::string &file)
125 {
126 Instance().SetOStream(file);
127 }
128 template <typename T>
129 static void Write(LoggingLevel level,
130 const T &toWrite,
131 const std::string &file = "",
132 int line = -1)
133 {
134 Instance().Write(level, toWrite, file, line);
135 }
136
137 static bool GetLoggingLevelStatus(LoggingLevel level)
138 {
139 return Instance().mCurrentSetup[level];
140 }
141
142 static void Disable() { Instance().Disable(); }
143
144private:
145 static BSMPTLogger &Instance()
146 {
147 static BSMPTLogger LoggerInstance(std::cout);
148 return LoggerInstance;
149 }
150};
151
152} // namespace BSMPT
The BSMPTLogger class.
Definition Logger.h:46
void SetOStream(std::ostream &Ostream)
SetOStream sets the output of the logger to a certain ostream.
Definition Logger.cpp:118
Definition Logger.h:104
This classes calculates the Bounce action of the potential with a set temperature.
Definition CalculateEtaInterface.h:24