Mantid
Loading...
Searching...
No Matches
ProcessBankTaskBase.cpp
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2025 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7
9#include "MantidKernel/Unit.h"
10#include <sstream>
11#include <tbb/tbb.h>
12
13namespace {
14const std::string MICROSEC("microseconds");
15}
16
18ProcessBankTaskBase::ProcessBankTaskBase(std::vector<std::string> &bankEntryNames, std::shared_ptr<NexusLoader> loader,
19 const BankCalibrationFactory &calibFactory)
20 : m_bankEntries(bankEntryNames), m_loader(std::move(loader)), m_calibFactory(calibFactory) {}
21
22const std::string &ProcessBankTaskBase::bankName(const size_t wksp_index) const { return m_bankEntries[wksp_index]; }
23
24std::vector<BankCalibration> ProcessBankTaskBase::getCalibrations(const std::string &tof_unit,
25 const size_t bank_index) const {
26 // when arbitrary grouping is used, we need all calibrations
27 const double time_conversion = Kernel::Units::timeConversionValue(tof_unit, MICROSEC);
28 return m_calibFactory.getCalibrations(time_conversion, bank_index);
29}
30
31void ProcessBankTaskBase::loadEvents(H5::DataSet &detID_SDS, H5::DataSet &tof_SDS, const std::vector<size_t> &offsets,
32 const std::vector<size_t> &slabsizes,
33 std::unique_ptr<std::vector<uint32_t>> &detId_vec,
34 std::unique_ptr<std::vector<float>> &tof_vec) const {
35 tbb::parallel_invoke(
36 [&] { // load detid
37 m_loader->loadData(detID_SDS, detId_vec, offsets, slabsizes);
38 },
39 [&] { // load time-of-flight
40 m_loader->loadData(tof_SDS, tof_vec, offsets, slabsizes);
41 });
42}
43
44std::stack<EventROI>
45ProcessBankTaskBase::getEventIndexRanges(H5::Group &event_group, const uint64_t number_events,
46 std::unique_ptr<std::vector<uint64_t>> *event_index) const {
47 return m_loader->getEventIndexRanges(event_group, number_events, event_index);
48}
49
50std::stack<std::pair<int, EventROI>> ProcessBankTaskBase::getEventIndexSplitRanges(H5::Group &event_group,
51 const uint64_t number_events) const {
52 return m_loader->getEventIndexSplitRanges(event_group, number_events);
53}
54
55std::string toLogString(const std::string &bankName, const size_t total_events_to_read,
56 const std::vector<size_t> &offsets, const std::vector<size_t> &slabsizes) {
57 std::ostringstream oss;
58 oss << "Processing " << bankName << " with " << total_events_to_read << " events in the ranges: ";
59 for (size_t i = 0; i < offsets.size(); ++i) {
60 oss << "[" << offsets[i] << ", " << (offsets[i] + slabsizes[i]) << "), ";
61 }
62 oss << "\n";
63
64 return oss.str();
65}
66
67}; // namespace Mantid::DataHandling::AlignAndFocusPowderSlim
std::vector< BankCalibration > getCalibrations(const double time_conversion, const size_t bank_index) const
Select which detector ids go into the output group.
ProcessBankTaskBase(std::vector< std::string > &bankEntryNames, std::shared_ptr< NexusLoader > loader, const BankCalibrationFactory &calibFactory)
const std::string & bankName(const size_t wksp_index) const
std::stack< std::pair< int, EventROI > > getEventIndexSplitRanges(H5::Group &event_group, const uint64_t number_events) const
std::stack< EventROI > getEventIndexRanges(H5::Group &event_group, const uint64_t number_events, std::unique_ptr< std::vector< uint64_t > > *event_index=nullptr) const
std::vector< BankCalibration > getCalibrations(const std::string &tof_unit, const size_t bank_index) const
const BankCalibrationFactory & m_calibFactory
used to generate actual calibration
void loadEvents(H5::DataSet &detID_SDS, H5::DataSet &tof_SDS, const std::vector< size_t > &offsets, const std::vector< size_t > &slabsizes, std::unique_ptr< std::vector< uint32_t > > &detId_vec, std::unique_ptr< std::vector< float > > &tof_vec) const
Load detid and tof at the same time.
std::string toLogString(const std::string &bankName, const size_t total_events_to_read, const std::vector< size_t > &offsets, const std::vector< size_t > &slabsizes)
MANTID_KERNEL_DLL double timeConversionValue(const std::string &input_unit, const std::string &output_unit)
Definition Unit.cpp:1430
STL namespace.