From 8740e4f6833de54d874435b7cf3ef6de8b0afc72 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 8 Aug 2019 14:49:13 +0200 Subject: [PATCH] WIP --- slsDetectorSoftware/include/Detector.h | 47 ++++++++++++++----- .../include/multiSlsDetector.h | 38 +++++++++++++-- slsDetectorSoftware/include/slsDetector.h | 12 +++++ slsDetectorSoftware/src/Detector.cpp | 37 +++++++++++---- slsDetectorSoftware/src/multiSlsDetector.cpp | 26 ++++++++++ slsDetectorSoftware/src/slsDetector.cpp | 15 ++++++ slsSupportLib/include/sls_detector_defs.h | 6 +++ 7 files changed, 156 insertions(+), 25 deletions(-) diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index 33a43e90b..1a47dd611 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -167,7 +167,7 @@ class Detector { * Get Client Software version * @returns client software version */ - Result getClientSoftwareVersion() const; + int64_t getClientSoftwareVersion() const; /** * Get Receiver software version @@ -187,7 +187,7 @@ class Detector { * Also updates local detector cache * @param name hostnames for the positions given */ - void setHostname(const std::vector &name); + void setHostname(const std::vector &value); /** * Get Detector type as an enum @@ -209,25 +209,48 @@ class Detector { */ Result getDetectorTypeAsString(Positions pos = {}) const; + /** + * Returns the total number of detectors in the multidetector structure + * @returns total number of detectors in the multidetector structure + */ + int getTotalNumberOfDetectors() const; + /** * Returns the number of detectors in the multidetector structure - * @returns number of detectors + * @returns number of detectors in the multidetector structure */ - int getNumberOfDetectors() const; + defs::coordinates getNumberOfDetectors() const; /** - * Returns number of detectors in dimension d - * @param d dimension d - * @returns number of detectors in dimension d + * Returns the number of channels + * @param pos detector position + * @returns the number of channels */ - int getNumberOfDetectors(defs::dimension d) const; + Result getNumberOfChannels(Positions pos = {}) const; /** - * Returns the number of detectors in each direction - @param nx number of detectors in x direction - @param ny number of detectors in y direction + * Returns the number of channels including gap pixels + * @param pos detector position + * @returns the number of channels including gap pixels */ - void getNumberOfDetectors(int &nx, int &ny) const; + Result + getNumberOfChannelsInclGapPixels(Positions pos = {}) const; + + /** + * Returns the maximum number of channels of complete detector in both + * dimensions. -1 means no limit in this dimension. This value is used to + * calculate row and column offsets for each module. + * @returns the maximum number of channels of complete detector + */ + defs::coordinates getMaxNumberOfChannels() const; + + /** + * Sets the maximum number of channels of complete detector in both + * dimensions. -1 means no limit in this dimension. This value is used to + * calculate row and column offsets for each module. + * @param value the maximum number of channels of complete detector + */ + void setMaxNumberOfChannels(const defs::coordinates value); // Erik diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index 6b8198404..7c1d065aa 100755 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -396,7 +396,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns the total number of channels of all sls detectors */ - int getTotalNumberOfChannels(int detPos = -1); + int getTotalNumberOfChannels(int detPos = -1);// /** * Returns the total number of channels of all sls detectors in dimension d @@ -405,7 +405,13 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns the total number of channels of all sls detectors in dimension d */ - int getTotalNumberOfChannels(dimension d, int detPos = -1); + int getTotalNumberOfChannels(dimension d, int detPos = -1);// + + /** + * Returns the total number of channels from shared memory in each dimension + * @returns the total number of channels in each dimension + */ + slsDetectorDefs::coordinates getNumberOfChannels() const; // /** * Returns the total number of channels of all sls detectors in dimension d @@ -415,7 +421,13 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns the total number of channels of all sls detectors in dimension d * including gap pixels */ - int getTotalNumberOfChannelsInclGapPixels(dimension d, int detPos = -1); + int getTotalNumberOfChannelsInclGapPixels(dimension d, int detPos = -1);// + + /** + * Returns the total number of channels including gap pixels + * @returns the total number of channels including gap pixels + */ + slsDetectorDefs::coordinates getTotalNumberOfChannelsInclGapPixels() const; // /** * Returns the maximum number of channels of all sls detectors in each @@ -425,7 +437,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns the maximum number of channels of all sls detectors in dimension * d */ - int getMaxNumberOfChannelsPerDetector(dimension d); + int getMaxNumberOfChannelsPerDetector(dimension d);// /** * Sets the maximum number of channels of all sls detectors in each @@ -436,7 +448,23 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns the maximum number of channels of all sls detectors in dimension * d */ - int setMaxNumberOfChannelsPerDetector(dimension d, int i); + int setMaxNumberOfChannelsPerDetector(dimension d, int i);// + + /** + * Returns maximum number of channels of all sls detectors in each + * dimension d from shared memory, multi detector shared memory variable to + * calculate offsets for each sls detector + * @returns maximum number of channels of all sls detectors + */ + slsDetectorDefs::coordinates getMaxNumberOfChannels() const; // + + /** + * Sets maximum number of channels of all sls detectors in each + * dimension d from shared memory, multi detector shared memory variable to + * calculate offsets for each sls detector + * @param c maximum number of channels of all sls detectors + */ + void setMaxNumberOfChannels(const slsDetectorDefs::coordinates c); // /** * Get Quad Type (Only for Eiger Quad detector hardware) diff --git a/slsDetectorSoftware/include/slsDetector.h b/slsDetectorSoftware/include/slsDetector.h index 582b3283f..3150d1aed 100755 --- a/slsDetectorSoftware/include/slsDetector.h +++ b/slsDetectorSoftware/include/slsDetector.h @@ -350,6 +350,12 @@ class slsDetector : public virtual slsDetectorDefs { */ int getTotalNumberOfChannels(dimension d) const; + /** + * Returns the total number of channels from shared memory in each dimension + * @returns the total number of channels in each dimension + */ + slsDetectorDefs::coordinates getNumberOfChannels() const; + /** * Returns the total number of channels of in dimension d including gap * pixels from shared memory @@ -359,6 +365,12 @@ class slsDetector : public virtual slsDetectorDefs { */ int getTotalNumberOfChannelsInclGapPixels(dimension d) const; + /** + * Returns the total number of channels including gap pixels + * @returns the total number of channels including gap pixels + */ + slsDetectorDefs::coordinates getNumberOfChannelsInclGapPixels() const; + /** * returns the number of channels per chip from shared memory (Mythen) * @returns number of channels per chip diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 9d38a5fb1..8cba007d9 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -142,7 +142,7 @@ Result Detector::getDetectorSerialNumber(Positions pos) const { defs::DETECTOR_SERIAL_NUMBER); } -Result Detector::getClientSoftwareVersion() const { +int64_t Detector::getClientSoftwareVersion() const { return pimpl->getClientSoftwareVersion(); } @@ -152,8 +152,8 @@ Result Detector::getReceiverSoftwareVersion(Positions pos) const { std::string Detector::getUserDetails() const { return pimpl->getUserDetails(); } -void Detector::setHostname(const std::vector &name) { - pimpl->setHostname(name); +void Detector::setHostname(const std::vector &value) { + pimpl->setHostname(value); } defs::detectorType Detector::getDetectorTypeAsEnum() const { @@ -169,18 +169,39 @@ Result Detector::getDetectorTypeAsString(Positions pos) const { return pimpl->Parallel(&slsDetector::getDetectorTypeAsString, pos); } -int Detector::getNumberOfDetectors() const { +int Detector::getTotalNumberOfDetectors() const { return pimpl->getNumberOfDetectors(); } -int Detector::getNumberOfDetectors(defs::dimension d) const { - return pimpl->getNumberOfDetectors(d); +defs::coordinates Detector::getNumberOfDetectors() const { + defs::coordinates coord; + coord.x = pimpl->getNumberOfDetectors(defs::X); + coord.y = pimpl->getNumberOfDetectors(defs::Y); + return coord; } -void Detector::getNumberOfDetectors(int &nx, int &ny) const { - pimpl->getNumberOfDetectors(nx, ny); +Result Detector::getNumberOfChannels(Positions pos) const { + if (pos.empty() || (pos.size() == 1 && pos[0] == -1)) { + return {pimpl->getNumberOfChannels()}; + } + return pimpl->Parallel(&slsDetector::getNumberOfChannels, pos); } +Result +Detector::getNumberOfChannelsInclGapPixels(Positions pos) const { + if (pos.empty() || (pos.size() == 1 && pos[0] == -1)) { + return {pimpl->getTotalNumberOfChannelsInclGapPixels()}; + } + return pimpl->Parallel(&slsDetector::getNumberOfChannelsInclGapPixels, pos); +} + +defs::coordinates Detector::getMaxNumberOfChannels() const { + return pimpl->getMaxNumberOfChannels(); +} + +void Detector::setMaxNumberOfChannels(const defs::coordinates value) { + pimpl->setMaxNumberOfChannels(value); +} // Erik Result Detector::getPatternMask(Positions pos) { diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 7a175406e..b00cccd72 100755 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -534,6 +534,13 @@ int multiSlsDetector::getTotalNumberOfChannels(dimension d, int detPos) { return multi_shm()->numberOfChannel[d]; } +slsDetectorDefs::coordinates multiSlsDetector::getNumberOfChannels() const { + slsDetectorDefs::coordinates coord; + coord.x = multi_shm()->numberOfChannel[X]; + coord.y = multi_shm()->numberOfChannel[Y]; + return coord; +} + int multiSlsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d, int detPos) { // single @@ -545,6 +552,13 @@ int multiSlsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d, return multi_shm()->numberOfChannelInclGapPixels[d]; } +slsDetectorDefs::coordinates multiSlsDetector::getTotalNumberOfChannelsInclGapPixels() const { + slsDetectorDefs::coordinates coord; + coord.x = multi_shm()->numberOfChannelInclGapPixels[X]; + coord.y = multi_shm()->numberOfChannelInclGapPixels[Y]; + return coord; +} + int multiSlsDetector::getMaxNumberOfChannelsPerDetector(dimension d) { return multi_shm()->maxNumberOfChannelsPerDetector[d]; } @@ -554,6 +568,18 @@ int multiSlsDetector::setMaxNumberOfChannelsPerDetector(dimension d, int i) { return multi_shm()->maxNumberOfChannelsPerDetector[d]; } +slsDetectorDefs::coordinates multiSlsDetector::getMaxNumberOfChannels() const { + slsDetectorDefs::coordinates coord; + coord.x = multi_shm()->maxNumberOfChannelsPerDetector[X]; + coord.y = multi_shm()->maxNumberOfChannelsPerDetector[Y]; + return coord; +} + +void multiSlsDetector::setMaxNumberOfChannels(const slsDetectorDefs::coordinates c) { + multi_shm()->maxNumberOfChannelsPerDetector[X] = c.x; + multi_shm()->maxNumberOfChannelsPerDetector[Y] = c.y; +} + int multiSlsDetector::getQuad(int detPos) { int retval = detectors[0]->getQuad(); if (retval && getNumberOfDetectors() > 1) { diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 6a6386a6e..0a8e38a62 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -626,11 +626,26 @@ int slsDetector::getTotalNumberOfChannels(dimension d) const { return shm()->nChan[d] * shm()->nChip[d]; } +slsDetectorDefs::coordinates slsDetector::getNumberOfChannels() const { + slsDetectorDefs::coordinates coord; + coord.x = shm()->nChan[X] * shm()->nChip[X]; + coord.y = shm()->nChan[Y] * shm()->nChip[Y]; + return coord; +} + int slsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d) const { return (shm()->nChan[d] * shm()->nChip[d] + shm()->gappixels * shm()->nGappixels[d]); } +slsDetectorDefs::coordinates slsDetector::getNumberOfChannelsInclGapPixels() const { + slsDetectorDefs::coordinates coord; + coord.x = (shm()->nChan[X] * shm()->nChip[X] + shm()->gappixels * shm()->nGappixels[X]); + coord.y = (shm()->nChan[Y] * shm()->nChip[Y] + shm()->gappixels * shm()->nGappixels[Y]); + return coord; +} + + int slsDetector::getNChans() const { return shm()->nChans; } int slsDetector::getNChans(dimension d) const { return shm()->nChan[d]; } diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 63f474901..ec3d5022f 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -284,6 +284,12 @@ format Y = 1 /**< Y dimension */ }; +#ifdef __cplusplus + struct coordinates { + int x{0}; + int y{0}; + }; +#endif /** enable/disable flags */