Merge branch 'refactor' of github.com:slsdetectorgroup/slsDetectorPackage into refactor

This commit is contained in:
Gemma Tinti 2019-04-10 12:31:34 +02:00
commit 6b5aa5ff66
9 changed files with 133 additions and 87 deletions

View File

@ -603,18 +603,18 @@ class Detector {
} }
void setFileWrite(bool value) { void setFileWrite(bool value) {
det.enableWriteToFile(value); det.setFileWrite(value);
} }
bool getFileWrite() { bool getFileWrite() {
return det.enableWriteToFile(-1); return det.getFileWrite();
} }
void setFileOverWrite(bool value) { void setFileOverWrite(bool value) {
det.overwriteFile(value); det.setFileOverWrite(value);
} }
bool getFileOverWrite() { bool getFileOverWrite() {
return det.overwriteFile(-1); return det.getFileOverWrite();
} }
void setAllTrimbits(int tb) { void setAllTrimbits(int tb) {

View File

@ -1716,7 +1716,8 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param detPos -1 for all detectors in list or specific detector position * @param detPos -1 for all detectors in list or specific detector position
* @returns file write enable * @returns file write enable
*/ */
int enableWriteToFile(int enable = -1, int detPos = -1); int setFileWrite(bool value, int detPos = -1);
int getFileWrite(int detPos = -1) const;
/** /**
* Sets/Gets file overwrite enable * Sets/Gets file overwrite enable
@ -1724,7 +1725,8 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param detPos -1 for all detectors in list or specific detector position * @param detPos -1 for all detectors in list or specific detector position
* @returns file overwrite enable * @returns file overwrite enable
*/ */
int overwriteFile(int enable = -1, int detPos = -1); int setFileOverWrite(bool enable, int detPos = -1);
int getFileOverWrite(int detPos = -1) const;
/** /**
* (previously setReadReceiverFrequency) * (previously setReadReceiverFrequency)
@ -2062,7 +2064,7 @@ class multiSlsDetector : public virtual slsDetectorDefs {
/** Multi detector Id */ /** Multi detector Id */
const int multiId; const int multiId{0};
/** Shared Memory object */ /** Shared Memory object */
sls::SharedMemory<sharedMultiSlsDetector> multi_shm{0, -1}; sls::SharedMemory<sharedMultiSlsDetector> multi_shm{0, -1};

View File

@ -243,10 +243,10 @@ struct sharedSlsDetector {
int receiver_framesPerFile; int receiver_framesPerFile;
/** filewriteenable */ /** filewriteenable */
bool receiver_fileWriteEnable; bool rxFileWrite;
/** overwriteenable */ /** overwriteenable */
bool receiver_overWriteEnable; bool rxFileOverWrite;
}; };
class slsDetector : public virtual slsDetectorDefs{ class slsDetector : public virtual slsDetectorDefs{
@ -1554,14 +1554,22 @@ class slsDetector : public virtual slsDetectorDefs{
* @param enable 1 or 0 to set/reset file write enable * @param enable 1 or 0 to set/reset file write enable
* @returns file write enable * @returns file write enable
*/ */
int enableWriteToFile(int enable = -1); bool setFileWrite(bool value);
bool getFileWrite() const;
/** /**
* Sets/Gets file overwrite enable * Sets file overwrite in the receiver
* @param enable 1 or 0 to set/reset file overwrite enable * @param enable true or false to set/reset file overwrite enable
* @returns file overwrite enable * @returns file overwrite enable
*/ */
int overwriteFile(int enable = -1); bool setFileOverWrite(bool value);
/**
* Gets file overwrite in the receiver
* @returns file overwrite enable
*/
bool getFileOverWrite() const;
/** /**
* (previously setReadReceiverFrequency) * (previously setReadReceiverFrequency)

View File

@ -3442,25 +3442,35 @@ int multiSlsDetector::processImageWithGapPixels(char *image, char *&gpImage) {
return gapdatabytes; return gapdatabytes;
} }
int multiSlsDetector::enableWriteToFile(int enable, int detPos) { int multiSlsDetector::setFileWrite(bool value, int detPos) {
// single
if (detPos >= 0) { if (detPos >= 0) {
return detectors[detPos]->enableWriteToFile(enable); return detectors[detPos]->setFileWrite(value);
} }
auto r = parallelCall(&slsDetector::setFileWrite, value);
// multi
auto r = parallelCall(&slsDetector::enableWriteToFile, enable);
return sls::minusOneIfDifferent(r); return sls::minusOneIfDifferent(r);
} }
int multiSlsDetector::overwriteFile(int enable, int detPos) { int multiSlsDetector::getFileWrite(int detPos) const{
// single
if (detPos >= 0) { if (detPos >= 0) {
return detectors[detPos]->overwriteFile(enable); return detectors[detPos]->getFileWrite();
} }
auto r = parallelCall(&slsDetector::getFileWrite);
return sls::minusOneIfDifferent(r);
}
// multi int multiSlsDetector::setFileOverWrite(bool enable, int detPos) {
auto r = parallelCall(&slsDetector::overwriteFile, enable); if (detPos >= 0) {
return detectors[detPos]->setFileOverWrite(enable);
}
auto r = parallelCall(&slsDetector::setFileOverWrite, enable);
return sls::minusOneIfDifferent(r);
}
int multiSlsDetector::getFileOverWrite(int detPos) const {
if (detPos >= 0) {
return detectors[detPos]->getFileOverWrite();
}
auto r = parallelCall(&slsDetector::getFileOverWrite);
return sls::minusOneIfDifferent(r); return sls::minusOneIfDifferent(r);
} }

View File

@ -370,8 +370,8 @@ void slsDetector::initializeDetectorStructure(detectorType type) {
default: default:
break; break;
} }
detector_shm()->receiver_fileWriteEnable = true; detector_shm()->rxFileWrite = true;
detector_shm()->receiver_overWriteEnable = true; detector_shm()->rxFileOverWrite = true;
// get the detector parameters based on type // get the detector parameters based on type
detParameters parameters{}; detParameters parameters{};
@ -2132,8 +2132,8 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
<< "\nr_framesperfile:" << detector_shm()->receiver_framesPerFile << "\nr_framesperfile:" << detector_shm()->receiver_framesPerFile
<< "\nr_discardpolicy:" << detector_shm()->receiver_frameDiscardMode << "\nr_discardpolicy:" << detector_shm()->receiver_frameDiscardMode
<< "\nr_padding:" << detector_shm()->receiver_framePadding << "\nr_padding:" << detector_shm()->receiver_framePadding
<< "\nwrite enable:" << detector_shm()->receiver_fileWriteEnable << "\nwrite enable:" << detector_shm()->rxFileWrite
<< "\noverwrite enable:" << detector_shm()->receiver_overWriteEnable << "\noverwrite enable:" << detector_shm()->rxFileOverWrite
<< "\nframe index needed:" << "\nframe index needed:"
<< ((detector_shm()->timerValue[FRAME_NUMBER] * << ((detector_shm()->timerValue[FRAME_NUMBER] *
detector_shm()->timerValue[CYCLES_NUMBER]) > 1) detector_shm()->timerValue[CYCLES_NUMBER]) > 1)
@ -2168,8 +2168,8 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
setReceiverFramesPerFile(detector_shm()->receiver_framesPerFile); setReceiverFramesPerFile(detector_shm()->receiver_framesPerFile);
setReceiverFramesDiscardPolicy(detector_shm()->receiver_frameDiscardMode); setReceiverFramesDiscardPolicy(detector_shm()->receiver_frameDiscardMode);
setReceiverPartialFramesPadding(detector_shm()->receiver_framePadding); setReceiverPartialFramesPadding(detector_shm()->receiver_framePadding);
enableWriteToFile(detector_shm()->receiver_fileWriteEnable); setFileWrite(detector_shm()->rxFileWrite);
overwriteFile(detector_shm()->receiver_overWriteEnable); setFileOverWrite(detector_shm()->rxFileOverWrite);
setTimer(FRAME_PERIOD, detector_shm()->timerValue[FRAME_PERIOD]); setTimer(FRAME_PERIOD, detector_shm()->timerValue[FRAME_PERIOD]);
setTimer(FRAME_NUMBER, detector_shm()->timerValue[FRAME_NUMBER]); setTimer(FRAME_NUMBER, detector_shm()->timerValue[FRAME_NUMBER]);
setTimer(ACQUISITION_TIME, detector_shm()->timerValue[ACQUISITION_TIME]); setTimer(ACQUISITION_TIME, detector_shm()->timerValue[ACQUISITION_TIME]);
@ -3706,11 +3706,11 @@ int slsDetector::updateCachedReceiverVariables() const {
// file write enable // file write enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_fileWriteEnable = i32; detector_shm()->rxFileWrite = i32;
// file overwrite enable // file overwrite enable
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
detector_shm()->receiver_overWriteEnable = i32; detector_shm()->rxFileOverWrite = i32;
// gap pixels // gap pixels
n += receiver.receiveData(&i32, sizeof(i32)); n += receiver.receiveData(&i32, sizeof(i32));
@ -3977,7 +3977,7 @@ int slsDetector::setFileIndex(int i) {
} }
int slsDetector::incrementFileIndex() { int slsDetector::incrementFileIndex() {
if (detector_shm()->receiver_fileWriteEnable) { if (detector_shm()->rxFileWrite) {
return setFileIndex(detector_shm()->receiver_fileIndex + 1); return setFileIndex(detector_shm()->receiver_fileIndex + 1);
} }
return detector_shm()->receiver_fileIndex; return detector_shm()->receiver_fileIndex;
@ -4083,47 +4083,51 @@ int slsDetector::resetFramesCaught() {
return ret; return ret;
} }
int slsDetector::enableWriteToFile(int enable) { bool slsDetector::setFileWrite(bool value) {
if (enable >= 0) { int fnum = F_ENABLE_RECEIVER_FILE_WRITE;
int fnum = F_ENABLE_RECEIVER_FILE_WRITE; int ret = FAIL;
int ret = FAIL; int arg = static_cast<int>(value);
int arg = enable; int retval = -1;
int retval = -1; FILE_LOG(logDEBUG1) << "Sending enable file write to receiver: " << arg;
FILE_LOG(logDEBUG1) << "Sending enable file write to receiver: " << arg; if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) {
if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { auto receiver = ReceiverSocket(detector_shm()->receiver_hostname,
auto receiver = detector_shm()->receiverTCPPort);
ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval,
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); sizeof(retval));
FILE_LOG(logDEBUG1) << "Receiver file write enable: " << retval; FILE_LOG(logDEBUG1) << "Receiver file write enable: " << retval;
detector_shm()->receiver_fileWriteEnable = retval; detector_shm()->rxFileWrite = retval;
}
if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables();
}
} }
return detector_shm()->receiver_fileWriteEnable; if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables();
}
return getFileWrite();
} }
int slsDetector::overwriteFile(int enable) { bool slsDetector::getFileWrite() const { return detector_shm()->rxFileWrite; }
if (enable >= 0) {
int fnum = F_ENABLE_RECEIVER_OVERWRITE;
int ret = FAIL;
int arg = enable;
int retval = -1;
FILE_LOG(logDEBUG1) << "Sending enable file overwrite to receiver: " << arg;
if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) { bool slsDetector::setFileOverWrite(bool value) {
auto receiver = int fnum = F_ENABLE_RECEIVER_OVERWRITE;
ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); int ret = FAIL;
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); int arg = static_cast<int>(value);
FILE_LOG(logDEBUG1) << "Receiver file overwrite enable: " << retval; int retval = -1;
detector_shm()->receiver_overWriteEnable = retval; FILE_LOG(logDEBUG1) << "Sending enable file overwrite to receiver: " << arg;
}
if (ret == FORCE_UPDATE) { if (detector_shm()->receiverOnlineFlag == ONLINE_FLAG) {
updateCachedReceiverVariables(); auto receiver = ReceiverSocket(detector_shm()->receiver_hostname,
} detector_shm()->receiverTCPPort);
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval,
sizeof(retval));
FILE_LOG(logDEBUG1) << "Receiver file overwrite enable: " << retval;
detector_shm()->rxFileOverWrite = static_cast<bool>(retval);
} }
return detector_shm()->receiver_overWriteEnable; if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables();
}
return getFileOverWrite();
}
bool slsDetector::getFileOverWrite() const {
return detector_shm()->rxFileOverWrite;
} }
int slsDetector::setReceiverStreamingFrequency(int freq) { int slsDetector::setReceiverStreamingFrequency(int freq) {
@ -4142,7 +4146,7 @@ int slsDetector::setReceiverStreamingFrequency(int freq) {
detector_shm()->receiver_read_freq = retval; detector_shm()->receiver_read_freq = retval;
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
ret = updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
} }
return detector_shm()->receiver_read_freq; return detector_shm()->receiver_read_freq;
@ -4162,7 +4166,7 @@ int slsDetector::setReceiverStreamingTimer(int time_in_ms) {
FILE_LOG(logDEBUG1) << "Receiver read timer: " << retval; FILE_LOG(logDEBUG1) << "Receiver read timer: " << retval;
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
ret = updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
return retval; return retval;
} }
@ -4180,10 +4184,10 @@ bool slsDetector::enableDataStreamingFromReceiver(int enable) {
ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort);
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval));
FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval;
detector_shm()->receiver_upstream = retval; detector_shm()->receiver_upstream = static_cast<bool>(retval);
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
ret = updateCachedReceiverVariables(); updateCachedReceiverVariables();
} }
} }
return detector_shm()->receiver_upstream; return detector_shm()->receiver_upstream;
@ -4211,7 +4215,6 @@ int slsDetector::enableTenGigabitEthernet(int i) {
// receiver // receiver
if ((detector_shm()->receiverOnlineFlag == ONLINE_FLAG) && ret == OK) { if ((detector_shm()->receiverOnlineFlag == ONLINE_FLAG) && ret == OK) {
fnum = F_ENABLE_RECEIVER_TEN_GIGA; fnum = F_ENABLE_RECEIVER_TEN_GIGA;
ret = FAIL;
arg = detector_shm()->tenGigaEnable; arg = detector_shm()->tenGigaEnable;
retval = -1; retval = -1;
FILE_LOG(logDEBUG1) << "Sending 10Gbe enable to receiver: " << arg; FILE_LOG(logDEBUG1) << "Sending 10Gbe enable to receiver: " << arg;
@ -4258,7 +4261,7 @@ bool slsDetector::setReceiverSilentMode(int i) {
ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort); ReceiverSocket(detector_shm()->receiver_hostname, detector_shm()->receiverTCPPort);
ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); ret = receiver.sendCommandThenRead(fnum, &arg, sizeof(arg), &retval, sizeof(retval));
FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval; FILE_LOG(logDEBUG1) << "Receiver Data Streaming: " << retval;
detector_shm()->receiver_silentMode = retval; detector_shm()->receiver_silentMode = static_cast<bool>(retval);
} }
if (ret == FORCE_UPDATE) { if (ret == FORCE_UPDATE) {
updateCachedReceiverVariables(); updateCachedReceiverVariables();
@ -4550,7 +4553,7 @@ slsDetectorDefs::sls_detector_module *slsDetector::interpolateTrim(sls_detector_
} }
// Interpolate all trimbits // Interpolate all trimbits
if (tb) { if (tb != 0) {
for (int i = 0; i < myMod->nchan; ++i) { for (int i = 0; i < myMod->nchan; ++i) {
myMod->chanregs[i] = myMod->chanregs[i] =
linearInterpolation(energy, e1, e2, a->chanregs[i], b->chanregs[i]); linearInterpolation(energy, e1, e2, a->chanregs[i], b->chanregs[i]);
@ -4630,7 +4633,7 @@ slsDetector::readSettingsFile(const std::string &fname, sls_detector_module *myM
if (infile.good()) { if (infile.good()) {
infile.read(reinterpret_cast<char *>(&myMod->tau), infile.read(reinterpret_cast<char *>(&myMod->tau),
sizeof(myMod->tau)); sizeof(myMod->tau));
if (tb) { if (tb != 0) {
if (infile.good()) { if (infile.good()) {
infile.read(reinterpret_cast<char *>(myMod->chanregs), infile.read(reinterpret_cast<char *>(myMod->chanregs),
sizeof(int) * (myMod->nchan)); sizeof(int) * (myMod->nchan));

View File

@ -2603,11 +2603,11 @@ std::string slsDetectorCommand::cmdEnablefwrite(int narg, char *args[], int acti
} }
if (action == PUT_ACTION) { if (action == PUT_ACTION) {
if (sscanf(args[1], "%d", &i)) if (sscanf(args[1], "%d", &i))
myDet->enableWriteToFile(i, detPos); myDet->setFileWrite(i, detPos);
else else
return std::string("could not decode enable file write"); return std::string("could not decode enable file write");
} }
sprintf(ans, "%d", myDet->enableWriteToFile(-1, detPos)); sprintf(ans, "%d", myDet->getFileWrite(detPos));
return std::string(ans); return std::string(ans);
} }
@ -2621,7 +2621,6 @@ std::string slsDetectorCommand::helpEnablefwrite(int action) {
} }
std::string slsDetectorCommand::cmdOverwrite(int narg, char *args[], int action, int detPos) { std::string slsDetectorCommand::cmdOverwrite(int narg, char *args[], int action, int detPos) {
int i; int i;
char ans[100]; char ans[100];
myDet->setReceiverOnline(ONLINE_FLAG, detPos); myDet->setReceiverOnline(ONLINE_FLAG, detPos);
@ -2630,11 +2629,11 @@ std::string slsDetectorCommand::cmdOverwrite(int narg, char *args[], int action,
} }
if (action == PUT_ACTION) { if (action == PUT_ACTION) {
if (sscanf(args[1], "%d", &i)) if (sscanf(args[1], "%d", &i))
myDet->overwriteFile(i, detPos); myDet->setFileOverWrite(i, detPos);
else else
return std::string("could not decode overwrite"); return std::string("could not decode overwrite");
} }
sprintf(ans, "%d", myDet->overwriteFile(-1, detPos)); sprintf(ans, "%d", myDet->getFileOverWrite(detPos));
return std::string(ans); return std::string(ans);
} }

View File

@ -284,19 +284,26 @@ std::string slsDetectorUsers::setFileName(const std::string& s, int detPos){
} }
int slsDetectorUsers::getFileIndex(int detPos){ int slsDetectorUsers::getFileIndex(int detPos){
return (int)detector.getFileIndex(detPos); return detector.getFileIndex(detPos);
} }
int slsDetectorUsers::setFileIndex(int i, int detPos){ int slsDetectorUsers::setFileIndex(int i, int detPos){
return (int)detector.setFileIndex(i, detPos); return detector.setFileIndex(i, detPos);
} }
int slsDetectorUsers::enableWriteToFile(int enable, int detPos){ int slsDetectorUsers::enableWriteToFile(int enable, int detPos){
return detector.enableWriteToFile(enable, detPos); if (enable >0)
return detector.setFileWrite(enable, detPos);
else
return detector.getFileWrite(detPos);
} }
int slsDetectorUsers::enableOverwriteFile(int enable, int detPos){ int slsDetectorUsers::enableOverwriteFile(int enable, int detPos) {
return detector.overwriteFile(enable, detPos); if (enable > 0)
return detector.setFileOverWrite(enable, detPos);
else
return detector.getFileOverWrite(detPos);
} }
int slsDetectorUsers::setReceiverStreamingFrequency(int freq, int detPos){ int slsDetectorUsers::setReceiverStreamingFrequency(int freq, int detPos){

View File

@ -95,6 +95,12 @@ template <typename T> T minusOneIfDifferent(const std::vector<T> &container) {
return static_cast<T>(-1); return static_cast<T>(-1);
} }
inline int minusOneIfDifferent(const std::vector<bool> &container) {
if (allEqual(container))
return static_cast<int>(container.front());
return -1;
}
template <typename T> template <typename T>
std::vector<T> std::vector<T>
minusOneIfDifferent(const std::vector<std::vector<T>> &container) { minusOneIfDifferent(const std::vector<std::vector<T>> &container) {

View File

@ -112,3 +112,14 @@ TEST_CASE("Compare a vector containing two vectors", "[support]") {
CHECK(minusOneIfDifferent(c) == std::vector<int>{-1}); CHECK(minusOneIfDifferent(c) == std::vector<int>{-1});
CHECK(minusOneIfDifferent(d) == d[2]); CHECK(minusOneIfDifferent(d) == d[2]);
} }
TEST_CASE("vector of bool", "[support]"){
std::vector<bool> a{true, true, true};
std::vector<bool> b{false, false, false};
std::vector<bool> c{true, false, true};
CHECK(minusOneIfDifferent(a) == 1);
CHECK(minusOneIfDifferent(b) == 0);
CHECK(minusOneIfDifferent(c) == -1);
}