get rx_roi from metadata from rxr, cant reconstruct. fixed clear roi should give 1 roi min
All checks were successful
Build on RHEL9 / build (push) Successful in 2m50s
Build on RHEL8 / build (push) Successful in 4m52s

This commit is contained in:
2025-06-29 18:56:07 +02:00
parent 72bf1fa257
commit b775dd0efa
10 changed files with 54 additions and 13 deletions

View File

@@ -1675,18 +1675,14 @@ std::vector<defs::ROI> DetectorImpl::getRxROI(int module_id) const {
if (modules.size() == 0) {
throw RuntimeError("No Modules added");
}
// individual module rois
if (module_id >= (int)modules.size()) {
throw RuntimeError("Invalid module id: " + std::to_string(module_id));
}
if (module_id >= 0) {
if (module_id >= (int)modules.size())
throw RuntimeError("Invalid module index " + std::to_string(module_id) + ". Out of bounds.");
return modules[module_id]->getRxROI();
}
// multi roi
// return std::vector<defs::ROI>{};
return rxRoiTemp;
// TODO
return modules[0]->getRxROIMetadata();
}
void DetectorImpl::validateROIs(const std::vector<defs::ROI> &rois) {
@@ -1875,17 +1871,16 @@ void DetectorImpl::setRxROI(const std::vector<defs::ROI> &args) {
}
modules[iModule]->setRxROI(portRois);
}
rxRoiTemp = args;
// metadata
modules[0]->setRxROIMetadata(args);
}
void DetectorImpl::clearRxROI() {
rxRoiTemp.clear();
int nPortsPerModule = Parallel(&Module::getNumberofUDPInterfacesFromShm, {}).tsquash("Inconsistent number of udp ports set up per module");
for (size_t iModule = 0; iModule < modules.size(); ++iModule) {
modules[iModule]->setRxROI(std::vector<defs::ROI>(nPortsPerModule));
}
modules[0]->setRxROIMetadata(std::vector<defs::ROI>(1));
}
void DetectorImpl::getBadChannels(const std::string &fname,

View File

@@ -459,8 +459,6 @@ class DetectorImpl : public virtual slsDetectorDefs {
void (*dataReady)(detectorData *, uint64_t, uint32_t, void *){nullptr};
void *pCallbackArg{nullptr};
std::vector<defs::ROI> rxRoiTemp;
};
} // namespace sls

View File

@@ -1569,6 +1569,29 @@ void Module::setRxROI(const std::vector<defs::ROI> &portRois) {
}
}
std::vector<slsDetectorDefs::ROI> Module::getRxROIMetadata() const {
LOG(logDEBUG1) << "Getting receiver ROI metadata for Module "
<< moduleIndex;
// check number of ports
if (!shm()->useReceiverFlag) {
throw RuntimeError("No receiver to get ROI metadata.");
}
auto client = ReceiverSocket(shm()->rxHostname, shm()->rxTCPPort);
client.Send(F_RECEIVER_GET_ROI_METADATA);
client.setFnum(F_RECEIVER_GET_ROI_METADATA);
auto size = client.Receive<int>();
std::vector<slsDetectorDefs::ROI> retval(size);
if (size > 0)
client.Receive(retval);
if (size == 0) {
throw RuntimeError("Invalid number of ROI metadata: " +
std::to_string(size) + ". Min: 1.");
}
LOG(logDEBUG1) << "ROI metadata of Receiver: "
<< ToString(retval);
return retval;
}
void Module::setRxROIMetadata(const std::vector<slsDetectorDefs::ROI> &args) {
LOG(logDEBUG) << "Sending to receiver " << moduleIndex
<< " [roi metadata: " << ToString(args) << ']';

View File

@@ -304,6 +304,7 @@ class Module : public virtual slsDetectorDefs {
std::vector<defs::ROI> getRxROI() const;
void setRxROI(const std::vector<slsDetectorDefs::ROI> &portRois);
void setRxROIMetadata(const std::vector<slsDetectorDefs::ROI> &args);
std::vector<slsDetectorDefs::ROI> getRxROIMetadata() const;
/**************************************************
* *

View File

@@ -728,7 +728,10 @@ TEST_CASE("rx_roi", "[.cmdcall]") {
}
for (int i = 0; i != det.size(); ++i) {
det.setRxROI(prev_val);
if (prev_val.size() == 1 && prev_val[0].completeRoi()) {
det.clearRxROI();
} else
det.setRxROI(prev_val);
}
}
}