parallelized setting dynamic range

This commit is contained in:
2018-02-07 15:45:59 +01:00
parent a6b917851c
commit 94b61ea2c4

View File

@ -4228,22 +4228,40 @@ int multiSlsDetector::setCounterBit(int i){
int multiSlsDetector::setDynamicRange(int p) { int multiSlsDetector::setDynamicRange(int p) {
int ret=-100, ret1; int ret=-100;
thisMultiDetector->dataBytes=0; thisMultiDetector->dataBytes=0;
thisMultiDetector->numberOfChannels=0; thisMultiDetector->numberOfChannels=0;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet) { if(!threadpool){
if (detectors[idet]) { cout << "Error in creating threadpool. Exiting" << endl;
ret1=detectors[idet]->setDynamicRange(p); return -1;
if(detectors[idet]->getErrorMask()) }else{
setErrorMask(getErrorMask()|(1<<idet)); //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 func1_t<int,int>(&slsDetector::setDynamicRange,
detectors[idet],p,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){
thisMultiDetector->dataBytes+=detectors[idet]->getDataBytes(); thisMultiDetector->dataBytes+=detectors[idet]->getDataBytes();
// cout << "db " << idet << " " << detectors[idet]->getDataBytes() << endl;
thisMultiDetector->numberOfChannels+=detectors[idet]->getTotalNumberOfChannels(); thisMultiDetector->numberOfChannels+=detectors[idet]->getTotalNumberOfChannels();
if (ret==-100) if (ret==-100)
ret=ret1; ret=*iret[idet];
else if (ret!=ret1) else if (ret!=*iret[idet])
ret=-1; ret=-1;
delete iret[idet];
}else ret=-1;
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
}
} }
} }
@ -4259,9 +4277,10 @@ int multiSlsDetector::setDynamicRange(int p) {
} }
} }
return ret; return ret;
} }
int multiSlsDetector::getMaxMods() { int multiSlsDetector::getMaxMods() {