mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-07-10 09:51:50 +02:00
get rx_roi from metadata from rxr, cant reconstruct. fixed clear roi should give 1 roi min
This commit is contained in:
@ -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,
|
||||
|
@ -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
|
@ -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) << ']';
|
||||
|
@ -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;
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -220,6 +220,7 @@ int ClientInterface::functionTable(){
|
||||
flist[F_RECEIVER_SET_COLUMN] = &ClientInterface::set_column;
|
||||
flist[F_GET_RECEIVER_DBIT_REORDER] = &ClientInterface::get_dbit_reorder;
|
||||
flist[F_SET_RECEIVER_DBIT_REORDER] = &ClientInterface::set_dbit_reorder;
|
||||
flist[F_RECEIVER_GET_ROI_METADATA] = &ClientInterface::get_roi_metadata;
|
||||
|
||||
|
||||
for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) {
|
||||
@ -1838,4 +1839,16 @@ int ClientInterface::set_dbit_reorder(Interface &socket) {
|
||||
return socket.Send(OK);
|
||||
}
|
||||
|
||||
int ClientInterface::get_roi_metadata(Interface &socket) {
|
||||
if (detType == CHIPTESTBOARD || detType == XILINX_CHIPTESTBOARD)
|
||||
functionNotImplemented();
|
||||
auto retvals = impl()->getMultiROIMetadata();
|
||||
LOG(logINFORED) << "Receiver ROI metadata retval:" << ToString(retvals);
|
||||
auto size = static_cast<int>(retvals.size());
|
||||
socket.Send(size);
|
||||
if (size > 0)
|
||||
socket.Send(retvals);
|
||||
return OK;
|
||||
}
|
||||
|
||||
} // namespace sls
|
||||
|
@ -166,6 +166,7 @@ class ClientInterface : private virtual slsDetectorDefs {
|
||||
int set_column(ServerInterface &socket);
|
||||
int get_dbit_reorder(ServerInterface &socket);
|
||||
int set_dbit_reorder(ServerInterface &socket);
|
||||
int get_roi_metadata(ServerInterface &socket);
|
||||
|
||||
Implementation *impl() {
|
||||
if (receiver != nullptr) {
|
||||
|
@ -450,6 +450,10 @@ void Implementation::setMultiROIMetadata(
|
||||
LOG(logINFO) << "Multi ROI Metadata: " << ToString(multiRoiMetadata);
|
||||
}
|
||||
|
||||
std::vector<slsDetectorDefs::ROI> Implementation::getMultiROIMetadata() const {
|
||||
return multiRoiMetadata;
|
||||
}
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
* File Parameters *
|
||||
|
@ -61,6 +61,7 @@ class Implementation : private virtual slsDetectorDefs {
|
||||
std::vector<defs::ROI> getPortROIs() const;
|
||||
void setPortROIs(const std::vector<defs::ROI> &args);
|
||||
void setMultiROIMetadata(const std::vector<slsDetectorDefs::ROI> &args);
|
||||
std::vector<slsDetectorDefs::ROI> getMultiROIMetadata() const;
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
|
@ -412,6 +412,7 @@ enum detFuncs {
|
||||
F_RECEIVER_SET_COLUMN,
|
||||
F_GET_RECEIVER_DBIT_REORDER,
|
||||
F_SET_RECEIVER_DBIT_REORDER,
|
||||
F_RECEIVER_GET_ROI_METADATA,
|
||||
|
||||
NUM_REC_FUNCTIONS
|
||||
};
|
||||
@ -820,6 +821,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
|
||||
case F_RECEIVER_SET_COLUMN: return "F_RECEIVER_SET_COLUMN";
|
||||
case F_GET_RECEIVER_DBIT_REORDER: return "F_GET_RECEIVER_DBIT_REORDER";
|
||||
case F_SET_RECEIVER_DBIT_REORDER: return "F_SET_RECEIVER_DBIT_REORDER";
|
||||
case F_RECEIVER_GET_ROI_METADATA: return "F_RECEIVER_GET_ROI_METADATA";
|
||||
|
||||
case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS";
|
||||
default: return "Unknown Function";
|
||||
|
Reference in New Issue
Block a user