From a95e2efdb08183a7c98b1b047714d49edae7b6b5 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 18 Sep 2017 16:47:22 +0200 Subject: [PATCH] parallelized settimer, setfileindex, setonline, setreceiveronline, getreceiverstatus, resetframescaught, setFrameIndex, setFileName, getFramesCaughtByReceiver; added getFramesCaughtbyAnyreceiver to avoid threadpool and to use in post processing --- .../multiSlsDetector/multiSlsDetector.cpp | 385 +++++++++++++----- .../multiSlsDetector/multiSlsDetector.h | 8 + .../slsDetector/slsDetector.cpp | 33 +- slsDetectorSoftware/slsDetector/slsDetector.h | 5 + .../slsDetector/slsDetectorBase.h | 5 + .../slsDetector/slsDetectorCommand.cpp | 7 +- .../slsDetector/slsDetectorUtils.cpp | 27 +- .../slsDetector/slsDetectorUtils.h | 5 + .../slsDetectorAnalysis/postProcessing.cpp | 2 +- slsDetectorSoftware/threadFiles/Task.h | 57 +-- 10 files changed, 369 insertions(+), 165 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 9a265d393..8aa341033 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -114,6 +114,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) thisMultiDetector->onlineFlag = ONLINE_FLAG; + thisMultiDetector->receiverOnlineFlag = OFFLINE_FLAG; thisMultiDetector->numberOfDetectors=0; for (int id=0; iddetectorIds[id]=-1; @@ -297,18 +298,18 @@ int multiSlsDetector::createThreadPool(){ if(threadpool){ threadpool->destroy_threadpool(); } - if(thisMultiDetector->numberOfDetectors < 1){ - cout << "No detectors attached to create threadpool" << endl; - return OK; + int numthreads = thisMultiDetector->numberOfDetectors; + if(numthreads < 1){ + numthreads = 1; //create threadpool anyway, threads initialized only when >1 detector added } - threadpool = new ThreadPool(thisMultiDetector->numberOfDetectors); + threadpool = new ThreadPool(numthreads); switch(threadpool->initialize_threadpool()){ case 0: cerr << "Failed to initialize thread pool!" << endl; return FAIL; case 1: #ifdef VERBOSE - cout << "Not initializing threads, only one detector" << endl; + cout << "Not initializing threads, not multi detector" << endl; #endif break; default: @@ -416,7 +417,7 @@ int multiSlsDetector::addSlsDetector(int id, int pos) { } -void multiSlsDetector::updateOffsets(){ +void multiSlsDetector::updateOffsets(){//cannot paralllize due to slsdetector calling this via parentdet-> #ifdef VERBOSE cout << endl << "Updating Multi-Detector Offsets" << endl; #endif @@ -1067,20 +1068,45 @@ slsDetectorDefs::synchronizationMode multiSlsDetector::setSynchronization(synchr int multiSlsDetector::setOnline(int off) { - // int retdet; if (off!=GET_ONLINE_FLAG) { thisMultiDetector->onlineFlag=off; - for (int i=0; inumberOfDetectors; i++) { - if (detectors[i]){ - detectors[i]->setOnline(off); - if(detectors[i]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int(-1); + Task* task = new Task(new func1_t(&slsDetector::setOnline, + detectors[idet],off,iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetnumberOfDetectors; 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<onlineFlag=ret; } return thisMultiDetector->onlineFlag; - }; @@ -3165,7 +3191,7 @@ dacs_t multiSlsDetector::setDAC(dacs_t val, dacIndex idac, int mV, int imod) { for(int idet=posmin; idet(&slsDetector::setDAC, + Task* task = new Task(new func4_t(&slsDetector::setDAC, detectors[idet],val, idac, mV, imod, iret[idet])); threadpool->add_task(task); } @@ -3227,7 +3253,7 @@ dacs_t multiSlsDetector::getADC(dacIndex idac, int imod) { for(int idet=posmin; idet(&slsDetector::getADC, + Task* task = new Task(new func2_t(&slsDetector::getADC, detectors[idet],idac, imod, iret[idet])); threadpool->add_task(task); } @@ -3625,7 +3651,7 @@ string multiSlsDetector::setNetworkParameter(networkParameter p, string s){ if (p == RECEIVER_STREAMING_PORT) s.append("multi\0"); sret[idet]=new string("error"); - Task* task = new Task(new func2_t (&slsDetector::setNetworkParameter, + Task* task = new Task(new func2_t(&slsDetector::setNetworkParameter, detectors[idet],p,s,sret[idet])); threadpool->add_task(task); } @@ -4281,7 +4307,7 @@ int multiSlsDetector::executeTrimming(trimMode mode, int par1, int par2, int imo for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(-1); - Task* task = new Task(new func4_t (&slsDetector::executeTrimming, + Task* task = new Task(new func4_t(&slsDetector::executeTrimming, detectors[idet],mode,par1,par2,imod,iret[idet])); threadpool->add_task(task); } @@ -4384,7 +4410,7 @@ int multiSlsDetector::loadSettingsFile(string fname, int imod) { for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(OK); - Task* task = new Task(new func2_t (&slsDetector::loadSettingsFile, + Task* task = new Task(new func2_t(&slsDetector::loadSettingsFile, detectors[idet],fname,imod,iret[idet])); threadpool->add_task(task); } @@ -4458,7 +4484,7 @@ int multiSlsDetector::setAllTrimbits(int val, int imod){ for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(-1); - Task* task = new Task(new func2_t (&slsDetector::setAllTrimbits, + Task* task = new Task(new func2_t(&slsDetector::setAllTrimbits, detectors[idet],val,imod,iret[idet])); threadpool->add_task(task); } @@ -4512,7 +4538,7 @@ int multiSlsDetector::loadCalibrationFile(string fname, int imod) { for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(OK); - Task* task = new Task(new func2_t (&slsDetector::loadCalibrationFile, + Task* task = new Task(new func2_t(&slsDetector::loadCalibrationFile, detectors[idet],fname,imod,iret[idet])); threadpool->add_task(task); } @@ -5061,18 +5087,42 @@ int multiSlsDetector::readDataFile(string fname, int *data) { int multiSlsDetector::setReceiverOnline(int off) { - int ret=-100,ret1; - for (int i=0; inumberOfDetectors; i++) - if (detectors[i]){ - ret1=detectors[i]->setReceiverOnline(off); - if(detectors[i]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int(-1); + Task* task = new Task(new func1_t(&slsDetector::setReceiverOnline, + detectors[idet],off,iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetnumberOfDetectors; 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<receiverOnlineFlag=ret; + } + return thisMultiDetector->receiverOnlineFlag; } @@ -5120,21 +5170,41 @@ string multiSlsDetector::setFilePath(string s) { string multiSlsDetector::setFileName(string s) { - string ret="error", ret1; - for (int idet=0; idetnumberOfDetectors; idet++) { - if (detectors[idet]) { - ret1=detectors[idet]->setFileName(s); - if(detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors; + + if(!threadpool){ + cout << "Error in creating threadpool. Exiting" << endl; + return string(""); + } else { + string* sret[thisMultiDetector->numberOfDetectors]; + for(int idet=0; idet(&slsDetector::setFileName, + detectors[idet],s,sret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetgetErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; - runStatus s = IDLE,s1 = IDLE; + i=thisMultiDetector->masterPosition; + if (thisMultiDetector->masterPosition>=0) { + if (detectors[i]) { + ret=detectors[i]->getReceiverStatus(); + if(detectors[i]->getErrorMask()) + setErrorMask(getErrorMask()|(1<masterPosition>=0) - if (detectors[thisMultiDetector->masterPosition]){ - s = detectors[thisMultiDetector->masterPosition]->getReceiverStatus(); - if(detectors[thisMultiDetector->masterPosition]->getErrorMask()) - setErrorMask(getErrorMask()|(1<masterPosition)); - return s; - } + if(!threadpool){ + cout << "Error in creating threadpool. Exiting" << endl; + return ERROR; + }else{ + runStatus* iret[posmax-posmin]; + for(int idet=posmin; idetmasterPosition) && (detectors[idet])){ + iret[idet]= new runStatus(ERROR); + Task* task = new Task(new func0_t(&slsDetector::getReceiverStatus, + detectors[idet],iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=posmin; idetmasterPosition) && (detectors[idet])){ + if(iret[idet] != NULL){ + if(*iret[idet] == (int)ERROR) + ret = ERROR; + if(*iret[idet] != IDLE) + ret = *iret[idet]; + delete iret[idet]; + }else ret = ERROR; + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<getReceiverStatus(); - - for (int i=0; inumberOfDetectors; i++) { - s1=detectors[i]->getReceiverStatus(); - if(detectors[i]->getErrorMask()) - setErrorMask(getErrorMask()|(1<masterPosition; - -int multiSlsDetector::getFramesCaughtByReceiver() { - int ret=0,ret1=0; + if (i >=0 ) { + if (detectors[i]){ + ret=detectors[i]->getFramesCaughtByReceiver(); + if(detectors[i]->getErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; i++) if (detectors[i]){ - ret1+=detectors[i]->getFramesCaughtByReceiver(); + ret=detectors[i]->getFramesCaughtByReceiver(); if(detectors[i]->getErrorMask()) setErrorMask(getErrorMask()|(1<numberOfDetectors) - return ret; - ret=(int)(ret1/thisMultiDetector->numberOfDetectors); + return -1; +} + +int multiSlsDetector::getFramesCaughtByReceiver() { + + int ret=0,ret1=0; + int posmax = thisMultiDetector->numberOfDetectors; + + if(!threadpool){ + cout << "Error in creating threadpool. Exiting" << endl; + return -1; + }else{ + int* iret[posmax]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int(0); + Task* task = new Task(new func0_t(&slsDetector::getFramesCaughtByReceiver, + detectors[idet],iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + + for(int idet=0; idetgetErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors) || (ret == -1)) + return ret; + + ret=(int)(ret1/thisMultiDetector->numberOfDetectors); return ret; } @@ -5397,17 +5535,36 @@ int multiSlsDetector::getReceiverCurrentFrameIndex() { int multiSlsDetector::resetFramesCaught() { - int ret=-100, ret1; - for (int i=0; inumberOfDetectors; i++){ - if (detectors[i]){ - ret1=detectors[i]->resetFramesCaught(); - if(detectors[i]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors; + + if(!threadpool){ + cout << "Error in creating threadpool. Exiting" << endl; + return FAIL; + }else{ + int* iret[posmax]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int(OK); + Task* task = new Task(new func0_t(&slsDetector::resetFramesCaught, + detectors[idet],iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + + for(int idet=0; idetgetErrorMask()) + setErrorMask(getErrorMask()|(1<numberOfDetectors; fileIO::setFrameIndex(index); - for (int idet=0; idetnumberOfDetectors; idet++) { - if (detectors[idet]) { - ret1=detectors[idet]->setFrameIndex(index); - if(detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors]; + for(int idet=0; idet(&slsDetector::setFrameIndex, + detectors[idet],index,iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetnumberOfDetectors; 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<enabledatastremain //create client sockets only if no external gui if (!thisMultiDetector->externalgui) { @@ -5944,7 +6119,7 @@ int multiSlsDetector::enableDataStreamingFromReceiver(int enable){ for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(-1); - Task* task = new Task(new func1_t (&slsDetector::enableDataStreamingFromReceiver, + Task* task = new Task(new func1_t(&slsDetector::enableDataStreamingFromReceiver, detectors[idet],enable,iret[idet])); threadpool->add_task(task); } @@ -6173,7 +6348,7 @@ int multiSlsDetector::pulsePixel(int n,int x,int y) { for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(-1); - Task* task = new Task(new func3_t (&slsDetector::pulsePixel, + Task* task = new Task(new func3_t(&slsDetector::pulsePixel, detectors[idet],n,x,y,iret[idet])); threadpool->add_task(task); } @@ -6210,7 +6385,7 @@ int multiSlsDetector::pulsePixelNMove(int n,int x,int y) { for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(-1); - Task* task = new Task(new func3_t (&slsDetector::pulsePixelNMove, + Task* task = new Task(new func3_t(&slsDetector::pulsePixelNMove, detectors[idet],n,x,y,iret[idet])); threadpool->add_task(task); } @@ -6247,7 +6422,7 @@ int multiSlsDetector::pulseChip(int n) { for(int idet=0; idetnumberOfDetectors; idet++){ if(detectors[idet]){ iret[idet]= new int(-1); - Task* task = new Task(new func1_t (&slsDetector::pulseChip, + Task* task = new Task(new func1_t(&slsDetector::pulseChip, detectors[idet],n,iret[idet])); threadpool->add_task(task); } diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 258bfa933..ac5f1aedb 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -204,6 +204,9 @@ class multiSlsDetector : public slsDetectorUtils { /** external gui */ bool externalgui; + /** receiver online flag - is set if the receiver is connected, unset if socket connection is not possible */ + int receiverOnlineFlag; + } sharedMultiSlsDetector; @@ -1233,6 +1236,11 @@ class multiSlsDetector : public slsDetectorUtils { */ int getFramesCaughtByReceiver(); + /** gets the number of frames caught by any one receiver (to avoid using threadpool) + \returns number of frames caught by any one receiver (master receiver if exists) + */ + int getFramesCaughtByAnyReceiver(); + /** gets the current frame index of receiver \returns current frame index of receiver */ diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 792b86e0a..8038bc09d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -6111,7 +6111,8 @@ string slsDetector::setReceiver(string receiverIP){ else printf("Disabling Data Streaming\n"); // push client state to receiver - parentDet->enableDataStreamingFromReceiver(clientSockets); + /*parentDet->enableDataStreamingFromReceiver(clientSockets);*/ + enableDataStreamingFromReceiver(clientSockets); pthread_mutex_unlock(&ms); } } @@ -7587,19 +7588,23 @@ slsDetectorDefs::synchronizationMode slsDetector::setSynchronization(synchroniza /*receiver*/ int slsDetector::setReceiverOnline(int off) { - // int prev = thisDetector->receiverOnlineFlag; - if (off!=GET_ONLINE_FLAG) { - if(strcmp(thisDetector->receiver_hostname,"none")){ - thisDetector->receiverOnlineFlag=off; - if (thisDetector->receiverOnlineFlag==ONLINE_FLAG){ - setReceiverTCPSocket(); - if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){ - std::cout << "cannot connect to receiver" << endl; - setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_RECEIVER)); - } - } - } - } + if (off!=GET_ONLINE_FLAG) { + // setting flag to offline + if (off == OFFLINE_FLAG) + thisDetector->receiverOnlineFlag = off; + // set flag to online only if hostname not none + else if(strcmp(thisDetector->receiver_hostname,"none")){ + thisDetector->receiverOnlineFlag=off; + } + if (thisDetector->receiverOnlineFlag==ONLINE_FLAG){ + setReceiverTCPSocket(); + // error in connecting + if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){ + std::cout << "cannot connect to receiver" << endl; + setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_RECEIVER)); + } + } + } return thisDetector->receiverOnlineFlag; } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 07a92ab14..d8272964c 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -1636,6 +1636,11 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int getFramesCaughtByReceiver(); + /** gets the number of frames caught by any one receiver (to avoid using threadpool) + \returns number of frames caught by any one receiver (master receiver if exists) + */ + int getFramesCaughtByAnyReceiver() {getFramesCaughtByReceiver();}; + /** gets the current frame index of receiver \returns current frame index of receiver */ diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index e9d5e71f6..edbd547ce 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -490,6 +490,11 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef */ virtual int getFramesCaughtByReceiver()=0; + /** gets the number of frames caught by any one receiver (to avoid using threadpool) + \returns number of frames caught by any one receiver (master receiver if exists) + */ + virtual int getFramesCaughtByAnyReceiver()=0; + /** \returns current frame index of receiver */ diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 5a16bef22..993bb238d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -2295,10 +2295,9 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) { myDet->setOnline(ONLINE_FLAG); + int r_online = myDet->setReceiverOnline(ONLINE_FLAG); - if (myDet->getExternalGuiFlag()) - myDet->setReceiverOnline(ONLINE_FLAG); - else if (myDet->setReceiverOnline(ONLINE_FLAG) == ONLINE_FLAG) { + if ((!myDet->getExternalGuiFlag()) && (r_online == ONLINE_FLAG)) { // command line: must be off, if receiver on or there was -1, then if (myDet->enableDataStreamingFromReceiver(-1) != 0){ //switch it off, if error @@ -2310,7 +2309,7 @@ string slsDetectorCommand::cmdAcquire(int narg, char *args[], int action) { if(myDet->acquire() == FAIL) return string("acquire unsuccessful"); - if(myDet->setReceiverOnline()==ONLINE_FLAG){ + if(r_online){ char answer[100]; sprintf(answer,"\nAcquired %d",myDet->getFramesCaughtByReceiver()); return string(answer); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index c259f10af..a097af3a6 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -50,8 +50,10 @@ int slsDetectorUtils::acquire(int delflag){ return FAIL; } +#ifdef VERBOSE struct timespec begin,end; clock_gettime(CLOCK_REALTIME, &begin); +#endif //not in the loop for real time acqusition yet, //in the real time acquisition loop, processing thread will wait for a post each time @@ -140,9 +142,8 @@ int slsDetectorUtils::acquire(int delflag){ if(receiver){ pthread_mutex_lock(&mg); //cout << "lock"<< endl; if(getReceiverStatus()!=IDLE) - stopReceiver(); - if(setReceiverOnline()==OFFLINE_FLAG) - *stoppedFlag=1; + if(stopReceiver() == FAIL) + *stoppedFlag=1; pthread_mutex_unlock(&mg);//cout << "unlock"<< endl; } @@ -156,7 +157,8 @@ int slsDetectorUtils::acquire(int delflag){ //resets frames caught in receiver if(receiver){ pthread_mutex_lock(&mg); //cout << "lock"<< endl; - resetFramesCaught(); + if (resetFramesCaught() == FAIL) + *stoppedFlag=1; pthread_mutex_unlock(&mg);//cout << "unlock"<< endl; } @@ -332,10 +334,13 @@ int slsDetectorUtils::acquire(int delflag){ while (dataQueueSize()) usleep(100000); // cout << "mglock " << endl;; + + + pthread_mutex_lock(&mg); //cout << "lock"<< endl; // cout << "done " << endl;; //offline - if(setReceiverOnline()==OFFLINE_FLAG){ + if(!receiver){ if ((getDetectorsType()==GOTTHARD) || (getDetectorsType()==MOENCH) || (getDetectorsType()==JUNGFRAU)|| (getDetectorsType()==JUNGFRAUCTB) ){ if((*correctionMask)&(1<* m1; func0_t * m2; - func1_t * m3; - func1_t * m4; - func1_t * m5; - func2_t * m6; - func2_t * m7; - func2_t * m8; - func2_t * m9; - func2_t * m10; - func2_t * m11; - func3_t * m12; - func4_t * m13; - func4_t * m14; - func4_t * m15; + func0_t * m3; + func1_t * m4; + func1_t * m5; + func1_t * m6; + func2_t * m7; + func2_t * m8; + func2_t * m9; + func2_t * m10; + func2_t * m11; + func2_t * m12; + func3_t * m13; + func4_t * m14; + func4_t * m15; + func4_t * m16; }; class Task: public virtual SuperTask { @@ -139,19 +140,20 @@ public: */ Task(func00_t * t): SuperTask(),fnum(1){m1 = t;}; Task(func0_t * t): SuperTask(),fnum(2){m2 = t;}; - Task(func1_t * t): SuperTask(),fnum(3){m3 = t;}; - Task(func1_t * t): SuperTask(),fnum(4){m4 = t;}; - Task(func1_t * t): SuperTask(),fnum(5){m5 = t;}; - Task(func2_t * t): SuperTask(),fnum(6){m6 = t;}; - Task(func2_t * t): SuperTask(),fnum(7){m7 = t;}; - Task(func2_t * t): SuperTask(),fnum(8){m8 = t;}; - Task(func2_t * t): SuperTask(),fnum(9){m9 = t;}; - Task(func2_t * t): SuperTask(),fnum(10){m10 = t;}; - Task(func2_t * t): SuperTask(),fnum(11){m11 = t;}; - Task(func3_t * t): SuperTask(),fnum(12){m12 = t;}; - Task(func4_t * t): SuperTask(),fnum(13){m13 = t;}; - Task(func4_t * t): SuperTask(),fnum(14){m14 = t;}; - Task(func4_t * t): SuperTask(),fnum(15){m15 = t;}; + Task(func0_t * t): SuperTask(),fnum(3){m3 = t;}; + Task(func1_t * t): SuperTask(),fnum(4){m4 = t;}; + Task(func1_t * t): SuperTask(),fnum(5){m5 = t;}; + Task(func1_t * t): SuperTask(),fnum(6){m6 = t;}; + Task(func2_t * t): SuperTask(),fnum(7){m7 = t;}; + Task(func2_t * t): SuperTask(),fnum(8){m8 = t;}; + Task(func2_t * t): SuperTask(),fnum(9){m9 = t;}; + Task(func2_t * t): SuperTask(),fnum(10){m10 = t;}; + Task(func2_t * t): SuperTask(),fnum(11){m11 = t;}; + Task(func2_t * t): SuperTask(),fnum(12){m12 = t;}; + Task(func3_t * t): SuperTask(),fnum(13){m13 = t;}; + Task(func4_t * t): SuperTask(),fnum(14){m14 = t;}; + Task(func4_t * t): SuperTask(),fnum(15){m15 = t;}; + Task(func4_t * t): SuperTask(),fnum(16){m16 = t;}; ~Task(){} @@ -172,6 +174,7 @@ public: case 13: (*m13)(); break; case 14: (*m14)(); break; case 15: (*m15)(); break; + case 16: (*m16)(); break; default: cprintf(RED, "Error: Task not defined. Abort!\n"); break;