14 #ifndef _H_NRN_REPORT_
15 #define _H_NRN_REPORT_
22 #include <unordered_map>
27 #define REPORT_MAX_NAME_LEN 256
28 #define REPORT_MAX_FILEPATH_LEN 4096
36 std::unordered_map<size_t, std::vector<std::pair<double*, double>>>
currents_;
43 os <<
"SummationReport:\n";
45 os <<
"summation_ (" << report.
summation_.size() <<
"): [";
53 os <<
"currents_ (" << report.
currents_.size() <<
"):\n";
54 for (
const auto& [seg_id, vec]: report.
currents_) {
55 os <<
" " << seg_id <<
": [";
56 for (
size_t i = 0;
i < vec.size(); ++
i) {
57 const auto& [ptr, scale] = vec[
i];
58 os <<
"(ptr=" << ptr <<
", val=" << (ptr ? *ptr : 0.0) <<
", scale=" << scale <<
")";
59 if (
i + 1 < vec.size())
65 os <<
"gid_segments_ (" << report.
gid_segments_.size() <<
"):\n";
67 os <<
" " << gid <<
": [";
68 for (
size_t i = 0;
i < segs.size(); ++
i) {
70 if (
i + 1 < segs.size())
101 template <
typename EnumT, std::
size_t N>
103 const std::array<std::pair<EnumT, std::string_view>, N>& mapping,
104 const std::string_view enum_name) {
105 auto it = std::find_if(mapping.begin(), mapping.end(), [e](
const auto& pair) {
106 return pair.first == e;
108 if (it != mapping.end()) {
109 return std::string(it->second);
112 std::cerr <<
"Unknown value for " << enum_name <<
": " <<
static_cast<int>(e) << std::endl;
124 if (a.size() != b.size())
126 return std::equal(a.begin(), a.end(), b.begin(), [](
unsigned char c1,
unsigned char c2) {
127 return std::tolower(c1) == std::tolower(c2);
143 template <
typename EnumT, std::
size_t N>
145 const std::array<std::pair<EnumT, std::string_view>, N>& mapping,
146 const std::string_view enum_name) {
147 auto it = std::find_if(mapping.begin(), mapping.end(), [&str](
const auto& pair) {
148 return equals_case_insensitive(str, pair.second);
150 if (it != mapping.end()) {
154 std::cerr <<
"Unknown string for " << enum_name <<
": " << str << std::endl;
198 constexpr std::array<std::pair<Scaling, std::string_view>, 2>
scaling_map{
205 return from_string<Scaling>(str,
scaling_map,
"Scaling");
248 const std::string& output_dir,
THIS FILE IS AUTO GENERATED DONT MODIFY IT.
constexpr std::array< std::pair< ReportType, std::string_view >, 5 > report_type_map
EnumT from_string(std::string_view str, const std::array< std::pair< EnumT, std::string_view >, N > &mapping, const std::string_view enum_name)
Converts a string to its corresponding enum value, case-insensitively.
void nrn_abort(int errcode)
Compartments compartments_from_string(const std::string &str)
constexpr std::array< std::pair< SectionType, std::string_view >, 11 > section_type_map
Scaling scaling_from_string(const std::string &str)
constexpr std::array< std::pair< Scaling, std::string_view >, 2 > scaling_map
void nrn_flush_reports(double t)
void set_report_buffer_size(int n)
std::vector< ReportConfiguration > create_report_configurations(const std::string &filename, const std::string &output_dir, SpikesInfo &spikes_info)
SectionType section_type_from_string(std::string_view str)
void setup_report_engine(double dt_report, double mindelay)
in the current implementation, we call flush during every spike exchange interval.
ReportType report_type_from_string(const std::string &s)
std::string to_string(EnumT e, const std::array< std::pair< EnumT, std::string_view >, N > &mapping, const std::string_view enum_name)
Converts an enum value to its corresponding string representation.
bool equals_case_insensitive(std::string_view a, std::string_view b)
Compares two strings for equality, ignoring case.
std::ostream & operator<<(std::ostream &os, const corenrn_parameters &corenrn_param)
constexpr std::array< std::pair< Compartments, std::string_view >, 3 > compartments_map
int const size_t const size_t n
static int equal(const char *c1, const char *c2)
Compartments compartments
std::vector< int > target
std::vector< std::string > var_names
std::vector< int > point_compartment_ids
std::vector< std::string > mech_names
std::vector< int > point_section_ids
std::vector< int > mech_ids
std::vector< std::pair< std::string, int > > population_info
std::vector< double > summation_
std::unordered_map< size_t, std::vector< std::pair< double *, double > > > currents_
std::unordered_map< int, std::vector< size_t > > gid_segments_
std::unordered_map< std::string, SummationReport > summation_reports_