Debug.hh
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <string>
7 #include <vector>
8 #include <sstream>
9 #include <iomanip>
10 #include <iostream>
11 #include <boost/units/systems/si/io.hpp>
12 
13 namespace boca
14 {
15 
16 class Jet;
17 class Particle;
18 
26 std::string NameSpaceName(std::string const& pretty_function);
27 
28 std::string ClassName(std::string const& pretty_function);
29 
30 std::string FunctionName(std::string const& pretty_function);
31 
32 std::string FileName(std::string const& file);
33 
34 template<typename Value>
35 std::string ApplyIoFlags(Value const& message) {
36  std::stringstream stream;
37  stream << std::boolalpha << boost::units::engineering_prefix << message;
38  auto string = stream.str();
39  if (!string.empty()) string.erase(std::remove_if(string.end() - 1, string.end(), [](char character) {
40  return character == '_';
41  }), string.end()); // remove trailing underscore
42  auto dot = string.rfind('.');
43  return string;
44  return (dot == std::string::npos) ? string : string.substr(dot,string.length()); // remove potential class
45 }
46 
47 template<typename Value>
48 std::string Stream(Value const& message, int width = 20, bool right = false)
49 {
50  std::stringstream stream;
51  stream << (right ? std::right : std::left);
52  stream << std::setw(width) << std::setfill(' ') << ApplyIoFlags(message);
53  return stream.str();
54 }
55 
56 template<typename Value>
57 std::string Stream2(std::string const& variable, Value const& value)
58 {
59  return Stream(variable) + Stream(value);
60 }
61 
62 void Log(std::string const& file, int line, std::string const& name_space, std::string const& class_name, std::string const& function, bool final = true);
63 
64 template<typename Value>
65 void LogVariable(std::string const& variable, Value const& value)
66 {
67  std::cout << Stream(variable) << Stream(value);
68 }
69 
70 template<typename Value>
71 void LogVariable(std::string const& variable, const std::vector<Value>& values)
72 {
73  LogVariable(variable, values.size());
74 }
75 
76 void LogVariable(std::string const&, char const* value);
77 
78 template<typename Value>
79 void Log(std::string const& file, int line, std::string const& name_space, std::string const& class_name, std::string const& function, std::string const& variable, Value value, bool final = true)
80 {
81  Log(file, line, name_space, class_name, function, false);
82  LogVariable(variable, value);
83  if (final) std::cout << '\n';
84 }
85 
86 template<typename Value, typename Value2>
87 void Log(std::string const& file, int line, std::string const& name_space, std::string const& class_name, std::string const& function, std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, bool final = true)
88 {
89  Log(file, line, name_space, class_name, function, variable, value, false);
90  LogVariable(variable2, value2);
91  if (final) std::cout << '\n';
92 }
93 
94 template<typename Value, typename Value2, typename Value3>
95 void Log(std::string const& file, int line, std::string const& name_space, std::string const& class_name, std::string const& function, std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, std::string const& variable3, const Value3 value3, bool final = true)
96 {
97  Log(file, line, name_space, class_name, function, variable, value, variable2, value2, false);
98  LogVariable(variable3, value3);
99  if (final) std::cout << '\n';
100 }
101 
102 template<typename Value, typename Value2, typename Value3, typename Value4>
103 void Log(std::string const& file, int line, std::string const& name_space, std::string const& class_name, std::string const& function, std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, std::string const& variable3, const Value3 value3, std::string const& variable4, const Value4 value4, bool final = true)
104 {
105  Log(file, line, name_space, class_name, function, variable, value, variable2, value2, variable3, value3, false);
106  LogVariable(variable4, value4);
107  if (final) std::cout << '\n';
108 }
109 
110 template<typename Value, typename Value2, typename Value3, typename Value4, typename Value5>
111 void Log(std::string const& file, int line, std::string const& name_space, std::string const& class_name, std::string const& function, std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, std::string const& variable3, const Value3 value3, std::string const& variable4, const Value4 value4, std::string const& variable5, const Value5 value5)
112 {
113  Log(file, line, name_space, class_name, function, variable, value, variable2, value2, variable3, value3, variable4, value4, false);
114  LogVariable(variable5, value5);
115  std::cout << '\n';
116 }
117 
118 
119 
120 
121 
122 void Debug(bool final = true);
123 
124 template<typename Value>
125 void Debug(std::string const& variable, Value value, bool final = true)
126 {
127  Debug(false);
128  LogVariable(variable, value);
129  if (final) std::cout << '\n';
130 }
131 
132 template<typename Value, typename Value2>
133 void Debug(std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, bool final = true)
134 {
135  Debug(variable, value, false);
136  LogVariable(variable2, value2);
137  if (final) std::cout << '\n';
138 }
139 
140 template<typename Value, typename Value2, typename Value3>
141 void Debug(std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, std::string const& variable3, const Value3 value3, bool final = true)
142 {
143  Debug(variable, value, variable2, value2, false);
144  LogVariable(variable3, value3);
145  if (final) std::cout << '\n';
146 }
147 
148 template<typename Value, typename Value2, typename Value3, typename Value4>
149 void Debug(std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, std::string const& variable3, const Value3 value3, std::string const& variable4, const Value4 value4, bool final = true)
150 {
151  Debug(variable, value, variable2, value2, variable3, value3, false);
152  LogVariable(variable4, value4);
153  if (final) std::cout << '\n';
154 }
155 
156 template<typename Value, typename Value2, typename Value3, typename Value4, typename Value5>
157 void Debug(std::string const& variable, const Value value, std::string const& variable2, const Value2 value2, std::string const& variable3, const Value3 value3, std::string const& variable4, const Value4 value4, std::string const& variable5, const Value5 value5)
158 {
159  Debug(variable, value, variable2, value2, variable3, value3, variable4, value4, false);
160  LogVariable(variable5, value5);
161  std::cout << '\n';
162 }
163 
164 template<typename Value>
165 void Default(std::string const& variable, const Value value) {
166  std::cout << "Defaul value for switch" << '\n';
167  LogVariable(variable, value);
168  std::cout << '\n';
169 }
170 
171 void Error(std::string const& variable);
172 
174 
175 }
std::string Stream2(std::string const &variable, Value const &value)
Definition: Debug.hh:57
void LogVariable(std::string const &variable, Value const &value)
Definition: Debug.hh:65
std::string FunctionName(std::string const &pretty_function)
Definition: Debug.cpp:42
void Debug(bool final=true)
Definition: Debug.cpp:60
std::string Stream(Value const &message, int width=20, bool right=false)
Definition: Debug.hh:48
void Log(std::string const &file, int line, std::string const &name_space, std::string const &class_name, std::string const &function, bool final=true)
Definition: Debug.cpp:54
typename boost::units::multiply_typeof_helper< ValueSquare< Value >, ValueSquare< Value >>::type Value4
Definition: Units.hh:152
std::string FileName(std::string const &file)
Definition: Debug.cpp:48
void Default(std::string const &variable, const Value value)
Definition: Debug.hh:165
Boosted Collider Analysis.
Definition: Analysis.hh:15
std::string NameSpaceName(std::string const &pretty_function)
Definition: Debug.cpp:29
void Error(std::string const &variable)
Definition: Debug.cpp:69
std::string ClassName(std::string const &pretty_function)
Definition: Debug.cpp:36
std::string ApplyIoFlags(Value const &message)
Definition: Debug.hh:35
Definition: DelphesClasses.h:336