805 lines
29 KiB
C++
Executable File

#pragma once
//class detectorData;
namespace sls
{
class Detector;
}
#include <memory>
class slsDetectorUsers {
public:
/**
* @param shm_id detector shared memory id
* Default value is 0. Can be set to more values for
* multiple detectors.It is important only if you
* are controlling multiple detectors from the same pc.
*/
slsDetectorUsers(int shm_id = 0);
~slsDetectorUsers();
/**************************************************
* *
* CONFIGURATION *
* *
* ************************************************/
void readConfigurationFile(const std::string& fname);
/** Gets the total number of detectors */
int size() const;
// /**
// * Returns the size of detector/multi detector
// * @param nx number of channels in horiziontal
// * @param ny number of channels in vertical
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns the total number of channels of all sls detectors
// */
// int getDetectorSize(int &nx, int &ny, int detPos);
// /**
// * Gets detector type
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns detector type (EIGER, JUNGFRAU, GOTTHARD) slsDetectorDefs
// */
// std::string getDetectorType(int detPos = -1);
// /**
// * Write current configuration to a file (for one time detector setup)
// * @param fname configuration file name
// */
// void writeConfigurationFile(const std::string& fname);
// /**
// * Loads the detector setup from file (current measurement setup)
// * @param fname file to read from
// * @returns OK or FAIL
// */
// int retrieveDetectorSetup(const std::string& fname);
// /**
// * Saves the detector setup to file (currentmeasurement setup)
// * @param fname file to write to
// * @returns OK or FAIL
// */
// int dumpDetectorSetup(const std::string& fname);
// /**
// * Get detector firmware version
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns detector firmware version
// */
// int64_t getDetectorFirmwareVersion(int detPos = -1);
// /**
// * Get detector serial number or MAC
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns detector serial number or MAC
// */
// int64_t getDetectorSerialNumber(int detPos = -1);
// /**
// * Get on-board detector server software version
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns on-board detector server software version
// */
// int64_t getDetectorSoftwareVersion(int detPos = -1);
// /**
// * (previously getThisSoftwareVersion)
// * Get client software version
// * @returns client software version
// */
// int64_t getClientSoftwareVersion();
// /**
// * Get receiver software version
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns receiver software version
// */
// int64_t getReceiverSoftwareVersion(int detPos = -1);
// /**
// * Check Detector Version Compatibility
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void isDetectorVersionCompatible(int detPos = -1);
// /**
// * Check Receiver Version Compatibility
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void isReceiverVersionCompatible(int detPos = -1);
// /**
// * Performs a complete acquisition
// * resets frames caught in receiver, starts receiver, starts detector,
// * blocks till detector finished acquisition, stop receiver, increments file index,
// * loops for measurements, calls required call backs.
// * @returns OK or FAIL depending on if it already started
// */
// int startMeasurement();
// /**
// * Stop detector acquisition
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void stopMeasurement(int detPos = -1);
// /**
// * Get Detector run status
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns status
// */
// int getDetectorStatus(int detPos = -1);
// /**
// * (Advanced user, included in startMeasurement)
// * Start detector acquisition (Non blocking)
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void startAcquisition(int detPos = -1);
// /**
// * Stop detector acquisition (Same as stopMeasurement)
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void stopAcquisition(int detPos = -1);
// /**
// * (Only in non blocking acquire mode)
// * Give an internal software trigger to the detector (Eiger)
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void sendSoftwareTrigger(int detPos = -1);
// /**
// * Set Rate correction ( Eiger)
// * @param t (1) enable rate correction to default dead time,
// * (0) disable rate correction, (-1) gets
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns rate correction tau
// */
// int enableCountRateCorrection(int i = -1, int detPos = -1);
// /**
// * Set/get dynamic range
// * @param i dynamic range (-1 get)
// * Options: Eiger(4, 8, 16, 32), Jungfrau(16), Gotthard(16)
// * Background operation:
// * (Eiger: If i is 32, also sets clkdivider to 2, if 16, sets clkdivider to 1)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current dynamic range
// */
// int setBitDepth(int i = -1, int detPos = -1);
// /**
// * Set detector settings
// * (Eiger only stores in shared memory. A get will overwrite this. One must use set threshold energy)
// * @param isettings settings (-1 gets)
// * Options: (slsDetectorDefs::detectorSettings)
// * Eiger (STANDARD, HIGHGAIN, LOWGAIN, VERYHIGHGAIN, VERYLOWGAIN)
// * Jungfrau (DYNAMICGAIN, DYNAMICHG0, FIXGAIN1, FIXGAIN2, FORCESWITCHG1, FORCESWITCHG2)
// * Gotthard (DYNAMICGAIN, HIGHGAIN, LOWGAIN, MEDIUMGAIN, VERYHIGHGAIN)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current settings (can also return UNDEFINED, UNINITIALIZED)
// */
// int setSettings(int isettings = -1, int detPos = -1);
// /**
// * Get threshold energy (Eiger)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current threshold value
// */
// int getThresholdEnergy(int detPos = -1);
// /**
// * Set threshold energy (Eiger)
// * @param e_eV threshold in eV
// * @param tb 1 to load trimbits, 0 to exclude trimbits
// * @param isettings settings (-1 current settings)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current threshold value
// */
// int setThresholdEnergy(int e_ev, int tb = 1, int isettings = -1, int detPos = -1);
// /**
// * Set/get exposure time
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns exposure time in ns, or s if specified
// */
// double setExposureTime(double t = -1, bool inseconds = false, int detPos = -1);
// /**
// * Set/get exposure period
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns exposure period in ns, or s if specified
// */
// double setExposurePeriod(double t = -1, bool inseconds = false, int detPos = -1);
// /**
// * Set/get delay after trigger (Gotthard, Jungfrau(not for this release))
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns delay after trigger in ns, or s if specified
// */
// double setDelayAfterTrigger(double t = -1, bool inseconds = false, int detPos = -1);
// /**
// * (Advanced users)
// * Set/get sub frame exposure time (Eiger in 32 bit mode)
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns sub frame exposure time in ns, or s if specified
// */
// double setSubFrameExposureTime(double t = -1, bool inseconds = false, int detPos = -1);
// /**
// * (Advanced users)
// * Set/get sub frame dead time (Eiger in 32 bit mode)
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns sub frame dead time in ns, or s if specified
// */
// double setSubFrameExposureDeadTime(double t = -1, bool inseconds = false, int detPos = -1);
// /**
// * Set/get number of frames
// * @param t number of frames (-1 gets)
// * @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);
// /**
// * Set/get number of triggers
// * @param t number of triggers (-1 gets)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns number of triggers
// */
// int64_t setNumberOfTriggers(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)
// * @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);
// /**
// * Get measured period between previous two frames (EIGER)
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns sub frame dead time in ns, or s if specified
// */
// double getMeasuredPeriod(bool inseconds = false, int detPos = -1);
// /**
// * Get sub period between previous two sub frames in 32 bit mode (EIGER)
// * @param t time (-1 gets)
// * @param inseconds true if the value is in s, else ns
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns sub frame dead time in ns, or s if specified
// */
// double getMeasuredSubFramePeriod(bool inseconds = false, int detPos = -1);
// /**
// * Set/get timing mode
// * @param pol timing mode (-1 gets)
// * Options (slsDetectorDefs::timingMode)
// * (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
// * @returns current timing mode
// */
// int setTimingMode(int pol = -1, int detPos = -1);
// /**
// * Sets clock speed of the detector (Eiger, Jungfrau)
// * (Jungfrau also writes adcphase to recommended default)
// * (Eiger: 0(full speed not for 32 bit mode), 1 (half speed), 2(quarter speed))
// * (Jungfrau: 0(full speed not implemented), 1(half speed), 2(quarter speed))
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns clock speed
// */
// int setClockDivider(int value, int detPos = -1);
// /**
// * Set parallel readout mode (Eiger)
// * @param value readout mode (-1 gets)
// * false for NonParallel (Default), true for Parallel
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns 1 for parallel, 0 for non parallel, -1 if different
// */
// int setParallelMode(bool value, int detPos = -1);
// /**
// * Set overflow readout mode (Eiger in 32 bit)
// * @param value readout mode (-1 gets)
// * Options: true to Show overflow, false to not show overflow
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns 1 for overflow, 0 for no overflow, -1 if different
// */
// int setOverflowMode(bool value, int detPos = -1);
// /**
// * (Advanced user)
// * Sets all the trimbits to a particular value (Eiger)
// * @param val trimbit value
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns OK or FAIL
// */
// int setAllTrimbits(int val, int detPos = -1);
// /**
// * (Advanced user)
// * Set/get dacs value
// * @param val value (in V) (-1 gets)
// * @param index DAC index
// * Options: slsDetectorDefs::dacIndex
// * (Eiger: SVP up to IO_DELAY, THRESHOLD, HIGH_VOLTAGE)
// * (Jungfrau: 0-7)
// * (Gotthard: VREF_DS up to IB_TESTC, HIGH_VOLTAGE)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current DAC value
// */
// int setDAC(int val, int index , int detPos = -1);
// /**
// * Get adc value
// * @param index adc(DAC) index
// * Options: slsDetectorDefs::dacIndex
// * (Eiger: TEMPERATURE_FPGA, TEMPERATURE_FPGAEXT upto TEMPERATURE_FPGA3)
// * (Jungfrau: TEMPERATURE_FPGA)
// * (Gotthard: TEMPERATURE_ADC, TEMPERATURE_FPGA)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current adc value (temperature for eiger and jungfrau in millidegrees)
// */
// int getADC(int index, int detPos = -1);
// /**
// * Enable/disable or 10Gbe (Eiger)
// * @param i is -1 to get, 0 to disable and 1 to enable
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns if 10Gbe is enabled
// */
// int setTenGigabitEthernet(int i = -1, int detPos = -1);
// /**
// * Set storage cell that stores first acquisition of the series (Jungfrau)
// * @param value storage cell index. Value can be 0 to 15. (-1 gets)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns the storage cell that stores the first acquisition of the series
// */
// int setStoragecellStart(int pos=-1, int detPos = -1);
// /**
// * set high voltage (Gotthard, Jungfrau, Eiger)
// * @param i > 0 sets, 0 unsets, (-1 gets)
// * (Eiger: )
// * (Jungfrau: )
// * (Gotthard: )
// * @returns high voltage
// */
// int setHighVoltage(int i = -1, int detPos = -1);
// /**
// * Set 10GbE Flow Control (Eiger and Jungfrau)
// * @param enable 1 to set, 0 to unset, -1 gets
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns 10GbE flow Control
// */
// int setFlowControl10G(int enable = -1, int detPos = -1);
// /**
// * Set ROI (Gotthard)
// * At the moment only one set allowed per module
// * Only allowed to set one ROI per module
// * @param arg roi
// * @param detPos specific detector position
// */
// void setROI(slsDetectorDefs::ROI arg, int detPos = -1);
// /**
// * Get ROI (Gotthard)
// * Only allowed to set one ROI per module
// * @param detPos specific detector position
// * @returns roi
// */
// slsDetectorDefs::ROI getROI(int detPos = -1);
// /************************************************************************
// RECEIVER FUNCTIONS
// *********************************************************************/
// /**
// * (Advanced user, included in startMeasurement)
// * Receiver starts listening to packets
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void startReceiver(int detPos = -1);
// /**
// * (Advanced user, included in startMeasurement)
// * Stops the listening mode of receiver
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void stopReceiver(int detPos = -1);
// /**
// * Set/get receiver silent mode
// * @param i is -1 to get, 0 unsets silent mode, 1 sets silent mode
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns the receiver silent mode enable
// */
// int setReceiverSilentMode(int i = -1, int detPos = -1);
// /**
// * (Advanced user, included in startMeasurement)
// * Resets framescaught in receiver
// * Use this when using startAcquisition instead of acquire
// * @param detPos -1 for all detectors in list or specific detector position
// */
// void resetFramesCaughtInReceiver(int detPos = -1);
// /**
// * (Advanced user)
// * Set/get receiver fifo depth
// * @param i is -1 to get, any other value to set the fifo deph
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns the receiver fifo depth
// */
// int setReceiverFifoDepth(int i = -1, int detPos = -1);
// /**
// * Returns output file directory
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns output file directory
// */
// std::string getFilePath(int detPos = -1);
// /**
// * Sets up the file directory
// * @param detPos -1 for all detectors in list or specific detector position
// * @param s file directory
// * @returns file dir
// */
// std::string setFilePath(const std::string& s, int detPos = -1);
// /**
// * Returns file name prefix
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns file name prefix
// */
// std::string getFileName(int detPos = -1);
// /**
// * Sets up the file name prefix
// * @param detPos -1 for all detectors in list or specific detector position
// * @param s file name prefix
// * @returns file name prefix
// */
// std::string setFileName(const std::string& s, int detPos = -1);
// /**
// * Returns file index
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns file index
// */
// int getFileIndex(int detPos = -1);
// /**
// * Sets up the file index
// * @param i file index
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns file index
// */
// int setFileIndex(int i, int detPos = -1);
// /**
// * Sets/Gets receiver file write enable
// * @param enable 1 or 0 to set/reset file write enable
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns file write enable
// */
// int enableWriteToFile(int enable = -1, int detPos = -1);
// /**
// * Sets/Gets file overwrite enable
// * @param enable 1 or 0 to set/reset file overwrite enable
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns file overwrite enable
// */
// int enableOverwriteFile(int enable = -1, int detPos = -1);
// /**
// * (previously setReceiverMode)
// * Sets the receiver streaming frequency
// * @param freq nth frame streamed out, if 0, streamed out at a timer of 200 ms
// * frames in between are not streamed
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns receiver streaming frequency
// */
// int setReceiverStreamingFrequency(int freq = -1, int detPos = -1);
// /**
// * Sets the receiver streaming timer
// * If receiver streaming frequency is 0, then this timer between each
// * data stream is set. Default is 200 ms.
// * @param time_in_ms timer between frames
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns receiver streaming timer in ms
// */
// int setReceiverStreamingTimer(int time_in_ms=500, int detPos = -1);
// /**
// * Enable data streaming to client (data call back in client processing thread)
// * @param enable 0 to disable, 1 to enable, -1 to get the value
// * @returns data streaming to client enable
// */
// int enableDataStreamingToClient(int enable=-1);
// /**
// * Enable or disable streaming data from receiver (starts streaming threads)
// * @param enable 0 to disable 1 to enable -1 to only get the value
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns data streaming from receiver enable
// */
// int enableDataStreamingFromReceiver(int enable=-1, int detPos = -1);
// /**
// * (advanced users)
// * Set/Get receiver streaming out ZMQ port and restarts receiver sockets
// * @param i sets, -1 gets
// * If detPos is -1(multi module), port calculated (increments) for all the individual detectors using i
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns receiver streaming out ZMQ port (if multiple, of first receiver socket)
// */
// int setReceiverDataStreamingOutPort(int i = -1, int detPos = -1);
// /**
// * (advanced users)
// * Set/Get client streaming in ZMQ port and restarts client sockets
// * @param i sets, -1 gets
// * If detPos is -1(multi module), port calculated (increments) for all the individual detectors using i
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns receiver streaming out ZMQ port (if multiple, of first receiver socket)
// */
// int setClientDataStreamingInPort(int i = -1, int detPos = -1);
// /**
// * (advanced users)
// * Set/Get receiver streaming out ZMQ IP and restarts receiver sockets
// * @param i sets, empty string gets
// * By default, it is the IP of receiver hostname
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns receiver streaming out ZMQ IP
// */
// std::string setReceiverDataStreamingOutIP(const std::string& ip="", int detPos = -1);
// /**
// * (advanced users)
// * Set/Get client streaming in ZMQ IP and restarts client sockets
// * @param i sets, empty string gets
// * By default, it is the IP of receiver hostname
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns client streaming in ZMQ IP
// */
// std::string setClientDataStreamingInIP(const std::string& ip = "", int detPos = -1);
// /**
// * Enable gap pixels in receiver (Eiger for 8,16 and 32 bit mode)
// * 4 bit mode gap pixels only in data call back in client
// * @param val 1 sets, 0 unsets, -1 gets
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns gap pixel enable
// */
// int enableGapPixels(int val=-1, int detPos = -1);
// /**
// * Sets the frame discard policy in receiver
// * @param f frame discard policy (-1 gets)
// * Options: (slsDetectorDefs::frameDiscardPolicy)
// * (NO_DISCARD (default), DISCARD_EMPTY_FRAMES, DISCARD_PARTIAL_FRAMES (fastest))
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns current frame discard policy
// */
// int setReceiverFramesDiscardPolicy(int f = -1, int detPos = -1);
// /**
// * Sets the frame padding in receiver
// * @param f 0 does not partial frames, 1 pads partial frames (-1 gets)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns partial frames padding enable
// */
// int setReceiverPartialFramesPadding(int f = -1, int detPos = -1);
// /**
// * Sets the frames per file in receiver
// * @param f frames per file, 0 is infinite ie. every frame in same file (-1 gets)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns frames per file
// */
// int setReceiverFramesPerFile(int f = -1, int detPos = -1);
// /**
// * Sets the detector minimum/maximum energy threshold in processor (for Moench only)
// * @param index 0 for emin, antyhing else for emax
// * @param v value to set (-1 gets)
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns detector minimum/maximum energy threshold
// */
// int setDetectorMinMaxEnergyThreshold(const int index, int v, int detPos = -1);
// /**
// * Sets the frame mode in processor (Moench only)
// * @param value frame mode value (-1 gets)
// * Options (slsDetectorDefs::frameModeType)
// * PEDESTAL, NEW_PEDESTAL, FLATFIELD, NEW_FLATFIELD
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns frame mode (-1 for not found or error in computing json parameter value)
// */
// int setFrameMode(int value, int detPos = -1);
// /**
// * Sets the detector mode in processor (Moench only)
// * @param value detector mode value (-1 gets)
// * Options (slsDetectorDefs::detectorModeType)
// * COUNTING, INTERPOLATING, ANALOG
// * @param detPos -1 for all detectors in list or specific detector position
// * @returns detector mode (-1 for not found or error in computing json parameter value)
// */
// int setDetectorMode(int value, int detPos = -1);
// /************************************************************************
// CALLBACKS & COMMAND LINE PARSING
// *********************************************************************/
// /**
// * register callback for accessing detector final data in client,
// * also enables data streaming in client and receiver
// * @param userCallback function for plotting/analyzing the data.
// * Its arguments are
// * the data structure d and the frame number f,
// * s is for subframe number for eiger for 32 bit mode
// * @param pArg argument
// */
// void registerDataCallback(void( *userCallback)(detectorData* d, uint64_t f, uint32_t s, void*), void *pArg);
// /**
// * register callback for accessing acquisition final data in client,
// * @param func function to be called at the end of the acquisition.
// * gets detector status and progress index as arguments
// * @param pArg argument
// */
// void registerAcquisitionFinishedCallback(void( *func)(double,int, void*), void *pArg);
// /**
// @short [usage strongly discouraged] sets parameters trough command line interface http://www.psi.ch/detectors/UsersSupportEN/slsDetectorClientHowTo.pdf
// \param command string as it would be written on the command line
// \returns void
// */
// void putCommand(const std::string& command);
// /************************************************************************
// STATIC FUNCTIONS
// *********************************************************************/
/** @short returns std::string from run status index
\param s run status index
\returns std::string error, waiting, running, data, finished or unknown when wrong index
*/
/* static std::string runStatusType(int s){ \
switch (s) { \
case 0: return std::string("idle"); \
case 1: return std::string("error"); \
case 2: return std::string("waiting"); \
case 3: return std::string("finished"); \
case 4: return std::string("data"); \
case 5: return std::string("running"); \
case 6: return std::string("stopped"); \
default: return std::string("unknown"); \
}};
*/
/** @short returns detector settings std::string from index
\param s can be standard, fast, highgain, dynamicgain, lowgain, mediumgain, veryhighgain
\returns setting index (-1 unknown std::string)
*/
/*
static int getDetectorSettings(std::string s){ \
if (s=="standard") return 0; \
if (s=="fast") return 1; \
if (s=="highgain") return 2; \
if (s=="dynamicgain") return 3; \
if (s=="lowgain") return 4; \
if (s=="mediumgain") return 5; \
if (s=="veryhighgain") return 6; \
return -1; }; */
/** @short returns detector settings std::string from index
\param s settings index
\returns standard, fast, highgain, dynamicgain, lowgain, mediumgain, veryhighgain, undefined when wrong index
*/
/* static std::string getDetectorSettings(int s){\
switch(s) { \
case 0: return std::string("standard");\
case 1: return std::string("fast");\
case 2: return std::string("highgain");\
case 3: return std::string("dynamicgain"); \
case 4: return std::string("lowgain"); \
case 5: return std::string("mediumgain"); \
case 6: return std::string("veryhighgain"); \
default: return std::string("undefined"); \
}};
*/
/**
@short returns external communication mode std::string from index
\param f index for communication mode
\returns auto, trigger, ro_trigger, gating, triggered_gating, unknown when wrong mode
*/
/* static std::string getTimingMode(int f){ \
switch(f) { \
case 0: return std::string( "auto"); \
case 1: return std::string("trigger"); \
case 2: return std::string("ro_trigger"); \
case 3: return std::string("gating"); \
case 4: return std::string("triggered_gating"); \
case 5: return std::string("burst_trigger"); \
default: return std::string( "unknown"); \
} };
*/
/**
@short returns external communication mode std::string from index
\param s index for communication mode
\returns auto, trigger, ro_trigger, gating, triggered_gating, burst_trigger, unknown when wrong mode
*/
/* static int getTimingMode(std::string s){ \
if (s== "auto") return 0; \
if (s== "trigger") return 1; \
if (s== "ro_trigger") return 2; \
if (s== "gating") return 3; \
if (s== "triggered_gating") return 4; \
if (s== "burst_trigger") return 5; \
return -1; };
*/
private:
std::unique_ptr<sls::Detector> detector;
};