mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 03:40:04 +02:00
parallized setup receiver
This commit is contained in:
parent
3019f4e6ff
commit
09d0d3ba22
@ -3278,34 +3278,55 @@ char* multiSlsDetector::getNetworkParameter(networkParameter p) {
|
||||
*/
|
||||
char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){
|
||||
|
||||
if (s.find('+')==string::npos) {
|
||||
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
|
||||
if (detectors[idet]) {
|
||||
detectors[idet]->setNetworkParameter(p,s);
|
||||
if(detectors[idet]->getErrorMask())
|
||||
setErrorMask(getErrorMask()|(1<<idet));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
size_t p1=0;
|
||||
size_t p2=s.find('+',p1);
|
||||
int id=0;
|
||||
while (p2!=string::npos) {
|
||||
if (s.find('+')==string::npos) {
|
||||
|
||||
if (detectors[id]) {
|
||||
detectors[id]->setNetworkParameter(p,s.substr(p1,p2-p1));
|
||||
if(detectors[id]->getErrorMask())
|
||||
setErrorMask(getErrorMask()|(1<<id));
|
||||
}
|
||||
id++;
|
||||
s=s.substr(p2+1);
|
||||
p2=s.find('+');
|
||||
if (id>=thisMultiDetector->numberOfDetectors)
|
||||
break;
|
||||
}
|
||||
int posmin=0, posmax=thisMultiDetector->numberOfDetectors;
|
||||
|
||||
}
|
||||
return getNetworkParameter(p);
|
||||
if(!threadpool){
|
||||
cout << "Error in creating threadpool. Exiting" << endl;
|
||||
return getNetworkParameter(p);
|
||||
}else{
|
||||
string* sret[thisMultiDetector->numberOfDetectors];
|
||||
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
|
||||
if(detectors[idet]){
|
||||
sret[idet]=new string("error");
|
||||
Task* task = new Task(new func2_t <char*,slsDetector,networkParameter,string,string>(&slsDetector::setNetworkParameter,
|
||||
detectors[idet],p,s,sret[idet]));
|
||||
threadpool->add_task(task);
|
||||
}
|
||||
}
|
||||
threadpool->wait_for_tasks_to_complete();
|
||||
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++){
|
||||
if(detectors[idet]){
|
||||
//doing nothing with the return values
|
||||
if(detectors[idet]->getErrorMask())
|
||||
setErrorMask(getErrorMask()|(1<<idet));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
size_t p1=0;
|
||||
size_t p2=s.find('+',p1);
|
||||
int id=0;
|
||||
while (p2!=string::npos) {
|
||||
|
||||
if (detectors[id]) {
|
||||
detectors[id]->setNetworkParameter(p,s.substr(p1,p2-p1));
|
||||
if(detectors[id]->getErrorMask())
|
||||
setErrorMask(getErrorMask()|(1<<id));
|
||||
}
|
||||
id++;
|
||||
s=s.substr(p2+1);
|
||||
p2=s.find('+');
|
||||
if (id>=thisMultiDetector->numberOfDetectors)
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return getNetworkParameter(p);
|
||||
|
||||
}
|
||||
|
||||
|
@ -851,6 +851,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
|
||||
settingsFile=thisDetector->settingsFile;
|
||||
|
||||
filePath=thisDetector->filePath;
|
||||
pthread_mutex_lock(&ms);
|
||||
fileName=parentDet->fileName;
|
||||
fileIndex=parentDet->fileIndex;
|
||||
framesPerFile=parentDet->framesPerFile;
|
||||
@ -862,6 +863,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
|
||||
setFramesPerFile(JFRAU_MAX_FRAMES_PER_FILE);
|
||||
if (thisDetector->myDetectorType==JUNGFRAUCTB)
|
||||
setFramesPerFile(JFCTB_MAX_FRAMES_PER_FILE);
|
||||
pthread_mutex_unlock(&ms);
|
||||
thisReceiver = new receiverInterface(dataSocket);
|
||||
|
||||
// setAngularConversionPointer(thisDetector->angOff,&thisDetector->nMods, thisDetector->nChans*thisDetector->nChips);
|
||||
@ -1679,8 +1681,11 @@ int slsDetector::setNumberOfModules(int n, dimension d){
|
||||
#endif
|
||||
}
|
||||
|
||||
if(n != GET_FLAG)
|
||||
if(n != GET_FLAG){
|
||||
pthread_mutex_lock(&ms);
|
||||
parentDet->updateOffsets();
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
|
||||
return thisDetector->nMod[d];
|
||||
};
|
||||
@ -5397,8 +5402,10 @@ char* slsDetector::setReceiver(string receiverIP){
|
||||
std::cout << "file path:" << fileIO::getFilePath() << endl;
|
||||
std::cout << "file name:" << fileIO::getFileName() << endl;
|
||||
std::cout << "file index:" << fileIO::getFileIndex() << endl;
|
||||
pthread_mutex_lock(&ms);
|
||||
std::cout << "write enable:" << parentDet->enableWriteToFileMask() << endl;
|
||||
std::cout << "overwrite enable:" << parentDet->enableOverwriteMask() << endl;
|
||||
pthread_mutex_unlock(&ms);
|
||||
std::cout << "frame index needed:" << ((thisDetector->timerValue[FRAME_NUMBER]*thisDetector->timerValue[CYCLES_NUMBER])>1) << endl;
|
||||
std::cout << "frame period:" << thisDetector->timerValue[FRAME_PERIOD] << endl;
|
||||
std::cout << "frame number:" << thisDetector->timerValue[FRAME_NUMBER] << endl;
|
||||
@ -5411,9 +5418,14 @@ char* slsDetector::setReceiver(string receiverIP){
|
||||
setFilePath(fileIO::getFilePath());
|
||||
setFileName(fileIO::getFileName());
|
||||
setFileIndex(fileIO::getFileIndex());
|
||||
enableWriteToFile(parentDet->enableWriteToFileMask());
|
||||
overwriteFile(parentDet->enableOverwriteMask());
|
||||
|
||||
pthread_mutex_lock(&ms);
|
||||
int imask = parentDet->enableWriteToFileMask();
|
||||
pthread_mutex_unlock(&ms);
|
||||
enableWriteToFile(imask);
|
||||
pthread_mutex_lock(&ms);
|
||||
imask = parentDet->enableOverwriteMask();
|
||||
pthread_mutex_unlock(&ms);
|
||||
overwriteFile(imask);
|
||||
if ((thisDetector->timerValue[FRAME_NUMBER]*thisDetector->timerValue[CYCLES_NUMBER])>1)
|
||||
setFrameIndex(0);
|
||||
else
|
||||
@ -5706,11 +5718,12 @@ int slsDetector::configureMAC(){
|
||||
}
|
||||
else if (thisDetector->myDetectorType==GOTTHARD){
|
||||
//set frames per file - only for gotthard
|
||||
pthread_mutex_lock(&ms);
|
||||
if(retval==-1)
|
||||
setFramesPerFile(MAX_FRAMES_PER_FILE);
|
||||
else
|
||||
setFramesPerFile(SHORT_MAX_FRAMES_PER_FILE);
|
||||
|
||||
pthread_mutex_unlock(&ms);
|
||||
//connect to receiver
|
||||
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
|
||||
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
||||
@ -6709,12 +6722,14 @@ string slsDetector::setFileName(string s) {
|
||||
char retval[MAX_STR_LENGTH]="";
|
||||
|
||||
if(!s.empty()){
|
||||
pthread_mutex_lock(&ms);
|
||||
fileIO::setFileName(s);
|
||||
if(thisDetector->myDetectorType == EIGER)
|
||||
parentDet->setDetectorIndex(detId);
|
||||
else if(parentDet->getNumberOfDetectors()>1)
|
||||
parentDet->setDetectorIndex(detId);
|
||||
s=parentDet->createReceiverFilePrefix();
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
|
||||
@ -6730,7 +6745,10 @@ string slsDetector::setFileName(string s) {
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Complete file prefix from receiver: " << retval << std::endl;
|
||||
#endif
|
||||
pthread_mutex_lock(&ms);
|
||||
fileIO::setFileName(parentDet->getNameFromReceiverFilePrefix(string(retval)));
|
||||
pthread_mutex_unlock(&ms);
|
||||
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
@ -6752,8 +6770,11 @@ int slsDetector::setFileIndex(int i) {
|
||||
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){
|
||||
if(i>=0)
|
||||
if(i>=0){
|
||||
pthread_mutex_lock(&ms);
|
||||
fileIO::setFileIndex(i);
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
}
|
||||
|
||||
else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
||||
@ -6763,8 +6784,11 @@ int slsDetector::setFileIndex(int i) {
|
||||
if (connectData() == OK)
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
if(ret!=FAIL)
|
||||
if(ret!=FAIL){
|
||||
pthread_mutex_lock(&ms);
|
||||
fileIO::setFileIndex(retval);
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
}
|
||||
@ -7102,11 +7126,15 @@ int slsDetector::updateReceiverNoWait() {
|
||||
cout << "Updating receiver last modified by " << lastClientIP << std::endl;
|
||||
#endif
|
||||
n = dataSocket->ReceiveDataOnly(&ind,sizeof(ind));
|
||||
pthread_mutex_lock(&ms);
|
||||
fileIO::setFileIndex(ind);
|
||||
pthread_mutex_unlock(&ms);
|
||||
n = dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH);
|
||||
fileIO::setFilePath(path);
|
||||
n = dataSocket->ReceiveDataOnly(path,MAX_STR_LENGTH);
|
||||
pthread_mutex_lock(&ms);
|
||||
fileIO::setFileName(path);
|
||||
pthread_mutex_unlock(&ms);
|
||||
return OK;
|
||||
|
||||
}
|
||||
@ -7176,8 +7204,11 @@ int slsDetector::enableWriteToFile(int enable){
|
||||
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){
|
||||
if(enable>=0)
|
||||
if(enable>=0){
|
||||
pthread_mutex_lock(&ms);
|
||||
parentDet->enableWriteToFileMask(enable);
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
}
|
||||
|
||||
else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
||||
@ -7187,13 +7218,20 @@ int slsDetector::enableWriteToFile(int enable){
|
||||
if (connectData() == OK)
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
if(ret!=FAIL)
|
||||
if(ret!=FAIL){
|
||||
pthread_mutex_lock(&ms);
|
||||
parentDet->enableWriteToFileMask(retval);
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
}
|
||||
|
||||
return parentDet->enableWriteToFileMask();
|
||||
pthread_mutex_lock(&ms);
|
||||
retval = parentDet->enableWriteToFileMask();
|
||||
pthread_mutex_unlock(&ms);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@ -7207,8 +7245,11 @@ int slsDetector::overwriteFile(int enable){
|
||||
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){
|
||||
if(enable>=0)
|
||||
if(enable>=0){
|
||||
pthread_mutex_lock(&ms);
|
||||
parentDet->enableOverwriteMask(enable);
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
}
|
||||
|
||||
else if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
|
||||
@ -7218,13 +7259,20 @@ int slsDetector::overwriteFile(int enable){
|
||||
if (connectData() == OK)
|
||||
ret=thisReceiver->sendInt(fnum,retval,arg);
|
||||
disconnectData();
|
||||
if(ret!=FAIL)
|
||||
if(ret!=FAIL){
|
||||
pthread_mutex_lock(&ms);
|
||||
parentDet->enableOverwriteMask(retval);
|
||||
pthread_mutex_unlock(&ms);
|
||||
}
|
||||
if(ret==FORCE_UPDATE)
|
||||
updateReceiver();
|
||||
}
|
||||
|
||||
return parentDet->enableOverwriteMask();
|
||||
pthread_mutex_lock(&ms);
|
||||
retval = parentDet->enableOverwriteMask();
|
||||
pthread_mutex_unlock(&ms);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@ -7291,10 +7339,14 @@ int slsDetector::calibratePedestal(int frames){
|
||||
|
||||
int64_t slsDetector::clearAllErrorMask(){
|
||||
clearErrorMask();
|
||||
|
||||
pthread_mutex_lock(&ms);
|
||||
for(int i=0;i<parentDet->getNumberOfDetectors();i++){
|
||||
if(parentDet->getDetectorId(i) == getDetectorId())
|
||||
parentDet->setErrorMask(parentDet->getErrorMask()|(0<<i));
|
||||
}
|
||||
pthread_mutex_unlock(&ms);
|
||||
|
||||
return getErrorMask();
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,9 @@ postProcessing::postProcessing(): expTime(NULL), ang(NULL), val(NULL), err(NULL)
|
||||
pthread_mutex_init(&mp, NULL);
|
||||
mg=mp1;
|
||||
pthread_mutex_init(&mg, NULL);
|
||||
ms=mp1;
|
||||
pthread_mutex_init(&ms, NULL);
|
||||
|
||||
//cout << "reg callback "<< endl;
|
||||
dataReady = 0;
|
||||
pCallbackArg = 0;
|
||||
|
@ -278,6 +278,9 @@ s
|
||||
/** mutex to synchronizedata processing and plotting threads */
|
||||
pthread_mutex_t mg;
|
||||
|
||||
/** mutex to synchronize slsdetector threads */
|
||||
pthread_mutex_t ms;
|
||||
|
||||
/** sets when the acquisition is finished */
|
||||
int jointhread;
|
||||
|
||||
|
@ -94,26 +94,27 @@ private:
|
||||
class Task: public virtual slsDetectorDefs{
|
||||
public:
|
||||
/* Return: int, Param: int */
|
||||
Task(func1_t <int,slsDetector,int,int>* t): m1(t),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
|
||||
Task(func1_t <int,slsDetector,int,int>* t): m1(t),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: int, Param: string,int */
|
||||
Task(func2_t <int,slsDetector,string,int,int>* t): m1(0),m2(t),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
|
||||
Task(func2_t <int,slsDetector,string,int,int>* t): m1(0),m2(t),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: string, Param: string */
|
||||
Task(func1_t <string,slsDetector,string,string>* t): m1(0),m2(0),m3(t),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
|
||||
Task(func1_t <string,slsDetector,string,string>* t): m1(0),m2(0),m3(t),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: char*, Param: char* */
|
||||
Task(func1_t <char*,slsDetector,char*,string>* t): m1(0),m2(0),m3(0),m4(t),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0){};
|
||||
Task(func1_t <char*,slsDetector,char*,string>* t): m1(0),m2(0),m3(0),m4(t),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: detectorSettings, Param: int */
|
||||
Task(func1_t <detectorSettings,slsDetector,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(t),m6(0),m7(0),m8(0),m9(0),m10(0){};
|
||||
Task(func1_t <detectorSettings,slsDetector,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(t),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: detectorSettings, Param: detectorSettings,int */
|
||||
Task(func2_t <detectorSettings,slsDetector,detectorSettings,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(t),m7(0),m8(0),m9(0),m10(0){};
|
||||
Task(func2_t <detectorSettings,slsDetector,detectorSettings,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(t),m7(0),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: int, Param: int,int */
|
||||
Task(func2_t <int,slsDetector,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(t),m8(0),m9(0),m10(0){};
|
||||
Task(func2_t <int,slsDetector,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(t),m8(0),m9(0),m10(0),m11(0){};
|
||||
/* Return: int, Param: int,int */
|
||||
Task(func3_t <int,slsDetector,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(t),m9(0),m10(0){};
|
||||
Task(func3_t <int,slsDetector,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(t),m9(0),m10(0),m11(0){};
|
||||
/* Return: int, Param: trimMode,int,int,int */
|
||||
Task(func4_t <int,slsDetector,trimMode,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(t),m10(0){};
|
||||
Task(func4_t <int,slsDetector,trimMode,int,int,int,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(t),m10(0),m11(0){};
|
||||
/* Return: int, Param: int */
|
||||
Task(func0_t <int,slsDetector,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(t){};
|
||||
|
||||
Task(func0_t <int,slsDetector,int>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(t),m11(0){};
|
||||
/* Return: char*, Param: networkParameter,string,string */
|
||||
Task(func2_t <char*,slsDetector,networkParameter,string,string>* t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(t){};
|
||||
~Task(){}
|
||||
|
||||
void operator()(){
|
||||
@ -127,6 +128,7 @@ public:
|
||||
else if(m8) (*m8)();
|
||||
else if(m9) (*m9)();
|
||||
else if(m10) (*m10)();
|
||||
else if(m11) (*m11)();
|
||||
}
|
||||
|
||||
private:
|
||||
@ -150,6 +152,8 @@ private:
|
||||
func4_t <int,slsDetector,trimMode,int,int,int,int>* m9;
|
||||
/* Return: int, Param: int */
|
||||
func0_t <int,slsDetector,int>* m10;
|
||||
/* Return: char*, Param: networkParameter,string,string */
|
||||
func2_t <char*,slsDetector,networkParameter,string,string>* m11;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user