mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-09 19:40:42 +02:00
client:updated users class and release.txt
This commit is contained in:
parent
7945d15beb
commit
63c130a380
147
RELEASE.txt
147
RELEASE.txt
@ -59,7 +59,7 @@ CONTENTS
|
|||||||
- Other New Features
|
- Other New Features
|
||||||
- Resolved Issues
|
- Resolved Issues
|
||||||
- Known Issues
|
- Known Issues
|
||||||
- Future Plans
|
- Neat Release Plans
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -159,9 +159,7 @@ Changes in User Interface
|
|||||||
online flag in shm has not been set.
|
online flag in shm has not been set.
|
||||||
|
|
||||||
|
|
||||||
4. With the new shared memory implementation, commands "type" and "replace"
|
4. Commands "type", "id" and "replace" are removed.
|
||||||
are removed and "add" now only appends detector to the end of the multi
|
|
||||||
detector list.
|
|
||||||
|
|
||||||
|
|
||||||
Receiver
|
Receiver
|
||||||
@ -172,6 +170,7 @@ Changes in User Interface
|
|||||||
sls_receiver_header structure added to sls_receiver_defs.h for image headers
|
sls_receiver_header structure added to sls_receiver_defs.h for image headers
|
||||||
in file writing.
|
in file writing.
|
||||||
|
|
||||||
|
#define MAX_NUM_PACKETS 512
|
||||||
typedef std::bitset<MAX_NUM_PACKETS> sls_bitset;
|
typedef std::bitset<MAX_NUM_PACKETS> sls_bitset;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
sls_detector_header detHeader; /**< is the detector header */
|
sls_detector_header detHeader; /**< is the detector header */
|
||||||
@ -216,68 +215,68 @@ New/Modified Commands
|
|||||||
Client
|
Client
|
||||||
------
|
------
|
||||||
|
|
||||||
- add (modified):
|
1. add (modified):
|
||||||
appends detector to end of multi detector list.
|
appends detector to end of multi detector list.
|
||||||
|
|
||||||
- replace:
|
2. replace:
|
||||||
sets hostname/ip address for a single detector.
|
sets hostname/ip address for a single detector.
|
||||||
|
|
||||||
- user:
|
3. user:
|
||||||
get user details from shared memory.
|
get user details from shared memory.
|
||||||
|
|
||||||
- checkdetversion:
|
4. checkdetversion:
|
||||||
checks client version compatibility with detector server.
|
checks client version compatibility with detector server.
|
||||||
|
|
||||||
- checkrecversion:
|
5. checkrecversion:
|
||||||
checks client version compatibility with receiver server.
|
checks client version compatibility with receiver server.
|
||||||
|
|
||||||
|
|
||||||
Receiver
|
Receiver
|
||||||
--------
|
--------
|
||||||
|
|
||||||
- rx_zmqip:
|
1. rx_zmqip:
|
||||||
sets/gets the zmq (TCP) ip of the receiver from where data is streamed
|
sets/gets the zmq (TCP) ip of the receiver from where data is streamed
|
||||||
out from. (Eg. to the gui or intermediate process). By default, it is
|
out from. (Eg. to the gui or intermediate process). By default, it is
|
||||||
the same as the zmqip.
|
the same as the zmqip.
|
||||||
|
|
||||||
- zmqip:
|
2. zmqip:
|
||||||
sets/gets the zmq (TCP) ip, where client listens to, to reconstuct images.
|
sets/gets the zmq (TCP) ip, where client listens to, to reconstuct images.
|
||||||
(Eg. from receiver or intermediate process). By default, it is the same
|
(Eg. from receiver or intermediate process). By default, it is the same
|
||||||
as rx_zmqip.
|
as rx_zmqip.
|
||||||
|
|
||||||
- rx_jsonaddheader:
|
3. rx_jsonaddheader:
|
||||||
sets/gets additional json header to be streamed out with the zmq from
|
sets/gets additional json header to be streamed out with the zmq from
|
||||||
receiver. Default is empty. Eg. p rx_jsonaddheader \"what\":\"nothing\"
|
receiver. Default is empty. Eg. p rx_jsonaddheader \"what\":\"nothing\"
|
||||||
|
|
||||||
- r_discardpolicy:
|
4. r_discardpolicy:
|
||||||
sets/gets the frame discard policy in the receiver.
|
sets/gets the frame discard policy in the receiver.
|
||||||
0 - no discard (default),
|
0 - no discard (default),
|
||||||
1 - discard only empty frames,
|
1 - discard only empty frames,
|
||||||
2 - discard any partial frame(fastest)
|
2 - discard any partial frame(fastest)
|
||||||
|
|
||||||
- r_padding:
|
5. r_padding:
|
||||||
sets/gets the frame padding in the receiver.
|
sets/gets the frame padding in the receiver.
|
||||||
0 does not pad partial frames(fastest),
|
0 does not pad partial frames(fastest),
|
||||||
1 (default) pads partial frames.
|
1 (default) pads partial frames.
|
||||||
One can look at bitmask in the sls_receiver_header to process the unpadded
|
One can look at bitmask in the sls_receiver_header to process the unpadded
|
||||||
partial frames later.
|
partial frames later.
|
||||||
|
|
||||||
- activate (modified):
|
6. activate (modified):
|
||||||
Extra option added to pad or unpad images in receivers when deactivated.
|
Extra option added to pad or unpad images in receivers when deactivated.
|
||||||
activate i [padding option], where i is activate/deactivate and padding
|
activate i [padding option], where i is activate/deactivate and padding
|
||||||
option is "padding" (default) or "nopadding".
|
option is "padding" (default) or "nopadding".
|
||||||
|
|
||||||
- rx_udpsocksize:
|
7. rx_udpsocksize:
|
||||||
sets/gets the UDP socket buffer size. Already attempts to set by default
|
sets/gets the UDP socket buffer size. Already attempts to set by default
|
||||||
to 100mb, 2gb for Jungfrau. Does not remember custom values in client
|
to 100mb, 2gb for Jungfrau. Does not remember custom values in client
|
||||||
shared memory, so must be initialized each time after setting receiver
|
shared memory, so must be initialized each time after setting receiver
|
||||||
hostname in config file.
|
hostname in config file.
|
||||||
|
|
||||||
- rx_realudpsocksize:
|
8. rx_realudpsocksize:
|
||||||
gets the actual UDP socket buffer size. Usually double the set udp socket
|
gets the actual UDP socket buffer size. Usually double the set udp socket
|
||||||
buffer size due to kernel bookkeeping.
|
buffer size due to kernel bookkeeping.
|
||||||
|
|
||||||
- r_framesperfile:
|
9. r_framesperfile:
|
||||||
sets/gets the frames per file in receiver. 0 means infinite or all frames
|
sets/gets the frames per file in receiver. 0 means infinite or all frames
|
||||||
in a single file. Default of Eiger changed from 2k to 10k.
|
in a single file. Default of Eiger changed from 2k to 10k.
|
||||||
|
|
||||||
@ -285,45 +284,45 @@ New/Modified Commands
|
|||||||
Eiger Specific
|
Eiger Specific
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
- status trigger:
|
1. status trigger:
|
||||||
To trigger internally via software, one can use "status trigger".
|
To trigger internally via software, one can use "status trigger".
|
||||||
|
|
||||||
- subdeadtime:
|
2. subdeadtime:
|
||||||
sets/gets sub frame dead time in s in 32 bit mode. Subperiod is set in
|
sets/gets sub frame dead time in s in 32 bit mode. Subperiod is set in
|
||||||
the detector by subexptime + subdeadtime. This value is normally a
|
the detector by subexptime + subdeadtime. This value is normally a
|
||||||
constant set by an expert catered to individual detector modules in the
|
constant set by an expert catered to individual detector modules in the
|
||||||
config file. Receiver files writes master file metadata subperiod
|
config file. Receiver files writes master file metadata subperiod
|
||||||
instead of subdeadtime.
|
instead of subdeadtime.
|
||||||
|
|
||||||
- gappixels:
|
3. gappixels:
|
||||||
enables/disables gap pixels in system (detector & receiver). 1 sets,
|
enables/disables gap pixels in system (detector & receiver). 1 sets,
|
||||||
0 unsets. In Receiver, 4 bit gap pixels mode is not implemented, but is
|
0 unsets. In Receiver, 4 bit gap pixels mode is not implemented, but is
|
||||||
implemented in client data call back. Gap pixels are at module level
|
implemented in client data call back. Gap pixels are at module level
|
||||||
and not at multi module level.
|
and not at multi module level.
|
||||||
|
|
||||||
- measuredperiod:
|
4. measuredperiod:
|
||||||
gets the measured frame period (time between last frame and the previous
|
gets the measured frame period (time between last frame and the previous
|
||||||
one) in s. Makes sense only for acquisitions of more than 1 frame.
|
one) in s. Makes sense only for acquisitions of more than 1 frame.
|
||||||
|
|
||||||
- measuredsubperiod:
|
5. measuredsubperiod:
|
||||||
gets the measured subframe period (time between last subframe and the
|
gets the measured subframe period (time between last subframe and the
|
||||||
previous one) in s in 32 bit mode.
|
previous one) in s in 32 bit mode.
|
||||||
|
|
||||||
- flags(modified):
|
6. flags(modified):
|
||||||
extra flags "overflow" (default) and "nooverflow" for sub images in 32
|
extra flags "overflow" (default) and "nooverflow" for sub images in 32
|
||||||
bit mode. If set to overflow, it will set MSB of pixel data high if
|
bit mode. If set to overflow, it will set MSB of pixel data high if
|
||||||
there was an overflow in any of the sub images 32 bit mode.
|
there was any saturation in any of the sub images 32 bit mode.
|
||||||
|
|
||||||
|
|
||||||
Jungfrau Specific
|
Jungfrau Specific
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
- storagecells:
|
1. storagecells:
|
||||||
sets/gets number of additional storage cells per acquisition. For very
|
sets/gets number of additional storage cells per acquisition. For very
|
||||||
advanced users only. Range: 0-15. Default: 0.
|
advanced users only. Range: 0-15. Default: 0.
|
||||||
The #images = #frames * #cycles * (#storagecells +1).
|
The #images = #frames * #cycles * (#storagecells +1).
|
||||||
|
|
||||||
- storage_start:
|
2. storage_start:
|
||||||
sets/gets the storage cell that stores the first acquisition of the series.
|
sets/gets the storage cell that stores the first acquisition of the series.
|
||||||
For very advanced users only. Range: 0-15. Default: 15(0xf).
|
For very advanced users only. Range: 0-15. Default: 15(0xf).
|
||||||
|
|
||||||
@ -344,8 +343,30 @@ Other New Features
|
|||||||
xcoord and ycoord are given to detector servers (Eiger and Jungfrau)
|
xcoord and ycoord are given to detector servers (Eiger and Jungfrau)
|
||||||
to encode into the udp header.
|
to encode into the udp header.
|
||||||
|
|
||||||
3. Users API updated to reflect new features.
|
3. (Eiger) Setting threshold energy changes such as CAL dac is irrelevant
|
||||||
|
when interpolating between two energies and VRS dac is interpolated, not copied.
|
||||||
|
|
||||||
|
4. Users API updated with the following functions:
|
||||||
|
- setReceiverFramesDiscardPolicy
|
||||||
|
- setReceiverPartialFramesPadding
|
||||||
|
- setReceiverFramesPerFile
|
||||||
|
- sendSoftwareTrigger
|
||||||
|
- setSubFrameExposureDeadTime
|
||||||
|
- setSubFrameExposureTime
|
||||||
|
- enableGapPixels
|
||||||
|
- getMeasuredPeriod
|
||||||
|
- getMeasuredSubFramePeriod
|
||||||
|
- setOverflowMode
|
||||||
|
- setNumberOfStorageCells
|
||||||
|
- setStoragecellStart
|
||||||
|
- setThresholdEnergy (overloaded)
|
||||||
|
- resetFramesCaughtInReceiver
|
||||||
|
- setReceiverFifoDepth
|
||||||
|
- setFlowControl10G
|
||||||
|
- setTenGigabitEthernet
|
||||||
|
- getNMods
|
||||||
|
- setReceiverDataStreamingOutIP
|
||||||
|
- setClientDataStreamingInIP
|
||||||
|
|
||||||
SlsReceiver
|
SlsReceiver
|
||||||
-----------
|
-----------
|
||||||
@ -363,24 +384,24 @@ Other New Features
|
|||||||
|
|
||||||
2. Option to maintain aspect ratio
|
2. Option to maintain aspect ratio
|
||||||
|
|
||||||
|
3. Start and Stop separated to prevent multiple click syndrome.
|
||||||
|
|
||||||
|
|
||||||
|
Detector Server
|
||||||
|
---------------
|
||||||
|
|
||||||
|
1. (Jungfrau) To use programfpga command, one must start server with -update
|
||||||
|
mode and then restart server without -update mode.
|
||||||
|
|
||||||
|
2. (Jungfrau) ASIC Timer configured at server start up and changed a few
|
||||||
|
startup values for firmware v0.7 such as adc phase, ADC_PORT_INVERT_VAL
|
||||||
|
and ADC offset half speed value.
|
||||||
|
|
||||||
|
3. (Jungfrau) Minimum exposure time of 50 us was implemented.
|
||||||
|
|
||||||
|
4. (Eiger and Jungfrau) They can be configured to have x and y coord values
|
||||||
|
of the detector in their udp header.
|
||||||
|
|
||||||
added few more functions to slssDeectorUsers API
|
|
||||||
setThresholdEnergy with the more options such as trimbits and settings
|
|
||||||
resetFramesCaughtInReceiver
|
|
||||||
setReceiverFifoDepth
|
|
||||||
setFlowControl10G
|
|
||||||
setTenGigabitEthernet
|
|
||||||
getNMods
|
|
||||||
setSubFrameExposureTime
|
|
||||||
setSubFrameExposureDeadTime
|
|
||||||
setReceiverDataStreamingOutIP
|
|
||||||
setClientDataStreamingInIP
|
|
||||||
enableGapPixels
|
|
||||||
setOverflowMode
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -389,7 +410,19 @@ Resolved Issues
|
|||||||
|
|
||||||
Client
|
Client
|
||||||
------
|
------
|
||||||
1. If trimen gives different list from different detectors, it returns a -1.
|
memory leak for multi threading
|
||||||
|
|
||||||
|
1. Compiler flag -std=c++98 enforced. Debug flag removed.
|
||||||
|
|
||||||
|
2. If trimen gives different list from different detectors, it returns a -1.
|
||||||
|
|
||||||
|
3. Version format for each submodule of the package changed to just date YYMMDD.
|
||||||
|
Users class fixed to give correct version, instead of -1.
|
||||||
|
|
||||||
|
4. Getting settings in users class gave -1. Fixed now.
|
||||||
|
|
||||||
|
5. (Jungfrau) Programming FPGA now creates the rawbin file from pof in tmp
|
||||||
|
rather than source file location (for permission issues).
|
||||||
|
|
||||||
Receiver
|
Receiver
|
||||||
--------
|
--------
|
||||||
@ -402,6 +435,22 @@ Resolved Issues
|
|||||||
3. Global optind variable initialized to instantiate multiple receivers
|
3. Global optind variable initialized to instantiate multiple receivers
|
||||||
in same process.
|
in same process.
|
||||||
|
|
||||||
|
4. Socket buffer size attempts to set for each acquiistion and provide
|
||||||
|
warning if no capabilities. Warnings can be removed using instruction with
|
||||||
|
error provided. Default Jungfrau UDP socket buffer size if 2 GB, default is
|
||||||
|
100 MB.
|
||||||
|
|
||||||
|
5. Refactored code a bit for performance and robustness, including removing
|
||||||
|
many static members, blocking push in buffer between listener and dataprocessor
|
||||||
|
|
||||||
|
|
||||||
|
Detector Server
|
||||||
|
---------------
|
||||||
|
|
||||||
|
1. (Jungfrau) Stop server also mapped during a reset. Reading power status
|
||||||
|
instead of user input register for power.
|
||||||
|
|
||||||
|
2. (Eiger) Bug fix for saving trimbits to file (Advanced users).
|
||||||
|
|
||||||
|
|
||||||
Known Issues
|
Known Issues
|
||||||
@ -409,12 +458,22 @@ Known Issues
|
|||||||
|
|
||||||
Receiver
|
Receiver
|
||||||
--------
|
--------
|
||||||
|
|
||||||
1. HDF5 compression and filters are not implemented yet.
|
1. HDF5 compression and filters are not implemented yet.
|
||||||
|
|
||||||
|
|
||||||
|
Detector Server
|
||||||
|
---------------
|
||||||
|
|
||||||
Future Plans
|
1. (Eiger) Registers mapped differently between firmware v20 and v22.
|
||||||
============
|
So, please ensure correct on-board server before switching between
|
||||||
|
firmware versions. Else one cannot ping it anymore. Will need to flash firmware
|
||||||
|
again to recover.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Neat Release Plans
|
||||||
|
==================
|
||||||
|
|
||||||
Client
|
Client
|
||||||
------
|
------
|
||||||
|
2
cmk.sh
2
cmk.sh
@ -145,7 +145,7 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CMAKE_POST+=" -DCMAKE_BUILD_TYPE=Debug "
|
#CMAKE_POST+=" -DCMAKE_BUILD_TYPE=Debug "
|
||||||
|
|
||||||
#hdf5 rebuild
|
#hdf5 rebuild
|
||||||
if [ $HDF5 -eq 1 ]; then
|
if [ $HDF5 -eq 1 ]; then
|
||||||
|
@ -54,7 +54,12 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
|
|
||||||
/** - slsDetectorUsers Object is instantiated with appropriate ID */
|
/** - slsDetectorUsers Object is instantiated with appropriate ID */
|
||||||
slsDetectorUsers *pDetector = new slsDetectorUsers (id);
|
int ret = slsReceiverDefs::FAIL;
|
||||||
|
slsDetectorUsers *pDetector = new slsDetectorUsers (ret, id);
|
||||||
|
if (ret == slsReceiverDefs::FAIL) {
|
||||||
|
std::cout << "Error: Could not instantiate slsDetectorUsers" << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** - if specified, load configuration file (necessary at least the first time it is called to properly configure advanced settings in the shared memory) */
|
/** - if specified, load configuration file (necessary at least the first time it is called to properly configure advanced settings in the shared memory) */
|
||||||
|
@ -2680,16 +2680,28 @@ int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int imod) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t multiSlsDetector::getTimeLeft(timerIndex index) {
|
int64_t multiSlsDetector::getTimeLeft(timerIndex index, int imod) {
|
||||||
int64_t ret = -100;
|
int64_t ret = -100;
|
||||||
|
|
||||||
|
{ // single
|
||||||
|
int id = -1, im = -1;
|
||||||
|
if (decodeNMod(imod, id, im) >= 0) {
|
||||||
|
if (id < 0 || id >= (int)detectors.size())
|
||||||
|
return -1;
|
||||||
|
ret = detectors[id]->getTimeLeft(index, im);
|
||||||
|
if (detectors[id]->getErrorMask())
|
||||||
|
setErrorMask(getErrorMask() | (1 << id));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (thisMultiDetector->masterPosition >= 0)
|
if (thisMultiDetector->masterPosition >= 0)
|
||||||
if (detectors[thisMultiDetector->masterPosition]) {
|
if (detectors[thisMultiDetector->masterPosition]) {
|
||||||
ret = detectors[thisMultiDetector->masterPosition]->getTimeLeft(index);
|
ret = detectors[thisMultiDetector->masterPosition]->getTimeLeft(index, imod);
|
||||||
if (detectors[thisMultiDetector->masterPosition]->getErrorMask())
|
if (detectors[thisMultiDetector->masterPosition]->getErrorMask())
|
||||||
setErrorMask(getErrorMask() | (1 << thisMultiDetector->masterPosition));
|
setErrorMask(getErrorMask() | (1 << thisMultiDetector->masterPosition));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return callDetectorMember(&slsDetector::getTimeLeft, index);
|
return callDetectorMember(&slsDetector::getTimeLeft, index, imod);
|
||||||
}
|
}
|
||||||
|
|
||||||
int multiSlsDetector::setSpeed(speedVariable index, int value) {
|
int multiSlsDetector::setSpeed(speedVariable index, int value) {
|
||||||
|
@ -1048,9 +1048,10 @@ public:
|
|||||||
* Set/get timer value left in acquisition (not all implemented for all detectors)
|
* Set/get timer value left in acquisition (not all implemented for all detectors)
|
||||||
* @param index timer index
|
* @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, gates, probes)
|
||||||
|
* @param imod module number
|
||||||
* @returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
* @returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
||||||
*/
|
*/
|
||||||
int64_t getTimeLeft(timerIndex index);
|
int64_t getTimeLeft(timerIndex index, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set speed
|
* Set speed
|
||||||
|
@ -4355,7 +4355,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t, int imod) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int64_t slsDetector::getTimeLeft(timerIndex index) {
|
int64_t slsDetector::getTimeLeft(timerIndex index, int imod) {
|
||||||
|
|
||||||
|
|
||||||
int fnum=F_GET_TIME_LEFT;
|
int fnum=F_GET_TIME_LEFT;
|
||||||
|
@ -1164,9 +1164,10 @@ public:
|
|||||||
* Set/get timer value left in acquisition (not all implemented for all detectors)
|
* Set/get timer value left in acquisition (not all implemented for all detectors)
|
||||||
* @param index timer index
|
* @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, gates, probes)
|
||||||
|
* @param imod module number
|
||||||
* @returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
* @returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
||||||
*/
|
*/
|
||||||
int64_t getTimeLeft(timerIndex index);
|
int64_t getTimeLeft(timerIndex index, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set speed
|
* Set speed
|
||||||
|
@ -894,17 +894,17 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0;
|
|||||||
\returns TEMPERATURE_FPGA, TEMPERATURE_FPGAEXT, TEMPERATURE_10GE, TEMPERATURE_DCDC, TEMPERATURE_SODL,
|
\returns TEMPERATURE_FPGA, TEMPERATURE_FPGAEXT, TEMPERATURE_10GE, TEMPERATURE_DCDC, TEMPERATURE_SODL,
|
||||||
TEMPERATURE_SODR, TEMPERATURE_FPGA2, TEMPERATURE_FPGA3, -1 when unknown mode
|
TEMPERATURE_SODR, TEMPERATURE_FPGA2, TEMPERATURE_FPGA3, -1 when unknown mode
|
||||||
*/
|
*/
|
||||||
static int getADCIndex(std::string s){
|
static int getADCIndex(std::string s){ \
|
||||||
if (s=="temp_fpga") return TEMPERATURE_FPGA;
|
if (s=="temp_fpga") return TEMPERATURE_FPGA; \
|
||||||
if (s=="temp_fpgaext") return TEMPERATURE_FPGAEXT;
|
if (s=="temp_fpgaext") return TEMPERATURE_FPGAEXT; \
|
||||||
if (s=="temp_10ge") return TEMPERATURE_10GE;
|
if (s=="temp_10ge") return TEMPERATURE_10GE; \
|
||||||
if (s=="temp_dcdc") return TEMPERATURE_DCDC;
|
if (s=="temp_dcdc") return TEMPERATURE_DCDC; \
|
||||||
if (s=="temp_sodl") return TEMPERATURE_SODL;
|
if (s=="temp_sodl") return TEMPERATURE_SODL; \
|
||||||
if (s=="temp_sodr") return TEMPERATURE_SODR;
|
if (s=="temp_sodr") return TEMPERATURE_SODR; \
|
||||||
if (s=="temp_fpgafl") return TEMPERATURE_FPGA2;
|
if (s=="temp_fpgafl") return TEMPERATURE_FPGA2; \
|
||||||
if (s=="temp_fpgafr") return TEMPERATURE_FPGA3;
|
if (s=="temp_fpgafr") return TEMPERATURE_FPGA3; \
|
||||||
return -1;
|
return -1; \
|
||||||
};
|
}; \
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -912,19 +912,43 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0;
|
|||||||
\param s can be vcmp_ll, vcmp_lr, vcmp_rl, vcmp_rr, vthreshold, vrf, vrs, vtr, vcall, vcp
|
\param s can be vcmp_ll, vcmp_lr, vcmp_rl, vcmp_rr, vthreshold, vrf, vrs, vtr, vcall, vcp
|
||||||
\returns E_Vcmp_ll, E_Vcmp_lr, E_Vcmp_rl, E_Vcmp_rr, THRESHOLD, E_Vrf, E_Vrs, E_Vtr, E_cal, E_Vcp , -1 when unknown mode
|
\returns E_Vcmp_ll, E_Vcmp_lr, E_Vcmp_rl, E_Vcmp_rr, THRESHOLD, E_Vrf, E_Vrs, E_Vtr, E_cal, E_Vcp , -1 when unknown mode
|
||||||
*/
|
*/
|
||||||
static int getDACIndex(std::string s){
|
static int getDACIndex(std::string s){ \
|
||||||
if (s=="vcmp_ll") return E_Vcmp_ll;
|
if (s=="vcmp_ll") return E_Vcmp_ll; \
|
||||||
if (s=="vcmp_lr") return E_Vcmp_lr;
|
if (s=="vcmp_lr") return E_Vcmp_lr; \
|
||||||
if (s=="vcmp_rl") return E_Vcmp_rl;
|
if (s=="vcmp_rl") return E_Vcmp_rl; \
|
||||||
if (s=="vcmp_rr") return E_Vcmp_rr;
|
if (s=="vcmp_rr") return E_Vcmp_rr; \
|
||||||
if (s=="vthreshold") return THRESHOLD;
|
if (s=="vthreshold") return THRESHOLD; \
|
||||||
if (s=="vrf") return E_Vrf;
|
if (s=="vrf") return E_Vrf; \
|
||||||
if (s=="vrs") return E_Vrs;
|
if (s=="vrs") return E_Vrs; \
|
||||||
if (s=="vtr") return E_Vtr;
|
if (s=="vtr") return E_Vtr; \
|
||||||
if (s=="vcall") return E_cal;
|
if (s=="vcall") return E_cal; \
|
||||||
if (s=="vcp") return E_Vcp;
|
if (s=="vcp") return E_Vcp; \
|
||||||
return -1;
|
return -1; \
|
||||||
};
|
}; \
|
||||||
|
|
||||||
|
/**
|
||||||
|
@short returns receiver frame discard policy from std::string
|
||||||
|
\param s can be nodiscard, discardempty, discardpartial
|
||||||
|
\returns NO_DISCARD, DISCARD_EMPTY_FRAMES, DISCARD_PARTIAL_FRAMES, GET_FRAME_DISCARD_POLICY when unknown mode
|
||||||
|
*/
|
||||||
|
static frameDiscardPolicy getReceiverFrameDiscardPolicy(std::string s){ \
|
||||||
|
if (s=="nodiscard") return NO_DISCARD; \
|
||||||
|
if (s=="discardempty") return DISCARD_EMPTY_FRAMES; \
|
||||||
|
if (s=="discardpartial") return DISCARD_PARTIAL_FRAMES; \
|
||||||
|
return GET_FRAME_DISCARD_POLICY; \
|
||||||
|
}; \
|
||||||
|
|
||||||
|
/** returns std::string from frame discard policy
|
||||||
|
\param f can be NO_DISCARD, DISCARD_EMPTY_FRAMES, DISCARD_PARTIAL_FRAMES
|
||||||
|
\returns std::string nodiscard, discardempty, discardpartial, unknown
|
||||||
|
*/
|
||||||
|
static std::string getReceiverFrameDiscardPolicy(frameDiscardPolicy f){ \
|
||||||
|
switch (f) { \
|
||||||
|
case NO_DISCARD: return std::string("nodiscard"); \
|
||||||
|
case DISCARD_EMPTY_FRAMES: return std::string("discardempty"); \
|
||||||
|
case DISCARD_PARTIAL_FRAMES: return std::string("discardpartial"); \
|
||||||
|
default: return std::string("unknown"); \
|
||||||
|
}}; \
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -2249,7 +2249,7 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
|||||||
++i;
|
++i;
|
||||||
|
|
||||||
/*! \page receiver
|
/*! \page receiver
|
||||||
- <b>r_discardpolicy</b> sets/gets the frame discard policy in the receiver. 0 - no discard (default), 1 - discard only empty frames, 2 - discard any partial frame(fastest). \c Returns \c (int)
|
- <b>r_discardpolicy</b> sets/gets the frame discard policy in the receiver. nodiscard (default) - discards nothing, discardempty - discard only empty frames, discardpartial(fastest) - discards all partial frames. \c Returns \c (int)
|
||||||
*/
|
*/
|
||||||
descrToFuncMap[i].m_pFuncName="r_discardpolicy"; //OK
|
descrToFuncMap[i].m_pFuncName="r_discardpolicy"; //OK
|
||||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdReceiver;
|
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdReceiver;
|
||||||
@ -6383,14 +6383,12 @@ string slsDetectorCommand::cmdReceiver(int narg, char *args[], int action) {
|
|||||||
|
|
||||||
else if(cmd=="r_discardpolicy") {
|
else if(cmd=="r_discardpolicy") {
|
||||||
if (action==PUT_ACTION){
|
if (action==PUT_ACTION){
|
||||||
if (sscanf(args[1],"%d",&ival) && (ival >= 0) && (ival < NUM_DISCARD_POLICIES)) {
|
frameDiscardPolicy f = myDet->getReceiverFrameDiscardPolicy(string(args[1]));
|
||||||
myDet->setReceiverFramesDiscardPolicy((frameDiscardPolicy)ival);
|
if (f == GET_FRAME_DISCARD_POLICY)
|
||||||
} else return string("could not scan frames discard policy\n");
|
return string("could not scan frame discard policy. Options: nodiscard, discardempty, discardpartial\n");
|
||||||
|
myDet->setReceiverFramesDiscardPolicy(f);
|
||||||
}
|
}
|
||||||
char answer[100];
|
return myDet->getReceiverFrameDiscardPolicy(myDet->setReceiverFramesDiscardPolicy());
|
||||||
memset(answer, 0, 100);
|
|
||||||
sprintf(answer,"%d",myDet->setReceiverFramesDiscardPolicy());
|
|
||||||
return string(answer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(cmd=="r_padding") {
|
else if(cmd=="r_padding") {
|
||||||
@ -6424,7 +6422,7 @@ string slsDetectorCommand::helpReceiver(int narg, char *args[], int action) {
|
|||||||
os << "rx_fifodepth [val]\t sets receiver fifo depth to val" << std::endl;
|
os << "rx_fifodepth [val]\t sets receiver fifo depth to val" << std::endl;
|
||||||
os << "r_silent [i]\t sets receiver in silent mode, ie. it will not print anything during real time acquisition. 1 sets, 0 unsets." << std::endl;
|
os << "r_silent [i]\t sets receiver in silent mode, ie. it will not print anything during real time acquisition. 1 sets, 0 unsets." << std::endl;
|
||||||
os << "r_framesperfile s\t sets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
os << "r_framesperfile s\t sets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
||||||
os << "r_discardpolicy s\t sets the frame discard policy in the receiver. 0 - no discard (default), 1 - discard only empty frames, 2 - discard any partial frame(fastest)." << std::endl;
|
os << "r_discardpolicy s\t sets the frame discard policy in the receiver. nodiscard (default) - discards nothing, discardempty - discard only empty frames, discardpartial(fastest) - discards all partial frames." << std::endl;
|
||||||
os << "r_padding s\t enables/disables partial frames to be padded in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames." << std::endl;
|
os << "r_padding s\t enables/disables partial frames to be padded in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames." << std::endl;
|
||||||
}
|
}
|
||||||
if (action==GET_ACTION || action==HELP_ACTION){
|
if (action==GET_ACTION || action==HELP_ACTION){
|
||||||
@ -6436,7 +6434,7 @@ string slsDetectorCommand::helpReceiver(int narg, char *args[], int action) {
|
|||||||
os << "rx_fifodepth \t returns receiver fifo depth" << std::endl;
|
os << "rx_fifodepth \t returns receiver fifo depth" << std::endl;
|
||||||
os << "r_silent \t returns receiver silent mode enable. 1 is silent, 0 not silent." << std::endl;
|
os << "r_silent \t returns receiver silent mode enable. 1 is silent, 0 not silent." << std::endl;
|
||||||
os << "r_framesperfile \t gets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
os << "r_framesperfile \t gets the number of frames per file in receiver. 0 means infinite or all frames in a single file." << std::endl;
|
||||||
os << "r_discardpolicy \t gets the frame discard policy in the receiver. 0 - no discard (default), 1 - discard only empty frames, 2 - discard any partial frame(fastest)." << std::endl;
|
os << "r_discardpolicy \t gets the frame discard policy in the receiver. nodiscard (default) - discards nothing, discardempty - discard only empty frames, discardpartial(fastest) - discards all partial frames." << std::endl;
|
||||||
os << "r_padding \t gets partial frames padding enable in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames." << std::endl;
|
os << "r_padding \t gets partial frames padding enable in the receiver. 0 does not pad partial frames(fastest), 1 (default) pads partial frames." << std::endl;
|
||||||
}
|
}
|
||||||
return os.str();
|
return os.str();
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
slsDetectorUsers::slsDetectorUsers(int id, int& ret) : myDetector(0), myCmd(0){
|
slsDetectorUsers::slsDetectorUsers(int& ret, int id) : myDetector(0), myCmd(0){
|
||||||
try {
|
try {
|
||||||
myDetector=new multiSlsDetector(id);
|
myDetector=new multiSlsDetector(id);
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
@ -16,22 +16,18 @@ slsDetectorUsers::slsDetectorUsers(int id, int& ret) : myDetector(0), myCmd(0){
|
|||||||
myCmd=new multiSlsDetectorCommand(myDetector);
|
myCmd=new multiSlsDetectorCommand(myDetector);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
slsDetectorUsers::~slsDetectorUsers() {
|
slsDetectorUsers::~slsDetectorUsers() {
|
||||||
if (myDetector)
|
if (myDetector)
|
||||||
delete myDetector;
|
delete myDetector;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
string slsDetectorUsers::getDetectorDeveloper(){
|
string slsDetectorUsers::getDetectorDeveloper(){
|
||||||
return myDetector->getDetectorDeveloper();
|
return myDetector->getDetectorDeveloper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int slsDetectorUsers::setOnline(int const online){
|
int slsDetectorUsers::setOnline(int const online){
|
||||||
return myDetector->setOnline(online);
|
return myDetector->setOnline(online);
|
||||||
}
|
}
|
||||||
@ -48,7 +44,6 @@ int slsDetectorUsers::stopMeasurement(){
|
|||||||
return myDetector->stopAcquisition();
|
return myDetector->stopAcquisition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int slsDetectorUsers::getDetectorStatus(){
|
int slsDetectorUsers::getDetectorStatus(){
|
||||||
return (int)myDetector->getRunStatus();
|
return (int)myDetector->getRunStatus();
|
||||||
}
|
}
|
||||||
@ -57,12 +52,10 @@ string slsDetectorUsers::getFilePath(){
|
|||||||
return myDetector->getFilePath();
|
return myDetector->getFilePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string slsDetectorUsers::setFilePath(string s){
|
string slsDetectorUsers::setFilePath(string s){
|
||||||
return myDetector->setFilePath(s);
|
return myDetector->setFilePath(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string slsDetectorUsers::getFileName(){
|
string slsDetectorUsers::getFileName(){
|
||||||
return myDetector->getFileName();
|
return myDetector->getFileName();
|
||||||
}
|
}
|
||||||
@ -89,7 +82,7 @@ string slsDetectorUsers::setFlatFieldCorrectionDir(string dir){
|
|||||||
|
|
||||||
string slsDetectorUsers::getFlatFieldCorrectionFile(){
|
string slsDetectorUsers::getFlatFieldCorrectionFile(){
|
||||||
return myDetector->getFlatFieldCorrectionFile();
|
return myDetector->getFlatFieldCorrectionFile();
|
||||||
};
|
}
|
||||||
|
|
||||||
int slsDetectorUsers::setFlatFieldCorrectionFile(string fname){
|
int slsDetectorUsers::setFlatFieldCorrectionFile(string fname){
|
||||||
return myDetector->setFlatFieldCorrectionFile(fname);
|
return myDetector->setFlatFieldCorrectionFile(fname);
|
||||||
@ -146,7 +139,6 @@ int slsDetectorUsers::setBitDepth(int i){
|
|||||||
return myDetector->setDynamicRange(i);
|
return myDetector->setDynamicRange(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int slsDetectorUsers::setSettings(int isettings){
|
int slsDetectorUsers::setSettings(int isettings){
|
||||||
return myDetector->slsDetectorBase::setSettings(isettings);
|
return myDetector->slsDetectorBase::setSettings(isettings);
|
||||||
}
|
}
|
||||||
@ -166,7 +158,7 @@ int slsDetectorUsers::setThresholdEnergy(int e_ev, int tb, int isettings, int id
|
|||||||
double slsDetectorUsers::setExposureTime(double t, bool inseconds, int imod){
|
double slsDetectorUsers::setExposureTime(double t, bool inseconds, int imod){
|
||||||
if(!inseconds)
|
if(!inseconds)
|
||||||
return myDetector->setExposureTime((int64_t)t,imod);
|
return myDetector->setExposureTime((int64_t)t,imod);
|
||||||
else {
|
|
||||||
// + 0.5 to round for precision lost from converting double to int64_t
|
// + 0.5 to round for precision lost from converting double to int64_t
|
||||||
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
||||||
if (t < 0) tms = -1;
|
if (t < 0) tms = -1;
|
||||||
@ -174,13 +166,12 @@ double slsDetectorUsers::setExposureTime(double t, bool inseconds, int imod){
|
|||||||
if (tms < 0)
|
if (tms < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return ((1E-9) * (double)tms);
|
return ((1E-9) * (double)tms);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds, int imod){
|
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds, int imod){
|
||||||
if(!inseconds)
|
if(!inseconds)
|
||||||
return myDetector->setExposurePeriod((int64_t)t,imod);
|
return myDetector->setExposurePeriod((int64_t)t,imod);
|
||||||
else {
|
|
||||||
// + 0.5 to round for precision lost from converting double to int64_t
|
// + 0.5 to round for precision lost from converting double to int64_t
|
||||||
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
||||||
if (t < 0) tms = -1;
|
if (t < 0) tms = -1;
|
||||||
@ -188,13 +179,12 @@ double slsDetectorUsers::setExposurePeriod(double t, bool inseconds, int imod){
|
|||||||
if (tms < 0)
|
if (tms < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return ((1E-9) * (double)tms);
|
return ((1E-9) * (double)tms);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds, int imod){
|
double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds, int imod){
|
||||||
if(!inseconds)
|
if(!inseconds)
|
||||||
return myDetector->setDelayAfterTrigger((int64_t)t,imod);
|
return myDetector->setDelayAfterTrigger((int64_t)t,imod);
|
||||||
else {
|
|
||||||
// + 0.5 to round for precision lost from converting double to int64_t
|
// + 0.5 to round for precision lost from converting double to int64_t
|
||||||
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
||||||
if (t < 0) tms = -1;
|
if (t < 0) tms = -1;
|
||||||
@ -202,7 +192,6 @@ double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds, int imod
|
|||||||
if (tms < 0)
|
if (tms < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return ((1E-9) * (double)tms);
|
return ((1E-9) * (double)tms);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t slsDetectorUsers::setNumberOfGates(int64_t t, int imod){
|
int64_t slsDetectorUsers::setNumberOfGates(int64_t t, int imod){
|
||||||
@ -306,6 +295,44 @@ int slsDetectorUsers::enableGapPixels(int enable) {
|
|||||||
return myDetector->enableGapPixels(enable);
|
return myDetector->enableGapPixels(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string slsDetectorUsers::setReceiverFramesDiscardPolicy(std::string f) {
|
||||||
|
return myDetector->getReceiverFrameDiscardPolicy(
|
||||||
|
myDetector->setReceiverFramesDiscardPolicy(
|
||||||
|
myDetector->getReceiverFrameDiscardPolicy(f)));
|
||||||
|
}
|
||||||
|
|
||||||
|
int slsDetectorUsers::setReceiverPartialFramesPadding(int f) {
|
||||||
|
return myDetector->setReceiverPartialFramesPadding(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
int slsDetectorUsers::setReceiverFramesPerFile(int f) {
|
||||||
|
return myDetector->setReceiverFramesPerFile(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
int slsDetectorUsers::sendSoftwareTrigger() {
|
||||||
|
return myDetector->sendSoftwareTrigger();
|
||||||
|
}
|
||||||
|
|
||||||
|
double slsDetectorUsers::getMeasuredPeriod(bool inseconds, int imod) {
|
||||||
|
if(!inseconds)
|
||||||
|
return myDetector->getTimeLeft(slsReceiverDefs::MEASURED_PERIOD, imod);
|
||||||
|
|
||||||
|
int64_t tms = myDetector->getTimeLeft(slsReceiverDefs::MEASURED_PERIOD, imod);
|
||||||
|
if (tms < 0)
|
||||||
|
return -1;
|
||||||
|
return ((1E-9) * (double)tms);
|
||||||
|
}
|
||||||
|
|
||||||
|
double slsDetectorUsers::getMeasuredSubFramePeriod(bool inseconds, int imod) {
|
||||||
|
if(!inseconds)
|
||||||
|
return myDetector->getTimeLeft(slsReceiverDefs::MEASURED_SUBPERIOD, imod);
|
||||||
|
|
||||||
|
int64_t tms = myDetector->getTimeLeft(slsReceiverDefs::MEASURED_SUBPERIOD, imod);
|
||||||
|
if (tms < 0)
|
||||||
|
return -1;
|
||||||
|
return ((1E-9) * (double)tms);
|
||||||
|
}
|
||||||
|
|
||||||
void slsDetectorUsers::registerDataCallback(int( *userCallback)(detectorData*, int, int, void*), void *pArg){
|
void slsDetectorUsers::registerDataCallback(int( *userCallback)(detectorData*, int, int, void*), void *pArg){
|
||||||
myDetector->registerDataCallback(userCallback,pArg);
|
myDetector->registerDataCallback(userCallback,pArg);
|
||||||
}
|
}
|
||||||
@ -343,8 +370,6 @@ void slsDetectorUsers::registerGetI0Callback( double (*func)(int,void*),void *ar
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
string slsDetectorUsers::putCommand(int narg, char *args[], int pos){
|
string slsDetectorUsers::putCommand(int narg, char *args[], int pos){
|
||||||
if(narg < 2)
|
if(narg < 2)
|
||||||
return string("Error: Insufficient Parameters");
|
return string("Error: Insufficient Parameters");
|
||||||
@ -358,8 +383,6 @@ string slsDetectorUsers::getCommand(int narg, char *args[], int pos){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int slsDetectorUsers::setClockDivider(int value) {
|
int slsDetectorUsers::setClockDivider(int value) {
|
||||||
return myDetector->setClockDivider(value);
|
return myDetector->setClockDivider(value);
|
||||||
}
|
}
|
||||||
@ -408,7 +431,6 @@ int slsDetectorUsers::stopAcquisition() {
|
|||||||
return myDetector->stopAcquisition();
|
return myDetector->stopAcquisition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int slsDetectorUsers::setReceiverSilentMode(int i) {
|
int slsDetectorUsers::setReceiverSilentMode(int i) {
|
||||||
return myDetector->setReceiverSilentMode(i);
|
return myDetector->setReceiverSilentMode(i);
|
||||||
}
|
}
|
||||||
@ -465,3 +487,10 @@ double slsDetectorUsers::setSubFrameExposureDeadTime(double t, bool inseconds, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t slsDetectorUsers::setNumberOfStorageCells(int64_t t, int imod) {
|
||||||
|
return myDetector->setTimer(slsReceiverDefs::STORAGE_CELL_NUMBER, t, imod);
|
||||||
|
}
|
||||||
|
|
||||||
|
int slsDetectorUsers::setStoragecellStart(int pos) {
|
||||||
|
return myDetector->setStoragecellStart(pos);
|
||||||
|
}
|
||||||
|
@ -88,26 +88,21 @@ class slsDetectorUsers
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
/** @short default constructor
|
/** @short default constructor
|
||||||
* @param id multi detector id
|
|
||||||
* @param ret address of return value. It will be set to 0 for success, else 1 for failure
|
* @param ret address of return value. It will be set to 0 for success, else 1 for failure
|
||||||
|
* @param id multi detector id
|
||||||
* in creating multidetector object
|
* in creating multidetector object
|
||||||
*/
|
*/
|
||||||
slsDetectorUsers(int id=0, int& ret);
|
slsDetectorUsers(int& ret, int id=0);
|
||||||
|
|
||||||
|
|
||||||
/** @short virtual destructor */
|
/** @short virtual destructor */
|
||||||
virtual ~slsDetectorUsers();
|
virtual ~slsDetectorUsers();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short useful to define subset of working functions
|
@short useful to define subset of working functions
|
||||||
\returns "PSI" or "Dectris"
|
\returns "PSI" or "Dectris"
|
||||||
*/
|
*/
|
||||||
std::string getDetectorDeveloper();
|
std::string getDetectorDeveloper();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @short sets the onlineFlag
|
/** @short sets the onlineFlag
|
||||||
\param online can be: -1 returns wether the detector is in online (1) or offline (0) state; 0 detector in offline state; 1 detector in online state
|
\param online can be: -1 returns wether the detector is in online (1) or offline (0) state; 0 detector in offline state; 1 detector in online state
|
||||||
\returns 0 (offline) or 1 (online)
|
\returns 0 (offline) or 1 (online)
|
||||||
@ -377,7 +372,6 @@ class slsDetectorUsers
|
|||||||
*/
|
*/
|
||||||
int64_t setNumberOfCycles(int64_t t=-1, int imod = -1);
|
int64_t setNumberOfCycles(int64_t t=-1, int imod = -1);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short set/get the external communication mode
|
@short set/get the external communication mode
|
||||||
\param pol value to be set \sa getTimingMode
|
\param pol value to be set \sa getTimingMode
|
||||||
@ -556,11 +550,54 @@ class slsDetectorUsers
|
|||||||
*/
|
*/
|
||||||
int enableGapPixels(int enable=-1);
|
int enableGapPixels(int enable=-1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the frames discard policy in receiver
|
||||||
|
* frame discard policy options:
|
||||||
|
* @param f nodiscard (default),discardempty, discardpartial (fastest), get to get the value
|
||||||
|
* @returns f nodiscard (default),discardempty, discardpartial (fastest)
|
||||||
|
*/
|
||||||
|
std::string setReceiverFramesDiscardPolicy(std::string f="get");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the frame padding in receiver
|
||||||
|
* @param f 0 does not partial frames, 1 pads partial frames (-1 gets)
|
||||||
|
* @returns partial frames padding enable
|
||||||
|
*/
|
||||||
|
int setReceiverPartialFramesPadding(int f = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the frames per file in receiver
|
||||||
|
* @param f frames per file, 0 is infinite ie. every frame in same file (-1 gets)
|
||||||
|
* @returns frames per file
|
||||||
|
*/
|
||||||
|
int setReceiverFramesPerFile(int f = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a software internal trigger (EIGER only)
|
||||||
|
* @returns 0 for success, 1 for fail
|
||||||
|
*/
|
||||||
|
int sendSoftwareTrigger();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get measured period between previous two frames(EIGER only)
|
||||||
|
* @param inseconds true if the value is in s, else ns
|
||||||
|
* @param imod module number (-1 for all)
|
||||||
|
* @returns measured period
|
||||||
|
*/
|
||||||
|
double getMeasuredPeriod(bool inseconds=false, int imod = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get measured sub period between previous two sub frames in 32 bit mode (EIGER only)
|
||||||
|
* @param inseconds true if the value is in s, else ns
|
||||||
|
* @param imod module number (-1 for all)
|
||||||
|
* @returns measured sub period
|
||||||
|
*/
|
||||||
|
double getMeasuredSubFramePeriod(bool inseconds=false, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short register calbback for accessing detector final data
|
@short register calbback for accessing detector final data
|
||||||
\param func function to be called at the end of the acquisition. gets detector status and progress index as arguments
|
\param func function to be called at the end of the acquisition. gets detector status and progress index as arguments
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg);
|
void registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -757,6 +794,21 @@ class slsDetectorUsers
|
|||||||
*/
|
*/
|
||||||
double setSubFrameExposureDeadTime(double t=-1, bool inseconds=false, int imod = -1);
|
double setSubFrameExposureDeadTime(double t=-1, bool inseconds=false, int imod = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set/get number of additional storage cells (Jungfrau)
|
||||||
|
* @param t number of additional storage cells. Default is 0. (-1 gets)
|
||||||
|
* @param imod module number (-1 for all)
|
||||||
|
* @returns number of additional storage cells
|
||||||
|
*/
|
||||||
|
int64_t setNumberOfStorageCells(int64_t t=-1, int imod = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set storage cell that stores first acquisition of the series (Jungfrau)
|
||||||
|
* @param value storage cell index. Value can be 0 to 15. Default is 15. (-1 gets)
|
||||||
|
* @returns the storage cell that stores the first acquisition of the series
|
||||||
|
*/
|
||||||
|
int setStoragecellStart(int pos=-1);
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
|
||||||
STATIC FUNCTIONS
|
STATIC FUNCTIONS
|
||||||
|
@ -291,9 +291,10 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing {
|
|||||||
/**
|
/**
|
||||||
get current timer value
|
get current timer value
|
||||||
\param index timer index
|
\param index timer index
|
||||||
|
\param imod module number
|
||||||
\returns elapsed time value in ns or number of...(e.g. frames, gates, probes)
|
\returns elapsed time value in ns or number of...(e.g. frames, gates, probes)
|
||||||
*/
|
*/
|
||||||
virtual int64_t getTimeLeft(timerIndex index)=0;
|
virtual int64_t getTimeLeft(timerIndex index, int imod = -1)=0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set storage cell that stores first acquisition of the series (Jungfrau only)
|
* set storage cell that stores first acquisition of the series (Jungfrau only)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user