8 #include <highfive/H5File.hpp>
10 #include <bbp/sonata/optional.hpp>
11 #include <bbp/sonata/population.h>
17 template <
typename KeyType>
19 using DataType = std::vector<KeyType>;
20 std::vector<double> times;
23 std::vector<float> data;
26 using Spike = std::pair<NodeID, double>;
27 using Spikes = std::vector<Spike>;
29 std::vector<NodeID> node_ids;
30 std::vector<double> timestamps;
40 enum class Sorting : char {
49 std::tuple<double, double> getTimes()
const;
73 Sorting getSorting()
const;
76 Population(
const std::string& filename,
const std::string& populationName);
79 Sorting sorting_ = Sorting::none;
81 double tstart_, tstop_;
83 void filterNode(Spikes& spikes,
const Selection& node_ids)
const;
84 void filterTimestamp(Spikes& spikes,
double tstart,
double tstop)
const;
88 Spikes createSpikes()
const;
98 std::vector<std::string> getPopulationNames()
const;
100 const Population& openPopulation(
const std::string& populationName)
const;
103 std::string filename_;
106 mutable std::map<std::string, Population> populations_;
109 template <
typename KeyType>
119 std::tuple<double, double, double> getTimes()
const;
124 std::string getTimeUnits()
const;
129 std::string getDataUnits()
const;
134 bool getSorted()
const;
139 std::vector<NodeID> getNodeIds()
const;
154 typename DataFrame<KeyType>::DataType getNodeIdElementIdMapping(
174 struct NodeIdElementLayout {
175 typename DataFrame<KeyType>::DataType ids;
176 Selection::Ranges node_ranges;
177 std::vector<uint64_t> node_offsets;
178 std::vector<uint64_t> node_index;
179 Selection::Ranges min_max_blocks;
182 Population(
const HighFive::File& file,
const std::string& populationName);
194 NodeIdElementLayout getNodeIdElementLayout(
198 HighFive::Group pop_group_;
199 std::vector<NodeID> node_ids_;
200 std::vector<Selection::Range> node_ranges_;
201 std::vector<uint64_t> node_offsets_;
202 std::vector<uint64_t> node_index_;
203 double tstart_, tstop_, tstep_;
204 std::vector<std::pair<size_t, double>> times_index_;
205 std::string time_units_;
206 std::string data_units_;
207 bool is_node_ids_sorted_;
217 std::vector<std::string> getPopulationNames()
const;
219 const Population& openPopulation(
const std::string& populationName)
const;
222 HighFive::File file_;
225 mutable std::map<std::string, Population> populations_;