From 5a483eaf29961017818f7ac45fef313883909651 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Fri, 9 Aug 2019 11:11:29 +0200 Subject: [PATCH] WIP, new eiger serveR --- .../bin/eigerDetectorServer_developer | Bin 302608 -> 302608 bytes .../slsDetectorServer_funcs.c | 1 - slsDetectorSoftware/include/Detector.h | 110 +++++++++++++++++- .../include/multiSlsDetector.h | 35 ++---- slsDetectorSoftware/include/slsDetector.h | 8 +- .../include/slsDetectorUsers.h | 10 +- slsDetectorSoftware/src/Detector.cpp | 84 +++++++++++-- slsDetectorSoftware/src/multiSlsDetector.cpp | 68 ++++------- slsDetectorSoftware/src/slsDetector.cpp | 1 - .../src/slsDetectorCommand.cpp | 18 +-- slsDetectorSoftware/src/slsDetectorUsers.cpp | 4 - slsSupportLib/include/sls_detector_defs.h | 7 +- slsSupportLib/include/versionAPI.h | 2 +- 13 files changed, 230 insertions(+), 118 deletions(-) diff --git a/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer index eaf92f6b2e697771bcd0d3e5262b5ba82392f865..c054a083a3a560132f2fd493ca3c5565a4ada65c 100755 GIT binary patch delta 37453 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 getNumberOfFrames() const; + + /** + * Set number of Frames + * @param value number of Frames + */ + void setNumberOfFrames(int64_t value); + + /** + * Get number of Cycles + * @returns number of Cycles + */ + Result getNumberOfCycles() const; + + /** + * Set number of Cycles + * @param value number of Cycles + */ + void setNumberOfCycles(int64_t value); + + /** + * Get number of additional storage cells (Jungfrau) + * @returns number of additional storage cells + */ + Result getNumberOfStorageCells() const; + + /** + * Set number of additional storage cells (Jungfrau) + * @param value number of additional storage cells + */ + void setNumberOfStorageCells(int64_t value); + + /** + * Get number of analog samples (CTB) + * @param pos detector position + * @returns number of analog samples + */ + Result getNumberOfAnalogSamples(Positions pos = {}) const; + + /** + * Set number of analog samples (CTB) + * @param value number of analog samples (CTB) + * @param pos detector position + */ + void setNumberOfAnalogSamples(int64_t value, Positions pos = {}); + + /** + * Get number of digital samples (CTB) + * @param pos detector position + * @returns number of digital samples + */ + Result getNumberOfDigitalSamples(Positions pos = {}) const; + + /** + * Set number of digital samples (CTB) + * @param value number of digital samples (CTB) + * @param pos detector position + */ + void setNumberOfDigitalSamples(int64_t value, Positions pos = {}); + + /** + * Get delay after trigger in ns(Gotthard, Jungfrau) + * @param pos detector position + * @returns delay after trigger in ns + */ + Result getDelayAfterTrigger(Positions pos = {}) const; + + /** + * Set delay after trigger (Gotthard, Jungfrau) + * @param value delay after trigger in ns + * @param pos detector position + */ + void setDelayAfterTrigger(ns value, Positions pos = {}); + + /** + * Get sub frame dead time in ns (Eiger in 32 bit mode) + * @param pos detector position + * @returns delay after trigger in ns + */ + Result getSubFrameDeadTime(Positions pos = {}) const; + + /** + * Set sub frame dead time after trigger (Eiger in 32 bit mode) + * @param value delay after trigger in ns + * @param pos detector position + */ + void setSubFrameDeadTime(ns value, Positions pos = {}); + + /** + * Get storage cell delay (Jungfrau) + * @param pos detector position + * @returns storage cell delay in ns. Range: (0-1638375 ns (resolution of + * 25ns) + */ + Result getStorageCellDelay(Positions pos = {}) const; + + /** + * Set storage cell delay (Jungfrau) + * @param value storage cell delay in ns. Range: (0-1638375 ns (resolution + * of 25ns) + * @param pos detector position + */ + void setStorageCellDelay(ns value, Positions pos = {}); + // Erik Result getFramesCaughtByReceiver(Positions pos = {}) const; diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index 9826b9477..69695075c 100755 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -15,7 +15,7 @@ class detectorData; #include #include -#define MULTI_SHMAPIVERSION 0x190807 +#define MULTI_SHMAPIVERSION 0x190809 #define MULTI_SHMVERSION 0x190807 #define SHORT_STRING_LENGTH 50 #define DATE_LENGTH 30 @@ -84,9 +84,6 @@ struct sharedMultiSlsDetector { * one dimension */ int maxNumberOfChannelsPerDetector[2]; - /** timer values */ - int64_t timerValue[slsDetectorDefs::timerIndex::MAX_TIMERS]; - /** flag for acquiring */ bool acquiringFlag; @@ -712,7 +709,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * Configures in detector the destination for UDP packets * @param detPos -1 for all detectors in list or specific detector position */ - void configureMAC(int detPos = -1); + void configureMAC(int detPos = -1); // /** * Set starting frame number for the next acquisition @@ -731,12 +728,12 @@ class multiSlsDetector : public virtual slsDetectorDefs { /** * Set/get timer value (not all implemented for all detectors) * @param index timer index - * @param t time in ns or number of...(e.g. frames, gates, probes) + * @param t time in ns or number of...(e.g. frames, probes) * @param detPos -1 for all detectors in list or specific detector position - * @returns timer set value in ns or number of...(e.g. frames, gates, + * @returns timer set value in ns or number of...(e.g. frames, * probes) */ - int64_t setTimer(timerIndex index, int64_t t = -1, int detPos = -1); + int64_t setTimer(timerIndex index, int64_t t = -1, int detPos = -1); // /** * Set/get exposure time @@ -766,7 +763,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns delay after trigger in ns, or s if specified */ double setDelayAfterTrigger(double t = -1, bool inseconds = false, - int detPos = -1); + int detPos = -1);// /** * (Advanced users) @@ -788,7 +785,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @returns sub frame dead time in ns, or s if specified */ double setSubFrameExposureDeadTime(double t = -1, bool inseconds = false, - int detPos = -1); + int detPos = -1);// /** * Set/get number of frames @@ -796,7 +793,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns number of frames */ - int64_t setNumberOfFrames(int64_t t = -1, int detPos = -1); + int64_t setNumberOfFrames(int64_t t = -1, int detPos = -1);// /** * Set/get number of cycles @@ -804,15 +801,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns number of cycles */ - int64_t setNumberOfCycles(int64_t t = -1, int detPos = -1); - - /** - * Set/get number of gates (none of the detectors at the moment) - * @param t number of gates (-1 gets) - * @param detPos -1 for all detectors in list or specific detector position - * @returns number of gates - */ - int64_t setNumberOfGates(int64_t t = -1, int detPos = -1); + int64_t setNumberOfCycles(int64_t t = -1, int detPos = -1);// /** * Set/get number of additional storage cells (Jungfrau) @@ -820,7 +809,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param detPos -1 for all detectors in list or specific detector position * @returns number of additional storage cells */ - int64_t setNumberOfStorageCells(int64_t t = -1, int detPos = -1); + int64_t setNumberOfStorageCells(int64_t t = -1, int detPos = -1);// /** * Get measured period between previous two frames (EIGER) @@ -844,9 +833,9 @@ class multiSlsDetector : public virtual slsDetectorDefs { * Set/get timer value left in acquisition (not all implemented for all * detectors) * @param index timer index - * @param t time in ns or number of...(e.g. frames, gates, probes) + * @param t time in ns or number of...(e.g. frames, probes) * @param detPos -1 for all detectors in list or specific detector position - * @returns timer set value in ns or number of...(e.g. frames, gates, + * @returns timer set value in ns or number of...(e.g. frames, * probes) */ int64_t getTimeLeft(timerIndex index, int detPos = -1); diff --git a/slsDetectorSoftware/include/slsDetector.h b/slsDetectorSoftware/include/slsDetector.h index 516f43eab..9a270306a 100755 --- a/slsDetectorSoftware/include/slsDetector.h +++ b/slsDetectorSoftware/include/slsDetector.h @@ -658,8 +658,8 @@ class slsDetector : public virtual slsDetectorDefs { /** * Set/get timer value (not all implemented for all detectors) * @param index timer index - * @param t time in ns or number of...(e.g. frames, gates, probes) - * @returns timer set value in ns or number of...(e.g. frames, gates, + * @param t time in ns or number of...(e.g. frames, probes) + * @returns timer set value in ns or number of...(e.g. frames, * probes) */ int64_t setTimer(timerIndex index, int64_t t = -1); @@ -668,8 +668,8 @@ class slsDetector : public virtual slsDetectorDefs { * Set/get timer value left in acquisition (not all implemented for all * detectors) * @param index timer index - * @param t time in ns or number of...(e.g. frames, gates, probes) - * @returns timer set value in ns or number of...(e.g. frames, gates, + * @param t time in ns or number of...(e.g. frames, probes) + * @returns timer set value in ns or number of...(e.g. frames, * probes) */ int64_t getTimeLeft(timerIndex index) const; diff --git a/slsDetectorSoftware/include/slsDetectorUsers.h b/slsDetectorSoftware/include/slsDetectorUsers.h index f3f5762d5..1b93f9445 100755 --- a/slsDetectorSoftware/include/slsDetectorUsers.h +++ b/slsDetectorSoftware/include/slsDetectorUsers.h @@ -358,14 +358,6 @@ public: */ int64_t setNumberOfCycles(int64_t t = -1, int detPos = -1); - /** - * Set/get number of gates (none of the detectors at the moment) - * @param t number of gates (-1 gets) - * @param detPos -1 for all detectors in list or specific detector position - * @returns number of gates - */ - int64_t setNumberOfGates(int64_t t = -1, int detPos = -1); - /** * Set/get number of additional storage cells (Jungfrau) * @param t number of additional storage cells. Default is 0. (-1 gets) @@ -396,7 +388,7 @@ public: * Set/get timing mode * @param pol timing mode (-1 gets) * Options (slsDetectorDefs::externalCommunicationMode) - * (Eiger: AUTO_TIMING, TRIGGER_EXPOSURE, BURST_TRIGGER, GATE_FIX_NUMBER) + * (Eiger: AUTO_TIMING, TRIGGER_EXPOSURE, BURST_TRIGGER, GATED) * (Jungfrau: AUTO_TIMING, TRIGGER_EXPOSURE) * (Gotthard: AUTO_TIMING, TRIGGER_EXPOSURE) * @param detPos -1 for all detectors in list or specific detector position diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index c1736160e..ddf4797f7 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -326,9 +326,7 @@ void Detector::startAcquisition() { pimpl->Parallel(&slsDetector::startAcquisition, {}); } -void Detector::stopAcquisition() { - pimpl->Parallel(&slsDetector::stopAcquisition, {}); -} +void Detector::stopAcquisition() { pimpl->stopAcquisition(); } void Detector::sendSoftwareTrigger(Positions pos) { pimpl->Parallel(&slsDetector::sendSoftwareTrigger, pos); @@ -345,14 +343,82 @@ void Detector::startReadOut() { pimpl->Parallel(&slsDetector::startReadOut, {}); } -void Detector::readAll() { - pimpl->Parallel(&slsDetector::readAll, {}); -} +void Detector::readAll() { pimpl->Parallel(&slsDetector::readAll, {}); } void Detector::configureMAC(Positions pos) { pimpl->Parallel(&slsDetector::configureMAC, pos); } +Result Detector::getNumberOfFrames() const { + return pimpl->Parallel(&slsDetector::setTimer, {}, defs::FRAME_NUMBER, -1); +} + +void Detector::setNumberOfFrames(int64_t value) { + pimpl->Parallel(&slsDetector::setTimer, {}, defs::FRAME_NUMBER, value); +} + +Result Detector::getNumberOfCycles() const { + return pimpl->Parallel(&slsDetector::setTimer, {}, defs::CYCLES_NUMBER, -1); +} + +void Detector::setNumberOfCycles(int64_t value) { + pimpl->Parallel(&slsDetector::setTimer, {}, defs::CYCLES_NUMBER, value); +} + +Result Detector::getNumberOfStorageCells() const { + return pimpl->Parallel(&slsDetector::setTimer, {}, defs::STORAGE_CELL_NUMBER, -1); +} + +void Detector::setNumberOfStorageCells(int64_t value) { + pimpl->Parallel(&slsDetector::setTimer, {}, defs::STORAGE_CELL_NUMBER, value); +} + +Result Detector::getNumberOfAnalogSamples(Positions pos) const { + return pimpl->Parallel(&slsDetector::setTimer, pos, defs::ANALOG_SAMPLES, -1); +} + +void Detector::setNumberOfAnalogSamples(int64_t value, Positions pos) { + pimpl->Parallel(&slsDetector::setTimer, pos, defs::ANALOG_SAMPLES, value); +} + +Result Detector::getNumberOfDigitalSamples(Positions pos) const { + return pimpl->Parallel(&slsDetector::setTimer, pos, defs::DIGITAL_SAMPLES, -1); +} + +void Detector::setNumberOfDigitalSamples(int64_t value, Positions pos) { + pimpl->Parallel(&slsDetector::setTimer, pos, defs::DIGITAL_SAMPLES, value); +} + +Result Detector::getDelayAfterTrigger(Positions pos) const { + return pimpl->Parallel(&slsDetector::setTimer, pos, + defs::DELAY_AFTER_TRIGGER, -1); +} + +void Detector::setDelayAfterTrigger(ns value, Positions pos) { + pimpl->Parallel(&slsDetector::setTimer, pos, defs::DELAY_AFTER_TRIGGER, + value.count()); +} + +Result Detector::getSubFrameDeadTime(Positions pos) const { + return pimpl->Parallel(&slsDetector::setTimer, pos, defs::SUBFRAME_DEADTIME, + -1); +} + +void Detector::setSubFrameDeadTime(ns value, Positions pos) { + pimpl->Parallel(&slsDetector::setTimer, pos, defs::SUBFRAME_DEADTIME, + value.count()); +} + +Result Detector::getStorageCellDelay(Positions pos) const { + return pimpl->Parallel(&slsDetector::setTimer, pos, + defs::STORAGE_CELL_DELAY, -1); +} + +void Detector::setStorageCellDelay(ns value, Positions pos) { + pimpl->Parallel(&slsDetector::setTimer, pos, defs::STORAGE_CELL_DELAY, + value.count()); +} + // Erik Result Detector::getFramesCaughtByReceiver(Positions pos) const { return pimpl->Parallel(&slsDetector::getFramesCaughtByReceiver, pos); @@ -683,12 +749,12 @@ Result Detector::getRxPadDeactivatedMod(Positions pos) const { return pimpl->Parallel(&slsDetector::setDeactivatedRxrPaddingMode, pos, -1); } -void Detector::setActive(bool active, Positions pos){ +void Detector::setActive(bool active, Positions pos) { pimpl->Parallel(&slsDetector::activate, pos, static_cast(active)); } -Result Detector::getActive(Positions pos) const{ - pimpl->Parallel(&slsDetector::activate, pos, -1); +Result Detector::getActive(Positions pos) const { + return pimpl->Parallel(&slsDetector::activate, pos, -1); } } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 14e54848b..ca9221a06 100755 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -287,10 +287,6 @@ void multiSlsDetector::initializeDetectorStructure() { multi_shm()->numberOfChannelInclGapPixels[Y] = 0; multi_shm()->maxNumberOfChannelsPerDetector[X] = 0; multi_shm()->maxNumberOfChannelsPerDetector[Y] = 0; - for (int64_t &i : multi_shm()->timerValue) { - i = 0; - } - multi_shm()->acquiringFlag = false; multi_shm()->receiver_upstream = false; } @@ -1144,41 +1140,12 @@ uint64_t multiSlsDetector::getStartingFrameNumber(int detPos) { int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int detPos) { // single if (detPos >= 0) { - // error for setting values individually - // FIXME: what else? and error code - if (t != -1) { - switch (index) { - case FRAME_NUMBER: - case CYCLES_NUMBER: - case STORAGE_CELL_NUMBER: - throw RuntimeError("Cannot set number of frames, cycles or " - "storage cells individually."); - default: - break; - } - } return detectors[detPos]->setTimer(index, t); } // multi auto r = parallelCall(&slsDetector::setTimer, index, t); - int64_t ret = sls::minusOneIfDifferent(r); - - // set progress - if (t != -1) { - switch (index) { - case FRAME_NUMBER: - case CYCLES_NUMBER: - case STORAGE_CELL_NUMBER: - setTotalProgress(); - break; - default: - break; - } - } - - multi_shm()->timerValue[index] = ret; - return ret; + return sls::minusOneIfDifferent(r); } int64_t multiSlsDetector::secondsToNanoSeconds(double t) { @@ -1239,10 +1206,6 @@ int64_t multiSlsDetector::setNumberOfCycles(int64_t t, int detPos) { return setTimer(CYCLES_NUMBER, t, detPos); } -int64_t multiSlsDetector::setNumberOfGates(int64_t t, int detPos) { - return setTimer(GATES_NUMBER, t, detPos); -} - int64_t multiSlsDetector::setNumberOfStorageCells(int64_t t, int detPos) { return setTimer(STORAGE_CELL_NUMBER, t, detPos); } @@ -4189,16 +4152,28 @@ void multiSlsDetector::registerDataCallback( int multiSlsDetector::setTotalProgress() { int nf = 1, nc = 1, ns = 1; - if (multi_shm()->timerValue[FRAME_NUMBER] != 0) { - nf = multi_shm()->timerValue[FRAME_NUMBER]; + Result temp = Parallel(&slsDetector::setTimer, {}, FRAME_NUMBER, -1); + if (!temp.equal()) { + throw RuntimeError("Inconsistent number of frames"); + } + nf = temp.squash(); + + temp = Parallel(&slsDetector::setTimer, {}, CYCLES_NUMBER, -1); + if (!temp.equal()) { + throw RuntimeError("Inconsistent number of cycles"); + } + nc = temp.squash(); + + if (getDetectorTypeAsEnum() == JUNGFRAU) { + temp = Parallel(&slsDetector::setTimer, {}, STORAGE_CELL_NUMBER, -1); + if (!temp.equal()) { + throw RuntimeError("Inconsistent number of additional storage cells"); + } + ns = temp.squash() + 1; } - if (multi_shm()->timerValue[CYCLES_NUMBER] > 0) { - nc = multi_shm()->timerValue[CYCLES_NUMBER]; - } - - if (multi_shm()->timerValue[STORAGE_CELL_NUMBER] > 0) { - ns = multi_shm()->timerValue[STORAGE_CELL_NUMBER] + 1; + if (nf == 0 || nc == 0) { + throw RuntimeError("Number of frames or cycles is 0"); } totalProgress = nf * nc * ns; @@ -4259,6 +4234,7 @@ int multiSlsDetector::acquire() { stopReceiver(); } } + setTotalProgress(); startProcessingThread(); diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index e79284da3..0f23a319a 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -325,7 +325,6 @@ void slsDetector::initializeDetectorStructure(detectorType type) { shm()->timerValue[ACQUISITION_TIME] = 0; shm()->timerValue[FRAME_PERIOD] = 0; shm()->timerValue[DELAY_AFTER_TRIGGER] = 0; - shm()->timerValue[GATES_NUMBER] = 0; shm()->timerValue[CYCLES_NUMBER] = 1; shm()->timerValue[ACTUAL_TIME] = 0; shm()->timerValue[MEASUREMENT_TIME] = 0; diff --git a/slsDetectorSoftware/src/slsDetectorCommand.cpp b/slsDetectorSoftware/src/slsDetectorCommand.cpp index 4f1153667..112fe18ed 100755 --- a/slsDetectorSoftware/src/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/src/slsDetectorCommand.cpp @@ -378,9 +378,8 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) { ++i; /*! \page config - - extsig [flag] sets/gets the mode of the external signal. Options: \c off, \c gate_in_active_high, \c gate_in_active_low, \c trigger_in_rising_edge, \c trigger_in_falling_edge, - \c ro_trigger_in_rising_edge, \c ro_trigger_in_falling_edge, \c gate_out_active_high, \c gate_out_active_low, \c trigger_out_rising_edge, \c trigger_out_falling_edge, \c ro_trigger_out_rising_edge, - \c ro_trigger_out_falling_edge. \n Used in GOTTHARDonly. \c Returns \c (string) + - extsig [flag] sets/gets the mode of the external signal. Options: \c off, \c trigger_in_rising_edge, \c trigger_in_falling_edge, + \c trigger_out_rising_edge, \c trigger_out_falling_edge\n Used in GOTTHARDonly. \c Returns \c (string) */ descrToFuncMap[i].m_pFuncName = "extsig"; /* find command! */ descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdAdvanced; @@ -577,13 +576,6 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) { descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdTimer; ++i; - /*! \page timing - - gates [i] sets/gets number of gates. Used in GOTTHARD only. \c Returns \c (long long int) - */ - descrToFuncMap[i].m_pFuncName = "gates"; - descrToFuncMap[i].m_pFuncPtr = &slsDetectorCommand::cmdTimer; - ++i; - /*! \page timing - frames [i] sets/gets number of frames. If \c timing is not \c auto, then it is the number of frames per cycle/trigger. \c Returns \c (long long int) */ @@ -4333,8 +4325,6 @@ std::string slsDetectorCommand::cmdTimer(int narg, const char * const args[], in index = SUBFRAME_DEADTIME; else if (cmd == "delay") index = DELAY_AFTER_TRIGGER; - else if (cmd == "gates") - index = GATES_NUMBER; else if (cmd == "frames") index = FRAME_NUMBER; else if (cmd == "cycles") @@ -4825,7 +4815,7 @@ std::string slsDetectorCommand::helpAdvanced(int action) { std::ostringstream os; if (action == PUT_ACTION || action == HELP_ACTION) { - os << "extsig mode \t sets the mode of the external signal. can be \n \t \t \t off, \n \t \t \t gate_in_active_high, \n \t \t \t gate_in_active_low, \n \t \t \t trigger_in_rising_edge, \n \t \t \t trigger_in_falling_edge, \n \t \t \t ro_trigger_in_rising_edge, \n \t \t \t ro_trigger_in_falling_edge, \n \t \t \t gate_out_active_high, \n \t \t \t gate_out_active_low, \n \t \t \t trigger_out_rising_edge, \n \t \t \t trigger_out_falling_edge, \n \t \t \t ro_trigger_out_rising_edge, \n \t \t \t ro_trigger_out_falling_edge" << std::endl; + os << "extsig mode \t sets the mode of the external signal. can be \n \t \t \t off, \n \t \t \t trigger_in_rising_edge, \n \t \t \t trigger_in_falling_edge, \n \t \t \t trigger_out_rising_edge, \n \t \t \t trigger_out_falling_edge" << std::endl; os << "flags mode \t sets the readout flags to mode. can be none, storeinram, tot, continous, parallel, nonparallel, digital, analog_digital, overlow, nooverflow, unknown." << std::endl; os << "interruptsubframe flag \t sets the interrupt subframe flag. Setting it to 1 will interrupt the last subframe at the required exposure time. By default, this is disabled and set to 0, ie. it will wait for the last sub frame to finish exposing. Used for EIGER in 32 bit mode only." << std::endl; os << "readnlines f \t sets the number of rows to read out per half module. Options: 1 - 256 (Not all values as it depends on dynamic range and 10GbE enabled). Used for EIGER only. " << std::endl; @@ -4841,7 +4831,7 @@ std::string slsDetectorCommand::helpAdvanced(int action) { } if (action == GET_ACTION || action == HELP_ACTION) { - os << "extsig \t gets the mode of the external signal. can be \n \t \t \t off, \n \t \t \t gate_in_active_high, \n \t \t \t gate_in_active_low, \n \t \t \t trigger_in_rising_edge, \n \t \t \t trigger_in_falling_edge, \n \t \t \t ro_trigger_in_rising_edge, \n \t \t \t ro_trigger_in_falling_edge, \n \t \t \t gate_out_active_high, \n \t \t \t gate_out_active_low, \n \t \t \t trigger_out_rising_edge, \n \t \t \t trigger_out_falling_edge, \n \t \t \t ro_trigger_out_rising_edge, \n \t \t \t ro_trigger_out_falling_edge" << std::endl; + os << "extsig \t gets the mode of the external signal. can be \n \t \t \t off, \n \t \t \t trigger_in_rising_edge, \n \t \t \t trigger_in_falling_edge, \n \t \t \t trigger_out_rising_edge, \n \t \t \t trigger_out_falling_edge" << std::endl; os << "flags \t gets the readout flags. can be none, storeinram, tot, continous, parallel, nonparallel, digital, analog_digital, overflow, nooverflow, unknown" << std::endl; os << "interruptsubframe \t gets the interrupt subframe flag. Setting it to 1 will interrupt the last subframe at the required exposure time. By default, this is disabled and set to 0, ie. it will wait for the last sub frame to finish exposing. Used for EIGER in 32 bit mode only." << std::endl; os << "readnlines \t gets the number of rows to read out per half module. Used for EIGER only. " << std::endl; diff --git a/slsDetectorSoftware/src/slsDetectorUsers.cpp b/slsDetectorSoftware/src/slsDetectorUsers.cpp index 16499ad27..36f115d37 100755 --- a/slsDetectorSoftware/src/slsDetectorUsers.cpp +++ b/slsDetectorSoftware/src/slsDetectorUsers.cpp @@ -159,10 +159,6 @@ int64_t slsDetectorUsers::setNumberOfCycles(int64_t t, int detPos){ return detector.setNumberOfCycles(t, detPos); } -int64_t slsDetectorUsers::setNumberOfGates(int64_t t, int detPos){ - return detector.setNumberOfGates(t, detPos); -} - int64_t slsDetectorUsers::setNumberOfStorageCells(int64_t t, int detPos) { return detector.setNumberOfStorageCells(t, detPos); } diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index ec3d5022f..673e32715 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -106,7 +106,6 @@ class slsDetectorDefs { FRAME_PERIOD, /**< period between exposures */ DELAY_AFTER_TRIGGER, /**< delay between trigger and start of exposure or readout (in triggered mode) */ - GATES_NUMBER, /**< number of gates per frame (in gated mode) */ CYCLES_NUMBER, /**< number of cycles: total number of acquisitions is number or frames*number of cycles */ ACTUAL_TIME, /**< Actual time of the detector's internal timer */ @@ -918,12 +917,12 @@ format /** returns std::string from timer index \param s can be FRAME_NUMBER,ACQUISITION_TIME,FRAME_PERIOD, - DELAY_AFTER_TRIGGER,GATES_NUMBER, CYCLES_NUMBER, + DELAY_AFTER_TRIGGER, CYCLES_NUMBER, ACTUAL_TIME,MEASUREMENT_TIME, PROGRESS,FRAMES_FROM_START,FRAMES_FROM_START_PG,ANALOG_SAMPLES,DIGITAL_SAMPLES,SUBFRAME_ACQUISITION_TIME,STORAGE_CELL_NUMBER, SUBFRAME_DEADTIME \returns std::string frame_number,acquisition_time,frame_period, - delay_after_trigger,gates_number, cycles_number, + delay_after_trigger, cycles_number, actual_time,measurement_time, progress,frames_from_start,frames_from_start_pg,analog_samples, digital_samples,subframe_acquisition_time,storage_cell_number, SUBFRAME_DEADTIME @@ -938,8 +937,6 @@ format return std::string("frame_period"); case DELAY_AFTER_TRIGGER: return std::string("delay_after_trigger"); - case GATES_NUMBER: - return std::string("gates_number"); case CYCLES_NUMBER: return std::string("cycles_number"); case ACTUAL_TIME: diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index 25e8a6332..d95e414ac 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -7,4 +7,4 @@ #define APIRECEIVER 0x190722 #define APIGUI 0x190723 #define APIJUNGFRAU 0x190730 -#define APIEIGER 0x190806 +#define APIEIGER 0x190807