From 2a508435c77b5d7a37bdfb0e53cfb6cf181b5369 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 13 Dec 2016 11:41:27 +0100 Subject: [PATCH] change the filenaming according to det position and not det id --- .../multiSlsDetector/multiSlsDetector.cpp | 12 ++++++------ slsDetectorSoftware/slsDetector/slsDetector.cpp | 13 ++++++++----- slsDetectorSoftware/slsDetector/slsDetector.h | 14 +++++++++++--- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 8642b1af2..7456c8408 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -251,7 +251,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); @@ -372,7 +372,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++; @@ -687,7 +687,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; @@ -728,7 +728,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); @@ -761,7 +761,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; @@ -5122,7 +5122,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 7e3f049ad..4bd7cd9db 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), @@ -7256,9 +7259,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 4f332907d..5602758b6 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -297,20 +297,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 */ @@ -1415,6 +1417,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) @@ -1836,6 +1839,11 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int detId; + /** + position ID + */ + int posId; + /** * parent multi detector