mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 08:10:02 +02:00
client compiles, more changes required
This commit is contained in:
parent
b5c35ddeac
commit
1c78400369
@ -17,6 +17,7 @@ multiSlsDetector
|
||||
sharedMemory
|
||||
slsDetector
|
||||
slsReceiverInterface
|
||||
../slsSupportLib/include
|
||||
)
|
||||
|
||||
add_library(slsDetectorStatic STATIC
|
||||
@ -51,6 +52,7 @@ set(PUBLICHEADERS
|
||||
../commonFiles/versionAPI.h
|
||||
../commonFiles/sls_receiver_exceptions.h
|
||||
../commonFiles/utilties.h
|
||||
../slsSupportLib/include/container_utils.h
|
||||
sharedMemory/SharedMemory.h
|
||||
slsDetector/slsDetector.h
|
||||
slsDetector/slsDetectorBase.h
|
||||
|
@ -9,7 +9,7 @@ CFLAGS= -g -DC_ONLY -fPIC
|
||||
|
||||
DFLAGS= -g -DDACS_INT
|
||||
|
||||
INCLUDES?= -I../commonFiles -IslsDetector -ImultiSlsDetector -IslsReceiverInterface -IsharedMemory -I$(ASM)
|
||||
INCLUDES?= -I../commonFiles -IslsDetector -ImultiSlsDetector -IslsReceiverInterface -IsharedMemory -I ../slsSupportLib/include-I$(ASM)
|
||||
|
||||
#EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -Wl,-R/usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -lca -lCom
|
||||
|
||||
@ -17,7 +17,7 @@ LIBZMQDIR = ../commonFiles
|
||||
LIBZMQ = -L$(LIBZMQDIR) -Wl,-rpath=$(LIBZMQDIR) -lzmq
|
||||
|
||||
SRC_CLNT= slsDetector/slsDetectorCommand.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsReceiverInterface/receiverInterface.cpp slsDetector/slsDetectorUsers.cpp sharedMemory/SharedMemory.cpp ../commonFiles/utilities.cpp#../slsReceiverSoftware/MySocketTCP/MySocketTCP.cpp
|
||||
DEPSINCLUDES = ../commonFiles/sls_receiver_defs.h ../commonFiles/sls_receiver_funcs.h ../commonFiles/ansi.h ../commonFiles/sls_detector_defs.h ../commonFiles/sls_detector_funcs.h ../commonFiles/error_defs.h slsDetector/slsDetectorBase.h slsDetector/detectorData.h sharedMemory/SharedMemory.h ../commonFiles/sls_receiver_exceptions.h ../commonFiles/versionAPI.h ../commonFiles/utilities.h
|
||||
DEPSINCLUDES = ../commonFiles/sls_receiver_defs.h ../commonFiles/sls_receiver_funcs.h ../commonFiles/ansi.h ../commonFiles/sls_detector_defs.h ../commonFiles/sls_detector_funcs.h ../commonFiles/error_defs.h slsDetector/slsDetectorBase.h slsDetector/detectorData.h sharedMemory/SharedMemory.h ../commonFiles/sls_receiver_exceptions.h ../commonFiles/versionAPI.h ../commonFiles/utilities.h ../slsSupportLib/include/container_utils.h
|
||||
|
||||
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <rapidjson/document.h> //json header in zmq stream
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <iomanip>
|
||||
//#include <time.h> //clock()
|
||||
|
||||
#include "container_utils.h"
|
||||
@ -24,8 +25,7 @@
|
||||
|
||||
|
||||
multiSlsDetector::multiSlsDetector(int id, bool verify, bool update)
|
||||
: slsDetectorUtils(),
|
||||
detId(id),
|
||||
: detId(id),
|
||||
sharedMemory(0),
|
||||
thisMultiDetector(0),
|
||||
client_downstream(false),
|
||||
@ -60,12 +60,12 @@ multiSlsDetector::multiSlsDetector(int id, bool verify, bool update)
|
||||
|
||||
multiSlsDetector::~multiSlsDetector() {
|
||||
// delete zmq sockets first
|
||||
for (auto& it : zmqSocket)
|
||||
delete(*it);
|
||||
for (auto* it : zmqSocket)
|
||||
delete it;
|
||||
zmqSocket.clear();
|
||||
|
||||
for (auto& it : detectors)
|
||||
delete(*it);
|
||||
for (auto* it : detectors)
|
||||
delete it;
|
||||
detectors.clear();
|
||||
|
||||
if (sharedMemory) {
|
||||
@ -123,8 +123,8 @@ std::string multiSlsDetector::concatResultOrPos(std::string (slsDetector::*somef
|
||||
return (detectors[pos]->*somefunc)(pos);
|
||||
} else {
|
||||
std::string s;
|
||||
for (size_t i = 0; i < detectors.size(); ++i) {
|
||||
s += (detectors[i]->*somefunc)(pos) + "+";
|
||||
for (auto* it : detectors) {
|
||||
s += (it->*somefunc)(pos) + "+";
|
||||
}
|
||||
return s;
|
||||
}
|
||||
@ -208,7 +208,7 @@ std::string multiSlsDetector::getErrorMessage(int& critical, int detPos) {
|
||||
if ((multiMask & (1 << idet)) || (detPos >= 0)) {
|
||||
|
||||
//append detector id
|
||||
sprintf(sNumber, "%d", idet);
|
||||
sprintf(sNumber, "%ld", idet);
|
||||
retval.append("Detector " + std::string(sNumber) + std::string(":\n"));
|
||||
|
||||
//get sls det error mask
|
||||
@ -235,13 +235,14 @@ std::string multiSlsDetector::getErrorMessage(int& critical, int detPos) {
|
||||
int64_t multiSlsDetector::clearAllErrorMask(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[idet]->clearErrorMask();
|
||||
return detectors[detPos]->clearErrorMask();
|
||||
}
|
||||
|
||||
// multi
|
||||
clearErrorMask();
|
||||
clearNotAddedList();
|
||||
serialCall(&slsDetector::clearErrorMask);
|
||||
for (auto* it : detectors)
|
||||
it->clearErrorMask();
|
||||
return getErrorMask();
|
||||
}
|
||||
|
||||
@ -301,19 +302,27 @@ int64_t multiSlsDetector::getId(idMode mode, int detPos) {
|
||||
|
||||
|
||||
slsDetector* multiSlsDetector::getSlsDetector(int detPos) {
|
||||
return detectors[pos];
|
||||
return detectors[detPos];
|
||||
}
|
||||
|
||||
|
||||
slsDetector *multiSlsDetector::operator()(int detPos) const {
|
||||
return detectors[pos];
|
||||
return detectors[detPos];
|
||||
}
|
||||
|
||||
slsDetector* multiSlsDetector::operator[](int detPos) const {
|
||||
//Providing access to detectors with range checking
|
||||
//throw exception if out of range
|
||||
if (detPos >= 0 && detPos < (int)detectors.size())
|
||||
return detectors[detPos];
|
||||
else
|
||||
throw(std::range_error("Detector does not exist"));
|
||||
}
|
||||
|
||||
void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
detectors[detPos]->freeSharedMemory(multiId, detPos);
|
||||
slsDetector::freeSharedMemory(multiId, detPos);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -341,7 +350,7 @@ void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
|
||||
|
||||
|
||||
|
||||
void multiSlsDetector::freeSharedMemory() {
|
||||
void multiSlsDetector::freeSharedMemory(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
detectors[detPos]->freeSharedMemory();
|
||||
@ -350,17 +359,17 @@ void multiSlsDetector::freeSharedMemory() {
|
||||
|
||||
// multi
|
||||
// clear zmq vector
|
||||
for (auto& it : zmqSocket)
|
||||
delete(*it);
|
||||
for (auto* it : zmqSocket)
|
||||
delete it;
|
||||
zmqSocket.clear();
|
||||
|
||||
// should be done before the detector list is deleted
|
||||
clearAllErrorMask();
|
||||
|
||||
// clear sls detector vector shm
|
||||
for (auto& it : detectors) {
|
||||
(*it)->freeSharedMemory();
|
||||
delete(*it);
|
||||
for (auto* it : detectors) {
|
||||
it->freeSharedMemory();
|
||||
delete it;
|
||||
}
|
||||
detectors.clear();
|
||||
|
||||
@ -392,8 +401,8 @@ std::string multiSlsDetector::getUserDetails() {
|
||||
|
||||
//type
|
||||
sstream<< "\nType: ";
|
||||
for (auto& it : detectors) {
|
||||
sstream<< (*it)->sgetDetectorsType() << "+";
|
||||
for (auto* it : detectors) {
|
||||
sstream<< it->sgetDetectorsType() << "+";
|
||||
}
|
||||
|
||||
//PID
|
||||
@ -478,9 +487,8 @@ void multiSlsDetector::initializeDetectorStructure() {
|
||||
|
||||
void multiSlsDetector::initializeMembers(bool verify) {
|
||||
//multiSlsDetector
|
||||
for (auto& it : zmqSocket) {
|
||||
delete(*it);
|
||||
}
|
||||
for (auto* it : zmqSocket)
|
||||
delete it;
|
||||
zmqSocket.clear();
|
||||
|
||||
// get objects from single det shared memory (open)
|
||||
@ -490,9 +498,8 @@ void multiSlsDetector::initializeMembers(bool verify) {
|
||||
detectors.push_back(sdet);
|
||||
} catch (...) {
|
||||
// clear detectors list
|
||||
for (auto& it : detectors) {
|
||||
delete(*it);
|
||||
}
|
||||
for (auto* it : detectors)
|
||||
delete it;
|
||||
detectors.clear();
|
||||
throw;
|
||||
}
|
||||
@ -597,8 +604,8 @@ void multiSlsDetector::addSlsDetector (std::string s) {
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Adding detector " << s << std::endl;
|
||||
#endif
|
||||
for (auto& it : detectors) {
|
||||
if ((*it)->getHostname((it-detectors.begin())) == s) {
|
||||
for (auto* it : detectors) {
|
||||
if (it->getHostname() == s) {
|
||||
std::cout << "Detector " << s << "already part of the multiDetector!" << std::endl
|
||||
<< "Remove it before adding it back in a new position!" << std::endl;
|
||||
return;
|
||||
@ -685,8 +692,6 @@ int multiSlsDetector::getTotalNumberOfChannels(int detPos) {
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = serialCall(&slsDetector::getTotalNumberOfChannels);
|
||||
thisMultiDetector->numberOfChannels = sls::sum(r);
|
||||
return thisMultiDetector->numberOfChannels;
|
||||
}
|
||||
|
||||
@ -871,10 +876,14 @@ void multiSlsDetector::updateOffsets() {
|
||||
thisMultiDetector->numberOfChannelInclGapPixels[Y] << std::endl
|
||||
<< std::endl;
|
||||
#endif
|
||||
thisMultiDetector->numberOfChannels =
|
||||
thisMultiDetector->numberOfChannel[0] *
|
||||
thisMultiDetector->numberOfChannel[1];
|
||||
|
||||
serialCall(&slsDetector::updateMultiSize,
|
||||
thisMultiDetector->numberOfDetector[0],
|
||||
thisMultiDetector->numberOfDetector[1]);
|
||||
for (auto* it : detectors) {
|
||||
it->updateMultiSize(thisMultiDetector->numberOfDetector[0],
|
||||
thisMultiDetector->numberOfDetector[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -912,7 +921,7 @@ int multiSlsDetector::setPort(portType t, int num, int detPos) {
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = serialcall(&slsDetector::setPort, t, num);
|
||||
auto r = serialCall(&slsDetector::setPort, t, num);
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -1077,7 +1086,7 @@ int multiSlsDetector::writeConfigurationFile(std::string const fname) {
|
||||
// single detector configuration
|
||||
for (size_t idet = 0; idet < detectors.size(); ++idet) {
|
||||
outfile << std::endl;
|
||||
ret1 = detectors[idet]->writeConfigurationFile(outfile, idet);
|
||||
ret1 = detectors[idet]->writeConfigurationFile(outfile, this);
|
||||
if (detectors[idet]->getErrorMask())
|
||||
setErrorMask(getErrorMask() | (1 << idet));
|
||||
if (ret1 == FAIL)
|
||||
@ -1257,6 +1266,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getRunStatus(int detPos) {
|
||||
for (const auto& value : r)
|
||||
if (value != IDLE)
|
||||
return value;
|
||||
return IDLE;
|
||||
}
|
||||
|
||||
int multiSlsDetector::prepareAcquisition(int detPos) {
|
||||
@ -1385,11 +1395,11 @@ int multiSlsDetector::readAll(int detPos) {
|
||||
int multiSlsDetector::configureMAC(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->configureMAC(getNumberOfDetectors(Y));
|
||||
return detectors[detPos]->configureMAC();
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::configureMAC, getNumberOfDetectors(Y));
|
||||
auto r = parallelCall(&slsDetector::configureMAC);
|
||||
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
|
||||
}
|
||||
|
||||
@ -1563,11 +1573,11 @@ double multiSlsDetector::getMeasuredSubFramePeriod(bool inseconds, int detPos){
|
||||
int64_t multiSlsDetector::getTimeLeft(timerIndex index, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->getTimeLeft(index, t);
|
||||
return detectors[detPos]->getTimeLeft(index);
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::getTimeLeft, index, t);
|
||||
auto r = parallelCall(&slsDetector::getTimeLeft, index);
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -1600,10 +1610,10 @@ int multiSlsDetector::setDynamicRange(int p, int detPos) {
|
||||
thisMultiDetector->dataBytes = 0;
|
||||
thisMultiDetector->dataBytesInclGapPixels = 0;
|
||||
thisMultiDetector->numberOfChannels = 0;
|
||||
for (size_t idet = 0; idet < detectors.size(); ++det_id) {
|
||||
thisMultiDetector->dataBytes += detectors[idet]->getDataBytes();
|
||||
thisMultiDetector->dataBytesInclGapPixels += detectors[idet]->getDataBytesInclGapPixels();
|
||||
thisMultiDetector->numberOfChannels += detectors[idet]->getTotalNumberOfChannels();
|
||||
for (auto* it : detectors) {
|
||||
thisMultiDetector->dataBytes += it->getDataBytes();
|
||||
thisMultiDetector->dataBytesInclGapPixels += it->getDataBytesInclGapPixels();
|
||||
thisMultiDetector->numberOfChannels += it->getTotalNumberOfChannels();
|
||||
}
|
||||
|
||||
|
||||
@ -1669,11 +1679,11 @@ int multiSlsDetector::setDAC(int val, dacIndex idac, int mV, int detPos) {
|
||||
int multiSlsDetector::getADC(dacIndex idac, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->getADC(val, idac);
|
||||
return detectors[detPos]->getADC(idac);
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::getADC, val, idac);
|
||||
auto r = parallelCall(&slsDetector::getADC, idac);
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -1729,7 +1739,7 @@ uint32_t multiSlsDetector::writeRegister(uint32_t addr, uint32_t val, int detPos
|
||||
|
||||
// can't have different values
|
||||
FILE_LOG(logERROR) << "Error: Different Values for function writeRegister "
|
||||
"(write 0x" << hex << val << " to addr 0x" << hex << addr << dec << ")";
|
||||
"(write 0x" << std::hex << val << " to addr 0x" << std::hex << addr << std::dec << ")";
|
||||
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
|
||||
return -1;
|
||||
}
|
||||
@ -1748,7 +1758,7 @@ uint32_t multiSlsDetector::readRegister(uint32_t addr, int detPos) {
|
||||
|
||||
// can't have different values
|
||||
FILE_LOG(logERROR) << "Error: Different Values for function readRegister "
|
||||
"(read from 0x" << hex << addr << dec << ")";
|
||||
"(read from 0x" << std::hex << addr << std::dec << ")";
|
||||
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
|
||||
return -1;
|
||||
}
|
||||
@ -1767,7 +1777,7 @@ uint32_t multiSlsDetector::setBit(uint32_t addr, int n, int detPos) {
|
||||
|
||||
// can't have different values
|
||||
FILE_LOG(logERROR) << "Error: Different Values for function setBit "
|
||||
"(set bit " << n << " to addr 0x" << hex << addr << dec << ")";
|
||||
"(set bit " << n << " to addr 0x" << std::hex << addr << std::dec << ")";
|
||||
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
|
||||
return -1;
|
||||
}
|
||||
@ -1786,7 +1796,7 @@ uint32_t multiSlsDetector::clearBit(uint32_t addr, int n, int detPos) {
|
||||
|
||||
// can't have different values
|
||||
FILE_LOG(logERROR) << "Error: Different Values for function clearBit "
|
||||
"(clear bit " << n << " to addr 0x" << hex << addr << dec << ")";
|
||||
"(clear bit " << n << " to addr 0x" << std::hex << addr << std::dec << ")";
|
||||
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
|
||||
return -1;
|
||||
}
|
||||
@ -1803,8 +1813,8 @@ std::string multiSlsDetector::setNetworkParameter(networkParameter p, std::strin
|
||||
// single argument for all
|
||||
if (s.find('+') == std::string::npos) {
|
||||
|
||||
if (p =! RECEIVER_STREAMING_PORT && p != CLIENT_STREAMING_PORT){
|
||||
auto r = parallelCall(&slsDetector::setReadOutFlags, flag);
|
||||
if (p != RECEIVER_STREAMING_PORT && p != CLIENT_STREAMING_PORT){
|
||||
auto r = parallelCall(&slsDetector::setNetworkParameter, p, s);
|
||||
return sls::concatenateIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -1814,8 +1824,8 @@ std::string multiSlsDetector::setNetworkParameter(networkParameter p, std::strin
|
||||
|
||||
std::vector<std::string> r;
|
||||
for (size_t idet = 0; idet < detectors.size(); ++idet) {
|
||||
s = to_string(firstPort + (idet * numSockets));
|
||||
r.push_back(detectots[idet]->setNetworkParameter(p,s));
|
||||
s = std::to_string(firstPort + (idet * numSockets));
|
||||
r.push_back(detectors[idet]->setNetworkParameter(p,s));
|
||||
}
|
||||
return sls::concatenateIfDifferent(r);
|
||||
}
|
||||
@ -1851,7 +1861,7 @@ std::string multiSlsDetector::getNetworkParameter(networkParameter p, int detPos
|
||||
|
||||
int multiSlsDetector::setReceiverDataStreamingOutPort(int i, int detPos) {
|
||||
if (i >= 0) {
|
||||
std::string s = to_string(i);
|
||||
std::string s = std::to_string(i);
|
||||
int prev_streaming = enableDataStreamingFromReceiver(-1, detPos);
|
||||
setNetworkParameter(RECEIVER_STREAMING_PORT, s, detPos);
|
||||
if (prev_streaming) {
|
||||
@ -1865,7 +1875,7 @@ int multiSlsDetector::setReceiverDataStreamingOutPort(int i, int detPos) {
|
||||
|
||||
int multiSlsDetector::setClientDataStreamingInPort(int i, int detPos) {
|
||||
if (i >= 0) {
|
||||
std::string s = to_string(i);
|
||||
std::string s = std::to_string(i);
|
||||
int prev_streaming = enableDataStreamingToClient();
|
||||
setNetworkParameter(CLIENT_STREAMING_PORT, s, detPos);
|
||||
if (prev_streaming) {
|
||||
@ -1905,8 +1915,8 @@ std::string multiSlsDetector::setClientDataStreamingInIP(std::string ip, int det
|
||||
|
||||
int multiSlsDetector::setFlowControl10G(int enable, int detPos) {
|
||||
std::string s;
|
||||
if (i != -1) {
|
||||
s = to_string((enable >= 1) ? 1 : 0);
|
||||
if (enable != -1) {
|
||||
s = std::to_string((enable >= 1) ? 1 : 0);
|
||||
s = setNetworkParameter(FLOW_CONTROL_10G, s);
|
||||
} else
|
||||
s = getNetworkParameter(FLOW_CONTROL_10G);
|
||||
@ -1917,11 +1927,11 @@ int multiSlsDetector::setFlowControl10G(int enable, int detPos) {
|
||||
int multiSlsDetector::digitalTest(digitalTestMode mode, int ival, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->digitalTest(ival);
|
||||
return detectors[detPos]->digitalTest(mode, ival);
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::digitalTest, ival);
|
||||
auto r = parallelCall(&slsDetector::digitalTest, mode, ival);
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -1937,7 +1947,7 @@ int multiSlsDetector::loadImageToDetector(imageType index, std::string const fna
|
||||
//read image for all
|
||||
int nch = thisMultiDetector->numberOfChannels;
|
||||
short int imageVals[nch];
|
||||
if (readDataFile(fname, imageVals, nch) < nch * sizeof(short int)) {
|
||||
if (readDataFile(fname, imageVals, nch) < nch * (int)sizeof(short int)) {
|
||||
FILE_LOG(logERROR) << "Could not open file or not enough data in file "
|
||||
"to load image to detector.";
|
||||
setErrorMask(getErrorMask() | MULTI_OTHER_ERROR);
|
||||
@ -1974,7 +1984,7 @@ int multiSlsDetector::writeCounterBlockFile(std::string const fname, int startAC
|
||||
|
||||
// write image if all ok
|
||||
if (sls::allEqualTo(r, static_cast<int>(OK))) {
|
||||
if (writeDataFile(fname, nch, imageVals) < nch * sizeof(short int)) {
|
||||
if (writeDataFile(fname, nch, imageVals) < nch * (int)sizeof(short int)) {
|
||||
FILE_LOG(logERROR) << "Could not open file to write or did not write enough data in file "
|
||||
"to wrte counter block file from detector.";
|
||||
setErrorMask(getErrorMask() | MULTI_OTHER_ERROR);
|
||||
@ -2033,7 +2043,6 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) {
|
||||
}
|
||||
|
||||
// multi
|
||||
int ret1 = -100, ret;
|
||||
int i, xmin, xmax, ymin, ymax, channelX, channelY, idet, lastChannelX,
|
||||
lastChannelY, index, offsetX, offsetY;
|
||||
|
||||
@ -2323,7 +2332,7 @@ int multiSlsDetector::writeAdcRegister(int addr, int val, int detPos) {
|
||||
|
||||
// can't have different values
|
||||
FILE_LOG(logERROR) << "Error: Different Values for function writeAdcRegister "
|
||||
"(write 0x" << hex << val << " to addr 0x" << hex << addr << dec << ")";
|
||||
"(write 0x" << std::hex << val << " to addr 0x" << std::hex << addr << std::dec << ")";
|
||||
setErrorMask(getErrorMask() | MULTI_HAVE_DIFFERENT_VALUES);
|
||||
return -1;
|
||||
}
|
||||
@ -2582,14 +2591,12 @@ int multiSlsDetector::setAutoComparatorDisableMode(int ival, int detPos) {
|
||||
|
||||
int multiSlsDetector::getChanRegs(double* retval, bool fromDetector, int detPos) {
|
||||
|
||||
int nch = thisMultiDetector->numberOfChannels;
|
||||
int offset = 0;
|
||||
std::vector<int> r;
|
||||
|
||||
for (size_t idet = 0; idet < detectors.size(); ++idet) {
|
||||
int nch = detectors[idet]->getTotalNumberOfChannels();
|
||||
for (auto* it : detectors) {
|
||||
int nch = it->getTotalNumberOfChannels();
|
||||
double result[nch];
|
||||
r.push_back(detectors[idet]->getChanRegs(result, fromDetector));
|
||||
r.push_back(it->getChanRegs(result, fromDetector));
|
||||
memcpy(retval + offset, result, nch * sizeof(double));
|
||||
}
|
||||
return sls::minusOneIfDifferent(r);
|
||||
@ -2608,7 +2615,7 @@ int multiSlsDetector::calibratePedestal(int frames, int detPos) {
|
||||
}
|
||||
|
||||
|
||||
int multiSlsDetector::setRateCorrection(double t, int detPos) {
|
||||
int multiSlsDetector::setRateCorrection(int t, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->setRateCorrection(t);
|
||||
@ -2653,9 +2660,9 @@ int multiSlsDetector::setReceiverOnline(int off, int detPos) {
|
||||
// multi
|
||||
if (off != GET_ONLINE_FLAG) {
|
||||
auto r = parallelCall(&slsDetector::setReceiverOnline, off);
|
||||
receiverOnlineFlag->onlineFlag = sls::minusOneIfDifferent(r);
|
||||
thisMultiDetector->receiverOnlineFlag = sls::minusOneIfDifferent(r);
|
||||
}
|
||||
return receiverOnlineFlag->onlineFlag;
|
||||
return thisMultiDetector->receiverOnlineFlag;
|
||||
}
|
||||
|
||||
|
||||
@ -2674,11 +2681,11 @@ std::string multiSlsDetector::checkReceiverOnline(int detPos) {
|
||||
int multiSlsDetector::lockReceiver(int lock, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->lockReceiver(p);
|
||||
return detectors[detPos]->lockReceiver(lock);
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::lockReceiver, p);
|
||||
auto r = parallelCall(&slsDetector::lockReceiver, lock);
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -2695,7 +2702,7 @@ std::string multiSlsDetector::getReceiverLastClientIP(int detPos) {
|
||||
}
|
||||
|
||||
|
||||
int multiSlsDetector::exitReceiver(int imod) {
|
||||
int multiSlsDetector::exitReceiver(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->exitReceiver();
|
||||
@ -2752,11 +2759,11 @@ std::string multiSlsDetector::setFileName(std::string s, int detPos) {
|
||||
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->getFileName(s);
|
||||
return detectors[detPos]->setFileName(s);
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::getFileName, s);
|
||||
auto r = parallelCall(&slsDetector::setFileName, s);
|
||||
return sls::concatenateIfDifferent(r);
|
||||
}
|
||||
|
||||
@ -2897,6 +2904,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getReceiverStatus(int detPos) {
|
||||
for (const auto& value : r)
|
||||
if (value != IDLE)
|
||||
return value;
|
||||
return IDLE;
|
||||
}
|
||||
|
||||
|
||||
@ -2914,7 +2922,7 @@ int multiSlsDetector::getFramesCaughtByReceiver(int detPos) {
|
||||
return -1;
|
||||
|
||||
// return average
|
||||
return ((sls::sum(r))/(int)detector.size());
|
||||
return ((sls::sum(r))/(int)detectors.size());
|
||||
}
|
||||
|
||||
|
||||
@ -2932,7 +2940,7 @@ int multiSlsDetector::getReceiverCurrentFrameIndex(int detPos) {
|
||||
return -1;
|
||||
|
||||
// return average
|
||||
return ((sls::sum(r))/(int)detector.size());
|
||||
return ((sls::sum(r))/(int)detectors.size());
|
||||
}
|
||||
|
||||
|
||||
@ -2952,9 +2960,8 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) {
|
||||
if (destroy) {
|
||||
cprintf(MAGENTA, "Going to destroy data sockets\n");
|
||||
//close socket
|
||||
for (auto& it : zmqSocket) {
|
||||
delete(*it);
|
||||
}
|
||||
for (auto* it : zmqSocket)
|
||||
delete it;
|
||||
zmqSocket.clear();
|
||||
|
||||
client_downstream = false;
|
||||
@ -2979,7 +2986,7 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) {
|
||||
detectors[iSocket / numSocketsPerDetector]->getClientStreamingIP().c_str(),
|
||||
portnum);
|
||||
zmqSocket.push_back(z);
|
||||
printf("Zmq Client[%d] at %s\n", iSocket, z->GetZmqServerAddress());
|
||||
printf("Zmq Client[%lu] at %s\n", iSocket, z->GetZmqServerAddress());
|
||||
} catch (...) {
|
||||
cprintf(RED, "Error: Could not create Zmq socket on port %d\n", portnum);
|
||||
createReceivingDataSockets(true);
|
||||
@ -3203,7 +3210,7 @@ void multiSlsDetector::readFrameFromReceiver() {
|
||||
}
|
||||
|
||||
// Disconnect resources
|
||||
for (size_t = 0; i < zmqSocket.size(); ++i)
|
||||
for (size_t i= 0; i < zmqSocket.size(); ++i)
|
||||
if (connectList[i])
|
||||
zmqSocket[i]->Disconnect();
|
||||
|
||||
@ -3482,12 +3489,12 @@ int multiSlsDetector::setCTBPattern(std::string fname, int detPos) {
|
||||
uint64_t multiSlsDetector::setCTBWord(int addr, uint64_t word, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->setCTBWord(i);
|
||||
return detectors[detPos]->setCTBWord(addr, word);
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::setCTBWord, addr, word);
|
||||
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
|
||||
return sls::minusOneIfDifferent(r);
|
||||
}
|
||||
|
||||
|
||||
@ -3498,7 +3505,10 @@ int multiSlsDetector::setCTBPatLoops(int level, int& start, int& stop, int& n, i
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::setCTBPatLoops,level, start, stop, n);
|
||||
std::vector<int> r;
|
||||
for (auto* it : detectors) {
|
||||
r.push_back(it->setCTBPatLoops(level, start, stop, n));
|
||||
}
|
||||
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
|
||||
}
|
||||
|
||||
@ -3547,7 +3557,7 @@ int multiSlsDetector::retrieveDetectorSetup(std::string const fname1, int level)
|
||||
|
||||
if (level==2) {
|
||||
#ifdef VERBOSE
|
||||
cout << "config file read" << endl;
|
||||
std::cout << "config file read" << std::endl;
|
||||
#endif
|
||||
fname=fname1+std::string(".det");
|
||||
} else
|
||||
@ -3773,26 +3783,26 @@ void multiSlsDetector::registerDataCallback(int( *userCallback)(detectorData*, i
|
||||
int multiSlsDetector::setTotalProgress() {
|
||||
int nf=1, nc=1, ns=1, nm=1;
|
||||
|
||||
if (timerValue[FRAME_NUMBER])
|
||||
nf=timerValue[FRAME_NUMBER];
|
||||
if (thisMultiDetector->timerValue[FRAME_NUMBER])
|
||||
nf=thisMultiDetector->timerValue[FRAME_NUMBER];
|
||||
|
||||
if (timerValue[CYCLES_NUMBER]>0)
|
||||
nc=timerValue[CYCLES_NUMBER];
|
||||
if (thisMultiDetector->timerValue[CYCLES_NUMBER]>0)
|
||||
nc=thisMultiDetector->timerValue[CYCLES_NUMBER];
|
||||
|
||||
if (timerValue[STORAGE_CELL_NUMBER]>0)
|
||||
ns=timerValue[STORAGE_CELL_NUMBER]+1;
|
||||
if (thisMultiDetector->timerValue[STORAGE_CELL_NUMBER]>0)
|
||||
ns=thisMultiDetector->timerValue[STORAGE_CELL_NUMBER]+1;
|
||||
|
||||
if (timerValue[MEASUREMENTS_NUMBER]>0)
|
||||
nm=timerValue[MEASUREMENTS_NUMBER];
|
||||
if (thisMultiDetector->timerValue[MEASUREMENTS_NUMBER]>0)
|
||||
nm=thisMultiDetector->timerValue[MEASUREMENTS_NUMBER];
|
||||
|
||||
totalProgress=nm*nf*nc*ns;
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "nm " << nm << endl;
|
||||
cout << "nf " << nf << endl;
|
||||
cout << "nc " << nc << endl;
|
||||
cout << "ns " << ns << endl;
|
||||
cout << "Set total progress " << totalProgress << endl;
|
||||
std::cout << "nm " << nm << std::endl;
|
||||
std::cout << "nf " << nf << std::endl;
|
||||
std::cout << "nc " << nc << std::endl;
|
||||
std::cout << "ns " << ns << std::endl;
|
||||
std::cout << "Set total progress " << totalProgress << std::endl;
|
||||
#endif
|
||||
return totalProgress;
|
||||
}
|
||||
@ -3801,7 +3811,7 @@ int multiSlsDetector::setTotalProgress() {
|
||||
double multiSlsDetector::getCurrentProgress() {
|
||||
pthread_mutex_lock(&mp);
|
||||
#ifdef VERBOSE
|
||||
cout << progressIndex << " / " << totalProgress << endl;
|
||||
std::cout << progressIndex << " / " << totalProgress << std::endl;
|
||||
#endif
|
||||
|
||||
double p=100.*((double)progressIndex)/((double)totalProgress);
|
||||
@ -3813,13 +3823,13 @@ double multiSlsDetector::getCurrentProgress() {
|
||||
void multiSlsDetector::incrementProgress() {
|
||||
pthread_mutex_lock(&mp);
|
||||
progressIndex++;
|
||||
cout << std::fixed << std::setprecision(2) << std::setw (6)
|
||||
std::cout << std::fixed << std::setprecision(2) << std::setw (6)
|
||||
<< 100.*((double)progressIndex)/((double)totalProgress) << " \%";
|
||||
pthread_mutex_unlock(&mp);
|
||||
#ifdef VERBOSE
|
||||
cout << endl;
|
||||
std::cout << std::endl;
|
||||
#else
|
||||
cout << "\r" << flush;
|
||||
std::cout << "\r" << std::flush;
|
||||
#endif
|
||||
|
||||
}
|
||||
@ -3828,13 +3838,13 @@ void multiSlsDetector::incrementProgress() {
|
||||
void multiSlsDetector::setCurrentProgress(int i){
|
||||
pthread_mutex_lock(&mp);
|
||||
progressIndex=i;
|
||||
cout << std::fixed << std::setprecision(2) << std::setw (6)
|
||||
std::cout << std::fixed << std::setprecision(2) << std::setw (6)
|
||||
<< 100.*((double)progressIndex)/((double)totalProgress) << " \%";
|
||||
pthread_mutex_unlock(&mp);
|
||||
#ifdef VERBOSE
|
||||
cout << endl;
|
||||
std::cout << std::endl;
|
||||
#else
|
||||
cout << "\r" << flush;
|
||||
std::cout << "\r" << std::flush;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -3863,7 +3873,7 @@ int multiSlsDetector::acquire(){
|
||||
void *status;
|
||||
setJoinThread(0);
|
||||
|
||||
int nm=timerValue[MEASUREMENTS_NUMBER];
|
||||
int nm=thisMultiDetector->timerValue[MEASUREMENTS_NUMBER];
|
||||
if (nm<1)
|
||||
nm=1;
|
||||
|
||||
@ -3900,7 +3910,7 @@ int multiSlsDetector::acquire(){
|
||||
|
||||
pthread_mutex_lock(&mg);
|
||||
if(startReceiver() == FAIL) {
|
||||
cout << "Start receiver failed " << endl;
|
||||
std::cout << "Start receiver failed " << std::endl;
|
||||
stopReceiver();
|
||||
thisMultiDetector->stoppedFlag=1;
|
||||
pthread_mutex_unlock(&mg);
|
||||
@ -3966,14 +3976,14 @@ int multiSlsDetector::acquire(){
|
||||
progress_call(getCurrentProgress(),pProgressCallArg);
|
||||
|
||||
if (acquisition_finished)
|
||||
acquisition_finished(getCurrentProgress(),getDetectorStatus(),acqFinished_p);
|
||||
acquisition_finished(getCurrentProgress(),getRunStatus(),acqFinished_p);
|
||||
|
||||
sem_destroy(&sem_newRTAcquisition);
|
||||
sem_destroy(&sem_endRTAcquisition);
|
||||
|
||||
#ifdef VERBOSE
|
||||
clock_gettime(CLOCK_REALTIME, &end);
|
||||
cout << "Elapsed time for acquisition:" << (( end.tv_sec - begin.tv_sec ) + ( end.tv_nsec - begin.tv_nsec ) / 1000000000.0) << " seconds" << endl;
|
||||
std::cout << "Elapsed time for acquisition:" << (( end.tv_sec - begin.tv_sec ) + ( end.tv_nsec - begin.tv_nsec ) / 1000000000.0) << " seconds" << std::endl;
|
||||
#endif
|
||||
|
||||
setAcquiringFlag(false);
|
||||
@ -3985,7 +3995,7 @@ int multiSlsDetector::acquire(){
|
||||
|
||||
|
||||
|
||||
int multiSlsDetector::setThreadedProcessing(int enable=-1) {
|
||||
int multiSlsDetector::setThreadedProcessing(int enable) {
|
||||
if (enable>=0)
|
||||
thisMultiDetector->threadedProcessing=enable;
|
||||
return thisMultiDetector->threadedProcessing;
|
||||
@ -4029,9 +4039,8 @@ void multiSlsDetector::startProcessingThread() {
|
||||
|
||||
|
||||
void* multiSlsDetector::startProcessData(void *n) {
|
||||
postProcessing *myDet=(postProcessing*)n;
|
||||
myDet->processData();
|
||||
pthread_exit(NULL);
|
||||
((multiSlsDetector*)n)->processData();
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,6 +16,7 @@ class detectorData;
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <semaphore.h>
|
||||
|
||||
|
||||
#define MULTI_SHMVERSION 0x181002
|
||||
@ -244,6 +245,7 @@ public:
|
||||
*/
|
||||
slsDetector *operator()(int detPos = -1) const;
|
||||
|
||||
slsDetector* operator[](int detPos) const;
|
||||
/**
|
||||
* Free shared memory from the command line
|
||||
* avoiding creating the constructor classes and mapping
|
||||
@ -656,7 +658,7 @@ public:
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns sub frame dead time in ns, or s if specified
|
||||
*/
|
||||
double setSubFrameDeadTime(double t = -1, bool inseconds = false, int detPos = -1);
|
||||
double setSubFrameExposureDeadTime(double t = -1, bool inseconds = false, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Set/get number of frames
|
||||
@ -1165,7 +1167,7 @@ public:
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns 0 if rate correction disabled, >0 otherwise
|
||||
*/
|
||||
int setRateCorrection(double t=0, int detPos = -1);
|
||||
int setRateCorrection(int t=0, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Get rate correction ( Eiger)
|
||||
@ -1561,6 +1563,12 @@ public:
|
||||
*/
|
||||
bool isDetectorIndexOutOfBounds(int detPos);
|
||||
|
||||
/**
|
||||
* Combines data from all readouts and gives it to the gui
|
||||
* or just gives progress of acquisition by polling receivers
|
||||
*/
|
||||
void* processData();
|
||||
|
||||
private:
|
||||
/**
|
||||
* Initialize (open/create) shared memory for the sharedMultiDetector structure
|
||||
@ -1640,12 +1648,6 @@ private:
|
||||
*/
|
||||
static void* startProcessData(void *n);
|
||||
|
||||
/**
|
||||
* Combines data from all readouts and gives it to the gui
|
||||
* or just gives progress of acquisition by polling receivers
|
||||
*/
|
||||
void* processData();
|
||||
|
||||
/**
|
||||
* Check if processing thread is ready to join main thread
|
||||
* @returns true if ready, else false
|
||||
|
@ -31,13 +31,11 @@ public:
|
||||
"[id-][pos:]channel arg" << std::endl; \
|
||||
std::cout << std::endl; \
|
||||
return; \
|
||||
if (del) delete myDetector; \
|
||||
}; \
|
||||
if (action==slsDetectorDefs::GET_ACTION && argc<1) { \
|
||||
std::cout << "Wrong usage - should be: "<< argv[0] << \
|
||||
"[id-][pos:]channel arg" << std::endl; \
|
||||
std::cout << std::endl; \
|
||||
if (del) delete myDetector; \
|
||||
return; \
|
||||
}; \
|
||||
|
||||
@ -93,17 +91,13 @@ public:
|
||||
std::string scmd = cmd; \
|
||||
// free without calling multiSlsDetector constructor
|
||||
if (scmd == "free") { \
|
||||
if (pos != -1) \
|
||||
slsDetector::freeSharedMemory(id, pos); \
|
||||
else \
|
||||
multiSlsDetector::freeSharedMemory(id); \
|
||||
multiSlsDetector::freeSharedMemory(id, pos); \
|
||||
return; \
|
||||
} \
|
||||
// get user details without verify sharedMultiSlsDetector version
|
||||
else if ((scmd == "user") && (action==slsDetectorDefs::GET_ACTION)) { \
|
||||
verify = false; \
|
||||
update = false; \
|
||||
myDetector=NULL; \
|
||||
} \
|
||||
} \
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -353,7 +353,7 @@ public:
|
||||
* @param pos insignificant
|
||||
* @returns hostname
|
||||
*/
|
||||
std::string getHostname(int pos = -1);
|
||||
std::string getHostname();
|
||||
|
||||
/**
|
||||
* Connect to the control port
|
||||
@ -388,7 +388,7 @@ public:
|
||||
*/
|
||||
void disconnectStop();
|
||||
|
||||
using slsDetectorUtils::getDetectorType;
|
||||
using slsDetectorBase::getDetectorType;
|
||||
|
||||
/**
|
||||
* Get detector type by connecting to the detector without creating an object
|
||||
@ -594,36 +594,22 @@ public:
|
||||
*/
|
||||
int updateDetector();
|
||||
|
||||
/**
|
||||
* Load configuration from a configuration File
|
||||
* calls readConfigurationFile and gives it the stream
|
||||
* @param fname configuration file name
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int readConfigurationFile(std::string const fname);
|
||||
|
||||
/**
|
||||
* Load configuration from a stream
|
||||
* @param infile stream
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int readConfigurationFile(std::ifstream &infile);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
int writeConfigurationFile(std::string const fname);
|
||||
int writeConfigurationFile(std::string const fname, multiSlsDetector* m);
|
||||
|
||||
/**
|
||||
* Write current configuration to a stream
|
||||
* @param outfile outstream
|
||||
* @param id detector id
|
||||
* @param m multiSlsDetector reference to parse commands
|
||||
* @returns OK or FAIL
|
||||
*/
|
||||
int writeConfigurationFile(std::ofstream &outfile, int id=-1);
|
||||
int writeConfigurationFile(std::ofstream &outfile, multiSlsDetector* m);
|
||||
|
||||
/**
|
||||
* Returns the trimfile or settings file name (Useless??)
|
||||
@ -772,10 +758,9 @@ public:
|
||||
|
||||
/**
|
||||
* Configures in detector the destination for UDP packets
|
||||
* @param ndety number of detectors in y dir
|
||||
* @returns OK or FAIL
|
||||
*/
|
||||
int configureMAC(int ndety);
|
||||
int configureMAC();
|
||||
|
||||
/**
|
||||
* Set/get timer value (not all implemented for all detectors)
|
||||
@ -829,7 +814,7 @@ public:
|
||||
* @param mV 0 in dac units or 1 in mV
|
||||
* @returns current DAC value
|
||||
*/
|
||||
int setDAC(int val, dacIndex index , int mV);
|
||||
int setDAC(int val, dacIndex index, int mV);
|
||||
|
||||
/**
|
||||
* Get adc value
|
||||
@ -894,14 +879,14 @@ public:
|
||||
/**
|
||||
* Set network parameter
|
||||
* @param p network parameter type
|
||||
* @param s network parameter value
|
||||
* @param value network parameter value
|
||||
* @returns network parameter value set (from getNetworkParameter)
|
||||
*/
|
||||
std::string setNetworkParameter(networkParameter index, std::string value);
|
||||
|
||||
/**
|
||||
* Get network parameter
|
||||
* @param p network parameter type
|
||||
* @param index network parameter type
|
||||
* @returns network parameter value set (from getNetworkParameter)
|
||||
*/
|
||||
std::string getNetworkParameter(networkParameter index);
|
||||
@ -1056,9 +1041,10 @@ public:
|
||||
/**
|
||||
* Execute a digital test (Gotthard, Mythen)
|
||||
* @param mode testmode type
|
||||
* @param value 1 to set or 0 to clear the digital test bit
|
||||
* @returns result of test
|
||||
*/
|
||||
int digitalTest(digitalTestMode mode);
|
||||
int digitalTest(digitalTestMode mode, int ival=-1);
|
||||
|
||||
/**
|
||||
* Load dark or gain image to detector (Gotthard)
|
||||
@ -1336,23 +1322,10 @@ public:
|
||||
* for current settings
|
||||
* @returns 0 if rate correction disabled, >0 otherwise
|
||||
*/
|
||||
int setRateCorrection(double t=0);
|
||||
int setRateCorrection(int t=0);
|
||||
|
||||
/**
|
||||
* Get rate correction (Mythen, Eiger)
|
||||
* @param t reference for dead time
|
||||
* @returns 0 if rate correction disabled, > 0 otherwise
|
||||
*/
|
||||
int getRateCorrection(double &t);
|
||||
|
||||
/**
|
||||
* Get rate correction tau (Mythen, Eiger)
|
||||
* @returns 0 if rate correction disabled, otherwise the tau used for the correction
|
||||
*/
|
||||
double getRateCorrectionTau();
|
||||
|
||||
/**
|
||||
* Get rate correction (Mythen, Eiger)
|
||||
* Get rate correction Eiger)
|
||||
* @returns 0 if rate correction disabled, > 0 otherwise
|
||||
*/
|
||||
int getRateCorrection();
|
||||
|
@ -791,7 +791,7 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) {
|
||||
*/
|
||||
|
||||
/*! \page data
|
||||
- <b>ratecorr [ns]</b> Returns the dead time used for rate correections in ns (int). \c put sets the deadtime correction constant in ns, -1 will set it to default tau of settings (0 unset). \c Returns \c (double with 9 decimal digit precision). For Eiger only.
|
||||
- <b>ratecorr [ns]</b> Returns the dead time used for rate correections in ns (int). \c put sets the deadtime correction constant in ns, -1 will set it to default tau of settings (0 unset). \c Returns \c (int). For Eiger only.
|
||||
*/
|
||||
descrToFuncMap[i].m_pFuncName="ratecorr"; //
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdRateCorr;
|
||||
@ -2046,7 +2046,7 @@ Make sure you have first read \ref intro "the introduction".
|
||||
|
||||
|
||||
string slsDetectorCommand::cmdUnknown(int narg, char *args[], int action, int detPos) {
|
||||
return string("Unknown command ")+string(args[0])+string("\n")+helpLine(0, action);
|
||||
return string("Unknown command ")+string(args[0])+string("\n")+helpLine(0, args, action, detPos);
|
||||
|
||||
}
|
||||
string slsDetectorCommand::cmdUnderDevelopment(int narg, char *args[], int action, int detPos) {
|
||||
@ -2057,7 +2057,7 @@ string slsDetectorCommand::cmdUnderDevelopment(int narg, char *args[], int actio
|
||||
|
||||
|
||||
|
||||
string slsDetectorCommand::helpLine(int narg, int action) {
|
||||
string slsDetectorCommand::helpLine(int narg, char *args[], int action, int detPos) {
|
||||
|
||||
ostringstream os;
|
||||
|
||||
@ -2074,7 +2074,7 @@ string slsDetectorCommand::helpLine(int narg, int action) {
|
||||
os << endl;
|
||||
return os.str();
|
||||
}
|
||||
return executeLine(narg,args,HELP_ACTION);
|
||||
return executeLine(narg,args,HELP_ACTION, detPos);
|
||||
|
||||
|
||||
|
||||
@ -2392,9 +2392,9 @@ string slsDetectorCommand::cmdHelp(int narg, char *args[], int action, int detPo
|
||||
cout << narg << endl;
|
||||
|
||||
if (narg>=1)
|
||||
return helpLine(narg-1, action);
|
||||
return helpLine(narg-1, args, action, detPos);
|
||||
else
|
||||
return helpLine(0, action);
|
||||
return helpLine(0, args, action, detPos);
|
||||
|
||||
|
||||
|
||||
@ -2686,21 +2686,16 @@ string slsDetectorCommand::cmdRateCorr(int narg, char *args[], int action, int d
|
||||
if (action==HELP_ACTION) {
|
||||
return helpRateCorr(action);
|
||||
}
|
||||
double fval;
|
||||
int fval;
|
||||
char answer[1000];
|
||||
|
||||
myDet->setOnline(ONLINE_FLAG, detPos);
|
||||
|
||||
if (action==PUT_ACTION) {
|
||||
sscanf(args[1],"%lf",&fval);
|
||||
sscanf(args[1],"%d",&fval);
|
||||
myDet->setRateCorrection(fval, detPos);
|
||||
}
|
||||
double t;
|
||||
if (myDet->getRateCorrection(t, detPos)) {
|
||||
sprintf(answer,"%0.9f",t);
|
||||
} else {
|
||||
sprintf(answer,"%0.9f",0.);
|
||||
}
|
||||
sprintf(answer,"%d",myDet->getRateCorrection(detPos));
|
||||
return string(answer);
|
||||
}
|
||||
|
||||
@ -3459,12 +3454,12 @@ string slsDetectorCommand::cmdSettings(int narg, char *args[], int action, int d
|
||||
}
|
||||
detectorType type = myDet->getDetectorsType(detPos);
|
||||
if (type != EIGER || (type == EIGER && narg<=2)) {
|
||||
myDet->setThresholdEnergy(val, -1, GET_SETTINGS, 1, detPos);
|
||||
myDet->setThresholdEnergy(val, GET_SETTINGS, 1, detPos);
|
||||
} else {
|
||||
detectorSettings sett= myDet->getDetectorSettings(string(args[2]));
|
||||
if(sett == -1)
|
||||
return string("invalid settings value");
|
||||
myDet->setThresholdEnergy(val, -1, sett, 1, detPos);
|
||||
myDet->setThresholdEnergy(val, sett, 1, detPos);
|
||||
}
|
||||
}
|
||||
sprintf(ans,"%d",myDet->getThresholdEnergy(detPos));
|
||||
@ -3478,12 +3473,12 @@ string slsDetectorCommand::cmdSettings(int narg, char *args[], int action, int d
|
||||
if (type != EIGER)
|
||||
return string("not implemented for this detector");
|
||||
if (narg<=2) {
|
||||
myDet->setThresholdEnergy(val, -1, GET_SETTINGS, 0, detPos);
|
||||
myDet->setThresholdEnergy(val, GET_SETTINGS, 0, detPos);
|
||||
} else {
|
||||
detectorSettings sett= myDet->getDetectorSettings(string(args[2]));
|
||||
if(sett == -1)
|
||||
return string("invalid settings value");
|
||||
myDet->setThresholdEnergy(val, -1, sett, 0, detPos);
|
||||
myDet->setThresholdEnergy(val, sett, 0, detPos);
|
||||
}
|
||||
}
|
||||
sprintf(ans,"%d",myDet->getThresholdEnergy(detPos));
|
||||
@ -3996,12 +3991,8 @@ string slsDetectorCommand::cmdDAC(int narg, char *args[], int action, int detPos
|
||||
if(narg >= 3)
|
||||
if(!strcasecmp(args[2],"mv"))
|
||||
mode = 1;
|
||||
#ifdef DACS_INT
|
||||
|
||||
if (sscanf(args[1],"%d", &val))
|
||||
#else
|
||||
if (sscanf(args[1],"%f", &val))
|
||||
#endif
|
||||
;
|
||||
else
|
||||
return string("cannot scan DAC value ")+string(args[1]);
|
||||
@ -4013,11 +4004,7 @@ string slsDetectorCommand::cmdDAC(int narg, char *args[], int action, int detPos
|
||||
if(!strcasecmp(args[1],"mv"))
|
||||
mode = 1;
|
||||
|
||||
#ifdef DACS_INT
|
||||
sprintf(answer,"%d",myDet->setDAC(-1,dac,mode, detPos));
|
||||
#else
|
||||
sprintf(answer,"%f",myDet->setDAC(-1,dac,mode, detPos));
|
||||
#endif
|
||||
if(mode)
|
||||
strcat(answer," mV");
|
||||
return string(answer);
|
||||
@ -4202,7 +4189,6 @@ string slsDetectorCommand::cmdADC(int narg, char *args[], int action, int detPos
|
||||
return string("cannot decode adc ")+cmd;
|
||||
|
||||
myDet->setOnline(ONLINE_FLAG, detPos);
|
||||
#ifdef DACS_INT
|
||||
if (myDet->getDetectorsType(detPos) == EIGER || myDet->getDetectorsType(detPos) == JUNGFRAU){
|
||||
int val = myDet->getADC(adc, detPos);
|
||||
if (val == -1)
|
||||
@ -4211,9 +4197,7 @@ string slsDetectorCommand::cmdADC(int narg, char *args[], int action, int detPos
|
||||
sprintf(answer,"%.2f", (double)val/1000.000);
|
||||
}
|
||||
else sprintf(answer,"%d",myDet->getADC(adc, detPos));
|
||||
#else
|
||||
sprintf(answer,"%f",myDet->getADC(adc, detPos));
|
||||
#endif
|
||||
|
||||
//if ((adc == TEMPERATURE_ADC) || (adc == TEMPERATURE_FPGA))
|
||||
if (adc<=100)
|
||||
strcat(answer,"°C");
|
||||
@ -4337,7 +4321,7 @@ string slsDetectorCommand::cmdTiming(int narg, char *args[], int action, int det
|
||||
myDet->setOnline(ONLINE_FLAG, detPos);
|
||||
if (action==PUT_ACTION) {
|
||||
if (myDet->externalCommunicationType(string(args[1]))== GET_EXTERNAL_COMMUNICATION_MODE)
|
||||
return helpTiming(narg,args, action);
|
||||
return helpTiming(action);
|
||||
myDet->setExternalCommunicationMode(myDet->externalCommunicationType(string(args[1])), detPos);
|
||||
}
|
||||
return myDet->externalCommunicationType(myDet->setExternalCommunicationMode(GET_EXTERNAL_COMMUNICATION_MODE, detPos));
|
||||
@ -4903,20 +4887,20 @@ string slsDetectorCommand::cmdConfiguration(int narg, char *args[], int action,
|
||||
myDet->setReceiverOnline(ONLINE_FLAG, detPos);
|
||||
if (action==PUT_ACTION) {
|
||||
sval=string(args[1]);
|
||||
myDet->retrieveDetectorSetup(sval, 0, detPos);
|
||||
myDet->retrieveDetectorSetup(sval, 0);
|
||||
} else if (action==GET_ACTION) {
|
||||
sval=string(args[1]);
|
||||
myDet->dumpDetectorSetup(sval, 0, detPos);
|
||||
myDet->dumpDetectorSetup(sval, 0);
|
||||
}
|
||||
return sval;
|
||||
} else if (cmd=="setup") {
|
||||
myDet->setReceiverOnline(ONLINE_FLAG, detPos);
|
||||
if (action==PUT_ACTION) {
|
||||
sval=string(args[1]);
|
||||
myDet->retrieveDetectorSetup(sval,2, detPos);
|
||||
myDet->retrieveDetectorSetup(sval,2);
|
||||
} else if (action==GET_ACTION) {
|
||||
sval=string(args[1]);
|
||||
myDet->dumpDetectorSetup(sval,2, detPos);
|
||||
myDet->dumpDetectorSetup(sval,2);
|
||||
}
|
||||
return sval;
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
|
||||
/* \param os output stream to return the help to */
|
||||
/* \param action can be PUT_ACTION or GET_ACTION (from text client even READOUT_ACTION for acquisition) */
|
||||
/* *\/ */
|
||||
std::string helpLine(int narg, int action=HELP_ACTION);
|
||||
std::string helpLine(int narg, char *args[], int action=HELP_ACTION, int detPos = -1);
|
||||
static std::string helpAcquire(int action);
|
||||
static std::string helpData(int action);
|
||||
static std::string helpStatus(int action);
|
||||
@ -146,7 +146,7 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
|
||||
int numberOfCommands;
|
||||
std::string cmd;
|
||||
|
||||
typedef std::string (slsDetectorCommand::*MemFuncGetter)(int narg, char *args[], int action, int detPos = -1);
|
||||
typedef std::string (slsDetectorCommand::*MemFuncGetter)(int narg, char *args[], int action, int detPos);
|
||||
|
||||
|
||||
struct FuncTable
|
||||
|
@ -93,12 +93,12 @@ int64_t slsDetectorUsers::getReceiverSoftwareVersion(int detPos){
|
||||
return myDetector->getId(slsDetectorDefs::RECEIVER_VERSION, detPos);
|
||||
}
|
||||
|
||||
bool isDetectorVersionCompatible(int detPos) {
|
||||
return (myDetector->checkVersionCompatibility(slsDetectorDefs::CONTROL_PORT, detPos) == OK);
|
||||
bool slsDetectorUsers::isDetectorVersionCompatible(int detPos) {
|
||||
return (myDetector->checkVersionCompatibility(slsDetectorDefs::CONTROL_PORT, detPos) == slsReceiverDefs::OK);
|
||||
}
|
||||
|
||||
bool isReceiverVersionCompatible(int detPos) {
|
||||
return (myDetector->checkVersionCompatibility(slsDetectorDefs::DATA_PORT, detPos) == OK);
|
||||
bool slsDetectorUsers::isReceiverVersionCompatible(int detPos) {
|
||||
return (myDetector->checkVersionCompatibility(slsDetectorDefs::DATA_PORT, detPos) == slsReceiverDefs::OK);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::startMeasurement(){
|
||||
@ -139,21 +139,17 @@ int slsDetectorUsers::setBitDepth(int i, int detPos){
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setSettings(int isettings, int detPos){
|
||||
return myDetector->slsDetectorBase::setSettings(isettings, detPos);
|
||||
return myDetector->setSettings((slsDetectorDefs::detectorSettings)isettings, detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::getThresholdEnergy(int detPos){
|
||||
return myDetector->getThresholdEnergy(detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setThresholdEnergy(int e_eV){
|
||||
return myDetector->setThresholdEnergy(e_eV);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setThresholdEnergy(int e_ev, int tb, int isettings, int detPos) {
|
||||
return myDetector->setThresholdEnergy(e_ev, tb,
|
||||
(isettings == -1) ? slsDetectorDefs::GET_SETTINGS : isettings,
|
||||
detPos);
|
||||
return myDetector->setThresholdEnergy(e_ev,
|
||||
(isettings == -1) ? slsDetectorDefs::GET_SETTINGS : (slsDetectorDefs::detectorSettings)isettings,
|
||||
tb, detPos);
|
||||
}
|
||||
|
||||
double slsDetectorUsers::setExposureTime(double t, bool inseconds, int detPos){
|
||||
@ -211,7 +207,7 @@ int slsDetectorUsers::setClockDivider(int value, int detPos) {
|
||||
int slsDetectorUsers::setParallelMode(int value, int detPos) {
|
||||
if(value >= 0)
|
||||
myDetector->setReadOutFlags(slsDetectorDefs::readOutFlags(value), detPos);
|
||||
return myDetector->setReadOutFlags(-1, detPos);
|
||||
return myDetector->setReadOutFlags(slsDetectorDefs::GET_READOUT_FLAGS, detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setOverflowMode(int value, int detPos) {
|
||||
@ -221,7 +217,7 @@ int slsDetectorUsers::setOverflowMode(int value, int detPos) {
|
||||
else
|
||||
myDetector->setReadOutFlags(slsDetectorDefs::NOOVERFLOW, detPos);
|
||||
}
|
||||
int ret = myDetector->setReadOutFlags(-1, detPos);
|
||||
int ret = myDetector->setReadOutFlags(slsDetectorDefs::GET_READOUT_FLAGS, detPos);
|
||||
if (ret == -1)
|
||||
return -1;
|
||||
return ((ret & slsDetectorDefs::SHOW_OVERFLOW) ? 1 : 0);
|
||||
@ -232,19 +228,19 @@ int slsDetectorUsers::setAllTrimbits(int val, int detPos) {
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setDAC(int val, int index , int detPos) {
|
||||
return myDetector->setDAC(val, dacsIndex(index), 0, detPos);
|
||||
return myDetector->setDAC(val, slsDetectorDefs::dacIndex(index), 0, detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::getADC(int index, int detPos) {
|
||||
return myDetector->getADC(dacsIndex(index),detPos);
|
||||
return myDetector->getADC(slsDetectorDefs::dacIndex(index),detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setTenGigabitEthernet(int i, int detPos) {
|
||||
return myDetector->enableTenGigabitEthernet(i, detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setStoragecellStart(int pos) {
|
||||
return myDetector->setStoragecellStart(pos);
|
||||
int slsDetectorUsers::setStoragecellStart(int pos, int detPos) {
|
||||
return myDetector->setStoragecellStart(pos, detPos);
|
||||
}
|
||||
|
||||
int slsDetectorUsers::setHighVoltage(int i, int detPos) {
|
||||
|
@ -147,7 +147,7 @@ public:
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns (1)online/(0)offline status
|
||||
*/
|
||||
int setReceiverOnline(int const online = GET_ONLINE_FLAG, int detPos = -1);
|
||||
int setReceiverOnline(int const online = -1, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Load configuration from a configuration File (for one time detector setup)
|
||||
@ -368,7 +368,7 @@ public:
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns sub frame dead time in ns, or s if specified
|
||||
*/
|
||||
double setSubFrameDeadTime(double t = -1, bool inseconds = false, int detPos = -1);
|
||||
double setSubFrameExposureDeadTime(double t = -1, bool inseconds = false, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Set/get number of frames
|
||||
@ -483,7 +483,7 @@ public:
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns current DAC value
|
||||
*/
|
||||
dacs_t setDAC(int val, int index , int detPos = -1);
|
||||
int setDAC(int val, int index , int detPos = -1);
|
||||
|
||||
/**
|
||||
* Get adc value
|
||||
@ -495,7 +495,7 @@ public:
|
||||
* @param detPos -1 for all detectors in list or specific detector position
|
||||
* @returns current adc value (temperature for eiger and jungfrau in millidegrees)
|
||||
*/
|
||||
dacs_t getADC(int index, int detPos = -1);
|
||||
int getADC(int index, int detPos = -1);
|
||||
|
||||
/**
|
||||
* Enable/disable or 10Gbe (Eiger)
|
||||
|
Loading…
x
Reference in New Issue
Block a user