mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-21 11:20:04 +02:00
dev:removed storage cells for moench (#603)
* removed storage cells for moench * rxr: also setting moench like jungfrau in implementation of ports
This commit is contained in:
parent
eb025b54ef
commit
276dc52196
@ -229,7 +229,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def hardwareversion(self):
|
||||
"""
|
||||
[Jungfrau][Gotthard2][Myhten3][Gotthard][Ctb][Moench] Hardware version of detector.
|
||||
[Jungfrau][Moench][Gotthard2][Myhten3][Gotthard][Ctb] Hardware version of detector.
|
||||
"""
|
||||
return ut.lhex(self.getHardwareVersion())
|
||||
|
||||
@ -298,7 +298,7 @@ class Detector(CppDetectorApi):
|
||||
-----
|
||||
[Eiger] Options: 4, 8, 12, 16, 32. If set to 32, also sets clkdivider to 2 (quarter speed), else to 0 (full speed)\n
|
||||
[Mythen3] Options: 8, 16, 32 \n
|
||||
[Jungfrau][Gotthard][Ctb][Moench][Mythen3][Gotthard2] 16
|
||||
[Jungfrau][Moench][Gotthard][Ctb][Mythen3][Gotthard2] 16
|
||||
"""
|
||||
return self.getDynamicRange()
|
||||
|
||||
@ -356,10 +356,9 @@ class Detector(CppDetectorApi):
|
||||
-----
|
||||
|
||||
[Eiger] Use threshold command to load settings
|
||||
[Jungfrau] GAIN0, HIGHGAIN0 \n
|
||||
[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
|
||||
[Eiger] settings loaded from file found in settingspath
|
||||
"""
|
||||
return element_if_equal(self.getSettings())
|
||||
@ -389,7 +388,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def framesl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of frames left in acquisition.\n
|
||||
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames left in acquisition.\n
|
||||
[Gotthard2] only in continuous auto mode.
|
||||
|
||||
:setter: Not Implemented
|
||||
@ -400,7 +399,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def framecounter(self):
|
||||
"""
|
||||
[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Number of frames from start run control.
|
||||
[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames from start run control.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -429,12 +428,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def powerchip(self):
|
||||
"""
|
||||
[Jungfrau][Mythen3][Gotthard2][Moench] Power the chip.
|
||||
[Jungfrau][Moench][Mythen3][Gotthard2] Power the chip.
|
||||
|
||||
Note
|
||||
----
|
||||
[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 temp_control enabled. Will configure chip (only chip v1.1).\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.
|
||||
"""
|
||||
return self.getPowerChip()
|
||||
@ -560,7 +558,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def periodl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Period left for current frame.
|
||||
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Period left for current frame.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -582,7 +580,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def delay(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Delay after trigger, accepts either a value in seconds, DurationWrapper or datetime.timedelta
|
||||
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Delay after trigger, accepts either a value in seconds, DurationWrapper or datetime.timedelta
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -627,7 +625,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def delayl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Delay left after trigger during acquisition, accepts either a value in seconds, datetime.timedelta or DurationWrapper
|
||||
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Delay left after trigger during acquisition, accepts either a value in seconds, datetime.timedelta or DurationWrapper
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -682,7 +680,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def txdelay(self):
|
||||
"""
|
||||
[Eiger][Jungfrau][Mythen3] Set transmission delay for all modules in the detector using the step size provided.
|
||||
[Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules in the detector using the step size provided.
|
||||
|
||||
Note
|
||||
----
|
||||
@ -690,7 +688,7 @@ class Detector(CppDetectorApi):
|
||||
\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)\n\n
|
||||
\t\t[Jungfrau][Moench][Mythen3] txdelay_frame to (num_modules * n_delay)\n\n
|
||||
Please refer txdelay_left, txdelay_right and txdelay_frame for details.
|
||||
"""
|
||||
return self.getTransmissionDelay()
|
||||
@ -703,11 +701,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def txdelay_frame(self):
|
||||
"""
|
||||
[Eiger][Jungfrau][Mythen3] Transmission delay of first udp packet being streamed out of the module.\n
|
||||
[Eiger][Jungfrau][Moench][Mythen3] Transmission delay of first udp packet being streamed out of the module.\n
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau] [0-31] Each value represents 1 ms. \n
|
||||
[Jungfrau][Moench] [0-31] Each value represents 1 ms. \n
|
||||
[Eiger] Additional delay to txdelay_left and txdelay_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.
|
||||
"""
|
||||
@ -890,7 +888,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def numinterfaces(self):
|
||||
"""[Jungfrau][Gotthard2] Number of udp interfaces to stream data from detector. Default is 1.
|
||||
"""[Jungfrau][Moench][Gotthard2] Number of udp interfaces to stream data from detector. Default is 1.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -1236,11 +1234,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_dstip2(self):
|
||||
"""
|
||||
[Jungfrau][Gotthard2] Ip address of the receiver (destination) udp interface 2.
|
||||
[Jungfrau][Moench][Gotthard2] Ip address of the receiver (destination) udp interface 2.
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau] bottom half \n
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
If 'auto' used, then ip is set to ip of rx_hostname. \n
|
||||
To set IPs for individual modules, use setDestinationUDPIP2.
|
||||
@ -1289,13 +1287,13 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_dstmac2(self):
|
||||
"""
|
||||
[Jungfrau][Gotthard2] Mac address of the receiver (destination) udp interface 2.
|
||||
[Jungfrau][Moench][Gotthard2] Mac address of the receiver (destination) udp interface 2.
|
||||
|
||||
Note
|
||||
----
|
||||
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
|
||||
To set MACs for individual modules, use setDestinationUDPMAC2. \n
|
||||
[Jungfrau] bottom half \n
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
Use router mac if router between detector and receiver.
|
||||
|
||||
@ -1340,11 +1338,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_srcmac2(self):
|
||||
"""
|
||||
[Jungfrau][Gotthard2] Mac address of the receiver (source) udp interface 2.
|
||||
[Jungfrau][Moench][Gotthard2] Mac address of the receiver (source) udp interface 2.
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau] bottom half \n
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
To set MACs for individual modules, use setSourceUDPMAC2.
|
||||
|
||||
@ -1390,11 +1388,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_srcip2(self):
|
||||
"""
|
||||
[Jungfrau][Gotthard2] Ip address of the detector (source) udp interface 2.
|
||||
[Jungfrau][Moench][Gotthard2] Ip address of the detector (source) udp interface 2.
|
||||
|
||||
Note
|
||||
-----
|
||||
[Jungfrau] bottom half \n
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
Must be same subnet as destination udp ip2.\n
|
||||
To set IPs for individual modules, use setSourceUDPIP2.
|
||||
@ -1440,7 +1438,7 @@ class Detector(CppDetectorApi):
|
||||
----
|
||||
Default is 50002. \n
|
||||
[Eiger] right half \n
|
||||
[Jungfrau] bottom half \n
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
Ports for each module is calculated (incremented by 2) \n
|
||||
To set ports for individual modules, use setDestinationUDPPort2.
|
||||
@ -1460,7 +1458,7 @@ class Detector(CppDetectorApi):
|
||||
-----
|
||||
[Gotthard] 0, 90, 110, 120, 150, 180, 200 \n
|
||||
[Eiger][Mythen3][Gotthard2] 0 - 200 \n
|
||||
[Jungfrau][Ctb][Moench] 0, 60 - 200
|
||||
[Jungfrau][Moench][Ctb] 0, 60 - 200
|
||||
"""
|
||||
return self.getHighVoltage()
|
||||
|
||||
@ -1569,8 +1567,8 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def master(self):
|
||||
"""
|
||||
[Eiger][Gotthard2][Jungfrau] Sets (half) module to master and other(s) to slaves.\n
|
||||
[Gotthard][Gotthard2][Mythen3][Eiger][Jungfrau] Gets if the current (half) module is master.
|
||||
[Eiger][Gotthard2][Jungfrau][Moench] Sets (half) module to master and other(s) to slaves.\n
|
||||
[Gotthard][Gotthard2][Mythen3][Eiger][Jungfrau][Moench] Gets if the current (half) module is master.
|
||||
"""
|
||||
return self.getMaster()
|
||||
|
||||
@ -1582,7 +1580,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def sync(self):
|
||||
"""
|
||||
[Jungfrau] Enables or disables synchronization between modules.
|
||||
[Jungfrau][Moench] Enables or disables synchronization between modules.
|
||||
"""
|
||||
return self.getSynchronization()
|
||||
|
||||
@ -1718,7 +1716,7 @@ class Detector(CppDetectorApi):
|
||||
|
||||
@property
|
||||
def adcreg(self):
|
||||
"""[Jungfrau][Ctb][Moench][Gotthard] Writes to an adc register
|
||||
"""[Jungfrau][Moench][Ctb][Gotthard] Writes to an adc register
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -1731,7 +1729,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcinvert(self):
|
||||
"""[Ctb][Moench][Jungfrau] ADC Inversion Mask.
|
||||
"""[Ctb][Jungfrau][Moench] ADC Inversion Mask.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -1747,7 +1745,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def triggersl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of triggers left in acquisition.\n
|
||||
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of triggers left in acquisition.\n
|
||||
|
||||
Note
|
||||
----
|
||||
@ -1760,7 +1758,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def frametime(self):
|
||||
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Timestamp at a frame start.
|
||||
"""[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Timestamp at a frame start.
|
||||
|
||||
Note
|
||||
----
|
||||
@ -1873,10 +1871,10 @@ class Detector(CppDetectorApi):
|
||||
|
||||
Note
|
||||
-----
|
||||
[Jungfrau] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED
|
||||
[Jungfrau][Moench] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED
|
||||
[Eiger] FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED
|
||||
[Gottthard2] G2_108MHZ (Default), G2_144MHZ
|
||||
[Jungfrau] FULL_SPEED option only available from v2.0 boards and is recommended to set number of interfaces to 2. \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.
|
||||
"""
|
||||
return element_if_equal(self.getReadoutSpeed())
|
||||
@ -1962,7 +1960,7 @@ class Detector(CppDetectorApi):
|
||||
Note
|
||||
-----
|
||||
Default: AUTO_TIMING \n
|
||||
[Jungfrau][Gotthard][Ctb][Moench][Gotthard2] AUTO_TIMING, TRIGGER_EXPOSURE \n
|
||||
[Jungfrau][Moench][Gotthard][Ctb][Gotthard2] AUTO_TIMING, TRIGGER_EXPOSURE \n
|
||||
[Mythen3] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, TRIGGER_GATED \n
|
||||
[Eiger] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER
|
||||
"""
|
||||
@ -2121,13 +2119,13 @@ class Detector(CppDetectorApi):
|
||||
def readnrows(self):
|
||||
"""
|
||||
[Eiger] Number of rows to read out per half module starting from the centre.
|
||||
[Jungfrau] Number of rows to read per module starting from the centre.
|
||||
[Jungfrau][Moench] Number of rows to read per module starting from the centre.
|
||||
|
||||
Note
|
||||
----
|
||||
[Eiger] Options: 1 - 256. 256 is default. \n
|
||||
[Eiger]The permissible values depend on dynamic range and 10Gbe enabled.\n\n
|
||||
[Jungfrau] Options: 8 - 512 (multiples of 8)
|
||||
[Jungfrau][Moench] Options: 8 - 512 (multiples of 8)
|
||||
"""
|
||||
return self.getReadNRows()
|
||||
|
||||
@ -2218,7 +2216,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def tengiga(self):
|
||||
"""[Eiger][Ctb][Moench][Mythen3] 10GbE Enable."""
|
||||
"""[Eiger][Ctb][Mythen3] 10GbE Enable."""
|
||||
return self.getTenGiga()
|
||||
|
||||
@tengiga.setter
|
||||
@ -2238,7 +2236,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def flowcontrol10g(self):
|
||||
"""[Eiger][Jungfrau] Enable or disable 10GbE Flow Control."""
|
||||
"""[Eiger][Jungfrau][Moench] Enable or disable 10GbE Flow Control."""
|
||||
return self.getTenGigaFlowControl()
|
||||
|
||||
@flowcontrol10g.setter
|
||||
@ -2258,7 +2256,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def gappixels(self):
|
||||
"""[Eiger][Jungfrau] Include Gap pixels in client data call back in Detecor api. Will not be in detector streaming, receiver file or streaming. Default is disabled. """
|
||||
"""[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 disabled. """
|
||||
return self.getRxAddGapPixels()
|
||||
|
||||
@gappixels.setter
|
||||
@ -2314,7 +2312,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def chipversion(self):
|
||||
"""
|
||||
[Jungfrau] Chip version of module. Can be 1.0 or 1.1.
|
||||
[Jungfrau][Moench] Chip version of module. Can be 1.0 or 1.1.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -2327,7 +2325,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def autocompdisable(self):
|
||||
"""[Jungfrau] Enable or disable auto comparator disable mode.
|
||||
"""[Jungfrau][Moench] Enable or disable auto comparator disable mode.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2343,7 +2341,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def compdisabletime(self):
|
||||
"""[Jungfrau] Time before end of exposure when comparator is disabled.
|
||||
"""[Jungfrau][Moench] Time before end of exposure when comparator is disabled.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2389,7 +2387,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def runtime(self):
|
||||
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Time from detector start up.
|
||||
"""[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Time from detector start up.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2482,7 +2480,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def temp_threshold(self):
|
||||
"""
|
||||
[Jungfrau] Threshold temperature in degrees.
|
||||
[Jungfrau][Moench] Threshold temperature in degrees.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2499,7 +2497,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def temp_event(self):
|
||||
"""
|
||||
[Jungfrau] 1, if a temperature event occured. \n
|
||||
[Jungfrau][Moench] 1, if a temperature event occured. \n
|
||||
|
||||
Note
|
||||
----
|
||||
@ -2527,7 +2525,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def temp_control(self):
|
||||
"""
|
||||
[Jungfrau] Temperature control enable.
|
||||
[Jungfrau][Moench] Temperature control enable.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2544,7 +2542,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def selinterface(self):
|
||||
"""[Jungfrau] The udp interface to stream data from detector.
|
||||
"""[Jungfrau][Moench] The udp interface to stream data from detector.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2564,11 +2562,11 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def gainmode(self):
|
||||
"""
|
||||
[Jungfrau] Detector gain mode. Enum: gainMode
|
||||
[Jungfrau][Moench] Detector gain mode. Enum: gainMode
|
||||
|
||||
Note
|
||||
-----
|
||||
[Jungfrau] DYNAMIC, FORCE_SWITCH_G1, FORCE_SWITCH_G2, FIX_G1, FIX_G2, FIX_G0 \n
|
||||
[Jungfrau][Moench] 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!!!
|
||||
"""
|
||||
return element_if_equal(self.getGainMode())
|
||||
@ -2623,14 +2621,14 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def filterresistor(self):
|
||||
"""
|
||||
[Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing "
|
||||
[Gotthard2][Jungfrau][Moench] Set filter resistor. Increasing values for increasing "
|
||||
"resistance.
|
||||
|
||||
Note
|
||||
----
|
||||
Advanced user command.
|
||||
[Gotthard2] Default is 0. Options: 0-3.
|
||||
[Jungfrau] Default is 1. Options: 0-1.
|
||||
[Jungfrau][Moench] Default is 1. Options: 0-1.
|
||||
"""
|
||||
return self.getFilterResistor()
|
||||
|
||||
@ -2642,11 +2640,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def filtercells(self):
|
||||
"""
|
||||
[Jungfrau] Set filter capacitor.
|
||||
[Jungfrau][Moench] Set filter capacitor.
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau] Options: 0-12. Default: 0. Advanced user command. Only for chipv1.1.
|
||||
[Jungfrau][Moench] Options: 0-12. Default: 0. Advanced user command. Only for chipv1.1.
|
||||
"""
|
||||
return self.getNumberOfFilterCells()
|
||||
|
||||
@ -2982,7 +2980,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcenable(self):
|
||||
"""[Ctb][Moench] ADC Enable Mask for 1Gb. Enable for each 32 ADC channel."""
|
||||
"""[Ctb] ADC Enable Mask for 1Gb. Enable for each 32 ADC channel."""
|
||||
return self.getADCEnableMask()
|
||||
|
||||
@adcenable.setter
|
||||
@ -2992,7 +2990,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcenable10g(self):
|
||||
"""[Ctb][Moench] ADC Enable Mask for 10Gb mode for each 32 ADC channel.
|
||||
"""[Ctb] ADC Enable Mask for 10Gb mode for each 32 ADC channel.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3009,7 +3007,6 @@ class Detector(CppDetectorApi):
|
||||
def samples(self):
|
||||
"""
|
||||
[CTB] Number of samples (both analog and digitial) expected. \n
|
||||
[Moench] Number of samples (analog only)
|
||||
"""
|
||||
return self.getNumberOfAnalogSamples()
|
||||
|
||||
@ -3020,7 +3017,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def runclk(self):
|
||||
"""[Ctb][Moench] Run clock in MHz."""
|
||||
"""[Ctb] Run clock in MHz."""
|
||||
return self.getRUNClock()
|
||||
|
||||
@runclk.setter
|
||||
@ -3053,7 +3050,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def asamples(self):
|
||||
"""[Ctb][Moench] Number of analog samples expected. """
|
||||
"""[Ctb] Number of analog samples expected. """
|
||||
return element_if_equal(self.getNumberOfAnalogSamples())
|
||||
|
||||
@asamples.setter
|
||||
@ -3073,7 +3070,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def dbitphase(self):
|
||||
"""[Ctb][Jungfrau] Phase shift of clock to latch digital bits. Absolute phase shift.
|
||||
"""[Ctb][Jungfrau][Moench] Phase shift of clock to latch digital bits. Absolute phase shift.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3114,7 +3111,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def maxdbitphaseshift(self):
|
||||
"""[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits.
|
||||
"""[CTB][Jungfrau][Moench] Absolute maximum Phase shift of of the clock to latch digital bits.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3161,7 +3158,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def maxadcphaseshift(self):
|
||||
"""[Jungfrau][CTB][Moench] Absolute maximum Phase shift of ADC clock.
|
||||
"""[Jungfrau][Moench][CTB] Absolute maximum Phase shift of ADC clock.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3173,12 +3170,12 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcphase(self):
|
||||
"""[Gotthard][Jungfrau][CTB][Moench] Sets phase shift of ADC clock.
|
||||
"""[Gotthard][Jungfrau][Moench][CTB] Sets phase shift of ADC clock.
|
||||
|
||||
Note
|
||||
-----
|
||||
[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
|
||||
[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.
|
||||
|
||||
:getter: Not implemented for Gotthard
|
||||
@ -3192,7 +3189,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcpipeline(self):
|
||||
"""[Ctb][Moench] Sets pipeline for ADC clock. """
|
||||
"""[Ctb] Sets pipeline for ADC clock. """
|
||||
return self.getADCPipeline()
|
||||
|
||||
@adcpipeline.setter
|
||||
@ -3202,7 +3199,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcclk(self):
|
||||
"""[Ctb][Moench] Sets ADC clock frequency in MHz. """
|
||||
"""[Ctb] Sets ADC clock frequency in MHz. """
|
||||
return self.getADCClock()
|
||||
|
||||
@adcclk.setter
|
||||
@ -3213,7 +3210,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def syncclk(self):
|
||||
"""
|
||||
[Ctb][Moench] Sync clock in MHz.
|
||||
[Ctb] Sync clock in MHz.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3224,7 +3221,7 @@ class Detector(CppDetectorApi):
|
||||
|
||||
@property
|
||||
def pattern(self):
|
||||
"""[Mythen3][Moench][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).
|
||||
"""[Mythen3][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).
|
||||
|
||||
Note
|
||||
----
|
||||
@ -3246,7 +3243,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patioctrl(self):
|
||||
"""[Ctb][Moench] 64 bit mask defining input (0) and output (1) signals.
|
||||
"""[Ctb] 64 bit mask defining input (0) and output (1) signals.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3263,7 +3260,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patlimits(self):
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of complete pattern.
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of complete pattern.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3283,7 +3280,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patsetbit(self):
|
||||
"""[Ctb][Moench][Mythen3] Sets the mask applied to every pattern to the selected bits.
|
||||
"""[Ctb][Mythen3] Sets the mask applied to every pattern to the selected bits.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3300,7 +3297,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patmask(self):
|
||||
"""[Ctb][Moench][Mythen3] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.
|
||||
"""[Ctb][Mythen3] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3318,7 +3315,7 @@ class Detector(CppDetectorApi):
|
||||
# @element
|
||||
def patwait(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Wait address of loop level provided.
|
||||
[Ctb][Mythen3] Wait address of loop level provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3335,7 +3332,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwait0(self):
|
||||
"""[Ctb][Moench][Mythen3] Wait 0 address.
|
||||
"""[Ctb][Mythen3] Wait 0 address.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3355,7 +3352,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwait1(self):
|
||||
"""[Ctb][Moench][Mythen3] Wait 1 address.
|
||||
"""[Ctb][Mythen3] Wait 1 address.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3375,7 +3372,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwait2(self):
|
||||
"""[Ctb][Moench][Mythen3] Wait 2 address.
|
||||
"""[Ctb][Mythen3] Wait 2 address.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3395,7 +3392,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def patwaittime(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Wait time in clock cycles of loop level provided.
|
||||
[Ctb][Mythen3] Wait time in clock cycles of loop level provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3412,7 +3409,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwaittime0(self):
|
||||
"""[Ctb][Moench][Mythen3] Wait 0 time in clock cycles."""
|
||||
"""[Ctb][Mythen3] Wait 0 time in clock cycles."""
|
||||
return self.getPatternWaitTime(0)
|
||||
|
||||
@patwaittime0.setter
|
||||
@ -3423,7 +3420,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwaittime1(self):
|
||||
"""[Ctb][Moench][Mythen3] Wait 1 time in clock cycles."""
|
||||
"""[Ctb][Mythen3] Wait 1 time in clock cycles."""
|
||||
return self.getPatternWaitTime(1)
|
||||
|
||||
@patwaittime1.setter
|
||||
@ -3434,7 +3431,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwaittime2(self):
|
||||
"""[Ctb][Moench][Mythen3] Wait 2 time in clock cycles."""
|
||||
"""[Ctb][Mythen3] Wait 2 time in clock cycles."""
|
||||
return self.getPatternWaitTime(2)
|
||||
|
||||
@patwaittime2.setter
|
||||
@ -3446,7 +3443,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def patloop(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Limits (start and stop address) of the loop provided.
|
||||
[Ctb][Mythen3] Limits (start and stop address) of the loop provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3463,7 +3460,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patloop0(self):
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of loop 0.
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of loop 0.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3483,7 +3480,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patloop1(self):
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of loop 1.
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of loop 1.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3504,7 +3501,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patloop2(self):
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of loop 2.
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of loop 2.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3526,7 +3523,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def patnloop(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Number of cycles of the loop provided.
|
||||
[Ctb][Mythen3] Number of cycles of the loop provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3543,7 +3540,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patnloop0(self):
|
||||
"""[Ctb][Moench][Mythen3] Number of cycles of loop 0."""
|
||||
"""[Ctb][Mythen3] Number of cycles of loop 0."""
|
||||
return self.getPatternLoopCycles(0)
|
||||
|
||||
@patnloop0.setter
|
||||
@ -3554,7 +3551,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patnloop1(self):
|
||||
"""[Ctb][Moench][Mythen3] Number of cycles of loop 1."""
|
||||
"""[Ctb][Mythen3] Number of cycles of loop 1."""
|
||||
return self.getPatternLoopCycles(1)
|
||||
|
||||
@patnloop1.setter
|
||||
@ -3565,7 +3562,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patnloop2(self):
|
||||
"""[Ctb][Moench][Mythen3] Number of cycles of loop 2."""
|
||||
"""[Ctb][Mythen3] Number of cycles of loop 2."""
|
||||
return self.getPatternLoopCycles(2)
|
||||
|
||||
@patnloop2.setter
|
||||
@ -3636,7 +3633,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def v_limit(self):
|
||||
"""[Ctb][Moench] Soft limit for power supplies (ctb only) and DACS in mV."""
|
||||
"""[Ctb] Soft limit for power supplies (ctb only) and DACS in mV."""
|
||||
return self.getDAC(dacIndex.V_LIMIT, True)
|
||||
|
||||
@v_limit.setter
|
||||
|
@ -48,6 +48,10 @@ void qTabAdvanced::SetupWidgetWindow() {
|
||||
lblDiscardBits->setEnabled(true);
|
||||
spinDiscardBits->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
lblNumStoragecells->setEnabled(true);
|
||||
spinNumStoragecells->setEnabled(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -104,8 +104,6 @@
|
||||
|
||||
#define CONFIG_V11_STATUS_FLTR_CLL_OFST (0)
|
||||
#define CONFIG_V11_STATUS_FLTR_CLL_MSK (0x00000FFF << CONFIG_V11_STATUS_FLTR_CLL_OFST)
|
||||
#define CONFIG_V11_STATUS_STRG_CLL_OFST (12)
|
||||
#define CONFIG_V11_STATUS_STRG_CLL_MSK (0x0000000F << CONFIG_V11_STATUS_STRG_CLL_OFST)
|
||||
// CSM mode = high current (100%), low current (16%)
|
||||
#define CONFIG_V11_STATUS_CRRNT_SRC_LOW_OFST (19)
|
||||
#define CONFIG_V11_STATUS_CRRNT_SRC_LOW_MSK (0x00000001 << CONFIG_V11_STATUS_CRRNT_SRC_LOW_OFST)
|
||||
@ -231,8 +229,6 @@
|
||||
#define CONTROL_ACQ_FIFO_CLR_MSK (0x00000001 << CONTROL_ACQ_FIFO_CLR_OFST)
|
||||
#define CONTROL_MASTER_OFST (15)
|
||||
#define CONTROL_MASTER_MSK (0x00000001 << CONTROL_MASTER_OFST)
|
||||
#define CONTROL_STORAGE_CELL_NUM_OFST (16)
|
||||
#define CONTROL_STORAGE_CELL_NUM_MSK (0x0000000F << CONTROL_STORAGE_CELL_NUM_OFST)
|
||||
#define CONTROL_RX_ADDTNL_ENDPTS_NUM_OFST (20)
|
||||
#define CONTROL_RX_ADDTNL_ENDPTS_NUM_MSK (0x0000003F << CONTROL_RX_ADDTNL_ENDPTS_NUM_OFST)
|
||||
#define CONTROL_RX_ENDPTS_START_OFST (26)
|
||||
@ -260,8 +256,6 @@
|
||||
|
||||
#define CONFIG_V11_FLTR_CLL_OFST (0)
|
||||
#define CONFIG_V11_FLTR_CLL_MSK (0x00000FFF << CONFIG_V11_FLTR_CLL_OFST)
|
||||
#define CONFIG_V11_STRG_CLL_OFST (12)
|
||||
#define CONFIG_V11_STRG_CLL_MSK (0x0000000F << CONFIG_V11_STRG_CLL_OFST)
|
||||
// CSM mode = high current (100%), low current (16%)
|
||||
#define CONFIG_V11_CRRNT_SRC_LOW_OFST (19)
|
||||
#define CONFIG_V11_CRRNT_SRC_LOW_MSK (0x00000001 << CONFIG_V11_CRRNT_SRC_LOW_OFST)
|
||||
@ -352,8 +346,6 @@
|
||||
#define DAQ_CMP_RST_MSK (0x00000001 << DAQ_CMP_RST_OFST)
|
||||
#define DAQ_CHIP11_VRSN_OFST (7)
|
||||
#define DAQ_CHIP11_VRSN_MSK (0x00000001 << DAQ_CHIP11_VRSN_OFST)
|
||||
#define DAQ_STRG_CELL_SLCT_OFST (8)
|
||||
#define DAQ_STRG_CELL_SLCT_MSK (0x0000000F << DAQ_STRG_CELL_SLCT_OFST)
|
||||
#define DAQ_FRCE_SWTCH_GAIN_OFST (12)
|
||||
#define DAQ_FRCE_SWTCH_GAIN_MSK (0x00000003 << DAQ_FRCE_SWTCH_GAIN_OFST)
|
||||
#define DAQ_FRCE_GAIN_STG_0_VAL ((0x0 << DAQ_FRCE_SWTCH_GAIN_OFST) & DAQ_FRCE_SWTCH_GAIN_MSK)
|
||||
@ -445,23 +437,6 @@ Time before end of exposure when comparator is disabled */
|
||||
#define MOD_ID_OFST (0)
|
||||
#define MOD_ID_MSK (0x0000FFFF << MOD_ID_OFST)
|
||||
|
||||
/* ASIC Control Register */
|
||||
#define ASIC_CTRL_REG (0x7F << MEM_MAP_SHIFT)
|
||||
// tPC = (PCT + 1) * 25ns
|
||||
#define ASIC_CTRL_PRCHRG_TMR_OFST (0)
|
||||
#define ASIC_CTRL_PRCHRG_TMR_MSK (0x000000FF << ASIC_CTRL_PRCHRG_TMR_OFST)
|
||||
#define ASIC_CTRL_PRCHRG_TMR_VAL ((0x1F << ASIC_CTRL_PRCHRG_TMR_OFST) & ASIC_CTRL_PRCHRG_TMR_MSK)
|
||||
// tDS = (DST + 1) * 25ns
|
||||
#define ASIC_CTRL_DS_TMR_OFST (8)
|
||||
#define ASIC_CTRL_DS_TMR_MSK (0x000000FF << ASIC_CTRL_DS_TMR_OFST)
|
||||
#define ASIC_CTRL_DS_TMR_VAL ((0x1F << ASIC_CTRL_DS_TMR_OFST) & ASIC_CTRL_DS_TMR_MSK)
|
||||
#define ASIC_CTRL_DS_TMR_CHIP1_1_VAL ((0xFF << ASIC_CTRL_DS_TMR_OFST) & ASIC_CTRL_DS_TMR_MSK)
|
||||
// tET = (ET + 1) * 25ns (increase timeout range between 2 consecutive storage
|
||||
// cells)
|
||||
#define ASIC_CTRL_EXPSRE_TMR_OFST (16)
|
||||
#define ASIC_CTRL_EXPSRE_TMR_MSK (0x0000FFFF << ASIC_CTRL_EXPSRE_TMR_OFST)
|
||||
#define ASIC_CTRL_EXPSRE_TMR_MAX_VAL (0x0000FFFF / (CLK_RUN * 1E-3))
|
||||
|
||||
/* ADC 0 Deserializer Control */
|
||||
#define ADC_DSRLZR_0_REG (0xF0 << MEM_MAP_SHIFT)
|
||||
#define ADC_DSRLZR_0_RFRSH_ALGNMNT_OFST (31) /* Refresh alignment */
|
||||
|
Binary file not shown.
@ -518,7 +518,7 @@ void setupDetector() {
|
||||
resetCore();
|
||||
|
||||
alignDeserializer();
|
||||
// configureASICTimer(); ASIC_CTRL_REG to be removed along with storage cell
|
||||
|
||||
// delay
|
||||
bus_w(ADC_PORT_INVERT_REG,
|
||||
(isHardwareVersion_1_0() ? ADC_PORT_INVERT_BOARD2_VAL
|
||||
@ -536,14 +536,6 @@ void setupDetector() {
|
||||
setExpTime(DEFAULT_EXPTIME);
|
||||
setPeriod(DEFAULT_PERIOD);
|
||||
setDelayAfterTrigger(DEFAULT_DELAY);
|
||||
if (getChipVersion() == 11) {
|
||||
selectStoragecellStart(DEFAULT_STRG_CLL_STRT_CHIP11);
|
||||
} else {
|
||||
setNumAdditionalStorageCells(DEFAULT_NUM_STRG_CLLS);
|
||||
selectStoragecellStart(DEFAULT_STRG_CLL_STRT);
|
||||
// not applicable for chipv1.1
|
||||
setStorageCellDelay(DEFAULT_STRG_CLL_DLY);
|
||||
}
|
||||
setTiming(DEFAULT_TIMING_MODE);
|
||||
setNextFrameNumber(DEFAULT_STARTING_FRAME_NUMBER);
|
||||
|
||||
@ -891,66 +883,6 @@ uint32_t getADCInvertRegister() {
|
||||
}
|
||||
|
||||
/* parameters - timer */
|
||||
int selectStoragecellStart(int pos) {
|
||||
int value = pos;
|
||||
uint32_t addr = DAQ_REG;
|
||||
uint32_t mask = DAQ_STRG_CELL_SLCT_MSK;
|
||||
int offset = DAQ_STRG_CELL_SLCT_OFST;
|
||||
if (getChipVersion() == 11) {
|
||||
// set the bit
|
||||
value = 1 << pos;
|
||||
addr = CONFIG_V11_REG;
|
||||
mask = CONFIG_V11_STRG_CLL_MSK;
|
||||
offset = CONFIG_V11_STRG_CLL_OFST;
|
||||
}
|
||||
if (pos >= 0) {
|
||||
LOG(logINFO, ("Setting storage cell start: %d\n", pos));
|
||||
bus_w(addr, bus_r(addr) & ~mask);
|
||||
bus_w(addr, bus_r(addr) | ((value << offset) & mask));
|
||||
// should not do a get to verify (status register does not update
|
||||
// immediately during acquisition)
|
||||
if (getChipVersion() == 11) {
|
||||
return pos;
|
||||
}
|
||||
}
|
||||
|
||||
// read value back
|
||||
// chipv1.1, writing and reading registers are different
|
||||
#ifndef VIRTUAL
|
||||
if (getChipVersion() == 11) {
|
||||
addr = CONFIG_V11_STATUS_REG;
|
||||
mask = CONFIG_V11_STATUS_STRG_CLL_MSK;
|
||||
offset = CONFIG_V11_STATUS_STRG_CLL_OFST;
|
||||
}
|
||||
#endif
|
||||
uint32_t regval = bus_r(addr);
|
||||
#ifndef VIRTUAL
|
||||
// flip all contents of register //TODO FIRMWARE FIX
|
||||
if (getChipVersion() == 11) {
|
||||
regval ^= BIT32_MASK;
|
||||
}
|
||||
#endif
|
||||
uint32_t retval = ((regval & mask) >> offset);
|
||||
if (getChipVersion() == 11) {
|
||||
// get which bit
|
||||
int max = getMaxStoragecellStart();
|
||||
for (int i = 0; i != max + 1; ++i) {
|
||||
if (retval & (1 << i)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
// chip v1.0
|
||||
return retval;
|
||||
}
|
||||
|
||||
int getMaxStoragecellStart() {
|
||||
if (getChipVersion() == 11) {
|
||||
return MAX_STORAGE_CELL_CHIP11_VAL;
|
||||
} else {
|
||||
return MAX_STORAGE_CELL_VAL;
|
||||
}
|
||||
}
|
||||
|
||||
int setNextFrameNumber(uint64_t value) {
|
||||
LOG(logINFO,
|
||||
@ -1075,48 +1007,6 @@ int64_t getDelayAfterTrigger() {
|
||||
(1E-3 * CLK_SYNC);
|
||||
}
|
||||
|
||||
void setNumAdditionalStorageCells(int val) {
|
||||
if (val >= 0) {
|
||||
LOG(logINFO, ("Setting number of addl. storage cells %d\n", val));
|
||||
bus_w(CONTROL_REG,
|
||||
(bus_r(CONTROL_REG) & ~CONTROL_STORAGE_CELL_NUM_MSK) |
|
||||
((val << CONTROL_STORAGE_CELL_NUM_OFST) &
|
||||
CONTROL_STORAGE_CELL_NUM_MSK));
|
||||
}
|
||||
}
|
||||
|
||||
int getNumAdditionalStorageCells() {
|
||||
return ((bus_r(CONTROL_REG) & CONTROL_STORAGE_CELL_NUM_MSK) >>
|
||||
CONTROL_STORAGE_CELL_NUM_OFST);
|
||||
}
|
||||
|
||||
int setStorageCellDelay(int64_t val) {
|
||||
if (val < 0) {
|
||||
LOG(logERROR,
|
||||
("Invalid delay after trigger: %lld ns\n", (long long int)val));
|
||||
return FAIL;
|
||||
}
|
||||
LOG(logINFO, ("Setting storage cell delay %lld ns\n", (long long int)val));
|
||||
val *= (1E-3 * CLK_RUN);
|
||||
bus_w(ASIC_CTRL_REG,
|
||||
(bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_EXPSRE_TMR_MSK) |
|
||||
((val << ASIC_CTRL_EXPSRE_TMR_OFST) & ASIC_CTRL_EXPSRE_TMR_MSK));
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = getStorageCellDelay();
|
||||
val /= (1E-3 * CLK_RUN);
|
||||
if (val != retval) {
|
||||
return FAIL;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
int64_t getStorageCellDelay() {
|
||||
return (((int64_t)((bus_r(ASIC_CTRL_REG) & ASIC_CTRL_EXPSRE_TMR_MSK) >>
|
||||
ASIC_CTRL_EXPSRE_TMR_OFST)) /
|
||||
(1E-3 * CLK_RUN));
|
||||
}
|
||||
|
||||
int64_t getNumFramesLeft() {
|
||||
return get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG);
|
||||
}
|
||||
@ -1968,18 +1858,6 @@ int64_t getComparatorDisableTime() {
|
||||
return bus_r(COMP_DSBLE_TIME_REG) / (1E-3 * CLK_RUN);
|
||||
}
|
||||
|
||||
void configureASICTimer() {
|
||||
bus_w(ASIC_CTRL_REG, (bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_PRCHRG_TMR_MSK) |
|
||||
ASIC_CTRL_PRCHRG_TMR_VAL);
|
||||
|
||||
uint32_t val = ASIC_CTRL_DS_TMR_VAL;
|
||||
if (getChipVersion() == 11) {
|
||||
val = ASIC_CTRL_DS_TMR_CHIP1_1_VAL;
|
||||
}
|
||||
bus_w(ASIC_CTRL_REG, (bus_r(ASIC_CTRL_REG) & ~ASIC_CTRL_DS_TMR_MSK) | val);
|
||||
LOG(logINFO, ("Configured ASIC Timer [0x%x]\n", bus_r(ASIC_CTRL_REG)));
|
||||
}
|
||||
|
||||
int setReadoutSpeed(int val) {
|
||||
// stop state machine if running
|
||||
if (runBusy()) {
|
||||
@ -2601,8 +2479,7 @@ void *start_timer(void *arg) {
|
||||
int transmissionDelayUs = getTransmissionDelayFrame() * 1000;
|
||||
int numInterfaces = getNumberofUDPInterfaces();
|
||||
int64_t periodNs = getPeriod();
|
||||
int numFrames = (getNumFrames() * getNumTriggers() *
|
||||
(getNumAdditionalStorageCells() + 1));
|
||||
int numFrames = getNumFrames() * getNumTriggers();
|
||||
int64_t expUs = getExpTime() / 1000;
|
||||
const int maxPacketsPerFrame = (MAX_ROWS_PER_READOUT / ROWS_PER_PACKET);
|
||||
const int dataSize = (DATA_BYTES / maxPacketsPerFrame);
|
||||
|
@ -44,10 +44,6 @@
|
||||
#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)
|
||||
@ -66,9 +62,6 @@
|
||||
/* 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)
|
||||
|
@ -222,7 +222,7 @@ int getReadoutMode();
|
||||
#endif
|
||||
|
||||
// parameters - timer
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#if defined(JUNGFRAUD)
|
||||
int selectStoragecellStart(int pos);
|
||||
int getMaxStoragecellStart();
|
||||
#endif
|
||||
@ -266,7 +266,7 @@ int64_t getSubDeadTime();
|
||||
int64_t getMeasuredPeriod();
|
||||
int64_t getMeasuredSubPeriod();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#if defined(JUNGFRAUD)
|
||||
void setNumAdditionalStorageCells(int val);
|
||||
int getNumAdditionalStorageCells();
|
||||
int setStorageCellDelay(int64_t val);
|
||||
@ -513,7 +513,9 @@ void configureChip();
|
||||
int autoCompDisable(int on);
|
||||
int setComparatorDisableTime(int64_t val);
|
||||
int64_t getComparatorDisableTime();
|
||||
#ifndef MOENCHD
|
||||
void configureASICTimer();
|
||||
#endif
|
||||
int setReadoutSpeed(int val);
|
||||
int getReadoutSpeed(int *retval);
|
||||
int setPhase(enum CLKINDEX ind, int val, int degrees);
|
||||
|
@ -2158,7 +2158,7 @@ int get_num_additional_storage_cells(int file_des) {
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int retval = -1;
|
||||
|
||||
#if !defined(JUNGFRAUD) && !defined(MOENCHD)
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// get only
|
||||
@ -2177,7 +2177,7 @@ int set_num_additional_storage_cells(int file_des) {
|
||||
return printSocketReadError();
|
||||
LOG(logDEBUG1, ("Setting number of addl. storage cells %d\n", arg));
|
||||
|
||||
#if !defined(JUNGFRAUD) && !defined(MOENCHD)
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// only set
|
||||
@ -2620,7 +2620,7 @@ int get_storage_cell_delay(int file_des) {
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int64_t retval = -1;
|
||||
|
||||
#if !defined(JUNGFRAUD) && !defined(MOENCHD)
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// get only
|
||||
@ -2647,7 +2647,7 @@ int set_storage_cell_delay(int file_des) {
|
||||
LOG(logDEBUG1,
|
||||
("Setting storage cell delay %lld ns\n", (long long int)arg));
|
||||
|
||||
#if !defined(JUNGFRAUD) && !defined(MOENCHD)
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// only set
|
||||
@ -4015,7 +4015,7 @@ int storage_cell_start(int file_des) {
|
||||
return printSocketReadError();
|
||||
LOG(logDEBUG1, ("Setting Storage cell start to %d\n", arg));
|
||||
|
||||
#if !defined(JUNGFRAUD) && !defined(MOENCHD)
|
||||
#if !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// set & get
|
||||
@ -6958,7 +6958,7 @@ int get_receiver_parameters(int file_des) {
|
||||
return printSocketReadError();
|
||||
|
||||
// additional storage cells
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#if defined(JUNGFRAUD)
|
||||
i32 = getNumAdditionalStorageCells();
|
||||
#else
|
||||
i32 = 0;
|
||||
|
@ -1285,27 +1285,27 @@ class Detector {
|
||||
* disabled. It is only possible for chipv1.1.*/
|
||||
void setComparatorDisableTime(ns t, Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Moench] Advanced TODO naming */
|
||||
/** [Jungfrau] Advanced TODO naming */
|
||||
Result<int> getNumberOfAdditionalStorageCells(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Moench] Advanced \n
|
||||
/** [Jungfrau] 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][Moench] Advanced */
|
||||
/** [Jungfrau] Advanced */
|
||||
Result<int> getStorageCellStart(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Moench] Advanced. Sets the storage cell storing the first
|
||||
/** [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.
|
||||
*/
|
||||
void setStorageCellStart(int cell, Positions pos = {});
|
||||
|
||||
/** [Jungfrau][Moench] Advanced*/
|
||||
/** [Jungfrau] Advanced*/
|
||||
Result<ns> getStorageCellDelay(Positions pos = {}) const;
|
||||
|
||||
/** [Jungfrau][Moench] Advanced \n Additional time delay between 2
|
||||
/** [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.
|
||||
*/
|
||||
|
@ -2000,27 +2000,22 @@ class CmdProxy {
|
||||
INTEGER_COMMAND_SET_NOID_GET_ID(
|
||||
extrastoragecells, getNumberOfAdditionalStorageCells,
|
||||
setNumberOfAdditionalStorageCells, StringTo<int>,
|
||||
"[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).");
|
||||
"[0-15]\n\t[Jungfrau] 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).");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
storagecell_start, getStorageCellStart, setStorageCellStart,
|
||||
StringTo<int>,
|
||||
"[0-max]\n\t[Jungfrau][Moench] Storage cell that stores the first "
|
||||
"acquisition "
|
||||
"[0-max]\n\t[Jungfrau] 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,
|
||||
TIME_COMMAND(storagecell_delay, getStorageCellDelay, setStorageCellDelay,
|
||||
"[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.");
|
||||
"ns|us|ms|s]\n\t[Jungfrau] Additional time delay between 2 "
|
||||
"consecutive exposures in burst mode (resolution of 25ns). "
|
||||
"Only applicable for chipv1.0. For advanced users only.");
|
||||
|
||||
INTEGER_COMMAND_VEC_ID(
|
||||
gainmode, getGainMode, setGainMode, StringTo<slsDetectorDefs::gainMode>,
|
||||
|
@ -287,7 +287,7 @@ TEST_CASE("extrastoragecells", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
auto det_type = det.getDetectorType().squash();
|
||||
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
// 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 || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
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 || det_type == defs::MOENCH) {
|
||||
if (det_type == defs::JUNGFRAU) {
|
||||
// chip version 1.0
|
||||
if (det.getChipVersion().squash() * 10 == 10) {
|
||||
auto prev_val = det.getStorageCellDelay();
|
||||
|
@ -367,7 +367,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
|
||||
if (detType == GOTTHARD2) {
|
||||
impl()->setNumberOfBursts(arg.bursts);
|
||||
}
|
||||
if (detType == JUNGFRAU || detType == MOENCH) {
|
||||
if (detType == JUNGFRAU) {
|
||||
impl()->setNumberOfAdditionalStorageCells(arg.additionalStorageCells);
|
||||
}
|
||||
if (detType == CHIPTESTBOARD) {
|
||||
|
@ -226,7 +226,7 @@ const slsDetectorDefs::xy Implementation::GetPortGeometry() const {
|
||||
xy portGeometry{1, 1};
|
||||
if (generalData->detType == EIGER)
|
||||
portGeometry.x = generalData->numUDPInterfaces;
|
||||
else if (generalData->detType == JUNGFRAU)
|
||||
else if (generalData->detType == JUNGFRAU || generalData->detType == MOENCH)
|
||||
portGeometry.y = generalData->numUDPInterfaces;
|
||||
return portGeometry;
|
||||
}
|
||||
@ -413,7 +413,7 @@ void Implementation::setReceiverROI(const slsDetectorDefs::ROI arg) {
|
||||
portFullRoi.xmin += nPortDim.x;
|
||||
portFullRoi.xmax += nPortDim.x;
|
||||
}
|
||||
// top bottom (jungfrau)
|
||||
// top bottom (jungfrau or moench)
|
||||
else {
|
||||
portFullRoi.ymin += nPortDim.y;
|
||||
portFullRoi.ymax += nPortDim.y;
|
||||
@ -1127,7 +1127,7 @@ int Implementation::getUDPSocketBufferSize() const {
|
||||
|
||||
void Implementation::setUDPSocketBufferSize(const int s) {
|
||||
size_t listSize = listener.size();
|
||||
if ((generalData->detType == JUNGFRAU ||
|
||||
if ((generalData->detType == JUNGFRAU || generalData->detType == MOENCH ||
|
||||
generalData->detType == GOTTHARD2) &&
|
||||
(int)listSize != generalData->numUDPInterfaces) {
|
||||
throw RuntimeError("Number of Interfaces " +
|
||||
|
@ -7,8 +7,7 @@
|
||||
#define APICTB "developer 0x221213"
|
||||
#define APIGOTTHARD2 "developer 0x221213"
|
||||
#define APIJUNGFRAU "developer 0x221213"
|
||||
#define APIMOENCH "developer 0x221213"
|
||||
#define APIEIGER "developer 0x221213"
|
||||
|
||||
#define APIMOENCH "developer 0x221215"
|
||||
#define APIGOTTHARD "developer 0x230117"
|
||||
#define APIMYTHEN3 "developer 0x230117"
|
Loading…
x
Reference in New Issue
Block a user