mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-06 18:10:40 +02:00
Removed multiSlsDetector dependency from slsDetector (#41)
* WIP * removed multiSlsDetector dependency from slsDetector * removed comment * review changes
This commit is contained in:
parent
b63ec9d84a
commit
2c453fc1be
@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include "ClientSocket.h"
|
||||
#include "SharedMemory.h"
|
||||
#include "logger.h"
|
||||
@ -7,20 +6,14 @@
|
||||
#include "network_utils.h"
|
||||
#include "FixedCapacityContainer.h"
|
||||
|
||||
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
|
||||
|
||||
class multiSlsDetector;
|
||||
class ServerInterface;
|
||||
|
||||
|
||||
#define SLS_SHMVERSION 0x190515
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @short structure allocated in shared memory to store detector settings for IPC and cache
|
||||
*/
|
||||
@ -365,16 +358,6 @@ class slsDetector : public virtual slsDetectorDefs{
|
||||
|
||||
int sendToReceiver(int fnum);
|
||||
|
||||
/**
|
||||
* Free shared memory without creating objects
|
||||
* If this is called, must take care to update
|
||||
* multiSlsDetectors thisMultiDetector->numberofDetectors
|
||||
* avoiding creating the constructor classes and mapping
|
||||
* @param multi_id multi detector Id
|
||||
* @param slsId slsDetectorId or position of slsDetector in detectors list
|
||||
*/
|
||||
static void freeSharedMemory(int multi_id, int slsId);
|
||||
|
||||
/**
|
||||
* Free shared memory and delete shared memory structure
|
||||
* occupied by the sharedSlsDetector structure
|
||||
@ -593,22 +576,11 @@ class slsDetector : public virtual slsDetectorDefs{
|
||||
*/
|
||||
int updateDetector();
|
||||
|
||||
/**
|
||||
* Write current configuration to a file
|
||||
* calls writeConfigurationFile giving it a stream to write to
|
||||
* @param fname configuration file name
|
||||
* @param m multiSlsDetector reference to parse commands
|
||||
* @returns OK or FAIL
|
||||
/**
|
||||
* Get detector specific commands to write into config file
|
||||
* @returns vector of strings with commands
|
||||
*/
|
||||
int writeConfigurationFile(const std::string &fname, multiSlsDetector *m);
|
||||
|
||||
/**
|
||||
* Write current configuration to a stream
|
||||
* @param outfile outstream
|
||||
* @param m multiSlsDetector reference to parse commands
|
||||
* @returns OK or FAIL
|
||||
*/
|
||||
int writeConfigurationFile(std::ofstream &outfile, multiSlsDetector *m);
|
||||
std::vector<std::string> getConfigFileCommands();
|
||||
|
||||
/**
|
||||
* Get detector settings
|
||||
|
@ -216,7 +216,10 @@ std::vector<int64_t> multiSlsDetector::getDetectorNumber() {
|
||||
void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
slsDetector::freeSharedMemory(multiId, detPos);
|
||||
SharedMemory<sharedSlsDetector> temp_shm(multiId, detPos);
|
||||
if (temp_shm.IsExisting()) {
|
||||
temp_shm.RemoveSharedMemory();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -802,59 +805,25 @@ void multiSlsDetector::readConfigurationFile(const std::string &fname) {
|
||||
|
||||
int multiSlsDetector::writeConfigurationFile(const std::string &fname) {
|
||||
// TODO! make exception safe!
|
||||
const std::vector<std::string> names = {"detsizechan", "hostname", "outdir", "threaded"};
|
||||
|
||||
int ret = OK, ret1 = OK;
|
||||
const std::vector<std::string> header{"detsizechan", "hostname"};
|
||||
std::ofstream outfile;
|
||||
size_t iline = 0;
|
||||
|
||||
outfile.open(fname.c_str(), std::ios_base::out);
|
||||
if (outfile.is_open()) {
|
||||
char *args[100];
|
||||
for (auto &arg : args) {
|
||||
arg = new char[1000];
|
||||
}
|
||||
|
||||
auto cmd = slsDetectorCommand(this);
|
||||
|
||||
// complete size of detector
|
||||
FILE_LOG(logINFO) << "Command to write: " << iline << " " << names[iline];
|
||||
strcpy(args[0], names[iline].c_str());
|
||||
outfile << names[iline] << " " << cmd.executeLine(1, args, GET_ACTION) << std::endl;
|
||||
++iline;
|
||||
|
||||
// hostname of the detectors
|
||||
FILE_LOG(logINFO) << "Command to write: " << iline << " " << names[iline];
|
||||
strcpy(args[0], names[iline].c_str());
|
||||
outfile << names[iline] << " " << cmd.executeLine(1, args, GET_ACTION) << std::endl;
|
||||
++iline;
|
||||
for(const auto& cmd : header)
|
||||
multiSlsDetectorClient(cmd, GET_ACTION, this, outfile);
|
||||
|
||||
// single detector configuration
|
||||
for (auto & detector : detectors) {
|
||||
outfile << std::endl;
|
||||
ret1 = detector->writeConfigurationFile(outfile, this);
|
||||
if (ret1 == FAIL) {
|
||||
ret = FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
outfile << std::endl;
|
||||
// other configurations
|
||||
while (iline < names.size()) {
|
||||
FILE_LOG(logINFO) << "Command to write:" << iline << " " << names[iline];
|
||||
strcpy(args[0], names[iline].c_str());
|
||||
outfile << names[iline] << " " << cmd.executeLine(1, args, GET_ACTION) << std::endl;
|
||||
++iline;
|
||||
}
|
||||
outfile.close();
|
||||
FILE_LOG(logDEBUG1) << "wrote " << iline << " lines to configuration file ";
|
||||
for (auto &arg : args) {
|
||||
delete[] arg;
|
||||
outfile << '\n';
|
||||
auto det_commands = detector->getConfigFileCommands();
|
||||
for(const auto& cmd : det_commands)
|
||||
multiSlsDetectorClient(cmd, GET_ACTION, this, outfile);
|
||||
}
|
||||
} else {
|
||||
throw RuntimeError("Could not open configuration file " + fname + " for writing");
|
||||
}
|
||||
return ret;
|
||||
return OK;
|
||||
}
|
||||
|
||||
slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int detPos) {
|
||||
|
@ -2,7 +2,6 @@
|
||||
#include "ClientSocket.h"
|
||||
#include "SharedMemory.h"
|
||||
#include "file_utils.h"
|
||||
#include "multiSlsDetector.h"
|
||||
#include "network_utils.h"
|
||||
#include "slsDetectorCommand.h"
|
||||
#include "sls_detector_exceptions.h"
|
||||
@ -37,7 +36,7 @@ slsDetector::slsDetector(detectorType type, int multi_id, int det_id,
|
||||
FILE_LOG(logWARNING) << "This shared memory should have been "
|
||||
"deleted before! "
|
||||
<< shm.GetName() << ". Freeing it again";
|
||||
freeSharedMemory(multi_id, det_id);
|
||||
shm.RemoveSharedMemory();
|
||||
}
|
||||
|
||||
initSharedMemory(type, multi_id, verify);
|
||||
@ -245,13 +244,6 @@ int slsDetector::sendToReceiver(int fnum) {
|
||||
return sendToReceiver(fnum, nullptr, 0, nullptr, 0);
|
||||
}
|
||||
|
||||
void slsDetector::freeSharedMemory(int multi_id, int slsId) {
|
||||
SharedMemory<sharedSlsDetector> temp_shm(multi_id, slsId);
|
||||
if (temp_shm.IsExisting()) {
|
||||
temp_shm.RemoveSharedMemory();
|
||||
}
|
||||
}
|
||||
|
||||
void slsDetector::freeSharedMemory() {
|
||||
if (shm.IsExisting()) {
|
||||
shm.RemoveSharedMemory();
|
||||
@ -948,105 +940,58 @@ int slsDetector::updateDetector() {
|
||||
return ret;
|
||||
}
|
||||
|
||||
int slsDetector::writeConfigurationFile(const std::string &fname,
|
||||
multiSlsDetector *m) {
|
||||
int iline = 0;
|
||||
std::ofstream outfile;
|
||||
outfile.open(fname.c_str(), std::ios_base::out);
|
||||
if (outfile.is_open()) {
|
||||
iline = writeConfigurationFile(outfile, m);
|
||||
outfile.close();
|
||||
} else {
|
||||
throw RuntimeError("Could not open configuration file for writing");
|
||||
}
|
||||
FILE_LOG(logINFO) << iline << " lines written to configuration file";
|
||||
return OK;
|
||||
}
|
||||
std::vector<std::string> slsDetector::getConfigFileCommands() {
|
||||
std::vector<std::string> base{"hostname", "port", "stopport",
|
||||
"settingsdir", "fpath", "lock",
|
||||
"zmqport", "rx_zmqport", "zmqip",
|
||||
"rx_zmqip", "rx_tcpport"};
|
||||
|
||||
int slsDetector::writeConfigurationFile(std::ofstream &outfile,
|
||||
multiSlsDetector *m) {
|
||||
|
||||
FILE_LOG(logDEBUG1) << "Write configuration file";
|
||||
|
||||
std::vector<std::string> names;
|
||||
// common config
|
||||
names.emplace_back("hostname");
|
||||
names.emplace_back("port");
|
||||
names.emplace_back("stopport");
|
||||
names.emplace_back("settingsdir");
|
||||
names.emplace_back("ffdir");
|
||||
names.emplace_back("outdir");
|
||||
names.emplace_back("lock");
|
||||
// receiver config
|
||||
names.emplace_back("zmqport");
|
||||
names.emplace_back("rx_zmqport");
|
||||
names.emplace_back("zmqip");
|
||||
names.emplace_back("rx_zmqip");
|
||||
names.emplace_back("rx_tcpport");
|
||||
|
||||
// detector specific config
|
||||
switch (shm()->myDetectorType) {
|
||||
case GOTTHARD:
|
||||
names.emplace_back("detectormac");
|
||||
names.emplace_back("detectorip");
|
||||
names.emplace_back("rx_udpport");
|
||||
names.emplace_back("rx_udpip");
|
||||
names.emplace_back("rx_udpmac");
|
||||
names.emplace_back("rx_hostname");
|
||||
|
||||
names.emplace_back("extsig:0");
|
||||
names.emplace_back("vhighvoltage");
|
||||
base.emplace_back("detectormac");
|
||||
base.emplace_back("detectorip");
|
||||
base.emplace_back("rx_udpport");
|
||||
base.emplace_back("rx_udpip");
|
||||
base.emplace_back("rx_udpmac");
|
||||
base.emplace_back("extsig");
|
||||
break;
|
||||
case EIGER:
|
||||
names.emplace_back("detectormac");
|
||||
names.emplace_back("detectorip");
|
||||
names.emplace_back("rx_udpport");
|
||||
names.emplace_back("rx_udpport2");
|
||||
names.emplace_back("rx_udpip");
|
||||
names.emplace_back("rx_udpmac");
|
||||
names.emplace_back("rx_hostname");
|
||||
|
||||
names.emplace_back("vhighvoltage");
|
||||
names.emplace_back("trimen");
|
||||
names.emplace_back("iodelay");
|
||||
names.emplace_back("tengiga");
|
||||
base.emplace_back("detectormac");
|
||||
base.emplace_back("detectorip");
|
||||
base.emplace_back("rx_udpport");
|
||||
base.emplace_back("rx_udpport2");
|
||||
base.emplace_back("rx_udpip");
|
||||
base.emplace_back("rx_udpmac");
|
||||
base.emplace_back("trimen");
|
||||
base.emplace_back("iodelay");
|
||||
base.emplace_back("tengiga");
|
||||
break;
|
||||
case JUNGFRAU:
|
||||
names.emplace_back("detectormac");
|
||||
names.emplace_back("detectormac2");
|
||||
names.emplace_back("detectorip");
|
||||
names.emplace_back("detectorip2");
|
||||
names.emplace_back("rx_udpport");
|
||||
names.emplace_back("rx_udpport2");
|
||||
names.emplace_back("rx_udpip");
|
||||
names.emplace_back("rx_udpip2");
|
||||
names.emplace_back("rx_udpmac");
|
||||
names.emplace_back("rx_udpmac2");
|
||||
names.emplace_back("rx_hostname");
|
||||
|
||||
names.emplace_back("powerchip");
|
||||
names.emplace_back("vhighvoltage");
|
||||
base.emplace_back("detectormac");
|
||||
base.emplace_back("detectormac2");
|
||||
base.emplace_back("detectorip");
|
||||
base.emplace_back("detectorip2");
|
||||
base.emplace_back("rx_udpport");
|
||||
base.emplace_back("rx_udpport2");
|
||||
base.emplace_back("rx_udpip");
|
||||
base.emplace_back("rx_udpip2");
|
||||
base.emplace_back("rx_udpmac");
|
||||
base.emplace_back("rx_udpmac2");
|
||||
base.emplace_back("powerchip");
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
names.emplace_back("detectormac");
|
||||
names.emplace_back("detectorip");
|
||||
names.emplace_back("rx_udpport");
|
||||
names.emplace_back("rx_udpip");
|
||||
names.emplace_back("rx_udpmac");
|
||||
names.emplace_back("rx_hostname");
|
||||
|
||||
names.emplace_back("vhighvoltage");
|
||||
base.emplace_back("detectormac");
|
||||
base.emplace_back("detectorip");
|
||||
base.emplace_back("rx_udpport");
|
||||
base.emplace_back("rx_udpip");
|
||||
base.emplace_back("rx_udpmac");
|
||||
break;
|
||||
case MOENCH:
|
||||
names.emplace_back("detectormac");
|
||||
names.emplace_back("detectorip");
|
||||
names.emplace_back("rx_udpport");
|
||||
names.emplace_back("rx_udpip");
|
||||
names.emplace_back("rx_udpmac");
|
||||
names.emplace_back("rx_hostname");
|
||||
|
||||
names.emplace_back("powerchip");
|
||||
names.emplace_back("vhighvoltage");
|
||||
base.emplace_back("detectormac");
|
||||
base.emplace_back("detectorip");
|
||||
base.emplace_back("rx_udpport");
|
||||
base.emplace_back("rx_udpip");
|
||||
base.emplace_back("rx_udpmac");
|
||||
break;
|
||||
default:
|
||||
throw RuntimeError(
|
||||
@ -1054,18 +999,19 @@ int slsDetector::writeConfigurationFile(std::ofstream &outfile,
|
||||
std::to_string(shm()->myDetectorType));
|
||||
}
|
||||
|
||||
names.emplace_back("r_readfreq");
|
||||
names.emplace_back("rx_udpsocksize");
|
||||
names.emplace_back("rx_realudpsocksize");
|
||||
|
||||
auto cmd = slsDetectorCommand(m);
|
||||
for (auto &name : names) {
|
||||
char *args[] = {const_cast<char *>(name.c_str())};
|
||||
outfile << detId << ":";
|
||||
outfile << name << " " << cmd.executeLine(1, args, GET_ACTION)
|
||||
<< std::endl;
|
||||
base.emplace_back("vhighvoltage");
|
||||
base.emplace_back("rx_hostname");
|
||||
base.emplace_back("r_readfreq");
|
||||
base.emplace_back("rx_udpsocksize");
|
||||
base.emplace_back("rx_realudpsocksize");
|
||||
|
||||
std::vector<std::string> commands;
|
||||
for (const auto &cmd : base) {
|
||||
std::ostringstream os;
|
||||
os << detId << ':' << cmd;
|
||||
commands.emplace_back(os.str());
|
||||
}
|
||||
return OK;
|
||||
return commands;
|
||||
}
|
||||
|
||||
slsDetectorDefs::detectorSettings slsDetector::getSettings() {
|
||||
|
@ -1,263 +1,263 @@
|
||||
|
||||
#include "catch.hpp"
|
||||
#include "container_utils.h"
|
||||
#include "slsDetector.h"
|
||||
#include "sls_detector_defs.h"
|
||||
#include "string_utils.h"
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
// #include "catch.hpp"
|
||||
// #include "container_utils.h"
|
||||
// #include "slsDetector.h"
|
||||
// #include "sls_detector_defs.h"
|
||||
// #include "string_utils.h"
|
||||
// #include <algorithm>
|
||||
// #include <iostream>
|
||||
|
||||
|
||||
|
||||
TEST_CASE("Set and get trimen", "[detector]") {
|
||||
// Free shared memory to be sure that we start in a clean state
|
||||
slsDetector::freeSharedMemory(20, 20);
|
||||
// TEST_CASE("Set and get trimen", "[detector]") {
|
||||
// // Free shared memory to be sure that we start in a clean state
|
||||
// slsDetector::freeSharedMemory(20, 20);
|
||||
|
||||
// Create a detector and check that the type is set correctly
|
||||
slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
CHECK(d.getDetectorTypeAsEnum() == slsDetectorDefs::detectorType::EIGER);
|
||||
// // Create a detector and check that the type is set correctly
|
||||
// slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
// CHECK(d.getDetectorTypeAsEnum() == slsDetectorDefs::detectorType::EIGER);
|
||||
|
||||
// At the beginning there should be no trimen set
|
||||
auto res = d.getTrimEn();
|
||||
CHECK(res.empty());
|
||||
// // At the beginning there should be no trimen set
|
||||
// auto res = d.getTrimEn();
|
||||
// CHECK(res.empty());
|
||||
|
||||
std::vector<int> energies{5200, 6400, 8500, 9900, 12000};
|
||||
d.setTrimEn(energies);
|
||||
auto res2 = d.getTrimEn();
|
||||
// std::vector<int> energies{5200, 6400, 8500, 9900, 12000};
|
||||
// d.setTrimEn(energies);
|
||||
// auto res2 = d.getTrimEn();
|
||||
|
||||
// Check that the size and every element matches what we set
|
||||
CHECK(res2.size() == energies.size());
|
||||
for (size_t i = 0; i != res2.size(); ++i)
|
||||
CHECK(res2[i] == energies[i]);
|
||||
// // Check that the size and every element matches what we set
|
||||
// CHECK(res2.size() == energies.size());
|
||||
// for (size_t i = 0; i != res2.size(); ++i)
|
||||
// CHECK(res2[i] == energies[i]);
|
||||
|
||||
// Setting trimen with too many vales throws an exception and keeps the
|
||||
// old values
|
||||
std::vector<int> too_many(150, 1000);
|
||||
CHECK_THROWS(d.setTrimEn(too_many));
|
||||
auto res3 = d.getTrimEn();
|
||||
CHECK(res3.size() == energies.size());
|
||||
for (size_t i = 0; i != res3.size(); ++i)
|
||||
CHECK(res3[i] == energies[i]);
|
||||
// // Setting trimen with too many vales throws an exception and keeps the
|
||||
// // old values
|
||||
// std::vector<int> too_many(150, 1000);
|
||||
// CHECK_THROWS(d.setTrimEn(too_many));
|
||||
// auto res3 = d.getTrimEn();
|
||||
// CHECK(res3.size() == energies.size());
|
||||
// for (size_t i = 0; i != res3.size(); ++i)
|
||||
// CHECK(res3[i] == energies[i]);
|
||||
|
||||
// Setting trimen without arguments resets to zero
|
||||
d.setTrimEn();
|
||||
CHECK(d.getTrimEn().empty());
|
||||
// // Setting trimen without arguments resets to zero
|
||||
// d.setTrimEn();
|
||||
// CHECK(d.getTrimEn().empty());
|
||||
|
||||
// Clean up before next test
|
||||
d.freeSharedMemory();
|
||||
}
|
||||
// // Clean up before next test
|
||||
// d.freeSharedMemory();
|
||||
// }
|
||||
|
||||
TEST_CASE("Set additional JSON header", "[detector]") {
|
||||
slsDetector::freeSharedMemory(20, 20);
|
||||
slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
auto header = d.getAdditionalJsonHeader();
|
||||
CHECK(header.empty());
|
||||
// TEST_CASE("Set additional JSON header", "[detector]") {
|
||||
// slsDetector::freeSharedMemory(20, 20);
|
||||
// slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
// auto header = d.getAdditionalJsonHeader();
|
||||
// CHECK(header.empty());
|
||||
|
||||
// The header set is not validated
|
||||
d.setAdditionalJsonHeader("any header");
|
||||
header = d.getAdditionalJsonHeader();
|
||||
CHECK(header == "any header");
|
||||
// // The header set is not validated
|
||||
// d.setAdditionalJsonHeader("any header");
|
||||
// header = d.getAdditionalJsonHeader();
|
||||
// CHECK(header == "any header");
|
||||
|
||||
// make sure reset works
|
||||
d.setAdditionalJsonHeader("");
|
||||
CHECK(d.getAdditionalJsonHeader().empty());
|
||||
// // make sure reset works
|
||||
// d.setAdditionalJsonHeader("");
|
||||
// CHECK(d.getAdditionalJsonHeader().empty());
|
||||
|
||||
// Setting and getting one parameter
|
||||
d.setAdditionalJsonParameter("exptime", "5");
|
||||
CHECK(d.getAdditionalJsonParameter("exptime") == "5");
|
||||
CHECK(d.getAdditionalJsonHeader() == "\"exptime\":5");
|
||||
// // Setting and getting one parameter
|
||||
// d.setAdditionalJsonParameter("exptime", "5");
|
||||
// CHECK(d.getAdditionalJsonParameter("exptime") == "5");
|
||||
// CHECK(d.getAdditionalJsonHeader() == "\"exptime\":5");
|
||||
|
||||
// Making sure setting another paramer does not mess up
|
||||
// the first
|
||||
d.setAdditionalJsonParameter("gain", "low");
|
||||
CHECK(d.getAdditionalJsonParameter("exptime") == "5");
|
||||
CHECK(d.getAdditionalJsonParameter("gain") == "low");
|
||||
CHECK(d.getAdditionalJsonHeader() == "\"exptime\":5,\"gain\":\"low\"");
|
||||
// // Making sure setting another paramer does not mess up
|
||||
// // the first
|
||||
// d.setAdditionalJsonParameter("gain", "low");
|
||||
// CHECK(d.getAdditionalJsonParameter("exptime") == "5");
|
||||
// CHECK(d.getAdditionalJsonParameter("gain") == "low");
|
||||
// CHECK(d.getAdditionalJsonHeader() == "\"exptime\":5,\"gain\":\"low\"");
|
||||
|
||||
// Change a value
|
||||
d.setAdditionalJsonParameter("exptime", "90");
|
||||
CHECK(d.getAdditionalJsonParameter("exptime") == "90");
|
||||
CHECK(d.getAdditionalJsonHeader() == "\"exptime\":90,\"gain\":\"low\"");
|
||||
// // Change a value
|
||||
// d.setAdditionalJsonParameter("exptime", "90");
|
||||
// CHECK(d.getAdditionalJsonParameter("exptime") == "90");
|
||||
// CHECK(d.getAdditionalJsonHeader() == "\"exptime\":90,\"gain\":\"low\"");
|
||||
|
||||
// Ask for a key that does not exists
|
||||
// TODO!(Erik) Is an empty string the right return or should we throw
|
||||
CHECK(d.getAdditionalJsonParameter("somerandomkey").empty());
|
||||
// // Ask for a key that does not exists
|
||||
// // TODO!(Erik) Is an empty string the right return or should we throw
|
||||
// CHECK(d.getAdditionalJsonParameter("somerandomkey").empty());
|
||||
|
||||
// Throws if value or key is empty
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("somekey", ""));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("", "parameter"));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("", ""));
|
||||
// // Throws if value or key is empty
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("somekey", ""));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("", "parameter"));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("", ""));
|
||||
|
||||
// Throws if key or value has illegal char
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("mykey,", "5"));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("some:key", "9"));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("some\"key", "1"));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("key", "value:"));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("key", "va,lue"));
|
||||
CHECK_THROWS(d.setAdditionalJsonParameter("key", "va\"l\"ue"));
|
||||
// // Throws if key or value has illegal char
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("mykey,", "5"));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("some:key", "9"));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("some\"key", "1"));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("key", "value:"));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("key", "va,lue"));
|
||||
// CHECK_THROWS(d.setAdditionalJsonParameter("key", "va\"l\"ue"));
|
||||
|
||||
d.freeSharedMemory();
|
||||
}
|
||||
// d.freeSharedMemory();
|
||||
// }
|
||||
|
||||
TEST_CASE("Set ROI", "[detector]") {
|
||||
using ROI = slsDetectorDefs::ROI;
|
||||
// TEST_CASE("Set ROI", "[detector]") {
|
||||
// using ROI = slsDetectorDefs::ROI;
|
||||
|
||||
slsDetector::freeSharedMemory(20,20);
|
||||
slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
// slsDetector::freeSharedMemory(20,20);
|
||||
// slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
|
||||
int n{0};
|
||||
d.getROI(n);
|
||||
CHECK(n == 0);
|
||||
CHECK(d.getNRoi() == 0);
|
||||
// int n{0};
|
||||
// d.getROI(n);
|
||||
// CHECK(n == 0);
|
||||
// CHECK(d.getNRoi() == 0);
|
||||
|
||||
// set one ROI
|
||||
ROI r;
|
||||
r.xmin = 5;
|
||||
r.xmax = 100;
|
||||
r.ymin = 10;
|
||||
r.ymax = 300;
|
||||
d.setROI(1, &r);
|
||||
// // set one ROI
|
||||
// ROI r;
|
||||
// r.xmin = 5;
|
||||
// r.xmax = 100;
|
||||
// r.ymin = 10;
|
||||
// r.ymax = 300;
|
||||
// d.setROI(1, &r);
|
||||
|
||||
auto res2 = d.getROI(n);
|
||||
CHECK(n == 1);
|
||||
CHECK(d.getNRoi() == 1);
|
||||
// auto res2 = d.getROI(n);
|
||||
// CHECK(n == 1);
|
||||
// CHECK(d.getNRoi() == 1);
|
||||
|
||||
CHECK(res2->xmin == 5);
|
||||
CHECK(res2->xmax == 100);
|
||||
CHECK(res2->ymin == 10);
|
||||
CHECK(res2->ymax == 300);
|
||||
// CHECK(res2->xmin == 5);
|
||||
// CHECK(res2->xmax == 100);
|
||||
// CHECK(res2->ymin == 10);
|
||||
// CHECK(res2->ymax == 300);
|
||||
|
||||
d.freeSharedMemory();
|
||||
}
|
||||
// d.freeSharedMemory();
|
||||
// }
|
||||
|
||||
TEST_CASE("Set multiple ROIs", "[detector]") {
|
||||
using ROI = slsDetectorDefs::ROI;
|
||||
// TEST_CASE("Set multiple ROIs", "[detector]") {
|
||||
// using ROI = slsDetectorDefs::ROI;
|
||||
|
||||
slsDetector::freeSharedMemory(20, 20);
|
||||
slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
// slsDetector::freeSharedMemory(20, 20);
|
||||
// slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
|
||||
// set one ROI
|
||||
constexpr int n = 3;
|
||||
ROI r[n];
|
||||
r[0].xmin = 500;
|
||||
r[0].xmax = 60000;
|
||||
r[0].ymin = 100;
|
||||
r[0].ymax = 800;
|
||||
// // set one ROI
|
||||
// constexpr int n = 3;
|
||||
// ROI r[n];
|
||||
// r[0].xmin = 500;
|
||||
// r[0].xmax = 60000;
|
||||
// r[0].ymin = 100;
|
||||
// r[0].ymax = 800;
|
||||
|
||||
r[1].xmin = 2;
|
||||
r[1].xmax = 100;
|
||||
r[1].ymin = 1;
|
||||
r[1].ymax = 300;
|
||||
// r[1].xmin = 2;
|
||||
// r[1].xmax = 100;
|
||||
// r[1].ymin = 1;
|
||||
// r[1].ymax = 300;
|
||||
|
||||
r[2].xmin = 200;
|
||||
r[2].xmax = 300;
|
||||
r[2].ymin = 15;
|
||||
r[2].ymax = 307;
|
||||
d.setROI(n, r);
|
||||
// r[2].xmin = 200;
|
||||
// r[2].xmax = 300;
|
||||
// r[2].ymin = 15;
|
||||
// r[2].ymax = 307;
|
||||
// d.setROI(n, r);
|
||||
|
||||
int n_roi{0};
|
||||
auto res = d.getROI(n_roi);
|
||||
CHECK(n_roi == n);
|
||||
CHECK(d.getNRoi() == n);
|
||||
// int n_roi{0};
|
||||
// auto res = d.getROI(n_roi);
|
||||
// CHECK(n_roi == n);
|
||||
// CHECK(d.getNRoi() == n);
|
||||
|
||||
CHECK(res[0].xmin == 2);
|
||||
CHECK(res[0].xmax == 100);
|
||||
CHECK(res[0].ymin == 1);
|
||||
CHECK(res[0].ymax == 300);
|
||||
// CHECK(res[0].xmin == 2);
|
||||
// CHECK(res[0].xmax == 100);
|
||||
// CHECK(res[0].ymin == 1);
|
||||
// CHECK(res[0].ymax == 300);
|
||||
|
||||
CHECK(res[1].xmin == 200);
|
||||
CHECK(res[1].xmax == 300);
|
||||
CHECK(res[1].ymin == 15);
|
||||
CHECK(res[1].ymax == 307);
|
||||
// CHECK(res[1].xmin == 200);
|
||||
// CHECK(res[1].xmax == 300);
|
||||
// CHECK(res[1].ymin == 15);
|
||||
// CHECK(res[1].ymax == 307);
|
||||
|
||||
CHECK(res[2].xmin == 500);
|
||||
CHECK(res[2].xmax == 60000);
|
||||
CHECK(res[2].ymin == 100);
|
||||
CHECK(res[2].ymax == 800);
|
||||
// CHECK(res[2].xmin == 500);
|
||||
// CHECK(res[2].xmax == 60000);
|
||||
// CHECK(res[2].ymin == 100);
|
||||
// CHECK(res[2].ymax == 800);
|
||||
|
||||
d.freeSharedMemory();
|
||||
}
|
||||
// d.freeSharedMemory();
|
||||
// }
|
||||
|
||||
TEST_CASE("Padding and discard policy", "[detector][new]"){
|
||||
slsDetector::freeSharedMemory(20, 20);
|
||||
slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
// TEST_CASE("Padding and discard policy", "[detector][new]"){
|
||||
// slsDetector::freeSharedMemory(20, 20);
|
||||
// slsDetector d(slsDetectorDefs::detectorType::EIGER, 20, 20);
|
||||
|
||||
//
|
||||
d.setPartialFramesPadding(false);
|
||||
CHECK(d.getPartialFramesPadding() == false);
|
||||
d.setPartialFramesPadding(true);
|
||||
CHECK(d.getPartialFramesPadding() == true);
|
||||
// //
|
||||
// d.setPartialFramesPadding(false);
|
||||
// CHECK(d.getPartialFramesPadding() == false);
|
||||
// d.setPartialFramesPadding(true);
|
||||
// CHECK(d.getPartialFramesPadding() == true);
|
||||
|
||||
|
||||
d.freeSharedMemory();
|
||||
// d.freeSharedMemory();
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
|
||||
TEST_CASE("create detParamets struct", "[detector][new]"){
|
||||
detParameters par;
|
||||
CHECK(sizeof(par) == 32);
|
||||
CHECK(par.nChanX == 0);
|
||||
CHECK(par.nChanY == 0);
|
||||
CHECK(par.nChipX == 0);
|
||||
CHECK(par.nChipY == 0);
|
||||
CHECK(par.nDacs == 0);
|
||||
CHECK(par.dynamicRange == 0);
|
||||
CHECK(par.nGappixelsX == 0);
|
||||
CHECK(par.nGappixelsY == 0);
|
||||
// TEST_CASE("create detParamets struct", "[detector][new]"){
|
||||
// detParameters par;
|
||||
// CHECK(sizeof(par) == 32);
|
||||
// CHECK(par.nChanX == 0);
|
||||
// CHECK(par.nChanY == 0);
|
||||
// CHECK(par.nChipX == 0);
|
||||
// CHECK(par.nChipY == 0);
|
||||
// CHECK(par.nDacs == 0);
|
||||
// CHECK(par.dynamicRange == 0);
|
||||
// CHECK(par.nGappixelsX == 0);
|
||||
// CHECK(par.nGappixelsY == 0);
|
||||
|
||||
|
||||
detParameters par2{slsDetectorDefs::detectorType::EIGER};
|
||||
CHECK(sizeof(par2) == 32);
|
||||
CHECK(par2.nChanX == 256);
|
||||
CHECK(par2.nChanY == 256);
|
||||
CHECK(par2.nChipX == 4);
|
||||
CHECK(par2.nChipY == 1);
|
||||
CHECK(par2.nDacs == 16);
|
||||
CHECK(par2.dynamicRange == 16);
|
||||
CHECK(par2.nGappixelsX == 6);
|
||||
CHECK(par2.nGappixelsY == 1);
|
||||
}
|
||||
// detParameters par2{slsDetectorDefs::detectorType::EIGER};
|
||||
// CHECK(sizeof(par2) == 32);
|
||||
// CHECK(par2.nChanX == 256);
|
||||
// CHECK(par2.nChanY == 256);
|
||||
// CHECK(par2.nChipX == 4);
|
||||
// CHECK(par2.nChipY == 1);
|
||||
// CHECK(par2.nDacs == 16);
|
||||
// CHECK(par2.dynamicRange == 16);
|
||||
// CHECK(par2.nGappixelsX == 6);
|
||||
// CHECK(par2.nGappixelsY == 1);
|
||||
// }
|
||||
|
||||
|
||||
TEST_CASE("ctb digital offset and list", "[detector][ctb]"){
|
||||
slsDetector::freeSharedMemory(20, 20);
|
||||
slsDetector d(slsDetectorDefs::detectorType::CHIPTESTBOARD, 20, 20);
|
||||
// TEST_CASE("ctb digital offset and list", "[detector][ctb]"){
|
||||
// slsDetector::freeSharedMemory(20, 20);
|
||||
// slsDetector d(slsDetectorDefs::detectorType::CHIPTESTBOARD, 20, 20);
|
||||
|
||||
// dbit offset
|
||||
CHECK(d.getReceiverDbitOffset() == 0);
|
||||
CHECK(d.setReceiverDbitOffset(-1) == 0);
|
||||
CHECK(d.setReceiverDbitOffset(0) == 0);
|
||||
CHECK(d.setReceiverDbitOffset(5) == 5);
|
||||
CHECK(d.getReceiverDbitOffset() == 5);
|
||||
// // dbit offset
|
||||
// CHECK(d.getReceiverDbitOffset() == 0);
|
||||
// CHECK(d.setReceiverDbitOffset(-1) == 0);
|
||||
// CHECK(d.setReceiverDbitOffset(0) == 0);
|
||||
// CHECK(d.setReceiverDbitOffset(5) == 5);
|
||||
// CHECK(d.getReceiverDbitOffset() == 5);
|
||||
|
||||
// dbit list
|
||||
std::vector <int> list = d.getReceiverDbitList();
|
||||
CHECK(list.empty());
|
||||
// // dbit list
|
||||
// std::vector <int> list = d.getReceiverDbitList();
|
||||
// CHECK(list.empty());
|
||||
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
list.push_back(i);
|
||||
d.setReceiverDbitList(list);
|
||||
// for (int i = 0; i < 10; ++i)
|
||||
// list.push_back(i);
|
||||
// d.setReceiverDbitList(list);
|
||||
|
||||
CHECK(d.getReceiverDbitList().size() == 10);
|
||||
// CHECK(d.getReceiverDbitList().size() == 10);
|
||||
|
||||
list.push_back(64);
|
||||
CHECK_THROWS_AS(d.setReceiverDbitList(list), sls::RuntimeError);
|
||||
CHECK_THROWS_WITH(d.setReceiverDbitList(list),
|
||||
Catch::Matchers::Contains("be between 0 and 63"));
|
||||
// list.push_back(64);
|
||||
// CHECK_THROWS_AS(d.setReceiverDbitList(list), sls::RuntimeError);
|
||||
// CHECK_THROWS_WITH(d.setReceiverDbitList(list),
|
||||
// Catch::Matchers::Contains("be between 0 and 63"));
|
||||
|
||||
list.clear();
|
||||
for (int i = 0; i < 65; ++i)
|
||||
list.push_back(i);
|
||||
CHECK(list.size() == 65);
|
||||
CHECK_THROWS_WITH(d.setReceiverDbitList(list),
|
||||
Catch::Matchers::Contains("be greater than 64"));
|
||||
// list.clear();
|
||||
// for (int i = 0; i < 65; ++i)
|
||||
// list.push_back(i);
|
||||
// CHECK(list.size() == 65);
|
||||
// CHECK_THROWS_WITH(d.setReceiverDbitList(list),
|
||||
// Catch::Matchers::Contains("be greater than 64"));
|
||||
|
||||
list.clear();
|
||||
d.setReceiverDbitList(list);
|
||||
CHECK(d.getReceiverDbitList().empty());
|
||||
// list.clear();
|
||||
// d.setReceiverDbitList(list);
|
||||
// CHECK(d.getReceiverDbitList().empty());
|
||||
|
||||
|
||||
|
||||
}
|
||||
// }
|
Loading…
x
Reference in New Issue
Block a user