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;
78 std::string getTimeUnits()
const;
81 Population(
const std::string& filename,
const std::string& populationName);
84 Sorting sorting_ = Sorting::none;
86 double tstart_, tstop_;
87 std::string time_units_;
89 void filterNode(Spikes& spikes,
const Selection& node_ids)
const;
90 void filterTimestamp(Spikes& spikes,
double tstart,
double tstop)
const;
94 Spikes createSpikes()
const;
104 std::vector<std::string> getPopulationNames()
const;
106 const Population& openPopulation(
const std::string& populationName)
const;
109 std::string filename_;
112 mutable std::map<std::string, Population> populations_;
115 template <
typename KeyType>
125 std::tuple<double, double, double> getTimes()
const;
130 std::string getTimeUnits()
const;
135 std::string getDataUnits()
const;
140 bool getSorted()
const;
145 std::vector<NodeID> getNodeIds()
const;
160 typename DataFrame<KeyType>::DataType getNodeIdElementIdMapping(
180 struct NodeIdElementLayout {
181 typename DataFrame<KeyType>::DataType ids;
182 Selection::Ranges node_ranges;
183 std::vector<uint64_t> node_offsets;
184 std::vector<uint64_t> node_index;
185 Selection::Ranges min_max_blocks;
188 Population(
const HighFive::File& file,
const std::string& populationName);
200 NodeIdElementLayout getNodeIdElementLayout(
204 HighFive::Group pop_group_;
205 std::vector<NodeID> node_ids_;
206 std::vector<Selection::Range> node_ranges_;
207 std::vector<uint64_t> node_offsets_;
208 std::vector<uint64_t> node_index_;
209 double tstart_, tstop_, tstep_;
210 std::vector<std::pair<size_t, double>> times_index_;
211 std::string time_units_;
212 std::string data_units_;
213 bool is_node_ids_sorted_;
223 std::vector<std::string> getPopulationNames()
const;
225 const Population& openPopulation(
const std::string& populationName)
const;
228 HighFive::File file_;
231 mutable std::map<std::string, Population> populations_;