diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index eb07b84a9..4790c9fe1 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -197,7 +197,7 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) #ifdef VERBOSE cout << thisMultiDetector->detectorIds[i] << endl; #endif - detectors[i]=new slsDetector(thisMultiDetector->detectorIds[i]); + detectors[i]=new slsDetector(thisMultiDetector->detectorIds[i], this); // setAngularConversionPointer(detectors[i]->getAngularConversionPointer(),detectors[i]->getNModsPointer(),detectors[i]->getNChans()*detectors[i]->getNChips(), i); @@ -307,7 +307,7 @@ int multiSlsDetector::addSlsDetector(int id, int pos) { cout << "Creating new detector " << pos << endl; #endif - detectors[pos]=new slsDetector(id); + detectors[pos]=new slsDetector(id, this); thisMultiDetector->detectorIds[pos]=detectors[pos]->getDetectorId(); thisMultiDetector->numberOfDetectors++; @@ -530,7 +530,7 @@ int multiSlsDetector::addSlsDetector(const char *name, int pos) { #ifdef VERBOSE cout << "Detector " << id << " already exists" << endl; #endif - s=new slsDetector(id); + s=new slsDetector(id, this); if (s->getHostname()==string(name)) break; delete s; @@ -569,7 +569,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); + s=new slsDetector(t, id, this); if (online) { s->setTCPSocket(name); setOnline(ONLINE_FLAG); @@ -602,7 +602,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); + slsDetector *s=new slsDetector(t, id, this); #ifdef VERBOSE cout << "Adding it to the multi detector structure" << endl; #endif diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 5d6915bec..3e38d1c25 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -109,7 +109,7 @@ int slsDetector::freeSharedMemory() { -slsDetector::slsDetector(int id) :slsDetectorUtils(), +slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(), thisDetector(NULL), detId(id), shmId(-1), @@ -122,7 +122,8 @@ slsDetector::slsDetector(int id) :slsDetectorUtils(), dacs(NULL), adcs(NULL), chipregs(NULL), - chanregs(NULL) + chanregs(NULL), + parentDet(p) { @@ -157,7 +158,7 @@ slsDetector::slsDetector(int id) :slsDetectorUtils(), -slsDetector::slsDetector(detectorType type, int id): slsDetectorUtils(), +slsDetector::slsDetector(detectorType type, int id,multiSlsDetector *p): slsDetectorUtils(), thisDetector(NULL), detId(id), shmId(-1), @@ -170,7 +171,8 @@ slsDetector::slsDetector(detectorType type, int id): slsDetectorUtils(), dacs(NULL), adcs(NULL), chipregs(NULL), - chanregs(NULL) + chanregs(NULL), + parentDet(p) { while (shmId<0) { /**Initlializes shared memory \sa initSharedMemory @@ -208,7 +210,7 @@ slsDetector::~slsDetector(){ }; -slsDetector::slsDetector(char *name, int id, int cport) : slsDetectorUtils(), +slsDetector::slsDetector(char *name, int id, int cport,multiSlsDetector *p) : slsDetectorUtils(), thisDetector(NULL), detId(id), shmId(-1), @@ -221,7 +223,8 @@ slsDetector::slsDetector(char *name, int id, int cport) : slsDetectorUtils(), dacs(NULL), adcs(NULL), chipregs(NULL), - chanregs(NULL) + chanregs(NULL), + parentDet(p) { detectorType type=(detectorType)getDetectorType(name, cport); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 4078f1fe3..f35ab3db8 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -272,18 +272,20 @@ 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 p is the parent multislsdet to access filename ,path etc */ - slsDetector(detectorType type=GENERIC, int id=0); + slsDetector(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 p is the parent multislsdet to access filename ,path etc */ - slsDetector(int id); + slsDetector(int id, multiSlsDetector *p=NULL); - slsDetector(char *name, int id=0, int cport=DEFAULT_PORTNO); + slsDetector(char *name, int id=0, int cport=DEFAULT_PORTNO, multiSlsDetector *p=NULL); //slsDetector(string const fname); // ~slsDetector(){while(dataQueue.size()>0){}}; /** destructor */ @@ -1467,6 +1469,13 @@ class slsDetector : public slsDetectorUtils, public energyConversion { */ int detId; + + /** + * + * */ + + multiSlsDetector *parentDet; + /** shared memeory ID */