diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 88dd5e04f..f120c9fd1 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -256,7 +256,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) #ifdef VERBOSE cout << thisMultiDetector->detectorIds[i] << endl; #endif - detectors[i]=new slsDetector(thisMultiDetector->detectorIds[i], this); + detectors[i]=new slsDetector(i, thisMultiDetector->detectorIds[i], this); // setAngularConversionPointer(detectors[i]->getAngularConversionPointer(),detectors[i]->getNModsPointer(),detectors[i]->getNChans()*detectors[i]->getNChips(), i); @@ -377,7 +377,7 @@ int multiSlsDetector::addSlsDetector(int id, int pos) { cout << "Creating new detector " << pos << endl; #endif - detectors[pos]=new slsDetector(id, this); + detectors[pos]=new slsDetector(pos, id, this); thisMultiDetector->detectorIds[pos]=detectors[pos]->getDetectorId(); thisMultiDetector->numberOfDetectors++; @@ -692,7 +692,7 @@ int multiSlsDetector::addSlsDetector(const char *name, int pos) { #ifdef VERBOSE cout << "Detector " << id << " already exists" << endl; #endif - s=new slsDetector(id, this); + s=new slsDetector(pos, id, this); if (s->getHostname()==string(name)) break; delete s; @@ -733,7 +733,7 @@ int multiSlsDetector::addSlsDetector(const char *name, int pos) { #ifdef VERBOSE cout << "Creating detector " << id << " of type " << getDetectorType(t) << endl; #endif - s=new slsDetector(t, id, this); + s=new slsDetector(pos, t, id, this); if (online) { s->setTCPSocket(name); setOnline(ONLINE_FLAG); @@ -766,7 +766,7 @@ int multiSlsDetector::addSlsDetector(detectorType t, int pos) { #ifdef VERBOSE cout << "Creating detector " << id << " of type " << getDetectorType(t) << endl; #endif - slsDetector *s=new slsDetector(t, id, this); + slsDetector *s=new slsDetector(pos, t, id, this); s=NULL; #ifdef VERBOSE cout << "Adding it to the multi detector structure" << endl; @@ -5146,7 +5146,7 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy){ } //add port sprintf(dataSocketServerDetails[i],"%s:%d",dataSocketServerDetails[i],DEFAULT_ZMQ_PORTNO + - (detectors[i/numSocketsPerDetector]->getDetectorId())*numSocketsPerDetector + (i%numSocketsPerDetector));//using this instead of i in the offchance, detid doesnt start at 0 (shmget error) + (i/numSocketsPerDetector)*numSocketsPerDetector + (i%numSocketsPerDetector));//using this instead of i in the offchance, detid doesnt start at 0 (shmget error) //create context context[i] = zmq_ctx_new(); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index d621f5f41..079c5e3a6 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -152,9 +152,10 @@ int slsDetector::freeSharedMemory() { -slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(), +slsDetector::slsDetector(int pos, int id, multiSlsDetector *p) :slsDetectorUtils(), thisDetector(NULL), detId(id), + posId(pos), parentDet(p), shmId(-1), controlSocket(NULL), @@ -204,9 +205,10 @@ slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(), -slsDetector::slsDetector(detectorType type, int id,multiSlsDetector *p): slsDetectorUtils(), +slsDetector::slsDetector(int pos, detectorType type, int id, multiSlsDetector *p): slsDetectorUtils(), thisDetector(NULL), detId(id), + posId(pos), parentDet(p), shmId(-1), controlSocket(NULL), @@ -260,9 +262,10 @@ slsDetector::~slsDetector(){ delete thisReceiver; }; -slsDetector::slsDetector(char *name, int id, int cport,multiSlsDetector *p) : slsDetectorUtils(), +slsDetector::slsDetector(int pos, char *name, int id, int cport,multiSlsDetector *p) : slsDetectorUtils(), thisDetector(NULL), detId(id), + posId(pos), parentDet(p), shmId(-1), controlSocket(NULL), @@ -7271,9 +7274,9 @@ string slsDetector::setFileName(string s) { pthread_mutex_lock(&ms); fileIO::setFileName(s); if(thisDetector->myDetectorType == EIGER) - parentDet->setDetectorIndex(detId); + parentDet->setDetectorIndex(posId); else if(parentDet->getNumberOfDetectors()>1) - parentDet->setDetectorIndex(detId); + parentDet->setDetectorIndex(posId); s=parentDet->createReceiverFilePrefix(); pthread_mutex_unlock(&ms); } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 6a177c2ad..6221a661a 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -298,20 +298,22 @@ class slsDetector : public slsDetectorUtils, public energyConversion { /** (default) constructor \param type is needed to define the size of the detector shared memory 9defaults to GENERIC i.e. the largest shared memory needed by any slsDetector is allocated \param id is the detector index which is needed to define the shared memory id. Different physical detectors should have different IDs in order to work independently + \param pos is the index of object in the parent multislsdet array \param p is the parent multislsdet to access filename ,path etc */ - slsDetector(detectorType type=GENERIC, int id=0, multiSlsDetector *p=NULL); + slsDetector(int pos, detectorType type=GENERIC, int id=0, multiSlsDetector *p=NULL); /** constructor \param id is the detector index which is needed to define the shared memory id. Different physical detectors should have different IDs in order to work independently + \param pos is the index of object in the parent multislsdet array \param p is the parent multislsdet to access filename ,path etc */ - slsDetector(int id, multiSlsDetector *p=NULL); + slsDetector(int pos, int id, multiSlsDetector *p=NULL); - slsDetector(char *name, int id=0, int cport=DEFAULT_PORTNO, multiSlsDetector *p=NULL); + slsDetector(int pos, char *name, int id=0, int cport=DEFAULT_PORTNO, multiSlsDetector *p=NULL); //slsDetector(string const fname); // ~slsDetector(){while(dataQueue.size()>0){}}; /** destructor */ @@ -1416,6 +1418,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int getDetectorId(int i=-1) {return detId;}; + /** Receives a data frame from the detector socket \returns pointer to the data (or NULL if failed) @@ -1849,6 +1852,11 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int detId; + /** + position ID + */ + int posId; + /** * parent multi detector