more cleanup

This commit is contained in:
Erik Frojdh 2018-05-25 17:02:01 +02:00
parent 4f600f3129
commit 05ed8dca4e
2 changed files with 39 additions and 95 deletions

View File

@ -1857,7 +1857,7 @@ int64_t multiSlsDetector::getTimeLeft(timerIndex index)
int multiSlsDetector::setStoragecellStart(int pos) int multiSlsDetector::setStoragecellStart(int pos)
{ {
parallelCallDetectorMember(&slsDetector::setStoragecellStart, pos); parallelCallDetectorMember(&slsDetector::setStoragecellStart, pos);
} }
int multiSlsDetector::setSpeed(speedVariable index, int value) int multiSlsDetector::setSpeed(speedVariable index, int value)
@ -3305,6 +3305,22 @@ int multiSlsDetector::exitServer()
return ival; return ival;
} }
int multiSlsDetector::compareReturnValues(const std::vector<int>& return_values)
{
int ret = -100;
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
if (ret == -100)
ret = return_values[idet];
else if (ret != return_values[idet])
ret = -1;
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
}
}
return ret;
}
int multiSlsDetector::callDetectorMemeber(int (slsDetector::*somefunc)()) int multiSlsDetector::callDetectorMemeber(int (slsDetector::*somefunc)())
{ {
int ret = -100, ret1; int ret = -100, ret1;
@ -3367,7 +3383,6 @@ string multiSlsDetector::callDetectorMemeber(string (slsDetector::*somefunc)())
int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)(int), int value) int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)(int), int value)
{ {
int ret = -100;
if (!threadpool) { if (!threadpool) {
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
return -1; return -1;
@ -3382,24 +3397,32 @@ int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)(in
} }
threadpool->startExecuting(); threadpool->startExecuting();
threadpool->wait_for_tasks_to_complete(); threadpool->wait_for_tasks_to_complete();
return compareReturnValues(return_values);
}
}
int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)(int, int, int), int v0, int v1, int v2)
{
if (!threadpool) {
cout << "Error in creating threadpool. Exiting" << endl;
return -1;
} else {
std::vector<int> return_values(thisMultiDetector->numberOfDetectors, -1);
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) { if (detectors[idet]) {
if (ret == -100) Task* task = new Task(new func3_t<int, int, int, int>(somefunc,
ret = return_values[idet]; detectors[idet], v0, v1, v2, &return_values[idet]));
else if (ret != return_values[idet]) threadpool->add_task(task);
ret = -1;
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
} }
} }
threadpool->startExecuting();
threadpool->wait_for_tasks_to_complete();
return compareReturnValues(return_values);
} }
return ret;
} }
int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)()) int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)())
{ {
int ret = -100;
if (!threadpool) { if (!threadpool) {
cout << "Error in creating threadpool. Exiting" << endl; cout << "Error in creating threadpool. Exiting" << endl;
return -1; return -1;
@ -3414,19 +3437,8 @@ int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)())
} }
threadpool->startExecuting(); threadpool->startExecuting();
threadpool->wait_for_tasks_to_complete(); threadpool->wait_for_tasks_to_complete();
return compareReturnValues(return_values);
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
if (ret == -100)
ret = return_values[idet];
else if (ret != return_values[idet])
ret = -1;
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
}
}
} }
return ret;
} }
/** returns the detector trimbit/settings directory */ /** returns the detector trimbit/settings directory */
@ -5963,7 +5975,6 @@ uint64_t multiSlsDetector::setCTBWord(int addr, uint64_t word)
*/ */
int multiSlsDetector::setCTBPatLoops(int level, int& start, int& stop, int& n) int multiSlsDetector::setCTBPatLoops(int level, int& start, int& stop, int& n)
{ {
int ret = -100, ret1; int ret = -100, ret1;
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet)
if (detectors[idet]) { if (detectors[idet]) {
@ -5985,7 +5996,6 @@ int multiSlsDetector::setCTBPatLoops(int level, int& start, int& stop, int& n)
*/ */
int multiSlsDetector::setCTBPatWaitAddr(int level, int addr) int multiSlsDetector::setCTBPatWaitAddr(int level, int addr)
{ {
int ret = -100, ret1; int ret = -100, ret1;
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet)
if (detectors[idet]) { if (detectors[idet]) {
@ -6007,7 +6017,6 @@ int multiSlsDetector::setCTBPatWaitAddr(int level, int addr)
*/ */
int multiSlsDetector::setCTBPatWaitTime(int level, uint64_t t) int multiSlsDetector::setCTBPatWaitTime(int level, uint64_t t)
{ {
int ret = -100, ret1; int ret = -100, ret1;
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet)
if (detectors[idet]) { if (detectors[idet]) {
@ -6024,78 +6033,12 @@ int multiSlsDetector::setCTBPatWaitTime(int level, uint64_t t)
int multiSlsDetector::pulsePixel(int n, int x, int y) int multiSlsDetector::pulsePixel(int n, int x, int y)
{ {
int ret = -100; return parallelCallDetectorMember(&slsDetector::pulsePixel, n, x, y);
if (!threadpool) {
cout << "Error in creating threadpool. Exiting" << endl;
return -1;
} else {
//return storage values
int* iret[thisMultiDetector->numberOfDetectors];
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
iret[idet] = new int(-1);
Task* task = new Task(new func3_t<int, int, int, int>(&slsDetector::pulsePixel,
detectors[idet], n, x, y, iret[idet]));
threadpool->add_task(task);
}
}
threadpool->startExecuting();
threadpool->wait_for_tasks_to_complete();
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
if (iret[idet] != NULL) {
if (ret == -100)
ret = *iret[idet];
else if (ret != *iret[idet])
ret = -1;
delete iret[idet];
} else
ret = -1;
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
}
}
}
return ret;
} }
int multiSlsDetector::pulsePixelNMove(int n, int x, int y) int multiSlsDetector::pulsePixelNMove(int n, int x, int y)
{ {
int ret = -100; return parallelCallDetectorMember(&slsDetector::pulsePixelNMove, n, x, y);
if (!threadpool) {
cout << "Error in creating threadpool. Exiting" << endl;
return -1;
} else {
//return storage values
int* iret[thisMultiDetector->numberOfDetectors];
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
iret[idet] = new int(-1);
Task* task = new Task(new func3_t<int, int, int, int>(&slsDetector::pulsePixelNMove,
detectors[idet], n, x, y, iret[idet]));
threadpool->add_task(task);
}
}
threadpool->startExecuting();
threadpool->wait_for_tasks_to_complete();
for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
if (iret[idet] != NULL) {
if (ret == -100)
ret = *iret[idet];
else if (ret != *iret[idet])
ret = -1;
delete iret[idet];
} else
ret = -1;
if (detectors[idet]->getErrorMask())
setErrorMask(getErrorMask() | (1 << idet));
}
}
}
return ret;
} }
int multiSlsDetector::pulseChip(int n) int multiSlsDetector::pulseChip(int n)
@ -6119,7 +6062,6 @@ bool multiSlsDetector::isAcquireReady()
std::cout << "Acquire has already started. If previous acquisition terminated unexpectedly, reset busy flag to restart.(sls_detector_put busy 0)" << std::endl; std::cout << "Acquire has already started. If previous acquisition terminated unexpectedly, reset busy flag to restart.(sls_detector_put busy 0)" << std::endl;
return FAIL; return FAIL;
} }
thisMultiDetector->acquiringFlag = true; thisMultiDetector->acquiringFlag = true;
return OK; return OK;
} }

