mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-25 15:50:03 +02:00
WIP
This commit is contained in:
parent
dc1e01b444
commit
0a2a5933da
@ -203,15 +203,6 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates/open shared memory, initializes detector structure and members
|
|
||||||
* Called by constructor/ set hostname / read config file
|
|
||||||
* @param verify true to verify if shared memory version matches existing
|
|
||||||
* one
|
|
||||||
* @param update true to update last user pid, date etc
|
|
||||||
*/
|
|
||||||
void setupMultiDetector(bool verify = true, bool update = true); // private
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loop through the detectors serially and return the result as a vector
|
* Loop through the detectors serially and return the result as a vector
|
||||||
*/
|
*/
|
||||||
@ -251,17 +242,6 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
|||||||
void parallelCall(void (slsDetector::*somefunc)(CT...) const,
|
void parallelCall(void (slsDetector::*somefunc)(CT...) const,
|
||||||
typename NonDeduced<CT>::type... Args) const;
|
typename NonDeduced<CT>::type... Args) const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Decodes which detector and the corresponding channel numbers for it
|
|
||||||
* Mainly useful in a multi detector setROI (Gotthard)
|
|
||||||
* @param offsetX channel number or total channel offset in x direction
|
|
||||||
* @param offsetY channel number or total channel offset in y direction
|
|
||||||
* @param channelX channel number from detector offset in x direction
|
|
||||||
* @param channelY channel number from detector offset in x direction
|
|
||||||
* @returns detector id or -1 if channel number out of range
|
|
||||||
*/
|
|
||||||
int decodeNChannel(int offsetX, int offsetY, int &channelX, int &channelY);// private
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set acquiring flag in shared memory
|
* Set acquiring flag in shared memory
|
||||||
* @param b acquiring flag
|
* @param b acquiring flag
|
||||||
@ -274,12 +254,6 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
|||||||
*/
|
*/
|
||||||
bool getAcquiringFlag() const;//
|
bool getAcquiringFlag() const;//
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if acquiring flag is set, set error if set
|
|
||||||
* @returns FAIL if not ready, OK if ready
|
|
||||||
*/
|
|
||||||
bool isAcquireReady(); // private
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check version compatibility with detector software
|
* Check version compatibility with detector software
|
||||||
* (if hostname/rx_hostname has been set/ sockets created)
|
* (if hostname/rx_hostname has been set/ sockets created)
|
||||||
@ -2235,6 +2209,15 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
|||||||
void addSlsDetector(std::unique_ptr<slsDetector> det);
|
void addSlsDetector(std::unique_ptr<slsDetector> det);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* Creates/open shared memory, initializes detector structure and members
|
||||||
|
* Called by constructor/ set hostname / read config file
|
||||||
|
* @param verify true to verify if shared memory version matches existing
|
||||||
|
* one
|
||||||
|
* @param update true to update last user pid, date etc
|
||||||
|
*/
|
||||||
|
void setupMultiDetector(bool verify = true, bool update = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize (open/create) shared memory for the sharedMultiDetector
|
* Initialize (open/create) shared memory for the sharedMultiDetector
|
||||||
* structure
|
* structure
|
||||||
@ -2260,6 +2243,23 @@ class multiSlsDetector : public virtual slsDetectorDefs {
|
|||||||
*/
|
*/
|
||||||
void updateUserdetails();
|
void updateUserdetails();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if acquiring flag is set, set error if set
|
||||||
|
* @returns FAIL if not ready, OK if ready
|
||||||
|
*/
|
||||||
|
bool isAcquireReady();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decodes which detector and the corresponding channel numbers for it
|
||||||
|
* Mainly useful in a multi detector setROI (Gotthard)
|
||||||
|
* @param offsetX channel number or total channel offset in x direction
|
||||||
|
* @param offsetY channel number or total channel offset in y direction
|
||||||
|
* @param channelX channel number from detector offset in x direction
|
||||||
|
* @param channelY channel number from detector offset in x direction
|
||||||
|
* @returns detector id or -1 if channel number out of range
|
||||||
|
*/
|
||||||
|
int decodeNChannel(int offsetX, int offsetY, int &channelX, int &channelY);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute in command line and return result
|
* Execute in command line and return result
|
||||||
* @param cmd command
|
* @param cmd command
|
||||||
|
@ -131,37 +131,6 @@ void multiSlsDetector::parallelCall(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int &channelX,
|
|
||||||
int &channelY) {
|
|
||||||
channelX = -1;
|
|
||||||
channelY = -1;
|
|
||||||
// loop over
|
|
||||||
for (size_t i = 0; i < detectors.size(); ++i) {
|
|
||||||
int x = detectors[i]->getDetectorOffset(X);
|
|
||||||
int y = detectors[i]->getDetectorOffset(Y);
|
|
||||||
// check x offset range
|
|
||||||
if ((offsetX >= x) &&
|
|
||||||
(offsetX <
|
|
||||||
(x + detectors[i]->getTotalNumberOfChannelsInclGapPixels(X)))) {
|
|
||||||
if (offsetY == -1) {
|
|
||||||
channelX = offsetX - x;
|
|
||||||
return i;
|
|
||||||
} else {
|
|
||||||
// check y offset range
|
|
||||||
if ((offsetY >= y) &&
|
|
||||||
(offsetY <
|
|
||||||
(y + detectors[i]->getTotalNumberOfChannelsInclGapPixels(
|
|
||||||
Y)))) {
|
|
||||||
channelX = offsetX - x;
|
|
||||||
channelY = offsetY - y;
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void multiSlsDetector::setAcquiringFlag(bool flag) {
|
void multiSlsDetector::setAcquiringFlag(bool flag) {
|
||||||
multi_shm()->acquiringFlag = flag;
|
multi_shm()->acquiringFlag = flag;
|
||||||
}
|
}
|
||||||
@ -170,18 +139,6 @@ bool multiSlsDetector::getAcquiringFlag() const {
|
|||||||
return multi_shm()->acquiringFlag;
|
return multi_shm()->acquiringFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool multiSlsDetector::isAcquireReady() {
|
|
||||||
if (multi_shm()->acquiringFlag) {
|
|
||||||
FILE_LOG(logWARNING)
|
|
||||||
<< "Acquire has already started. "
|
|
||||||
"If previous acquisition terminated unexpectedly, "
|
|
||||||
"reset busy flag to restart.(sls_detector_put busy 0)";
|
|
||||||
return FAIL != 0u;
|
|
||||||
}
|
|
||||||
multi_shm()->acquiringFlag = true;
|
|
||||||
return OK != 0u;
|
|
||||||
}
|
|
||||||
|
|
||||||
void multiSlsDetector::checkDetectorVersionCompatibility(int detPos) {
|
void multiSlsDetector::checkDetectorVersionCompatibility(int detPos) {
|
||||||
if (detPos >= 0) {
|
if (detPos >= 0) {
|
||||||
detectors[detPos]->checkDetectorVersionCompatibility();
|
detectors[detPos]->checkDetectorVersionCompatibility();
|
||||||
@ -362,6 +319,49 @@ void multiSlsDetector::updateUserdetails() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool multiSlsDetector::isAcquireReady() {
|
||||||
|
if (multi_shm()->acquiringFlag) {
|
||||||
|
FILE_LOG(logWARNING)
|
||||||
|
<< "Acquire has already started. "
|
||||||
|
"If previous acquisition terminated unexpectedly, "
|
||||||
|
"reset busy flag to restart.(sls_detector_put busy 0)";
|
||||||
|
return FAIL != 0u;
|
||||||
|
}
|
||||||
|
multi_shm()->acquiringFlag = true;
|
||||||
|
return OK != 0u;
|
||||||
|
}
|
||||||
|
|
||||||
|
int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int &channelX,
|
||||||
|
int &channelY) {
|
||||||
|
channelX = -1;
|
||||||
|
channelY = -1;
|
||||||
|
// loop over
|
||||||
|
for (size_t i = 0; i < detectors.size(); ++i) {
|
||||||
|
int x = detectors[i]->getDetectorOffset(X);
|
||||||
|
int y = detectors[i]->getDetectorOffset(Y);
|
||||||
|
// check x offset range
|
||||||
|
if ((offsetX >= x) &&
|
||||||
|
(offsetX <
|
||||||
|
(x + detectors[i]->getTotalNumberOfChannelsInclGapPixels(X)))) {
|
||||||
|
if (offsetY == -1) {
|
||||||
|
channelX = offsetX - x;
|
||||||
|
return i;
|
||||||
|
} else {
|
||||||
|
// check y offset range
|
||||||
|
if ((offsetY >= y) &&
|
||||||
|
(offsetY <
|
||||||
|
(y + detectors[i]->getTotalNumberOfChannelsInclGapPixels(
|
||||||
|
Y)))) {
|
||||||
|
channelX = offsetX - x;
|
||||||
|
channelY = offsetY - y;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
std::string multiSlsDetector::exec(const char *cmd) {
|
std::string multiSlsDetector::exec(const char *cmd) {
|
||||||
int bufsize = 128;
|
int bufsize = 128;
|
||||||
char buffer[bufsize];
|
char buffer[bufsize];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user