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:
Dhanya Thattil 2023-02-24 10:00:31 +01:00 committed by GitHub
parent eb025b54ef
commit 276dc52196
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 134 additions and 292 deletions

View File

@ -229,7 +229,7 @@ class Detector(CppDetectorApi):
@element @element
def hardwareversion(self): 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()) 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 [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 [Mythen3] Options: 8, 16, 32 \n
[Jungfrau][Gotthard][Ctb][Moench][Mythen3][Gotthard2] 16 [Jungfrau][Moench][Gotthard][Ctb][Mythen3][Gotthard2] 16
""" """
return self.getDynamicRange() return self.getDynamicRange()
@ -356,10 +356,9 @@ class Detector(CppDetectorApi):
----- -----
[Eiger] Use threshold command to load settings [Eiger] Use threshold command to load settings
[Jungfrau] GAIN0, HIGHGAIN0 \n [Jungfrau][Moench] GAIN0, HIGHGAIN0 \n
[Gotthard] DYNAMICGAIN, HIGHGAIN, LOWGAIN, MEDIUMGAIN, VERYHIGHGAIN \n [Gotthard] DYNAMICGAIN, HIGHGAIN, LOWGAIN, MEDIUMGAIN, VERYHIGHGAIN \n
[Gotthard2] DYNAMICGAIN, FIXGAIN1, FIXGAIN2 \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 [Eiger] settings loaded from file found in settingspath
""" """
return element_if_equal(self.getSettings()) return element_if_equal(self.getSettings())
@ -389,7 +388,7 @@ class Detector(CppDetectorApi):
@element @element
def framesl(self): 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. [Gotthard2] only in continuous auto mode.
:setter: Not Implemented :setter: Not Implemented
@ -400,7 +399,7 @@ class Detector(CppDetectorApi):
@element @element
def framecounter(self): 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 Note
----- -----
@ -429,12 +428,11 @@ class Detector(CppDetectorApi):
@element @element
def powerchip(self): def powerchip(self):
""" """
[Jungfrau][Mythen3][Gotthard2][Moench] Power the chip. [Jungfrau][Moench][Mythen3][Gotthard2] Power the chip.
Note Note
---- ----
[Moench] 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
[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
[Mythen3][Gotthard2] Default is 1. If module not connected or wrong module, powerchip will fail. [Mythen3][Gotthard2] Default is 1. If module not connected or wrong module, powerchip will fail.
""" """
return self.getPowerChip() return self.getPowerChip()
@ -560,7 +558,7 @@ class Detector(CppDetectorApi):
@element @element
def periodl(self): 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 Note
----- -----
@ -582,7 +580,7 @@ class Detector(CppDetectorApi):
@element @element
def delay(self): 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 Note
----- -----
@ -627,7 +625,7 @@ class Detector(CppDetectorApi):
@element @element
def delayl(self): 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 Note
----- -----
@ -682,7 +680,7 @@ class Detector(CppDetectorApi):
@element @element
def txdelay(self): 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 Note
---- ----
@ -690,7 +688,7 @@ class Detector(CppDetectorApi):
\t\t[Eiger] txdelay_left to (2 * mod_index * n_delay), \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_right to ((2 * mod_index + 1) * n_delay) and \n
\t\t[Eiger] txdelay_frame to (2 *num_modules * n_delay) \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. Please refer txdelay_left, txdelay_right and txdelay_frame for details.
""" """
return self.getTransmissionDelay() return self.getTransmissionDelay()
@ -703,11 +701,11 @@ class Detector(CppDetectorApi):
@element @element
def txdelay_frame(self): 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 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 [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. [Mythen3] [0-16777215] Each value represents 8 ns (125 MHz clock), max is 134 ms.
""" """
@ -890,7 +888,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def numinterfaces(self): 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 Note
----- -----
@ -1236,11 +1234,11 @@ class Detector(CppDetectorApi):
@element @element
def udp_dstip2(self): 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 Note
---- ----
[Jungfrau] bottom half \n [Jungfrau][Moench] bottom half \n
[Gotthard2] veto debugging \n [Gotthard2] veto debugging \n
If 'auto' used, then ip is set to ip of rx_hostname. \n If 'auto' used, then ip is set to ip of rx_hostname. \n
To set IPs for individual modules, use setDestinationUDPIP2. To set IPs for individual modules, use setDestinationUDPIP2.
@ -1289,13 +1287,13 @@ class Detector(CppDetectorApi):
@element @element
def udp_dstmac2(self): 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 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 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 To set MACs for individual modules, use setDestinationUDPMAC2. \n
[Jungfrau] bottom half \n [Jungfrau][Moench] bottom half \n
[Gotthard2] veto debugging \n [Gotthard2] veto debugging \n
Use router mac if router between detector and receiver. Use router mac if router between detector and receiver.
@ -1340,11 +1338,11 @@ class Detector(CppDetectorApi):
@element @element
def udp_srcmac2(self): 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 Note
---- ----
[Jungfrau] bottom half \n [Jungfrau][Moench] bottom half \n
[Gotthard2] veto debugging \n [Gotthard2] veto debugging \n
To set MACs for individual modules, use setSourceUDPMAC2. To set MACs for individual modules, use setSourceUDPMAC2.
@ -1390,11 +1388,11 @@ class Detector(CppDetectorApi):
@element @element
def udp_srcip2(self): 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 Note
----- -----
[Jungfrau] bottom half \n [Jungfrau][Moench] bottom half \n
[Gotthard2] veto debugging \n [Gotthard2] veto debugging \n
Must be same subnet as destination udp ip2.\n Must be same subnet as destination udp ip2.\n
To set IPs for individual modules, use setSourceUDPIP2. To set IPs for individual modules, use setSourceUDPIP2.
@ -1440,7 +1438,7 @@ class Detector(CppDetectorApi):
---- ----
Default is 50002. \n Default is 50002. \n
[Eiger] right half \n [Eiger] right half \n
[Jungfrau] bottom half \n [Jungfrau][Moench] bottom half \n
[Gotthard2] veto debugging \n [Gotthard2] veto debugging \n
Ports for each module is calculated (incremented by 2) \n Ports for each module is calculated (incremented by 2) \n
To set ports for individual modules, use setDestinationUDPPort2. To set ports for individual modules, use setDestinationUDPPort2.
@ -1460,7 +1458,7 @@ class Detector(CppDetectorApi):
----- -----
[Gotthard] 0, 90, 110, 120, 150, 180, 200 \n [Gotthard] 0, 90, 110, 120, 150, 180, 200 \n
[Eiger][Mythen3][Gotthard2] 0 - 200 \n [Eiger][Mythen3][Gotthard2] 0 - 200 \n
[Jungfrau][Ctb][Moench] 0, 60 - 200 [Jungfrau][Moench][Ctb] 0, 60 - 200
""" """
return self.getHighVoltage() return self.getHighVoltage()
@ -1569,8 +1567,8 @@ class Detector(CppDetectorApi):
@element @element
def master(self): def master(self):
""" """
[Eiger][Gotthard2][Jungfrau] Sets (half) module to master and other(s) to slaves.\n [Eiger][Gotthard2][Jungfrau][Moench] Sets (half) module to master and other(s) to slaves.\n
[Gotthard][Gotthard2][Mythen3][Eiger][Jungfrau] Gets if the current (half) module is master. [Gotthard][Gotthard2][Mythen3][Eiger][Jungfrau][Moench] Gets if the current (half) module is master.
""" """
return self.getMaster() return self.getMaster()
@ -1582,7 +1580,7 @@ class Detector(CppDetectorApi):
@element @element
def sync(self): def sync(self):
""" """
[Jungfrau] Enables or disables synchronization between modules. [Jungfrau][Moench] Enables or disables synchronization between modules.
""" """
return self.getSynchronization() return self.getSynchronization()
@ -1718,7 +1716,7 @@ class Detector(CppDetectorApi):
@property @property
def adcreg(self): def adcreg(self):
"""[Jungfrau][Ctb][Moench][Gotthard] Writes to an adc register """[Jungfrau][Moench][Ctb][Gotthard] Writes to an adc register
Note Note
----- -----
@ -1731,7 +1729,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def adcinvert(self): def adcinvert(self):
"""[Ctb][Moench][Jungfrau] ADC Inversion Mask. """[Ctb][Jungfrau][Moench] ADC Inversion Mask.
Note Note
----- -----
@ -1747,7 +1745,7 @@ class Detector(CppDetectorApi):
@element @element
def triggersl(self): 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 Note
---- ----
@ -1760,7 +1758,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def frametime(self): def frametime(self):
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Timestamp at a frame start. """[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Timestamp at a frame start.
Note Note
---- ----
@ -1873,10 +1871,10 @@ class Detector(CppDetectorApi):
Note 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 [Eiger] FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED
[Gottthard2] G2_108MHZ (Default), G2_144MHZ [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. Also overwrites adcphase to recommended default.
""" """
return element_if_equal(self.getReadoutSpeed()) return element_if_equal(self.getReadoutSpeed())
@ -1962,7 +1960,7 @@ class Detector(CppDetectorApi):
Note Note
----- -----
Default: AUTO_TIMING \n 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 [Mythen3] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, TRIGGER_GATED \n
[Eiger] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER [Eiger] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER
""" """
@ -2121,13 +2119,13 @@ class Detector(CppDetectorApi):
def readnrows(self): def readnrows(self):
""" """
[Eiger] Number of rows to read out per half module starting from the centre. [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 Note
---- ----
[Eiger] Options: 1 - 256. 256 is default. \n [Eiger] Options: 1 - 256. 256 is default. \n
[Eiger]The permissible values depend on dynamic range and 10Gbe enabled.\n\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() return self.getReadNRows()
@ -2218,7 +2216,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def tengiga(self): def tengiga(self):
"""[Eiger][Ctb][Moench][Mythen3] 10GbE Enable.""" """[Eiger][Ctb][Mythen3] 10GbE Enable."""
return self.getTenGiga() return self.getTenGiga()
@tengiga.setter @tengiga.setter
@ -2238,7 +2236,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def flowcontrol10g(self): def flowcontrol10g(self):
"""[Eiger][Jungfrau] Enable or disable 10GbE Flow Control.""" """[Eiger][Jungfrau][Moench] Enable or disable 10GbE Flow Control."""
return self.getTenGigaFlowControl() return self.getTenGigaFlowControl()
@flowcontrol10g.setter @flowcontrol10g.setter
@ -2258,7 +2256,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def gappixels(self): 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() return self.getRxAddGapPixels()
@gappixels.setter @gappixels.setter
@ -2314,7 +2312,7 @@ class Detector(CppDetectorApi):
@element @element
def chipversion(self): 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 Example
------- -------
@ -2327,7 +2325,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def autocompdisable(self): def autocompdisable(self):
"""[Jungfrau] Enable or disable auto comparator disable mode. """[Jungfrau][Moench] Enable or disable auto comparator disable mode.
Note Note
----- -----
@ -2343,7 +2341,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def compdisabletime(self): 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 Note
----- -----
@ -2389,7 +2387,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def runtime(self): def runtime(self):
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Time from detector start up. """[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Time from detector start up.
Note Note
----- -----
@ -2482,7 +2480,7 @@ class Detector(CppDetectorApi):
@element @element
def temp_threshold(self): def temp_threshold(self):
""" """
[Jungfrau] Threshold temperature in degrees. [Jungfrau][Moench] Threshold temperature in degrees.
Note Note
----- -----
@ -2499,7 +2497,7 @@ class Detector(CppDetectorApi):
@element @element
def temp_event(self): def temp_event(self):
""" """
[Jungfrau] 1, if a temperature event occured. \n [Jungfrau][Moench] 1, if a temperature event occured. \n
Note Note
---- ----
@ -2527,7 +2525,7 @@ class Detector(CppDetectorApi):
@element @element
def temp_control(self): def temp_control(self):
""" """
[Jungfrau] Temperature control enable. [Jungfrau][Moench] Temperature control enable.
Note Note
----- -----
@ -2544,7 +2542,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def selinterface(self): def selinterface(self):
"""[Jungfrau] The udp interface to stream data from detector. """[Jungfrau][Moench] The udp interface to stream data from detector.
Note Note
----- -----
@ -2564,11 +2562,11 @@ class Detector(CppDetectorApi):
@property @property
def gainmode(self): def gainmode(self):
""" """
[Jungfrau] Detector gain mode. Enum: gainMode [Jungfrau][Moench] Detector gain mode. Enum: gainMode
Note 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!!! CAUTION: Do not use FIX_G0 without caution, you can damage the detector!!!
""" """
return element_if_equal(self.getGainMode()) return element_if_equal(self.getGainMode())
@ -2623,14 +2621,14 @@ class Detector(CppDetectorApi):
@element @element
def filterresistor(self): def filterresistor(self):
""" """
[Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing " [Gotthard2][Jungfrau][Moench] Set filter resistor. Increasing values for increasing "
"resistance. "resistance.
Note Note
---- ----
Advanced user command. Advanced user command.
[Gotthard2] Default is 0. Options: 0-3. [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() return self.getFilterResistor()
@ -2642,11 +2640,11 @@ class Detector(CppDetectorApi):
@element @element
def filtercells(self): def filtercells(self):
""" """
[Jungfrau] Set filter capacitor. [Jungfrau][Moench] Set filter capacitor.
Note 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() return self.getNumberOfFilterCells()
@ -2982,7 +2980,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def adcenable(self): 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() return self.getADCEnableMask()
@adcenable.setter @adcenable.setter
@ -2992,7 +2990,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def adcenable10g(self): 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 Note
----- -----
@ -3009,7 +3007,6 @@ class Detector(CppDetectorApi):
def samples(self): def samples(self):
""" """
[CTB] Number of samples (both analog and digitial) expected. \n [CTB] Number of samples (both analog and digitial) expected. \n
[Moench] Number of samples (analog only)
""" """
return self.getNumberOfAnalogSamples() return self.getNumberOfAnalogSamples()
@ -3020,7 +3017,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def runclk(self): def runclk(self):
"""[Ctb][Moench] Run clock in MHz.""" """[Ctb] Run clock in MHz."""
return self.getRUNClock() return self.getRUNClock()
@runclk.setter @runclk.setter
@ -3053,7 +3050,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def asamples(self): def asamples(self):
"""[Ctb][Moench] Number of analog samples expected. """ """[Ctb] Number of analog samples expected. """
return element_if_equal(self.getNumberOfAnalogSamples()) return element_if_equal(self.getNumberOfAnalogSamples())
@asamples.setter @asamples.setter
@ -3073,7 +3070,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def dbitphase(self): 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 Note
----- -----
@ -3114,7 +3111,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def maxdbitphaseshift(self): 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 Note
----- -----
@ -3161,7 +3158,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def maxadcphaseshift(self): def maxadcphaseshift(self):
"""[Jungfrau][CTB][Moench] Absolute maximum Phase shift of ADC clock. """[Jungfrau][Moench][CTB] Absolute maximum Phase shift of ADC clock.
Note Note
----- -----
@ -3173,12 +3170,12 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def adcphase(self): def adcphase(self):
"""[Gotthard][Jungfrau][CTB][Moench] Sets phase shift of ADC clock. """[Gotthard][Jungfrau][Moench][CTB] Sets phase shift of ADC clock.
Note Note
----- -----
[Jungfrau] Absolute phase shift. Changing Speed also resets adcphase to recommended defaults.\n [Jungfrau][Moench] 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 [Ctb] Absolute phase shift. Changing adcclk also resets adcphase and sets it to previous values.\n
[Gotthard] Relative phase shift. [Gotthard] Relative phase shift.
:getter: Not implemented for Gotthard :getter: Not implemented for Gotthard
@ -3192,7 +3189,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def adcpipeline(self): def adcpipeline(self):
"""[Ctb][Moench] Sets pipeline for ADC clock. """ """[Ctb] Sets pipeline for ADC clock. """
return self.getADCPipeline() return self.getADCPipeline()
@adcpipeline.setter @adcpipeline.setter
@ -3202,7 +3199,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def adcclk(self): def adcclk(self):
"""[Ctb][Moench] Sets ADC clock frequency in MHz. """ """[Ctb] Sets ADC clock frequency in MHz. """
return self.getADCClock() return self.getADCClock()
@adcclk.setter @adcclk.setter
@ -3213,7 +3210,7 @@ class Detector(CppDetectorApi):
@element @element
def syncclk(self): def syncclk(self):
""" """
[Ctb][Moench] Sync clock in MHz. [Ctb] Sync clock in MHz.
Note Note
----- -----
@ -3224,7 +3221,7 @@ class Detector(CppDetectorApi):
@property @property
def pattern(self): 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 Note
---- ----
@ -3246,7 +3243,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patioctrl(self): 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 Example
-------- --------
@ -3263,7 +3260,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patlimits(self): 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 Example
--------- ---------
@ -3283,7 +3280,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patsetbit(self): 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 Example
-------- --------
@ -3300,7 +3297,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patmask(self): 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 Example
-------- --------
@ -3318,7 +3315,7 @@ class Detector(CppDetectorApi):
# @element # @element
def patwait(self): def patwait(self):
""" """
[Ctb][Moench][Mythen3] Wait address of loop level provided. [Ctb][Mythen3] Wait address of loop level provided.
Example Example
------- -------
@ -3335,7 +3332,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patwait0(self): def patwait0(self):
"""[Ctb][Moench][Mythen3] Wait 0 address. """[Ctb][Mythen3] Wait 0 address.
Example Example
-------- --------
@ -3355,7 +3352,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patwait1(self): def patwait1(self):
"""[Ctb][Moench][Mythen3] Wait 1 address. """[Ctb][Mythen3] Wait 1 address.
Example Example
-------- --------
@ -3375,7 +3372,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patwait2(self): def patwait2(self):
"""[Ctb][Moench][Mythen3] Wait 2 address. """[Ctb][Mythen3] Wait 2 address.
Example Example
-------- --------
@ -3395,7 +3392,7 @@ class Detector(CppDetectorApi):
@property @property
def patwaittime(self): 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 Example
------- -------
@ -3412,7 +3409,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patwaittime0(self): def patwaittime0(self):
"""[Ctb][Moench][Mythen3] Wait 0 time in clock cycles.""" """[Ctb][Mythen3] Wait 0 time in clock cycles."""
return self.getPatternWaitTime(0) return self.getPatternWaitTime(0)
@patwaittime0.setter @patwaittime0.setter
@ -3423,7 +3420,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patwaittime1(self): def patwaittime1(self):
"""[Ctb][Moench][Mythen3] Wait 1 time in clock cycles.""" """[Ctb][Mythen3] Wait 1 time in clock cycles."""
return self.getPatternWaitTime(1) return self.getPatternWaitTime(1)
@patwaittime1.setter @patwaittime1.setter
@ -3434,7 +3431,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patwaittime2(self): def patwaittime2(self):
"""[Ctb][Moench][Mythen3] Wait 2 time in clock cycles.""" """[Ctb][Mythen3] Wait 2 time in clock cycles."""
return self.getPatternWaitTime(2) return self.getPatternWaitTime(2)
@patwaittime2.setter @patwaittime2.setter
@ -3446,7 +3443,7 @@ class Detector(CppDetectorApi):
@property @property
def patloop(self): 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 Example
------- -------
@ -3463,7 +3460,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patloop0(self): 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 Example
--------- ---------
@ -3483,7 +3480,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patloop1(self): 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 Example
--------- ---------
@ -3504,7 +3501,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patloop2(self): 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 Example
--------- ---------
@ -3526,7 +3523,7 @@ class Detector(CppDetectorApi):
@property @property
def patnloop(self): def patnloop(self):
""" """
[Ctb][Moench][Mythen3] Number of cycles of the loop provided. [Ctb][Mythen3] Number of cycles of the loop provided.
Example Example
------- -------
@ -3543,7 +3540,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patnloop0(self): def patnloop0(self):
"""[Ctb][Moench][Mythen3] Number of cycles of loop 0.""" """[Ctb][Mythen3] Number of cycles of loop 0."""
return self.getPatternLoopCycles(0) return self.getPatternLoopCycles(0)
@patnloop0.setter @patnloop0.setter
@ -3554,7 +3551,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patnloop1(self): def patnloop1(self):
"""[Ctb][Moench][Mythen3] Number of cycles of loop 1.""" """[Ctb][Mythen3] Number of cycles of loop 1."""
return self.getPatternLoopCycles(1) return self.getPatternLoopCycles(1)
@patnloop1.setter @patnloop1.setter
@ -3565,7 +3562,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def patnloop2(self): def patnloop2(self):
"""[Ctb][Moench][Mythen3] Number of cycles of loop 2.""" """[Ctb][Mythen3] Number of cycles of loop 2."""
return self.getPatternLoopCycles(2) return self.getPatternLoopCycles(2)
@patnloop2.setter @patnloop2.setter
@ -3636,7 +3633,7 @@ class Detector(CppDetectorApi):
@property @property
@element @element
def v_limit(self): 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) return self.getDAC(dacIndex.V_LIMIT, True)
@v_limit.setter @v_limit.setter

View File

@ -48,6 +48,10 @@ void qTabAdvanced::SetupWidgetWindow() {
lblDiscardBits->setEnabled(true); lblDiscardBits->setEnabled(true);
spinDiscardBits->setEnabled(true); spinDiscardBits->setEnabled(true);
break; break;
case slsDetectorDefs::JUNGFRAU:
lblNumStoragecells->setEnabled(true);
spinNumStoragecells->setEnabled(true);
break;
default: default:
break; break;
} }

View File

@ -104,8 +104,6 @@
#define CONFIG_V11_STATUS_FLTR_CLL_OFST (0) #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_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%) // CSM mode = high current (100%), low current (16%)
#define CONFIG_V11_STATUS_CRRNT_SRC_LOW_OFST (19) #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) #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_ACQ_FIFO_CLR_MSK (0x00000001 << CONTROL_ACQ_FIFO_CLR_OFST)
#define CONTROL_MASTER_OFST (15) #define CONTROL_MASTER_OFST (15)
#define CONTROL_MASTER_MSK (0x00000001 << CONTROL_MASTER_OFST) #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_OFST (20)
#define CONTROL_RX_ADDTNL_ENDPTS_NUM_MSK (0x0000003F << CONTROL_RX_ADDTNL_ENDPTS_NUM_OFST) #define CONTROL_RX_ADDTNL_ENDPTS_NUM_MSK (0x0000003F << CONTROL_RX_ADDTNL_ENDPTS_NUM_OFST)
#define CONTROL_RX_ENDPTS_START_OFST (26) #define CONTROL_RX_ENDPTS_START_OFST (26)
@ -260,8 +256,6 @@
#define CONFIG_V11_FLTR_CLL_OFST (0) #define CONFIG_V11_FLTR_CLL_OFST (0)
#define CONFIG_V11_FLTR_CLL_MSK (0x00000FFF << CONFIG_V11_FLTR_CLL_OFST) #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%) // CSM mode = high current (100%), low current (16%)
#define CONFIG_V11_CRRNT_SRC_LOW_OFST (19) #define CONFIG_V11_CRRNT_SRC_LOW_OFST (19)
#define CONFIG_V11_CRRNT_SRC_LOW_MSK (0x00000001 << CONFIG_V11_CRRNT_SRC_LOW_OFST) #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_CMP_RST_MSK (0x00000001 << DAQ_CMP_RST_OFST)
#define DAQ_CHIP11_VRSN_OFST (7) #define DAQ_CHIP11_VRSN_OFST (7)
#define DAQ_CHIP11_VRSN_MSK (0x00000001 << DAQ_CHIP11_VRSN_OFST) #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_OFST (12)
#define DAQ_FRCE_SWTCH_GAIN_MSK (0x00000003 << DAQ_FRCE_SWTCH_GAIN_OFST) #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) #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_OFST (0)
#define MOD_ID_MSK (0x0000FFFF << MOD_ID_OFST) #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 */ /* ADC 0 Deserializer Control */
#define ADC_DSRLZR_0_REG (0xF0 << MEM_MAP_SHIFT) #define ADC_DSRLZR_0_REG (0xF0 << MEM_MAP_SHIFT)
#define ADC_DSRLZR_0_RFRSH_ALGNMNT_OFST (31) /* Refresh alignment */ #define ADC_DSRLZR_0_RFRSH_ALGNMNT_OFST (31) /* Refresh alignment */

View File

@ -518,7 +518,7 @@ void setupDetector() {
resetCore(); resetCore();
alignDeserializer(); alignDeserializer();
// configureASICTimer(); ASIC_CTRL_REG to be removed along with storage cell
// delay // delay
bus_w(ADC_PORT_INVERT_REG, bus_w(ADC_PORT_INVERT_REG,
(isHardwareVersion_1_0() ? ADC_PORT_INVERT_BOARD2_VAL (isHardwareVersion_1_0() ? ADC_PORT_INVERT_BOARD2_VAL
@ -536,14 +536,6 @@ void setupDetector() {
setExpTime(DEFAULT_EXPTIME); setExpTime(DEFAULT_EXPTIME);
setPeriod(DEFAULT_PERIOD); setPeriod(DEFAULT_PERIOD);
setDelayAfterTrigger(DEFAULT_DELAY); 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); setTiming(DEFAULT_TIMING_MODE);
setNextFrameNumber(DEFAULT_STARTING_FRAME_NUMBER); setNextFrameNumber(DEFAULT_STARTING_FRAME_NUMBER);
@ -891,66 +883,6 @@ uint32_t getADCInvertRegister() {
} }
/* parameters - timer */ /* 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) { int setNextFrameNumber(uint64_t value) {
LOG(logINFO, LOG(logINFO,
@ -1075,48 +1007,6 @@ int64_t getDelayAfterTrigger() {
(1E-3 * CLK_SYNC); (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() { int64_t getNumFramesLeft() {
return get64BitReg(GET_FRAMES_LSB_REG, GET_FRAMES_MSB_REG); 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); 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) { int setReadoutSpeed(int val) {
// stop state machine if running // stop state machine if running
if (runBusy()) { if (runBusy()) {
@ -2601,8 +2479,7 @@ void *start_timer(void *arg) {
int transmissionDelayUs = getTransmissionDelayFrame() * 1000; int transmissionDelayUs = getTransmissionDelayFrame() * 1000;
int numInterfaces = getNumberofUDPInterfaces(); int numInterfaces = getNumberofUDPInterfaces();
int64_t periodNs = getPeriod(); int64_t periodNs = getPeriod();
int numFrames = (getNumFrames() * getNumTriggers() * int numFrames = getNumFrames() * getNumTriggers();
(getNumAdditionalStorageCells() + 1));
int64_t expUs = getExpTime() / 1000; int64_t expUs = getExpTime() / 1000;
const int maxPacketsPerFrame = (MAX_ROWS_PER_READOUT / ROWS_PER_PACKET); const int maxPacketsPerFrame = (MAX_ROWS_PER_READOUT / ROWS_PER_PACKET);
const int dataSize = (DATA_BYTES / maxPacketsPerFrame); const int dataSize = (DATA_BYTES / maxPacketsPerFrame);

View File

@ -44,10 +44,6 @@
#define DEFAULT_GAINMODE (DYNAMIC) #define DEFAULT_GAINMODE (DYNAMIC)
#define DEFAULT_TX_UDP_PORT (0x7e9a) #define DEFAULT_TX_UDP_PORT (0x7e9a)
#define DEFAULT_TMP_THRSHLD (65 * 1000) // milli degree Celsius #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_FLIP_ROWS (0)
#define DEFAULT_FILTER_RESISTOR (1) // higher resistor #define DEFAULT_FILTER_RESISTOR (1) // higher resistor
#define DEFAULT_FILTER_CELL (0) #define DEFAULT_FILTER_CELL (0)
@ -66,9 +62,6 @@
/* Defines in the Firmware */ /* Defines in the Firmware */
#define MAX_TIMESLOT_VAL (0x1F) #define MAX_TIMESLOT_VAL (0x1F)
#define MAX_THRESHOLD_TEMP_VAL (127999) // millidegrees #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 ACQ_TIME_MIN_CLOCK (2)
#define ASIC_FILTER_MAX_RES_VALUE (1) #define ASIC_FILTER_MAX_RES_VALUE (1)
#define MAX_SELECT_CHIP10_VAL (63) #define MAX_SELECT_CHIP10_VAL (63)

View File

@ -222,7 +222,7 @@ int getReadoutMode();
#endif #endif
// parameters - timer // parameters - timer
#if defined(JUNGFRAUD) || defined(MOENCHD) #if defined(JUNGFRAUD)
int selectStoragecellStart(int pos); int selectStoragecellStart(int pos);
int getMaxStoragecellStart(); int getMaxStoragecellStart();
#endif #endif
@ -266,7 +266,7 @@ int64_t getSubDeadTime();
int64_t getMeasuredPeriod(); int64_t getMeasuredPeriod();
int64_t getMeasuredSubPeriod(); int64_t getMeasuredSubPeriod();
#endif #endif
#if defined(JUNGFRAUD) || defined(MOENCHD) #if defined(JUNGFRAUD)
void setNumAdditionalStorageCells(int val); void setNumAdditionalStorageCells(int val);
int getNumAdditionalStorageCells(); int getNumAdditionalStorageCells();
int setStorageCellDelay(int64_t val); int setStorageCellDelay(int64_t val);
@ -513,7 +513,9 @@ void configureChip();
int autoCompDisable(int on); int autoCompDisable(int on);
int setComparatorDisableTime(int64_t val); int setComparatorDisableTime(int64_t val);
int64_t getComparatorDisableTime(); int64_t getComparatorDisableTime();
#ifndef MOENCHD
void configureASICTimer(); void configureASICTimer();
#endif
int setReadoutSpeed(int val); int setReadoutSpeed(int val);
int getReadoutSpeed(int *retval); int getReadoutSpeed(int *retval);
int setPhase(enum CLKINDEX ind, int val, int degrees); int setPhase(enum CLKINDEX ind, int val, int degrees);

View File

@ -2158,7 +2158,7 @@ int get_num_additional_storage_cells(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int retval = -1; int retval = -1;
#if !defined(JUNGFRAUD) && !defined(MOENCHD) #if !defined(JUNGFRAUD)
functionNotImplemented(); functionNotImplemented();
#else #else
// get only // get only
@ -2177,7 +2177,7 @@ int set_num_additional_storage_cells(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting number of addl. storage cells %d\n", arg)); LOG(logDEBUG1, ("Setting number of addl. storage cells %d\n", arg));
#if !defined(JUNGFRAUD) && !defined(MOENCHD) #if !defined(JUNGFRAUD)
functionNotImplemented(); functionNotImplemented();
#else #else
// only set // only set
@ -2620,7 +2620,7 @@ int get_storage_cell_delay(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int64_t retval = -1; int64_t retval = -1;
#if !defined(JUNGFRAUD) && !defined(MOENCHD) #if !defined(JUNGFRAUD)
functionNotImplemented(); functionNotImplemented();
#else #else
// get only // get only
@ -2647,7 +2647,7 @@ int set_storage_cell_delay(int file_des) {
LOG(logDEBUG1, LOG(logDEBUG1,
("Setting storage cell delay %lld ns\n", (long long int)arg)); ("Setting storage cell delay %lld ns\n", (long long int)arg));
#if !defined(JUNGFRAUD) && !defined(MOENCHD) #if !defined(JUNGFRAUD)
functionNotImplemented(); functionNotImplemented();
#else #else
// only set // only set
@ -4015,7 +4015,7 @@ int storage_cell_start(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting Storage cell start to %d\n", arg)); LOG(logDEBUG1, ("Setting Storage cell start to %d\n", arg));
#if !defined(JUNGFRAUD) && !defined(MOENCHD) #if !defined(JUNGFRAUD)
functionNotImplemented(); functionNotImplemented();
#else #else
// set & get // set & get
@ -6958,7 +6958,7 @@ int get_receiver_parameters(int file_des) {
return printSocketReadError(); return printSocketReadError();
// additional storage cells // additional storage cells
#if defined(JUNGFRAUD) || defined(MOENCHD) #if defined(JUNGFRAUD)
i32 = getNumAdditionalStorageCells(); i32 = getNumAdditionalStorageCells();
#else #else
i32 = 0; i32 = 0;

View File

@ -1285,27 +1285,27 @@ class Detector {
* disabled. It is only possible for chipv1.1.*/ * disabled. It is only possible for chipv1.1.*/
void setComparatorDisableTime(ns t, Positions pos = {}); void setComparatorDisableTime(ns t, Positions pos = {});
/** [Jungfrau][Moench] Advanced TODO naming */ /** [Jungfrau] Advanced TODO naming */
Result<int> getNumberOfAdditionalStorageCells(Positions pos = {}) const; Result<int> getNumberOfAdditionalStorageCells(Positions pos = {}) const;
/** [Jungfrau][Moench] Advanced \n /** [Jungfrau] Advanced \n
* Only for chipv1.0. Options: 0 - 15. Default: 0. \n * Only for chipv1.0. Options: 0 - 15. Default: 0. \n
* The #images = #frames x #triggers x (#storagecells + 1) */ * The #images = #frames x #triggers x (#storagecells + 1) */
void setNumberOfAdditionalStorageCells(int value); void setNumberOfAdditionalStorageCells(int value);
/** [Jungfrau][Moench] Advanced */ /** [Jungfrau] Advanced */
Result<int> getStorageCellStart(Positions pos = {}) const; 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 * acquisition of the series. Options: 0-max. max is 15 (default) for
* chipv1.0 and 3 (default) for chipv1.1. * chipv1.0 and 3 (default) for chipv1.1.
*/ */
void setStorageCellStart(int cell, Positions pos = {}); void setStorageCellStart(int cell, Positions pos = {});
/** [Jungfrau][Moench] Advanced*/ /** [Jungfrau] Advanced*/
Result<ns> getStorageCellDelay(Positions pos = {}) const; 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 * consecutive exposures in burst mode. \n Options: (0-1638375 ns
* (resolution of 25ns)\n Only applicable for chipv1.0. * (resolution of 25ns)\n Only applicable for chipv1.0.
*/ */

View File

@ -2000,27 +2000,22 @@ class CmdProxy {
INTEGER_COMMAND_SET_NOID_GET_ID( INTEGER_COMMAND_SET_NOID_GET_ID(
extrastoragecells, getNumberOfAdditionalStorageCells, extrastoragecells, getNumberOfAdditionalStorageCells,
setNumberOfAdditionalStorageCells, StringTo<int>, setNumberOfAdditionalStorageCells, StringTo<int>,
"[0-15]\n\t[Jungfrau][Moench] Only for chipv1.0. Number of additional " "[0-15]\n\t[Jungfrau] Only for chipv1.0. Number of additional storage "
"storage " "cells. Default is 0. For advanced users only. \n\tThe #images = "
"cells. Default is " "#frames x #triggers x (#extrastoragecells + 1).");
"0. For advanced users only. \n\tThe #images = #frames x #triggers x "
"(#extrastoragecells + 1).");
INTEGER_COMMAND_VEC_ID( INTEGER_COMMAND_VEC_ID(
storagecell_start, getStorageCellStart, setStorageCellStart, storagecell_start, getStorageCellStart, setStorageCellStart,
StringTo<int>, StringTo<int>,
"[0-max]\n\t[Jungfrau][Moench] Storage cell that stores the first " "[0-max]\n\t[Jungfrau] Storage cell that stores the first acquisition "
"acquisition "
"of the series. max is 15 (default) for chipv1.0 and 3 (default) for " "of the series. max is 15 (default) for chipv1.0 and 3 (default) for "
"chipv1.1. For advanced users only."); "chipv1.1. For advanced users only.");
TIME_COMMAND( TIME_COMMAND(storagecell_delay, getStorageCellDelay, setStorageCellDelay,
storagecell_delay, getStorageCellDelay, setStorageCellDelay,
"[duration (0-1638375 ns)] [(optional unit) " "[duration (0-1638375 ns)] [(optional unit) "
"ns|us|ms|s]\n\t[Jungfrau][Moench] " "ns|us|ms|s]\n\t[Jungfrau] Additional time delay between 2 "
"Additional time delay between 2 consecutive exposures in burst mode " "consecutive exposures in burst mode (resolution of 25ns). "
"(resolution of 25ns). Only applicable for chipv1.0. For advanced " "Only applicable for chipv1.0. For advanced users only.");
"users only.");
INTEGER_COMMAND_VEC_ID( INTEGER_COMMAND_VEC_ID(
gainmode, getGainMode, setGainMode, StringTo<slsDetectorDefs::gainMode>, gainmode, getGainMode, setGainMode, StringTo<slsDetectorDefs::gainMode>,

View File

@ -287,7 +287,7 @@ TEST_CASE("extrastoragecells", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) { if (det_type == defs::JUNGFRAU) {
// chip version 1.0 // chip version 1.0
if (det.getChipVersion().squash() * 10 == 10) { if (det.getChipVersion().squash() * 10 == 10) {
auto prev_val = det.getNumberOfAdditionalStorageCells().tsquash( auto prev_val = det.getNumberOfAdditionalStorageCells().tsquash(
@ -330,7 +330,7 @@ TEST_CASE("storagecell_start", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); 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(); auto prev_val = det.getStorageCellStart();
{ {
std::ostringstream oss; std::ostringstream oss;
@ -375,7 +375,7 @@ TEST_CASE("storagecell_delay", "[.cmd]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) { if (det_type == defs::JUNGFRAU) {
// chip version 1.0 // chip version 1.0
if (det.getChipVersion().squash() * 10 == 10) { if (det.getChipVersion().squash() * 10 == 10) {
auto prev_val = det.getStorageCellDelay(); auto prev_val = det.getStorageCellDelay();

View File

@ -367,7 +367,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
if (detType == GOTTHARD2) { if (detType == GOTTHARD2) {
impl()->setNumberOfBursts(arg.bursts); impl()->setNumberOfBursts(arg.bursts);
} }
if (detType == JUNGFRAU || detType == MOENCH) { if (detType == JUNGFRAU) {
impl()->setNumberOfAdditionalStorageCells(arg.additionalStorageCells); impl()->setNumberOfAdditionalStorageCells(arg.additionalStorageCells);
} }
if (detType == CHIPTESTBOARD) { if (detType == CHIPTESTBOARD) {

View File

@ -226,7 +226,7 @@ const slsDetectorDefs::xy Implementation::GetPortGeometry() const {
xy portGeometry{1, 1}; xy portGeometry{1, 1};
if (generalData->detType == EIGER) if (generalData->detType == EIGER)
portGeometry.x = generalData->numUDPInterfaces; portGeometry.x = generalData->numUDPInterfaces;
else if (generalData->detType == JUNGFRAU) else if (generalData->detType == JUNGFRAU || generalData->detType == MOENCH)
portGeometry.y = generalData->numUDPInterfaces; portGeometry.y = generalData->numUDPInterfaces;
return portGeometry; return portGeometry;
} }
@ -413,7 +413,7 @@ void Implementation::setReceiverROI(const slsDetectorDefs::ROI arg) {
portFullRoi.xmin += nPortDim.x; portFullRoi.xmin += nPortDim.x;
portFullRoi.xmax += nPortDim.x; portFullRoi.xmax += nPortDim.x;
} }
// top bottom (jungfrau) // top bottom (jungfrau or moench)
else { else {
portFullRoi.ymin += nPortDim.y; portFullRoi.ymin += nPortDim.y;
portFullRoi.ymax += nPortDim.y; portFullRoi.ymax += nPortDim.y;
@ -1127,7 +1127,7 @@ int Implementation::getUDPSocketBufferSize() const {
void Implementation::setUDPSocketBufferSize(const int s) { void Implementation::setUDPSocketBufferSize(const int s) {
size_t listSize = listener.size(); size_t listSize = listener.size();
if ((generalData->detType == JUNGFRAU || if ((generalData->detType == JUNGFRAU || generalData->detType == MOENCH ||
generalData->detType == GOTTHARD2) && generalData->detType == GOTTHARD2) &&
(int)listSize != generalData->numUDPInterfaces) { (int)listSize != generalData->numUDPInterfaces) {
throw RuntimeError("Number of Interfaces " + throw RuntimeError("Number of Interfaces " +

View File

@ -7,8 +7,7 @@
#define APICTB "developer 0x221213" #define APICTB "developer 0x221213"
#define APIGOTTHARD2 "developer 0x221213" #define APIGOTTHARD2 "developer 0x221213"
#define APIJUNGFRAU "developer 0x221213" #define APIJUNGFRAU "developer 0x221213"
#define APIMOENCH "developer 0x221213"
#define APIEIGER "developer 0x221213" #define APIEIGER "developer 0x221213"
#define APIMOENCH "developer 0x221215"
#define APIGOTTHARD "developer 0x230117" #define APIGOTTHARD "developer 0x230117"
#define APIMYTHEN3 "developer 0x230117" #define APIMYTHEN3 "developer 0x230117"