parallelized calibration

This commit is contained in:
Dhanya Maliakal 2016-07-07 16:24:58 +02:00
parent 09d0d3ba22
commit 74dfe04a18

View File

@ -3929,7 +3929,7 @@ int multiSlsDetector::executeTrimming(trimMode mode, int par1, int par2, int imo
int multiSlsDetector::loadSettingsFile(string fname, int imod) { int multiSlsDetector::loadSettingsFile(string fname, int imod) {
int id, im, ret=-100; int id, im, ret=OK;
if (decodeNMod(imod, id, im)>=0) { if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) { if (detectors[id]) {
@ -3948,7 +3948,7 @@ int multiSlsDetector::loadSettingsFile(string fname, int imod) {
int* iret[thisMultiDetector->numberOfDetectors]; int* iret[thisMultiDetector->numberOfDetectors];
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
iret[idet]= new int(-1); iret[idet]= new int(OK);
Task* task = new Task(new func2_t <int,slsDetector,string,int,int>(&slsDetector::loadSettingsFile, Task* task = new Task(new func2_t <int,slsDetector,string,int,int>(&slsDetector::loadSettingsFile,
detectors[idet],fname,imod,iret[idet])); detectors[idet],fname,imod,iret[idet]));
threadpool->add_task(task); threadpool->add_task(task);
@ -3958,12 +3958,10 @@ int multiSlsDetector::loadSettingsFile(string fname, int imod) {
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){ for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){ if(detectors[idet]){
if(iret[idet] != NULL){ if(iret[idet] != NULL){
if (ret==-100) if(*iret[idet] != OK)
ret=*iret[idet]; ret = FAIL;
else if (ret!=*iret[idet])
ret=-1;
delete iret[idet]; delete iret[idet];
}else ret=-1; }else ret = FAIL;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
} }
@ -3971,7 +3969,6 @@ int multiSlsDetector::loadSettingsFile(string fname, int imod) {
} }
return ret; return ret;
} }
return -1; return -1;
@ -4055,7 +4052,7 @@ int multiSlsDetector::setAllTrimbits(int val, int imod){
int multiSlsDetector::loadCalibrationFile(string fname, int imod) { int multiSlsDetector::loadCalibrationFile(string fname, int imod) {
int id, im, ret; int id, im, ret = OK;
if (decodeNMod(imod, id, im)>=0) { if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) { if (detectors[id]) {
@ -4065,17 +4062,37 @@ int multiSlsDetector::loadCalibrationFile(string fname, int imod) {
return ret; return ret;
} }
} else if (imod<0) { } else if (imod<0) {
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) { if(!threadpool){
ret=detectors[idet]->loadCalibrationFile(fname, imod); 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(OK);
Task* task = new Task(new func2_t <int,slsDetector,string,int,int>(&slsDetector::loadCalibrationFile,
detectors[idet],fname,imod,iret[idet]));
threadpool->add_task(task);
}
}
threadpool->wait_for_tasks_to_complete();
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
if(detectors[idet]){
if(iret[idet] != NULL){
if(*iret[idet] != OK)
ret = FAIL;
delete iret[idet];
}else ret = FAIL;
if(detectors[idet]->getErrorMask()) if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet)); setErrorMask(getErrorMask()|(1<<idet));
} }
} }
}
return ret; return ret;
} }
return -1; return -1;
} }