mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-19 18:40:01 +02:00
Moench rewrite (#597)
* copied jungfrau server to moench and adapted * fixed image size and num packets * read n rows allows 16 * commneted out configure_asic_timer at server startup. To be removed later the ASIC_CTRL_REG and storage cell options * moench:removing the decrement (which was in jf) in read n rows to register * removed lblsamples from gui
This commit is contained in:
parent
7ab3b25f87
commit
39b1f5bbf2
795
RELEASE.txt
795
RELEASE.txt
@ -26,800 +26,7 @@ This document describes the differences between v7.0.0.rc1 and v6.1.2
|
||||
1. New or Changed Features
|
||||
==========================
|
||||
|
||||
|
||||
1.1. Compilation
|
||||
----------------
|
||||
|
||||
|
||||
General:
|
||||
|
||||
|
||||
* Custom location to find ZeroMQ
|
||||
Option to provide a custom location to look for ZeroMQ, if not found
|
||||
using FindZeroMQ.cmake
|
||||
|
||||
For example, to use the system installed zmq:
|
||||
Using cmake: -DZeroMQ_HINT=/usr/lib64
|
||||
Using cmk.sh script: -q /usr/lib64
|
||||
|
||||
|
||||
* Support external build
|
||||
Assuming already installed version of the slsDetectorPacakge exists,
|
||||
external build of python bindings, gui, ctbgui and moench has been added.
|
||||
|
||||
|
||||
* Catch updated to latest 2.x version due to build failure in fedora
|
||||
|
||||
|
||||
|
||||
Gui:
|
||||
|
||||
|
||||
* Qt5 and in-built compressed Qwt 6.1.5
|
||||
Ported from Qt4 to Qt5. Minimum requirement: Qt 5.9
|
||||
Compressed Qwt 6.1.5 added into the package in libs. It is unpacked and built
|
||||
as a static library.This allows us to remove qwt as an external dependency
|
||||
and reduces the risk of picking up the wrong version.
|
||||
|
||||
|
||||
Python:
|
||||
|
||||
|
||||
* Install python extension
|
||||
Option to copy the python extension (slsdet folder and _slsdet-..so)
|
||||
to CMAKE_INSTALL_PREFIX/python using
|
||||
-DSLS_INSTALL_PYTHONEXT
|
||||
|
||||
|
||||
* Pybind11 (v2.10.0)
|
||||
Pybind11 is removed as a submodule and instead built into package to
|
||||
simplify for users. Now, there is no more need to clone with the '--recursive'
|
||||
argument or to update submodule when switching to this package version
|
||||
and above.
|
||||
|
||||
|
||||
* Conda packages
|
||||
Removed conda packages for python 3.6 and 3.7. Added for python 3.11.
|
||||
|
||||
|
||||
|
||||
1.2. Callback
|
||||
-------------
|
||||
|
||||
|
||||
* Datatype of Metadata [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
|
||||
Datatype changed from char* to sls_receiver_header.
|
||||
|
||||
|
||||
* Datatype of Size [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
|
||||
Datatype changed from uint32_t to size_t
|
||||
|
||||
|
||||
* Datatype of file name and file path [registerCallBackStartAcquisition]
|
||||
Datatype changed from string to const string reference.
|
||||
|
||||
|
||||
* Incorrect image size [registerCallBackStartAcquisition]
|
||||
Fixed. It used to give +120 bytes.
|
||||
|
||||
|
||||
* [Gotthard2] 25um Image reconstruction for 2 modules
|
||||
First module (master) interleaves with second modules(slave). First channel
|
||||
of master is first channel of detector.
|
||||
|
||||
Requires firmware update to reverse channels of slaves.
|
||||
|
||||
|
||||
|
||||
1.3. Python
|
||||
-----------
|
||||
|
||||
|
||||
* Defines in sls_detector_defs
|
||||
sls_detetor_defs parsed and #defines extracted into defines.py
|
||||
For exmaple, one can use slsdet.LOCALHOST_IP
|
||||
|
||||
|
||||
* Python sub-microsecond resolution
|
||||
Reading back sub-microsecond exposure times from the Python API fixed by
|
||||
addig Python datetime supports only micro seconds as lowest unit.
|
||||
|
||||
This is fixed by introducing a new C++ type (DurationWrapper), which
|
||||
holds number of nanoseconds as a uint64_t (only in python bindings) and
|
||||
custom typecaster to convert to and from std::chrono::nanoseconds.
|
||||
|
||||
A get using API now returns in DurationWrapper, instead of datetime.
|
||||
Refer exptime help for examples.
|
||||
|
||||
|
||||
1.4. Client
|
||||
-----------
|
||||
|
||||
|
||||
Breaking API:
|
||||
|
||||
|
||||
* Versioning
|
||||
The client, receiver and detector servers now have semantic Versioning
|
||||
along with the date and are managed with the Version class.
|
||||
|
||||
--version argument to the executable gives the complete versioning with date.
|
||||
|
||||
Using the client to get versions gives only the semantic version. An older
|
||||
server will still give date. Hence, the return type is a string, breaking API.
|
||||
|
||||
Compatibility checks at hostname or rx_hostname command will only be for
|
||||
backwards compatibility (ie. it only checks for the major version number).
|
||||
If its an old server, then its expected to have the exact same date (as
|
||||
before)
|
||||
|
||||
Setting intitialchecks to 0 also bypasses the receiver compatibility check.
|
||||
|
||||
|
||||
* Detector Specific fields
|
||||
bunchid ->detSpec1
|
||||
reserved->detSpec2
|
||||
debug->detSpec3
|
||||
roundRnumber->detSpec4
|
||||
|
||||
Header version number stays the same in the UDP header as there is no
|
||||
difference in the format from the detector. Only the structure memeber names
|
||||
have changed in sls_detector_defs.h
|
||||
|
||||
Further details about each detector specific field can be found at:
|
||||
https://slsdetectorgroup.github.io/devdoc/udpdetspec.html
|
||||
|
||||
|
||||
* Namespace sls
|
||||
All files in slsSupportLib and tests have now been moved to sls namespace
|
||||
including macros. Using the LOG, for example, will require the sls qualifier.
|
||||
|
||||
|
||||
* [Eiger] Number of UDP interfaces
|
||||
Command line: numinterfaces, API: getNumberofUDPInterfaces
|
||||
This command now reflects the actual number of udp interfaces for Eiger,
|
||||
which is 2.
|
||||
|
||||
|
||||
* [Eiger][Jungfrau] Row column
|
||||
[Jungfrau] Fixed row column indexing for multi module 2 interfaces
|
||||
|
||||
[Eiger] The row indicies were switched across the Y axis for the callback
|
||||
only for Eiger. This is now changed and kept similar to the other detectors.
|
||||
The row indices would be in the order of the half modules in the hostname
|
||||
command. Therefore, to keep the image from callback, invert the hostname
|
||||
order in the config file.
|
||||
|
||||
|
||||
* Deprecated CopyDetectorServer
|
||||
Command line: copydetectorserver, API: copydetectorserver
|
||||
Removed. Use updatedetectorserver
|
||||
|
||||
|
||||
* [Eiger][Jugfrau][Mythen3] Deprecated specific transmission delay commands
|
||||
txndelay_frame -> txdelay_frame
|
||||
txndelay_left -> txdelay_left
|
||||
txndelay_right -> txdelay_right
|
||||
|
||||
|
||||
* [Eiger] Datastream only for 10GbE
|
||||
Command line: datastream, API: getDataStream/ setDataStream
|
||||
|
||||
This command to enable/ disable data stream from left or right port
|
||||
is now allowed only for 10GbE. Previously, it incorrectly allowed to do so.
|
||||
|
||||
|
||||
* [Eiger][Jungfrau][Moench][Ctb] Stop command effect on next frame number
|
||||
Stopping acquisition sometimes results in different next frame numbers
|
||||
for different moduels. Hence, after a stop, if the next frame numbers are
|
||||
different, they are all set to their maximum value + 1.
|
||||
|
||||
|
||||
* Missing packets
|
||||
Command line: rx_missingpackets, API: getNumMissingPackets
|
||||
This now returns a signed 64 bit instead of unsigned. The negative polarity
|
||||
depicts extra packets instead of missing packets and also takes care of
|
||||
disabled ports.
|
||||
|
||||
|
||||
* Frames caught and frame index
|
||||
Command line rx_framescaught, rx_frameindex, API: getFramesCaught/ getRxCurrentFrameIndex
|
||||
They now return a vector for each port when there are 2 udp interfaces
|
||||
in the receiver.
|
||||
|
||||
|
||||
* [Gotthard][Gotthard2] Num modules
|
||||
Only 2 modules allowed maximum in a detector shared memory.
|
||||
|
||||
|
||||
* [Moench][Ctb][Mythen3] Deprecated commands
|
||||
Patloopx, patnloopx, patwaitx, patwaittimex
|
||||
Please use instead patloop, patnloop, patwait and patwaittime commands
|
||||
with the level as an argument.
|
||||
|
||||
Old commands work with warning, but the server expects the new ones
|
||||
such as a default pattern file to be loaded at startup for Moench.
|
||||
|
||||
Renamed patternParameters struct member from 'loop' to 'startloop' and
|
||||
'stoploop'.
|
||||
|
||||
|
||||
* [Mythen3] Clock Divider 4 and 5
|
||||
Cannot be set anymore. Only read back.
|
||||
|
||||
|
||||
|
||||
New commands:
|
||||
|
||||
|
||||
* [Eiger][Gotthard][Gotthard2][Mythen3][Jungfrau] Master
|
||||
|
||||
Setting up from client:
|
||||
[Eiger][Gotthard2][Jungfrau]
|
||||
Command line: master, API: getMaster/ setMaster
|
||||
All of them can get master mode from the client.
|
||||
|
||||
This can also be set up on the detector server. Please refer to notes
|
||||
on that section.
|
||||
|
||||
|
||||
* [Eiger] Top
|
||||
Command line: top, API: getTop/ setTop
|
||||
Sets the half module to top or bottom from the client.
|
||||
|
||||
This can also be set up on the detector server. Please refer to notes
|
||||
on that section.
|
||||
|
||||
|
||||
* [Mythen3][Eiger] Save settings file
|
||||
Command line: trimbits (sls_detector_get), API: saveTrimbits
|
||||
Added
|
||||
|
||||
|
||||
* [Gotthard2] Parallel readout added
|
||||
Command line: parallel, API: getParallelMode/ setParallelMode
|
||||
Default for Gotthard2 is parallel. Non parallel mode only works in
|
||||
continuous mode.
|
||||
|
||||
|
||||
* [Jungfrau] Software trigger added
|
||||
Command line: trigger, API: sendSoftwareTrigger
|
||||
Send software trigger instead of harware trigger.
|
||||
|
||||
|
||||
* [Eiger][Jungfrau] Blocking trigger
|
||||
Commandline: blockingtrigger, API: sendSoftwareTrigger with argument true
|
||||
Sends software trigger signal to detector and blocks until the frames
|
||||
are sent out for that trigger.
|
||||
|
||||
|
||||
* [Jungfrau] Sync
|
||||
Command line: sync, API: getSynchronization/ setSynchronization
|
||||
Enables or disables synchronization between modules
|
||||
|
||||
|
||||
* [Gotthard2][Mythen3] Temperature readout
|
||||
Command line: temp_fpga, API: getTemperature with TEMPERATURE_FPGA enum
|
||||
Added
|
||||
|
||||
|
||||
* [Gotthard2][Mythen3] Round robin added
|
||||
Command line: udp_dstlist, API: getDestinationUDPList/ setDestinationUDPList
|
||||
Command line: udp_numdst, API: getNumberofUDPDestinations
|
||||
One can set up to 32 (64 for Mythen3) entries in the destination list.
|
||||
|
||||
|
||||
* [Jungfrau] Module Id
|
||||
Command line: moduleid, API: getModuleId
|
||||
16 bit value (ideally unique) that is streamed out in the udp header of
|
||||
the detector. The on-board detector server picks it up from a file
|
||||
(if it exists) called detid_jungfrau.txt.
|
||||
|
||||
|
||||
* [Jungfrau][[Gotthard2][Myhten3][Gotthard][Ctb][Moench] Hardware version
|
||||
Command line: hardwareversion, API: getHardwareVersion
|
||||
Gets the board or hardware version.
|
||||
For example, Jungfrau returns 1.0 or 2.0.
|
||||
It is also printed at on-board detector server start up.
|
||||
Also printed before starting FPGA programming.
|
||||
|
||||
|
||||
* [Eiger][Jugfrau][Mythen3] Transmission Delay
|
||||
Command line: tx_delay, API: getTransmissionDelay/ setTransmissionDelay
|
||||
Sets transmission delay for all modules in the detector using the step
|
||||
size provided. Sets up for every module:
|
||||
[Eiger] txdelay_left to (2 * mod_index * n_delay)
|
||||
[Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay)
|
||||
[Eiger] txdelay_frame to (2 *num_modules * n_delay)
|
||||
[Jungfrau][Mythen3] txdelay_frame to (num_modules * n_delay)
|
||||
|
||||
|
||||
* [Mythen3] Bad channels
|
||||
Command line: badchannels, API: getBadChannels/ setBadChannels
|
||||
Set bad channels from file with a list of channels, which will be masked
|
||||
out. Also does trimming. A detector level command will require the channel
|
||||
numbers accordingly. The file also extended to include commas, colons range)
|
||||
and removes duplicates.
|
||||
|
||||
|
||||
* [Moench][Ctb] Starting frame number
|
||||
Command line: nextframenumber, API: getNextFrameNumber/ setNextFrameNumber
|
||||
Added and default set up on detector server start up.
|
||||
|
||||
|
||||
* [Ctb] DAC names
|
||||
Command line: daclist, API: getDacNames/ setDacNames
|
||||
Can set and get dac names in the dac list now.
|
||||
|
||||
|
||||
* [Mythen3] Polarity, interpolation, pump probe, analog pulsing, digital pulsing
|
||||
Command line: polarity, interpolation, pumpprobe, apulse, dpulse
|
||||
API: getPolarity/ setPolarity, getInterpolation/ setInterpolation,
|
||||
getPumpProbe/ setPumpProbe, getAnalogPulsing/ setAnalogPulsing,
|
||||
getDigitalPulsing/ setDigitalPulsing
|
||||
|
||||
Added these commands.
|
||||
|
||||
Enabling interpolation will also enable all counters and disable vth3.
|
||||
Disabling sets to previous counter mask and previous vth values.
|
||||
|
||||
In pump probe mode, only vth2 enabled. Disabling sets vth2 to prevevious
|
||||
value.
|
||||
|
||||
Setting counter mask will check interpolation and pump probe mode
|
||||
requirements, else sets vthx dacs according to counter mask.
|
||||
|
||||
Direct overwrite of any dac (including vthx) allowed using dac command
|
||||
(as before).
|
||||
|
||||
|
||||
|
||||
New commands for Receiver only:
|
||||
|
||||
|
||||
* Arping for 10GbE
|
||||
Command line: rx_arping API: getRxArping/ setRxArping
|
||||
Starts a thread in the receiver to arping the interface it is listening
|
||||
to in 10GbE mode every 60 s.
|
||||
Changes NUM_RX_THREAD_IDS (sls_detector_defs.h) from 8 to 9.
|
||||
|
||||
|
||||
* Receiver Region of Interest
|
||||
Command line: rx_roi, API: getRxROI/ setRxROI
|
||||
Command line: rx_clearroi, API: clearRxROI
|
||||
One can set an ROI in the receiver to write to file. 1D detectors can set
|
||||
xmin and xmax, whereas the 2D can also set ymin and ymax. -1 values signify
|
||||
no ROI.
|
||||
|
||||
This is not at network level and can only be used to reduce size of file.
|
||||
Virtual HDF5 files not created when this is enabled and also no link in
|
||||
master file. No file created if module not in ROI.
|
||||
|
||||
There can only be one ROI per detector. Therefore, can be set only at
|
||||
detector level, but can be retrieved at module level as well.
|
||||
|
||||
The GUI still shows the entire image, but has a yellow border around the
|
||||
ROI. Status bar displays a message when Rx ROI enabled.
|
||||
|
||||
|
||||
|
||||
Additonal Features:
|
||||
|
||||
|
||||
* Non-blocking start
|
||||
Allowing non-blocking start at modular level again.
|
||||
|
||||
|
||||
* [Jungfrau][Moench][Ctb] Additional programming checks
|
||||
Also checks if the drive to write to is a special file or a normal
|
||||
file. If its a normal file, it throws asking to redo the command with a
|
||||
'--please-delete' argument to delete the normal file and create the device
|
||||
drive and restart FPGA programming.
|
||||
|
||||
More readable error message insetad of "programfpga not implemented for
|
||||
this detector'. This happens when 'hostname' command fails due to
|
||||
server-firmware/client compatibility and the detector type becomes
|
||||
'GENERIC'. Fixed to suggest if 'hostname' executed properly.
|
||||
|
||||
|
||||
* Udp Source IP
|
||||
Command line: udp_srcip(2), API: getSourceUDPIP(2)/ setSourceUDPIP(2)
|
||||
One can also set this to 'auto' for 1 GbE data. It will set to IP of
|
||||
rx_hostname (as in udp_dstip)
|
||||
|
||||
* Incrementing default receiver tcp port
|
||||
Automatically incrementing the default receiver tcp port for every module
|
||||
when creating shared memory.
|
||||
|
||||
|
||||
|
||||
Changes or Fixes:
|
||||
|
||||
|
||||
* [Jungfrau][Gotthard2][Mythen3][Gotthard][Moench][Ctb] Can't stop
|
||||
This bug was introduced in 6.1.1, when stopping an acquisition saying it
|
||||
cannot stop, even though it was successful. It is fixed now.
|
||||
|
||||
|
||||
* Free and config command fail
|
||||
Free and config command checked mismatch of size of shared memory before
|
||||
freeing or loading new config. Fixed.
|
||||
|
||||
|
||||
* sls_detector_help or sls_detector_get -h
|
||||
Should not create Detector object. Fixed.
|
||||
|
||||
|
||||
* [Jungfrau] Storage cells in running receiver
|
||||
Allowing the possibility to set this when receiver in running state.
|
||||
|
||||
|
||||
* [Eiger] Vtr
|
||||
Allow Vtrim to be interpolated for settings.
|
||||
|
||||
|
||||
* [Mythen3] Incorrect gain caps when setting threshold energy
|
||||
Gain caps overwritten with settings enum. Fixed.
|
||||
|
||||
|
||||
* [Mythen3] Non blocking start acquisition
|
||||
Non-blocking start acquisition was sent out twice to the master. Fixed.
|
||||
|
||||
|
||||
* [Mythen3] Threshold
|
||||
When settings trimbits or threshold, counter mask is set and hence,
|
||||
vthx dacs are set accordingly.
|
||||
|
||||
setAllThresholdEnergy takes 3 values for each counter and if one of them
|
||||
is -1, the trimbits and setings for that counter is picked up from the
|
||||
detector.
|
||||
|
||||
|
||||
* [Moench][Ctb] Pattern levels
|
||||
Changed from 3 to 6.
|
||||
|
||||
|
||||
* [Mythen3][Moench][Ctb] Default patwait and patloop addresses
|
||||
Set default wait and loop addresses to 0x1fff (max value) for all levels
|
||||
before loading pattern. Please use the pattern command instead of parameters.
|
||||
This ensures defaults are set up and is faster.
|
||||
|
||||
|
||||
* [Moench] Patsetbit and patsetmask
|
||||
Command line: patsetbit API: getPatternBitMask/ setPatternBitMask
|
||||
Command line: patmask API: getPatternMask/ setPatternMask
|
||||
|
||||
Exchanging the help and masks for patsetbit and patsetmask in the detector
|
||||
server, especially in loading settings.
|
||||
|
||||
|
||||
* [Moench][Ctb] ADC Vpp
|
||||
Command line: adcvpp, API: getADCVpp/ setADCVpp
|
||||
Moved from SetDAC function into into its own. One can use mV values or
|
||||
option numbers as before.
|
||||
|
||||
|
||||
* [Ctb] ADC command goes back to control server
|
||||
Slow ADCs, slow ADC temperature, get measured current and voltage values
|
||||
are requested via the control server again insetad of the stop server
|
||||
due to configuration and definitions in the control server.
|
||||
|
||||
|
||||
|
||||
1.5. Detector Server
|
||||
--------------------
|
||||
|
||||
|
||||
Config file:
|
||||
|
||||
* [Eiger][Gotthard2][Gotthard] Master
|
||||
Using config file with 'master' with argument (master=1, slave=0)
|
||||
|
||||
|
||||
* [Eiger] Top
|
||||
Using config file with 'top' with argument (top=1, bottom=0)
|
||||
|
||||
|
||||
|
||||
Command line arguments:
|
||||
|
||||
* They have precedence over config files.
|
||||
|
||||
|
||||
* [Eiger][Gotthard2 Virtual][Mythen3 Virtual][Gotthard Virtual] Master
|
||||
Using command line '--master = 1' or '-m = 1' with argument
|
||||
(master = 1, slave = 0)
|
||||
|
||||
|
||||
* [Eiger] Top
|
||||
Using command line '--top = 1' or '-t = 1' with argument (top=1, bottom=0)
|
||||
|
||||
|
||||
* Ignore config file
|
||||
The config files can also be ignored by an argument from the command line,
|
||||
'--ignore-config' or '-i'.
|
||||
|
||||
|
||||
|
||||
Fixes:
|
||||
|
||||
|
||||
* [Jungfrau][Eiger] Clear UDP destination
|
||||
Command line: udp_cleardst, API: clearUDPDestinations
|
||||
Clearing udp destination also clears it in the FPGA now.
|
||||
|
||||
|
||||
* [Eiger] Incorrect next frame number
|
||||
Command line: nextframenumber, API: getNextFrameNumber/ setNextFrameNumber
|
||||
Get next frame number for 10g was connected to 1g registers and gave
|
||||
incorrect values. Fixed.
|
||||
|
||||
|
||||
* [Mythen3][Gotthard2] System clock change effects
|
||||
When changing the system clock (clkdiv 2), time settings should also be
|
||||
affected (exptime, period etc.). Fixed.
|
||||
|
||||
[Gotthard2] System frequency should be same irrespective of timing source.
|
||||
Fixed.
|
||||
|
||||
|
||||
* [Mythen3] Kernel version compatibility test
|
||||
Fix added to parse properly the kernel version with CET for corrected
|
||||
version compatibility test.
|
||||
|
||||
|
||||
* [Mythen3] Server crash for setting vthrehsold
|
||||
Fixed.
|
||||
|
||||
|
||||
* [Mythen3] Incorrect gaincaps
|
||||
Setting threshold energy was overwriting gaincaps with settings enum. Fixed.
|
||||
|
||||
|
||||
* [Ctb][Moench] Hostname fail in update mode.
|
||||
Fixed
|
||||
|
||||
|
||||
|
||||
Changes:
|
||||
|
||||
|
||||
* [Jungfrau] Temporary fix for stop in 6.1.1
|
||||
Temporary fix introduced in 6.1.1 for not being able to start after a
|
||||
stop command has been issued is removed. Reset core right after also has
|
||||
been removed. It has been fixed in firmware instead.
|
||||
|
||||
|
||||
* [Gotthard2] Clock Divider defaults
|
||||
When chancing burst mode, clock dividers (2, 3 and 4) set to their
|
||||
defaults according to burst mode.
|
||||
|
||||
|
||||
* [Mythen3] DAC check for settings
|
||||
Verify DAC values for each setting has been temporarily switched off
|
||||
|
||||
|
||||
* [Mythen3] DAC min and max values
|
||||
Vtrim minimum of 600 has been removed.
|
||||
The threshold dacs minimum is 200 and maximum is 2400.
|
||||
The other DACs minimum is 0 and maximum is 2800.
|
||||
When out of range, will not throw, just a warning.
|
||||
|
||||
|
||||
* [Mythen3] Vicin Dac changed to 800
|
||||
|
||||
|
||||
* [Jungfrau][Moench][Ctb] PLL reset at server start up
|
||||
PLL reset now at server start up.
|
||||
|
||||
|
||||
* [Moench] ADC9257 Vref
|
||||
ADC Vref voltage modified from 1.33V to 2V
|
||||
|
||||
|
||||
|
||||
* [Ctb] Allow all clock dividers for PLL
|
||||
Fixed. For example, 133 MHz would not really be set previously. Fixed by
|
||||
changing totaldiv from float to an integer.
|
||||
|
||||
|
||||
|
||||
Additional Features:
|
||||
|
||||
|
||||
* Stop server startup errors
|
||||
Stop servers now also check for errors at startup (including version
|
||||
compatibility) and like the control server, it will translate to the
|
||||
client when connecting for the first time (hostname command).
|
||||
|
||||
|
||||
* [Jungfrau][Moench][Ctb] Additional server update process
|
||||
Removes old server binary or target of linked file when updating
|
||||
detector server for blackfin detectors as there is less space on blackfin.
|
||||
|
||||
Clearing up absolute and respawn path (removing double '/')
|
||||
|
||||
Raise error if server name to be copied is the same as final soft link name.
|
||||
|
||||
|
||||
* [Moench][Ctb] 1 GbE Non blocking acquisition
|
||||
Previously non blocking acquisition in 1 GbE would not send data.
|
||||
This feature added now.
|
||||
|
||||
|
||||
* [Gotthard2] Adapted to new HDI version
|
||||
HDI module ID written to FPGA register
|
||||
|
||||
|
||||
|
||||
1.6. Simulator
|
||||
--------------
|
||||
|
||||
|
||||
* Command line arguments. Please refer to previous section on Detector Server.
|
||||
|
||||
|
||||
* [Eiger] Only one executable
|
||||
Only one executable for an Eiger virtual server. Master and top mode
|
||||
can be provided via command line or config file to the detector server,
|
||||
as well as via the client. See in Other New Features for more details.
|
||||
|
||||
One can start a module using:
|
||||
eigerDetectorServer_virtual # reads default config file (top master)
|
||||
eigerDetectorServer_virtual -i #ignores the config file (bottom slave)
|
||||
|
||||
|
||||
* [Eiger][Junfrau][Gotthard2][Mythen3] Module Id
|
||||
Added into udp header
|
||||
|
||||
|
||||
* Minimum Configuration
|
||||
One can setup with just:
|
||||
hostname localhost
|
||||
rx_hostname localhost
|
||||
udp_dstip auto
|
||||
|
||||
|
||||
* [Mythen3] Packet size
|
||||
Fixed packet size calculation. Previously, sending only header with no data.
|
||||
|
||||
|
||||
|
||||
1.7. Receiver
|
||||
-------------
|
||||
|
||||
|
||||
Breaking API:
|
||||
|
||||
|
||||
* Namespace sls
|
||||
All the receiver source files have also been added to namespace sls.
|
||||
|
||||
|
||||
* HDF5 and Binary writer version
|
||||
Changed from 6.3 to 6.4
|
||||
|
||||
|
||||
* Master file format to json
|
||||
The format has been changed from ASCII to json.
|
||||
|
||||
|
||||
* Geometry metadata
|
||||
Added geometry (number of modules in each direction) to metadata in file.
|
||||
|
||||
|
||||
* HDF5 Dataset name
|
||||
Changed to just "data" to simplify for user
|
||||
|
||||
|
||||
* File write
|
||||
File write is disabled by default.
|
||||
|
||||
|
||||
|
||||
Fixes:
|
||||
|
||||
|
||||
* Refactored and fixed minor issues
|
||||
Including memory structure and udp sockets.
|
||||
Fixed progress also in discard partial packaets mode and deactivated ports.
|
||||
Fixed 200% progress.
|
||||
Completely padded images now have detector type or version in metadata.
|
||||
Fixed getting stuck at stop receiver when using zmq
|
||||
Fixed clang compiler warnings
|
||||
|
||||
|
||||
* Multiple files
|
||||
This bug was introduced in v6.0.0, where 1 file was created per frame
|
||||
after the first file. Fixed by resetting the number of frames in
|
||||
current file when creating a new one.
|
||||
|
||||
|
||||
* [Eiger] Datastream command order
|
||||
The order of commands to set datastream from client mattered previously.
|
||||
Datastream had to be set before 10GbE enable. Order does not matter anymore.
|
||||
|
||||
|
||||
* Udp destination MAC
|
||||
If it has been set before, changing udp_dstip will not update udp_dstmac.
|
||||
Fixed to always set it in detector even if it had a value before.
|
||||
Udp_dstmac can still be used to overwrite again. This is useful when
|
||||
using a router for example.
|
||||
|
||||
|
||||
* Stuck when using zmq
|
||||
More often in 6.1.1, gets stuck at stop receiver.
|
||||
|
||||
|
||||
* [Mythen3] Incorrect number of packets calculated or tengiga not set up
|
||||
Runnig config second time (with tengiga=0, dr !=32, counters !=0x7)
|
||||
calculated incorrect image size expected due to inconsistent copy of
|
||||
detector parameters. Fixed
|
||||
|
||||
|
||||
* Storage cells in receiver
|
||||
Previously not updated in receiver. Fixed.
|
||||
|
||||
|
||||
* Virtual HDF5 Parameter datasets
|
||||
Corner case bug when frames caught is not a multiple of frames per file.
|
||||
Not found in virtual image datasets. Fixed.
|
||||
|
||||
|
||||
|
||||
Changes:
|
||||
|
||||
|
||||
* Master file created at end of acquisition
|
||||
The file is now written at the end of acquisition. So if any metadata
|
||||
is changed during an acquisition, it will reflect the last value.
|
||||
|
||||
|
||||
* File name prefix
|
||||
Slash '/' not allowed.
|
||||
|
||||
|
||||
|
||||
Additional Features:
|
||||
|
||||
|
||||
* [Gotthard2] 25um image reconstruction in virtual HDF5
|
||||
Virtual HDF5 reconstructs complete image by interleaving first module
|
||||
(master) with second module (slave). First channel of master is first
|
||||
channel of detector.
|
||||
|
||||
Requires firmware update to reverse channels of slaves.
|
||||
|
||||
|
||||
* Memory size
|
||||
Increased an internal fifo header by 8 bytes to align memory allocated for
|
||||
to receive images for efficiency.
|
||||
|
||||
|
||||
|
||||
1.8. Gui
|
||||
--------
|
||||
|
||||
* [Jungfrau][Eiger] Gap pixels
|
||||
Enabled by default in the gui.
|
||||
|
||||
|
||||
* High voltage moved from Developer tab to Settings tab.
|
||||
|
||||
|
||||
* Gain plot zooming
|
||||
Zooming disabled. Instead, it automatically zooms in when you zoom in
|
||||
the main plot or if min and max of x and y axis set up in plot tab.
|
||||
|
||||
|
||||
* [Mythen3] Inconsistent timing mode
|
||||
Timing mode of the slaves should be discarded before squashing. Fixed.
|
||||
|
||||
|
||||
* [Mythen3][Gotthard2] Crashes
|
||||
Additional locking Added
|
||||
|
||||
|
||||
- moench being made compatible with jungfrau 2.0 boards (jungfrau structure, away from ctb)
|
||||
|
||||
|
||||
2. On-board Detector Server Compatibility
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -32,7 +32,6 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
|
||||
void SetNumFrames(int val);
|
||||
void SetNumTriggers(int val);
|
||||
void SetNumBursts(int val);
|
||||
void SetNumSamples(int val);
|
||||
void SetNumGates(int val);
|
||||
void SetExposureTime();
|
||||
void SetAcquisitionPeriod();
|
||||
@ -64,7 +63,6 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
|
||||
void GetNumFrames();
|
||||
void GetNumTriggers();
|
||||
void GetNumBursts();
|
||||
void GetNumSamples();
|
||||
void GetNumGates();
|
||||
void GetExposureTime();
|
||||
void GetAcquisitionPeriod();
|
||||
@ -96,7 +94,6 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
|
||||
QString errPeriodTip;
|
||||
QPalette red;
|
||||
bool delayImplemented;
|
||||
bool sampleImplemented;
|
||||
bool gateImplemented;
|
||||
bool startingFnumImplemented;
|
||||
bool isAcquisitionStopped{false};
|
||||
|
@ -52,6 +52,7 @@ void qDrawPlot::SetupWidgetWindow() {
|
||||
detType = det->getDetectorType().squash();
|
||||
switch (detType) {
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
pixelMask = ((1 << 14) - 1);
|
||||
gainMask = (3 << 14);
|
||||
gainOffset = 14;
|
||||
@ -1142,7 +1143,8 @@ void qDrawPlot::toDoublePixelData(double *dest, char *source, int size,
|
||||
break;
|
||||
|
||||
case 16:
|
||||
if (detType == slsDetectorDefs::JUNGFRAU ||
|
||||
if (detType == slsDetectorDefs::MOENCH ||
|
||||
detType == slsDetectorDefs::JUNGFRAU ||
|
||||
detType == slsDetectorDefs::GOTTHARD2) {
|
||||
|
||||
// show gain plot
|
||||
|
@ -40,13 +40,11 @@ void qTabDataOutput::SetupWidgetWindow() {
|
||||
comboClkDivider->setEnabled(true);
|
||||
chkParallel->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
chkTenGiga->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
chkParallel->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
lblClkDivider->setEnabled(true);
|
||||
comboClkDivider->setEnabled(true);
|
||||
break;
|
||||
|
@ -111,6 +111,7 @@ void qTabDeveloper::SetupWidgetWindow() {
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"v vb comp: ", getSLSIndex(detType, tempid++)));
|
||||
@ -139,72 +140,6 @@ void qTabDeveloper::SetupWidgetWindow() {
|
||||
"Temperature ADC: ", getSLSIndex(detType, tempid++)));
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MOENCH:
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vbp_colbuf: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vin_cm: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vb_sda: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vcasc_sfp: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vout_cm: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vipre_cds: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"ibias_sfp: ", getSLSIndex(detType, tempid++)));
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcassh: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vth2: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vrshaper: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vrshaper_n: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vipre_out: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vth3: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vth1: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vicin: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcas: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vrpreamp: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcal_p: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vishaper: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcal_n: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vtrim: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vdcsh: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vthreshold: ", getSLSIndex(detType, tempid++)));
|
||||
adcWidgets.push_back(new qDacWidget(
|
||||
this, det, false,
|
||||
"Temperature FPGA: ", getSLSIndex(detType, tempid++)));
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
@ -386,6 +321,7 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
switch (index) {
|
||||
case 0:
|
||||
return slsDetectorDefs::VB_COMP;
|
||||
@ -411,30 +347,6 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
|
||||
}
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MOENCH:
|
||||
switch (index) {
|
||||
case 0:
|
||||
return slsDetectorDefs::VBP_COLBUF;
|
||||
case 1:
|
||||
return slsDetectorDefs::VIPRE;
|
||||
case 2:
|
||||
return slsDetectorDefs::VIN_CM;
|
||||
case 3:
|
||||
return slsDetectorDefs::VB_SDA;
|
||||
case 4:
|
||||
return slsDetectorDefs::VCASC_SFP;
|
||||
case 5:
|
||||
return slsDetectorDefs::VOUT_CM;
|
||||
case 6:
|
||||
return slsDetectorDefs::VIPRE_CDS;
|
||||
case 7:
|
||||
return slsDetectorDefs::IBIAS_SFP;
|
||||
default:
|
||||
throw RuntimeError(std::string("Unknown dac/adc index") +
|
||||
std::to_string(index));
|
||||
}
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
@ -35,7 +35,6 @@ void qTabMeasurement::SetupWidgetWindow() {
|
||||
// timer to update the progress bar
|
||||
progressTimer = new QTimer(this);
|
||||
|
||||
sampleImplemented = false;
|
||||
gateImplemented = false;
|
||||
delayImplemented = true;
|
||||
startingFnumImplemented = false;
|
||||
@ -47,18 +46,11 @@ void qTabMeasurement::SetupWidgetWindow() {
|
||||
// default is triggers and delay (not #bursts and burst period for gotthard2
|
||||
// in auto mode)
|
||||
ShowTriggerDelay();
|
||||
// default is to show samples, mythen3, show gates
|
||||
ShowGates();
|
||||
|
||||
// enabling according to det type
|
||||
lblBurstMode->hide();
|
||||
comboBurstMode->hide();
|
||||
switch (det->getDetectorType().squash()) {
|
||||
case slsDetectorDefs::MOENCH:
|
||||
lblNumSamples->setEnabled(true);
|
||||
spinNumSamples->setEnabled(true);
|
||||
sampleImplemented = true;
|
||||
break;
|
||||
case slsDetectorDefs::EIGER:
|
||||
delayImplemented = false;
|
||||
lblNextFrameNumber->setEnabled(true);
|
||||
@ -66,6 +58,7 @@ void qTabMeasurement::SetupWidgetWindow() {
|
||||
startingFnumImplemented = true;
|
||||
break;
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
lblNextFrameNumber->setEnabled(true);
|
||||
spinNextFrameNumber->setEnabled(true);
|
||||
startingFnumImplemented = true;
|
||||
@ -112,10 +105,6 @@ void qTabMeasurement::Initialization() {
|
||||
connect(spinNumBursts, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumBursts(int)));
|
||||
}
|
||||
if (spinNumSamples->isEnabled()) {
|
||||
connect(spinNumSamples, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumSamples(int)));
|
||||
}
|
||||
if (gateImplemented) {
|
||||
connect(spinNumGates, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumGates(int)));
|
||||
@ -198,16 +187,6 @@ void qTabMeasurement::ShowTriggerDelay() {
|
||||
}
|
||||
}
|
||||
|
||||
void qTabMeasurement::ShowGates() {
|
||||
if (det->getDetectorType().squash() == slsDetectorDefs::MYTHEN3) {
|
||||
stackedLblSamplesGates->setCurrentWidget(pageLblGates);
|
||||
stackedSpinSamplesGates->setCurrentWidget(pageSpinGates);
|
||||
} else {
|
||||
stackedLblSamplesGates->setCurrentWidget(pageLblSamples);
|
||||
stackedSpinSamplesGates->setCurrentWidget(pageSpinSamples);
|
||||
}
|
||||
}
|
||||
|
||||
void qTabMeasurement::SetupTimingMode() {
|
||||
QStandardItemModel *model =
|
||||
qobject_cast<QStandardItemModel *>(comboTimingMode->model());
|
||||
@ -510,31 +489,6 @@ void qTabMeasurement::SetNumBursts(int val) {
|
||||
&qTabMeasurement::GetNumBursts)
|
||||
}
|
||||
|
||||
void qTabMeasurement::GetNumSamples() {
|
||||
LOG(logDEBUG) << "Getting number of samples";
|
||||
disconnect(spinNumSamples, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumSamples(int)));
|
||||
try {
|
||||
auto retval = det->getNumberOfAnalogSamples().tsquash(
|
||||
"Inconsistent number of analog samples for all detectors.");
|
||||
spinNumSamples->setValue(retval);
|
||||
}
|
||||
CATCH_DISPLAY("Could not get number of samples.",
|
||||
"qTabMeasurement::GetNumSamples")
|
||||
connect(spinNumSamples, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumSamples(int)));
|
||||
}
|
||||
|
||||
void qTabMeasurement::SetNumSamples(int val) {
|
||||
LOG(logINFO) << "Setting number of samples to " << val;
|
||||
try {
|
||||
det->setNumberOfAnalogSamples(val);
|
||||
}
|
||||
CATCH_HANDLE("Could not set number of samples.",
|
||||
"qTabMeasurement::SetNumSamples", this,
|
||||
&qTabMeasurement::GetNumSamples)
|
||||
}
|
||||
|
||||
void qTabMeasurement::GetNumGates() {
|
||||
LOG(logDEBUG) << "Getting number of gates";
|
||||
disconnect(spinNumGates, SIGNAL(valueChanged(int)), this,
|
||||
@ -1003,9 +957,6 @@ void qTabMeasurement::Refresh() {
|
||||
if (spinBurstPeriod->isEnabled()) {
|
||||
GetBurstPeriod();
|
||||
}
|
||||
if (sampleImplemented) {
|
||||
GetNumSamples();
|
||||
}
|
||||
if (gateImplemented) {
|
||||
GetNumGates();
|
||||
}
|
||||
|
@ -66,6 +66,11 @@ void qTabPlot::SetupWidgetWindow() {
|
||||
chkGainPlot->setChecked(true);
|
||||
plot->EnableGainPlot(true);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
chkGainPlot->setEnabled(true);
|
||||
chkGainPlot->setChecked(true);
|
||||
plot->EnableGainPlot(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -781,6 +786,9 @@ void qTabPlot::Refresh() {
|
||||
chkGapPixels->setEnabled(true);
|
||||
GetGapPixels();
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
chkGainPlot->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
chkGainPlot1D->setEnabled(true);
|
||||
break;
|
||||
|
@ -92,7 +92,8 @@ void qTabSettings::SetupWidgetWindow() {
|
||||
comboDynamicRange->setEnabled(true);
|
||||
lblThreshold->setEnabled(true);
|
||||
spinThreshold->setEnabled(true);
|
||||
} else if (detType == slsDetectorDefs::JUNGFRAU) {
|
||||
} else if (detType == slsDetectorDefs::JUNGFRAU ||
|
||||
detType == slsDetectorDefs::MOENCH) {
|
||||
lblSpinHV->show();
|
||||
spinHV->show();
|
||||
lblGainMode->setEnabled(true);
|
||||
@ -100,9 +101,6 @@ void qTabSettings::SetupWidgetWindow() {
|
||||
} else if (detType == slsDetectorDefs::GOTTHARD) {
|
||||
comboHV->show();
|
||||
lblComboHV->show();
|
||||
} else if (detType == slsDetectorDefs::MOENCH) {
|
||||
lblSpinHV->show();
|
||||
spinHV->show();
|
||||
} else if (detType == slsDetectorDefs::GOTTHARD2) {
|
||||
lblSpinHV->show();
|
||||
spinHV->show();
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -8,35 +8,28 @@ add_executable(moenchDetectorServer_virtual
|
||||
../slsDetectorServer/src/blackfin.c
|
||||
../slsDetectorServer/src/common.c
|
||||
../slsDetectorServer/src/commonServerFunctions.c
|
||||
../slsDetectorServer/src/communication_funcs_UDP.c
|
||||
../slsDetectorServer/src/UDPPacketHeaderGenerator.c
|
||||
../slsDetectorServer/src/AD9257.c
|
||||
../slsDetectorServer/src/ALTERA_PLL.c
|
||||
../slsDetectorServer/src/LTC2620.c
|
||||
../slsDetectorServer/src/MAX1932.c
|
||||
../slsDetectorServer/src/programViaBlackfin.c
|
||||
../slsDetectorServer/src/loadPattern.c
|
||||
../slsDetectorServer/src/programViaBlackfin.c
|
||||
../slsDetectorServer/src/communication_funcs_UDP.c
|
||||
../slsDetectorServer/src/sharedMemory.c
|
||||
../../slsSupportLib/src/md5.c
|
||||
)
|
||||
|
||||
include_directories(
|
||||
target_include_directories(moenchDetectorServer_virtual
|
||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
../slsDetectorServer/include
|
||||
../../slsSupportLib/include
|
||||
../../slsDetectorSoftware/include/sls/
|
||||
)
|
||||
|
||||
target_include_directories(moenchDetectorServer_virtual
|
||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
target_compile_definitions(moenchDetectorServer_virtual
|
||||
PUBLIC MOENCHD VIRTUAL STOP_SERVER
|
||||
PUBLIC MOENCHD VIRTUAL STOP_SERVER #TEST_MOD_GEOMETRY
|
||||
)
|
||||
|
||||
target_link_libraries(moenchDetectorServer_virtual
|
||||
PUBLIC pthread rt slsProjectCSettings
|
||||
m
|
||||
)
|
||||
|
||||
set_target_properties(moenchDetectorServer_virtual PROPERTIES
|
||||
@ -44,7 +37,9 @@ set_target_properties(moenchDetectorServer_virtual PROPERTIES
|
||||
)
|
||||
|
||||
install(TARGETS moenchDetectorServer_virtual
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
EXPORT "${TARGETS_EXPORT_NAME}"
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
|
||||
configure_file(DefaultPattern_moench.txt ${CMAKE_BINARY_DIR}/bin/DefaultPattern_moench.txt COPYONLY)
|
||||
configure_file(config_moench.txt ${CMAKE_BINARY_DIR}/bin/config_moench.txt COPYONLY)
|
||||
configure_file(detid_moench.txt ${CMAKE_BINARY_DIR}/bin/detid_moench.txt COPYONLY)
|
||||
|
@ -1,301 +0,0 @@
|
||||
patword 0x0000 0x0008599f0418503a
|
||||
patword 0x0001 0x0008599f0418503a
|
||||
patword 0x0002 0x000859960418503a
|
||||
patword 0x0003 0x000859960418503a
|
||||
patword 0x0004 0x000859960418503a
|
||||
patword 0x0005 0x000859960418503a
|
||||
patword 0x0006 0x000859960418503a
|
||||
patword 0x0007 0x000859960418503a
|
||||
patword 0x0008 0x000859960418503a
|
||||
patword 0x0009 0x000859960418503a
|
||||
patword 0x000a 0x000859960418503a
|
||||
patword 0x000b 0x000859960418503a
|
||||
patword 0x000c 0x000859960418503a
|
||||
patword 0x000d 0x000859960418503a
|
||||
patword 0x000e 0x000859960418503a
|
||||
patword 0x000f 0x000859960418503a
|
||||
patword 0x0010 0x000859960418503a
|
||||
patword 0x0011 0x000859960418503a
|
||||
patword 0x0012 0x000859960418503a
|
||||
patword 0x0013 0x000859960418503a
|
||||
patword 0x0014 0x000859960418503a
|
||||
patword 0x0015 0x000859960418503a
|
||||
patword 0x0016 0x000819960418501a
|
||||
patword 0x0017 0x000819960418501a
|
||||
patword 0x0018 0x000819960418501a
|
||||
patword 0x0019 0x000819960418501a
|
||||
patword 0x001a 0x000819960418501a
|
||||
patword 0x001b 0x000819960418501a
|
||||
patword 0x001c 0x000819960418501a
|
||||
patword 0x001d 0x000819960418501a
|
||||
patword 0x001e 0x000819960418501a
|
||||
patword 0x001f 0x000819960418501a
|
||||
patword 0x0020 0x000819960418501a
|
||||
patword 0x0021 0x000819960418501a
|
||||
patword 0x0022 0x000819960418501a
|
||||
patword 0x0023 0x000819960418501a
|
||||
patword 0x0024 0x000819960418501a
|
||||
patword 0x0025 0x000819960418501a
|
||||
patword 0x0026 0x000819960418501a
|
||||
patword 0x0027 0x000819960418501a
|
||||
patword 0x0028 0x000819960418501a
|
||||
patword 0x0029 0x000819960418501a
|
||||
patword 0x002a 0x000819960418501a
|
||||
patword 0x002b 0x000819960418501a
|
||||
patword 0x002c 0x000819960418501a
|
||||
patword 0x002d 0x000819960418501a
|
||||
patword 0x002e 0x000819960418501a
|
||||
patword 0x002f 0x000819960418501a
|
||||
patword 0x0030 0x000819960008501a
|
||||
patword 0x0031 0x000819960008501a
|
||||
patword 0x0032 0x000819960008501a
|
||||
patword 0x0033 0x000819960008501a
|
||||
patword 0x0034 0x000819960008501a
|
||||
patword 0x0035 0x000819960008501a
|
||||
patword 0x0036 0x000819960008501a
|
||||
patword 0x0037 0x000819960008501a
|
||||
patword 0x0038 0x000819960008501a
|
||||
patword 0x0039 0x000819960008501a
|
||||
patword 0x003a 0x000819960008501a
|
||||
patword 0x003b 0x000819960008501a
|
||||
patword 0x003c 0x000819960008501a
|
||||
patword 0x003d 0x000819960008501a
|
||||
patword 0x003e 0x000819960008501a
|
||||
patword 0x003f 0x000819960008501a
|
||||
patword 0x0040 0x000819960008501a
|
||||
patword 0x0041 0x000819960008501a
|
||||
patword 0x0042 0x000819960008501a
|
||||
patword 0x0043 0x000819960008501a
|
||||
patword 0x0044 0x0008199f0008501a
|
||||
patword 0x0045 0x0008199f0008501a
|
||||
patword 0x0046 0x0008199f0008501a
|
||||
patword 0x0047 0x0008199f0008501a
|
||||
patword 0x0048 0x0008199f0008501a
|
||||
patword 0x0049 0x0008199f0008501a
|
||||
patword 0x004a 0x0008199f0008501a
|
||||
patword 0x004b 0x0008199f0008501a
|
||||
patword 0x004c 0x0008199f0008501a
|
||||
patword 0x004d 0x0008199f0008501a
|
||||
patword 0x004e 0x0008199f0008501a
|
||||
patword 0x004f 0x0008199f0008501a
|
||||
patword 0x0050 0x0008199f0008501a
|
||||
patword 0x0051 0x0008199f0008501a
|
||||
patword 0x0052 0x0008199f0008501a
|
||||
patword 0x0053 0x0008199f0008501a
|
||||
patword 0x0054 0x0008199f0008501a
|
||||
patword 0x0055 0x0008199f0008501a
|
||||
patword 0x0056 0x0008199f0008501a
|
||||
patword 0x0057 0x0008199f0008501a
|
||||
patword 0x0058 0x0008599f0008503a
|
||||
patword 0x0059 0x0008599f0008503a
|
||||
patword 0x005a 0x000c599f000850ba
|
||||
patword 0x005b 0x000c599f000850ba
|
||||
patword 0x005c 0x000c599f000850ba
|
||||
patword 0x005d 0x000c599f000850ba
|
||||
patword 0x005e 0x000c599f000850ba
|
||||
patword 0x005f 0x000c599f000850ba
|
||||
patword 0x0060 0x000c599f000850ba
|
||||
patword 0x0061 0x000c599f000850ba
|
||||
patword 0x0062 0x000c599f000850ba
|
||||
patword 0x0063 0x000c599f000850ba
|
||||
patword 0x0064 0x000c599f000850ba
|
||||
patword 0x0065 0x000c599f000850ba
|
||||
patword 0x0066 0x000c599f000850ba
|
||||
patword 0x0067 0x000c599f000850ba
|
||||
patword 0x0068 0x000c599f000850ba
|
||||
patword 0x0069 0x000c599f000850ba
|
||||
patword 0x006a 0x000c599f000850ba
|
||||
patword 0x006b 0x000c599f000850ba
|
||||
patword 0x006c 0x000c599f000850ba
|
||||
patword 0x006d 0x000c599f000850ba
|
||||
patword 0x006e 0x000c799f010858ba
|
||||
patword 0x006f 0x000c799f010858ba
|
||||
patword 0x0070 0x000c599f000850ba
|
||||
patword 0x0071 0x000c599f000850ba
|
||||
patword 0x0072 0x000c599f000850ba
|
||||
patword 0x0073 0x000c599f000850ba
|
||||
patword 0x0074 0x000c599f000850ba
|
||||
patword 0x0075 0x000c599f000850ba
|
||||
patword 0x0076 0x000c599f000850ba
|
||||
patword 0x0077 0x000c599f000850ba
|
||||
patword 0x0078 0x000c599f000850ba
|
||||
patword 0x0079 0x000c599f000850ba
|
||||
patword 0x007a 0x000c599f000850ba
|
||||
patword 0x007b 0x000c599f000850ba
|
||||
patword 0x007c 0x000c599f000850ba
|
||||
patword 0x007d 0x000c599f000850ba
|
||||
patword 0x007e 0x000c599f000850ba
|
||||
patword 0x007f 0x000c599f000850ba
|
||||
patword 0x0080 0x000c599f000850ba
|
||||
patword 0x0081 0x000c599f000850ba
|
||||
patword 0x0082 0x000c599f000850ba
|
||||
patword 0x0083 0x000c599f000850ba
|
||||
patword 0x0084 0x000c599f000850ba
|
||||
patword 0x0085 0x000c599f000850ba
|
||||
patword 0x0086 0x000c599f400850ba
|
||||
patword 0x0087 0x000c599f400850ba
|
||||
patword 0x0088 0x000c599f600850ba
|
||||
patword 0x0089 0x000c599f400850ba
|
||||
patword 0x008a 0x000c599f400850ba
|
||||
patword 0x008b 0x000c599f400850ba
|
||||
patword 0x008c 0x840c599f682e50ba
|
||||
patword 0x008d 0x840c599f482850ba
|
||||
patword 0x008e 0x840c599f000e50ba
|
||||
patword 0x008f 0x840c599f000850ba
|
||||
patword 0x0090 0x840c599f000e50ba
|
||||
patword 0x0091 0x840c599f000850ba
|
||||
patword 0x0092 0x840c599f000e50ba
|
||||
patword 0x0093 0x840c599f000850ba
|
||||
patword 0x0094 0x840c599f000e50ba
|
||||
patword 0x0095 0x840c599f000850ba
|
||||
patword 0x0096 0x840c599f000e50ba
|
||||
patword 0x0097 0x840c599f000850ba
|
||||
patword 0x0098 0x840c599f000e50ba
|
||||
patword 0x0099 0x840c599f000850ba
|
||||
patword 0x009a 0x840c599f000e50ba
|
||||
patword 0x009b 0x840c599f000850ba
|
||||
patword 0x009c 0x840c599f000e50ba
|
||||
patword 0x009d 0x840c599f000850ba
|
||||
patword 0x009e 0x840c599f000e50ba
|
||||
patword 0x009f 0x840c599f000850ba
|
||||
patword 0x00a0 0x840c599f000e50ba
|
||||
patword 0x00a1 0x840c599f000850ba
|
||||
patword 0x00a2 0x840c599f000e50ba
|
||||
patword 0x00a3 0x840c599f000850ba
|
||||
patword 0x00a4 0x840c599f000e50ba
|
||||
patword 0x00a5 0x840c599f000850ba
|
||||
patword 0x00a6 0x840c599f200e50ba
|
||||
patword 0x00a7 0x840c599f000850ba
|
||||
patword 0x00a8 0x840c599f000e50ba
|
||||
patword 0x00a9 0x840c599f000850ba
|
||||
patword 0x00aa 0x840c599f000e50ba
|
||||
patword 0x00ab 0x840c599f000850ba
|
||||
patword 0x00ac 0x840c599f000e50ba
|
||||
patword 0x00ad 0x840c599f000850ba
|
||||
patword 0x00ae 0x840c599f000e50ba
|
||||
patword 0x00af 0x840c599f000850ba
|
||||
patword 0x00b0 0x840c599f000e50ba
|
||||
patword 0x00b1 0x840c599f000850ba
|
||||
patword 0x00b2 0x840c599f000e50ba
|
||||
patword 0x00b3 0x840c599f000850ba
|
||||
patword 0x00b4 0x840c599f000e50ba
|
||||
patword 0x00b5 0x840c599f000850ba
|
||||
patword 0x00b6 0x840c599f000e50ba
|
||||
patword 0x00b7 0x840c599f000850ba
|
||||
patword 0x00b8 0x840c599f000e50ba
|
||||
patword 0x00b9 0x840c599f000850ba
|
||||
patword 0x00ba 0x840c599f000e50ba
|
||||
patword 0x00bb 0x840c599f000850ba
|
||||
patword 0x00bc 0x840c599f000e50ba
|
||||
patword 0x00bd 0x840c599f000850ba
|
||||
patword 0x00be 0x840c599f282e50ba
|
||||
patword 0x00bf 0x840c599f082850ba
|
||||
patword 0x00c0 0x840c599f000e50ba
|
||||
patword 0x00c1 0x840c599f000850ba
|
||||
patword 0x00c2 0x840c599f000e50ba
|
||||
patword 0x00c3 0x840c599f000850ba
|
||||
patword 0x00c4 0x840c599f000e50ba
|
||||
patword 0x00c5 0x840c599f000850ba
|
||||
patword 0x00c6 0x840c599f000e50ba
|
||||
patword 0x00c7 0x840c599f000850ba
|
||||
patword 0x00c8 0x840c599f000e50ba
|
||||
patword 0x00c9 0x840c599f000850ba
|
||||
patword 0x00ca 0x840c599f000e50ba
|
||||
patword 0x00cb 0x840c599f000850ba
|
||||
patword 0x00cc 0x840c599f000e50ba
|
||||
patword 0x00cd 0x840c599f000850ba
|
||||
patword 0x00ce 0x840c599f000e50ba
|
||||
patword 0x00cf 0x840c599f000850ba
|
||||
patword 0x00d0 0x840c599f000e50ba
|
||||
patword 0x00d1 0x840c599f000850ba
|
||||
patword 0x00d2 0x840c599f000e50ba
|
||||
patword 0x00d3 0x840c599f000850ba
|
||||
patword 0x00d4 0x840c599f000e50ba
|
||||
patword 0x00d5 0x840c599f000850ba
|
||||
patword 0x00d6 0x840c599f000e50ba
|
||||
patword 0x00d7 0x840c599f000850ba
|
||||
patword 0x00d8 0x840c599f200e50ba
|
||||
patword 0x00d9 0x840c599f000850ba
|
||||
patword 0x00da 0x840c599f000e50ba
|
||||
patword 0x00db 0x840c599f000850ba
|
||||
patword 0x00dc 0x840c599f000e50ba
|
||||
patword 0x00dd 0x840c599f000850ba
|
||||
patword 0x00de 0x840c599f000e50ba
|
||||
patword 0x00df 0x840c599f000850ba
|
||||
patword 0x00e0 0x840c599f000e50ba
|
||||
patword 0x00e1 0x840c599f000850ba
|
||||
patword 0x00e2 0x840c599f000e50ba
|
||||
patword 0x00e3 0x840c599f000850ba
|
||||
patword 0x00e4 0x840c599f000e50ba
|
||||
patword 0x00e5 0x840c599f000850ba
|
||||
patword 0x00e6 0x840c599f000e50ba
|
||||
patword 0x00e7 0x840c599f000850ba
|
||||
patword 0x00e8 0x840c599f000e50ba
|
||||
patword 0x00e9 0x840c599f000850ba
|
||||
patword 0x00ea 0x840c599f000e50ba
|
||||
patword 0x00eb 0x840c599f000850ba
|
||||
patword 0x00ec 0x840c599f000e50ba
|
||||
patword 0x00ed 0x840c599f000850ba
|
||||
patword 0x00ee 0x840c599f000e50ba
|
||||
patword 0x00ef 0x840c599f000850ba
|
||||
patword 0x00f0 0x040c599f000850ba
|
||||
patword 0x00f1 0x040c599f000850ba
|
||||
patword 0x00f2 0x000c599f000850ba
|
||||
patword 0x00f3 0x000c599f000850ba
|
||||
patword 0x00f4 0x0008599f200e503a
|
||||
patword 0x00f5 0x0008599f0008503a
|
||||
patword 0x00f6 0x0008599f200e503a
|
||||
patword 0x00f7 0x0008599f0008503a
|
||||
patword 0x00f8 0x0008599f0008503a
|
||||
patword 0x00f9 0x0008599f0008503a
|
||||
patword 0x00fa 0x0008599f0008503a
|
||||
patword 0x00fb 0x0008599f0008503a
|
||||
patword 0x00fc 0x0008599f0008503a
|
||||
patword 0x00fd 0x0008599f0008503a
|
||||
patword 0x00fe 0x0008599f0008503a
|
||||
patword 0x00ff 0x0008599f0008503a
|
||||
patword 0x0100 0x0008599f0008503a
|
||||
patword 0x0101 0x0008599f0008503a
|
||||
patword 0x0102 0x0008599f0008503a
|
||||
patword 0x0103 0x0008599f0008503a
|
||||
patword 0x0104 0x0008599f0008503a
|
||||
patword 0x0105 0x0008599f0008503a
|
||||
patword 0x0106 0x0008599f0008503a
|
||||
patword 0x0107 0x0008599f0008503a
|
||||
patword 0x0108 0x0008599f0008503a
|
||||
patword 0x0109 0x0008599f0008503a
|
||||
patword 0x010a 0x0008599f0008503a
|
||||
patword 0x010b 0x0008599f0008503a
|
||||
patword 0x010c 0x0008599f0008503a
|
||||
patword 0x010d 0x0008599f0008503a
|
||||
patword 0x010e 0x0008599f0008503a
|
||||
patword 0x010f 0x0008599f0008503a
|
||||
patword 0x0110 0x0008599f0008503a
|
||||
patword 0x0111 0x0008599f0008503a
|
||||
patioctrl 0x8f0effff6dbffdbf
|
||||
patlimits 0x0000 0x0110
|
||||
patloop 0 0x00be 0x00ef
|
||||
patnloop 0 199
|
||||
patloop 1 0x0400 0x0400
|
||||
patnloop 1 0
|
||||
patloop 2 0x0400 0x0400
|
||||
patnloop 2 0
|
||||
patwait 0 0x002e
|
||||
patwaittime 0 800
|
||||
patwait 1 0x0400
|
||||
patwaittime 1 0
|
||||
patwait 2 0x0400
|
||||
patwaittime 2 0
|
||||
|
||||
patloop 3 0x1fff 0x1fff
|
||||
patnloop 3 0
|
||||
patloop 4 0x1fff 0x1fff
|
||||
patnloop 4 0
|
||||
patloop 5 0x1fff 0x1fff
|
||||
patnloop 5 0
|
||||
patwait 3 0x1fff
|
||||
patwaittime 3 0
|
||||
patwait 4 0x1fff
|
||||
patwaittime 4 0
|
||||
patwait 5 0x1fff
|
||||
patwaittime 5 0
|
@ -4,22 +4,21 @@ current_dir = $(shell pwd)
|
||||
main_inc = ../slsDetectorServer/include/
|
||||
main_src = ../slsDetectorServer/src/
|
||||
support_lib = ../../slsSupportLib/include/
|
||||
det_lib = ../../slsDetectorSoftware/include/sls/
|
||||
md5_dir = ../../slsSupportLib/src/
|
||||
|
||||
CROSS = bfin-uclinux-
|
||||
CC = $(CROSS)gcc
|
||||
CFLAGS += -Wall -std=gnu99 -DMOENCHD -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(det_lib) -I$(current_dir) #-DVERBOSEI #-DVERBOSE
|
||||
LDLIBS += -lm -lrt -pthread
|
||||
CFLAGS += -Wall -std=gnu99 -DMOENCHD -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(current_dir) #-DVERBOSEI #-DVERBOSE
|
||||
LDLIBS += -lm -lrt -pthread
|
||||
PROGS = moenchDetectorServer
|
||||
DESTDIR ?= bin
|
||||
INSTMODE = 0777
|
||||
|
||||
SRCS = slsDetectorFunctionList.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)blackfin.c $(main_src)common.c $(main_src)commonServerFunctions.c $(main_src)communication_funcs_UDP.c $(main_src)UDPPacketHeaderGenerator.c $(main_src)AD9257.c $(main_src)ALTERA_PLL.c $(main_src)LTC2620.c $(main_src)MAX1932.c $(main_src)programViaBlackfin.c $(main_src)loadPattern.c $(main_src)/sharedMemory.c $(md5_dir)md5.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
SRCS = slsDetectorFunctionList.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)blackfin.c $(main_src)common.c $(main_src)commonServerFunctions.c $(main_src)AD9257.c $(main_src)ALTERA_PLL.c $(main_src)LTC2620.c $(main_src)MAX1932.c $(main_src)programViaBlackfin.c $(main_src)/sharedMemory.c $(md5_dir)md5.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
all: clean $(PROGS)
|
||||
version: clean versioning $(PROGS)
|
||||
|
||||
@ -35,12 +34,12 @@ versioning:
|
||||
$(PROGS): $(OBJS)
|
||||
# echo $(OBJS)
|
||||
mkdir -p $(DESTDIR)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
|
||||
mv $(PROGS) $(DESTDIR)
|
||||
cp DefaultPattern_moench.txt $(DESTDIR)
|
||||
cp config_moench.txt $(DESTDIR)
|
||||
cp detid_moench.txt $(DESTDIR)
|
||||
rm *.gdb
|
||||
rm $(main_src)*.o
|
||||
rm *.o $(md5_dir)*.o
|
||||
rm $(main_src)*.o $(md5_dir)*.o
|
||||
|
||||
clean:
|
||||
rm -rf $(DESTDIR)/$(PROGS) *.o *.gdb $(main_src)*.o $(md5_dir)*.o
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,301 +0,0 @@
|
||||
patword 0x0000 0x0008599f0418503a
|
||||
patword 0x0001 0x0008599f0418503a
|
||||
patword 0x0002 0x000859960418503a
|
||||
patword 0x0003 0x000859960418503a
|
||||
patword 0x0004 0x000859960418503a
|
||||
patword 0x0005 0x000859960418503a
|
||||
patword 0x0006 0x000859960418503a
|
||||
patword 0x0007 0x000859960418503a
|
||||
patword 0x0008 0x000859960418503a
|
||||
patword 0x0009 0x000859960418503a
|
||||
patword 0x000a 0x000859960418503a
|
||||
patword 0x000b 0x000859960418503a
|
||||
patword 0x000c 0x000859960418503a
|
||||
patword 0x000d 0x000859960418503a
|
||||
patword 0x000e 0x000859960418503a
|
||||
patword 0x000f 0x000859960418503a
|
||||
patword 0x0010 0x000859960418503a
|
||||
patword 0x0011 0x000859960418503a
|
||||
patword 0x0012 0x000859960418503a
|
||||
patword 0x0013 0x000859960418503a
|
||||
patword 0x0014 0x000859960418503a
|
||||
patword 0x0015 0x000859960418503a
|
||||
patword 0x0016 0x000819960418501a
|
||||
patword 0x0017 0x000819960418501a
|
||||
patword 0x0018 0x000819960418501a
|
||||
patword 0x0019 0x000819960418501a
|
||||
patword 0x001a 0x000819960418501a
|
||||
patword 0x001b 0x000819960418501a
|
||||
patword 0x001c 0x000819960418501a
|
||||
patword 0x001d 0x000819960418501a
|
||||
patword 0x001e 0x000819960418501a
|
||||
patword 0x001f 0x000819960418501a
|
||||
patword 0x0020 0x000819960418501a
|
||||
patword 0x0021 0x000819960418501a
|
||||
patword 0x0022 0x000819960418501a
|
||||
patword 0x0023 0x000819960418501a
|
||||
patword 0x0024 0x000819960418501a
|
||||
patword 0x0025 0x000819960418501a
|
||||
patword 0x0026 0x000819960418501a
|
||||
patword 0x0027 0x000819960418501a
|
||||
patword 0x0028 0x000819960418501a
|
||||
patword 0x0029 0x000819960418501a
|
||||
patword 0x002a 0x000819960418501a
|
||||
patword 0x002b 0x000819960418501a
|
||||
patword 0x002c 0x000819960418501a
|
||||
patword 0x002d 0x000819960418501a
|
||||
patword 0x002e 0x000819960418501a
|
||||
patword 0x002f 0x000819960418501a
|
||||
patword 0x0030 0x000819960008501a
|
||||
patword 0x0031 0x000819960008501a
|
||||
patword 0x0032 0x000819960008501a
|
||||
patword 0x0033 0x000819960008501a
|
||||
patword 0x0034 0x000819960008501a
|
||||
patword 0x0035 0x000819960008501a
|
||||
patword 0x0036 0x000819960008501a
|
||||
patword 0x0037 0x000819960008501a
|
||||
patword 0x0038 0x000819960008501a
|
||||
patword 0x0039 0x000819960008501a
|
||||
patword 0x003a 0x000819960008501a
|
||||
patword 0x003b 0x000819960008501a
|
||||
patword 0x003c 0x000819960008501a
|
||||
patword 0x003d 0x000819960008501a
|
||||
patword 0x003e 0x000819960008501a
|
||||
patword 0x003f 0x000819960008501a
|
||||
patword 0x0040 0x000819960008501a
|
||||
patword 0x0041 0x000819960008501a
|
||||
patword 0x0042 0x000819960008501a
|
||||
patword 0x0043 0x000819960008501a
|
||||
patword 0x0044 0x0008199f0008501a
|
||||
patword 0x0045 0x0008199f0008501a
|
||||
patword 0x0046 0x0008199f0008501a
|
||||
patword 0x0047 0x0008199f0008501a
|
||||
patword 0x0048 0x0008199f0008501a
|
||||
patword 0x0049 0x0008199f0008501a
|
||||
patword 0x004a 0x0008199f0008501a
|
||||
patword 0x004b 0x0008199f0008501a
|
||||
patword 0x004c 0x0008199f0008501a
|
||||
patword 0x004d 0x0008199f0008501a
|
||||
patword 0x004e 0x0008199f0008501a
|
||||
patword 0x004f 0x0008199f0008501a
|
||||
patword 0x0050 0x0008199f0008501a
|
||||
patword 0x0051 0x0008199f0008501a
|
||||
patword 0x0052 0x0008199f0008501a
|
||||
patword 0x0053 0x0008199f0008501a
|
||||
patword 0x0054 0x0008199f0008501a
|
||||
patword 0x0055 0x0008199f0008501a
|
||||
patword 0x0056 0x0008199f0008501a
|
||||
patword 0x0057 0x0008199f0008501a
|
||||
patword 0x0058 0x0008599f0008503a
|
||||
patword 0x0059 0x0008599f0008503a
|
||||
patword 0x005a 0x000c599f000850ba
|
||||
patword 0x005b 0x000c599f000850ba
|
||||
patword 0x005c 0x000c599f000850ba
|
||||
patword 0x005d 0x000c599f000850ba
|
||||
patword 0x005e 0x000c599f000850ba
|
||||
patword 0x005f 0x000c599f000850ba
|
||||
patword 0x0060 0x000c599f000850ba
|
||||
patword 0x0061 0x000c599f000850ba
|
||||
patword 0x0062 0x000c599f000850ba
|
||||
patword 0x0063 0x000c599f000850ba
|
||||
patword 0x0064 0x000c599f000850ba
|
||||
patword 0x0065 0x000c599f000850ba
|
||||
patword 0x0066 0x000c599f000850ba
|
||||
patword 0x0067 0x000c599f000850ba
|
||||
patword 0x0068 0x000c599f000850ba
|
||||
patword 0x0069 0x000c599f000850ba
|
||||
patword 0x006a 0x000c599f000850ba
|
||||
patword 0x006b 0x000c599f000850ba
|
||||
patword 0x006c 0x000c599f000850ba
|
||||
patword 0x006d 0x000c599f000850ba
|
||||
patword 0x006e 0x000c799f010858ba
|
||||
patword 0x006f 0x000c799f010858ba
|
||||
patword 0x0070 0x000c599f000850ba
|
||||
patword 0x0071 0x000c599f000850ba
|
||||
patword 0x0072 0x000c599f000850ba
|
||||
patword 0x0073 0x000c599f000850ba
|
||||
patword 0x0074 0x000c599f000850ba
|
||||
patword 0x0075 0x000c599f000850ba
|
||||
patword 0x0076 0x000c599f000850ba
|
||||
patword 0x0077 0x000c599f000850ba
|
||||
patword 0x0078 0x000c599f000850ba
|
||||
patword 0x0079 0x000c599f000850ba
|
||||
patword 0x007a 0x000c599f000850ba
|
||||
patword 0x007b 0x000c599f000850ba
|
||||
patword 0x007c 0x000c599f000850ba
|
||||
patword 0x007d 0x000c599f000850ba
|
||||
patword 0x007e 0x000c599f000850ba
|
||||
patword 0x007f 0x000c599f000850ba
|
||||
patword 0x0080 0x000c599f000850ba
|
||||
patword 0x0081 0x000c599f000850ba
|
||||
patword 0x0082 0x000c599f000850ba
|
||||
patword 0x0083 0x000c599f000850ba
|
||||
patword 0x0084 0x000c599f000850ba
|
||||
patword 0x0085 0x000c599f000850ba
|
||||
patword 0x0086 0x000c599f400850ba
|
||||
patword 0x0087 0x000c599f400850ba
|
||||
patword 0x0088 0x000c599f600850ba
|
||||
patword 0x0089 0x000c599f400850ba
|
||||
patword 0x008a 0x000c599f400850ba
|
||||
patword 0x008b 0x000c599f400850ba
|
||||
patword 0x008c 0x840c599f682e50ba
|
||||
patword 0x008d 0x840c599f482850ba
|
||||
patword 0x008e 0x840c599f000e50ba
|
||||
patword 0x008f 0x840c599f000850ba
|
||||
patword 0x0090 0x840c599f000e50ba
|
||||
patword 0x0091 0x840c599f000850ba
|
||||
patword 0x0092 0x840c599f000e50ba
|
||||
patword 0x0093 0x840c599f000850ba
|
||||
patword 0x0094 0x840c599f000e50ba
|
||||
patword 0x0095 0x840c599f000850ba
|
||||
patword 0x0096 0x840c599f000e50ba
|
||||
patword 0x0097 0x840c599f000850ba
|
||||
patword 0x0098 0x840c599f000e50ba
|
||||
patword 0x0099 0x840c599f000850ba
|
||||
patword 0x009a 0x840c599f000e50ba
|
||||
patword 0x009b 0x840c599f000850ba
|
||||
patword 0x009c 0x840c599f000e50ba
|
||||
patword 0x009d 0x840c599f000850ba
|
||||
patword 0x009e 0x840c599f000e50ba
|
||||
patword 0x009f 0x840c599f000850ba
|
||||
patword 0x00a0 0x840c599f000e50ba
|
||||
patword 0x00a1 0x840c599f000850ba
|
||||
patword 0x00a2 0x840c599f000e50ba
|
||||
patword 0x00a3 0x840c599f000850ba
|
||||
patword 0x00a4 0x840c599f000e50ba
|
||||
patword 0x00a5 0x840c599f000850ba
|
||||
patword 0x00a6 0x840c599f200e50ba
|
||||
patword 0x00a7 0x840c599f000850ba
|
||||
patword 0x00a8 0x840c599f000e50ba
|
||||
patword 0x00a9 0x840c599f000850ba
|
||||
patword 0x00aa 0x840c599f000e50ba
|
||||
patword 0x00ab 0x840c599f000850ba
|
||||
patword 0x00ac 0x840c599f000e50ba
|
||||
patword 0x00ad 0x840c599f000850ba
|
||||
patword 0x00ae 0x840c599f000e50ba
|
||||
patword 0x00af 0x840c599f000850ba
|
||||
patword 0x00b0 0x840c599f000e50ba
|
||||
patword 0x00b1 0x840c599f000850ba
|
||||
patword 0x00b2 0x840c599f000e50ba
|
||||
patword 0x00b3 0x840c599f000850ba
|
||||
patword 0x00b4 0x840c599f000e50ba
|
||||
patword 0x00b5 0x840c599f000850ba
|
||||
patword 0x00b6 0x840c599f000e50ba
|
||||
patword 0x00b7 0x840c599f000850ba
|
||||
patword 0x00b8 0x840c599f000e50ba
|
||||
patword 0x00b9 0x840c599f000850ba
|
||||
patword 0x00ba 0x840c599f000e50ba
|
||||
patword 0x00bb 0x840c599f000850ba
|
||||
patword 0x00bc 0x840c599f000e50ba
|
||||
patword 0x00bd 0x840c599f000850ba
|
||||
patword 0x00be 0x840c599f282e50ba
|
||||
patword 0x00bf 0x840c599f082850ba
|
||||
patword 0x00c0 0x840c599f000e50ba
|
||||
patword 0x00c1 0x840c599f000850ba
|
||||
patword 0x00c2 0x840c599f000e50ba
|
||||
patword 0x00c3 0x840c599f000850ba
|
||||
patword 0x00c4 0x840c599f000e50ba
|
||||
patword 0x00c5 0x840c599f000850ba
|
||||
patword 0x00c6 0x840c599f000e50ba
|
||||
patword 0x00c7 0x840c599f000850ba
|
||||
patword 0x00c8 0x840c599f000e50ba
|
||||
patword 0x00c9 0x840c599f000850ba
|
||||
patword 0x00ca 0x840c599f000e50ba
|
||||
patword 0x00cb 0x840c599f000850ba
|
||||
patword 0x00cc 0x840c599f000e50ba
|
||||
patword 0x00cd 0x840c599f000850ba
|
||||
patword 0x00ce 0x840c599f000e50ba
|
||||
patword 0x00cf 0x840c599f000850ba
|
||||
patword 0x00d0 0x840c599f000e50ba
|
||||
patword 0x00d1 0x840c599f000850ba
|
||||
patword 0x00d2 0x840c599f000e50ba
|
||||
patword 0x00d3 0x840c599f000850ba
|
||||
patword 0x00d4 0x840c599f000e50ba
|
||||
patword 0x00d5 0x840c599f000850ba
|
||||
patword 0x00d6 0x840c599f000e50ba
|
||||
patword 0x00d7 0x840c599f000850ba
|
||||
patword 0x00d8 0x840c599f200e50ba
|
||||
patword 0x00d9 0x840c599f000850ba
|
||||
patword 0x00da 0x840c599f000e50ba
|
||||
patword 0x00db 0x840c599f000850ba
|
||||
patword 0x00dc 0x840c599f000e50ba
|
||||
patword 0x00dd 0x840c599f000850ba
|
||||
patword 0x00de 0x840c599f000e50ba
|
||||
patword 0x00df 0x840c599f000850ba
|
||||
patword 0x00e0 0x840c599f000e50ba
|
||||
patword 0x00e1 0x840c599f000850ba
|
||||
patword 0x00e2 0x840c599f000e50ba
|
||||
patword 0x00e3 0x840c599f000850ba
|
||||
patword 0x00e4 0x840c599f000e50ba
|
||||
patword 0x00e5 0x840c599f000850ba
|
||||
patword 0x00e6 0x840c599f000e50ba
|
||||
patword 0x00e7 0x840c599f000850ba
|
||||
patword 0x00e8 0x840c599f000e50ba
|
||||
patword 0x00e9 0x840c599f000850ba
|
||||
patword 0x00ea 0x840c599f000e50ba
|
||||
patword 0x00eb 0x840c599f000850ba
|
||||
patword 0x00ec 0x840c599f000e50ba
|
||||
patword 0x00ed 0x840c599f000850ba
|
||||
patword 0x00ee 0x840c599f000e50ba
|
||||
patword 0x00ef 0x840c599f000850ba
|
||||
patword 0x00f0 0x040c599f000850ba
|
||||
patword 0x00f1 0x040c599f000850ba
|
||||
patword 0x00f2 0x000c599f000850ba
|
||||
patword 0x00f3 0x000c599f000850ba
|
||||
patword 0x00f4 0x0008599f200e503a
|
||||
patword 0x00f5 0x0008599f0008503a
|
||||
patword 0x00f6 0x0008599f200e503a
|
||||
patword 0x00f7 0x0008599f0008503a
|
||||
patword 0x00f8 0x0008599f0008503a
|
||||
patword 0x00f9 0x0008599f0008503a
|
||||
patword 0x00fa 0x0008599f0008503a
|
||||
patword 0x00fb 0x0008599f0008503a
|
||||
patword 0x00fc 0x0008599f0008503a
|
||||
patword 0x00fd 0x0008599f0008503a
|
||||
patword 0x00fe 0x0008599f0008503a
|
||||
patword 0x00ff 0x0008599f0008503a
|
||||
patword 0x0100 0x0008599f0008503a
|
||||
patword 0x0101 0x0008599f0008503a
|
||||
patword 0x0102 0x0008599f0008503a
|
||||
patword 0x0103 0x0008599f0008503a
|
||||
patword 0x0104 0x0008599f0008503a
|
||||
patword 0x0105 0x0008599f0008503a
|
||||
patword 0x0106 0x0008599f0008503a
|
||||
patword 0x0107 0x0008599f0008503a
|
||||
patword 0x0108 0x0008599f0008503a
|
||||
patword 0x0109 0x0008599f0008503a
|
||||
patword 0x010a 0x0008599f0008503a
|
||||
patword 0x010b 0x0008599f0008503a
|
||||
patword 0x010c 0x0008599f0008503a
|
||||
patword 0x010d 0x0008599f0008503a
|
||||
patword 0x010e 0x0008599f0008503a
|
||||
patword 0x010f 0x0008599f0008503a
|
||||
patword 0x0110 0x0008599f0008503a
|
||||
patword 0x0111 0x0008599f0008503a
|
||||
patioctrl 0x8f0effff6dbffdbf
|
||||
patlimits 0x0000 0x0110
|
||||
patloop 0 0x00be 0x00ef
|
||||
patnloop 0 199
|
||||
patloop 1 0x0400 0x0400
|
||||
patnloop 1 0
|
||||
patloop 2 0x0400 0x0400
|
||||
patnloop 2 0
|
||||
patwait 0 0x002e
|
||||
patwaittime 0 800
|
||||
patwait 1 0x0400
|
||||
patwaittime 1 0
|
||||
patwait 2 0x0400
|
||||
patwaittime 2 0
|
||||
|
||||
patloop 3 0x1fff 0x1fff
|
||||
patnloop 3 0
|
||||
patloop 4 0x1fff 0x1fff
|
||||
patnloop 4 0
|
||||
patloop 5 0x1fff 0x1fff
|
||||
patnloop 5 0
|
||||
patwait 3 0x1fff
|
||||
patwaittime 3 0
|
||||
patwait 4 0x1fff
|
||||
patwaittime 4 0
|
||||
patwait 5 0x1fff
|
||||
patwaittime 5 0
|
Binary file not shown.
4
slsDetectorServers/moenchDetectorServer/config_moench.txt
Executable file
4
slsDetectorServers/moenchDetectorServer/config_moench.txt
Executable file
@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
#chip version version (multiplied by 10)
|
||||
chipversion 11
|
1
slsDetectorServers/moenchDetectorServer/detid_moench.txt
Executable file
1
slsDetectorServers/moenchDetectorServer/detid_moench.txt
Executable file
@ -0,0 +1 @@
|
||||
1234
|
File diff suppressed because it is too large
Load Diff
@ -4,18 +4,147 @@
|
||||
#include "RegisterDefs.h"
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
#define MIN_REQRD_VRSN_T_RD_API 0x180314
|
||||
#define REQRD_FRMWR_VRSN 0x221205
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x221130 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x221130 // 2.0 pcb (version = 011)
|
||||
|
||||
#define NUM_HARDWARE_VERSIONS (1)
|
||||
#define NUM_HARDWARE_VERSIONS (2)
|
||||
#define HARDWARE_VERSION_NUMBERS \
|
||||
{ 0x1 }
|
||||
{ 0x2, 0x3 }
|
||||
#define HARDWARE_VERSION_NAMES \
|
||||
{ "1.0" }
|
||||
{ "1.0", "2.0" }
|
||||
|
||||
#define ID_FILE ("detid_moench.txt")
|
||||
#define CONFIG_FILE ("config_moench.txt")
|
||||
#define LINKED_SERVER_NAME "moenchDetectorServer"
|
||||
|
||||
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
||||
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
||||
|
||||
/* Hardware Definitions */
|
||||
#define NCHAN (400 * 400)
|
||||
#define NCHIP (1)
|
||||
#define NDAC (8)
|
||||
#define DYNAMIC_RANGE (16)
|
||||
#define NUM_BYTES_PER_PIXEL (DYNAMIC_RANGE / 8)
|
||||
#define DATA_BYTES (NCHIP * NCHAN * NUM_BYTES_PER_PIXEL)
|
||||
#define CLK_RUN (40) // MHz
|
||||
#define CLK_SYNC (20) // MHz
|
||||
#define ADC_CLK_INDEX (1)
|
||||
#define DBIT_CLK_INDEX (0)
|
||||
|
||||
/** Default Parameters */
|
||||
#define DEFAULT_NUM_FRAMES (1)
|
||||
#define DEFAULT_STARTING_FRAME_NUMBER (1)
|
||||
#define DEFAULT_NUM_CYCLES (1)
|
||||
#define DEFAULT_EXPTIME (10 * 1000) // ns
|
||||
#define DEFAULT_PERIOD (2 * 1000 * 1000) // ns
|
||||
#define DEFAULT_DELAY (0)
|
||||
#define DEFAULT_HIGH_VOLTAGE (0)
|
||||
#define DEFAULT_TIMING_MODE (AUTO_TIMING)
|
||||
#define DEFAULT_SETTINGS (GAIN0)
|
||||
#define DEFAULT_GAINMODE (DYNAMIC)
|
||||
#define DEFAULT_TX_UDP_PORT (0x7e9a)
|
||||
#define DEFAULT_TMP_THRSHLD (65 * 1000) // milli degree Celsius
|
||||
#define DEFAULT_NUM_STRG_CLLS (0)
|
||||
#define DEFAULT_STRG_CLL_STRT (0xf)
|
||||
#define DEFAULT_STRG_CLL_STRT_CHIP11 (0x3)
|
||||
#define DEFAULT_STRG_CLL_DLY (0)
|
||||
#define DEFAULT_FLIP_ROWS (0)
|
||||
#define DEFAULT_FILTER_RESISTOR (1) // higher resistor
|
||||
#define DEFAULT_FILTER_CELL (0)
|
||||
|
||||
#define HIGHVOLTAGE_MIN (60)
|
||||
#define HIGHVOLTAGE_MAX (200)
|
||||
#define DAC_MIN_MV (0)
|
||||
#define DAC_MAX_MV (2500)
|
||||
#define MAX_FILTER_CELL_VAL (12)
|
||||
|
||||
#define READ_N_ROWS_MULTIPLE (16) // 400 rows/50packets * 2 interfaces
|
||||
#define MIN_ROWS_PER_READOUT (16)
|
||||
#define MAX_ROWS_PER_READOUT (400)
|
||||
#define ROWS_PER_PACKET (8)
|
||||
|
||||
/* Defines in the Firmware */
|
||||
#define MAX_TIMESLOT_VAL (0x1F)
|
||||
#define MAX_THRESHOLD_TEMP_VAL (127999) // millidegrees
|
||||
#define MAX_STORAGE_CELL_VAL (15) // 0xF
|
||||
#define MAX_STORAGE_CELL_CHIP11_VAL (3)
|
||||
#define MAX_STORAGE_CELL_DLY_NS_VAL (ASIC_CTRL_EXPSRE_TMR_MAX_VAL)
|
||||
#define ACQ_TIME_MIN_CLOCK (2)
|
||||
#define ASIC_FILTER_MAX_RES_VALUE (1)
|
||||
#define MAX_SELECT_CHIP10_VAL (63)
|
||||
|
||||
#define MAX_PHASE_SHIFTS (240)
|
||||
#define BIT16_MASK (0xFFFF)
|
||||
|
||||
#define GAIN_VAL_OFST (14)
|
||||
#define GAIN_VAL_MSK (0x3 << GAIN_VAL_OFST)
|
||||
|
||||
// pipeline
|
||||
#define ADC_PORT_INVERT_VAL (0x5A5A5A5A)
|
||||
#define ADC_PORT_INVERT_BOARD2_VAL (0x453b2a9c)
|
||||
|
||||
// 2.0 pcb (chipv1.1)
|
||||
#define SAMPLE_ADC_FULL_SPEED_CHIP11 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_0_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x0000
|
||||
#define SAMPLE_ADC_HALF_SPEED_CHIP11 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_1_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1110
|
||||
#define SAMPLE_ADC_QUARTER_SPEED_CHIP11 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_2_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2230
|
||||
|
||||
#define ADC_PHASE_FULL_SPEED_CHIP11 (160)
|
||||
#define ADC_PHASE_HALF_SPEED_CHIP11 (160)
|
||||
#define ADC_PHASE_QUARTER_SPEED_CHIP11 (160)
|
||||
|
||||
#define DBIT_PHASE_FULL_SPEED_CHIP11 (80)
|
||||
#define DBIT_PHASE_HALF_SPEED_CHIP11 (135)
|
||||
#define DBIT_PHASE_QUARTER_SPEED_CHIP11 (135)
|
||||
|
||||
#define ADC_OFST_FULL_SPEED_VAL_CHIP11 (0x10)
|
||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP11 (0x08)
|
||||
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP11 (0x04)
|
||||
|
||||
// 2.0 pcb (chipv1.0)
|
||||
#define SAMPLE_ADC_FULL_SPEED_CHIP10 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_1_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x0100
|
||||
#define SAMPLE_ADC_HALF_SPEED_CHIP10 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1310
|
||||
#define SAMPLE_ADC_QUARTER_SPEED_CHIP10 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2630
|
||||
|
||||
#define ADC_PHASE_FULL_SPEED_CHIP10 (160)
|
||||
#define ADC_PHASE_HALF_SPEED_CHIP10 (160)
|
||||
#define ADC_PHASE_QUARTER_SPEED_CHIP10 (160)
|
||||
|
||||
#define DBIT_PHASE_FULL_SPEED_CHIP10 (125)
|
||||
#define DBIT_PHASE_HALF_SPEED_CHIP10 (175)
|
||||
#define DBIT_PHASE_QUARTER_SPEED_CHIP10 (175)
|
||||
|
||||
#define ADC_OFST_FULL_SPEED_VAL_CHIP10 (0x10)
|
||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP10 (0x08)
|
||||
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP10 (0x04)
|
||||
|
||||
// 1.0 pcb (2 resistor network)
|
||||
#define SAMPLE_ADC_HALF_SPEED_BOARD2 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1300
|
||||
#define SAMPLE_ADC_QUARTER_SPEED_BOARD2 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2610
|
||||
|
||||
#define ADC_PHASE_HALF_SPEED_BOARD2 (110)
|
||||
#define ADC_PHASE_QUARTER_SPEED_BOARD2 (220)
|
||||
|
||||
#define DBIT_PHASE_HALF_SPEED_BOARD2 (150)
|
||||
#define DBIT_PHASE_QUARTER_SPEED_BOARD2 (150)
|
||||
|
||||
#define ADC_OFST_HALF_SPEED_BOARD2_VAL (0x10)
|
||||
#define ADC_OFST_QUARTER_SPEED_BOARD2_VAL (0x08)
|
||||
|
||||
/* Struct Definitions */
|
||||
typedef struct udp_header_struct {
|
||||
@ -45,111 +174,44 @@ typedef struct udp_header_struct {
|
||||
#define UDP_IP_HEADER_LENGTH_BYTES (28)
|
||||
|
||||
/* Enums */
|
||||
enum ADCINDEX { TEMP_FPGA, TEMP_ADC };
|
||||
enum DACINDEX {
|
||||
MO_VBP_COLBUF,
|
||||
MO_VIPRE,
|
||||
MO_VIN_CM,
|
||||
MO_VB_SDA,
|
||||
MO_VCASC_SFP,
|
||||
MO_VOUT_CM,
|
||||
MO_VIPRE_CDS,
|
||||
MO_IBIAS_SFP
|
||||
J_VB_COMP,
|
||||
J_VDD_PROT,
|
||||
J_VIN_COM,
|
||||
J_VREF_PRECH,
|
||||
J_VB_PIXBUF,
|
||||
J_VB_DS,
|
||||
J_VREF_DS,
|
||||
J_VREF_COMP
|
||||
};
|
||||
#define DAC_NAMES \
|
||||
"vbp_colbuf", "vipre", "vin_cm", "vb_sda", "vcasc_sfp", "vout_cm", \
|
||||
"vipre_cds", "ibias_sfp"
|
||||
"vb_comp", "vdd_prot", "vin_com", "vref_prech", "vb_pixbuf", "vb_ds", \
|
||||
"vref_ds", "vref_comp"
|
||||
|
||||
#define DEFAULT_DAC_VALS \
|
||||
{ \
|
||||
1300, /* MO_VBP_COLBUF */ \
|
||||
1000, /* MO_VIPRE */ \
|
||||
1400, /* MO_VIN_CM */ \
|
||||
680, /* MO_VB_SDA */ \
|
||||
1428, /* MO_VCASC_SFP */ \
|
||||
1200, /* MO_VOUT_CM */ \
|
||||
800, /* MO_VIPRE_CDS */ \
|
||||
900 /* MO_IBIAS_SFP */ \
|
||||
1220, /* J_VB_COMP */ \
|
||||
3000, /* J_VDD_PROT */ \
|
||||
1053, /* J_VIN_COM */ \
|
||||
1450, /* J_VREF_PRECH */ \
|
||||
750, /* J_VB_PIXBUF */ \
|
||||
1000, /* J_VB_DS */ \
|
||||
480, /* J_VREF_DS */ \
|
||||
420 /* J_VREF_COMP */ \
|
||||
};
|
||||
|
||||
enum CLKINDEX { RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS };
|
||||
#define CLK_NAMES "run", "adc", "sync", "dbit"
|
||||
enum MASTERINDEX { MASTER_HARDWARE, OW_MASTER, OW_SLAVE };
|
||||
#define MASTER_NAMES "hardware", "master", "slave"
|
||||
|
||||
/* Hardware Definitions */
|
||||
#define NCHAN (32)
|
||||
#define NCHIP (1)
|
||||
#define NDAC (8)
|
||||
#define DYNAMIC_RANGE (16)
|
||||
#define NUM_BYTES_PER_PIXEL (DYNAMIC_RANGE / 8)
|
||||
#define CLK_FREQ (156.25) /* MHz */
|
||||
#define NSAMPLES_PER_ROW (25)
|
||||
#define NCHANS_PER_ADC (25)
|
||||
#define NUMSETTINGS (2)
|
||||
#define NSPECIALDACS (3)
|
||||
#define SPECIALDACINDEX {J_VREF_PRECH, J_VREF_DS, J_VREF_COMP};
|
||||
#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS \
|
||||
{ 1450, 480, 420 }
|
||||
#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS \
|
||||
{ 1550, 450, 620 }
|
||||
|
||||
/** Default Parameters */
|
||||
#define DEFAULT_PATTERN_FILE ("DefaultPattern_moench.txt")
|
||||
#define DEFAULT_STARTING_FRAME_NUMBER (1)
|
||||
#define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL)
|
||||
#define DEFAULT_NUM_SAMPLES (5000)
|
||||
#define DEFAULT_EXPTIME (0)
|
||||
#define DEFAULT_NUM_FRAMES (1)
|
||||
#define DEFAULT_NUM_CYCLES (1)
|
||||
#define DEFAULT_PERIOD (1 * 1000 * 1000) // ns
|
||||
#define DEFAULT_DELAY (0)
|
||||
#define DEFAULT_HIGH_VOLTAGE (0)
|
||||
#define DEFAULT_VLIMIT (-100)
|
||||
#define DEFAULT_TIMING_MODE (AUTO_TIMING)
|
||||
#define DEFAULT_TX_UDP_PORT (0x7e9a)
|
||||
|
||||
#define DEFAULT_RUN_CLK_AT_STARTUP (200) // 40
|
||||
#define DEFAULT_ADC_CLK_AT_STARTUP (40) // 20
|
||||
#define DEFAULT_SYNC_CLK_AT_STARTUP (40) // 20
|
||||
#define DEFAULT_DBIT_CLK_AT_STARTUP (200)
|
||||
|
||||
#define DEFAULT_RUN_CLK (40)
|
||||
#define DEFAULT_ADC_CLK (20)
|
||||
#define DEFAULT_DBIT_CLK (40)
|
||||
#define DEFAULT_ADC_PHASE_DEG (30)
|
||||
|
||||
#define DEFAULT_PIPELINE (15)
|
||||
#define DEFAULT_SETTINGS (G4_HIGHGAIN)
|
||||
|
||||
#define UDP_HEADER_MAX_FRAME_VALUE (0xFFFFFFFFFFFF)
|
||||
|
||||
// settings
|
||||
#define DEFAULT_PATMASK (0x00000C800000800AULL)
|
||||
#define G1_HIGHGAIN_PATSETBIT (0x00000C0000008008ULL)
|
||||
#define G1_LOWGAIN_PATSETBIT (0x0000040000008000ULL)
|
||||
#define G2_HIGHCAP_HIGHGAIN_PATSETBIT (0x0000080000000008ULL)
|
||||
#define G2_HIGHCAP_LOWGAIN_PATSETBIT (0x0000000000000000ULL)
|
||||
#define G2_LOWCAP_HIGHGAIN_PATSETBIT (0x00000C800000800AULL)
|
||||
#define G2_LOWCAP_LOWGAIN_PATSETBIT (0x0000048000008002ULL)
|
||||
#define G4_HIGHGAIN_PATSETBIT (0x000008800000000AULL)
|
||||
#define G4_LOWGAIN_PATSETBIT (0x0000008000000002ULL)
|
||||
|
||||
#define HIGHVOLTAGE_MIN (60)
|
||||
#define HIGHVOLTAGE_MAX (200) // min dac val
|
||||
#define DAC_MIN_MV (0)
|
||||
#define DAC_MAX_MV (2500)
|
||||
|
||||
/* Defines in the Firmware */
|
||||
#define DIGITAL_IO_DELAY_MAXIMUM_PS \
|
||||
((OUTPUT_DELAY_0_OTPT_STTNG_MSK >> OUTPUT_DELAY_0_OTPT_STTNG_OFST) * \
|
||||
OUTPUT_DELAY_0_OTPT_STTNG_STEPS)
|
||||
#define MAX_PHASE_SHIFTS_STEPS (8)
|
||||
|
||||
#define WAIT_TME_US_FR_ACQDONE_REG \
|
||||
(100) // wait time in us after acquisition done to ensure there is no data
|
||||
// in fifo
|
||||
#define WAIT_TIME_US_PLL (10 * 1000)
|
||||
#define WAIT_TIME_US_STP_ACQ (100)
|
||||
#define WAIT_TIME_CONFIGURE_MAC (2 * 1000 * 1000)
|
||||
#define WAIT_TIME_PATTERN_READ (10)
|
||||
#define WAIT_TIME_1US_FOR_LOOP_CNT (50) // around 30 is 1 us in blackfin
|
||||
|
||||
/* MSB & LSB DEFINES */
|
||||
#define MSB_OF_64_BIT_REG_OFST (32)
|
||||
#define LSB_OF_64_BIT_REG_OFST (0)
|
||||
#define BIT32_MSK (0xFFFFFFFF)
|
||||
#define BIT16_MASK (0xFFFF)
|
||||
|
||||
#define ADC_PORT_INVERT_VAL (0x4a342593)
|
||||
#define MAXIMUM_ADC_CLK (20)
|
||||
#define PLL_VCO_FREQ_MHZ (800)
|
||||
enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G };
|
||||
enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
||||
#define CLK_NAMES "run", "adc", "dbit"
|
||||
|
Binary file not shown.
@ -4,7 +4,7 @@
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
/**
|
||||
* Set Defines
|
||||
* @param creg control register
|
||||
@ -14,8 +14,9 @@
|
||||
* @param prmsk pll reset mask
|
||||
* @param amsk address mask
|
||||
* @param aofst address offset
|
||||
* @param wd2msk write parameter mask for pll for dbit clock (Jungfrau only)
|
||||
* @param clk2Index clkIndex of second pll (Jungfrau only)
|
||||
* @param wd2msk write parameter mask for pll for dbit clock (Jungfrau/moench
|
||||
* only)
|
||||
* @param clk2Index clkIndex of second pll (Jungfrau/moench only)
|
||||
*/
|
||||
void ALTERA_PLL_SetDefines(uint32_t creg, uint32_t preg, uint32_t rprmsk,
|
||||
uint32_t wpmsk, uint32_t prmsk, uint32_t amsk,
|
||||
@ -50,8 +51,8 @@ void ALTERA_PLL_ResetPLLAndReconfiguration();
|
||||
* Set PLL Reconfig register
|
||||
* @param reg register
|
||||
* @param val value
|
||||
* @param useDefaultWRMask only jungfrau for dbit clk (clkindex1, use second WR
|
||||
* mask)
|
||||
* @param useDefaultWRMask only jungfrau/moench for dbit clk (clkindex1, use
|
||||
* second WR mask)
|
||||
*/
|
||||
void ALTERA_PLL_SetPllReconfigReg(uint32_t reg, uint32_t val,
|
||||
int useSecondWRMask);
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include "clogger.h"
|
||||
|
||||
void initializePatternAddresses();
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#ifdef CHIPTESTBOARDD
|
||||
#ifdef VIRTUAL
|
||||
void initializePatternWord();
|
||||
#endif
|
||||
|
@ -6,8 +6,8 @@
|
||||
#include "AD9252.h" // old board compatibility
|
||||
#include "clogger.h" // runState(enum TLogLevel)
|
||||
#endif
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD)
|
||||
#include "AD9257.h" // commonServerFunctions.h, blackfin.h, ansi.h
|
||||
#endif
|
||||
|
||||
@ -20,8 +20,8 @@
|
||||
|
||||
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#include "nios.h"
|
||||
#elif defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD)
|
||||
#elif defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD)
|
||||
#include "blackfin.h"
|
||||
#endif
|
||||
|
||||
@ -61,15 +61,16 @@ typedef struct udpStruct_s {
|
||||
int isInitCheckDone();
|
||||
int getInitResult(char **mess);
|
||||
void basictests();
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int checkType();
|
||||
int testFpga();
|
||||
int testBus();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARDD) || \
|
||||
((defined(EIGERD) || defined(JUNGFRAUD)) && defined(VIRTUAL))
|
||||
((defined(EIGERD) || defined(JUNGFRAUD) || defined(MOENCHD)) && \
|
||||
defined(VIRTUAL))
|
||||
void setTestImageMode(int ival);
|
||||
int getTestImageMode();
|
||||
#endif
|
||||
@ -82,14 +83,14 @@ u_int64_t getFirmwareAPIVersion();
|
||||
void getHardwareVersion(char *version);
|
||||
u_int16_t getHardwareVersionNumber();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD)
|
||||
u_int16_t getHardwareSerialNumber();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D) || defined(MYTHEN3D) || \
|
||||
defined(GOTTHARDD)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARD2D) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARDD)
|
||||
int isHardwareVersion_1_0();
|
||||
#endif
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int getChipVersion();
|
||||
void setChipVersion(int version);
|
||||
#endif
|
||||
@ -98,7 +99,7 @@ u_int32_t getDetectorNumber();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARD2D) || defined(EIGERD) || defined(MYTHEN3D) || \
|
||||
defined(JUNGFRAUD)
|
||||
defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int getModuleId(int *ret, char *mess);
|
||||
int updateModuleId();
|
||||
#ifndef EIGERD
|
||||
@ -125,7 +126,7 @@ void checkVirtual9MFlag();
|
||||
void allocateDetectorStructureMemory();
|
||||
#endif
|
||||
void setupDetector();
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
int updateDatabytesandAllocateRAM();
|
||||
void updateDataBytes();
|
||||
#endif
|
||||
@ -141,7 +142,8 @@ void setASICDefaults();
|
||||
#ifdef MYTHEN3D
|
||||
void setADIFDefaults();
|
||||
#endif
|
||||
#if defined(GOTTHARD2D) || defined(EIGERD) || defined(JUNGFRAUD)
|
||||
#if defined(GOTTHARD2D) || defined(EIGERD) || defined(JUNGFRAUD) || \
|
||||
defined(MOENCHD)
|
||||
int readConfigFile();
|
||||
#endif
|
||||
#if defined(GOTTHARDD) || defined(GOTTHARD2D) || defined(EIGERD) || \
|
||||
@ -157,14 +159,13 @@ void resetToHardwareSettings();
|
||||
int writeRegister(uint32_t offset, uint32_t data);
|
||||
int readRegister(uint32_t offset, uint32_t *retval);
|
||||
#elif GOTTHARDD
|
||||
uint32_t
|
||||
writeRegister16And32(uint32_t offset,
|
||||
uint32_t data); // FIXME its not there in ctb or moench?
|
||||
uint32_t writeRegister16And32(uint32_t offset,
|
||||
uint32_t data); // FIXME its not there in ctb
|
||||
uint32_t readRegister16And32(uint32_t offset);
|
||||
#endif
|
||||
|
||||
// firmware functions (resets)
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
void cleanFifos();
|
||||
void resetCore();
|
||||
@ -189,11 +190,11 @@ int getDynamicRange(int *retval);
|
||||
int setROI(ROI arg);
|
||||
ROI getROI();
|
||||
#endif
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
void setADCInvertRegister(uint32_t val);
|
||||
uint32_t getADCInvertRegister();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
int setADCEnableMask(uint32_t mask);
|
||||
uint32_t getADCEnableMask();
|
||||
void setADCEnableMask_10G(uint32_t mask);
|
||||
@ -221,11 +222,11 @@ int getReadoutMode();
|
||||
#endif
|
||||
|
||||
// parameters - timer
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int selectStoragecellStart(int pos);
|
||||
int getMaxStoragecellStart();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD) || defined(MOENCHD) || \
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(CHIPTESTBOARDD)
|
||||
int setNextFrameNumber(uint64_t value);
|
||||
int getNextFrameNumber(uint64_t *value);
|
||||
@ -265,13 +266,13 @@ int64_t getSubDeadTime();
|
||||
int64_t getMeasuredPeriod();
|
||||
int64_t getMeasuredSubPeriod();
|
||||
#endif
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
void setNumAdditionalStorageCells(int val);
|
||||
int getNumAdditionalStorageCells();
|
||||
int setStorageCellDelay(int64_t val);
|
||||
int64_t getStorageCellDelay();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
int setNumAnalogSamples(int val);
|
||||
int getNumAnalogSamples();
|
||||
#endif
|
||||
@ -286,8 +287,8 @@ uint32_t getCounterMask();
|
||||
void updatePacketizing();
|
||||
#endif
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARDD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARDD) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int setDelayAfterTrigger(int64_t val);
|
||||
int64_t getDelayAfterTrigger();
|
||||
int64_t getNumFramesLeft();
|
||||
@ -301,7 +302,7 @@ int64_t getNumBurstsLeft();
|
||||
#ifdef GOTTHARDD
|
||||
int64_t getExpTimeLeft();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int64_t getFramesFromStart();
|
||||
int64_t getActualTime();
|
||||
@ -312,7 +313,7 @@ int64_t getMeasurementTime();
|
||||
#if defined(MYTHEN3D) || defined(EIGERD)
|
||||
void getModule(sls_detector_module *myMod);
|
||||
#endif
|
||||
#if (!defined(CHIPTESTBOARDD)) && (!defined(MOENCHD)) && (!defined(GOTTHARD2D))
|
||||
#if (!defined(CHIPTESTBOARDD)) && (!defined(GOTTHARD2D))
|
||||
int setModule(sls_detector_module myMod, char *mess);
|
||||
#endif
|
||||
|
||||
@ -328,7 +329,7 @@ int getAllTrimbits();
|
||||
enum detectorSettings setSettings(enum detectorSettings sett);
|
||||
#endif
|
||||
enum detectorSettings getSettings();
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
enum gainMode getGainMode();
|
||||
void setGainMode(enum gainMode mode);
|
||||
#endif
|
||||
@ -357,7 +358,7 @@ void setDAC(enum DACINDEX ind, int val, int mV);
|
||||
#endif
|
||||
int getDAC(enum DACINDEX ind, int mV);
|
||||
int getMaxDacSteps();
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
int dacToVoltage(int dac);
|
||||
int checkVLimitCompliant(int mV);
|
||||
int checkVLimitDacCompliant(int dac);
|
||||
@ -380,14 +381,15 @@ void powerOff();
|
||||
|
||||
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int getADC(enum ADCINDEX ind, int *value);
|
||||
#elif !defined(MOENCHD)
|
||||
#else
|
||||
int getADC(enum ADCINDEX ind);
|
||||
#endif
|
||||
|
||||
int setHighVoltage(int val);
|
||||
|
||||
// parameters - timing, extsig
|
||||
#if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD)
|
||||
#if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD) || \
|
||||
defined(MOENCHD)
|
||||
int setMaster(enum MASTERINDEX m);
|
||||
#endif
|
||||
#ifdef EIGERD
|
||||
@ -395,11 +397,11 @@ int setTop(enum TOPINDEX t);
|
||||
int isTop(int *retval);
|
||||
#endif
|
||||
#if defined(MYTHEN3D) || defined(EIGERD) || defined(GOTTHARDD) || \
|
||||
defined(GOTTHARD2D) || defined(JUNGFRAUD)
|
||||
defined(GOTTHARD2D) || defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int isMaster(int *retval);
|
||||
#endif
|
||||
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int getSynchronization();
|
||||
void setSynchronization(int enable);
|
||||
#endif
|
||||
@ -430,29 +432,30 @@ int getExtSignal(int signalIndex);
|
||||
#ifdef GOTTHARDD
|
||||
void calcChecksum(mac_conf *mac, int sourceip, int destip);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARD2D)
|
||||
void setNumberofUDPInterfaces(int val);
|
||||
#endif
|
||||
int getNumberofUDPInterfaces();
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD) || defined(MYTHEN3D) || \
|
||||
defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int getNumberofDestinations(int *retval);
|
||||
int setNumberofDestinations(int value);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(MYTHEN3D) || \
|
||||
defined(GOTTHARD2D)
|
||||
int getFirstUDPDestination();
|
||||
void setFirstUDPDestination(int value);
|
||||
#endif
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
void selectPrimaryInterface(int val);
|
||||
int getPrimaryInterface();
|
||||
void setupHeader(int iRxEntry, enum interfaceType type, uint32_t destip,
|
||||
uint64_t destmac, uint32_t destport, uint64_t sourcemac,
|
||||
uint32_t sourceip, uint32_t sourceport);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D) || defined(MYTHEN3D) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARD2D) || \
|
||||
defined(MYTHEN3D) || defined(CHIPTESTBOARDD)
|
||||
void calcChecksum(udp_header *udp);
|
||||
#endif
|
||||
#ifdef GOTTHARDD
|
||||
@ -471,22 +474,15 @@ int getInterruptSubframe();
|
||||
int setReadNRows(int value);
|
||||
int getReadNRows();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(MYTHEN3D)
|
||||
#if defined(CHIPTESTBOARDD) || defined(EIGERD) || defined(MYTHEN3D)
|
||||
int enableTenGigabitEthernet(int val);
|
||||
#endif
|
||||
|
||||
// very detector specific
|
||||
|
||||
// moench specific - powerchip
|
||||
#ifdef MOENCHD
|
||||
int powerChip(int on);
|
||||
int setAnalogOnlyReadout();
|
||||
#endif
|
||||
|
||||
// chip test board or moench specific - configure frequency, phase, pll,
|
||||
// chip test board specific - configure frequency, phase, pll,
|
||||
// flashing firmware
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
int setPhase(enum CLKINDEX ind, int val, int degrees);
|
||||
int getPhase(enum CLKINDEX ind, int degrees);
|
||||
int getMaxPhase(enum CLKINDEX ind);
|
||||
@ -505,9 +501,9 @@ int setLEDEnable(int enable);
|
||||
void setDigitalIODelay(uint64_t pinMask, int delay);
|
||||
#endif
|
||||
|
||||
// jungfrau specific - powerchip, autocompdisable, clockdiv, asictimer, clock,
|
||||
// pll, flashing firmware
|
||||
#ifdef JUNGFRAUD
|
||||
// jungfrau/moench specific - powerchip, autocompdisable, clockdiv, asictimer,
|
||||
// clock, pll, flashing firmware
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int setReadNRows(int value);
|
||||
int getReadNRows();
|
||||
void initReadoutConfiguration();
|
||||
@ -637,11 +633,12 @@ int setBadChannels(int numChannels, int *channelList);
|
||||
int *getBadChannels(int *numChannels);
|
||||
#endif
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD)
|
||||
int getTenGigaFlowControl();
|
||||
int setTenGigaFlowControl(int value);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD) || defined(MYTHEN3D)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(MYTHEN3D)
|
||||
int getTransmissionDelayFrame();
|
||||
int setTransmissionDelayFrame(int value);
|
||||
#endif
|
||||
@ -661,14 +658,14 @@ int stopStateMachine();
|
||||
#ifdef MYTHEN3D
|
||||
int softwareTrigger();
|
||||
#endif
|
||||
#if defined(EIGERD) || defined(JUNGFRAUD)
|
||||
#if defined(EIGERD) || defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
int softwareTrigger(int block);
|
||||
#endif
|
||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
||||
int startReadOut();
|
||||
#endif
|
||||
enum runStatus getRunStatus();
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
void readFrames(int *ret, char *mess);
|
||||
#endif
|
||||
#ifdef EIGERD
|
||||
@ -676,7 +673,7 @@ void waitForAcquisitionEnd(int *ret, char *mess);
|
||||
#else
|
||||
void waitForAcquisitionEnd();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
void readandSendUDPFrames(int *ret, char *mess);
|
||||
void unsetFifoReadStrobes();
|
||||
void readSample(int ns);
|
||||
@ -685,8 +682,8 @@ int checkFifoForEndOfAcquisition();
|
||||
int readFrameFromFifo();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
u_int32_t runBusy();
|
||||
#endif
|
||||
|
||||
@ -697,7 +694,7 @@ u_int32_t runState(enum TLogLevel lev);
|
||||
// common
|
||||
int calculateDataBytes();
|
||||
int getTotalNumberOfChannels();
|
||||
#if defined(MOENCHD) || defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
void getNumberOfChannels(int *nchanx, int *nchany);
|
||||
#endif
|
||||
int getNumberOfChips();
|
||||
|
@ -300,7 +300,7 @@ void AD9257_Configure() {
|
||||
AD9257_CLK_CH_IFCO_MSK);
|
||||
|
||||
// vref
|
||||
#if defined(GOTTHARDD) || defined(MOENCHD)
|
||||
#ifdef GOTTHARDD
|
||||
LOG(logINFO, ("\tVref default at 2.0\n"));
|
||||
AD9257_SetVrefVoltage(AD9257_VREF_DEFAULT_VAL, 0);
|
||||
#else
|
||||
|
@ -127,7 +127,7 @@ uint32_t ALTERA_PLL_Cntrl_Reg = 0x0;
|
||||
uint32_t ALTERA_PLL_Param_Reg = 0x0;
|
||||
uint32_t ALTERA_PLL_Cntrl_RcnfgPrmtrRstMask = 0x0;
|
||||
uint32_t ALTERA_PLL_Cntrl_WrPrmtrMask = 0x0;
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
uint32_t ALTERA_PLL_Cntrl_DBIT_PLL_WrPrmtrMask = 0x0;
|
||||
int ALTERA_PLL_Cntrl_DBIT_ClkIndex = 0;
|
||||
|
||||
@ -136,7 +136,7 @@ uint32_t ALTERA_PLL_Cntrl_PLLRstMask = 0x0;
|
||||
uint32_t ALTERA_PLL_Cntrl_AddrMask = 0x0;
|
||||
int ALTERA_PLL_Cntrl_AddrOfst = 0;
|
||||
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
void ALTERA_PLL_SetDefines(uint32_t creg, uint32_t preg, uint32_t rprmsk,
|
||||
uint32_t wpmsk, uint32_t prmsk, uint32_t amsk,
|
||||
int aofst, uint32_t wd2msk, int clk2Index) {
|
||||
@ -201,7 +201,7 @@ void ALTERA_PLL_SetPllReconfigReg(uint32_t reg, uint32_t val,
|
||||
reg, val, useSecondWRMask));
|
||||
|
||||
uint32_t wrmask = ALTERA_PLL_Cntrl_WrPrmtrMask;
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
if (useSecondWRMask) {
|
||||
wrmask = ALTERA_PLL_Cntrl_DBIT_PLL_WrPrmtrMask;
|
||||
}
|
||||
@ -252,7 +252,7 @@ void ALTERA_PLL_SetPhaseShift(int32_t phase, int clkIndex, int pos) {
|
||||
LOG(logDEBUG1, ("C%d phase word:0x%08x\n", clkIndex, value));
|
||||
|
||||
int useSecondWR = 0;
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
if (clkIndex == ALTERA_PLL_Cntrl_DBIT_ClkIndex) {
|
||||
useSecondWR = 1;
|
||||
}
|
||||
|
@ -224,10 +224,10 @@ int getModuleIdInFile(int *ret, char *mess, char *fileName) {
|
||||
// open id file
|
||||
FILE *fd = fopen(fname, "r");
|
||||
if (fd == NULL) {
|
||||
#ifdef JUNGFRAUD
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
*ret = OK;
|
||||
LOG(logWARNING,
|
||||
("Could not find detid_jungfrau.txt to set module id\n"));
|
||||
LOG(logWARNING, ("Could not find detid file to set module id. "
|
||||
"Continuing without.\n"));
|
||||
return 0;
|
||||
#else
|
||||
*ret = FAIL;
|
||||
@ -485,7 +485,7 @@ int setupDetectorServer(char *mess, char *sname) {
|
||||
|
||||
// blackfin boards (respawn) (only kept for backwards compatibility)
|
||||
#ifndef VIRTUAL
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(GOTTHARDD)
|
||||
// delete every line with DetectorServer in /etc/inittab
|
||||
strcpy(cmd, "sed -i '/DetectorServer/d' /etc/inittab");
|
||||
|
@ -13,7 +13,7 @@
|
||||
extern enum TLogLevel trimmingPrint;
|
||||
#endif
|
||||
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#ifdef CHIPTESTBOARDD
|
||||
#ifdef VIRTUAL
|
||||
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
|
||||
#endif
|
||||
@ -40,7 +40,7 @@ void initializePatternAddresses() {
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#ifdef CHIPTESTBOARDD
|
||||
#ifdef VIRTUAL
|
||||
void initializePatternWord() {
|
||||
memset(virtual_pattern, 0, sizeof(virtual_pattern));
|
||||
@ -128,7 +128,7 @@ int validate_writePatternWord(char *message, int addr, uint64_t word) {
|
||||
|
||||
// validate result
|
||||
int ret = OK;
|
||||
// cannot validate for moench, ctb ( same as executing pattern word)
|
||||
// cannot validate for ctb ( same as executing pattern word)
|
||||
#ifdef MYTHEN3D
|
||||
uint64_t retval = readPatternWord(addr);
|
||||
LOG(logDEBUG1, ("Pattern word (addr:0x%x) retval: 0x%llx\n", addr,
|
||||
|
@ -88,7 +88,7 @@ int main(int argc, char *argv[]) {
|
||||
"and "
|
||||
"initial detector setup. \n"
|
||||
"\t-i, --ignore-config : "
|
||||
"[Eiger][Jungfrau][Gotthard][Gotthard2] \n"
|
||||
"[Eiger][Jungfrau][Gotthard][Gotthard2][Moench] \n"
|
||||
"\t Ignore config file. \n"
|
||||
"\t-m, --master <master> : "
|
||||
"[Eiger][Mythen3][Gotthard][Gotthard2] \n"
|
||||
@ -205,7 +205,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
case 'i':
|
||||
#if defined(EIGERD) || defined(GOTTHARDD) || defined(GOTTHARD2D) || \
|
||||
defined(JUNGFRAUD)
|
||||
defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
LOG(logINFO, ("Ignoring config file\n"));
|
||||
ignoreConfigFileFlag = 1;
|
||||
#else
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -80,16 +80,16 @@ class Detector {
|
||||
|
||||
Result<std::string> getDetectorServerVersion(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Gotthard2][Myhten3][Gotthard][Ctb][Moench] */
|
||||
/** [Jungfrau][Moench][Gotthard2][Myhten3][Gotthard][Ctb] */
|
||||
Result<std::string> getHardwareVersion(Positions pos = {}) const;
|
||||
|
||||
Result<std::string> getKernelVersion(Positions pos = {}) const;
|
||||
|
||||
/* [Jungfrau][Gotthard][Mythen3][Gotthard2][CTB][Moench] */
|
||||
/* [Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][CTB] */
|
||||
Result<int64_t> getSerialNumber(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger][Gotthard2][Mythen3][Jungfrau] 6 bit value (ideally unique) that
|
||||
* is streamed out in the UDP header of the detector.*/
|
||||
/** [Eiger][Gotthard2][Mythen3][Jungfrau][Moench] 6 bit value (ideally
|
||||
* unique) that is streamed out in the UDP header of the detector.*/
|
||||
Result<int> getModuleId(Positions pos = {}) const;
|
||||
|
||||
Result<std::string> getReceiverVersion(Positions pos = {}) const;
|
||||
@ -122,14 +122,12 @@ class Detector {
|
||||
/** list of possible settings for this detector */
|
||||
std::vector<defs::detectorSettings> getSettingsList() const;
|
||||
|
||||
/** [Jungfrau][Gotthard][Gotthard2][Mythen3] */
|
||||
/** [Jungfrau][Moench][Gotthard][Gotthard2][Mythen3] */
|
||||
Result<defs::detectorSettings> getSettings(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] GAIN0, HIGHGAIN0 \n [Gotthard] DYNAMICGAIN, HIGHGAIN,
|
||||
/** [Jungfrau][Moench] GAIN0, HIGHGAIN0 \n [Gotthard] DYNAMICGAIN, HIGHGAIN,
|
||||
* LOWGAIN, MEDIUMGAIN, VERYHIGHGAIN \n [Gotthard2] DYNAMICGAIN,
|
||||
* FIXGAIN1, FIXGAIN2 \n [Moench] G1_HIGHGAIN, G1_LOWGAIN,
|
||||
* G2_HIGHCAP_HIGHGAIN, G2_HIGHCAP_LOWGAIN, G2_LOWCAP_HIGHGAIN,
|
||||
* G2_LOWCAP_LOWGAIN, G4_HIGHGAIN, G4_LOWGAIN \n [Mythen3] STANDARD, FAST,
|
||||
* FIXGAIN1, FIXGAIN2 \n [Mythen3] STANDARD, FAST,
|
||||
* HIGHGAIN. Also changes vrshaper and vrpreamp \n [Eiger] Use threshold
|
||||
* command. Settings loaded from file found in settingspath
|
||||
*/
|
||||
@ -179,38 +177,39 @@ class Detector {
|
||||
* files exist in corresponding trim folders */
|
||||
void setTrimEnergies(std::vector<int> energies, Positions pos = {});
|
||||
|
||||
/**[Eiger][Jungfrau] */
|
||||
/**[Eiger][Jungfrau][Moench] */
|
||||
bool getGapPixelsinCallback() const;
|
||||
|
||||
/**
|
||||
* [Eiger][Jungfrau]
|
||||
* [Eiger][Jungfrau][Moench]
|
||||
* Include gap pixels in client data call back. Will not be in detector
|
||||
* streaming, receiver file or streaming. Default is disabled.
|
||||
*/
|
||||
void setGapPixelsinCallback(const bool enable);
|
||||
|
||||
/** [Eiger][Jungfrau] */
|
||||
/** [Eiger][Jungfrau][Moench] */
|
||||
Result<bool> getFlipRows(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger] flips rows paramater sent to slsreceiver to stream as json
|
||||
* parameter to flip rows in gui \n[Jungfrau] flips rows in the detector
|
||||
* itself. For bottom module and number of interfaces must be set to 2.
|
||||
* slsReceiver and slsDetectorGui does not handle.slsReceiver and
|
||||
* parameter to flip rows in gui \n[Jungfrau][Moench] flips rows in the
|
||||
* detector itself. For bottom module and number of interfaces must be set
|
||||
* to 2. slsReceiver and slsDetectorGui does not handle.slsReceiver and
|
||||
* slsDetectorGui does not handle
|
||||
*/
|
||||
void setFlipRows(bool value, Positions pos = {});
|
||||
|
||||
/** [Eiger][Mythen3][Gotthard1][Gotthard2][Jungfrau] via stop server **/
|
||||
/** [Eiger][Mythen3][Gotthard1][Gotthard2][Jungfrau][Moench] via stop server
|
||||
* **/
|
||||
Result<bool> getMaster(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger][Gotthard2][Jungfrau] Set (half) module to master and the
|
||||
/** [Eiger][Gotthard2][Jungfrau][Moench] Set (half) module to master and the
|
||||
* other(s) to slaves */
|
||||
void setMaster(bool value, int pos);
|
||||
|
||||
/** [Jungfrau] **/
|
||||
/** [Jungfrau][Moench] **/
|
||||
Result<bool> getSynchronization(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
void setSynchronization(bool value);
|
||||
|
||||
/** [Gotthard2][Mythen3] */
|
||||
@ -274,11 +273,11 @@ class Detector {
|
||||
|
||||
void setNumberOfTriggers(int64_t value);
|
||||
|
||||
/** [Gotthard][Jungfrau][Eiger][CTB][Moench][Gotthard2] \n
|
||||
/** [Gotthard][Jungfrau][Moench][Eiger][CTB][Gotthard2] \n
|
||||
* [Mythen3] use function with gate index **/
|
||||
Result<ns> getExptime(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][Eiger][CTB][Moench][Gotthard2] \n
|
||||
/** [Gotthard][Jungfrau][Moench][Eiger][CTB][Gotthard2] \n
|
||||
* [Mythen3] sets exptime for all gate signals. To specify gate index, use
|
||||
* function with gate index **/
|
||||
void setExptime(ns t, Positions pos = {});
|
||||
@ -287,25 +286,25 @@ class Detector {
|
||||
|
||||
void setPeriod(ns t, Positions pos = {});
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||
/** [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] */
|
||||
Result<ns> getDelayAfterTrigger(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||
/** [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] */
|
||||
void setDelayAfterTrigger(ns value, Positions pos = {});
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||
/** [Gotthard][Jungfrau][Moench][CTB][Mythen3]
|
||||
* [Gotthard2] only in continuous auto mode */
|
||||
Result<int64_t> getNumberOfFramesLeft(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||
/** [Gotthard][Jungfrau][Moench][CTB][Mythen3]
|
||||
* Only when external trigger used */
|
||||
Result<int64_t> getNumberOfTriggersLeft(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2]
|
||||
/** [Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2]
|
||||
* [Gotthard2] only in continuous mode */
|
||||
Result<ns> getPeriodLeft(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||
/** [Gotthard][Jungfrau][Moench][CTB][Mythen3]
|
||||
* [Gotthard2] only in continuous mode */
|
||||
Result<ns> getDelayAfterTriggerLeft(Positions pos = {}) const;
|
||||
|
||||
@ -314,7 +313,7 @@ class Detector {
|
||||
/**
|
||||
* [Eiger] Options: 4, 8, 12, 16, 32. If i is 32, also sets clkdivider to 2,
|
||||
* else sets clkdivider to 1 \n [Mythen3] Options: 8, 16, 32 \n
|
||||
* [Jungfrau][Gotthard][Ctb][Moench][Mythen3][Gotthard2] 16
|
||||
* [Jungfrau][Moench][Gotthard][Ctb][Mythen3][Gotthard2] 16
|
||||
*/
|
||||
void setDynamicRange(int value);
|
||||
|
||||
@ -324,7 +323,7 @@ class Detector {
|
||||
Result<defs::timingMode> getTimingMode(Positions pos = {}) const;
|
||||
|
||||
/**
|
||||
* [Gotthard][Jungfrau][Gotthard][CTB][Moench][Gotthard2] Options:
|
||||
* [Gotthard][Jungfrau][Moench][Gotthard][CTB][Gotthard2] Options:
|
||||
* AUTO_TIMING, TRIGGER_EXPOSURE \n
|
||||
* [Mythen3] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, TRIGGER_GATED \n
|
||||
* [Eiger] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER
|
||||
@ -334,64 +333,62 @@ class Detector {
|
||||
/** list of possible timing modes for this detector */
|
||||
std::vector<defs::timingMode> getTimingModeList() const;
|
||||
|
||||
/** [Eiger][Jungfrau][Gotthard2] */
|
||||
/** [Eiger][Jungfrau][Moench][Gotthard2] */
|
||||
Result<defs::speedLevel> getReadoutSpeed(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger][Jungfrau][Gotthard2]
|
||||
* [Jungfrau] Options: FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED \n
|
||||
* [Eiger] Options: FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED \n
|
||||
* [Gotthard2] Options: G2_108MHZ (Default), G2_144MHZ \n
|
||||
* [Jungfrau] FULL_SPEED option only available from v2.0 boards and is
|
||||
* recommended to set number of interfaces to 2. \n Also overwrites adcphase
|
||||
* to recommended default.
|
||||
/** [Eiger][Jungfrau][Moench][Gotthard2]
|
||||
* [Jungfrau][Moench] Options: FULL_SPEED, HALF_SPEED (Default),
|
||||
* QUARTER_SPEED \n [Eiger] Options: FULL_SPEED (Default), HALF_SPEED,
|
||||
* QUARTER_SPEED \n [Gotthard2] Options: G2_108MHZ (Default), G2_144MHZ \n
|
||||
* [Jungfrau][Moench] FULL_SPEED option only available from v2.0 boards and
|
||||
* is recommended to set number of interfaces to 2. \n Also overwrites
|
||||
* adcphase to recommended default.
|
||||
*/
|
||||
void setReadoutSpeed(defs::speedLevel value, Positions pos = {});
|
||||
|
||||
/** list of possible readoutspeed modes for this detector */
|
||||
std::vector<defs::speedLevel> getReadoutSpeedList() const;
|
||||
|
||||
/** [Jungfrau][CTB][Moench] */
|
||||
/** [Jungfrau][Moench][CTB] */
|
||||
Result<int> getADCPhase(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench]
|
||||
* [Jungfrau] Absolute phase shift. Changing Speed also resets adcphase to
|
||||
* recommended defaults. \n
|
||||
* [Ctb][Moench] Absolute phase shift. Changing adcclk also resets adcphase
|
||||
* and sets it to previous values. \n
|
||||
* [Gotthard] Relative phase shift
|
||||
/** [Gotthard][Jungfrau][Moench][CTB]
|
||||
* [Jungfrau][Moench] Absolute phase shift. Changing Speed also resets
|
||||
* adcphase to recommended defaults. \n [Ctb] Absolute phase shift. Changing
|
||||
* adcclk also resets adcphase and sets it to previous values. \n [Gotthard]
|
||||
* Relative phase shift
|
||||
*/
|
||||
void setADCPhase(int value, Positions pos = {});
|
||||
|
||||
/** [Jungfrau][CTB][Moench] */
|
||||
/** [Jungfrau][Moench][CTB] */
|
||||
Result<int> getMaxADCPhaseShift(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||
/** [Gotthard][Jungfrau][Moench][CTB] */
|
||||
Result<int> getADCPhaseInDegrees(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench]
|
||||
* [Jungfrau] Absolute phase shift. Changing Speed also resets adcphase to
|
||||
* recommended defaults. \n
|
||||
* [Ctb][Moench] Absolute phase shift. Changing adcclk also resets adcphase
|
||||
* and sets it to previous values. \n
|
||||
* [Gotthard] Relative phase shift
|
||||
/** [Gotthard][Jungfrau][Moench][CTB]
|
||||
* [Jungfrau][Moench] Absolute phase shift. Changing Speed also resets
|
||||
* adcphase to recommended defaults. \n [Ctb] Absolute phase shift. Changing
|
||||
* adcclk also resets adcphase and sets it to previous values. \n [Gotthard]
|
||||
* Relative phase shift
|
||||
*/
|
||||
void setADCPhaseInDegrees(int value, Positions pos = {});
|
||||
|
||||
/** [CTB][Jungfrau] */
|
||||
/** [CTB][Jungfrau][Moench] */
|
||||
Result<int> getDBITPhase(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Jungfrau] Absolute phase shift \n
|
||||
/** [CTB][Jungfrau][Moench] Absolute phase shift \n
|
||||
* [CTB] changing dbitclk also resets dbitphase and sets to previous values.
|
||||
*/
|
||||
void setDBITPhase(int value, Positions pos = {});
|
||||
|
||||
/** [CTB][Jungfrau] */
|
||||
/** [CTB][Jungfrau][Moench] */
|
||||
Result<int> getMaxDBITPhaseShift(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Jungfrau] */
|
||||
/** [CTB][Jungfrau][Moench] */
|
||||
Result<int> getDBITPhaseInDegrees(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Jungfrau] Absolute phase shift \n
|
||||
/** [CTB][Jungfrau][Moench] Absolute phase shift \n
|
||||
* [CTB] changing dbitclk also resets dbitphase and sets to previous values.
|
||||
*/
|
||||
void setDBITPhaseInDegrees(int value, Positions pos = {});
|
||||
@ -424,18 +421,18 @@ class Detector {
|
||||
|
||||
/**
|
||||
* [Gotthard] Options: 0, 90, 110, 120, 150, 180, 200
|
||||
* [Jungfrau][CTB][Moench] Options: 0, 60 - 200
|
||||
* [Jungfrau][Moench][CTB] Options: 0, 60 - 200
|
||||
* [Eiger][Mythen3][Gotthard2] Options: 0 - 200
|
||||
*/
|
||||
void setHighVoltage(int value, Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Mythen3][Gotthard2][Moench] */
|
||||
/** [Jungfrau][Moench][Mythen3][Gotthard2] */
|
||||
Result<bool> getPowerChip(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Mythen3][Gotthard2][Moench] Power the chip. \n
|
||||
* [Moench] Default is disabled. \n
|
||||
* [Jungfrau] Default is disabled. Get will return power status. Can be off
|
||||
* if temperature event occured (temperature over temp_threshold with
|
||||
/** [Jungfrau][Moench][Mythen3][Gotthard2] Power the chip. \n
|
||||
* Default is disabled. \n
|
||||
* [Jungfrau][Moench] Default is disabled. Get will return power status. Can
|
||||
* be off if temperature event occured (temperature over temp_threshold with
|
||||
* temp_control enabled. Will configure chip (only chip v1.1)\n
|
||||
* [Mythen3][Gotthard2] Default is 1. If module not connected or wrong
|
||||
* module, powerchip will fail.
|
||||
@ -447,8 +444,8 @@ class Detector {
|
||||
|
||||
/** [Gotthard] If 1, adds channel intensity with precalculated values.
|
||||
* Default is 0 \n
|
||||
* [Eiger][Jungfrau] Only for virtual servers, if 1, pixels are saturated.
|
||||
* If 0, increasing intensity */
|
||||
* [Eiger][Jungfrau][Moench] Only for virtual servers, if 1, pixels are
|
||||
* saturated. If 0, increasing intensity */
|
||||
void setImageTestMode(const int value, Positions pos = {});
|
||||
|
||||
/** gets list of temperature indices for this detector */
|
||||
@ -458,7 +455,7 @@ class Detector {
|
||||
* (Degrees)
|
||||
* [Mythen3][Gotthard2] Options: TEMPERATURE_FPGA
|
||||
* [Gotthard] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA \n
|
||||
* [Jungfrau] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA \n
|
||||
* [Jungfrau][Moench] Options: TEMPERATURE_ADC, TEMPERATURE_FPGA \n
|
||||
* [Eiger] Options: TEMPERATURE_FPGA, TEMPERATURE_FPGAEXT, TEMPERATURE_10GE,
|
||||
* TEMPERATURE_DCDC, TEMPERATURE_SODL, TEMPERATURE_SODR, TEMPERATURE_FPGA2,
|
||||
* TEMPERATURE_FPGA3 \n [CTB] Options: SLOW_ADC_TEMP
|
||||
@ -475,11 +472,11 @@ class Detector {
|
||||
void setDefaultDac(defs::dacIndex index, int defaultValue,
|
||||
Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Mythen3] */
|
||||
/** [Jungfrau][Moench][Mythen3] */
|
||||
Result<int> getDefaultDac(defs::dacIndex index, defs::detectorSettings sett,
|
||||
Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Mythen3] */
|
||||
/** [Jungfrau][Moench][Mythen3] */
|
||||
void setDefaultDac(defs::dacIndex index, int defaultValue,
|
||||
defs::detectorSettings sett, Positions pos = {});
|
||||
|
||||
@ -528,20 +525,21 @@ class Detector {
|
||||
* mode.*/
|
||||
void setParallelMode(bool value, Positions pos = {});
|
||||
|
||||
/** [Gotthard2][Jungfrau] */
|
||||
/** [Gotthard2][Jungfrau][Moench] */
|
||||
Result<int> getFilterResistor(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard2][Jungfrau] Set filter resistor. Increasing values for
|
||||
/** [Gotthard2][Jungfrau][Moench] Set filter resistor. Increasing values for
|
||||
* increasing resistance.\n[Gotthard2] Options: [0|1|2|3]. Default is
|
||||
* 0.\n[Jungfrau] Options: [0|1]. Default is 1.*/
|
||||
* 0.\n[Jungfrau][Moench] Options: [0|1]. Default is 1.*/
|
||||
void setFilterResistor(int value, Positions pos = {});
|
||||
|
||||
/** [Gotthard2][Jungfrau] */
|
||||
/** [Gotthard2][Jungfrau][Moench] */
|
||||
Result<defs::currentSrcParameters>
|
||||
getCurrentSource(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard2][Jungfrau] Please refer documentation on currentSrcParameters
|
||||
* (sls_detector_defs.h) on the structure and its members */
|
||||
/** [Gotthard2][Jungfrau][Moench] Please refer documentation on
|
||||
* currentSrcParameters (sls_detector_defs.h) on the structure and its
|
||||
* members */
|
||||
void setCurrentSource(defs::currentSrcParameters par, Positions pos = {});
|
||||
|
||||
/** [CTB][Gotthard2] */
|
||||
@ -550,14 +548,14 @@ class Detector {
|
||||
/** [CTB] Options: 0-255 \n [Gotthard2] Options: 0-7 */
|
||||
void setDBITPipeline(int value, Positions pos = {});
|
||||
|
||||
/** [Eiger][Jungfrau] */
|
||||
/** [Eiger][Jungfrau][Moench] */
|
||||
Result<int> getReadNRows(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger] Number of rows to read out per half module
|
||||
* Options: 0 - 256. 256 is default. The permissible values depend on
|
||||
* dynamic range and 10Gbe enabled. \n[Jungfrau] Number of rows per module
|
||||
* starting from the centre. Options: 8 - 512, must be multiples of 8.
|
||||
* Default is 512.
|
||||
* dynamic range and 10Gbe enabled. \n[Jungfrau][Moench] Number of rows per
|
||||
* module starting from the centre. Options: 8 - 512, must be multiples
|
||||
* of 8. Default is 512.
|
||||
*/
|
||||
void setReadNRows(const int lines, Positions pos = {});
|
||||
|
||||
@ -636,10 +634,9 @@ class Detector {
|
||||
* different frame numbers for different modules.*/
|
||||
void setNextFrameNumber(uint64_t value, Positions pos = {});
|
||||
|
||||
/** [Eiger][Mythen3][Jungfrau] Sends an internal software trigger to the
|
||||
* detector block true if command blocks till frames are sent out from that
|
||||
* trigger
|
||||
* [Eiger][Jungfrau] Block can be true
|
||||
/** [Eiger][Mythen3][Jungfrau][Moench] Sends an internal software trigger to
|
||||
* the detector block true if command blocks till frames are sent out from
|
||||
* that trigger [Eiger][Jungfrau][Moench] Block can be true
|
||||
*/
|
||||
void sendSoftwareTrigger(const bool block = false, Positions pos = {});
|
||||
|
||||
@ -665,23 +662,23 @@ class Detector {
|
||||
* *
|
||||
* ************************************************/
|
||||
|
||||
/** [Jungfrau][Gotthard2][Eiger] */
|
||||
/** [Jungfrau][Moench][Gotthard2][Eiger] */
|
||||
Result<int> getNumberofUDPInterfaces(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Gotthard2] Number of udp interfaces to stream data from
|
||||
* detector. Default is 1. \n Also enables second interface in receiver for
|
||||
* listening (Writes a file per interface if writing enabled). \n Also
|
||||
/** [Jungfrau][Moench][Gotthard2] Number of udp interfaces to stream data
|
||||
* from detector. Default is 1. \n Also enables second interface in receiver
|
||||
* for listening (Writes a file per interface if writing enabled). \n Also
|
||||
* restarts client and receiver zmq sockets if zmq streaming enabled. \n
|
||||
* [Gotthard2] second interface enabled to send veto information via 10Gbps
|
||||
* for debugging. By default, if veto enabled, it is sent via 2.5 gbps
|
||||
* interface. */
|
||||
void setNumberofUDPInterfaces(int n, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
Result<int> getSelectedUDPInterface(Positions pos = {}) const;
|
||||
|
||||
/**
|
||||
* [Jungfrau]
|
||||
* [Jungfrau][Moench]
|
||||
* Effective only when number of interfaces is 1.
|
||||
* Options: 0 (outer, default), 1(inner)] //TODO: enum?
|
||||
*/
|
||||
@ -695,11 +692,11 @@ class Detector {
|
||||
*/
|
||||
void setSourceUDPIP(const IpAddr ip, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] bottom half [Gotthard2] veto debugging */
|
||||
/** [Jungfrau][Moench] bottom half [Gotthard2] veto debugging */
|
||||
Result<IpAddr> getSourceUDPIP2(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] bottom half [Gotthard2] veto debugging. \n The source UDP IP
|
||||
* must be in the same subnet of the destination UDP IP2 */
|
||||
/** [Jungfrau][Moench] bottom half [Gotthard2] veto debugging. \n The source
|
||||
* UDP IP must be in the same subnet of the destination UDP IP2 */
|
||||
void setSourceUDPIP2(const IpAddr ip, Positions pos = {});
|
||||
|
||||
Result<MacAddr> getSourceUDPMAC(Positions pos = {}) const;
|
||||
@ -710,10 +707,10 @@ class Detector {
|
||||
*/
|
||||
void setSourceUDPMAC(const MacAddr mac, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] bottom half [Gotthard2] veto debugging */
|
||||
/** [Jungfrau][Moench] bottom half [Gotthard2] veto debugging */
|
||||
Result<MacAddr> getSourceUDPMAC2(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] bottom half [Gotthard2] veto debugging */
|
||||
/** [Jungfrau][Moench] bottom half [Gotthard2] veto debugging */
|
||||
void setSourceUDPMAC2(const MacAddr mac, Positions pos = {});
|
||||
|
||||
Result<UdpDestination> getDestinationUDPList(const uint32_t entry,
|
||||
@ -721,16 +718,16 @@ class Detector {
|
||||
|
||||
void setDestinationUDPList(const UdpDestination, const int module_id);
|
||||
|
||||
/** [Jungfrau][Eiger][Mythen3][Gotthard2] */
|
||||
/** [Jungfrau][Moench][Eiger][Mythen3][Gotthard2] */
|
||||
Result<int> getNumberofUDPDestinations(Positions pos = {}) const;
|
||||
|
||||
void clearUDPDestinations(Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Mythen3][Gotthard2] */
|
||||
/** [Jungfrau][Moench][Mythen3][Gotthard2] */
|
||||
Result<int> getFirstUDPDestination(Positions pos = {}) const;
|
||||
|
||||
/**[Jungfrau][Gotthard2] Options 0-31 (or number of udp destinations)\n
|
||||
* [Mythen3] Options 0-63 (or number of udp destinations)
|
||||
/**[Jungfrau][Moench][Gotthard2] Options 0-31 (or number of udp
|
||||
* destinations)\n [Mythen3] Options 0-63 (or number of udp destinations)
|
||||
*/
|
||||
void setFirstUDPDestination(const int value, Positions pos = {});
|
||||
|
||||
@ -739,10 +736,10 @@ class Detector {
|
||||
/** IP of the interface in receiver that the detector sends data to */
|
||||
void setDestinationUDPIP(const IpAddr ip, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] bottom half \n [Gotthard2] veto debugging */
|
||||
/** [Jungfrau][Moench] bottom half \n [Gotthard2] veto debugging */
|
||||
Result<IpAddr> getDestinationUDPIP2(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] bottom half \n [Gotthard2] veto debugging */
|
||||
/** [Jungfrau][Moench] bottom half \n [Gotthard2] veto debugging */
|
||||
void setDestinationUDPIP2(const IpAddr ip, Positions pos = {});
|
||||
|
||||
Result<MacAddr> getDestinationUDPMAC(Positions pos = {}) const;
|
||||
@ -754,14 +751,15 @@ class Detector {
|
||||
*/
|
||||
void setDestinationUDPMAC(const MacAddr mac, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] bottom half \n [Gotthard2] veto debugging */
|
||||
/** [Jungfrau][Moench] bottom half \n [Gotthard2] veto debugging */
|
||||
Result<MacAddr> getDestinationUDPMAC2(Positions pos = {}) const;
|
||||
|
||||
/* [Jungfrau][Gotthard2] Mac address of the receiver (destination) udp
|
||||
* interface 2. \n Not mandatory to set as udp_dstip2 retrieves it from
|
||||
/* [Jungfrau][Moench][Gotthard2] Mac address of the receiver (destination)
|
||||
* udp interface 2. \n Not mandatory to set as udp_dstip2 retrieves it from
|
||||
* slsReceiver process but must be set if you use a custom receiver (not
|
||||
* slsReceiver). \n [Jungfrau] bottom half \n [Gotthard2] veto debugging \n
|
||||
* Use router mac address if router in between detector and receiver.
|
||||
* slsReceiver). \n [Jungfrau][Moench] bottom half \n [Gotthard2] veto
|
||||
* debugging \n Use router mac address if router in between detector and
|
||||
* receiver.
|
||||
*/
|
||||
void setDestinationUDPMAC2(const MacAddr mac, Positions pos = {});
|
||||
|
||||
@ -771,12 +769,13 @@ class Detector {
|
||||
* calculated (incremented by 1 if no 2nd interface) */
|
||||
void setDestinationUDPPort(int port, int module_id = -1);
|
||||
|
||||
/** [Eiger] right port[Jungfrau] bottom half [Gotthard2] veto debugging */
|
||||
/** [Eiger] right port[Jungfrau][Moench] bottom half [Gotthard2] veto
|
||||
* debugging */
|
||||
Result<int> getDestinationUDPPort2(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger] right port[Jungfrau] bottom half [Gotthard2] veto debugging \n
|
||||
* Default is 50002. \n If module_id is -1, ports for each module is
|
||||
* calculated (incremented by 1 if no 2nd interface)*/
|
||||
/** [Eiger] right port[Jungfrau][Moench] bottom half [Gotthard2] veto
|
||||
* debugging \n Default is 50002. \n If module_id is -1, ports for each
|
||||
* module is calculated (incremented by 1 if no 2nd interface)*/
|
||||
void setDestinationUDPPort2(int port, int module_id = -1);
|
||||
|
||||
/** Reconfigures Detector with UDP destination. More for debugging as the
|
||||
@ -791,27 +790,28 @@ class Detector {
|
||||
|
||||
Result<std::string> printRxConfiguration(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger][CTB][Moench][Mythen3] */
|
||||
/** [Eiger][CTB][Mythen3] */
|
||||
Result<bool> getTenGiga(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger][CTB][Moench][Mythen3] */
|
||||
/** [Eiger][CTB][Mythen3] */
|
||||
void setTenGiga(bool value, Positions pos = {});
|
||||
|
||||
/** [Eiger][Jungfrau] */
|
||||
/** [Eiger][Jungfrau][Moench] */
|
||||
Result<bool> getTenGigaFlowControl(Positions pos = {}) const;
|
||||
|
||||
/** [Eiger][Jungfrau] */
|
||||
/** [Eiger][Jungfrau][Moench] */
|
||||
void setTenGigaFlowControl(bool enable, Positions pos = {});
|
||||
|
||||
/** [Eiger][Jungfrau][Mythen3] */
|
||||
/** [Eiger][Jungfrau][Moench][Mythen3] */
|
||||
Result<int> getTransmissionDelayFrame(Positions pos = {}) const;
|
||||
|
||||
/**
|
||||
* Eiger][Jungfrau][Mythen3] Transmission delay of first udp packet being
|
||||
* streamed out of the module.\n[Jungfrau] [0-31] Each value represents 1
|
||||
* ms\n[Eiger] Additional delay to txndelay_left and txndelay_right. Each
|
||||
* value represents 10ns. Typical value is 50000.\n[Mythen3] [0-16777215]
|
||||
* Each value represents 8 ns (125 MHz clock), max is 134 ms.
|
||||
* Eiger][Jungfrau][Moench][Mythen3] Transmission delay of first udp packet
|
||||
* being streamed out of the module.\n[Jungfrau][Moench] [0-31] Each value
|
||||
* represents 1 ms\n[Eiger] Additional delay to txndelay_left and
|
||||
* txndelay_right. Each value represents 10ns. Typical value is
|
||||
* 50000.\n[Mythen3] [0-16777215] Each value represents 8 ns (125 MHz
|
||||
* clock), max is 134 ms.
|
||||
*/
|
||||
void setTransmissionDelayFrame(int value, Positions pos = {});
|
||||
|
||||
@ -836,16 +836,16 @@ class Detector {
|
||||
*/
|
||||
void setTransmissionDelayRight(int value, Positions pos = {});
|
||||
|
||||
/** [Eiger][Jungfrau] */
|
||||
/** [Eiger][Jungfrau][Moench] */
|
||||
int getTransmissionDelay() const;
|
||||
|
||||
/**
|
||||
* [Eiger][Jungfrau][Mythen3] Set transmission delay for all modules in the
|
||||
* detector using the step size provided.Sets up \n\t\t[Eiger] txdelay_left
|
||||
* to (2 * mod_index * n_delay), \n\t\t[Eiger] txdelay_right to ((2 *
|
||||
* mod_index + 1) * n_delay) and \n\t\t[Eiger] txdelay_frame to (2
|
||||
* *num_modules * n_delay) \n\t\t[Jungfrau][Mythen3] txdelay_frame to
|
||||
* (num_modules * n_delay) \nfor every module.
|
||||
* [Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules
|
||||
* in the detector using the step size provided.Sets up \n\t\t[Eiger]
|
||||
* txdelay_left to (2 * mod_index * n_delay), \n\t\t[Eiger] txdelay_right to
|
||||
* ((2 * mod_index + 1) * n_delay) and \n\t\t[Eiger] txdelay_frame to (2
|
||||
* *num_modules * n_delay) \n\t\t[Jungfrau][Moench][Mythen3] txdelay_frame
|
||||
* to (num_modules * n_delay) \nfor every module.
|
||||
*/
|
||||
void setTransmissionDelay(int step);
|
||||
|
||||
@ -1226,22 +1226,22 @@ class Detector {
|
||||
|
||||
///@}
|
||||
|
||||
/** @name Jungfrau Specific */
|
||||
/** @name Jungfrau/Moench Specific */
|
||||
///@{
|
||||
/**************************************************
|
||||
* *
|
||||
* Jungfrau Specific *
|
||||
* Jungfrau/Moench Specific *
|
||||
* *
|
||||
* ************************************************/
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
Result<double> getChipVersion(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
Result<int> getThresholdTemperature(Positions pos = {}) const;
|
||||
|
||||
/**
|
||||
* [Jungfrau]Set threshold temperature in degrees.
|
||||
* [Jungfrau][Moench]Set threshold temperature in degrees.
|
||||
* If temperature crosses threshold temperature
|
||||
* and temperature control is enabled (default is disabled), power to chip
|
||||
* will be switched off and temperature event will be set. \n To power on
|
||||
@ -1250,23 +1250,23 @@ class Detector {
|
||||
*/
|
||||
void setThresholdTemperature(int temp, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
Result<bool> getTemperatureControl(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] refer to setThresholdTemperature
|
||||
/** [Jungfrau][Moench] refer to setThresholdTemperature
|
||||
* Default is disabled */
|
||||
void setTemperatureControl(bool enable, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] refer to setThresdholdTemperature */
|
||||
/** [Jungfrau][Moench] refer to setThresdholdTemperature */
|
||||
Result<int> getTemperatureEvent(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] refer to setThresdholdTemperature */
|
||||
/** [Jungfrau][Moench] refer to setThresdholdTemperature */
|
||||
void resetTemperatureEvent(Positions pos = {});
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
Result<bool> getAutoComparatorDisable(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Advanced
|
||||
/** [Jungfrau][Moench] Advanced
|
||||
* //TODO naming
|
||||
* By default, the on-chip gain switching is active during the
|
||||
* entire exposure. This mode disables the on-chip gain switching comparator
|
||||
@ -1278,55 +1278,55 @@ class Detector {
|
||||
*/
|
||||
void setAutoComparatorDisable(bool value, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] */
|
||||
/** [Jungfrau][Moench] */
|
||||
Result<ns> getComparatorDisableTime(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Time before end of exposure when comparator is disabled. It
|
||||
* is only possible for chipv1.1.*/
|
||||
/** [Jungfrau][Moench] Time before end of exposure when comparator is
|
||||
* disabled. It is only possible for chipv1.1.*/
|
||||
void setComparatorDisableTime(ns t, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] Advanced TODO naming */
|
||||
/** [Jungfrau][Moench] Advanced TODO naming */
|
||||
Result<int> getNumberOfAdditionalStorageCells(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Advanced \n
|
||||
/** [Jungfrau][Moench] Advanced \n
|
||||
* Only for chipv1.0. Options: 0 - 15. Default: 0. \n
|
||||
* The #images = #frames x #triggers x (#storagecells + 1) */
|
||||
void setNumberOfAdditionalStorageCells(int value);
|
||||
|
||||
/** [Jungfrau] Advanced */
|
||||
/** [Jungfrau][Moench] Advanced */
|
||||
Result<int> getStorageCellStart(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Advanced. Sets the storage cell storing the first acquisition
|
||||
* of the series. Options: 0-max. max is 15 (default) for chipv1.0 and 3
|
||||
* (default) for chipv1.1.
|
||||
/** [Jungfrau][Moench] Advanced. Sets the storage cell storing the first
|
||||
* acquisition of the series. Options: 0-max. max is 15 (default) for
|
||||
* chipv1.0 and 3 (default) for chipv1.1.
|
||||
*/
|
||||
void setStorageCellStart(int cell, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] Advanced*/
|
||||
/** [Jungfrau][Moench] Advanced*/
|
||||
Result<ns> getStorageCellDelay(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Advanced \n Additional time delay between 2 consecutive
|
||||
* exposures in burst mode. \n Options: (0-1638375 ns (resolution of 25ns)\n
|
||||
* Only applicable for chipv1.0.
|
||||
/** [Jungfrau][Moench] Advanced \n Additional time delay between 2
|
||||
* consecutive exposures in burst mode. \n Options: (0-1638375 ns
|
||||
* (resolution of 25ns)\n Only applicable for chipv1.0.
|
||||
*/
|
||||
void setStorageCellDelay(ns value, Positions pos = {});
|
||||
|
||||
/** list of possible gainmode */
|
||||
std::vector<defs::gainMode> getGainModeList() const;
|
||||
|
||||
/** [Jungfrau]*/
|
||||
/** [Jungfrau][Moench]*/
|
||||
Result<defs::gainMode> getGainMode(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Options: DYNAMIC, FORCE_SWITCH_G1, FORCE_SWITCH_G2,
|
||||
/** [Jungfrau][Moench] Options: DYNAMIC, FORCE_SWITCH_G1, FORCE_SWITCH_G2,
|
||||
* FIX_G1, FIX_G2, FIX_G0 \n\CAUTION: Do not use FIX_G0 without caution, you
|
||||
* can damage the detector!!!\n
|
||||
*/
|
||||
void setGainMode(const defs::gainMode mode, Positions pos = {});
|
||||
|
||||
/** [Jungfrau] Advanced */
|
||||
/** [Jungfrau][Moench] Advanced */
|
||||
Result<int> getNumberOfFilterCells(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau] Advanced Options[0-12], only for chip v1.1
|
||||
/** [Jungfrau][Moench] Advanced Options[0-12], only for chip v1.1
|
||||
*/
|
||||
void setNumberOfFilterCells(int cell, Positions pos = {});
|
||||
|
||||
@ -1557,69 +1557,68 @@ class Detector {
|
||||
|
||||
///@}
|
||||
|
||||
/** @name CTB / Moench Specific */
|
||||
/** @name CTB Specific */
|
||||
///@{
|
||||
/**************************************************
|
||||
* *
|
||||
* CTB / Moench Specific *
|
||||
* CTB Specific *
|
||||
* *
|
||||
* ************************************************/
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<int> getNumberOfAnalogSamples(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setNumberOfAnalogSamples(int value, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<int> getADCClock(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setADCClock(int value_in_MHz, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<int> getRUNClock(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setRUNClock(int value_in_MHz, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] in MHZ */
|
||||
/** [CTB] in MHZ */
|
||||
Result<int> getSYNCClock(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<int> getADCPipeline(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setADCPipeline(int value, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<int> getVoltage(defs::dacIndex index, Positions pos = {}) const;
|
||||
|
||||
/**
|
||||
* [CTB][Moench] mV
|
||||
* [CTB] mV
|
||||
* [Ctb] Options: V_LIMIT, V_POWER_A, V_POWER_B, V_POWER_C,
|
||||
* V_POWER_D, V_POWER_IO, V_POWER_CHIP
|
||||
* [Moench] Options: V_LIMIT
|
||||
*/
|
||||
void setVoltage(defs::dacIndex index, int value, Positions pos = {});
|
||||
|
||||
/**
|
||||
* [CTB][Moench] Options: [0- 4] or [1V, 1.14V, 1.33V, 1.6V, 2V]
|
||||
* [CTB] Options: [0- 4] or [1V, 1.14V, 1.33V, 1.6V, 2V]
|
||||
*/
|
||||
Result<int> getADCVpp(bool mV = false, Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setADCVpp(int value, bool mV = false, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<uint32_t> getADCEnableMask(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setADCEnableMask(uint32_t mask, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<uint32_t> getTenGigaADCEnableMask(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] If any of a consecutive 4 bits are enabled, the "
|
||||
/** [CTB] If any of a consecutive 4 bits are enabled, the "
|
||||
"complete 4 bits are enabled */
|
||||
void setTenGigaADCEnableMask(uint32_t mask, Positions pos = {});
|
||||
///@}
|
||||
@ -1721,78 +1720,78 @@ class Detector {
|
||||
* *
|
||||
* ************************************************/
|
||||
|
||||
/** [CTB][Moench][Mythen3] Loads ASCII pattern file directly to server
|
||||
/** [CTB][Mythen3] Loads ASCII pattern file directly to server
|
||||
* (instead of executing line by line)*/
|
||||
void setPattern(const std::string &fname, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] Loads pattern parameters structure directly to
|
||||
/** [CTB][Mythen3] Loads pattern parameters structure directly to
|
||||
* server */
|
||||
void setPattern(const Pattern &pat, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] [Ctb][Moench][Mythen3] Saves pattern to file
|
||||
* (ascii). \n [Ctb][Moench] Also executes pattern.*/
|
||||
/** [CTB][Mythen3] [Ctb][Mythen3] Saves pattern to file
|
||||
* (ascii). \n [Ctb] Also executes pattern.*/
|
||||
void savePattern(const std::string &fname);
|
||||
|
||||
/** [Mythen3][Moench] Loads and runs default pattern */
|
||||
/** [Mythen3] Loads and runs default pattern */
|
||||
void loadDefaultPattern(Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
Result<uint64_t> getPatternIOControl(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench] */
|
||||
/** [CTB] */
|
||||
void setPatternIOControl(uint64_t word, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] same as executing for ctb and moench */
|
||||
/** [CTB][Mythen3] same as executing for ctb */
|
||||
Result<uint64_t> getPatternWord(int addr, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench] Caution: If word is -1 reads the addr (same as
|
||||
/** [CTB] Caution: If word is -1 reads the addr (same as
|
||||
* executing the pattern)
|
||||
* [Mythen3] */
|
||||
void setPatternWord(int addr, uint64_t word, Positions pos = {});
|
||||
|
||||
/**[CTB][Moench][Mythen3] Options: level: -1 (complete pattern) and 0-2
|
||||
/**[CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2
|
||||
* levels
|
||||
* @returns array of start address and stop address
|
||||
*/
|
||||
Result<std::array<int, 2>>
|
||||
getPatternLoopAddresses(int level, Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench][Mythen3] Options: level: -1 (complete pattern) and 0-2
|
||||
/** [CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2
|
||||
* levels */
|
||||
void setPatternLoopAddresses(int level, int start, int stop,
|
||||
Positions pos = {});
|
||||
|
||||
/**[CTB][Moench][Mythen3] Options: level: -1 (complete pattern) and 0-2
|
||||
/**[CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2
|
||||
* levels */
|
||||
Result<int> getPatternLoopCycles(int level, Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench][Mythen3] n: 0-2, level: -1 (complete pattern) and 0-2
|
||||
/** [CTB][Mythen3] n: 0-2, level: -1 (complete pattern) and 0-2
|
||||
* levels */
|
||||
void setPatternLoopCycles(int level, int n, Positions pos = {});
|
||||
|
||||
/**[CTB][Moench][Mythen3] */
|
||||
/**[CTB][Mythen3] */
|
||||
Result<int> getPatternWaitAddr(int level, Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench][Mythen3] Options: level 0-2 */
|
||||
/** [CTB][Mythen3] Options: level 0-2 */
|
||||
void setPatternWaitAddr(int level, int addr, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] */
|
||||
/** [CTB][Mythen3] */
|
||||
Result<uint64_t> getPatternWaitTime(int level, Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench][Mythen3] Options: level 0-2 */
|
||||
/** [CTB][Mythen3] Options: level 0-2 */
|
||||
void setPatternWaitTime(int level, uint64_t t, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] */
|
||||
/** [CTB][Mythen3] */
|
||||
Result<uint64_t> getPatternMask(Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] Selects the bits that will have a pattern mask
|
||||
/** [CTB][Mythen3] Selects the bits that will have a pattern mask
|
||||
* applied to the selected patmask for every pattern. */
|
||||
void setPatternMask(uint64_t mask, Positions pos = {});
|
||||
|
||||
/** [CTB][Moench][Mythen3] */
|
||||
/** [CTB][Mythen3] */
|
||||
Result<uint64_t> getPatternBitMask(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench][Mythen3] Sets the mask applied to every pattern to the
|
||||
/** [CTB][Mythen3] Sets the mask applied to every pattern to the
|
||||
* selected bits */
|
||||
void setPatternBitMask(uint64_t mask, Positions pos = {});
|
||||
|
||||
@ -1800,19 +1799,18 @@ class Detector {
|
||||
void startPattern(Positions pos = {});
|
||||
///@}
|
||||
|
||||
/** @name Moench specific */
|
||||
/** @name Json Header specific */
|
||||
///@{
|
||||
/**************************************************
|
||||
* *
|
||||
* Moench specific *
|
||||
* Json Header specific *
|
||||
* *
|
||||
* ************************************************/
|
||||
|
||||
/** [Moench] */
|
||||
Result<std::map<std::string, std::string>>
|
||||
getAdditionalJsonHeader(Positions pos = {}) const;
|
||||
|
||||
/** [Moench] If empty, reset additional json header. Default is empty. Max
|
||||
/** If empty, reset additional json header. Default is empty. Max
|
||||
* 20 characters for each key/value. Empty value deletes header. Use only if
|
||||
* to be processed by an intermediate user process listening to receiver zmq
|
||||
* packets such as in Moench */
|
||||
@ -1820,11 +1818,9 @@ class Detector {
|
||||
const std::map<std::string, std::string> &jsonHeader,
|
||||
Positions pos = {});
|
||||
|
||||
/** [Moench] */
|
||||
Result<std::string> getAdditionalJsonParameter(const std::string &key,
|
||||
Positions pos = {}) const;
|
||||
/**
|
||||
* [Moench]
|
||||
* Sets the value for additional json header parameters. If not found,
|
||||
* the pair is appended. Empty value deletes parameter. Max 20 characters
|
||||
* for each key/value.
|
||||
@ -1842,41 +1838,41 @@ class Detector {
|
||||
* *
|
||||
* ************************************************/
|
||||
|
||||
/** [Jungfrau][Gotthard][CTB][Moench][Mythen3][Gotthard2]
|
||||
/** [Jungfrau][Moench][Gotthard][CTB][Mythen3][Gotthard2]
|
||||
* Advanced user Function!
|
||||
* Program firmware from command line, after which detector controller is
|
||||
* rebooted. forceDeleteNormalFile is true, if normal file found
|
||||
* in device tree, it must be deleted, a new device drive created and
|
||||
* programming continued.[Jungfrau][CTB][Moench] fname is a pof file (full
|
||||
* programming continued.[Jungfrau][Moench][CTB] fname is a pof file (full
|
||||
* path) \n [Mythen3][Gotthard2] fname is an rbf file (full path)
|
||||
*/
|
||||
void programFPGA(const std::string &fname, const bool forceDeleteNormalFile,
|
||||
Positions pos = {});
|
||||
|
||||
/** [Jungfrau][CTB][Moench] Advanced user Function! */
|
||||
/** [Jungfrau][Moench][CTB] Advanced user Function! */
|
||||
void resetFPGA(Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Eiger][Ctb][Moench][Mythen3][Gotthard2] Copies detector
|
||||
/** [Jungfrau][Moench][Eiger][Ctb][Mythen3][Gotthard2] Copies detector
|
||||
* server via TCP (without tftp).\nMakes a symbolic link with a shorter
|
||||
* name (without vx.x.x).\nThen, detector controller reboots (except
|
||||
* Eiger).\n[Jungfrau][Ctb][Moench] Also deletes old server binary and
|
||||
* Eiger).\n[Jungfrau][Moench][Ctb] Also deletes old server binary and
|
||||
* changes respawn server to the link, which is effective after a reboot.
|
||||
*/
|
||||
void updateDetectorServer(const std::string &fname, Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Ctb][Moench][Mythen3][Gotthard2] \n
|
||||
/** [Jungfrau][Moench][Ctb][Mythen3][Gotthard2] \n
|
||||
* Advanced Command!! You could damage the detector. Please use with
|
||||
* caution.\nUpdates the kernel image. Then, detector controller reboots
|
||||
* with new kernel
|
||||
*/
|
||||
void updateKernel(const std::string &fname, Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Gotthard][CTB][Moench][Mythen3][Gotthard2] Advanced user
|
||||
/** [Jungfrau][Moench][Gotthard][CTB][Mythen3][Gotthard2] Advanced user
|
||||
* Function! */
|
||||
void rebootController(Positions pos = {});
|
||||
|
||||
/**
|
||||
* Advanced user Function!\n [Jungfrau][Gotthard][CTB][Moench] Updates the
|
||||
* Advanced user Function!\n [Jungfrau][Moench][Gotthard][CTB] Updates the
|
||||
* firmware, detector server, make a soft link and then reboots detector
|
||||
* controller. \n [Mythen3][Gotthard2] Will require a script to start up the
|
||||
* shorter named server link at start up \n sname is full path name of
|
||||
@ -1913,16 +1909,16 @@ class Detector {
|
||||
/** Advanced user Function! */
|
||||
Result<int> getBit(uint32_t addr, int bitnr, Positions pos = {});
|
||||
|
||||
/** [Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Advanced user
|
||||
/** [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Advanced user
|
||||
* Function! */
|
||||
void executeFirmwareTest(Positions pos = {});
|
||||
|
||||
/** [Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Advanced user
|
||||
/** [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Advanced user
|
||||
* Function! Writes different values in a R/W register and confirms the
|
||||
* writes to check bus */
|
||||
void executeBusTest(Positions pos = {});
|
||||
|
||||
/** [Gotthard][Jungfrau][CTB][Moench] Advanced user Function! not possible
|
||||
/** [Gotthard][Jungfrau][Moench][CTB] Advanced user Function! not possible
|
||||
* to read back */
|
||||
void writeAdcRegister(uint32_t addr, uint32_t value, Positions pos = {});
|
||||
|
||||
@ -1935,11 +1931,11 @@ class Detector {
|
||||
* incompatible. \n Advanced user Function! */
|
||||
void setInitialChecks(const bool value);
|
||||
|
||||
/** [CTB][Moench][Jungfrau] Advanced user Function! */
|
||||
/** [CTB][Jungfrau][Moench] Advanced user Function! */
|
||||
Result<uint32_t> getADCInvert(Positions pos = {}) const;
|
||||
|
||||
/** [CTB][Moench][Jungfrau] Advanced user Function! \n
|
||||
[Jungfrau] Inversions on top of default mask */
|
||||
/** [CTB][Jungfrau][Moench] Advanced user Function! \n
|
||||
[Jungfrau][Moench] Inversions on top of default mask */
|
||||
void setADCInvert(uint32_t value, Positions pos = {});
|
||||
///@}
|
||||
|
||||
@ -1976,15 +1972,15 @@ class Detector {
|
||||
Result<std::string> executeCommand(const std::string &value,
|
||||
Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Mythen3][CTB][Moench]
|
||||
/** [Jungfrau][Moench][Mythen3][CTB]
|
||||
* [Gotthard2] only in continuous mode */
|
||||
Result<int64_t> getNumberOfFramesFromStart(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Mythen3][CTB][Moench] Get time from detector start
|
||||
/** [Jungfrau][Moench][Mythen3][CTB] Get time from detector start
|
||||
* [Gotthard2] not in burst and auto mode */
|
||||
Result<ns> getActualTime(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Mythen3][CTB][Moench] Get timestamp at a frame start
|
||||
/** [Jungfrau][Moench][Mythen3][CTB] Get timestamp at a frame start
|
||||
* [Gotthard2] not in burst and auto mode */
|
||||
Result<ns> getMeasurementTime(Positions pos = {}) const;
|
||||
|
||||
|
@ -516,7 +516,8 @@ std::string CmdProxy::GapPixels(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[0, 1]\n\t[Eiger][Jungfrau] Include Gap pixels in client data "
|
||||
os << "[0, 1]\n\t[Eiger][Jungfrau][Moench] Include Gap pixels in "
|
||||
"client data "
|
||||
"call back in Detecor api. Will not be in detector streaming, "
|
||||
"receiver file or streaming. Default is 0. "
|
||||
<< '\n';
|
||||
@ -591,8 +592,8 @@ std::string CmdProxy::Exptime(int action) {
|
||||
if (action == defs::HELP_ACTION) {
|
||||
if (cmd == "exptime") {
|
||||
os << "[duration] [(optional unit) "
|
||||
"ns|us|ms|s]\n\t[Eiger][Jungfrau][Gotthard][Gotthard2]["
|
||||
"Moench][Ctb] Exposure time"
|
||||
"ns|us|ms|s]\n\t[Eiger][Jungfrau][Moench][Gotthard]["
|
||||
"Gotthard2][Ctb] Exposure time"
|
||||
"\n\t[Mythen3] Exposure time of all gate signals in auto and "
|
||||
"trigger mode (internal gating). To specify gate index, use "
|
||||
"exptime1, exptime2, exptime3."
|
||||
@ -676,9 +677,10 @@ std::string CmdProxy::ReadoutSpeed(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "\n\t[0 or full_speed|1 or half_speed|2 or "
|
||||
"quarter_speed]\n\t\t[Eiger][Jungfrau] Readout "
|
||||
"quarter_speed]\n\t\t[Eiger][Jungfrau][Moench] Readout "
|
||||
"speed of chip.\n\t\t[Eiger] Default speed is full_speed."
|
||||
"\n\t\t[Jungfrau] Default speed is half_speed. full_speed "
|
||||
"\n\t\t[Jungfrau][Moench] Default speed is half_speed. "
|
||||
"full_speed "
|
||||
"option only available from v2.0 boards and is recommended to "
|
||||
"set "
|
||||
"number of interfaces to 2. Also overwrites "
|
||||
@ -687,7 +689,7 @@ std::string CmdProxy::ReadoutSpeed(int action) {
|
||||
<< '\n';
|
||||
} else {
|
||||
defs::detectorType type = det->getDetectorType().squash();
|
||||
if (type == defs::CHIPTESTBOARD || type == defs::MOENCH) {
|
||||
if (type == defs::CHIPTESTBOARD) {
|
||||
throw RuntimeError(
|
||||
"ReadoutSpeed not implemented. Did you mean runclk?");
|
||||
}
|
||||
@ -716,10 +718,11 @@ std::string CmdProxy::Adcphase(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[n_value] "
|
||||
"[(optional)deg]\n\t[Jungfrau][Ctb][Moench][Gotthard] "
|
||||
"Phase shift of ADC clock. \n\t[Jungfrau] Absolute phase shift. "
|
||||
"[(optional)deg]\n\t[Jungfrau][Moench][Ctb][Gotthard] "
|
||||
"Phase shift of ADC clock. \n\t[Jungfrau][Moench] Absolute phase "
|
||||
"shift. "
|
||||
"If deg used, then shift in degrees. Changing Speed also resets "
|
||||
"adcphase to recommended defaults.\n\t[Ctb][Moench] Absolute "
|
||||
"adcphase to recommended defaults.\n\t[Ctb] Absolute "
|
||||
"phase shift. If deg used, then shift in degrees. Changing "
|
||||
"adcclk also resets adcphase and sets it to previous "
|
||||
"values.\n\t[Gotthard] Relative phase shift. Cannot get"
|
||||
@ -772,7 +775,8 @@ std::string CmdProxy::Dbitphase(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[n_value] [(optional)deg]\n\t[Ctb][Jungfrau] Phase shift of "
|
||||
os << "[n_value] [(optional)deg]\n\t[Ctb][Jungfrau][Moench] Phase "
|
||||
"shift of "
|
||||
"clock to latch digital bits. Absolute phase shift. If deg used, "
|
||||
"then shift in degrees. \n\t[Ctb]Changing dbitclk also resets "
|
||||
"dbitphase and sets to previous values."
|
||||
@ -1009,7 +1013,8 @@ std::string CmdProxy::CurrentSource(int action) {
|
||||
os << "\n\t[0|1]\n\t\t[Gotthard2] Enable or disable current source. "
|
||||
"Default "
|
||||
"is disabled.\n\t[0|1] [fix|nofix] [select source] [(only for "
|
||||
"chipv1.1)normal|low]\n\t\t[Jungfrau] Disable or enable current "
|
||||
"chipv1.1)normal|low]\n\t\t[Jungfrau][Moench] Disable or enable "
|
||||
"current "
|
||||
"source with some parameters. The select source is 0-63 for "
|
||||
"chipv1.0 and a 64 bit mask for chipv1.1. To disable, one needs "
|
||||
"only one argument '0'."
|
||||
@ -1258,7 +1263,7 @@ std::string CmdProxy::ResetDacs(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[(optional) hard] "
|
||||
"\n\t[Eiger][Jungfrau][Gotthard][Moench][Gotthard2]["
|
||||
"\n\t[Eiger][Jungfrau][Moench][Gotthard][Gotthard2]["
|
||||
"Mythen3]Reset dac values to the defaults. A 'hard' optional "
|
||||
"reset will reset the dacs to the hardcoded defaults in on-board "
|
||||
"detector server."
|
||||
@ -1289,7 +1294,8 @@ std::string CmdProxy::DefaultDac(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[dac name][value][(optional)setting]\n\tSets the default for "
|
||||
"that dac to this value.\n\t[Jungfrau][Mythen3] When settings is "
|
||||
"that dac to this value.\n\t[Jungfrau][Moench][Mythen3] When "
|
||||
"settings is "
|
||||
"provided, it sets the default value only for that setting"
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -1432,10 +1438,12 @@ std::string CmdProxy::Trigger(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
if (cmd == "trigger") {
|
||||
os << "\n\t[Eiger][Mythen3][Jungfrau] Sends software trigger "
|
||||
os << "\n\t[Eiger][Mythen3][Jungfrau][Moench] Sends software "
|
||||
"trigger "
|
||||
"signal to detector";
|
||||
} else if (cmd == "blockingtrigger") {
|
||||
os << "\n\t[Eiger][Jungfrau] Sends software trigger signal to "
|
||||
os << "\n\t[Eiger][Jungfrau][Moench] Sends software trigger signal "
|
||||
"to "
|
||||
"detector and blocks till the frames are sent out for that "
|
||||
"trigger.";
|
||||
} else {
|
||||
@ -1524,7 +1532,8 @@ std::string CmdProxy::UDPDestinationList(int action) {
|
||||
"[(optional)mac2=xx:xx:xx:xx:xx:xx]\n\t[port=value] "
|
||||
"[(optional)port2=value\n\tThe order of ip, mac and port does "
|
||||
"not matter. entry_value can be >0 only for "
|
||||
"[Eiger][Jungfrau][Mythen3][Gotthard2] where round robin is "
|
||||
"[Eiger][Jungfrau][Moench][Mythen3][Gotthard2] where round robin "
|
||||
"is "
|
||||
"implemented. If 'auto' used, then ip is set to ip of "
|
||||
"rx_hostname."
|
||||
<< '\n';
|
||||
@ -1603,9 +1612,10 @@ std::string CmdProxy::UDPSourceIP2(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[x.x.x.x] or auto\n\t[Jungfrau][Gotthard2] Ip address of the "
|
||||
os << "[x.x.x.x] or auto\n\t[Jungfrau][Moench][Gotthard2] Ip address "
|
||||
"of the "
|
||||
"detector (source) udp interface 2. Must be same subnet as "
|
||||
"destination udp ip2.\n\t [Jungfrau] top half or inner "
|
||||
"destination udp ip2.\n\t [Jungfrau][Moench] top half or inner "
|
||||
"interface\n\t [Gotthard2] veto debugging. If 'auto' used, then "
|
||||
"ip is set to ip of rx_hostname."
|
||||
<< '\n';
|
||||
@ -1675,9 +1685,10 @@ std::string CmdProxy::UDPDestinationIP2(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[x.x.x.x] or auto\n\t[Jungfrau][Gotthard2] Ip address of the "
|
||||
os << "[x.x.x.x] or auto\n\t[Jungfrau][Moench][Gotthard2] Ip address "
|
||||
"of the "
|
||||
"receiver (destination) udp interface 2. If 'auto' used, then ip "
|
||||
"is set to ip of rx_hostname.\n\t[Jungfrau] bottom half "
|
||||
"is set to ip of rx_hostname.\n\t[Jungfrau][Moench] bottom half "
|
||||
"\n\t[Gotthard2] veto debugging. "
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -1711,12 +1722,13 @@ std::string CmdProxy::TransmissionDelay(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[n_delay]\n\t[Eiger][Jungfrau][Mythen3] Set transmission delay "
|
||||
os << "[n_delay]\n\t[Eiger][Jungfrau][Moench][Mythen3] Set "
|
||||
"transmission delay "
|
||||
"for all modules in the detector using the step size "
|
||||
"provided.Sets up \n\t\t[Eiger] txdelay_left to (2 * mod_index * "
|
||||
"n_delay), \n\t\t[Eiger] txdelay_right to ((2 * mod_index + 1) * "
|
||||
"n_delay) and \n\t\t[Eiger] txdelay_frame to (2 *num_modules * "
|
||||
"n_delay) \n\t\t[Jungfrau][Mythen3] txdelay_frame to "
|
||||
"n_delay) \n\t\t[Jungfrau][Moench][Mythen3] txdelay_frame to "
|
||||
"(num_modules * n_delay) \nfor every module."
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -2058,7 +2070,8 @@ std::string CmdProxy::TemperatureEvent(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[0]\n\t[Jungfrau] 1, if a temperature event occured. To clear "
|
||||
os << "[0]\n\t[Jungfrau][Moench] 1, if a temperature event occured. To "
|
||||
"clear "
|
||||
"this event, set it to 0.\n\tIf temperature crosses threshold "
|
||||
"temperature and temperature control is enabled, power to chip "
|
||||
"will be switched off and temperature event occurs. To power on "
|
||||
@ -2552,14 +2565,14 @@ std::string CmdProxy::GainCaps(int action) {
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/* CTB / Moench Specific */
|
||||
/* CTB Specific */
|
||||
|
||||
std::string CmdProxy::Samples(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[n_samples]\n\t[CTB] Number of samples (both analog and "
|
||||
"digitial) expected.\n\t[Moench] Number of samples (analog only)"
|
||||
"digitial) expected.\n"
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
if (!args.empty()) {
|
||||
@ -2601,7 +2614,7 @@ std::string CmdProxy::AdcVpp(int action) {
|
||||
os << cmd << ' ';
|
||||
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[dac or mV value][(optional unit) mV] \n\t[Ctb][Moench] Vpp of "
|
||||
os << "[dac or mV value][(optional unit) mV] \n\t[Ctb] Vpp of "
|
||||
"ADC.\n\t 0 -> 1V ; 1 -> 1.14V ; 2 -> 1.33V ; 3 -> 1.6V ; 4 -> "
|
||||
"2V. \n\tAdvanced User function!\n"
|
||||
<< '\n';
|
||||
@ -2743,7 +2756,7 @@ std::string CmdProxy::Pattern(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[fname]\n\t[Mythen3][Moench][Ctb] Loads ASCII pattern file "
|
||||
os << "[fname]\n\t[Mythen3][Ctb] Loads ASCII pattern file "
|
||||
"directly to server (instead of executing line by line)"
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -2764,8 +2777,8 @@ std::string CmdProxy::PatternWord(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[step or address] [64 bit mask]\n\t[Ctb][Moench][Mythen3] 64 "
|
||||
"bit pattern at address of pattern memory.\n\t[Ctb][Moench] read "
|
||||
os << "[step or address] [64 bit mask]\n\t[Ctb][Mythen3] 64 "
|
||||
"bit pattern at address of pattern memory.\n\t[Ctb] read "
|
||||
"is same as executing pattern"
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -2824,11 +2837,11 @@ std::string CmdProxy::PatternLoopAddresses(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
if (cmd == "patlimits") {
|
||||
os << "[start addr] [stop addr] \n\t[Ctb][Moench][Mythen3] Limits "
|
||||
os << "[start addr] [stop addr] \n\t[Ctb][Mythen3] Limits "
|
||||
"of complete pattern."
|
||||
<< '\n';
|
||||
} else if (cmd == "patloop") {
|
||||
os << "[0-6] [start addr] [stop addr] \n\t[Ctb][Moench][Mythen3] "
|
||||
os << "[0-6] [start addr] [stop addr] \n\t[Ctb][Mythen3] "
|
||||
"Limits of the loop level provided."
|
||||
<< "\n\t[Mythen3] Level options: 0-3 only." << '\n';
|
||||
} else {
|
||||
@ -2867,7 +2880,7 @@ std::string CmdProxy::PatternLoopCycles(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
if (cmd == "patnloop") {
|
||||
os << "[0-6] [n_cycles] \n\t[Ctb][Moench][Mythen3] Number of "
|
||||
os << "[0-6] [n_cycles] \n\t[Ctb][Mythen3] Number of "
|
||||
"cycles of "
|
||||
"the loop level provided."
|
||||
<< "\n\t[Mythen3] Level options: 0-3 only." << '\n';
|
||||
@ -2901,7 +2914,7 @@ std::string CmdProxy::PatternWaitAddress(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
if (cmd == "patwait") {
|
||||
os << "[0-6] [addr] \n\t[Ctb][Moench][Mythen3] Wait address for "
|
||||
os << "[0-6] [addr] \n\t[Ctb][Mythen3] Wait address for "
|
||||
"loop level provided."
|
||||
<< "\n\t[Mythen3] Level options: 0-3 only.";
|
||||
} else {
|
||||
@ -2935,7 +2948,7 @@ std::string CmdProxy::PatternWaitTime(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
if (cmd == "patwaittime") {
|
||||
os << "[0-6] [n_clk] \n\t[Ctb][Moench][Mythen3] Wait time in clock "
|
||||
os << "[0-6] [n_clk] \n\t[Ctb][Mythen3] Wait time in clock "
|
||||
"cycles for the loop provided."
|
||||
<< "\n\t[Mythen3] Level options: 0-3 only." << '\n';
|
||||
} else {
|
||||
@ -2959,8 +2972,6 @@ std::string CmdProxy::PatternWaitTime(int action) {
|
||||
return os.str();
|
||||
}
|
||||
|
||||
/* Moench */
|
||||
|
||||
std::string CmdProxy::AdditionalJsonHeader(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
@ -3043,8 +3054,9 @@ std::string CmdProxy::ProgramFpga(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[fname.pof | fname.rbf (full "
|
||||
"path)][(opitonal)--force-delete-normal-file]\n\t[Jungfrau][Ctb]["
|
||||
"Moench] Programs FPGA from pof file (full path). Then, detector "
|
||||
"path)][(opitonal)--force-delete-normal-file]\n\t[Jungfrau]["
|
||||
"Moench][Ctb] "
|
||||
"Programs FPGA from pof file (full path). Then, detector "
|
||||
"controller is rebooted. \n\t\tUse --force-delete-normal-file "
|
||||
"argument, if normal file found in device tree, it must be "
|
||||
"deleted, a new device drive created and programming "
|
||||
@ -3078,11 +3090,11 @@ std::string CmdProxy::UpdateDetectorServer(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[server_name with full "
|
||||
"path]\n\t[Jungfrau][Eiger][Ctb][Moench][Mythen3][Gotthard2] "
|
||||
"path]\n\t[Jungfrau][Moench][Eiger][Ctb][Mythen3][Gotthard2] "
|
||||
"Copies detector server via TCP (without tftp). Makes a symbolic "
|
||||
"link with a shorter name (without vx.x.x). Then, detector "
|
||||
"controller reboots (except "
|
||||
"Eiger).\n\t[Jungfrau][Ctb][Moench]Also changes respawn server "
|
||||
"Eiger).\n\t[Jungfrau][Moench][Ctb]Also changes respawn server "
|
||||
"to the link, which is effective after a reboot."
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
@ -3104,7 +3116,7 @@ std::string CmdProxy::UpdateKernel(int action) {
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[kernel_name with full "
|
||||
"path]\n\t[Jungfrau][Ctb][Moench][Mythen3][Gotthard2] Advanced "
|
||||
"path]\n\t[Jungfrau][Moench][Ctb][Mythen3][Gotthard2] Advanced "
|
||||
"Command!! You could damage the detector. Please use with "
|
||||
"caution.\n\tUpdates the kernel image. Then, detector controller "
|
||||
"reboots with new kernel."
|
||||
@ -3129,7 +3141,7 @@ std::string CmdProxy::UpdateFirmwareAndDetectorServer(int action) {
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "\n\tWithout tftp: [server_name (incl fullpath)] [fname.pof "
|
||||
"(incl full path)] This does not use "
|
||||
"tftp.\n\t\t[Jungfrau][Gotthard][CTB][Moench] Updates the "
|
||||
"tftp.\n\t\t[Jungfrau][Moench][Gotthard][CTB] Updates the "
|
||||
"firmware, detector server, deletes old server, creates the "
|
||||
"symbolic link and then reboots detector controller. "
|
||||
"\n\t\t[Mythen3][Gotthard2] will require a script to start up "
|
||||
@ -3191,7 +3203,7 @@ std::string CmdProxy::AdcRegister(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == defs::HELP_ACTION) {
|
||||
os << "[address] [value]\n\t[Jungfrau][Ctb][Moench][Gotthard] Writes "
|
||||
os << "[address] [value]\n\t[Jungfrau][Moench][Ctb][Gotthard] Writes "
|
||||
"to an adc register in hex. Advanced user Function!"
|
||||
<< '\n';
|
||||
} else if (action == defs::GET_ACTION) {
|
||||
|
@ -1252,13 +1252,14 @@ class CmdProxy {
|
||||
GET_COMMAND(rx_version, getReceiverVersion, "\n\tReceiver version");
|
||||
|
||||
GET_COMMAND_HEX(serialnumber, getSerialNumber,
|
||||
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][CTB][Moench]"
|
||||
"\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][CTB]"
|
||||
"Serial number of detector.");
|
||||
|
||||
GET_COMMAND(moduleid, getModuleId,
|
||||
"\n\t[Gotthard2][Eiger][Mythen3][Jungfrau] 16 bit value "
|
||||
"(ideally unique) that is streamed out in the UDP header of "
|
||||
"the detector. Picked up from a file on the module.");
|
||||
GET_COMMAND(
|
||||
moduleid, getModuleId,
|
||||
"\n\t[Gotthard2][Eiger][Mythen3][Jungfrau][Moench] 16 bit value "
|
||||
"(ideally unique) that is streamed out in the UDP header of "
|
||||
"the detector. Picked up from a file on the module.");
|
||||
|
||||
GET_COMMAND(type, getDetectorType,
|
||||
"\n\tReturns detector type. Can be Eiger, Jungfrau, Gotthard, "
|
||||
@ -1278,12 +1279,10 @@ class CmdProxy {
|
||||
"verylowgain, g1_hg, g1_lg, g2_hc_hg, g2_hc_lg, "
|
||||
"g2_lc_hg, g2_lc_lg, g4_hg, g4_lg, gain0]"
|
||||
"\n\t Detector Settings"
|
||||
"\n\t[Jungfrau] - [ gain0 | highgain0]"
|
||||
"\n\t[Jungfrau][Moench] - [ gain0 | highgain0]"
|
||||
"\n\t[Gotthard] - [dynamicgain | highgain | lowgain | "
|
||||
"mediumgain | veryhighgain]"
|
||||
"\n\t[Gotthard2] - [dynamicgain | fixgain1 | fixgain2]"
|
||||
"\n\t[Moench] - [g1_hg | g1_lg | g2_hc_hg | g2_hc_lg | "
|
||||
"g2_lc_hg | g2_lc_lg | g4_hg | g4_lg]"
|
||||
"\n\t[Mythen3] - [standard | fast | highgain] Also changes vrshaper "
|
||||
"and vrpreamp. \n\t[Eiger] Use threshold or thresholdnotb. \n\t[Eiger] "
|
||||
"threshold and settings loaded from file found in settingspath. "
|
||||
@ -1301,22 +1300,24 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
fliprows, getFlipRows, setFlipRows, StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger] flips rows paramater sent to slsreceiver "
|
||||
"to stream as json parameter to flip rows in gui \n\t[Jungfrau] flips "
|
||||
"to stream as json parameter to flip rows in gui "
|
||||
"\n\t[Jungfrau][Moench] flips "
|
||||
"rows in the detector itself. For bottom module and number of "
|
||||
"interfaces must be set to 2. slsReceiver and slsDetectorGui "
|
||||
"does not handle.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID_GET(
|
||||
master, getMaster, setMaster, StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger][Gotthard2][Jungfrau] Sets (half) module to master "
|
||||
"and other(s) to "
|
||||
"slaves.\n\t[Gotthard][Gotthard2][Mythen3][Eiger][Jungfrau] Gets if "
|
||||
"the current (half) module is master.");
|
||||
INTEGER_COMMAND_VEC_ID_GET(master, getMaster, setMaster, StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger][Gotthard2][Jungfrau][Moench] "
|
||||
"Sets (half) module to master "
|
||||
"and other(s) to "
|
||||
"slaves.\n\t[Gotthard][Gotthard2][Mythen3]["
|
||||
"Eiger][Jungfrau][Moench] Gets if "
|
||||
"the current (half) module is master.");
|
||||
|
||||
INTEGER_COMMAND_SET_NOID_GET_ID(sync, getSynchronization,
|
||||
setSynchronization, StringTo<int>,
|
||||
"[0, 1]\n\t[Jungfrau] Enables or disables "
|
||||
"synchronization between modules.");
|
||||
INTEGER_COMMAND_SET_NOID_GET_ID(
|
||||
sync, getSynchronization, setSynchronization, StringTo<int>,
|
||||
"[0, 1]\n\t[Jungfrau][Moench] Enables or disables "
|
||||
"synchronization between modules.");
|
||||
|
||||
/* acquisition parameters */
|
||||
|
||||
@ -1336,28 +1337,29 @@ class CmdProxy {
|
||||
period, getPeriod, setPeriod,
|
||||
"[duration] [(optional unit) ns|us|ms|s]\n\tPeriod between frames");
|
||||
|
||||
TIME_COMMAND(delay, getDelayAfterTrigger, setDelayAfterTrigger,
|
||||
"[duration] [(optional unit) "
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb]["
|
||||
"Moench] Delay after trigger");
|
||||
TIME_COMMAND(
|
||||
delay, getDelayAfterTrigger, setDelayAfterTrigger,
|
||||
"[duration] [(optional unit) "
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]["
|
||||
"Moench] Delay after trigger");
|
||||
|
||||
GET_COMMAND(framesl, getNumberOfFramesLeft,
|
||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] "
|
||||
"\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] "
|
||||
"Number of frames left in acquisition."
|
||||
"\n\t[Gotthard2] only in continuous auto mode.");
|
||||
|
||||
GET_COMMAND(triggersl, getNumberOfTriggersLeft,
|
||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] "
|
||||
"\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] "
|
||||
"Number of triggers left in acquisition. Only when external "
|
||||
"trigger used.");
|
||||
|
||||
TIME_GET_COMMAND(delayl, getDelayAfterTriggerLeft,
|
||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench]"
|
||||
"\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB]"
|
||||
" DelayLeft Delay Left in Acquisition."
|
||||
"\n\t[Gotthard2] only in continuous mode.");
|
||||
|
||||
TIME_GET_COMMAND(periodl, getPeriodLeft,
|
||||
"\n\t[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2]"
|
||||
"\n\t[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2]"
|
||||
" Period left for current frame."
|
||||
"\n\t[Gotthard2] only in continuous mode.");
|
||||
|
||||
@ -1368,7 +1370,7 @@ class CmdProxy {
|
||||
"[Eiger] Options: 4, 8, 12, 16, 32. If set to 32, also sets "
|
||||
"clkdivider to 2, else to 0.\n\t"
|
||||
"[Mythen3] Options: 8, 16, 32\n\t"
|
||||
"[Jungfrau][Gotthard][Ctb][Moench][Mythen3][Gotthard2] 16");
|
||||
"[Jungfrau][Moench][Gotthard][Ctb][Mythen3][Gotthard2] 16");
|
||||
|
||||
GET_COMMAND_NOID(drlist, getDynamicRangeList,
|
||||
"\n\tGets the list of dynamic ranges for this detector.");
|
||||
@ -1377,7 +1379,7 @@ class CmdProxy {
|
||||
timing, getTimingMode, setTimingMode,
|
||||
StringTo<slsDetectorDefs::timingMode>,
|
||||
"[auto|trigger|gating|burst_trigger]\n\tTiming Mode of "
|
||||
"detector.\n\t[Jungfrau][Gotthard][Ctb][Moench][Gotthard2] "
|
||||
"detector.\n\t[Jungfrau][Moench][Gotthard][Ctb][Gotthard2] "
|
||||
"[auto|trigger]\n\t[Mythen3] "
|
||||
"[auto|trigger|gating|trigger_gating]\n\t[Eiger] "
|
||||
"[auto|trigger|gating|burst_trigger]");
|
||||
@ -1390,24 +1392,25 @@ class CmdProxy {
|
||||
"\n\tList of readout speed levels implemented for this detector.");
|
||||
|
||||
GET_COMMAND(maxadcphaseshift, getMaxADCPhaseShift,
|
||||
"\n\t[Jungfrau][CTB][Moench] Absolute maximum Phase shift of "
|
||||
"\n\t[Jungfrau][Moench][CTB] Absolute maximum Phase shift of "
|
||||
"ADC clock.");
|
||||
|
||||
GET_COMMAND(maxdbitphaseshift, getMaxDBITPhaseShift,
|
||||
"\n\t[CTB][Jungfrau] Absolute maximum Phase shift of of the "
|
||||
"clock to latch digital bits.");
|
||||
GET_COMMAND(
|
||||
maxdbitphaseshift, getMaxDBITPhaseShift,
|
||||
"\n\t[CTB][Jungfrau][Moench] Absolute maximum Phase shift of of the "
|
||||
"clock to latch digital bits.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(highvoltage, getHighVoltage, setHighVoltage,
|
||||
StringTo<int>,
|
||||
"[n_value]\n\tHigh voltage to the sensor in Voltage."
|
||||
"\n\t[Gotthard] [0|90|110|120|150|180|200]"
|
||||
"\n\t[Eiger][Mythen3][Gotthard2] 0-200"
|
||||
"\n\t[Jungfrau][Ctb][Moench] [0|60-200]");
|
||||
"\n\t[Jungfrau][Moench][Ctb] [0|60-200]");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
powerchip, getPowerChip, setPowerChip, StringTo<int>,
|
||||
"[0, 1]\n\t[Jungfrau][Mythen3][Gotthard2][Moench] Power "
|
||||
"the chip. \n\t[Moench] Default is 0. \n\t[Jungfrau] Default is 0. Get "
|
||||
"[0, 1]\n\t[Jungfrau][Moench][Mythen3][Gotthard2] Power "
|
||||
"the chip. \n\t[Jungfrau][Moench] Default is 0. Get "
|
||||
"will return power status. Can be off if temperature event occured "
|
||||
"(temperature over temp_threshold with temp_control "
|
||||
"enabled. Will configure chip (only chip v1.1)\n\t[Mythen3][Gotthard2] "
|
||||
@ -1418,7 +1421,8 @@ class CmdProxy {
|
||||
imagetest, getImageTestMode, setImageTestMode, StringTo<int>,
|
||||
"[0, 1]\n\t[Gotthard] 1 adds channel intensity with precalculated "
|
||||
"values when taking an acquisition. Default is 0."
|
||||
"\n\t[Eiger][Jungfrau] Only for Virtual servers. If 0, each pixel "
|
||||
"\n\t[Eiger][Jungfrau][Moench] Only for Virtual servers. If 0, each "
|
||||
"pixel "
|
||||
"intensity incremented by 1. If 1, all pixels almost saturated.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
@ -1432,9 +1436,10 @@ class CmdProxy {
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
filterresistor, getFilterResistor, setFilterResistor, StringTo<int>,
|
||||
"[value] [Gotthard2][Jungfrau] Set filter resistor. Increasing values "
|
||||
"[value] [Gotthard2][Jungfrau][Moench] Set filter resistor. Increasing "
|
||||
"values "
|
||||
"for increasing resistance.\n\t[Gotthard2] Options: [0|1|2|3]. Default "
|
||||
"is 0.\n\t[Jungfrau] Options: [0|1]. Default is 1.");
|
||||
"is 0.\n\t[Jungfrau][Moench] Options: [0|1]. Default is 1.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(dbitpipeline, getDBITPipeline, setDBITPipeline,
|
||||
StringTo<int>,
|
||||
@ -1449,19 +1454,22 @@ class CmdProxy {
|
||||
"permissible values depend on dynamic range and 10Gbe "
|
||||
"enabled.\n\t[8-512 (multiple of 8)]\n\t\t[Jungfrau] Number of rows "
|
||||
"per module starting from the centre. Options: 8 - 512, must be "
|
||||
"multiples of 8. Default is 512.");
|
||||
"multiples of 8. Default is 512.\n\t\t[Moench] Number of rows "
|
||||
"per module starting from the centre. Options:16 - 400, must be "
|
||||
"multiples of 16. Default is 400.");
|
||||
|
||||
/** temperature */
|
||||
GET_COMMAND_NOID(
|
||||
templist, getTemperatureList,
|
||||
"\n\tList of temperature commands implemented for this detector.");
|
||||
|
||||
GET_IND_COMMAND(temp_adc, getTemperature, slsDetectorDefs::TEMPERATURE_ADC,
|
||||
" °C", "[n_value]\n\t[Jungfrau][Gotthard] ADC Temperature");
|
||||
GET_IND_COMMAND(
|
||||
temp_adc, getTemperature, slsDetectorDefs::TEMPERATURE_ADC, " °C",
|
||||
"[n_value]\n\t[Jungfrau][Moench][Gotthard] ADC Temperature");
|
||||
|
||||
GET_IND_COMMAND(temp_fpga, getTemperature,
|
||||
slsDetectorDefs::TEMPERATURE_FPGA, " °C",
|
||||
"[n_value]\n\t[Eiger][Jungfrau][Gotthard][Mythen3]["
|
||||
"[n_value]\n\t[Eiger][Jungfrau][Moench][Gotthard][Mythen3]["
|
||||
"Gotthard2] FPGA Temperature");
|
||||
|
||||
GET_IND_COMMAND(temp_fpgaext, getTemperature,
|
||||
@ -1595,7 +1603,7 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
numinterfaces, getNumberofUDPInterfaces, setNumberofUDPInterfaces,
|
||||
StringTo<int>,
|
||||
"[1, 2]\n\t[Jungfrau] Number of udp interfaces to stream "
|
||||
"[1, 2]\n\t[Jungfrau][Moench] Number of udp interfaces to stream "
|
||||
"data from detector. Default: 1.\n\tAlso enables second interface in "
|
||||
"receiver for listening (Writes a file per interface if writing "
|
||||
"enabled).\n\tAlso restarts client and receiver zmq sockets if zmq "
|
||||
@ -1604,12 +1612,14 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
selinterface, getSelectedUDPInterface, selectUDPInterface,
|
||||
StringTo<int>,
|
||||
"[0, 1]\n\t[Jungfrau] The udp interface to stream data from detector. "
|
||||
"[0, 1]\n\t[Jungfrau][Moench] The udp interface to stream data from "
|
||||
"detector. "
|
||||
"Effective only when number of interfaces is 1. Default: 0 (outer)");
|
||||
|
||||
GET_COMMAND(
|
||||
udp_numdst, getNumberofUDPDestinations,
|
||||
"\n\t[Jungfrau][Eiger][Mythen3][Gotthard2] One can enter upto 32 (64 "
|
||||
"\n\t[Jungfrau][Moench][Eiger][Mythen3][Gotthard2] One can enter upto "
|
||||
"32 (64 "
|
||||
"for Mythen3) destinations that the detector will stream images out in "
|
||||
"a round robin fashion. This is get only command. Default: 1");
|
||||
|
||||
@ -1620,7 +1630,8 @@ class CmdProxy {
|
||||
udp_firstdst, getFirstUDPDestination, setFirstUDPDestination,
|
||||
StringTo<int>,
|
||||
"\n[0 - 31 (or number of udp "
|
||||
"destinations)]\n\t[Jungfrau][Gotthard2]\n[0-63]\n\t[Mythen3]\n\n\t "
|
||||
"destinations)]\n\t[Jungfrau][Moench][Gotthard2]\n[0-63]\n\t[Mythen3]"
|
||||
"\n\n\t "
|
||||
"One can set which is the first destination that the detector will "
|
||||
"stream images out from in a round robin fashion. The entry must not "
|
||||
"have been empty. Default: 0");
|
||||
@ -1631,10 +1642,10 @@ class CmdProxy {
|
||||
"interface. \n\t[Eiger] Do not set as detector will replace with its "
|
||||
"own DHCP Mac (1G) or DHCP Mac + 1 (10G).");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(udp_srcmac2, getSourceUDPMAC2, setSourceUDPMAC2,
|
||||
MacAddr,
|
||||
"[x:x:x:x:x:x]\n\t[Jungfrau] Mac address of the top "
|
||||
"half or inner (source) udp interface. ");
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
udp_srcmac2, getSourceUDPMAC2, setSourceUDPMAC2, MacAddr,
|
||||
"[x:x:x:x:x:x]\n\t[Jungfrau][Moench] Mac address of the top "
|
||||
"half or inner (source) udp interface. ");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
udp_dstmac, getDestinationUDPMAC, setDestinationUDPMAC, MacAddr,
|
||||
@ -1646,10 +1657,12 @@ class CmdProxy {
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
udp_dstmac2, getDestinationUDPMAC2, setDestinationUDPMAC2, MacAddr,
|
||||
"[x:x:x:x:x:x]\n\t[Jungfrau] Mac address of the receiver (destination) "
|
||||
"[x:x:x:x:x:x]\n\t[Jungfrau][Moench] Mac address of the receiver "
|
||||
"(destination) "
|
||||
"udp interface 2. Not mandatory to set as udp_dstip2 retrieves it from "
|
||||
"slsReceiver process but must be set if you use a custom receiver (not "
|
||||
"slsReceiver). \n\t [Jungfrau] top half or inner interface \n\t "
|
||||
"slsReceiver). \n\t [Jungfrau][Moench] top half or inner interface "
|
||||
"\n\t "
|
||||
"[Gotthard2] veto debugging. Use router mac if router between detector "
|
||||
"and receiver.");
|
||||
|
||||
@ -1663,10 +1676,10 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID_GET(
|
||||
udp_dstport2, getDestinationUDPPort2, setDestinationUDPPort2,
|
||||
StringTo<int>,
|
||||
"[n]\n\t[Jungfrau][Eiger][Gotthard2] Port number of the "
|
||||
"[n]\n\t[Jungfrau][Moench][Eiger][Gotthard2] Port number of the "
|
||||
"receiver (destination) udp interface 2. Default is 50002. "
|
||||
"\n\tIf multi command, ports for each module is calculated "
|
||||
"(incremented by 2) \n\t[Jungfrau] top half or inner interface "
|
||||
"(incremented by 2) \n\t[Jungfrau][Moench] top half or inner interface "
|
||||
"\n\t[Eiger] "
|
||||
"right half \n\t[Gotthard2] veto debugging");
|
||||
|
||||
@ -1685,19 +1698,21 @@ class CmdProxy {
|
||||
GET_COMMAND(rx_printconfig, printRxConfiguration,
|
||||
"\n\tPrints the receiver configuration.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
tengiga, getTenGiga, setTenGiga, StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger][Ctb][Moench][Mythen3] 10GbE Enable.");
|
||||
INTEGER_COMMAND_VEC_ID(tengiga, getTenGiga, setTenGiga, StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger][Ctb][Mythen3] 10GbE Enable.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(flowcontrol10g, getTenGigaFlowControl,
|
||||
setTenGigaFlowControl, StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger][Jungfrau] 10GbE Flow Control.");
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
flowcontrol10g, getTenGigaFlowControl, setTenGigaFlowControl,
|
||||
StringTo<int>,
|
||||
"[0, 1]\n\t[Eiger][Jungfrau][Moench] 10GbE Flow Control.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
txdelay_frame, getTransmissionDelayFrame, setTransmissionDelayFrame,
|
||||
StringTo<int>,
|
||||
"[n_delay]\n\t[Eiger][Jungfrau][Mythen3] Transmission delay of first "
|
||||
"udp packet being streamed out of the module.\n\t[Jungfrau] [0-31] "
|
||||
"[n_delay]\n\t[Eiger][Jungfrau][Moench][Mythen3] Transmission delay of "
|
||||
"first "
|
||||
"udp packet being streamed out of the module.\n\t[Jungfrau][Moench] "
|
||||
"[0-31] "
|
||||
"Each value represents 1 ms\n\t[Eiger] Additional delay to "
|
||||
"txdelay_left and txdelay_right. Each value represents 10ns. Typical "
|
||||
"value is 50000.\n\t[Mythen3] [0-16777215] Each value represents 8 ns "
|
||||
@ -1939,13 +1954,15 @@ class CmdProxy {
|
||||
|
||||
/* Jungfrau Specific */
|
||||
|
||||
GET_COMMAND(chipversion, getChipVersion,
|
||||
"\n\t[Jungfrau] Returns chip version. Can be 1.0 or 1.1");
|
||||
GET_COMMAND(
|
||||
chipversion, getChipVersion,
|
||||
"\n\t[Jungfrau][Moench] Returns chip version. Can be 1.0 or 1.1");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
temp_threshold, getThresholdTemperature, setThresholdTemperature,
|
||||
StringTo<int>,
|
||||
"[n_temp (in degrees)]\n\t[Jungfrau] Threshold temperature in degrees. "
|
||||
"[n_temp (in degrees)]\n\t[Jungfrau][Moench] Threshold temperature in "
|
||||
"degrees. "
|
||||
"If temperature crosses threshold temperature and temperature control "
|
||||
"is enabled, power to chip will be switched off and temperature event "
|
||||
"occurs. To power on chip again, temperature has to be less than "
|
||||
@ -1954,7 +1971,7 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
temp_control, getTemperatureControl, setTemperatureControl,
|
||||
StringTo<int>,
|
||||
"[0, 1]\n\t[Jungfrau] Temperature control enable. Default is 0 "
|
||||
"[0, 1]\n\t[Jungfrau][Moench] Temperature control enable. Default is 0 "
|
||||
"(disabled). If temperature crosses threshold temperature and "
|
||||
"temperature control is enabled, power to chip will be switched off "
|
||||
"and temperature event occurs. To power on chip again, temperature has "
|
||||
@ -1964,7 +1981,8 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
autocompdisable, getAutoComparatorDisable, setAutoComparatorDisable,
|
||||
StringTo<int>,
|
||||
"[0, 1]\n\t[Jungfrau] Auto comparator disable mode. By default, the "
|
||||
"[0, 1]\n\t[Jungfrau][Moench] Auto comparator disable mode. By "
|
||||
"default, the "
|
||||
"on-chip gain switching is active during the entire exposure.This mode "
|
||||
"disables the on - chip gain switching comparator automatically after "
|
||||
"93.75% (only for chipv1.0) of exposure time (only for longer than "
|
||||
@ -1973,16 +1991,17 @@ class CmdProxy {
|
||||
"disabled(comparator enabled throughout). 1 enables mode. 0 disables "
|
||||
"mode. ");
|
||||
|
||||
TIME_COMMAND(compdisabletime, getComparatorDisableTime,
|
||||
setComparatorDisableTime,
|
||||
"[duration] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] Time "
|
||||
"before end of exposure when comparator is disabled. It is "
|
||||
"only possible for chipv1.1.");
|
||||
TIME_COMMAND(
|
||||
compdisabletime, getComparatorDisableTime, setComparatorDisableTime,
|
||||
"[duration] [(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench] Time "
|
||||
"before end of exposure when comparator is disabled. It is "
|
||||
"only possible for chipv1.1.");
|
||||
|
||||
INTEGER_COMMAND_SET_NOID_GET_ID(
|
||||
extrastoragecells, getNumberOfAdditionalStorageCells,
|
||||
setNumberOfAdditionalStorageCells, StringTo<int>,
|
||||
"[0-15]\n\t[Jungfrau] Only for chipv1.0. Number of additional storage "
|
||||
"[0-15]\n\t[Jungfrau][Moench] Only for chipv1.0. Number of additional "
|
||||
"storage "
|
||||
"cells. Default is "
|
||||
"0. For advanced users only. \n\tThe #images = #frames x #triggers x "
|
||||
"(#extrastoragecells + 1).");
|
||||
@ -1990,13 +2009,15 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
storagecell_start, getStorageCellStart, setStorageCellStart,
|
||||
StringTo<int>,
|
||||
"[0-max]\n\t[Jungfrau] Storage cell that stores the first acquisition "
|
||||
"[0-max]\n\t[Jungfrau][Moench] Storage cell that stores the first "
|
||||
"acquisition "
|
||||
"of the series. max is 15 (default) for chipv1.0 and 3 (default) for "
|
||||
"chipv1.1. For advanced users only.");
|
||||
|
||||
TIME_COMMAND(
|
||||
storagecell_delay, getStorageCellDelay, setStorageCellDelay,
|
||||
"[duration (0-1638375 ns)] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] "
|
||||
"[duration (0-1638375 ns)] [(optional unit) "
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Moench] "
|
||||
"Additional time delay between 2 consecutive exposures in burst mode "
|
||||
"(resolution of 25ns). Only applicable for chipv1.0. For advanced "
|
||||
"users only.");
|
||||
@ -2007,10 +2028,11 @@ class CmdProxy {
|
||||
"Jungfrau] Gain mode.\n\tCAUTION: Do not use fixg0 without caution, "
|
||||
"you can damage the detector!!!");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(filtercells, getNumberOfFilterCells,
|
||||
setNumberOfFilterCells, StringTo<int>,
|
||||
"[0-12]\n\t[Jungfrau] Set Filter Cell. Only for "
|
||||
"chipv1.1. Advanced user Command");
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
filtercells, getNumberOfFilterCells, setNumberOfFilterCells,
|
||||
StringTo<int>,
|
||||
"[0-12]\n\t[Jungfrau][Moench] Set Filter Cell. Only for "
|
||||
"chipv1.1. Advanced user Command");
|
||||
|
||||
/* Gotthard Specific */
|
||||
TIME_GET_COMMAND(exptimel, getExptimeLeft,
|
||||
@ -2092,36 +2114,36 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
asamples, getNumberOfAnalogSamples, setNumberOfAnalogSamples,
|
||||
StringTo<int>,
|
||||
"[n_samples]\n\t[CTB][Moench] Number of analog samples expected.");
|
||||
"[n_samples]\n\t[CTB] Number of analog samples expected.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
adcclk, getADCClock, setADCClock, StringTo<int>,
|
||||
"[n_clk in MHz]\n\t[Ctb][Moench] ADC clock frequency in MHz.");
|
||||
"[n_clk in MHz]\n\t[Ctb] ADC clock frequency in MHz.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(runclk, getRUNClock, setRUNClock, StringTo<int>,
|
||||
"[n_clk in MHz]\n\t[Ctb][Moench] Run clock in MHz.");
|
||||
"[n_clk in MHz]\n\t[Ctb] Run clock in MHz.");
|
||||
|
||||
GET_COMMAND(syncclk, getSYNCClock,
|
||||
"[n_clk in MHz]\n\t[Ctb][Moench] Sync clock in MHz.");
|
||||
"[n_clk in MHz]\n\t[Ctb] Sync clock in MHz.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
adcpipeline, getADCPipeline, setADCPipeline, StringTo<int>,
|
||||
"[n_value]\n\t[Ctb][Moench] Pipeline for ADC clock.");
|
||||
INTEGER_COMMAND_VEC_ID(adcpipeline, getADCPipeline, setADCPipeline,
|
||||
StringTo<int>,
|
||||
"[n_value]\n\t[Ctb] Pipeline for ADC clock.");
|
||||
|
||||
INTEGER_IND_COMMAND(v_limit, getVoltage, setVoltage, StringTo<int>,
|
||||
defs::V_LIMIT,
|
||||
"[n_value]\n\t[Ctb][Moench] Soft limit for power "
|
||||
"[n_value]\n\t[Ctb] Soft limit for power "
|
||||
"supplies (ctb only) and DACS in mV.");
|
||||
|
||||
INTEGER_COMMAND_HEX(adcenable, getADCEnableMask, setADCEnableMask,
|
||||
StringTo<uint32_t>,
|
||||
"[bitmask]\n\t[Ctb][Moench] ADC Enable Mask for 1Gb "
|
||||
"[bitmask]\n\t[Ctb] ADC Enable Mask for 1Gb "
|
||||
"Enable for each 32 ADC channel.");
|
||||
|
||||
INTEGER_COMMAND_HEX(
|
||||
adcenable10g, getTenGigaADCEnableMask, setTenGigaADCEnableMask,
|
||||
StringTo<uint32_t>,
|
||||
"[bitmask]\n\t[Ctb][Moench] ADC Enable Mask for 10Gb mode for each 32 "
|
||||
"[bitmask]\n\t[Ctb] ADC Enable Mask for 10Gb mode for each 32 "
|
||||
"ADC channel. However, if any of a consecutive 4 bits are enabled, the "
|
||||
"complete 4 bits are enabled.");
|
||||
|
||||
@ -2222,28 +2244,28 @@ class CmdProxy {
|
||||
|
||||
EXECUTE_SET_COMMAND_NOID_1ARG(
|
||||
savepattern, savePattern,
|
||||
"[fname]\n\t[Ctb][Moench][Mythen3] Saves pattern to file (ascii). "
|
||||
"\n\t[Ctb][Moench] Also executes pattern.");
|
||||
"[fname]\n\t[Ctb][Mythen3] Saves pattern to file (ascii). "
|
||||
"\n\t[Ctb] Also executes pattern.");
|
||||
|
||||
EXECUTE_SET_COMMAND(
|
||||
defaultpattern, loadDefaultPattern,
|
||||
"\n\t[Mythen3][Moench] Loads and runs default pattern in pattern "
|
||||
"\n\t[Mythen3] Loads and runs default pattern in pattern "
|
||||
"generator. It is to go back to initial settings.");
|
||||
|
||||
INTEGER_COMMAND_HEX_WIDTH16(patioctrl, getPatternIOControl,
|
||||
setPatternIOControl, StringTo<uint64_t>,
|
||||
"[64 bit mask]\n\t[Ctb][Moench] 64 bit mask "
|
||||
"[64 bit mask]\n\t[Ctb] 64 bit mask "
|
||||
"defining input (0) and output (1) signals.");
|
||||
|
||||
INTEGER_COMMAND_HEX_WIDTH16(
|
||||
patmask, getPatternMask, setPatternMask, StringTo<uint64_t>,
|
||||
"[64 bit mask]\n\t[Ctb][Moench][Mythen3] Selects the bits that will "
|
||||
"[64 bit mask]\n\t[Ctb][Mythen3] Selects the bits that will "
|
||||
"have a pattern mask applied to the selected patmask for every "
|
||||
"pattern.");
|
||||
|
||||
INTEGER_COMMAND_HEX_WIDTH16(
|
||||
patsetbit, getPatternBitMask, setPatternBitMask, StringTo<uint64_t>,
|
||||
"[64 bit mask]\n\t[Ctb][Moench][Mythen3] Sets the mask applied to "
|
||||
"[64 bit mask]\n\t[Ctb][Mythen3] Sets the mask applied to "
|
||||
"every pattern to the selected bits.");
|
||||
|
||||
EXECUTE_SET_COMMAND(patternstart, startPattern,
|
||||
@ -2253,10 +2275,10 @@ class CmdProxy {
|
||||
/* Advanced */
|
||||
|
||||
EXECUTE_SET_COMMAND(resetfpga, resetFPGA,
|
||||
"\n\t[Jungfrau][Ctb][Moench] Reset FPGA.");
|
||||
"\n\t[Jungfrau][Moench][Ctb] Reset FPGA.");
|
||||
|
||||
EXECUTE_SET_COMMAND(rebootcontroller, rebootController,
|
||||
"\n\t[Jungfrau][Ctb][Moench][Gotthard][Mythen3]["
|
||||
"\n\t[Jungfrau][Moench][Ctb][Gotthard][Mythen3]["
|
||||
"Gotthard2] Reboot controller of detector.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
@ -2267,18 +2289,18 @@ class CmdProxy {
|
||||
|
||||
EXECUTE_SET_COMMAND(
|
||||
firmwaretest, executeFirmwareTest,
|
||||
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] Firmware "
|
||||
"\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb] Firmware "
|
||||
"test, ie. reads a read fixed pattern from a register.");
|
||||
|
||||
EXECUTE_SET_COMMAND(
|
||||
bustest, executeBusTest,
|
||||
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] Bus test, "
|
||||
"\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb] Bus test, "
|
||||
"ie. Writes different values in a R/W register and confirms the "
|
||||
"writes to check bus.\n\tAdvanced User function!");
|
||||
|
||||
INTEGER_COMMAND_HEX(
|
||||
adcinvert, getADCInvert, setADCInvert, StringTo<uint32_t>,
|
||||
"[bitmask]\n\t[Ctb][Moench][Jungfrau] ADC Inversion "
|
||||
"[bitmask]\n\t[Ctb][Jungfrau][Moench] ADC Inversion "
|
||||
"Mask.\n\t[Jungfrau][Moench] Inversions on top of the default mask.");
|
||||
|
||||
/* Insignificant */
|
||||
@ -2303,19 +2325,19 @@ class CmdProxy {
|
||||
"\n\tClient IP Address that last communicated with the detector.");
|
||||
|
||||
GET_COMMAND(framecounter, getNumberOfFramesFromStart,
|
||||
"\n\t[Jungfrau][Mythen3][Gotthard2][Moench][CTB] "
|
||||
"\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB] "
|
||||
"Number of frames from start run control."
|
||||
"\n\t[Gotthard2] only in continuous mode.");
|
||||
|
||||
TIME_GET_COMMAND(runtime, getActualTime,
|
||||
"[(optional unit) "
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Mythen3][Gotthard2][Moench]["
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2]["
|
||||
"CTB] Time from detector start up."
|
||||
"\n\t[Gotthard2] not in burst and auto mode.");
|
||||
|
||||
TIME_GET_COMMAND(frametime, getMeasurementTime,
|
||||
"[(optional unit) "
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Mythen3][Gotthard2][Moench]["
|
||||
"ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2]["
|
||||
"CTB] Timestamp at a frame start."
|
||||
"\n\t[Gotthard2] not in burst and auto mode.");
|
||||
};
|
||||
|
@ -183,17 +183,12 @@ std::vector<defs::detectorSettings> Detector::getSettingsList() const {
|
||||
defs::HIGHGAIN, defs::DYNAMICGAIN, defs::LOWGAIN, defs::MEDIUMGAIN,
|
||||
defs::VERYHIGHGAIN};
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::detectorSettings>{defs::GAIN0,
|
||||
defs::HIGHGAIN0};
|
||||
case defs::GOTTHARD2:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::DYNAMICGAIN, defs::FIXGAIN1, defs::FIXGAIN2};
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::detectorSettings>{
|
||||
defs::G1_HIGHGAIN, defs::G1_LOWGAIN,
|
||||
defs::G2_HIGHCAP_HIGHGAIN, defs::G2_HIGHCAP_LOWGAIN,
|
||||
defs::G2_LOWCAP_HIGHGAIN, defs::G2_LOWCAP_LOWGAIN,
|
||||
defs::G4_HIGHGAIN, defs::G4_LOWGAIN};
|
||||
case defs::MYTHEN3:
|
||||
return std::vector<defs::detectorSettings>{defs::STANDARD, defs::FAST,
|
||||
defs::HIGHGAIN};
|
||||
@ -482,6 +477,7 @@ std::vector<defs::speedLevel> Detector::getReadoutSpeedList() const {
|
||||
switch (getDetectorType().squash()) {
|
||||
case defs::EIGER:
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::speedLevel>{defs::FULL_SPEED, defs::HALF_SPEED,
|
||||
defs::QUARTER_SPEED};
|
||||
case defs::GOTTHARD2:
|
||||
@ -604,6 +600,7 @@ std::vector<defs::dacIndex> Detector::getTemperatureList() const {
|
||||
case defs::CHIPTESTBOARD:
|
||||
return std::vector<defs::dacIndex>{defs::SLOW_ADC_TEMP};
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
case defs::GOTTHARD:
|
||||
return std::vector<defs::dacIndex>{defs::TEMPERATURE_ADC,
|
||||
defs::TEMPERATURE_FPGA};
|
||||
@ -642,6 +639,7 @@ Result<int> Detector::getTemperature(defs::dacIndex index,
|
||||
switch (getDetectorType().squash()) {
|
||||
case defs::EIGER:
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
case defs::MYTHEN3:
|
||||
case defs::GOTTHARD2:
|
||||
for (auto &it : res) {
|
||||
@ -669,6 +667,7 @@ std::vector<defs::dacIndex> Detector::getDacList() const {
|
||||
defs::VREF_DS, defs::VCASCN_PB, defs::VCASCP_PB, defs::VOUT_CM,
|
||||
defs::VCASC_OUT, defs::VIN_CM, defs::VREF_COMP, defs::IB_TESTC};
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VB_COMP, defs::VDD_PROT, defs::VIN_COM, defs::VREF_PRECH,
|
||||
defs::VB_PIXBUF, defs::VB_DS, defs::VREF_DS, defs::VREF_COMP};
|
||||
@ -686,10 +685,6 @@ std::vector<defs::dacIndex> Detector::getDacList() const {
|
||||
defs::VCAS, defs::VRPREAMP, defs::VCAL_N, defs::VIPRE,
|
||||
defs::VISHAPER, defs::VCAL_P, defs::VTRIM, defs::VDCSH,
|
||||
defs::VTHRESHOLD};
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::dacIndex>{
|
||||
defs::VBP_COLBUF, defs::VIPRE, defs::VIN_CM, defs::VB_SDA,
|
||||
defs::VCASC_SFP, defs::VOUT_CM, defs::VIPRE_CDS, defs::IBIAS_SFP};
|
||||
case defs::CHIPTESTBOARD:
|
||||
for (int i = 0; i != 18; ++i) {
|
||||
retval.push_back(static_cast<defs::dacIndex>(i));
|
||||
@ -919,7 +914,8 @@ Result<int> Detector::getNumberofUDPInterfaces(Positions pos) const {
|
||||
}
|
||||
|
||||
void Detector::setNumberofUDPInterfaces(int n, Positions pos) {
|
||||
if (getDetectorType().squash() != defs::JUNGFRAU) {
|
||||
auto detType = getDetectorType().squash();
|
||||
if (detType != defs::JUNGFRAU && detType != defs::MOENCH) {
|
||||
throw RuntimeError(
|
||||
"Cannot set number of udp interfaces for this detector.");
|
||||
}
|
||||
@ -1600,7 +1596,7 @@ void Detector::setTop(bool value, Positions pos) {
|
||||
pimpl->Parallel(&Module::setTop, pos, value);
|
||||
}
|
||||
|
||||
// Jungfrau Specific
|
||||
// Jungfrau/moench Specific
|
||||
Result<double> Detector::getChipVersion(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getChipVersion, pos);
|
||||
}
|
||||
@ -1672,6 +1668,7 @@ void Detector::setStorageCellDelay(ns value, Positions pos) {
|
||||
std::vector<defs::gainMode> Detector::getGainModeList() const {
|
||||
switch (getDetectorType().squash()) {
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
return std::vector<defs::gainMode>{
|
||||
defs::DYNAMIC, defs::FORCE_SWITCH_G1, defs::FORCE_SWITCH_G2,
|
||||
defs::FIX_G1, defs::FIX_G2, defs::FIX_G0};
|
||||
@ -1963,7 +1960,7 @@ void Detector::setDigitalPulsing(bool value, Positions pos) {
|
||||
pimpl->Parallel(&Module::setDigitalPulsing, pos, value);
|
||||
}
|
||||
|
||||
// CTB/ Moench Specific
|
||||
// CTB Specific
|
||||
|
||||
Result<int> Detector::getNumberOfAnalogSamples(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getNumberOfAnalogSamples, pos);
|
||||
@ -2301,8 +2298,6 @@ void Detector::startPattern(Positions pos) {
|
||||
pimpl->Parallel(&Module::startPattern, pos);
|
||||
}
|
||||
|
||||
// Moench
|
||||
|
||||
Result<std::map<std::string, std::string>>
|
||||
Detector::getAdditionalJsonHeader(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getAdditionalJsonHeader, pos);
|
||||
|
@ -320,10 +320,10 @@ void DetectorImpl::addModule(const std::string &hostname) {
|
||||
// module type updated by now
|
||||
shm()->detType = Parallel(&Module::getDetectorType, {})
|
||||
.tsquash("Inconsistent detector types.");
|
||||
// for moench and ctb
|
||||
// for ctb
|
||||
modules[pos]->updateNumberOfChannels();
|
||||
|
||||
// for eiger, jungfrau, gotthard2
|
||||
// for eiger, jungfrau, moench, gotthard2
|
||||
modules[pos]->updateNumberofUDPInterfaces();
|
||||
|
||||
// update zmq port in case numudpinterfaces changed
|
||||
@ -413,6 +413,7 @@ void DetectorImpl::setGapPixelsinCallback(const bool enable) {
|
||||
if (enable) {
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case MOENCH:
|
||||
break;
|
||||
case EIGER:
|
||||
if (size() && modules[0]->getQuad()) {
|
||||
@ -435,6 +436,7 @@ int DetectorImpl::getTransmissionDelay() const {
|
||||
bool eiger = false;
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case MOENCH:
|
||||
case MYTHEN3:
|
||||
break;
|
||||
case EIGER:
|
||||
@ -478,6 +480,7 @@ void DetectorImpl::setTransmissionDelay(int step) {
|
||||
bool eiger = false;
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case MOENCH:
|
||||
case MYTHEN3:
|
||||
break;
|
||||
case EIGER:
|
||||
@ -882,10 +885,10 @@ int DetectorImpl::InsertGapPixels(char *image, char *&gpImage, bool quadEnable,
|
||||
nMod1TotPixelsx /= 2;
|
||||
}
|
||||
// eiger requires inter chip gap pixels are halved
|
||||
// jungfrau prefers same inter chip gap pixels as the boundary pixels
|
||||
// jungfrau/moench prefers same inter chip gap pixels as the boundary pixels
|
||||
int divisionValue = 2;
|
||||
slsDetectorDefs::detectorType detType = shm()->detType;
|
||||
if (detType == JUNGFRAU) {
|
||||
if (detType == JUNGFRAU || detType == MOENCH) {
|
||||
divisionValue = 1;
|
||||
}
|
||||
LOG(logDEBUG) << "Insert Gap pixels Calculations:\n\t"
|
||||
@ -1382,8 +1385,8 @@ std::vector<char> DetectorImpl::readProgrammingFile(const std::string &fname) {
|
||||
bool isPof = false;
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
case CHIPTESTBOARD:
|
||||
if (fname.find(".pof") == std::string::npos) {
|
||||
throw RuntimeError("Programming file must be a pof file.");
|
||||
}
|
||||
@ -1521,6 +1524,7 @@ defs::xy DetectorImpl::getPortGeometry() const {
|
||||
portGeometry.x = modules[0]->getNumberofUDPInterfacesFromShm();
|
||||
break;
|
||||
case JUNGFRAU:
|
||||
case MOENCH:
|
||||
portGeometry.y = modules[0]->getNumberofUDPInterfacesFromShm();
|
||||
break;
|
||||
default:
|
||||
@ -1539,7 +1543,7 @@ defs::xy DetectorImpl::calculatePosition(int moduleIndex,
|
||||
}
|
||||
|
||||
defs::ROI DetectorImpl::getRxROI() const {
|
||||
if (shm()->detType == CHIPTESTBOARD || shm()->detType == MOENCH) {
|
||||
if (shm()->detType == CHIPTESTBOARD) {
|
||||
throw RuntimeError("RxRoi not implemented for this Detector");
|
||||
}
|
||||
if (modules.size() == 0) {
|
||||
@ -1614,7 +1618,7 @@ defs::ROI DetectorImpl::getRxROI() const {
|
||||
}
|
||||
|
||||
void DetectorImpl::setRxROI(const defs::ROI arg) {
|
||||
if (shm()->detType == CHIPTESTBOARD || shm()->detType == MOENCH) {
|
||||
if (shm()->detType == CHIPTESTBOARD) {
|
||||
throw RuntimeError("RxRoi not implemented for this Detector");
|
||||
}
|
||||
if (modules.size() == 0) {
|
||||
|
@ -357,7 +357,7 @@ class DetectorImpl : public virtual slsDetectorDefs {
|
||||
*/
|
||||
void readFrameFromReceiver();
|
||||
|
||||
/** [Eiger][Jungfrau]
|
||||
/** [Eiger][Jungfrau][Moench]
|
||||
* add gap pixels to the imag
|
||||
* @param image pointer to image without gap pixels
|
||||
* @param gpImage poiner to image with gap pixels, if NULL, allocated
|
||||
|
@ -91,7 +91,7 @@ std::string GetHelpDac(std::string dac) {
|
||||
}
|
||||
if (dac == "vref_ds") {
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Gotthard][Jungfrau] Dac for ??");
|
||||
"\n\t[Gotthard][Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "vcascn_pb") {
|
||||
return std::string(
|
||||
@ -103,7 +103,7 @@ std::string GetHelpDac(std::string dac) {
|
||||
}
|
||||
if (dac == "vout_cm") {
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Gotthard] Dac for ??\n\t[Moench] Dac for 5");
|
||||
"\n\t[Gotthard] Dac for ??");
|
||||
}
|
||||
if (dac == "vcasc_out") {
|
||||
return std::string(
|
||||
@ -111,11 +111,11 @@ std::string GetHelpDac(std::string dac) {
|
||||
}
|
||||
if (dac == "vin_cm") {
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Gotthard] Dac for ??\n\t[Moench] Dac for 2");
|
||||
"\n\t[Gotthard] Dac for ??");
|
||||
}
|
||||
if (dac == "vref_comp") {
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Gotthard][Jungfrau] Dac for ??");
|
||||
"\n\t[Gotthard][Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "ib_test_c") {
|
||||
return std::string(
|
||||
@ -129,7 +129,7 @@ std::string GetHelpDac(std::string dac) {
|
||||
if (dac == "vipre") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Mythen3] Dac for the "
|
||||
"preamplifier's input transistor current.\n\t[Moench] Dac for 1");
|
||||
"preamplifier's input transistor current.");
|
||||
}
|
||||
if (dac == "vdcsh") {
|
||||
return std::string(
|
||||
@ -224,7 +224,8 @@ std::string GetHelpDac(std::string dac) {
|
||||
}
|
||||
if (dac == "vref_prech") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Gotthard2][Jungfrau] "
|
||||
"[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Gotthard2][Jungfrau][Moench] "
|
||||
"Dac for reference votlage for precharing the preamplifier.");
|
||||
}
|
||||
if (dac == "vref_l_adc") {
|
||||
@ -254,44 +255,39 @@ std::string GetHelpDac(std::string dac) {
|
||||
"common mode voltage of ADC DAC bank 2.");
|
||||
}
|
||||
if (dac == "vb_ds") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Jungfrau] Dac for ??");
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "vb_comp") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Jungfrau] Dac for ??");
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "vb_pixbuf") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Jungfrau] Dac for ??");
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "vin_com") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Jungfrau] Dac for ??");
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "vdd_prot") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Jungfrau] Dac for ??");
|
||||
return std::string("[dac or mV value][(optional unit) mV] "
|
||||
"\n\t[Jungfrau][Moench] Dac for ??");
|
||||
}
|
||||
if (dac == "vbp_colbuf") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Moench] Dac for 0");
|
||||
return std::string("[dac or mV value][(optional unit) mV] \n");
|
||||
}
|
||||
if (dac == "vb_sda") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Moench] Dac for 3");
|
||||
return std::string("[dac or mV value][(optional unit) mV] \n");
|
||||
}
|
||||
if (dac == "vcasc_sfp") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Moench] Dac for 4");
|
||||
return std::string("[dac or mV value][(optional unit) mV] \n");
|
||||
}
|
||||
if (dac == "vipre_cds") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Moench] Dac for 6");
|
||||
return std::string("[dac or mV value][(optional unit) mV] \n");
|
||||
}
|
||||
if (dac == "ibias_sfp") {
|
||||
return std::string(
|
||||
"[dac or mV value][(optional unit) mV] \n\t[Moench] Dac for 7");
|
||||
return std::string("[dac or mV value][(optional unit) mV] \n");
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
|
@ -155,7 +155,7 @@ slsDetectorDefs::detectorType Module::getDetectorType() const {
|
||||
}
|
||||
|
||||
void Module::updateNumberOfChannels() {
|
||||
if (shm()->detType == CHIPTESTBOARD || shm()->detType == MOENCH) {
|
||||
if (shm()->detType == CHIPTESTBOARD) {
|
||||
std::array<int, 2> retvals{};
|
||||
sendToDetector(F_GET_NUM_CHANNELS, nullptr, retvals);
|
||||
shm()->nChan.x = retvals[0];
|
||||
@ -1225,7 +1225,7 @@ std::string Module::printReceiverConfiguration() {
|
||||
os << "\n\nModule " << moduleIndex << "\nReceiver Hostname:\t"
|
||||
<< getReceiverHostname();
|
||||
|
||||
if (shm()->detType == JUNGFRAU) {
|
||||
if (shm()->detType == JUNGFRAU || shm()->detType == MOENCH) {
|
||||
os << "\nNumber of Interfaces:\t" << getNumberofUDPInterfacesFromShm()
|
||||
<< "\nSelected Interface:\t" << getSelectedUDPInterface();
|
||||
}
|
||||
@ -1235,14 +1235,15 @@ std::string Module::printReceiverConfiguration() {
|
||||
<< getDestinationUDPIP() << "\nDestination UDP MAC:\t"
|
||||
<< getDestinationUDPMAC();
|
||||
|
||||
if (shm()->detType == JUNGFRAU) {
|
||||
if (shm()->detType == JUNGFRAU || shm()->detType == MOENCH) {
|
||||
os << "\nSource UDP IP2:\t" << getSourceUDPIP2()
|
||||
<< "\nSource UDP MAC2:\t" << getSourceUDPMAC2()
|
||||
<< "\nDestination UDP IP2:\t" << getDestinationUDPIP2()
|
||||
<< "\nDestination UDP MAC2:\t" << getDestinationUDPMAC2();
|
||||
}
|
||||
os << "\nDestination UDP Port:\t" << getDestinationUDPPort();
|
||||
if (shm()->detType == JUNGFRAU || shm()->detType == EIGER) {
|
||||
if (shm()->detType == JUNGFRAU || shm()->detType == MOENCH ||
|
||||
shm()->detType == EIGER) {
|
||||
os << "\nDestination UDP Port2:\t" << getDestinationUDPPort2();
|
||||
}
|
||||
os << "\n";
|
||||
@ -1791,7 +1792,7 @@ void Module::setTop(bool value) {
|
||||
sendToDetector(F_SET_TOP, static_cast<int>(value), nullptr);
|
||||
}
|
||||
|
||||
// Jungfrau Specific
|
||||
// Jungfrau/Moench Specific
|
||||
double Module::getChipVersion() const {
|
||||
return (sendToDetector<int>(F_GET_CHIP_VERSION)) / 10.00;
|
||||
}
|
||||
@ -2303,7 +2304,7 @@ void Module::setDigitalPulsing(const bool enable) {
|
||||
sendToDetector(F_SET_DIGITAL_PULSING, static_cast<int>(enable), nullptr);
|
||||
}
|
||||
|
||||
// CTB / Moench Specific
|
||||
// CTB Specific
|
||||
int Module::getNumberOfAnalogSamples() const {
|
||||
return sendToDetector<int>(F_GET_NUM_ANALOG_SAMPLES);
|
||||
}
|
||||
@ -2538,8 +2539,6 @@ void Module::setPatternBitMask(uint64_t mask) {
|
||||
|
||||
void Module::startPattern() { sendToDetector(F_START_PATTERN); }
|
||||
|
||||
// Moench
|
||||
|
||||
std::map<std::string, std::string> Module::getAdditionalJsonHeader() const {
|
||||
// TODO, refactor this function with a more robust sending.
|
||||
// Now assuming whitespace separated key value
|
||||
@ -2632,8 +2631,8 @@ void Module::programFPGA(std::vector<char> buffer,
|
||||
const bool forceDeleteNormalFile) {
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
case CHIPTESTBOARD:
|
||||
sendProgram(true, buffer, F_PROGRAM_FPGA, "Update Firmware", "",
|
||||
forceDeleteNormalFile);
|
||||
break;
|
||||
@ -2653,8 +2652,8 @@ void Module::updateDetectorServer(std::vector<char> buffer,
|
||||
const std::string &serverName) {
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
case CHIPTESTBOARD:
|
||||
sendProgram(true, buffer, F_UPDATE_DETECTOR_SERVER,
|
||||
"Update Detector Server (no tftp)", serverName);
|
||||
break;
|
||||
@ -2674,8 +2673,8 @@ void Module::updateDetectorServer(std::vector<char> buffer,
|
||||
void Module::updateKernel(std::vector<char> buffer) {
|
||||
switch (shm()->detType) {
|
||||
case JUNGFRAU:
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
case CHIPTESTBOARD:
|
||||
sendProgram(true, buffer, F_UPDATE_KERNEL, "Update Kernel");
|
||||
break;
|
||||
case MYTHEN3:
|
||||
|
@ -388,7 +388,7 @@ class Module : public virtual slsDetectorDefs {
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
* Jungfrau Specific *
|
||||
* Jungfrau/Moench Specific *
|
||||
* *
|
||||
* ************************************************/
|
||||
double getChipVersion() const;
|
||||
@ -490,7 +490,7 @@ class Module : public virtual slsDetectorDefs {
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
* CTB / Moench Specific *
|
||||
* CTB Specific *
|
||||
* *
|
||||
* ************************************************/
|
||||
int getNumberOfAnalogSamples() const;
|
||||
@ -501,12 +501,6 @@ class Module : public virtual slsDetectorDefs {
|
||||
void setADCEnableMask(uint32_t mask);
|
||||
uint32_t getTenGigaADCEnableMask() const;
|
||||
void setTenGigaADCEnableMask(uint32_t mask);
|
||||
|
||||
/**************************************************
|
||||
* *
|
||||
* CTB Specific *
|
||||
* *
|
||||
* ************************************************/
|
||||
int getNumberOfDigitalSamples() const;
|
||||
void setNumberOfDigitalSamples(int value);
|
||||
readoutMode getReadoutMode() const;
|
||||
|
@ -107,7 +107,7 @@ TEST_CASE("adcvpp", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getADCVpp(false);
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -132,14 +132,14 @@ TEST_CASE("adcvpp", "[.cmd]") {
|
||||
}
|
||||
}
|
||||
|
||||
/* CTB/ Moench Specific */
|
||||
/* CTB Specific */
|
||||
|
||||
TEST_CASE("samples", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_asamples = det.getNumberOfAnalogSamples();
|
||||
Result<int> prev_dsamples = 0;
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
@ -186,7 +186,7 @@ TEST_CASE("asamples", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getNumberOfAnalogSamples();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -216,7 +216,7 @@ TEST_CASE("adcclk", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getADCClock();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -247,7 +247,7 @@ TEST_CASE("runclk", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getRUNClock();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -277,7 +277,7 @@ TEST_CASE("syncclk", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
REQUIRE_NOTHROW(proxy.Call("syncclk", {}, -1, GET));
|
||||
} else {
|
||||
// clock index might work
|
||||
@ -290,7 +290,7 @@ TEST_CASE("adcpipeline", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getADCPipeline();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -325,7 +325,7 @@ TEST_CASE("v_limit", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getVoltage(defs::V_LIMIT);
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -363,7 +363,7 @@ TEST_CASE("adcenable", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getADCEnableMask();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -393,7 +393,7 @@ TEST_CASE("adcenable10g", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getTenGigaADCEnableMask();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
|
@ -23,7 +23,7 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
SECTION("vb_comp") { test_dac(defs::VB_COMP, "vb_comp", 1220); }
|
||||
SECTION("vdd_prot") { test_dac(defs::VDD_PROT, "vdd_prot", 3000); }
|
||||
SECTION("vin_com") { test_dac(defs::VIN_COM, "vin_com", 1053); }
|
||||
@ -102,7 +102,7 @@ TEST_CASE("selinterface", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getSelectedUDPInterface().tsquash(
|
||||
"inconsistent selected interface to test");
|
||||
{
|
||||
@ -127,13 +127,13 @@ TEST_CASE("selinterface", "[.cmd]") {
|
||||
}
|
||||
}
|
||||
|
||||
/* Jungfrau Specific */
|
||||
/* Jungfrau/moench Specific */
|
||||
|
||||
TEST_CASE("temp_threshold", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getThresholdTemperature();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -163,7 +163,7 @@ TEST_CASE("chipversion", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
REQUIRE_NOTHROW(proxy.Call("chipversion", {}, -1, GET));
|
||||
} else {
|
||||
REQUIRE_THROWS(proxy.Call("chipversion", {}, -1, GET));
|
||||
@ -175,7 +175,7 @@ TEST_CASE("temp_control", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getTemperatureControl();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -205,7 +205,7 @@ TEST_CASE("temp_event", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("temp_event", {"0"}, -1, PUT, oss);
|
||||
@ -226,7 +226,7 @@ TEST_CASE("autocompdisable", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getAutoComparatorDisable();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -256,7 +256,7 @@ TEST_CASE("compdisabletime", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU &&
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MOENCH) &&
|
||||
det.getChipVersion().squash() * 10 == 11) {
|
||||
auto prev_val = det.getComparatorDisableTime();
|
||||
{
|
||||
@ -287,7 +287,7 @@ TEST_CASE("extrastoragecells", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
// chip version 1.0
|
||||
if (det.getChipVersion().squash() * 10 == 10) {
|
||||
auto prev_val = det.getNumberOfAdditionalStorageCells().tsquash(
|
||||
@ -330,7 +330,7 @@ TEST_CASE("storagecell_start", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getStorageCellStart();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -375,7 +375,7 @@ TEST_CASE("storagecell_delay", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
// chip version 1.0
|
||||
if (det.getChipVersion().squash() * 10 == 10) {
|
||||
auto prev_val = det.getStorageCellDelay();
|
||||
@ -416,7 +416,7 @@ TEST_CASE("gainmode", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getGainMode();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -465,7 +465,7 @@ TEST_CASE("filtercells", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
// chip version 1.1
|
||||
if (det.getChipVersion().squash() * 10 == 11) {
|
||||
auto prev_val = det.getNumberOfFilterCells();
|
||||
@ -510,7 +510,7 @@ TEST_CASE("sync", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getSynchronization().tsquash(
|
||||
"inconsistent synchronization to test");
|
||||
{
|
||||
|
@ -19,94 +19,4 @@ using test::PUT;
|
||||
|
||||
/* dacs */
|
||||
|
||||
TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs]") {
|
||||
// vbp_colbuf, vipre, vin_cm", vb_sda, vcasc_sfp, vout_cm, vipre_cds,
|
||||
// ibias_sfp
|
||||
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::MOENCH) {
|
||||
SECTION("vbp_colbuf") {
|
||||
test_dac(defs::VBP_COLBUF, "vbp_colbuf", 1300);
|
||||
}
|
||||
SECTION("vipre") { test_dac(defs::VIPRE, "vipre", 1000); }
|
||||
SECTION("vin_cm") { test_dac(defs::VIN_CM, "vin_cm", 1400); }
|
||||
SECTION("vb_sda") { test_dac(defs::VB_SDA, "vb_sda", 680); }
|
||||
SECTION("vcasc_sfp") { test_dac(defs::VCASC_SFP, "vcasc_sfp", 1428); }
|
||||
SECTION("vout_cm") { test_dac(defs::VOUT_CM, "vout_cm", 1200); }
|
||||
SECTION("vipre_cds") { test_dac(defs::VIPRE_CDS, "vipre_cds", 800); }
|
||||
SECTION("ibias_sfp") { test_dac(defs::IBIAS_SFP, "ibias_sfp", 900); }
|
||||
|
||||
// eiger
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vthreshold"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vsvp"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vsvn"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vtrim"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vrpreamp"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vrshaper"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vtgstv"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcmp_ll"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcmp_lr"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcal"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcmp_rl"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcmp_rr"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"rxb_rb"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"rxb_lb"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcp"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcn"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vishaper"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"iodelay"}, -1, GET));
|
||||
// jungfrau
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_comp"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vdd_prot"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vin_com"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_prech"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_pixbuf"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_ds"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_ds"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_comp"}, -1, GET));
|
||||
// gotthard
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_ds"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcascn_pb"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcascp_pb"}, -1, GET));
|
||||
// REQUIRE_THROWS(proxy.Call("dac", {"vout_cm"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcasc_out"}, -1, GET));
|
||||
// REQUIRE_THROWS(proxy.Call("dac", {"vin_cm"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_comp"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"ib_test_c"}, -1, GET));
|
||||
// mythen3
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vrpreamp"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vrshaper"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vrshaper_n"}, -1, GET));
|
||||
// REQUIRE_THROWS(proxy.Call("dac", {"vipre"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vishaper"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vdcsh"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vth1"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vth2"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vth3"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcal_n"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcal_p"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vtrim"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcassh"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcas"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vicin"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vipre_out"}, -1, GET));
|
||||
// gotthard2
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_h_adc"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_comp_fe"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_comp_adc"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcom_cds"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_rstore"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_opa_1st"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_comp_fe"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcom_adc1"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_l_adc"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vref_cds"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_cs"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vb_opa_fd"}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("dac", {"vcom_adc2"}, -1, GET));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace sls
|
||||
|
@ -23,8 +23,7 @@ TEST_CASE("pattern", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
// no proper test for put
|
||||
REQUIRE_THROWS(proxy.Call("pattern", {}, -1, GET));
|
||||
} else {
|
||||
@ -36,8 +35,7 @@ TEST_CASE("savepattern", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
REQUIRE_THROWS(
|
||||
proxy.Call("savepattern", {"/tmp/pattern.txt"}, -1, GET));
|
||||
if (det.size() == 1) {
|
||||
@ -54,7 +52,7 @@ TEST_CASE("defaultpattern", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::MOENCH || det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::MYTHEN3) {
|
||||
REQUIRE_THROWS(proxy.Call("defaultpattern", {}, -1, GET));
|
||||
REQUIRE_NOTHROW(proxy.Call("defaultpattern", {}, -1, PUT));
|
||||
} else {
|
||||
@ -68,7 +66,7 @@ TEST_CASE("patioctrl", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getPatternIOControl();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -98,8 +96,7 @@ TEST_CASE("patword", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
int addr = 0x23;
|
||||
std::string saddr = ToStringHex(addr, 4);
|
||||
auto prev_val = det.getPatternWord(addr);
|
||||
@ -134,8 +131,7 @@ TEST_CASE("patlimits", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
auto prev_val = det.getPatternLoopAddresses(-1);
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -161,8 +157,7 @@ TEST_CASE("patloop", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
for (int iLoop = 0; iLoop != MAX_PATTERN_LEVELS; ++iLoop) {
|
||||
// m3 only has 3 levels
|
||||
if (det_type == defs::MYTHEN3 && iLoop >= 3) {
|
||||
@ -208,8 +203,7 @@ TEST_CASE("patnloop", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
for (int iLoop = 0; iLoop != MAX_PATTERN_LEVELS; ++iLoop) {
|
||||
// m3 only has 3 levels
|
||||
if (det_type == defs::MYTHEN3 && iLoop >= 3) {
|
||||
@ -254,8 +248,7 @@ TEST_CASE("patwait", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
for (int iLoop = 0; iLoop != MAX_PATTERN_LEVELS; ++iLoop) {
|
||||
// m3 only has 3 levels
|
||||
if (det_type == defs::MYTHEN3 && iLoop >= 3) {
|
||||
@ -300,8 +293,7 @@ TEST_CASE("patwaittime", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
for (int iLoop = 0; iLoop != MAX_PATTERN_LEVELS; ++iLoop) {
|
||||
// m3 only has 3 levels
|
||||
if (det_type == defs::MYTHEN3 && iLoop >= 3) {
|
||||
@ -346,8 +338,7 @@ TEST_CASE("patmask", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
auto prev_val = det.getPatternMask();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -372,8 +363,7 @@ TEST_CASE("patsetbit", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
|
||||
auto prev_val = det.getPatternBitMask();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
|
@ -451,7 +451,7 @@ TEST_CASE("rx_roi", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
REQUIRE_THROWS(proxy.Call("rx_roi", {"5", "10"}, -1, PUT));
|
||||
} else {
|
||||
auto prev_val = det.getRxROI();
|
||||
@ -513,7 +513,7 @@ TEST_CASE("rx_clearroi", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::CHIPTESTBOARD) {
|
||||
REQUIRE_THROWS(proxy.Call("rx_clearroi", {}, -1, PUT));
|
||||
} else {
|
||||
auto prev_val = det.getRxROI();
|
||||
@ -805,7 +805,7 @@ TEST_CASE("rx_zmqport", "[.cmd][.rx]") {
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER) {
|
||||
socketsperdetector *= 2;
|
||||
} else if (det_type == defs::JUNGFRAU) {
|
||||
} else if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
proxy.Call("numinterfaces", {"2"}, -1, PUT);
|
||||
socketsperdetector *= 2;
|
||||
}
|
||||
@ -830,7 +830,7 @@ TEST_CASE("rx_zmqport", "[.cmd][.rx]") {
|
||||
for (int i = 0; i != det.size(); ++i) {
|
||||
det.setRxZmqPort(prev_val_zmqport[i], i);
|
||||
}
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
det.setNumberofUDPInterfaces(prev_val_numinterfaces);
|
||||
}
|
||||
}
|
||||
@ -948,8 +948,6 @@ TEST_CASE("rx_dbitoffset", "[.cmd][.rx]") {
|
||||
}
|
||||
}
|
||||
|
||||
/* Moench */
|
||||
|
||||
TEST_CASE("rx_jsonaddheader", "[.cmd][.rx]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
|
@ -149,7 +149,8 @@ TEST_CASE("moduleid", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::GOTTHARD2 || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||
det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
REQUIRE_NOTHROW(proxy.Call("moduleid", {}, -1, GET));
|
||||
} else {
|
||||
REQUIRE_THROWS(proxy.Call("moduleid", {}, -1, GET));
|
||||
@ -217,6 +218,7 @@ TEST_CASE("settings", "[.cmd]") {
|
||||
std::vector<std::string> sett;
|
||||
switch (det_type) {
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
sett.push_back("gain0");
|
||||
sett.push_back("highgain0");
|
||||
break;
|
||||
@ -232,16 +234,6 @@ TEST_CASE("settings", "[.cmd]") {
|
||||
sett.push_back("fixgain1");
|
||||
sett.push_back("fixgain2");
|
||||
break;
|
||||
case defs::MOENCH:
|
||||
sett.push_back("g1_hg");
|
||||
sett.push_back("g1_lg");
|
||||
sett.push_back("g2_hc_hg");
|
||||
sett.push_back("g2_hc_lg");
|
||||
sett.push_back("g2_lc_hg");
|
||||
sett.push_back("g2_lc_lg");
|
||||
sett.push_back("g4_hg");
|
||||
sett.push_back("g4_lg");
|
||||
break;
|
||||
case defs::MYTHEN3:
|
||||
sett.push_back("standard");
|
||||
sett.push_back("fast");
|
||||
@ -525,7 +517,8 @@ TEST_CASE("gappixels", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::EIGER) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::EIGER) {
|
||||
auto prev_val = det.getGapPixelsinCallback();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -562,17 +555,17 @@ TEST_CASE("fliprows", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
bool jungfrauhw2 = false;
|
||||
if (det_type == defs::JUNGFRAU &&
|
||||
bool hw2 = false;
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MOENCH) &&
|
||||
((det.getHardwareVersion().tsquash(
|
||||
"inconsistent serial number to test") == "2.0"))) {
|
||||
jungfrauhw2 = true;
|
||||
hw2 = true;
|
||||
}
|
||||
if (det_type == defs::EIGER || jungfrauhw2) {
|
||||
if (det_type == defs::EIGER || hw2) {
|
||||
auto previous = det.getFlipRows();
|
||||
auto previous_numudp = det.getNumberofUDPInterfaces().tsquash(
|
||||
"inconsistent number of udp interfaces to test");
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
det.setNumberofUDPInterfaces(2);
|
||||
}
|
||||
std::ostringstream oss1, oss2, oss3;
|
||||
@ -585,7 +578,7 @@ TEST_CASE("fliprows", "[.cmd]") {
|
||||
for (int i = 0; i != det.size(); ++i) {
|
||||
det.setFlipRows(previous[i], {i});
|
||||
}
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
det.setNumberofUDPInterfaces(previous_numudp);
|
||||
}
|
||||
} else {
|
||||
@ -599,10 +592,10 @@ TEST_CASE("master", "[.cmd]") {
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD || det_type == defs::GOTTHARD2 ||
|
||||
det_type == defs::JUNGFRAU) {
|
||||
det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
REQUIRE_NOTHROW(proxy.Call("master", {}, -1, GET));
|
||||
if (det_type == defs::EIGER || det_type == defs::GOTTHARD2 ||
|
||||
det_type == defs::JUNGFRAU) {
|
||||
det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
// get previous master
|
||||
int prevMaster = 0;
|
||||
{
|
||||
@ -743,7 +736,7 @@ TEST_CASE("exptime", "[.cmd][.time]") {
|
||||
proxy.Call("exptime", {"1s"}, -1, PUT, oss);
|
||||
REQUIRE(oss.str() == "exptime 1s\n");
|
||||
}
|
||||
if (det_type != defs::JUNGFRAU) {
|
||||
if (det_type != defs::JUNGFRAU && det_type != defs::MOENCH) {
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("exptime", {"0"}, -1, PUT, oss);
|
||||
@ -849,7 +842,6 @@ TEST_CASE("delayl", "[.cmd]") {
|
||||
switch (det_type) {
|
||||
case defs::EIGER:
|
||||
case defs::CHIPTESTBOARD:
|
||||
case defs::MOENCH:
|
||||
case defs::GOTTHARD2:
|
||||
case defs::MYTHEN3:
|
||||
REQUIRE_THROWS(proxy.Call("delayl", {}, -1, GET));
|
||||
@ -867,7 +859,6 @@ TEST_CASE("periodl", "[.cmd]") {
|
||||
switch (det_type) {
|
||||
case defs::EIGER:
|
||||
case defs::CHIPTESTBOARD:
|
||||
case defs::MOENCH:
|
||||
case defs::GOTTHARD2:
|
||||
case defs::MYTHEN3:
|
||||
REQUIRE_THROWS(proxy.Call("periodl", {}, -1, GET));
|
||||
@ -1001,12 +992,12 @@ TEST_CASE("readoutspeed", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
det_type == defs::MOENCH || det_type == defs::GOTTHARD2) {
|
||||
auto prev_val = det.getReadoutSpeed();
|
||||
|
||||
// full speed for jungfrau only works for new boards (chipv1.1 is with
|
||||
// new board [hw1.0 and chipv1.0 not tested here])
|
||||
if ((det_type == defs::JUNGFRAU &&
|
||||
// full speed for jungfrau/moench only works for new boards (chipv1.1 is
|
||||
// with new board [hw1.0 and chipv1.0 not tested here])
|
||||
if (((det_type == defs::JUNGFRAU || det_type == defs::MOENCH) &&
|
||||
det.getChipVersion().squash() * 10 == 11) ||
|
||||
(det_type == defs::EIGER)) {
|
||||
std::ostringstream oss1, oss2, oss3, oss4;
|
||||
@ -1020,7 +1011,8 @@ TEST_CASE("readoutspeed", "[.cmd]") {
|
||||
REQUIRE(oss4.str() == "readoutspeed full_speed\n");
|
||||
}
|
||||
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
{
|
||||
std::ostringstream oss1, oss2, oss3, oss4;
|
||||
proxy.Call("readoutspeed", {"1"}, -1, PUT, oss1);
|
||||
@ -1086,7 +1078,7 @@ TEST_CASE("readoutspeedlist", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::GOTTHARD2 || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::EIGER) {
|
||||
det_type == defs::MOENCH || det_type == defs::EIGER) {
|
||||
REQUIRE_NOTHROW(proxy.Call("readoutspeedlist", {}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("readoutspeedlist", {}, -1, PUT));
|
||||
} else {
|
||||
@ -1099,7 +1091,7 @@ TEST_CASE("adcphase", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::GOTTHARD || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH) {
|
||||
det_type == defs::MOENCH || det_type == defs::CHIPTESTBOARD) {
|
||||
if (det_type == defs::GOTTHARD) {
|
||||
std::ostringstream oss1;
|
||||
proxy.Call("adcphase", {"20"}, -1, PUT, oss1);
|
||||
@ -1137,8 +1129,8 @@ TEST_CASE("maxadcphaseshift", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MYTHEN3 || // only because clk index of 0 exists
|
||||
det_type == defs::GOTTHARD2) { // only because clk index of 0 exists
|
||||
REQUIRE_NOTHROW(proxy.Call("maxadcphaseshift", {}, -1, GET));
|
||||
@ -1151,7 +1143,8 @@ TEST_CASE("dbitphase", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD) {
|
||||
auto prev_val = det.getDBITPhase();
|
||||
{
|
||||
std::ostringstream oss1, oss2;
|
||||
@ -1180,7 +1173,8 @@ TEST_CASE("maxdbitphaseshift", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MYTHEN3 || // only because clk index of 0 exists
|
||||
det_type == defs::GOTTHARD2) { // only because clk index of 0 exists
|
||||
REQUIRE_NOTHROW(proxy.Call("maxdbitphaseshift", {}, -1, GET));
|
||||
@ -1305,8 +1299,8 @@ TEST_CASE("highvoltage", "[.cmd]") {
|
||||
}
|
||||
}
|
||||
// range 0, 60 - 200
|
||||
else if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH) {
|
||||
else if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD) {
|
||||
REQUIRE_THROWS(proxy.Call("highvoltage", {"50"}, -1, PUT));
|
||||
{
|
||||
std::ostringstream oss1, oss2;
|
||||
@ -1384,8 +1378,8 @@ TEST_CASE("powerchip", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2 || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3 || det_type == defs::GOTTHARD2) {
|
||||
auto prev_val = det.getPowerChip();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -1434,8 +1428,9 @@ TEST_CASE("imagetest", "[.cmd]") {
|
||||
for (int i = 0; i != det.size(); ++i) {
|
||||
det.setImageTestMode(prev_val[i], {i});
|
||||
}
|
||||
} else if (det_type != defs::JUNGFRAU && det_type != defs::EIGER) {
|
||||
// wont fail for eiger and jungfrau virtual servers
|
||||
} else if (det_type != defs::JUNGFRAU && det_type != defs::MOENCH &&
|
||||
det_type != defs::EIGER) {
|
||||
// wont fail for eiger and jungfrau/moench virtual servers
|
||||
REQUIRE_THROWS(proxy.Call("imagetest", {}, -1, GET));
|
||||
}
|
||||
}
|
||||
@ -1557,7 +1552,7 @@ TEST_CASE("filterresistor", "[.cmd]") {
|
||||
|
||||
// only for chipv1.1
|
||||
bool chip11 = false;
|
||||
if (det_type == defs::JUNGFRAU &&
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MOENCH) &&
|
||||
det.getChipVersion().squash() * 10 == 11) {
|
||||
chip11 = true;
|
||||
}
|
||||
@ -1648,14 +1643,15 @@ TEST_CASE("readnrows", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||
bool jungfrauhw2 = false;
|
||||
if (det_type == defs::JUNGFRAU &&
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
bool hw2 = false;
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MOENCH) &&
|
||||
((det.getHardwareVersion().tsquash(
|
||||
"inconsistent hardware version number to test") == "2.0"))) {
|
||||
jungfrauhw2 = true;
|
||||
hw2 = true;
|
||||
}
|
||||
if (det_type == defs::JUNGFRAU && !jungfrauhw2) {
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MOENCH) && !hw2) {
|
||||
{
|
||||
std::ostringstream oss;
|
||||
proxy.Call("readnrows", {}, -1, GET, oss);
|
||||
@ -1678,7 +1674,7 @@ TEST_CASE("readnrows", "[.cmd]") {
|
||||
proxy.Call("readnrows", {"16"}, -1, PUT, oss);
|
||||
REQUIRE(oss.str() == "readnrows 16\n");
|
||||
}
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
REQUIRE_THROWS(proxy.Call("readnrows", {"7"}, -1, PUT));
|
||||
REQUIRE_THROWS(proxy.Call("readnrows", {"20"}, -1, PUT));
|
||||
REQUIRE_THROWS(proxy.Call("readnrows", {"44"}, -1, PUT));
|
||||
@ -1700,7 +1696,8 @@ TEST_CASE("currentsource", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::GOTTHARD2 || det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::GOTTHARD2 || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getCurrentSource();
|
||||
|
||||
if (det_type == defs::GOTTHARD2) {
|
||||
@ -1724,7 +1721,7 @@ TEST_CASE("currentsource", "[.cmd]") {
|
||||
REQUIRE_THROWS(proxy.Call("currentsource",
|
||||
{"1", "fix", "42", "normal"}, -1, PUT));
|
||||
}
|
||||
// jungfrau
|
||||
// jungfrau/moench
|
||||
else {
|
||||
int chipVersion = det.getChipVersion().tsquash(
|
||||
"inconsistent chip versions to test") *
|
||||
@ -1852,7 +1849,8 @@ TEST_CASE("temp_adc", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::GOTTHARD) {
|
||||
REQUIRE_NOTHROW(proxy.Call("temp_adc", {}, -1, GET));
|
||||
std::ostringstream oss;
|
||||
REQUIRE_NOTHROW(proxy.Call("temp_adc", {}, 0, GET, oss));
|
||||
@ -1867,7 +1865,7 @@ TEST_CASE("temp_fpga", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type != defs::MOENCH && det_type != defs::CHIPTESTBOARD) {
|
||||
if (det_type != defs::CHIPTESTBOARD) {
|
||||
REQUIRE_NOTHROW(proxy.Call("temp_fpga", {}, -1, GET));
|
||||
std::ostringstream oss;
|
||||
REQUIRE_NOTHROW(proxy.Call("temp_fpga", {}, 0, GET, oss));
|
||||
@ -1924,7 +1922,7 @@ TEST_CASE("defaultdac", "[.cmd]") {
|
||||
det.setDefaultDac(it, prev_val[i], {i});
|
||||
}
|
||||
}
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
std::vector<defs::dacIndex> daclist = {
|
||||
defs::VREF_PRECH, defs::VREF_DS, defs::VREF_COMP};
|
||||
for (auto it : daclist) {
|
||||
@ -1964,7 +1962,7 @@ TEST_CASE("resetdacs", "[.cmd]") {
|
||||
REQUIRE_NOTHROW(proxy.Call("resetdacs", {}, -1, PUT));
|
||||
REQUIRE_NOTHROW(proxy.Call("resetdacs", {"hard"}, -1, PUT));
|
||||
|
||||
// settings should not change especially for jungfrau and m3
|
||||
// settings should not change especially for jungfrau/moench and m3
|
||||
auto next_val = det.getSettings();
|
||||
for (int i = 0; i != det.size(); ++i) {
|
||||
REQUIRE(prev_val[i] == next_val[i]);
|
||||
@ -1984,7 +1982,8 @@ TEST_CASE("trigger", "[.cmd]") {
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::MYTHEN3) {
|
||||
REQUIRE_NOTHROW(proxy.Call("trigger", {}, -1, PUT));
|
||||
} else if (det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||
} else if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
auto prev_timing =
|
||||
det.getTimingMode().tsquash("inconsistent timing mode in test");
|
||||
auto prev_frames =
|
||||
@ -2024,7 +2023,8 @@ TEST_CASE("blockingtrigger", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
REQUIRE_THROWS(proxy.Call("blockingtrigger", {}, -1, GET));
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
auto prev_timing =
|
||||
det.getTimingMode().tsquash("inconsistent timing mode in test");
|
||||
auto prev_frames =
|
||||
@ -2275,6 +2275,7 @@ TEST_CASE("scan", "[.cmd]") {
|
||||
notImplementedInd = defs::VCASCP_PB;
|
||||
break;
|
||||
case defs::JUNGFRAU:
|
||||
case defs::MOENCH:
|
||||
ind = defs::VB_COMP;
|
||||
notImplementedInd = defs::VSVP;
|
||||
break;
|
||||
@ -2282,10 +2283,6 @@ TEST_CASE("scan", "[.cmd]") {
|
||||
ind = defs::VREF_DS;
|
||||
notImplementedInd = defs::VSVP;
|
||||
break;
|
||||
case defs::MOENCH:
|
||||
ind = defs::VBP_COLBUF;
|
||||
notImplementedInd = defs::VSVP;
|
||||
break;
|
||||
case defs::GOTTHARD2:
|
||||
ind = defs::VB_COMP_FE;
|
||||
notImplementedInd = defs::VSVP;
|
||||
@ -2401,7 +2398,7 @@ TEST_CASE("numinterfaces", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getNumberofUDPInterfaces().tsquash(
|
||||
"inconsistent numinterfaces to test");
|
||||
{
|
||||
@ -2456,8 +2453,9 @@ TEST_CASE("udp_dstlist", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::EIGER ||
|
||||
det_type == defs::MYTHEN3 || det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::EIGER || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
REQUIRE_NOTHROW(proxy.Call("udp_dstlist", {}, 0, GET, std::cout, 0));
|
||||
REQUIRE_THROWS(proxy.Call(
|
||||
"udp_dstlist", {"ip=0.0.0.0", "mac=00:00:00:00:00:00", "port=1233"},
|
||||
@ -2471,8 +2469,9 @@ TEST_CASE("udp_numdst", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::EIGER ||
|
||||
det_type == defs::MYTHEN3 || det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::EIGER || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
REQUIRE_NOTHROW(proxy.Call("udp_numdst", {}, -1, GET));
|
||||
} else {
|
||||
REQUIRE_THROWS(proxy.Call("udp_numdst", {}, -1, GET));
|
||||
@ -2491,8 +2490,8 @@ TEST_CASE("udp_firstdst", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3 || det_type == defs::GOTTHARD2) {
|
||||
auto prev_val = det.getFirstUDPDestination();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -2568,7 +2567,8 @@ TEST_CASE("udp_srcip2", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
auto prev_val = det.getSourceUDPIP2();
|
||||
REQUIRE_THROWS(proxy.Call("udp_srcip2", {"0.0.0.0"}, -1, PUT));
|
||||
{
|
||||
@ -2589,7 +2589,8 @@ TEST_CASE("udp_dstip2", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
REQUIRE_THROWS(proxy.Call("udp_dstip2", {"0.0.0.0"}, -1, PUT));
|
||||
} else {
|
||||
REQUIRE_THROWS(proxy.Call("udp_dstip2", {}, -1, GET));
|
||||
@ -2600,7 +2601,8 @@ TEST_CASE("udp_srcmac2", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
auto prev_val = det.getSourceUDPMAC2();
|
||||
REQUIRE_THROWS(
|
||||
proxy.Call("udp_srcmac2", {"00:00:00:00:00:00"}, -1, PUT));
|
||||
@ -2623,7 +2625,8 @@ TEST_CASE("udp_dstmac2", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD2) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
REQUIRE_THROWS(
|
||||
proxy.Call("udp_dstmac2", {"00:00:00:00:00:00"}, -1, PUT));
|
||||
} else {
|
||||
@ -2635,8 +2638,8 @@ TEST_CASE("udp_dstport2", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD2 ||
|
||||
det_type == defs::EIGER) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::GOTTHARD2 || det_type == defs::EIGER) {
|
||||
auto prev_val = det.getDestinationUDPPort2();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -2671,7 +2674,7 @@ TEST_CASE("tengiga", "[.cmd]") {
|
||||
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3) {
|
||||
det_type == defs::MYTHEN3) {
|
||||
auto tengiga = det.getTenGiga();
|
||||
det.setTenGiga(false);
|
||||
|
||||
@ -2694,7 +2697,8 @@ TEST_CASE("flowcontrol10g", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getTenGigaFlowControl();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -2724,10 +2728,11 @@ TEST_CASE("txdelay_frame", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3) {
|
||||
auto prev_val = det.getTransmissionDelayFrame();
|
||||
auto val = 5000;
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
val = 5;
|
||||
}
|
||||
std::string sval = std::to_string(val);
|
||||
@ -2751,10 +2756,11 @@ TEST_CASE("txdelay", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3) {
|
||||
|
||||
// cannot get transmission delay with just one module
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MYTHEN3) &&
|
||||
if ((det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) &&
|
||||
(det.size() < 2)) {
|
||||
REQUIRE_THROWS(proxy.Call("txdelay", {}, -1, GET));
|
||||
int val = 5;
|
||||
@ -2776,7 +2782,8 @@ TEST_CASE("txdelay", "[.cmd]") {
|
||||
}
|
||||
auto prev_frame = det.getTransmissionDelayFrame();
|
||||
auto val = 5000;
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MYTHEN3) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::MYTHEN3) {
|
||||
val = 5;
|
||||
}
|
||||
std::string sval = std::to_string(val);
|
||||
@ -2829,7 +2836,7 @@ TEST_CASE("zmqport", "[.cmd]") {
|
||||
int prev = 1;
|
||||
if (det_type == defs::EIGER) {
|
||||
socketsperdetector *= 2;
|
||||
} else if (det_type == defs::JUNGFRAU) {
|
||||
} else if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
prev = det.getNumberofUDPInterfaces().squash();
|
||||
det.setNumberofUDPInterfaces(2);
|
||||
socketsperdetector *= 2;
|
||||
@ -2863,7 +2870,7 @@ TEST_CASE("zmqport", "[.cmd]") {
|
||||
std::to_string(port + i * socketsperdetector) +
|
||||
'\n');
|
||||
}
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
det.setNumberofUDPInterfaces(prev);
|
||||
}
|
||||
}
|
||||
@ -2917,8 +2924,8 @@ TEST_CASE("programfpga", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::JUNGFRAU || det_type == defs::MYTHEN3 ||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
// TODO program a real board?
|
||||
/// afs/psi.ch/project/sls_det_firmware/jungfrau_firmware/cyclone_V/v0_8/Jungfrau_MCB.pof
|
||||
@ -2949,8 +2956,8 @@ TEST_CASE("updatekernel", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3 ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
// TODO: send real server?
|
||||
// std::ostringstream oss;
|
||||
@ -2968,8 +2975,8 @@ TEST_CASE("rebootcontroller", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3 ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2 || det_type == defs::GOTTHARD) {
|
||||
// TODO: reboot real server?
|
||||
// REQUIRE_NOTHROW(proxy.Call("rebootcontroller", {}, -1, PUT));
|
||||
@ -2984,8 +2991,8 @@ TEST_CASE("update", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD) {
|
||||
// TODO: update real server and firmware?
|
||||
// REQUIRE_NOTHROW(proxy.Call("update",
|
||||
// {"jungfrauDetectorServerv4.0.1.0", "pc13784",
|
||||
@ -3028,8 +3035,8 @@ TEST_CASE("adcreg", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::GOTTHARD) {
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::GOTTHARD) {
|
||||
std::ostringstream oss;
|
||||
proxy.Call("adcreg", {"0x8", "0x3"}, -1, PUT, oss);
|
||||
REQUIRE(oss.str() == "adcreg [0x8, 0x3]\n");
|
||||
@ -3113,8 +3120,8 @@ TEST_CASE("firmwaretest", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::GOTTHARD ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::GOTTHARD ||
|
||||
det_type == defs::MYTHEN3 || det_type == defs::GOTTHARD2) {
|
||||
std::ostringstream oss;
|
||||
proxy.Call("firmwaretest", {}, -1, PUT, oss);
|
||||
@ -3130,8 +3137,8 @@ TEST_CASE("bustest", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::GOTTHARD ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::GOTTHARD ||
|
||||
det_type == defs::MYTHEN3 || det_type == defs::GOTTHARD2) {
|
||||
std::ostringstream oss;
|
||||
proxy.Call("bustest", {}, -1, PUT, oss);
|
||||
@ -3170,8 +3177,8 @@ TEST_CASE("adcinvert", "[.cmd]") {
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MOENCH ||
|
||||
det_type == defs::JUNGFRAU) {
|
||||
if (det_type == defs::CHIPTESTBOARD || det_type == defs::JUNGFRAU ||
|
||||
det_type == defs::MOENCH) {
|
||||
auto prev_val = det.getADCInvert();
|
||||
{
|
||||
std::ostringstream oss;
|
||||
@ -3261,8 +3268,8 @@ TEST_CASE("framecounter", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3 ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
auto framecounter = det.getNumberOfFramesFromStart().squash();
|
||||
std::ostringstream oss;
|
||||
@ -3280,8 +3287,8 @@ TEST_CASE("runtime", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3 ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
std::ostringstream oss;
|
||||
proxy.Call("runtime", {}, -1, GET, oss);
|
||||
@ -3298,8 +3305,8 @@ TEST_CASE("frametime", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::CHIPTESTBOARD ||
|
||||
det_type == defs::MOENCH || det_type == defs::MYTHEN3 ||
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH ||
|
||||
det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3 ||
|
||||
det_type == defs::GOTTHARD2) {
|
||||
std::ostringstream oss;
|
||||
proxy.Call("frametime", {}, -1, GET, oss);
|
||||
|
@ -351,7 +351,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
|
||||
}
|
||||
impl()->setUDPPortNumber(arg.udp_dstport);
|
||||
impl()->setUDPPortNumber2(arg.udp_dstport2);
|
||||
if (detType == JUNGFRAU || detType == GOTTHARD2) {
|
||||
if (detType == JUNGFRAU || detType == MOENCH || detType == GOTTHARD2) {
|
||||
try {
|
||||
impl()->setNumberofUDPInterfaces(arg.udpInterfaces);
|
||||
} catch (const RuntimeError &e) {
|
||||
@ -367,10 +367,10 @@ int ClientInterface::setup_receiver(Interface &socket) {
|
||||
if (detType == GOTTHARD2) {
|
||||
impl()->setNumberOfBursts(arg.bursts);
|
||||
}
|
||||
if (detType == JUNGFRAU) {
|
||||
if (detType == JUNGFRAU || detType == MOENCH) {
|
||||
impl()->setNumberOfAdditionalStorageCells(arg.additionalStorageCells);
|
||||
}
|
||||
if (detType == MOENCH || detType == CHIPTESTBOARD) {
|
||||
if (detType == CHIPTESTBOARD) {
|
||||
try {
|
||||
impl()->setNumberofAnalogSamples(arg.analogSamples);
|
||||
} catch (const RuntimeError &e) {
|
||||
@ -408,7 +408,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
|
||||
}
|
||||
impl()->setThresholdEnergy(arg.thresholdEnergyeV[0]);
|
||||
}
|
||||
if (detType == EIGER || detType == JUNGFRAU) {
|
||||
if (detType == EIGER || detType == JUNGFRAU || detType == MOENCH) {
|
||||
impl()->setReadNRows(arg.readNRows);
|
||||
}
|
||||
if (detType == MYTHEN3) {
|
||||
@ -428,8 +428,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
|
||||
}
|
||||
}
|
||||
impl()->setTimingMode(arg.timMode);
|
||||
if (detType == EIGER || detType == MOENCH || detType == CHIPTESTBOARD ||
|
||||
detType == MYTHEN3) {
|
||||
if (detType == EIGER || detType == CHIPTESTBOARD || detType == MYTHEN3) {
|
||||
try {
|
||||
impl()->setTenGigaEnable(arg.tenGiga);
|
||||
} catch (const RuntimeError &e) {
|
||||
@ -444,7 +443,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
|
||||
"due to fifo memory allocation.");
|
||||
}
|
||||
}
|
||||
if (detType == CHIPTESTBOARD || detType == MOENCH) {
|
||||
if (detType == CHIPTESTBOARD) {
|
||||
try {
|
||||
impl()->setADCEnableMask(arg.adcMask);
|
||||
} catch (const RuntimeError &e) {
|
||||
@ -488,8 +487,8 @@ void ClientInterface::setDetectorType(detectorType arg) {
|
||||
case GOTTHARD:
|
||||
case EIGER:
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
case JUNGFRAU:
|
||||
case MOENCH:
|
||||
case MYTHEN3:
|
||||
case GOTTHARD2:
|
||||
break;
|
||||
@ -611,7 +610,7 @@ int ClientInterface::set_burst_mode(Interface &socket) {
|
||||
int ClientInterface::set_num_analog_samples(Interface &socket) {
|
||||
auto value = socket.Receive<int>();
|
||||
LOG(logDEBUG1) << "Setting num analog samples to " << value;
|
||||
if (detType != CHIPTESTBOARD && detType != MOENCH) {
|
||||
if (detType != CHIPTESTBOARD) {
|
||||
functionNotImplemented();
|
||||
}
|
||||
try {
|
||||
@ -939,8 +938,7 @@ int ClientInterface::get_overwrite(Interface &socket) {
|
||||
|
||||
int ClientInterface::enable_tengiga(Interface &socket) {
|
||||
auto val = socket.Receive<int>();
|
||||
if (detType != EIGER && detType != CHIPTESTBOARD && detType != MOENCH &&
|
||||
detType != MYTHEN3)
|
||||
if (detType != EIGER && detType != CHIPTESTBOARD && detType != MYTHEN3)
|
||||
functionNotImplemented();
|
||||
|
||||
if (val >= 0) {
|
||||
@ -1365,7 +1363,7 @@ int ClientInterface::set_read_n_rows(Interface &socket) {
|
||||
auto arg = socket.Receive<int>();
|
||||
if (arg >= 0) {
|
||||
verifyIdle(socket);
|
||||
if (detType != EIGER && detType != JUNGFRAU) {
|
||||
if (detType != EIGER && detType != JUNGFRAU && detType != MOENCH) {
|
||||
throw RuntimeError("Could not set number of rows. Not implemented "
|
||||
"for this detector");
|
||||
}
|
||||
@ -1448,7 +1446,7 @@ MacAddr ClientInterface::setUdpIp2(IpAddr arg) {
|
||||
int ClientInterface::set_udp_ip2(Interface &socket) {
|
||||
auto arg = socket.Receive<IpAddr>();
|
||||
verifyIdle(socket);
|
||||
if (detType != JUNGFRAU && detType != GOTTHARD2) {
|
||||
if (detType != JUNGFRAU && detType != MOENCH && detType != GOTTHARD2) {
|
||||
throw RuntimeError(
|
||||
"UDP Destination IP2 not implemented for this detector");
|
||||
}
|
||||
@ -1467,7 +1465,8 @@ int ClientInterface::set_udp_port(Interface &socket) {
|
||||
int ClientInterface::set_udp_port2(Interface &socket) {
|
||||
auto arg = socket.Receive<int>();
|
||||
verifyIdle(socket);
|
||||
if (detType != JUNGFRAU && detType != EIGER && detType != GOTTHARD2) {
|
||||
if (detType != JUNGFRAU && detType != MOENCH && detType != EIGER &&
|
||||
detType != GOTTHARD2) {
|
||||
throw RuntimeError(
|
||||
"UDP Destination Port2 not implemented for this detector");
|
||||
}
|
||||
@ -1480,7 +1479,7 @@ int ClientInterface::set_num_interfaces(Interface &socket) {
|
||||
auto arg = socket.Receive<int>();
|
||||
arg = (arg > 1 ? 2 : 1);
|
||||
verifyIdle(socket);
|
||||
if (detType != JUNGFRAU && detType != GOTTHARD2) {
|
||||
if (detType != JUNGFRAU && detType != MOENCH && detType != GOTTHARD2) {
|
||||
throw RuntimeError(
|
||||
"Number of interfaces not implemented for this detector");
|
||||
}
|
||||
@ -1727,7 +1726,7 @@ int ClientInterface::get_receiver_roi(Interface &socket) {
|
||||
|
||||
int ClientInterface::set_receiver_roi(Interface &socket) {
|
||||
auto arg = socket.Receive<ROI>();
|
||||
if (detType == CHIPTESTBOARD || detType == MOENCH)
|
||||
if (detType == CHIPTESTBOARD)
|
||||
functionNotImplemented();
|
||||
LOG(logDEBUG1) << "Set Receiver ROI: " << ToString(arg);
|
||||
verifyIdle(socket);
|
||||
@ -1741,7 +1740,7 @@ int ClientInterface::set_receiver_roi(Interface &socket) {
|
||||
|
||||
int ClientInterface::set_receiver_roi_metadata(Interface &socket) {
|
||||
auto arg = socket.Receive<ROI>();
|
||||
if (detType == CHIPTESTBOARD || detType == MOENCH)
|
||||
if (detType == CHIPTESTBOARD)
|
||||
functionNotImplemented();
|
||||
LOG(logDEBUG1) << "Set Receiver ROI Metadata: " << ToString(arg);
|
||||
verifyIdle(socket);
|
||||
|
@ -480,7 +480,6 @@ void DataProcessor::PadMissingPackets(sls_receiver_header header, char *data) {
|
||||
memset(data + (pnum * dsize), 0xFF, dsize + 2);
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
if (pnum == (pperFrame - 1))
|
||||
memset(data + (pnum * dsize), 0xFF, corrected_dsize);
|
||||
else
|
||||
|
@ -352,6 +352,36 @@ class JungfrauData : public GeneralData {
|
||||
};
|
||||
};
|
||||
|
||||
class MoenchData : public GeneralData {
|
||||
|
||||
public:
|
||||
MoenchData() {
|
||||
detType = slsDetectorDefs::MOENCH;
|
||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
||||
dataSize = 6400;
|
||||
packetSize = headerSizeinPacket + dataSize;
|
||||
framesPerFile = MOENCH_MAX_FRAMES_PER_FILE;
|
||||
fifoDepth = 1000;
|
||||
standardheader = true;
|
||||
maxRowsPerReadout = 400;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
void SetNumberofInterfaces(const int n) {
|
||||
numUDPInterfaces = n;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
private:
|
||||
void UpdateImageSize() {
|
||||
nPixelsX = (400);
|
||||
nPixelsY = (400) / numUDPInterfaces;
|
||||
imageSize = int(nPixelsX * nPixelsY * GetPixelDepth());
|
||||
packetsPerFrame = imageSize / dataSize;
|
||||
udpSocketBufferSize = (1000 * 1024 * 1024) / numUDPInterfaces;
|
||||
};
|
||||
};
|
||||
|
||||
class Mythen3Data : public GeneralData {
|
||||
private:
|
||||
int ncounters{0};
|
||||
@ -565,68 +595,4 @@ class ChipTestBoardData : public GeneralData {
|
||||
};
|
||||
};
|
||||
|
||||
class MoenchData : public GeneralData {
|
||||
|
||||
private:
|
||||
const int NUM_BYTES_PER_ANALOG_CHANNEL = 2;
|
||||
|
||||
public:
|
||||
MoenchData() {
|
||||
detType = slsDetectorDefs::MOENCH;
|
||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
||||
frameIndexMask = 0xFFFFFF;
|
||||
framesPerFile = MOENCH_MAX_FRAMES_PER_FILE;
|
||||
fifoDepth = 2500;
|
||||
standardheader = true;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
void SetNumberOfAnalogSamples(int n) {
|
||||
nAnalogSamples = n;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
void SetOneGigaAdcEnableMask(int n) {
|
||||
adcEnableMaskOneGiga = n;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
void SetTenGigaAdcEnableMask(int n) {
|
||||
adcEnableMaskTenGiga = n;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
void SetTenGigaEnable(bool tg) {
|
||||
tengigaEnable = tg;
|
||||
UpdateImageSize();
|
||||
};
|
||||
|
||||
private:
|
||||
void UpdateImageSize() {
|
||||
uint32_t adcEnableMask =
|
||||
(tengigaEnable ? adcEnableMaskTenGiga : adcEnableMaskOneGiga);
|
||||
|
||||
// count number of channels in x, each adc has 25 channels each
|
||||
int nchanTop = __builtin_popcount(adcEnableMask & 0xF0F0F0F0) * 25;
|
||||
int nchanBot = __builtin_popcount(adcEnableMask & 0x0F0F0F0F) * 25;
|
||||
nPixelsX = nchanTop > 0 ? nchanTop : nchanBot;
|
||||
|
||||
// if both top and bottom adcs enabled, rows = 2
|
||||
int nrows = 1;
|
||||
if (nchanTop > 0 && nchanBot > 0) {
|
||||
nrows = 2;
|
||||
}
|
||||
nPixelsY = nAnalogSamples / 25 * nrows;
|
||||
LOG(logINFO) << "Number of Pixels: [" << nPixelsX << ", " << nPixelsY
|
||||
<< "]";
|
||||
|
||||
dataSize = tengigaEnable ? 8144 : UDP_PACKET_DATA_BYTES;
|
||||
packetSize = headerSizeinPacket + dataSize;
|
||||
imageSize = nPixelsX * nPixelsY * NUM_BYTES_PER_ANALOG_CHANNEL;
|
||||
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
||||
|
||||
LOG(logDEBUG) << "Databytes: " << imageSize;
|
||||
};
|
||||
};
|
||||
|
||||
} // namespace sls
|
||||
|
@ -113,8 +113,8 @@ void Implementation::setDetectorType(const detectorType d) {
|
||||
case GOTTHARD:
|
||||
case EIGER:
|
||||
case JUNGFRAU:
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
case CHIPTESTBOARD:
|
||||
case MYTHEN3:
|
||||
case GOTTHARD2:
|
||||
LOG(logINFO) << " ***** " << ToString(d) << " Receiver *****";
|
||||
@ -138,12 +138,12 @@ void Implementation::setDetectorType(const detectorType d) {
|
||||
case JUNGFRAU:
|
||||
generalData = new JungfrauData();
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
generalData = new ChipTestBoardData();
|
||||
break;
|
||||
case MOENCH:
|
||||
generalData = new MoenchData();
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
generalData = new ChipTestBoardData();
|
||||
break;
|
||||
case MYTHEN3:
|
||||
generalData = new Mythen3Data();
|
||||
break;
|
||||
|
@ -460,7 +460,6 @@ void Listener::CopyPacket(char *dst, char *src, uint32_t dataSize,
|
||||
memcpy(dst + dataSize - 2, &src[detHeaderSize], dataSize + 2);
|
||||
break;
|
||||
case CHIPTESTBOARD:
|
||||
case MOENCH:
|
||||
if (pnum == (generalData->packetsPerFrame - 1))
|
||||
memcpy(dst + (pnum * dataSize), &src[detHeaderSize],
|
||||
correctedDataSize);
|
||||
|
@ -16,6 +16,9 @@ void MasterAttributes::GetBinaryAttributes(
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
GetJungfrauBinaryAttributes(w);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
GetMoenchBinaryAttributes(w);
|
||||
break;
|
||||
case slsDetectorDefs::EIGER:
|
||||
GetEigerBinaryAttributes(w);
|
||||
break;
|
||||
@ -25,9 +28,6 @@ void MasterAttributes::GetBinaryAttributes(
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
GetGotthard2BinaryAttributes(w);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
GetMoenchBinaryAttributes(w);
|
||||
break;
|
||||
case slsDetectorDefs::CHIPTESTBOARD:
|
||||
GetCtbBinaryAttributes(w);
|
||||
break;
|
||||
@ -48,6 +48,9 @@ void MasterAttributes::WriteHDF5Attributes(H5::H5File *fd, H5::Group *group) {
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
WriteJungfrauHDF5Attributes(fd, group);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
WriteMoenchHDF5Attributes(fd, group);
|
||||
break;
|
||||
case slsDetectorDefs::EIGER:
|
||||
WriteEigerHDF5Attributes(fd, group);
|
||||
break;
|
||||
@ -57,9 +60,6 @@ void MasterAttributes::WriteHDF5Attributes(H5::H5File *fd, H5::Group *group) {
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
WriteGotthard2HDF5Attributes(fd, group);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
WriteMoenchHDF5Attributes(fd, group);
|
||||
break;
|
||||
case slsDetectorDefs::CHIPTESTBOARD:
|
||||
WriteCtbHDF5Attributes(fd, group);
|
||||
break;
|
||||
@ -622,6 +622,28 @@ void MasterAttributes::WriteJungfrauHDF5Attributes(H5::H5File *fd,
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetMoenchBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Exptime");
|
||||
w->String(ToString(exptime).c_str());
|
||||
w->Key("Period");
|
||||
w->String(ToString(period).c_str());
|
||||
w->Key("Number of UDP Interfaces");
|
||||
w->Uint(numUDPInterfaces);
|
||||
w->Key("Number of rows");
|
||||
w->Uint(readNRows);
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteMoenchuHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5NumUDPInterfaces(fd, group);
|
||||
MasterAttributes::WriteHDF5ReadNRows(fd, group);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetEigerBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Dynamic Range");
|
||||
@ -719,31 +741,6 @@ void MasterAttributes::WriteGotthard2HDF5Attributes(H5::H5File *fd,
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetMoenchBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Exptime");
|
||||
w->String(ToString(exptime).c_str());
|
||||
w->Key("Period");
|
||||
w->String(ToString(period).c_str());
|
||||
w->Key("Ten Giga");
|
||||
w->Uint(tenGiga);
|
||||
w->Key("ADC Mask");
|
||||
w->String(ToStringHex(adcmask).c_str());
|
||||
w->Key("Analog Samples");
|
||||
w->Uint(analogSamples);
|
||||
}
|
||||
|
||||
#ifdef HDF5C
|
||||
void MasterAttributes::WriteMoenchHDF5Attributes(H5::H5File *fd,
|
||||
H5::Group *group) {
|
||||
MasterAttributes::WriteHDF5Exptime(fd, group);
|
||||
MasterAttributes::WriteHDF5Period(fd, group);
|
||||
MasterAttributes::WriteHDF5TenGiga(fd, group);
|
||||
MasterAttributes::WriteHDF5AdcMask(fd, group);
|
||||
MasterAttributes::WriteHDF5AnalogSamples(fd, group);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MasterAttributes::GetCtbBinaryAttributes(
|
||||
rapidjson::PrettyWriter<rapidjson::StringBuffer> *w) {
|
||||
w->Key("Exptime");
|
||||
|
@ -24,9 +24,9 @@ namespace sls {
|
||||
|
||||
#define MAX_FRAMES_PER_FILE 20000
|
||||
#define SHORT_MAX_FRAMES_PER_FILE 100000
|
||||
#define MOENCH_MAX_FRAMES_PER_FILE 100000
|
||||
#define EIGER_MAX_FRAMES_PER_FILE 10000
|
||||
#define JFRAU_MAX_FRAMES_PER_FILE 10000
|
||||
#define MOENCH_MAX_FRAMES_PER_FILE 10000
|
||||
#define CTB_MAX_FRAMES_PER_FILE 20000
|
||||
#define MYTHEN3_MAX_FRAMES_PER_FILE 10000
|
||||
#define GOTTHARD2_MAX_FRAMES_PER_FILE 20000
|
||||
|
@ -48,7 +48,7 @@
|
||||
#define SLS_DETECTOR_HEADER_VERSION 0x2
|
||||
#define SLS_DETECTOR_JSON_HEADER_VERSION 0x4
|
||||
|
||||
// ctb/ moench 1g udp (read from fifo)
|
||||
// ctb 1g udp (read from fifo)
|
||||
#define UDP_PACKET_DATA_BYTES (1344)
|
||||
|
||||
/** maximum trim en */
|
||||
@ -404,7 +404,7 @@ typedef struct {
|
||||
enum clockIndex { ADC_CLOCK, DBIT_CLOCK, RUN_CLOCK, SYNC_CLOCK };
|
||||
|
||||
/**
|
||||
* read out mode (ctb, moench)
|
||||
* read out mode (ctb)
|
||||
*/
|
||||
enum readoutMode { ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL };
|
||||
|
||||
@ -632,6 +632,13 @@ struct detParameters {
|
||||
nChipY = 1;
|
||||
nDacs = 8;
|
||||
break;
|
||||
case slsDetectorDefs::detectorType::MOENCH:
|
||||
nChanX = 400;
|
||||
nChanY = 400;
|
||||
nChipX = 1;
|
||||
nChipY = 1;
|
||||
nDacs = 8;
|
||||
break;
|
||||
case slsDetectorDefs::detectorType::JUNGFRAU:
|
||||
nChanX = 256;
|
||||
nChanY = 256;
|
||||
@ -646,13 +653,6 @@ struct detParameters {
|
||||
nChipY = 1;
|
||||
nDacs = 24;
|
||||
break;
|
||||
case slsDetectorDefs::detectorType::MOENCH:
|
||||
nChanX = 32;
|
||||
nChanY = 1;
|
||||
nChipX = 1;
|
||||
nChipY = 1;
|
||||
nDacs = 8;
|
||||
break;
|
||||
case slsDetectorDefs::detectorType::EIGER:
|
||||
nChanX = 256;
|
||||
nChanY = 256;
|
||||
|
@ -1,9 +1,10 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
/** API versions */
|
||||
#define RELEASE "7.0.0.rc1"
|
||||
#define APILIB "7.0.0.rc1 0x221208"
|
||||
#define APIRECEIVER "7.0.0.rc1 0x221208"
|
||||
#define RELEASE "developer"
|
||||
#define APILIB "developer 0x221213"
|
||||
#define APIRECEIVER "developer 0x221213"
|
||||
|
||||
#define APICTB "developer 0x221213"
|
||||
#define APIGOTTHARD "developer 0x221213"
|
||||
#define APIGOTTHARD2 "developer 0x221213"
|
||||
|
Loading…
x
Reference in New Issue
Block a user