From 4d794ddbe3ace98269996fcafb81ea0b6ee912c9 Mon Sep 17 00:00:00 2001 From: Sergio Date: Wed, 22 Dec 2021 13:59:55 +0100 Subject: [PATCH] Minor changes + clang-format --- include/bbp/sonata/report_reader.h | 14 ++++---- src/report_reader.cpp | 51 ++++++++++++++---------------- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/include/bbp/sonata/report_reader.h b/include/bbp/sonata/report_reader.h index 6f0ddea0..2a032940 100644 --- a/include/bbp/sonata/report_reader.h +++ b/include/bbp/sonata/report_reader.h @@ -98,9 +98,9 @@ class SONATA_API SpikeReader mutable std::map populations_; }; - using Range = std::pair; - using Ranges = std::vector; - using NodePointers = std::map; +using Range = std::pair; +using Ranges = std::vector; +using NodePointers = std::map; template class SONATA_API ReportReader @@ -166,6 +166,10 @@ class SONATA_API ReportReader Population(const H5::File& file, const std::string& populationName); std::pair getIndex(const nonstd::optional& tstart, const nonstd::optional& tstop) const; + std::pair getNodePointers( + const nonstd::optional& node_ids = nonstd::nullopt) const; + typename DataFrame::DataType getElementIds(const NodePointers& node_pointers, + const Range& range) const; NodePointers nodes_pointers_; H5::Group pop_group_; @@ -175,10 +179,6 @@ class SONATA_API ReportReader std::string time_units_; std::string data_units_; bool nodes_ids_sorted_ = false; - std::pair node_pointers_from_selection( - const nonstd::optional& node_ids = nonstd::nullopt) const; - typename DataFrame::DataType ids_from_node_pointers( - const std::pair& result) const; friend ReportReader; }; diff --git a/src/report_reader.cpp b/src/report_reader.cpp index e63eb775..a646d0ff 100644 --- a/src/report_reader.cpp +++ b/src/report_reader.cpp @@ -285,28 +285,27 @@ std::vector ReportReader::Population::getNodeIds() const { } template -std::pair ReportReader::Population::node_pointers_from_selection( +std::pair ReportReader::Population::getNodePointers( const nonstd::optional& selection) const { NodePointers node_pointers; - Range range = { std::numeric_limits::max(), - std::numeric_limits::min() }; + Range range = {std::numeric_limits::max(), std::numeric_limits::min()}; - const auto& update_range = [&range](const Range range_) { - range.first = std::min(range.first, range_.first); - range.second = std::max(range.second, range_.second); + // Helper function to update the min and max values + const auto& update_range = [&range](const Range range_new) { + range.first = std::min(range.first, range_new.first); + range.second = std::max(range.second, range_new.second); }; // Take all nodes if no selection is provided if (!selection) { node_pointers = nodes_pointers_; - + for (const auto& node_pointer : node_pointers) { update_range(node_pointer.second); } - } - else if (!selection->empty()) { + } else if (!selection->empty()) { const auto& node_ids = selection->flatten(); - + for (const auto& node_id : node_ids) { const auto it = nodes_pointers_.find(node_id); if (it != nodes_pointers_.end()) { @@ -316,39 +315,37 @@ std::pair ReportReader::Population::node_pointers_from_s } } - return { node_pointers, range }; + return {node_pointers, range}; } template -typename DataFrame::DataType ReportReader::Population::ids_from_node_pointers( - const std::pair& result) const { +typename DataFrame::DataType ReportReader::Population::getElementIds( + const NodePointers& node_pointers, const Range& range) const { typename DataFrame::DataType ids{}; - - const auto& node_pointers = result.first; - const auto& min = result.second.first; - const auto& max = result.second.second; - if (!node_pointers.empty()) - { + if (!node_pointers.empty()) { + const auto& min = range.first; + const auto& max = range.second; + std::vector element_ids; auto dataset_elem_ids = pop_group_.getGroup("mapping").getDataSet("element_ids"); dataset_elem_ids.select({min}, {max - min}).read(element_ids); + // Reserve at least (max - min) elements and shrink afterwards ids.reserve(max - min); for (const auto& node_pointer : node_pointers) { const auto& node_id = node_pointer.first; const auto& range = node_pointer.second; - - for (auto i = (range.first - min); i < (range.second - min); i++) - { + + for (auto i = (range.first - min); i < (range.second - min); i++) { ids.emplace_back(make_key(node_id, element_ids[i])); } } ids.shrink_to_fit(); } - + return ids; } @@ -390,8 +387,8 @@ std::pair ReportReader::Population::getIndex( template typename DataFrame::DataType ReportReader::Population::getNodeIdElementIdMapping( const nonstd::optional& selection) const { - const auto& result = node_pointers_from_selection(selection); - return ids_from_node_pointers(result); + const auto& result = getNodePointers(selection); + return getElementIds(result.first, result.second); } template @@ -417,12 +414,12 @@ DataFrame ReportReader::Population::get(const nonstd::optional& // min and max offsets of the node_ids requested are calculated // to reduce the amount of IO that is brought to memory - const auto& result = node_pointers_from_selection(selection); + const auto& result = getNodePointers(selection); const auto& node_pointers = result.first; const auto& min = result.second.first; const auto& max = result.second.second; - data_frame.ids = ids_from_node_pointers(result); + data_frame.ids = getElementIds(result.first, result.second); if (data_frame.ids.empty()) { // At the end no data available (wrong node_ids?) return DataFrame{{}, {}, {}}; }