give ROI higher precedence

This commit is contained in:
2026-08-24 14:28:31 +02:00
parent a385d6cd42
commit c8d6a19bfa
2 changed files with 47 additions and 23 deletions
+24
View File
@@ -1,4 +1,5 @@
#pragma once
#include "aare/DetectorGeometry.hpp"
#include "aare/defs.hpp"
#include <algorithm>
#include <numeric>
@@ -89,4 +90,27 @@ std::vector<ROI> merge_consecutive_rois(std::vector<ROI> &rois) {
return merge_along_y(merge_along_x(rois)); // generic case: two passes
}
}
/**
* @brief Check if the ROI covers the entire detector geometry
* @param roi Region of interest
* @param geometry Detector geometry
* @return true if the ROI covers the entire detector geometry, false otherwise
*/
inline bool complete_ROI(const ROI &roi, const DetectorGeometry &geometry) {
return roi.xmin == 0 &&
roi.xmax == static_cast<ssize_t>(geometry.pixels_x()) &&
roi.ymin == 0 &&
roi.ymax == static_cast<ssize_t>(geometry.pixels_y());
}
inline bool complete_ROI(const std::vector<ROI> &rois,
const DetectorGeometry &geometry) {
if (rois.empty() or rois.size() > 1) {
return false;
} else {
return complete_ROI(rois[0], geometry);
}
}
} // namespace aare
+23 -23
View File
@@ -144,11 +144,6 @@ get_rois_from_disabled_udp_ports(std::vector<size_t> &disabled_ports,
enabled_ports.end());
});
std::for_each(enabled_ports.begin(), enabled_ports.end(),
[](size_t &port) {
LOG(logDEBUG) << "Enabled UDP port: " << port;
});
rois.reserve(enabled_ports.size());
for (const auto enabled_port : enabled_ports) {
@@ -184,10 +179,29 @@ RawFile::RawFile(const std::filesystem::path &fname, const std::string &mode)
m_mode = mode;
if (mode == "r") {
// TODO: should we support both ROI and disabled udp port - which
// one should have precedence?
if (m_master.disabled_udp_ports().has_value() &&
m_master.disabled_udp_ports().value().size() > 0) {
if (m_master.rois().has_value() &&
!complete_ROI(m_master.rois().value(), m_geometry)) {
LOG(logDEBUG)
<< "ROIs defined in master file. Creating subfiles for "
"each ROI.";
m_ROI_geometries.reserve(m_master.rois()->size());
m_subfiles.resize(m_master.rois()->size());
// iterate over all ROIS
size_t roi_index = 0;
const auto rois = m_master.rois().value();
for (const auto &roi : rois) {
m_ROI_geometries.push_back(ROIGeometry(roi, m_geometry));
// open subfiles
open_subfiles(roi_index);
++roi_index;
}
} else if (m_master.disabled_udp_ports().has_value() &&
m_master.disabled_udp_ports().value().size() > 0) {
LOG(logDEBUG) << "Disabled UDP ports defined in master file. "
"Creating ROIs from disabled UDP ports.";
auto disabled_ports = m_master.disabled_udp_ports().value();
@@ -227,20 +241,6 @@ RawFile::RawFile(const std::filesystem::path &fname, const std::string &mode)
min_subfiles_per_roi.end());
LOG(logDEBUG) << "Frames in file: " << m_frames_in_file;
} else if (m_master.rois().has_value()) {
m_ROI_geometries.reserve(m_master.rois()->size());
m_subfiles.resize(m_master.rois()->size());
// iterate over all ROIS
size_t roi_index = 0;
const auto rois = m_master.rois().value();
for (const auto &roi : rois) {
m_ROI_geometries.push_back(ROIGeometry(roi, m_geometry));
// open subfiles
open_subfiles(roi_index);
++roi_index;
}
} else {
// no ROI use full detector
m_subfiles.resize(1);