merge from 3.0.1 parallalize dr

This commit is contained in:
maliakal_d 2018-02-07 15:48:39 +01:00
commit a654febb7e

View File

@ -4266,45 +4266,63 @@ int multiSlsDetector::setCounterBit(int i){
int multiSlsDetector::setDynamicRange(int p) {
int ret=-100, ret1;
thisMultiDetector->dataBytes=0;
thisMultiDetector->dataBytesInclGapPixels=0;
thisMultiDetector->numberOfChannels=0;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet) {
if (detectors[idet]) {
ret1=detectors[idet]->setDynamicRange(p);
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
thisMultiDetector->dataBytes+=detectors[idet]->getDataBytes();
thisMultiDetector->dataBytesInclGapPixels+=detectors[idet]->getDataBytesInclGapPixels();
// cout << "db " << idet << " " << detectors[idet]->getDataBytes() << endl;
thisMultiDetector->numberOfChannels+=detectors[idet]->getTotalNumberOfChannels();
int ret=-100;
thisMultiDetector->dataBytes=0;
thisMultiDetector->dataBytesInclGapPixels=0;
thisMultiDetector->numberOfChannels=0;
if (ret==-100)
ret=ret1;
else if (ret!=ret1)
ret=-1;
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 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->dataBytesInclGapPixels+=detectors[idet]->getDataBytesInclGapPixels();
thisMultiDetector->numberOfChannels+=detectors[idet]->getTotalNumberOfChannels();
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));
}
}
}
}
//for usability for the user
if (getDetectorsType() == EIGER){
if(p == 32){
std::cout << "Setting Clock to Quarter Speed to cope with Dynamic Range of 32" << std::endl;
setSpeed(CLOCK_DIVIDER,2);
}
else if(p == 16){
std::cout << "Setting Clock to Half Speed for Dynamic Range of 16" << std::endl;
setSpeed(CLOCK_DIVIDER,1);
}
if (p != -1)
updateOffsets();
}
return ret;
//for usability for the user
if (getDetectorsType() == EIGER){
if(p == 32){
std::cout << "Setting Clock to Quarter Speed to cope with Dynamic Range of 32" << std::endl;
setSpeed(CLOCK_DIVIDER,2);
}
else if(p == 16){
std::cout << "Setting Clock to Half Speed for Dynamic Range of 16" << std::endl;
setSpeed(CLOCK_DIVIDER,1);
}
if (p != -1)
updateOffsets();
}
return ret;
}
int multiSlsDetector::getMaxMods() {