17 const std::vector<std::pair<int, PulseROI>> &target_to_pulse_indices)
18 : m_is_time_filtered(is_time_filtered), m_pulse_indices(pulse_indices),
19 m_target_to_pulse_indices(target_to_pulse_indices) {}
22 const std::vector<size_t> &offsets,
const std::vector<size_t> &slabsizes) {
27 const std::vector<size_t> &offsets,
const std::vector<size_t> &slabsizes) {
33 const std::vector<size_t> &offsets,
const std::vector<size_t> &slabsizes)
const {
35 H5::DataSpace filespace = SDS.getSpace();
37 const auto length_actual =
static_cast<size_t>(filespace.getSelectNpoints());
39 const hsize_t rankedoffset[1] = {
static_cast<hsize_t>(offsets[0])};
40 const hsize_t rankedextent[1] = {
static_cast<hsize_t>(slabsizes[0])};
42 size_t total_size = slabsizes[0];
45 if (rankedextent[0] < length_actual) {
47 filespace.selectHyperslab(H5S_SELECT_SET, rankedextent, rankedoffset);
51 for (
size_t i = 1; i < offsets.size(); ++i) {
54 filespace.selectHyperslab(H5S_SELECT_OR, extent, offset);
55 total_size += slabsizes[i];
60 const hsize_t total_rankedextent[1] = {
static_cast<hsize_t>(total_size)};
61 H5::DataSpace memspace(1, total_rankedextent);
64 const H5::DataType dataType = SDS.getDataType();
66 std::size_t dataSize = filespace.getSelectNpoints();
67 data->resize(dataSize);
68 SDS.read(data->data(), dataType, memspace, filespace);
72 std::unique_ptr<std::vector<uint64_t>> *event_index_out)
const {
74 std::stack<EventROI> ranges;
77 std::unique_ptr<std::vector<uint64_t>> event_index = std::make_unique<std::vector<uint64_t>>();
82 uint64_t start_event = event_index->at(pair.first);
84 (pair.second == std::numeric_limits<size_t>::max()) ? number_events : event_index->at(pair.second);
85 if (start_event < stop_event)
86 ranges.emplace(start_event, stop_event);
90 if (event_index_out) {
91 *event_index_out = std::move(event_index);
94 constexpr uint64_t START_DEFAULT = 0;
95 ranges.emplace(START_DEFAULT, number_events);
101 const uint64_t number_events) {
104 std::stack<std::pair<int, EventROI>> ranges;
106 std::unique_ptr<std::vector<uint64_t>> event_index = std::make_unique<std::vector<uint64_t>>();
111 uint64_t start_event = event_index->at(pair.second.first);
112 uint64_t stop_event = (pair.second.second == std::numeric_limits<size_t>::max())
114 : event_index->at(pair.second.second);
115 if (start_event < stop_event)
116 ranges.emplace(pair.first,
EventROI(start_event, stop_event));
124 std::vector<size_t> offsets = {0};
125 std::vector<size_t> slabsizes = {
static_cast<size_t>(event_index_sds.getSpace().getSelectNpoints())};
128template void NexusLoader::loadDataInternal<uint64_t>(H5::DataSet &SDS, std::unique_ptr<std::vector<uint64_t>> &data,