View File

@ -1047,8 +1047,10 @@ class multiSlsDetector : public slsDetectorUtils {
std::string callDetectorMemeber(std::string(slsDetector::*somefunc)()); std::string callDetectorMemeber(std::string(slsDetector::*somefunc)());
int callDetectorMemeber(int (slsDetector::*somefunc)(int), int value); int callDetectorMemeber(int (slsDetector::*somefunc)(int), int value);
int callDetectorMemeber(int (slsDetector::*somefunc)()); int callDetectorMemeber(int (slsDetector::*somefunc)());
int parallelCallDetectorMember(int (slsDetector::*somefunc)(int), int value); //Should probably be templated
int parallelCallDetectorMember(int (slsDetector::*somefunc)()); int parallelCallDetectorMember(int (slsDetector::*somefunc)());
int parallelCallDetectorMember(int (slsDetector::*somefunc)(int), int value); //Should probably be templated
int parallelCallDetectorMember(int (slsDetector::*somefunc)(int, int, int), int v0, int v1, int v2); //Should probably be templated
int compareReturnValues(const std::vector<int>&);
/** returns the detector trimbit/settings directory \sa sharedSlsDetector */ /** returns the detector trimbit/settings directory \sa sharedSlsDetector */
std::string getSettingsDir(); std::string getSettingsDir();