mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-22 01:27:59 +02:00
rois shoudl work. left to implement tests for individual rois, create multiple datasets (1 for each roi) in the virutal data file. currently virutal dataset with roi is not implemented and a warning is given instead. wonder why since the inviduviaual roi files are clipped
This commit is contained in:
@ -722,13 +722,19 @@ std::string Caller::rx_zmqip(int action) {
|
||||
|
||||
std::string Caller::rx_roi(int action) {
|
||||
std::ostringstream os;
|
||||
std::string helpMessage = std::string("[xmin] [xmax] [ymin] [ymax]\n\tRegion of interest in receiver.\n\t")
|
||||
+ "For a list of rois, use '[' and ']; ' to distinguish between "
|
||||
"rois and use comma inside the square brackets.\n\t If one fails to use space after semicolon, please use quotes"
|
||||
+ "For example: [0,100,0,100]; [200,300,0,100] will set two "
|
||||
"rois.or '[0,100,0,100];[200,300,0,100]' when the vector is a single string\n\t"
|
||||
+ "Only allowed at multi module level and without gap "
|
||||
"pixels.\n";
|
||||
std::string helpMessage =
|
||||
std::string("[xmin] [xmax] [ymin] [ymax]\n\tRegion of interest in "
|
||||
"receiver.\n\t") +
|
||||
"For a list of rois, use '[' and ']; ' to distinguish between "
|
||||
"rois and use comma inside the square brackets.\n\t If one fails to "
|
||||
"use space after semicolon, please use quotes" +
|
||||
"For example: [0,100,0,100]; [200,300,0,100] will set two "
|
||||
"rois.or '[0,100,0,100];[200,300,0,100]' when the vector is a single "
|
||||
"string\n\n\t" +
|
||||
"Only allowed to set at multi module level and without gap "
|
||||
"ixels.\n\n\t" +
|
||||
"One can get rx_roi also at port level, by specifying the module id "
|
||||
"and it will return the roi for each port.\n";
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << helpMessage;
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -736,7 +742,8 @@ std::string Caller::rx_roi(int action) {
|
||||
WrongNumberOfParameters(0);
|
||||
}
|
||||
if (det_id != -1) {
|
||||
throw RuntimeError("Cannot execute receiver ROI at module level");
|
||||
auto t = det->getRxROI(det_id);
|
||||
os << ToString(t) << '\n';
|
||||
} else {
|
||||
auto t = det->getRxROI();
|
||||
os << ToString(t) << '\n';
|
||||
|
@ -1766,6 +1766,7 @@ defs::xy DetectorImpl::getPortGeometry() const {
|
||||
case MOENCH:
|
||||
portGeometry.y = modules[0]->getNumberofUDPInterfacesFromShm();
|
||||
break;
|
||||
case GOTTHARD2: // 2nd port if used is for veto, not data
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1525,22 +1525,22 @@ std::array<defs::ROI, 2> Module::getRxROI() const {
|
||||
return sendToReceiver<std::array<slsDetectorDefs::ROI, 2>>(F_RECEIVER_GET_RECEIVER_ROI);
|
||||
}
|
||||
|
||||
void Module::setRxROI(std::array<defs::ROI, 2> portRois) {
|
||||
/*LOG(logDEBUG) << "Sending to receiver " << moduleIndex << " [rx roi: " << ToString(portRois)
|
||||
<< ']';
|
||||
auto receiver = ReceiverSocket(shm()->rxHostname, shm()->rxTCPPort);
|
||||
receiver.Send(F_RECEIVER_SET_RECEIVER_ROI);
|
||||
receiver.setFnum(F_RECEIVER_SET_RECEIVER_ROI);
|
||||
receiver.Send(portRois);
|
||||
if (receiver.Receive<int>() == FAIL) {
|
||||
throw ReceiverError("Receiver " + std::to_string(moduleIndex) +
|
||||
" returned error: " + receiver.readErrorMessage());
|
||||
}*/
|
||||
void Module::setRxROI(const std::array<defs::ROI, 2> &portRois) {
|
||||
sendToReceiver(F_RECEIVER_SET_RECEIVER_ROI, portRois, nullptr);
|
||||
}
|
||||
|
||||
void Module::setRxROIMetadata(const std::vector<slsDetectorDefs::ROI> &arg) {
|
||||
sendToReceiver(F_RECEIVER_SET_RECEIVER_ROI_METADATA, arg, nullptr);
|
||||
void Module::setRxROIMetadata(const std::vector<slsDetectorDefs::ROI> &args) {
|
||||
LOG(logDEBUG) << "Sending to receiver " << moduleIndex
|
||||
<< " [roi metadata: " << ToString(args) << ']';
|
||||
auto receiver = ReceiverSocket(shm()->rxHostname, shm()->rxTCPPort);
|
||||
receiver.Send(F_RECEIVER_SET_RECEIVER_ROI_METADATA);
|
||||
receiver.setFnum(F_RECEIVER_SET_RECEIVER_ROI_METADATA);
|
||||
receiver.Send(static_cast<int>(args.size()));
|
||||
receiver.Send(args);
|
||||
if (receiver.Receive<int>() == FAIL) {
|
||||
throw ReceiverError("Receiver " + std::to_string(moduleIndex) +
|
||||
" returned error: " + receiver.readErrorMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// File
|
||||
|
@ -302,7 +302,7 @@ class Module : public virtual slsDetectorDefs {
|
||||
bool getRxArping() const;
|
||||
void setRxArping(bool enable);
|
||||
std::array<defs::ROI, 2> getRxROI() const;
|
||||
void setRxROI(const std::array<slsDetectorDefs::ROI, 2> portRois);
|
||||
void setRxROI(const std::array<slsDetectorDefs::ROI, 2> &portRois);
|
||||
void setRxROIMetadata(const std::vector<slsDetectorDefs::ROI> &args);
|
||||
|
||||
/**************************************************
|
||||
|
@ -1693,19 +1693,19 @@ int ClientInterface::set_arping(Interface &socket) {
|
||||
}
|
||||
|
||||
int ClientInterface::get_receiver_roi(Interface &socket) {
|
||||
auto retval = impl()->getReceiverROI();
|
||||
LOG(logDEBUG1) << "Receiver roi retval:" << ToString(retval);
|
||||
return socket.sendResult(retval);
|
||||
auto retvals = impl()->getPortROIs();
|
||||
LOG(logDEBUG1) << "Receiver roi retval:" << ToString(retvals);
|
||||
return socket.sendResult(retvals);
|
||||
}
|
||||
|
||||
int ClientInterface::set_receiver_roi(Interface &socket) {
|
||||
auto arg = socket.Receive<ROI>();
|
||||
auto args = socket.Receive<std::array<ROI, 2>>();
|
||||
if (detType == CHIPTESTBOARD || detType == XILINX_CHIPTESTBOARD)
|
||||
functionNotImplemented();
|
||||
LOG(logDEBUG1) << "Set Receiver ROI: " << ToString(arg);
|
||||
LOG(logDEBUG1) << "Set Receiver ROI: " << ToString(args);
|
||||
verifyIdle(socket);
|
||||
try {
|
||||
impl()->setReceiverROI(arg);
|
||||
impl()->setPortROIs(args);
|
||||
} catch (const std::exception &e) {
|
||||
throw RuntimeError("Could not set Receiver ROI [" +
|
||||
std::string(e.what()) + ']');
|
||||
@ -1715,18 +1715,24 @@ int ClientInterface::set_receiver_roi(Interface &socket) {
|
||||
}
|
||||
|
||||
int ClientInterface::set_receiver_roi_metadata(Interface &socket) {
|
||||
auto arg = socket.Receive<ROI>();
|
||||
auto roiSize = socket.Receive<int>();
|
||||
if (roiSize <= 0) {
|
||||
throw RuntimeError("Invalid number of ReceiverROI metadata: " +
|
||||
std::to_string(roiSize));
|
||||
}
|
||||
LOG(logDEBUG) << "Number of ReceiverROI metadata: " << roiSize;
|
||||
std::vector<ROI> rois(roiSize);
|
||||
socket.Receive(rois);
|
||||
if (detType == CHIPTESTBOARD || detType == XILINX_CHIPTESTBOARD)
|
||||
functionNotImplemented();
|
||||
LOG(logDEBUG1) << "Set Receiver ROI Metadata: " << ToString(arg);
|
||||
verifyIdle(socket);
|
||||
LOG(logINFO) << "Setting ReceiverROI metadata[" << roiSize << ']';
|
||||
try {
|
||||
impl()->setReceiverROIMetadata(arg);
|
||||
impl()->setMultiROIMetadata(rois);
|
||||
} catch (const std::exception &e) {
|
||||
throw RuntimeError("Could not set ReceiverROI metadata [" +
|
||||
std::string(e.what()) + ']');
|
||||
}
|
||||
|
||||
return socket.Send(OK);
|
||||
}
|
||||
|
||||
|
@ -48,10 +48,10 @@ void DataProcessor::SetUdpPortNumber(const uint16_t portNumber) {
|
||||
|
||||
void DataProcessor::SetActivate(bool enable) { activated = enable; }
|
||||
|
||||
void DataProcessor::SetReceiverROI(ROI roi) {
|
||||
receiverRoi = roi;
|
||||
receiverRoiEnabled = receiverRoi.completeRoi() ? false : true;
|
||||
receiverNoRoi = receiverRoi.noRoi();
|
||||
void DataProcessor::SetPortROI(ROI roi) {
|
||||
portRoi = roi;
|
||||
isPartiallyInRoi = portRoi.completeRoi() ? false : true;
|
||||
isOutsideRoi = portRoi.noRoi();
|
||||
}
|
||||
|
||||
void DataProcessor::SetDataStreamEnable(bool enable) {
|
||||
@ -154,17 +154,17 @@ void DataProcessor::CreateFirstFiles(const std::string &fileNamePrefix,
|
||||
CloseFiles();
|
||||
|
||||
// deactivated (half module/ single port or no roi), dont write file
|
||||
if (!activated || !detectorDataStream || receiverNoRoi) {
|
||||
if (!activated || !detectorDataStream || isOutsideRoi) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
int nx = generalData->nPixelsX;
|
||||
int ny = generalData->nPixelsY;
|
||||
if (receiverRoiEnabled) {
|
||||
nx = receiverRoi.xmax - receiverRoi.xmin + 1;
|
||||
ny = receiverRoi.ymax - receiverRoi.ymin + 1;
|
||||
if (receiverRoi.ymax == -1 || receiverRoi.ymin == -1) {
|
||||
if (isPartiallyInRoi) {
|
||||
nx = portRoi.xmax - portRoi.xmin + 1;
|
||||
ny = portRoi.ymax - portRoi.ymin + 1;
|
||||
if (portRoi.ymax == -1 || portRoi.ymin == -1) {
|
||||
ny = 1;
|
||||
}
|
||||
}
|
||||
@ -203,7 +203,7 @@ std::string DataProcessor::CreateVirtualFile(
|
||||
const int modulePos, const int numModX, const int numModY,
|
||||
std::mutex *hdf5LibMutex) {
|
||||
|
||||
if (receiverRoiEnabled) {
|
||||
if (isPartiallyInRoi) {
|
||||
throw std::runtime_error(
|
||||
"Skipping virtual hdf5 file since rx_roi is enabled.");
|
||||
}
|
||||
@ -235,7 +235,7 @@ void DataProcessor::LinkFileInMaster(const std::string &masterFileName,
|
||||
const bool silentMode,
|
||||
std::mutex *hdf5LibMutex) {
|
||||
|
||||
if (receiverRoiEnabled) {
|
||||
if (isPartiallyInRoi) {
|
||||
throw std::runtime_error(
|
||||
"Should not be here, roi with hdf5 virtual should throw.");
|
||||
}
|
||||
@ -301,7 +301,7 @@ void DataProcessor::ThreadExecution() {
|
||||
// stream (if time/freq to stream) or free
|
||||
if (streamCurrentFrame) {
|
||||
// copy the complete image back if roi enabled
|
||||
if (receiverRoiEnabled) {
|
||||
if (isPartiallyInRoi) {
|
||||
memImage->size = generalData->imageSize;
|
||||
memcpy(memImage->data, &completeImageToStreamBeforeCropping[0],
|
||||
generalData->imageSize);
|
||||
@ -381,7 +381,7 @@ void DataProcessor::ProcessAnImage(sls_receiver_header &header, size_t &size,
|
||||
streamCurrentFrame = false;
|
||||
}
|
||||
|
||||
if (receiverRoiEnabled) {
|
||||
if (isPartiallyInRoi) {
|
||||
// copy the complete image to stream before cropping
|
||||
if (streamCurrentFrame) {
|
||||
memcpy(&completeImageToStreamBeforeCropping[0], data,
|
||||
@ -687,12 +687,12 @@ void DataProcessor::ArrangeDbitData(size_t &size, char *data) {
|
||||
}
|
||||
|
||||
void DataProcessor::CropImage(size_t &size, char *data) {
|
||||
LOG(logDEBUG) << "Cropping Image to ROI " << ToString(receiverRoi);
|
||||
LOG(logDEBUG) << "Cropping Image to ROI " << ToString(portRoi);
|
||||
int nPixelsX = generalData->nPixelsX;
|
||||
int xmin = receiverRoi.xmin;
|
||||
int xmax = receiverRoi.xmax;
|
||||
int ymin = receiverRoi.ymin;
|
||||
int ymax = receiverRoi.ymax;
|
||||
int xmin = portRoi.xmin;
|
||||
int xmax = portRoi.xmax;
|
||||
int ymin = portRoi.ymin;
|
||||
int ymax = portRoi.ymax;
|
||||
int xwidth = xmax - xmin + 1;
|
||||
int ywidth = ymax - ymin + 1;
|
||||
if (ymin == -1 || ymax == -1) {
|
||||
|
@ -39,7 +39,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
|
||||
|
||||
void SetUdpPortNumber(const uint16_t portNumber);
|
||||
void SetActivate(bool enable);
|
||||
void SetReceiverROI(ROI roi);
|
||||
void SetPortROI(const ROI arg);
|
||||
void SetDataStreamEnable(bool enable);
|
||||
void SetStreamingFrequency(uint32_t value);
|
||||
void SetStreamingTimerInMs(uint32_t value);
|
||||
@ -159,9 +159,9 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
|
||||
uint16_t udpPortNumber{0};
|
||||
bool dataStreamEnable;
|
||||
bool activated{false};
|
||||
ROI receiverRoi{};
|
||||
bool receiverRoiEnabled{false};
|
||||
bool receiverNoRoi{false};
|
||||
ROI portRoi{};
|
||||
bool isPartiallyInRoi{false};
|
||||
bool isOutsideRoi{false};
|
||||
std::unique_ptr<char[]> completeImageToStreamBeforeCropping;
|
||||
/** if 0, sending random images with a timer */
|
||||
uint32_t streamingFrequency;
|
||||
|
@ -53,7 +53,14 @@ void DataStreamer::SetAdditionalJsonHeader(
|
||||
isAdditionalJsonUpdated = true;
|
||||
}
|
||||
|
||||
void DataStreamer::SetReceiverROI(ROI roi) { receiverRoi = roi; }
|
||||
void DataStreamer::SetPortROI(ROI roi) {
|
||||
if (roi.completeRoi()) {
|
||||
portRoi =
|
||||
ROI(0, generalData->nPixelsX - 1, 0, generalData->nPixelsY - 1);
|
||||
} else {
|
||||
portRoi = roi;
|
||||
}
|
||||
}
|
||||
|
||||
void DataStreamer::ResetParametersforNewAcquisition(const std::string &fname) {
|
||||
StopRunning();
|
||||
@ -210,7 +217,7 @@ int DataStreamer::SendDataHeader(sls_detector_header header, uint32_t size,
|
||||
isAdditionalJsonUpdated = false;
|
||||
}
|
||||
zHeader.addJsonHeader = localAdditionalJsonHeader;
|
||||
zHeader.rx_roi = receiverRoi.getIntArray();
|
||||
zHeader.rx_roi = portRoi.getIntArray();
|
||||
|
||||
return zmqSocket->SendHeader(index, zHeader);
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
||||
void SetNumberofTotalFrames(uint64_t value);
|
||||
void
|
||||
SetAdditionalJsonHeader(const std::map<std::string, std::string> &json);
|
||||
void SetReceiverROI(ROI roi);
|
||||
void SetPortROI(ROI roi);
|
||||
|
||||
void ResetParametersforNewAcquisition(const std::string &fname);
|
||||
/**
|
||||
@ -91,7 +91,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
||||
uint64_t fileIndex{0};
|
||||
bool flipRows{false};
|
||||
std::map<std::string, std::string> additionalJsonHeader;
|
||||
ROI receiverRoi{};
|
||||
ROI portRoi{};
|
||||
|
||||
/** Used by streamer thread to update local copy (reduce number of locks
|
||||
* during streaming) */
|
||||
|
@ -184,7 +184,7 @@ void Implementation::SetupListener(int i) {
|
||||
listener[i]->SetUdpPortNumber(udpPortNum[i]);
|
||||
listener[i]->SetEthernetInterface(eth[i]);
|
||||
listener[i]->SetActivate(activated);
|
||||
listener[i]->SetNoRoi(portRois[i].noRoi());
|
||||
listener[i]->SetIsOutsideRoi(portRois[i].noRoi());
|
||||
listener[i]->SetDetectorDatastream(detectorDataStream[i]);
|
||||
listener[i]->SetSilentMode(silentMode);
|
||||
}
|
||||
@ -194,7 +194,7 @@ void Implementation::SetupDataProcessor(int i) {
|
||||
dataProcessor[i]->SetGeneralData(generalData);
|
||||
dataProcessor[i]->SetUdpPortNumber(udpPortNum[i]);
|
||||
dataProcessor[i]->SetActivate(activated);
|
||||
dataProcessor[i]->SetReceiverROI(portRois[i]);
|
||||
dataProcessor[i]->SetPortROI(portRois[i]);
|
||||
dataProcessor[i]->SetDataStreamEnable(dataStreamEnable);
|
||||
dataProcessor[i]->SetStreamingFrequency(streamingFrequency);
|
||||
dataProcessor[i]->SetStreamingTimerInMs(streamingTimerInMs);
|
||||
@ -216,8 +216,7 @@ void Implementation::SetupDataStreamer(int i) {
|
||||
dataStreamer[i]->SetFlipRows(flipRows);
|
||||
dataStreamer[i]->SetNumberofPorts(numPorts);
|
||||
dataStreamer[i]->SetNumberofTotalFrames(numberOfTotalFrames);
|
||||
dataStreamer[i]->SetReceiverROI(
|
||||
portRois[i].completeRoi() ? GetMaxROIPerPort() : portRois[i]);
|
||||
dataStreamer[i]->SetPortROI(portRois[i]);
|
||||
}
|
||||
|
||||
slsDetectorDefs::xy Implementation::getDetectorSize() const {
|
||||
@ -233,18 +232,13 @@ const slsDetectorDefs::xy Implementation::GetPortGeometry() const {
|
||||
return portGeometry;
|
||||
}
|
||||
|
||||
const slsDetectorDefs::ROI Implementation::GetMaxROIPerPort() const {
|
||||
return slsDetectorDefs::ROI{0, (int)generalData->nPixelsX - 1, 0,
|
||||
(int)generalData->nPixelsY - 1};
|
||||
}
|
||||
|
||||
void Implementation::setDetectorSize(const slsDetectorDefs::xy size) {
|
||||
xy portGeometry = GetPortGeometry();
|
||||
|
||||
std::string log_message = "Detector Size (ports): (";
|
||||
numModules = size;
|
||||
numPorts.x = portGeometry.x * size.x;
|
||||
numPorts.y = portGeometry.y * size.y;
|
||||
numPorts.x = portGeometry.x * numModules.x;
|
||||
numPorts.y = portGeometry.y * numModules.y;
|
||||
if (quadEnable) {
|
||||
numPorts.x = 1;
|
||||
numPorts.y = 2;
|
||||
@ -401,97 +395,27 @@ void Implementation::setArping(const bool i,
|
||||
}
|
||||
}
|
||||
|
||||
slsDetectorDefs::ROI Implementation::getReceiverROI() const {
|
||||
return receiverRoi;
|
||||
std::array<slsDetectorDefs::ROI, 2> Implementation::getPortROIs() const {
|
||||
return portRois;
|
||||
}
|
||||
|
||||
void Implementation::setReceiverROI(const slsDetectorDefs::ROI arg) {
|
||||
receiverRoi = arg;
|
||||
void Implementation::setPortROIs(const std::array<defs::ROI, 2> &args) {
|
||||
portRois = args;
|
||||
|
||||
if (generalData->numUDPInterfaces == 1 ||
|
||||
generalData->detType == slsDetectorDefs::GOTTHARD2) {
|
||||
portRois[0] = arg;
|
||||
} else {
|
||||
slsDetectorDefs::xy nPortDim(generalData->nPixelsX,
|
||||
generalData->nPixelsY);
|
||||
|
||||
for (int iPort = 0; iPort != generalData->numUDPInterfaces; ++iPort) {
|
||||
// default init = complete roi
|
||||
slsDetectorDefs::ROI portRoi{};
|
||||
|
||||
// no roi
|
||||
if (arg.noRoi()) {
|
||||
portRoi.setNoRoi();
|
||||
}
|
||||
|
||||
// incomplete roi
|
||||
else if (!arg.completeRoi()) {
|
||||
// get port limits
|
||||
slsDetectorDefs::ROI portFullRoi{0, nPortDim.x - 1, 0,
|
||||
nPortDim.y - 1};
|
||||
if (iPort == 1) {
|
||||
// left right (eiger)
|
||||
if (GetPortGeometry().x == 2) {
|
||||
portFullRoi.xmin += nPortDim.x;
|
||||
portFullRoi.xmax += nPortDim.x;
|
||||
}
|
||||
// top bottom (jungfrau or moench)
|
||||
else {
|
||||
portFullRoi.ymin += nPortDim.y;
|
||||
portFullRoi.ymax += nPortDim.y;
|
||||
}
|
||||
}
|
||||
LOG(logDEBUG)
|
||||
<< iPort << ": portfullroi:" << ToString(portFullRoi);
|
||||
|
||||
// no roi
|
||||
if (arg.xmin > portFullRoi.xmax ||
|
||||
arg.xmax < portFullRoi.xmin ||
|
||||
arg.ymin > portFullRoi.ymax ||
|
||||
arg.ymax < portFullRoi.ymin) {
|
||||
portRoi.setNoRoi();
|
||||
}
|
||||
|
||||
// incomplete module roi
|
||||
else if (arg.xmin > portFullRoi.xmin ||
|
||||
arg.xmax < portFullRoi.xmax ||
|
||||
arg.ymin > portFullRoi.ymin ||
|
||||
arg.ymax < portFullRoi.ymax) {
|
||||
portRoi.xmin = (arg.xmin <= portFullRoi.xmin)
|
||||
? 0
|
||||
: (arg.xmin % nPortDim.x);
|
||||
portRoi.xmax = (arg.xmax >= portFullRoi.xmax)
|
||||
? nPortDim.x - 1
|
||||
: (arg.xmax % nPortDim.x);
|
||||
portRoi.ymin = (arg.ymin <= portFullRoi.ymin)
|
||||
? 0
|
||||
: (arg.ymin % nPortDim.y);
|
||||
portRoi.ymax = (arg.ymax >= portFullRoi.ymax)
|
||||
? nPortDim.y - 1
|
||||
: (arg.ymax % nPortDim.y);
|
||||
}
|
||||
}
|
||||
portRois[iPort] = portRoi;
|
||||
}
|
||||
}
|
||||
for (size_t i = 0; i != listener.size(); ++i)
|
||||
listener[i]->SetNoRoi(portRois[i].noRoi());
|
||||
listener[i]->SetIsOutsideRoi(portRois[i].noRoi());
|
||||
for (size_t i = 0; i != dataProcessor.size(); ++i)
|
||||
dataProcessor[i]->SetReceiverROI(portRois[i]);
|
||||
dataProcessor[i]->SetPortROI(portRois[i]);
|
||||
for (size_t i = 0; i != dataStreamer.size(); ++i) {
|
||||
dataStreamer[i]->SetReceiverROI(
|
||||
portRois[i].completeRoi() ? GetMaxROIPerPort() : portRois[i]);
|
||||
}
|
||||
LOG(logINFO) << "receiver roi: " << ToString(receiverRoi);
|
||||
if (generalData->numUDPInterfaces == 2 &&
|
||||
generalData->detType != slsDetectorDefs::GOTTHARD2) {
|
||||
LOG(logINFO) << "port rois: " << ToString(portRois);
|
||||
dataStreamer[i]->SetPortROI(portRois[i]);
|
||||
}
|
||||
LOG(logINFOBLUE) << "Rois (per port): " << ToString(portRois);
|
||||
}
|
||||
|
||||
void Implementation::setReceiverROIMetadata(const ROI arg) {
|
||||
receiverRoiMetadata = arg;
|
||||
LOG(logINFO) << "receiver roi Metadata: " << ToString(receiverRoiMetadata);
|
||||
void Implementation::setMultiROIMetadata(
|
||||
const std::vector<slsDetectorDefs::ROI> &args) {
|
||||
multiRoiMetadata = args;
|
||||
LOG(logINFOBLUE) << "Multi ROI Metadata: " << ToString(multiRoiMetadata);
|
||||
}
|
||||
|
||||
/**************************************************
|
||||
@ -787,8 +711,7 @@ void Implementation::stopReceiver() {
|
||||
summary = (i == 0 ? "\n\tDeactivated Left Port"
|
||||
: "\n\tDeactivated Right Port");
|
||||
} else if (portRois[i].noRoi()) {
|
||||
summary = (i == 0 ? "\n\tNo Roi on Left Port"
|
||||
: "\n\tNo Roi on Right Port");
|
||||
summary = "\n\tNo Roi on Port[" + std::to_string(i) + ']';
|
||||
} else {
|
||||
std::ostringstream os;
|
||||
os << "\n\tMissing Packets\t\t: " << mpMessage
|
||||
@ -958,7 +881,19 @@ void Implementation::StartMasterWriter() {
|
||||
masterAttributes.framePadding = framePadding;
|
||||
masterAttributes.scanParams = scanParams;
|
||||
masterAttributes.totalFrames = numberOfTotalFrames;
|
||||
masterAttributes.receiverRoi = receiverRoiMetadata;
|
||||
// complete ROI
|
||||
if (multiRoiMetadata.empty()) {
|
||||
int nTotalPixelsX = (generalData->nPixelsX * numPorts.x);
|
||||
int nTotalPixelsY = (generalData->nPixelsY * numPorts.y);
|
||||
if (nTotalPixelsY == 1) {
|
||||
masterAttributes.rois.push_back(ROI{0, nTotalPixelsX - 1});
|
||||
} else {
|
||||
masterAttributes.rois.push_back(
|
||||
ROI{0, nTotalPixelsX - 1, 0, nTotalPixelsY - 1});
|
||||
}
|
||||
} else {
|
||||
masterAttributes.rois = multiRoiMetadata;
|
||||
}
|
||||
masterAttributes.exptime = acquisitionTime;
|
||||
masterAttributes.period = acquisitionPeriod;
|
||||
masterAttributes.burstMode = burstMode;
|
||||
@ -1087,8 +1022,8 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
|
||||
|
||||
// fifo
|
||||
SetupFifoStructure();
|
||||
// recalculate port rois
|
||||
setReceiverROI(receiverRoi);
|
||||
// recalculate port rois booleans for listener, processor and streamer
|
||||
setPortROIs(portRois);
|
||||
|
||||
// create threads
|
||||
for (int i = 0; i < generalData->numUDPInterfaces; ++i) {
|
||||
|
@ -58,9 +58,9 @@ class Implementation : private virtual slsDetectorDefs {
|
||||
bool getArping() const;
|
||||
pid_t getArpingProcessId() const;
|
||||
void setArping(const bool i, const std::vector<std::string> ips);
|
||||
ROI getReceiverROI() const;
|
||||
void setReceiverROI(const ROI arg);
|
||||
void setReceiverROIMetadata(const ROI arg);
|
||||
std::array<defs::ROI, 2> getPortROIs() const;
|
||||
void setPortROIs(const std::array<defs::ROI, 2> &args);
|
||||
void setMultiROIMetadata(const std::vector<slsDetectorDefs::ROI> &args);
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
@ -283,7 +283,6 @@ class Implementation : private virtual slsDetectorDefs {
|
||||
void SetupFifoStructure();
|
||||
|
||||
const xy GetPortGeometry() const;
|
||||
const ROI GetMaxROIPerPort() const;
|
||||
void ResetParametersforNewAcquisition();
|
||||
void CreateUDPSockets();
|
||||
void SetupWriter();
|
||||
@ -308,10 +307,8 @@ class Implementation : private virtual slsDetectorDefs {
|
||||
bool framePadding{true};
|
||||
pid_t parentThreadId;
|
||||
pid_t tcpThreadId;
|
||||
ROI receiverRoi{};
|
||||
std::array<ROI, 2> portRois{};
|
||||
// receiver roi for complete detector for metadata
|
||||
ROI receiverRoiMetadata{};
|
||||
std::vector<ROI> multiRoiMetadata{};
|
||||
|
||||
// file parameters
|
||||
fileFormat fileFormatType{BINARY};
|
||||
|
@ -85,17 +85,17 @@ void Listener::SetEthernetInterface(const std::string e) {
|
||||
|
||||
void Listener::SetActivate(bool enable) {
|
||||
activated = enable;
|
||||
disabledPort = (!activated || !detectorDataStream || noRoi);
|
||||
disabledPort = (!activated || !detectorDataStream || isOutsideRoi);
|
||||
}
|
||||
|
||||
void Listener::SetDetectorDatastream(bool enable) {
|
||||
detectorDataStream = enable;
|
||||
disabledPort = (!activated || !detectorDataStream || noRoi);
|
||||
disabledPort = (!activated || !detectorDataStream || isOutsideRoi);
|
||||
}
|
||||
|
||||
void Listener::SetNoRoi(bool enable) {
|
||||
noRoi = enable;
|
||||
disabledPort = (!activated || !detectorDataStream || noRoi);
|
||||
void Listener::SetIsOutsideRoi(bool enable) {
|
||||
isOutsideRoi = enable;
|
||||
disabledPort = (!activated || !detectorDataStream || isOutsideRoi);
|
||||
}
|
||||
|
||||
void Listener::SetSilentMode(bool enable) { silentMode = enable; }
|
||||
|
@ -43,7 +43,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
|
||||
void SetEthernetInterface(const std::string e);
|
||||
void SetActivate(bool enable);
|
||||
void SetDetectorDatastream(bool enable);
|
||||
void SetNoRoi(bool enable);
|
||||
void SetIsOutsideRoi(bool enable);
|
||||
void SetSilentMode(bool enable);
|
||||
|
||||
void ResetParametersforNewAcquisition();
|
||||
@ -116,7 +116,7 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
|
||||
std::string eth;
|
||||
bool activated{false};
|
||||
bool detectorDataStream{true};
|
||||
bool noRoi{false};
|
||||
bool isOutsideRoi{false};
|
||||
bool silentMode;
|
||||
bool disabledPort{false};
|
||||
|
||||
|
@ -43,30 +43,30 @@ void MasterAttributes::WriteHDF5Attributes(H5::H5File *fd, H5::Group *group) {
|
||||
WriteCommonHDF5Attributes(fd, group);
|
||||
switch (detType) {
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
WriteJungfrauHDF5Attributes(fd, group);
|
||||
WriteJungfrauHDF5Attributes(group);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
WriteMoenchHDF5Attributes(fd, group);
|
||||
WriteMoenchHDF5Attributes(group);
|
||||
break;
|
||||
case slsDetectorDefs::EIGER:
|
||||
WriteEigerHDF5Attributes(fd, group);
|
||||
WriteEigerHDF5Attributes(group);
|
||||
break;
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
WriteMythen3HDF5Attributes(fd, group);
|
||||
WriteMythen3HDF5Attributes(group);
|
||||
break;
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
WriteGotthard2HDF5Attributes(fd, group);
|
||||
WriteGotthard2HDF5Attributes(group);
|
||||
break;
|
||||
case slsDetectorDefs::CHIPTESTBOARD:
|
||||
WriteCtbHDF5Attributes(fd, group);
|
||||
WriteCtbHDF5Attributes(group);
|
||||
break;
|
||||
case slsDetectorDefs::XILINX_CHIPTESTBOARD:
|
||||
WriteXilinxCtbHDF5Attributes(fd, group);
|
||||
WriteXilinxCtbHDF5Attributes(group);
|
||||
break;
|
||||
default:
|
||||
throw RuntimeError("Unknown Detector type to get master attributes");
|
||||
}
|
||||
WriteFinalHDF5Attributes(fd, group);
|
||||
WriteFinalHDF5Attributes(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -110,17 +110,6 @@ void MasterAttributes::GetCommonBinaryAttributes(
|
||||
w->String(ToString(scanParams).c_str());
|
||||
w->Key("Total Frames");
|
||||
w->Uint64(totalFrames);
|
||||
w->Key("Receiver Roi");
|
||||
w->StartObject();
|
||||
w->Key("xmin");
|
||||
w->Uint(receiverRoi.xmin);
|
||||
w->Key("xmax");
|
||||
w->Uint(receiverRoi.xmax);
|
||||
w->Key("ymin");
|
||||
w->Uint(receiverRoi.ymin);
|
||||
w->Key("ymax");
|
||||
w->Uint(receiverRoi.ymax);
|
||||
w->EndObject();
|
||||
}
|
||||
|
||||
void MasterAttributes::GetFinalBinaryAttributes(
|
||||
@ -287,38 +276,9 @@ void MasterAttributes::WriteCommonHDF5Attributes(H5::H5File *fd,
|
||||
"Total Frames", H5::PredType::STD_U64LE, dataspace);
|
||||
dataset.write(&totalFrames, H5::PredType::STD_U64LE);
|
||||
}
|
||||
// Receiver Roi xmin
|
||||
{
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"receiver roi xmin", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&receiverRoi.xmin, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
// Receiver Roi xmax
|
||||
{
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"receiver roi xmax", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&receiverRoi.xmax, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
// Receiver Roi ymin
|
||||
{
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"receiver roi ymin", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&receiverRoi.ymin, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
// Receiver Roi ymax
|
||||
{
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"receiver roi ymax", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&receiverRoi.ymax, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteFinalHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteFinalHDF5Attributes(H5::Group *group) {
|
||||
char c[1024]{};
|
||||
// Total Frames in file
|
||||
{
|
||||
@ -339,7 +299,20 @@ void MasterAttributes::WriteFinalHDF5Attributes(H5::H5File *fd,
|
||||
}
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5Exptime(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5ROIs(H5::Group *group) {
|
||||
hsize_t dims[1] = {rois.size()};
|
||||
H5::DataSpace dataspace(1, dims);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 1024);
|
||||
H5::DataSet dataset =
|
||||
group->createDataSet("Receiver Rois", strdatatype, dataspace);
|
||||
std::vector<char[1024]> cRois(rois.size());
|
||||
for (size_t i = 0; i < rois.size(); ++i) {
|
||||
strcpy_safe(cRois[i], ToString(rois[i]));
|
||||
}
|
||||
dataset.write(cRois.data(), strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5Exptime(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 256);
|
||||
H5::DataSet dataset =
|
||||
@ -349,7 +322,7 @@ void MasterAttributes::WriteHDF5Exptime(H5::H5File *fd, H5::Group *group) {
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5Period(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5Period(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 256);
|
||||
H5::DataSet dataset =
|
||||
@ -359,7 +332,7 @@ void MasterAttributes::WriteHDF5Period(H5::H5File *fd, H5::Group *group) {
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5DynamicRange(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5DynamicRange(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Dynamic Range", H5::PredType::NATIVE_INT, dataspace);
|
||||
@ -372,30 +345,28 @@ void MasterAttributes::WriteHDF5DynamicRange(H5::H5File *fd, H5::Group *group) {
|
||||
attribute.write(strdatatype, c);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5TenGiga(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5TenGiga(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Ten Giga Enable", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&tenGiga, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5NumUDPInterfaces(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5NumUDPInterfaces(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Number of UDP Interfaces", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&numUDPInterfaces, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5ReadNRows(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5ReadNRows(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Number of rows", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&readNRows, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5ThresholdEnergy(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5ThresholdEnergy(H5::Group *group) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
@ -409,8 +380,7 @@ void MasterAttributes::WriteHDF5ThresholdEnergy(H5::H5File *fd,
|
||||
attribute.write(strdatatype, c);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5ThresholdEnergies(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5ThresholdEnergies(H5::Group *group) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 1024);
|
||||
@ -420,7 +390,7 @@ void MasterAttributes::WriteHDF5ThresholdEnergies(H5::H5File *fd,
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5SubExpTime(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5SubExpTime(H5::Group *group) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 256);
|
||||
@ -430,7 +400,7 @@ void MasterAttributes::WriteHDF5SubExpTime(H5::H5File *fd, H5::Group *group) {
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5SubPeriod(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5SubPeriod(H5::Group *group) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 256);
|
||||
@ -440,15 +410,14 @@ void MasterAttributes::WriteHDF5SubPeriod(H5::H5File *fd, H5::Group *group) {
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5SubQuad(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5SubQuad(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset =
|
||||
group->createDataSet("Quad", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&quad, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5RateCorrections(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5RateCorrections(H5::Group *group) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 1024);
|
||||
@ -458,14 +427,14 @@ void MasterAttributes::WriteHDF5RateCorrections(H5::H5File *fd,
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5CounterMask(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5CounterMask(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Counter Mask", H5::PredType::STD_U32LE, dataspace);
|
||||
dataset.write(&counterMask, H5::PredType::STD_U32LE);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5ExptimeArray(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5ExptimeArray(H5::Group *group) {
|
||||
for (int i = 0; i != 3; ++i) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
@ -477,8 +446,7 @@ void MasterAttributes::WriteHDF5ExptimeArray(H5::H5File *fd, H5::Group *group) {
|
||||
}
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5GateDelayArray(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5GateDelayArray(H5::Group *group) {
|
||||
for (int i = 0; i != 3; ++i) {
|
||||
char c[1024]{};
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
@ -490,14 +458,14 @@ void MasterAttributes::WriteHDF5GateDelayArray(H5::H5File *fd,
|
||||
}
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5Gates(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5Gates(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset =
|
||||
group->createDataSet("Gates", H5::PredType::STD_U32LE, dataspace);
|
||||
dataset.write(&gates, H5::PredType::STD_U32LE);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5BurstMode(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5BurstMode(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::StrType strdatatype(H5::PredType::C_S1, 256);
|
||||
H5::DataSet dataset =
|
||||
@ -507,82 +475,77 @@ void MasterAttributes::WriteHDF5BurstMode(H5::H5File *fd, H5::Group *group) {
|
||||
dataset.write(c, strdatatype);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5AdcMask(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5AdcMask(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset =
|
||||
group->createDataSet("ADC Mask", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&adcmask, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5AnalogFlag(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5AnalogFlag(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Analog Flag", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&analog, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5AnalogSamples(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5AnalogSamples(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Analog Samples", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&analogSamples, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5DigitalFlag(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5DigitalFlag(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Digital Flag", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&digital, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5DigitalSamples(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5DigitalSamples(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Digital Samples", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&digitalSamples, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5DbitOffset(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5DbitOffset(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Dbit Offset", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&dbitoffset, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5DbitReorder(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5DbitReorder(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Dbit Reorder", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&dbitreorder, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5DbitList(H5::H5File *fd, H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5DbitList(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Dbit Bitset List", H5::PredType::STD_U64LE, dataspace);
|
||||
dataset.write(&dbitlist, H5::PredType::STD_U64LE);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5TransceiverMask(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5TransceiverMask(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Transceiver Mask", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&transceiverMask, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5TransceiverFlag(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5TransceiverFlag(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Transceiver Flag", H5::PredType::NATIVE_INT, dataspace);
|
||||
dataset.write(&transceiver, H5::PredType::NATIVE_INT);
|
||||
}
|
||||
|
||||
void MasterAttributes::WriteHDF5TransceiverSamples(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
void MasterAttributes::WriteHDF5TransceiverSamples(H5::Group *group) {
|
||||
H5::DataSpace dataspace = H5::DataSpace(H5S_SCALAR);
|
||||
H5::DataSet dataset = group->createDataSet(
|
||||
"Transceiver Samples", H5::PredType::NATIVE_INT, dataspace);
|
||||
@ -592,6 +555,13 @@ void MasterAttributes::WriteHDF5TransceiverSamples(H5::H5File *fd,
|
||||
|
||||
void MasterAttributes::GetJungfrauBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Receiver Rois");
|
||||
w->StartArray();
|
||||
for (const slsDetectorDefs::ROI &roi : rois) {
|
||||
std::string roi_str = ToString(roi);
|
||||
w->String(roi_str.c_str());
|
||||
}
|
||||
w->EndArray();
|
||||
w->Key("Exptime");
|
||||
w->String(ToString(exptime).c_str());
|
||||
w->Key("Period");
|
||||
@ -603,17 +573,24 @@ void MasterAttributes::GetJungfrauBinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteJungfrauHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5NumUDPInterfaces(fd, group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(fd, group);
|
||||
void MasterAttributes::WriteJungfrauHDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5ROIs(group);
|
||||
MasterAttributes::WriteHDF5Exptime(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5NumUDPInterfaces(group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetMoenchBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Receiver Rois");
|
||||
w->StartArray();
|
||||
for (const slsDetectorDefs::ROI &roi : rois) {
|
||||
std::string roi_str = ToString(roi);
|
||||
w->String(roi_str.c_str());
|
||||
}
|
||||
w->EndArray();
|
||||
w->Key("Exptime");
|
||||
w->String(ToString(exptime).c_str());
|
||||
w->Key("Period");
|
||||
@ -625,17 +602,24 @@ void MasterAttributes::GetMoenchBinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteMoenchHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5NumUDPInterfaces(fd, group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(fd, group);
|
||||
void MasterAttributes::WriteMoenchHDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5ROIs(group);
|
||||
MasterAttributes::WriteHDF5Exptime(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5NumUDPInterfaces(group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetEigerBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Receiver Rois");
|
||||
w->StartArray();
|
||||
for (const slsDetectorDefs::ROI &roi : rois) {
|
||||
std::string roi_str = ToString(roi);
|
||||
w->String(roi_str.c_str());
|
||||
}
|
||||
w->EndArray();
|
||||
w->Key("Dynamic Range");
|
||||
w->Uint(dynamicRange);
|
||||
w->Key("Ten Giga");
|
||||
@ -659,23 +643,30 @@ void MasterAttributes::GetEigerBinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteEigerHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5DynamicRange(fd, group);
|
||||
MasterAttributes::WriteHDF5TenGiga(fd, group);
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5ThresholdEnergy(fd, group);
|
||||
MasterAttributes::WriteHDF5SubExpTime(fd, group);
|
||||
MasterAttributes::WriteHDF5SubPeriod(fd, group);
|
||||
MasterAttributes::WriteHDF5SubQuad(fd, group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(fd, group);
|
||||
MasterAttributes::WriteHDF5RateCorrections(fd, group);
|
||||
void MasterAttributes::WriteEigerHDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5ROIs(group);
|
||||
MasterAttributes::WriteHDF5DynamicRange(group);
|
||||
MasterAttributes::WriteHDF5TenGiga(group);
|
||||
MasterAttributes::WriteHDF5Exptime(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5ThresholdEnergy(group);
|
||||
MasterAttributes::WriteHDF5SubExpTime(group);
|
||||
MasterAttributes::WriteHDF5SubPeriod(group);
|
||||
MasterAttributes::WriteHDF5SubQuad(group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(group);
|
||||
MasterAttributes::WriteHDF5RateCorrections(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetMythen3BinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Receiver Rois");
|
||||
w->StartArray();
|
||||
for (const slsDetectorDefs::ROI &roi : rois) {
|
||||
std::string roi_str = ToString(roi);
|
||||
w->String(roi_str.c_str());
|
||||
}
|
||||
w->EndArray();
|
||||
w->Key("Dynamic Range");
|
||||
w->Uint(dynamicRange);
|
||||
w->Key("Ten Giga");
|
||||
@ -699,21 +690,28 @@ void MasterAttributes::GetMythen3BinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteMythen3HDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5DynamicRange(fd, group);
|
||||
MasterAttributes::WriteHDF5TenGiga(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5CounterMask(fd, group);
|
||||
MasterAttributes::WriteHDF5ExptimeArray(fd, group);
|
||||
MasterAttributes::WriteHDF5GateDelayArray(fd, group);
|
||||
MasterAttributes::WriteHDF5Gates(fd, group);
|
||||
MasterAttributes::WriteHDF5ThresholdEnergies(fd, group);
|
||||
void MasterAttributes::WriteMythen3HDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5ROIs(group);
|
||||
MasterAttributes::WriteHDF5DynamicRange(group);
|
||||
MasterAttributes::WriteHDF5TenGiga(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5CounterMask(group);
|
||||
MasterAttributes::WriteHDF5ExptimeArray(group);
|
||||
MasterAttributes::WriteHDF5GateDelayArray(group);
|
||||
MasterAttributes::WriteHDF5Gates(group);
|
||||
MasterAttributes::WriteHDF5ThresholdEnergies(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetGotthard2BinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Receiver Rois");
|
||||
w->StartArray();
|
||||
for (const slsDetectorDefs::ROI &roi : rois) {
|
||||
std::string roi_str = ToString(roi);
|
||||
w->String(roi_str.c_str());
|
||||
}
|
||||
w->EndArray();
|
||||
w->Key("Exptime");
|
||||
w->String(ToString(exptime).c_str());
|
||||
w->Key("Period");
|
||||
@ -723,11 +721,11 @@ void MasterAttributes::GetGotthard2BinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteGotthard2HDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5BurstMode(fd, group);
|
||||
void MasterAttributes::WriteGotthard2HDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5ROIs(group);
|
||||
MasterAttributes::WriteHDF5Exptime(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5BurstMode(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -764,22 +762,21 @@ void MasterAttributes::GetCtbBinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteCtbHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5TenGiga(fd, group);
|
||||
MasterAttributes::WriteHDF5AdcMask(fd, group);
|
||||
MasterAttributes::WriteHDF5AnalogFlag(fd, group);
|
||||
MasterAttributes::WriteHDF5AnalogSamples(fd, group);
|
||||
MasterAttributes::WriteHDF5DigitalFlag(fd, group);
|
||||
MasterAttributes::WriteHDF5DigitalSamples(fd, group);
|
||||
MasterAttributes::WriteHDF5DbitOffset(fd, group);
|
||||
MasterAttributes::WriteHDF5DbitReorder(fd, group);
|
||||
MasterAttributes::WriteHDF5DbitList(fd, group);
|
||||
MasterAttributes::WriteHDF5TransceiverMask(fd, group);
|
||||
MasterAttributes::WriteHDF5TransceiverFlag(fd, group);
|
||||
MasterAttributes::WriteHDF5TransceiverSamples(fd, group);
|
||||
void MasterAttributes::WriteCtbHDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5TenGiga(group);
|
||||
MasterAttributes::WriteHDF5AdcMask(group);
|
||||
MasterAttributes::WriteHDF5AnalogFlag(group);
|
||||
MasterAttributes::WriteHDF5AnalogSamples(group);
|
||||
MasterAttributes::WriteHDF5DigitalFlag(group);
|
||||
MasterAttributes::WriteHDF5DigitalSamples(group);
|
||||
MasterAttributes::WriteHDF5DbitOffset(group);
|
||||
MasterAttributes::WriteHDF5DbitReorder(group);
|
||||
MasterAttributes::WriteHDF5DbitList(group);
|
||||
MasterAttributes::WriteHDF5TransceiverMask(group);
|
||||
MasterAttributes::WriteHDF5TransceiverFlag(group);
|
||||
MasterAttributes::WriteHDF5TransceiverSamples(group);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -814,21 +811,20 @@ void MasterAttributes::GetXilinxCtbBinaryAttributes(
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteXilinxCtbHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5AdcMask(fd, group);
|
||||
MasterAttributes::WriteHDF5AnalogFlag(fd, group);
|
||||
MasterAttributes::WriteHDF5AnalogSamples(fd, group);
|
||||
MasterAttributes::WriteHDF5DigitalFlag(fd, group);
|
||||
MasterAttributes::WriteHDF5DigitalSamples(fd, group);
|
||||
MasterAttributes::WriteHDF5DbitOffset(fd, group);
|
||||
MasterAttributes::WriteHDF5DbitReorder(fd, group);
|
||||
MasterAttributes::WriteHDF5DbitList(fd, group);
|
||||
MasterAttributes::WriteHDF5TransceiverMask(fd, group);
|
||||
MasterAttributes::WriteHDF5TransceiverFlag(fd, group);
|
||||
MasterAttributes::WriteHDF5TransceiverSamples(fd, group);
|
||||
void MasterAttributes::WriteXilinxCtbHDF5Attributes(H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(group);
|
||||
MasterAttributes::WriteHDF5Period(group);
|
||||
MasterAttributes::WriteHDF5AdcMask(group);
|
||||
MasterAttributes::WriteHDF5AnalogFlag(group);
|
||||
MasterAttributes::WriteHDF5AnalogSamples(group);
|
||||
MasterAttributes::WriteHDF5DigitalFlag(group);
|
||||
MasterAttributes::WriteHDF5DigitalSamples(group);
|
||||
MasterAttributes::WriteHDF5DbitOffset(group);
|
||||
MasterAttributes::WriteHDF5DbitReorder(group);
|
||||
MasterAttributes::WriteHDF5DbitList(group);
|
||||
MasterAttributes::WriteHDF5TransceiverMask(group);
|
||||
MasterAttributes::WriteHDF5TransceiverFlag(group);
|
||||
MasterAttributes::WriteHDF5TransceiverSamples(group);
|
||||
}
|
||||
#endif
|
||||
} // namespace sls
|
||||
|
@ -57,7 +57,7 @@ class MasterAttributes {
|
||||
uint32_t transceiverMask{0};
|
||||
uint32_t transceiver{0};
|
||||
uint32_t transceiverSamples{0};
|
||||
slsDetectorDefs::ROI receiverRoi{};
|
||||
std::vector<slsDetectorDefs::ROI> rois{};
|
||||
uint32_t counterMask{0};
|
||||
std::array<ns, 3> exptimeArray{};
|
||||
std::array<ns, 3> gateDelayArray{};
|
||||
@ -80,77 +80,78 @@ class MasterAttributes {
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteCommonHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteFinalHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5Exptime(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5Period(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5DynamicRange(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5TenGiga(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5NumUDPInterfaces(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5ReadNRows(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5ThresholdEnergy(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5ThresholdEnergies(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5SubExpTime(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5SubPeriod(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5SubQuad(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5RateCorrections(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5CounterMask(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5ExptimeArray(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5GateDelayArray(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5Gates(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5BurstMode(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5AdcMask(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5AnalogFlag(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5AnalogSamples(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5DigitalFlag(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5DigitalSamples(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5DbitOffset(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5DbitList(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5DbitReorder(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5TransceiverMask(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5TransceiverFlag(H5::H5File *fd, H5::Group *group);
|
||||
void WriteHDF5TransceiverSamples(H5::H5File *fd, H5::Group *group);
|
||||
void WriteFinalHDF5Attributes(H5::Group *group);
|
||||
void WriteHDF5ROIs(H5::Group *group);
|
||||
void WriteHDF5Exptime(H5::Group *group);
|
||||
void WriteHDF5Period(H5::Group *group);
|
||||
void WriteHDF5DynamicRange(H5::Group *group);
|
||||
void WriteHDF5TenGiga(H5::Group *group);
|
||||
void WriteHDF5NumUDPInterfaces(H5::Group *group);
|
||||
void WriteHDF5ReadNRows(H5::Group *group);
|
||||
void WriteHDF5ThresholdEnergy(H5::Group *group);
|
||||
void WriteHDF5ThresholdEnergies(H5::Group *group);
|
||||
void WriteHDF5SubExpTime(H5::Group *group);
|
||||
void WriteHDF5SubPeriod(H5::Group *group);
|
||||
void WriteHDF5SubQuad(H5::Group *group);
|
||||
void WriteHDF5RateCorrections(H5::Group *group);
|
||||
void WriteHDF5CounterMask(H5::Group *group);
|
||||
void WriteHDF5ExptimeArray(H5::Group *group);
|
||||
void WriteHDF5GateDelayArray(H5::Group *group);
|
||||
void WriteHDF5Gates(H5::Group *group);
|
||||
void WriteHDF5BurstMode(H5::Group *group);
|
||||
void WriteHDF5AdcMask(H5::Group *group);
|
||||
void WriteHDF5AnalogFlag(H5::Group *group);
|
||||
void WriteHDF5AnalogSamples(H5::Group *group);
|
||||
void WriteHDF5DigitalFlag(H5::Group *group);
|
||||
void WriteHDF5DigitalSamples(H5::Group *group);
|
||||
void WriteHDF5DbitOffset(H5::Group *group);
|
||||
void WriteHDF5DbitList(H5::Group *group);
|
||||
void WriteHDF5DbitReorder(H5::Group *group);
|
||||
void WriteHDF5TransceiverMask(H5::Group *group);
|
||||
void WriteHDF5TransceiverFlag(H5::Group *group);
|
||||
void WriteHDF5TransceiverSamples(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void GetJungfrauBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteJungfrauHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteJungfrauHDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void GetEigerBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteEigerHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteEigerHDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void GetMythen3BinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteMythen3HDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteMythen3HDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void GetGotthard2BinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteGotthard2HDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteGotthard2HDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void GetMoenchBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteMoenchHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteMoenchHDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void
|
||||
GetCtbBinaryAttributes(rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteCtbHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteCtbHDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
|
||||
void GetXilinxCtbBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w);
|
||||
#ifdef HDF5C
|
||||
void WriteXilinxCtbHDF5Attributes(H5::H5File *fd, H5::Group *group);
|
||||
void WriteXilinxCtbHDF5Attributes(H5::Group *group);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user