mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-15 06:17:12 +02:00
Compare commits
47 Commits
Author | SHA1 | Date | |
---|---|---|---|
cfbe3c86cc | |||
4b414bfddb | |||
5ab64efe3e | |||
bfe53c6693 | |||
c64e87a2b6 | |||
14e11e8b5b | |||
af3dc1e7f4 | |||
8174fc9691 | |||
d6eac6da71 | |||
9b9b09ceaf | |||
4613c54f57 | |||
58ac7ac280 | |||
82edfa75d3 | |||
b6ef3bc39e | |||
2035666792 | |||
1ff4d806e7 | |||
3861379653 | |||
91140bbb71 | |||
d44329117d | |||
6c67025ea8 | |||
37ce3d6f59 | |||
1484d038de | |||
fb0090c79e | |||
adc68cd519 | |||
1566eef247 | |||
e7cd90db78 | |||
45414149fe | |||
48759f440e | |||
b367b7e431 | |||
f0b2a6f6f9 | |||
f761046bfc | |||
1a859b83db | |||
70bfc875a6 | |||
c0755308a4 | |||
ab5509e10c | |||
004cb26646 | |||
a4f47a5945 | |||
312f3f473d | |||
5871086cd6 | |||
6a0fe823b3 | |||
5912aae53e | |||
8833ccf5cc | |||
77c558a7be | |||
378fc301b8 | |||
87d6e16090 | |||
2ef021041c | |||
574127b5ac |
@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
project(slsDetectorPackage)
|
||||
set(PROJECT_VERSION 7.0.0)
|
||||
set(PROJECT_VERSION 7.0.3)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
||||
|
||||
|
165
RELEASE.txt
165
RELEASE.txt
@ -1,41 +1,125 @@
|
||||
SLS Detector Package Major Release 7.x.x released on xx.xx.2023
|
||||
SLS Detector Package Major Release 7.0.3 released on 14.11.2023
|
||||
===============================================================
|
||||
|
||||
This document describes the differences between v7.x.x and v7.0.0
|
||||
This document describes the differences between v7.0.3 and v7.0.2
|
||||
|
||||
|
||||
|
||||
CONTENTS
|
||||
--------
|
||||
1 New, Changed or Resolved Features
|
||||
1.1 Compilation
|
||||
1.2 Callback
|
||||
1.3 Python
|
||||
1.4 Client
|
||||
1.5 Detector Server
|
||||
1.6 Simulator
|
||||
1.7 Receiver
|
||||
1.8 Gui
|
||||
2 On-board Detector Server Compatibility
|
||||
3 Firmware Requirements
|
||||
4 Kernel Requirements
|
||||
5 Download, Documentation & Support
|
||||
1 Resolved Issues
|
||||
2 On-board Detector Server Compatibility
|
||||
3 Firmware Requirements
|
||||
4 Kernel Requirements
|
||||
5 Download, Documentation & Support
|
||||
|
||||
|
||||
|
||||
|
||||
1 New, Changed or Resolved Features
|
||||
=====================================
|
||||
1 Resolved Issues
|
||||
=================
|
||||
|
||||
|
||||
- moench being made compatible with jungfrau 2.0 boards (jungfrau structure, away from ctb)
|
||||
- rx_hostname and port can be combo to one or to all, or vector or hostnames and ports. ignoring none or empty, then verifying no duplicates for the host port combo including from shared memory
|
||||
- same for hostname and port combo (for virtual servers)
|
||||
- eiger febl and febr in versions, ensure its the same as beb fw version
|
||||
- eiger hardware version fx30 and fx70 (versions command)
|
||||
- fixed rx_arping error
|
||||
- fix hdf5 compilation (detspec fields)
|
||||
- print server version atleast in exception msg when connecting to an older server, also able to add hostname to shm
|
||||
Firmware
|
||||
--------
|
||||
|
||||
|
||||
* [Eiger] Blocking trigger on quad
|
||||
Previously, blocking software trigger on a quad was not blocking. Fixed
|
||||
with firmware v32.
|
||||
|
||||
|
||||
Client
|
||||
------
|
||||
|
||||
|
||||
* Limit port number max to 65535
|
||||
Previously, one could set the port numbers (TCP, UDP, ZMQ) to values
|
||||
higher than 65535 and also to 0. However, it was truncated to 16 bit
|
||||
in the background, but not relayed to the user.
|
||||
Now, it will throw if it is 0 or greater than 65535 (16 bit).
|
||||
|
||||
|
||||
* Stopping acqusition for a single or subset of modules
|
||||
The Detector API previously stopped all modules.
|
||||
Now, it takes into account which modules the user wanted to stop.
|
||||
|
||||
|
||||
* [Jungfrau] Stop in sync mode
|
||||
When stopping acquisition in sync mode, only the master module sometimes
|
||||
returns 'Idle' state instead of 'Stopped'. The software threw an
|
||||
exception for the different states then.
|
||||
Now, it does not throw and a fix will be added to the next firmware
|
||||
release for the different states (with SW release: v8.0.0).
|
||||
|
||||
|
||||
* [Eiger] Incorrect error message in Stop
|
||||
When stopping acquisition, if a half module were to give an error in a
|
||||
rare case while the others succeeded, this would result in an re-attempt
|
||||
to stop 9 more times before throwing an incorrect exception messsage that
|
||||
it could not stop.
|
||||
Now, it is handled and will throw an exception of the error status
|
||||
immediately.
|
||||
|
||||
|
||||
Receiver
|
||||
--------
|
||||
|
||||
|
||||
* Limit TCP port number (command line) to max of 65535
|
||||
Refer issue under 'Client'.
|
||||
|
||||
|
||||
Detector Simulator
|
||||
------------------
|
||||
|
||||
|
||||
* Limit TCP port number (command line) to max of 65535
|
||||
Refer issue under 'Client'.
|
||||
|
||||
|
||||
* Some commands such as 'readnrows' would complain that it cannot be set
|
||||
because the detector is not idle, but was setting it anyway. Fixed.
|
||||
|
||||
|
||||
Gui/ Client Callback
|
||||
--------------------
|
||||
|
||||
|
||||
* [Jungfrau] Gui: corrected color map of gain plot
|
||||
Previously, color on the gain plot did not update after the first image,
|
||||
unless there were x/y min/max changes or window resizing. Fixed.
|
||||
|
||||
|
||||
* [Jungfrau] Acquisition finished callback error status in sync mode
|
||||
When stopping acquisition in multi module Jungfrau sync mode,
|
||||
different status (master 'idle' and slaves 'stopped' in
|
||||
firmware 2.4.1 or 1.4.1) show as 'error' in acquisition finished call
|
||||
back (mainly used for gui). This is fixed.
|
||||
|
||||
|
||||
* [Jungfrau] Gui: Next frame number shown as 0 for inconsistency
|
||||
When stopping an acquisition in a multi module Jungfrau, the next
|
||||
frame numbers might be different, for which the Gui shows an error message
|
||||
but keeps the number as 0. Now, it is fixed to show -1 for inconsistency
|
||||
and error message shown. So, setting 0 will also prompt an error message
|
||||
that 0 is an invalid input.
|
||||
|
||||
|
||||
Data Processing
|
||||
---------------
|
||||
|
||||
|
||||
* [Moench] Segmentation fault with moench03RawDataPrcess
|
||||
Previously, it crashed when nframes > 0. Fixed.
|
||||
|
||||
|
||||
* [Moench] Interpolation issues fixed.
|
||||
|
||||
|
||||
* [Moench] When receiver in discard_partial mode and gets an empty frame,
|
||||
it sends a zmq packet with header and no data. This is handled in post
|
||||
processing as a temporary solution.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -43,13 +127,13 @@ This document describes the differences between v7.x.x and v7.0.0
|
||||
==========================================
|
||||
|
||||
|
||||
Eiger 7.0.0
|
||||
Jungfrau 7.0.0
|
||||
Mythen3 7.0.0
|
||||
Gotthard2 7.0.0
|
||||
Gotthard 7.0.0
|
||||
Moench 7.0.0
|
||||
Ctb 7.0.0
|
||||
Eiger 7.0.3
|
||||
Jungfrau 7.0.3
|
||||
Mythen3 7.0.3
|
||||
Gotthard2 7.0.3
|
||||
Gotthard 7.0.3
|
||||
Moench 7.0.3
|
||||
Ctb 7.0.3
|
||||
|
||||
|
||||
On-board Detector Server Upgrade
|
||||
@ -70,21 +154,21 @@ This document describes the differences between v7.x.x and v7.0.0
|
||||
========================
|
||||
|
||||
|
||||
Eiger 20.02.2023 (v31)
|
||||
Eiger 02.10.2023 (v32) (updated in 7.0.3)
|
||||
|
||||
Jungfrau 04.11.2022 (v1.4, HW v1.0)
|
||||
03.11.2022 (v2.4, HW v2.0)
|
||||
Jungfrau 16.05.2023 (v1.4.1, HW v1.0) (updated in 7.0.2)
|
||||
15.05.2023 (v2.4.1, HW v2.0) (updated in 7.0.2)
|
||||
|
||||
Mythen3 24.01.2023 (v1.4)
|
||||
Mythen3 24.01.2023 (v1.4) (updated in 7.0.0)
|
||||
|
||||
Gotthard2 23.11.2022 (v0.3)
|
||||
Gotthard2 23.11.2022 (v0.3) (updated in 7.0.0)
|
||||
|
||||
Gotthard 08.02.2018 (50um and 25um Master)
|
||||
09.02.2018 (25 um Slave)
|
||||
|
||||
Moench 05.12.2022 (v0.3)
|
||||
Moench 05.12.2022 (v0.3) (updated in 7.0.0)
|
||||
|
||||
Ctb 05.12.2022 (v1.1)
|
||||
Ctb 05.12.2022 (v1.1) (updated in 7.0.0)
|
||||
|
||||
|
||||
Detector Upgrade
|
||||
@ -218,3 +302,4 @@ This document describes the differences between v7.x.x and v7.0.0
|
||||
|
||||
dhanya.thattil@psi.ch
|
||||
erik.frojdh@psi.ch
|
||||
|
||||
|
@ -3,6 +3,5 @@ python:
|
||||
- 3.9
|
||||
- 3.10
|
||||
- 3.11
|
||||
- 3.12
|
||||
|
||||
numpy:
|
||||
- 1.17
|
||||
|
@ -140,14 +140,21 @@ ZMQ: Json Header Format
|
||||
"quad": unsigned int,
|
||||
"addJsonHeader": {
|
||||
string : string
|
||||
}
|
||||
},
|
||||
"rx_roi": [
|
||||
unsigned int,
|
||||
unsigned int,
|
||||
unsigned int,
|
||||
unsigned int
|
||||
]
|
||||
}
|
||||
|
||||
+--------------+----------------------------------------------+
|
||||
| Field | Description |
|
||||
+--------------+----------------------------------------------+
|
||||
| jsonversion | Version of the json header. |
|
||||
| | Value at 4 for v6.x.x and v7.x.x |
|
||||
| | Value at 4 for v6.x.x - v7.0.1 |
|
||||
| | Value at 5 for v7.0.2 |
|
||||
+--------------+----------------------------------------------+
|
||||
| bitmode | Bits per pixel [4|8|16|32] |
|
||||
+--------------+----------------------------------------------+
|
||||
@ -222,7 +229,10 @@ ZMQ: Json Header Format
|
||||
| addJsonHeader| Optional custom parameters that is required |
|
||||
| | for processing code. |
|
||||
+--------------+----------------------------------------------+
|
||||
|
||||
| rx_roi | ROI in the receiver per port (xmin, xmax, |
|
||||
| | ymin, ymax). For external guis to know |
|
||||
| | what is saved |
|
||||
+--------------+----------------------------------------------+
|
||||
|
||||
SLS Receiver Header Format
|
||||
--------------------------
|
||||
|
@ -3,33 +3,34 @@
|
||||
### edit with hostname or IP address of your detector
|
||||
############################################
|
||||
#hostname bchip181+
|
||||
hostname bchip135
|
||||
hostname bchip076
|
||||
|
||||
#############################################
|
||||
### edit with hostname or 1Gbs IP address of your server
|
||||
############################################
|
||||
rx_hostname mpc2011
|
||||
rx_hostname mpc2011:7777
|
||||
|
||||
#############################################
|
||||
### edit with 10 Gbs IP of your server
|
||||
############################################
|
||||
udp_dstip 10.1.1.102
|
||||
udp_dstip 10.1.2.102
|
||||
#############################################
|
||||
### edit with any number in the subnet of your server (first 3 numbers as above)
|
||||
############################################
|
||||
udp_srcip 10.1.1.19
|
||||
udp_dstport 32411
|
||||
udp_srcip 10.1.2.19
|
||||
udp_dstport 32777
|
||||
|
||||
|
||||
#############################################
|
||||
### edit with 10 Gbs IP of your server
|
||||
############################################
|
||||
rx_zmqip 10.1.1.102
|
||||
rx_zmqport 50003
|
||||
rx_zmqip 10.1.2.102
|
||||
rx_zmqport 9003
|
||||
#############################################
|
||||
### edit with 1 Gbs IP of PC where you will run the GUI
|
||||
############################################
|
||||
zmqip 129.129.202.57
|
||||
zmqport 50001
|
||||
zmqport 9005
|
||||
|
||||
|
||||
|
||||
@ -38,7 +39,7 @@ rx_zmqstream 1
|
||||
|
||||
|
||||
|
||||
frames 100000
|
||||
frames 1
|
||||
period 0.0006
|
||||
exptime 0.00035
|
||||
|
||||
@ -49,7 +50,7 @@ fpath /mnt/moench_data/scratch1/
|
||||
|
||||
fwrite 0
|
||||
|
||||
rx_jsonpara frameMode frame
|
||||
rx_jsonpara frameMode newPedestal
|
||||
rx_jsonpara detectorMode counting
|
||||
rx_discardpolicy discardpartial
|
||||
|
||||
|
@ -230,8 +230,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def hardwareversion(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Gotthard2][Myhten3][Gotthard][Ctb] Hardware version of detector. \n
|
||||
[Eiger] Hardware version of front FPGA on detector.
|
||||
[Jungfrau][Gotthard2][Myhten3][Gotthard][Ctb][Moench] Hardware version of detector.
|
||||
"""
|
||||
return self.getHardwareVersion()
|
||||
|
||||
@ -306,7 +305,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][Moench][Gotthard][Ctb][Mythen3][Gotthard2] 16
|
||||
[Jungfrau][Gotthard][Ctb][Moench][Mythen3][Gotthard2] 16
|
||||
"""
|
||||
return self.getDynamicRange()
|
||||
|
||||
@ -364,9 +363,10 @@ class Detector(CppDetectorApi):
|
||||
-----
|
||||
|
||||
[Eiger] Use threshold command to load settings
|
||||
[Jungfrau][Moench] GAIN0, HIGHGAIN0 \n
|
||||
[Jungfrau] 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())
|
||||
@ -396,7 +396,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def framesl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames left in acquisition.\n
|
||||
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of frames left in acquisition.\n
|
||||
[Gotthard2] only in continuous auto mode.
|
||||
|
||||
:setter: Not Implemented
|
||||
@ -407,7 +407,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def framecounter(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames from start run control.
|
||||
[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Number of frames from start run control.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -436,11 +436,12 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def powerchip(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Mythen3][Gotthard2] Power the chip.
|
||||
[Jungfrau][Mythen3][Gotthard2][Moench] Power the chip.
|
||||
|
||||
Note
|
||||
----
|
||||
[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
|
||||
[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
|
||||
[Mythen3][Gotthard2] Default is 1. If module not connected or wrong module, powerchip will fail.
|
||||
"""
|
||||
return self.getPowerChip()
|
||||
@ -614,7 +615,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def periodl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Period left for current frame.
|
||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Period left for current frame.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -636,7 +637,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def delay(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Delay after trigger, accepts either a value in seconds, DurationWrapper or datetime.timedelta
|
||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Delay after trigger, accepts either a value in seconds, DurationWrapper or datetime.timedelta
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -681,7 +682,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def delayl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Delay left after trigger during acquisition, accepts either a value in seconds, datetime.timedelta or DurationWrapper
|
||||
[Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] Delay left after trigger during acquisition, accepts either a value in seconds, datetime.timedelta or DurationWrapper
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -740,7 +741,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def txdelay(self):
|
||||
"""
|
||||
[Eiger][Jungfrau][Moench][Mythen3] Set transmission delay for all modules in the detector using the step size provided.
|
||||
[Eiger][Jungfrau][Mythen3] Set transmission delay for all modules in the detector using the step size provided.
|
||||
|
||||
Note
|
||||
----
|
||||
@ -748,7 +749,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][Moench][Mythen3] txdelay_frame to (num_modules * n_delay)\n\n
|
||||
\t\t[Jungfrau][Mythen3] txdelay_frame to (num_modules * n_delay)\n\n
|
||||
Please refer txdelay_left, txdelay_right and txdelay_frame for details.
|
||||
"""
|
||||
return self.getTransmissionDelay()
|
||||
@ -761,11 +762,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def txdelay_frame(self):
|
||||
"""
|
||||
[Eiger][Jungfrau][Moench][Mythen3] Transmission delay of first udp packet being streamed out of the module.\n
|
||||
[Eiger][Jungfrau][Mythen3] Transmission delay of first udp packet being streamed out of the module.\n
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau][Moench] [0-31] Each value represents 1 ms. \n
|
||||
[Jungfrau] [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.
|
||||
"""
|
||||
@ -948,7 +949,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def numinterfaces(self):
|
||||
"""[Jungfrau][Moench][Gotthard2] Number of udp interfaces to stream data from detector. Default is 1.
|
||||
"""[Jungfrau][Gotthard2] Number of udp interfaces to stream data from detector. Default is 1.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -1294,11 +1295,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_dstip2(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Gotthard2] Ip address of the receiver (destination) udp interface 2.
|
||||
[Jungfrau][Gotthard2] Ip address of the receiver (destination) udp interface 2.
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Jungfrau] 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.
|
||||
@ -1347,13 +1348,13 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_dstmac2(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Gotthard2] Mac address of the receiver (destination) udp interface 2.
|
||||
[Jungfrau][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][Moench] bottom half \n
|
||||
[Jungfrau] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
Use router mac if router between detector and receiver.
|
||||
|
||||
@ -1398,11 +1399,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_srcmac2(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Gotthard2] Mac address of the receiver (source) udp interface 2.
|
||||
[Jungfrau][Gotthard2] Mac address of the receiver (source) udp interface 2.
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Jungfrau] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
To set MACs for individual modules, use setSourceUDPMAC2.
|
||||
|
||||
@ -1448,11 +1449,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def udp_srcip2(self):
|
||||
"""
|
||||
[Jungfrau][Moench][Gotthard2] Ip address of the detector (source) udp interface 2.
|
||||
[Jungfrau][Gotthard2] Ip address of the detector (source) udp interface 2.
|
||||
|
||||
Note
|
||||
-----
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Jungfrau] bottom half \n
|
||||
[Gotthard2] veto debugging \n
|
||||
Must be same subnet as destination udp ip2.\n
|
||||
To set IPs for individual modules, use setSourceUDPIP2.
|
||||
@ -1498,7 +1499,7 @@ class Detector(CppDetectorApi):
|
||||
----
|
||||
Default is 50002. \n
|
||||
[Eiger] right half \n
|
||||
[Jungfrau][Moench] bottom half \n
|
||||
[Jungfrau] 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.
|
||||
@ -1518,7 +1519,7 @@ class Detector(CppDetectorApi):
|
||||
-----
|
||||
[Gotthard] 0, 90, 110, 120, 150, 180, 200 \n
|
||||
[Eiger][Mythen3][Gotthard2] 0 - 200 \n
|
||||
[Jungfrau][Moench][Ctb] 0, 60 - 200
|
||||
[Jungfrau][Ctb][Moench] 0, 60 - 200
|
||||
"""
|
||||
return self.getHighVoltage()
|
||||
|
||||
@ -1641,8 +1642,8 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def master(self):
|
||||
"""
|
||||
[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.
|
||||
[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.
|
||||
"""
|
||||
return self.getMaster()
|
||||
|
||||
@ -1654,7 +1655,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def sync(self):
|
||||
"""
|
||||
[Jungfrau][Moench] Enables or disables synchronization between modules.
|
||||
[Jungfrau] Enables or disables synchronization between modules.
|
||||
"""
|
||||
return self.getSynchronization()
|
||||
|
||||
@ -1808,7 +1809,7 @@ class Detector(CppDetectorApi):
|
||||
|
||||
@property
|
||||
def adcreg(self):
|
||||
"""[Jungfrau][Moench][Ctb][Gotthard] Writes to an adc register
|
||||
"""[Jungfrau][Ctb][Moench][Gotthard] Writes to an adc register
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -1821,7 +1822,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcinvert(self):
|
||||
"""[Ctb][Jungfrau][Moench] ADC Inversion Mask.
|
||||
"""[Ctb][Moench][Jungfrau] ADC Inversion Mask.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -1837,7 +1838,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def triggersl(self):
|
||||
"""
|
||||
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of triggers left in acquisition.\n
|
||||
[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of triggers left in acquisition.\n
|
||||
|
||||
Note
|
||||
----
|
||||
@ -1850,7 +1851,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def frametime(self):
|
||||
"""[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Timestamp at a frame start.
|
||||
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Timestamp at a frame start.
|
||||
|
||||
Note
|
||||
----
|
||||
@ -1891,22 +1892,14 @@ class Detector(CppDetectorApi):
|
||||
def versions(self):
|
||||
version_list = {'type': self.type,
|
||||
'package': self.packageversion,
|
||||
'client': self.clientversion}
|
||||
|
||||
if self.type == detectorType.EIGER:
|
||||
version_list ['firmware (Beb)'] = self.firmwareversion
|
||||
version_list ['firmware(Febl)'] = self.getFrontEndFirmwareVersion(slsDetectorDefs.fpgaPosition.FRONT_LEFT)
|
||||
version_list ['firmware (Febr)'] = self.getFrontEndFirmwareVersion(slsDetectorDefs.fpgaPosition.FRONT_RIGHT)
|
||||
else:
|
||||
version_list ['firmware'] = self.firmwareversion
|
||||
|
||||
version_list ['detectorserver'] = self.detectorserverversion
|
||||
version_list ['kernel'] = self.kernelversion
|
||||
version_list ['hardware'] = self.hardwareversion
|
||||
|
||||
'client': self.clientversion,
|
||||
'firmware': self.firmwareversion,
|
||||
'detectorserver': self.detectorserverversion,
|
||||
'kernel': self.kernelversion}
|
||||
if self.type != detectorType.EIGER:
|
||||
version_list ['hardware'] = self.hardwareversion
|
||||
if self.use_receiver:
|
||||
version_list ['receiver'] = self.rx_version
|
||||
|
||||
return version_list
|
||||
|
||||
@property
|
||||
@ -1974,10 +1967,10 @@ class Detector(CppDetectorApi):
|
||||
|
||||
Note
|
||||
-----
|
||||
[Jungfrau][Moench] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED
|
||||
[Jungfrau] FULL_SPEED, HALF_SPEED (Default), QUARTER_SPEED
|
||||
[Eiger] FULL_SPEED (Default), HALF_SPEED, QUARTER_SPEED
|
||||
[Gottthard2] G2_108MHZ (Default), G2_144MHZ
|
||||
[Jungfrau][Moench] FULL_SPEED option only available from v2.0 boards and is recommended to set number of interfaces to 2. \n
|
||||
[Jungfrau] FULL_SPEED option only available from v2.0 boards and is recommended to set number of interfaces to 2. \n
|
||||
Also overwrites adcphase to recommended default.
|
||||
"""
|
||||
return element_if_equal(self.getReadoutSpeed())
|
||||
@ -2063,7 +2056,7 @@ class Detector(CppDetectorApi):
|
||||
Note
|
||||
-----
|
||||
Default: AUTO_TIMING \n
|
||||
[Jungfrau][Moench][Gotthard][Ctb][Gotthard2] AUTO_TIMING, TRIGGER_EXPOSURE \n
|
||||
[Jungfrau][Gotthard][Ctb][Moench][Gotthard2] AUTO_TIMING, TRIGGER_EXPOSURE \n
|
||||
[Mythen3] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, TRIGGER_GATED \n
|
||||
[Eiger] AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER
|
||||
"""
|
||||
@ -2222,13 +2215,13 @@ class Detector(CppDetectorApi):
|
||||
def readnrows(self):
|
||||
"""
|
||||
[Eiger] Number of rows to read out per half module starting from the centre.
|
||||
[Jungfrau][Moench] Number of rows to read per module starting from the centre.
|
||||
[Jungfrau] 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][Moench] Options: 8 - 512 (multiples of 8)
|
||||
[Jungfrau] Options: 8 - 512 (multiples of 8)
|
||||
"""
|
||||
return self.getReadNRows()
|
||||
|
||||
@ -2319,7 +2312,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def tengiga(self):
|
||||
"""[Eiger][Ctb][Mythen3] 10GbE Enable."""
|
||||
"""[Eiger][Ctb][Moench][Mythen3] 10GbE Enable."""
|
||||
return self.getTenGiga()
|
||||
|
||||
@tengiga.setter
|
||||
@ -2339,7 +2332,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def flowcontrol10g(self):
|
||||
"""[Eiger][Jungfrau][Moench] Enable or disable 10GbE Flow Control."""
|
||||
"""[Eiger][Jungfrau] Enable or disable 10GbE Flow Control."""
|
||||
return self.getTenGigaFlowControl()
|
||||
|
||||
@flowcontrol10g.setter
|
||||
@ -2359,7 +2352,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def gappixels(self):
|
||||
"""[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. """
|
||||
"""[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. """
|
||||
return self.getRxAddGapPixels()
|
||||
|
||||
@gappixels.setter
|
||||
@ -2415,7 +2408,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def chipversion(self):
|
||||
"""
|
||||
[Jungfrau][Moench] Chip version of module. Can be 1.0 or 1.1.
|
||||
[Jungfrau] Chip version of module. Can be 1.0 or 1.1.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -2428,7 +2421,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def autocompdisable(self):
|
||||
"""[Jungfrau][Moench] Enable or disable auto comparator disable mode.
|
||||
"""[Jungfrau] Enable or disable auto comparator disable mode.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2444,7 +2437,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def compdisabletime(self):
|
||||
"""[Jungfrau][Moench] Time before end of exposure when comparator is disabled.
|
||||
"""[Jungfrau] Time before end of exposure when comparator is disabled.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2490,7 +2483,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def runtime(self):
|
||||
"""[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Time from detector start up.
|
||||
"""[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Time from detector start up.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2583,7 +2576,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def temp_threshold(self):
|
||||
"""
|
||||
[Jungfrau][Moench] Threshold temperature in degrees.
|
||||
[Jungfrau] Threshold temperature in degrees.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2600,7 +2593,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def temp_event(self):
|
||||
"""
|
||||
[Jungfrau][Moench] 1, if a temperature event occured. \n
|
||||
[Jungfrau] 1, if a temperature event occured. \n
|
||||
|
||||
Note
|
||||
----
|
||||
@ -2628,7 +2621,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def temp_control(self):
|
||||
"""
|
||||
[Jungfrau][Moench] Temperature control enable.
|
||||
[Jungfrau] Temperature control enable.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2645,7 +2638,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def selinterface(self):
|
||||
"""[Jungfrau][Moench] The udp interface to stream data from detector.
|
||||
"""[Jungfrau] The udp interface to stream data from detector.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -2665,11 +2658,11 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def gainmode(self):
|
||||
"""
|
||||
[Jungfrau][Moench] Detector gain mode. Enum: gainMode
|
||||
[Jungfrau] Detector gain mode. Enum: gainMode
|
||||
|
||||
Note
|
||||
-----
|
||||
[Jungfrau][Moench] DYNAMIC, FORCE_SWITCH_G1, FORCE_SWITCH_G2, FIX_G1, FIX_G2, FIX_G0 \n
|
||||
[Jungfrau] 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())
|
||||
@ -2724,14 +2717,14 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def filterresistor(self):
|
||||
"""
|
||||
[Gotthard2][Jungfrau][Moench] Set filter resistor. Increasing values for increasing "
|
||||
[Gotthard2][Jungfrau] Set filter resistor. Increasing values for increasing "
|
||||
"resistance.
|
||||
|
||||
Note
|
||||
----
|
||||
Advanced user command.
|
||||
[Gotthard2] Default is 0. Options: 0-3.
|
||||
[Jungfrau][Moench] Default is 1. Options: 0-1.
|
||||
[Jungfrau] Default is 1. Options: 0-1.
|
||||
"""
|
||||
return self.getFilterResistor()
|
||||
|
||||
@ -2743,11 +2736,11 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def filtercells(self):
|
||||
"""
|
||||
[Jungfrau][Moench] Set filter capacitor.
|
||||
[Jungfrau] Set filter capacitor.
|
||||
|
||||
Note
|
||||
----
|
||||
[Jungfrau][Moench] Options: 0-12. Default: 0. Advanced user command. Only for chipv1.1.
|
||||
[Jungfrau] Options: 0-12. Default: 0. Advanced user command. Only for chipv1.1.
|
||||
"""
|
||||
return self.getNumberOfFilterCells()
|
||||
|
||||
@ -3083,7 +3076,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcenable(self):
|
||||
"""[Ctb] ADC Enable Mask for 1Gb. Enable for each 32 ADC channel."""
|
||||
"""[Ctb][Moench] ADC Enable Mask for 1Gb. Enable for each 32 ADC channel."""
|
||||
return self.getADCEnableMask()
|
||||
|
||||
@adcenable.setter
|
||||
@ -3093,7 +3086,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcenable10g(self):
|
||||
"""[Ctb] ADC Enable Mask for 10Gb mode for each 32 ADC channel.
|
||||
"""[Ctb][Moench] ADC Enable Mask for 10Gb mode for each 32 ADC channel.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3110,6 +3103,7 @@ 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()
|
||||
|
||||
@ -3120,7 +3114,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def runclk(self):
|
||||
"""[Ctb] Run clock in MHz."""
|
||||
"""[Ctb][Moench] Run clock in MHz."""
|
||||
return self.getRUNClock()
|
||||
|
||||
@runclk.setter
|
||||
@ -3153,7 +3147,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def asamples(self):
|
||||
"""[Ctb] Number of analog samples expected. """
|
||||
"""[Ctb][Moench] Number of analog samples expected. """
|
||||
return element_if_equal(self.getNumberOfAnalogSamples())
|
||||
|
||||
@asamples.setter
|
||||
@ -3173,7 +3167,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def dbitphase(self):
|
||||
"""[Ctb][Jungfrau][Moench] Phase shift of clock to latch digital bits. Absolute phase shift.
|
||||
"""[Ctb][Jungfrau] Phase shift of clock to latch digital bits. Absolute phase shift.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3225,7 +3219,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def maxdbitphaseshift(self):
|
||||
"""[CTB][Jungfrau][Moench] Absolute maximum Phase shift of of the clock to latch digital bits.
|
||||
"""[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3272,7 +3266,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def maxadcphaseshift(self):
|
||||
"""[Jungfrau][Moench][CTB] Absolute maximum Phase shift of ADC clock.
|
||||
"""[Jungfrau][CTB][Moench] Absolute maximum Phase shift of ADC clock.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3284,12 +3278,12 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcphase(self):
|
||||
"""[Gotthard][Jungfrau][Moench][CTB] Sets phase shift of ADC clock.
|
||||
"""[Gotthard][Jungfrau][CTB][Moench] Sets phase shift of ADC clock.
|
||||
|
||||
Note
|
||||
-----
|
||||
[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
|
||||
[Jungfrau] Absolute phase shift. Changing Speed also resets adcphase to recommended defaults.\n
|
||||
[Ctb][Moench] Absolute phase shift. Changing adcclk also resets adcphase and sets it to previous values.\n
|
||||
[Gotthard] Relative phase shift.
|
||||
|
||||
:getter: Not implemented for Gotthard
|
||||
@ -3303,7 +3297,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcpipeline(self):
|
||||
"""[Ctb] Sets pipeline for ADC clock. """
|
||||
"""[Ctb][Moench] Sets pipeline for ADC clock. """
|
||||
return self.getADCPipeline()
|
||||
|
||||
@adcpipeline.setter
|
||||
@ -3313,7 +3307,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def adcclk(self):
|
||||
"""[Ctb] Sets ADC clock frequency in MHz. """
|
||||
"""[Ctb][Moench] Sets ADC clock frequency in MHz. """
|
||||
return self.getADCClock()
|
||||
|
||||
@adcclk.setter
|
||||
@ -3324,7 +3318,7 @@ class Detector(CppDetectorApi):
|
||||
@element
|
||||
def syncclk(self):
|
||||
"""
|
||||
[Ctb] Sync clock in MHz.
|
||||
[Ctb][Moench] Sync clock in MHz.
|
||||
|
||||
Note
|
||||
-----
|
||||
@ -3335,7 +3329,7 @@ class Detector(CppDetectorApi):
|
||||
|
||||
@property
|
||||
def pattern(self):
|
||||
"""[Mythen3][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).
|
||||
"""[Mythen3][Moench][Ctb] Loads ASCII pattern file directly to server (instead of executing line by line).
|
||||
|
||||
Note
|
||||
----
|
||||
@ -3357,7 +3351,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patioctrl(self):
|
||||
"""[Ctb] 64 bit mask defining input (0) and output (1) signals.
|
||||
"""[Ctb][Moench] 64 bit mask defining input (0) and output (1) signals.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3374,7 +3368,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patlimits(self):
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of complete pattern.
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of complete pattern.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3394,7 +3388,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patsetbit(self):
|
||||
"""[Ctb][Mythen3] Sets the mask applied to every pattern to the selected bits.
|
||||
"""[Ctb][Moench][Mythen3] Sets the mask applied to every pattern to the selected bits.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3411,7 +3405,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patmask(self):
|
||||
"""[Ctb][Mythen3] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.
|
||||
"""[Ctb][Moench][Mythen3] Selects the bits that will have a pattern mask applied to the selected patmask for every pattern.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3429,7 +3423,7 @@ class Detector(CppDetectorApi):
|
||||
# @element
|
||||
def patwait(self):
|
||||
"""
|
||||
[Ctb][Mythen3] Wait address of loop level provided.
|
||||
[Ctb][Moench][Mythen3] Wait address of loop level provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3446,7 +3440,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwait0(self):
|
||||
"""[Ctb][Mythen3] Wait 0 address.
|
||||
"""[Ctb][Moench][Mythen3] Wait 0 address.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3466,7 +3460,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwait1(self):
|
||||
"""[Ctb][Mythen3] Wait 1 address.
|
||||
"""[Ctb][Moench][Mythen3] Wait 1 address.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3486,7 +3480,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwait2(self):
|
||||
"""[Ctb][Mythen3] Wait 2 address.
|
||||
"""[Ctb][Moench][Mythen3] Wait 2 address.
|
||||
|
||||
Example
|
||||
--------
|
||||
@ -3506,7 +3500,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def patwaittime(self):
|
||||
"""
|
||||
[Ctb][Mythen3] Wait time in clock cycles of loop level provided.
|
||||
[Ctb][Moench][Mythen3] Wait time in clock cycles of loop level provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3523,7 +3517,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwaittime0(self):
|
||||
"""[Ctb][Mythen3] Wait 0 time in clock cycles."""
|
||||
"""[Ctb][Moench][Mythen3] Wait 0 time in clock cycles."""
|
||||
return self.getPatternWaitTime(0)
|
||||
|
||||
@patwaittime0.setter
|
||||
@ -3534,7 +3528,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwaittime1(self):
|
||||
"""[Ctb][Mythen3] Wait 1 time in clock cycles."""
|
||||
"""[Ctb][Moench][Mythen3] Wait 1 time in clock cycles."""
|
||||
return self.getPatternWaitTime(1)
|
||||
|
||||
@patwaittime1.setter
|
||||
@ -3545,7 +3539,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patwaittime2(self):
|
||||
"""[Ctb][Mythen3] Wait 2 time in clock cycles."""
|
||||
"""[Ctb][Moench][Mythen3] Wait 2 time in clock cycles."""
|
||||
return self.getPatternWaitTime(2)
|
||||
|
||||
@patwaittime2.setter
|
||||
@ -3557,7 +3551,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def patloop(self):
|
||||
"""
|
||||
[Ctb][Mythen3] Limits (start and stop address) of the loop provided.
|
||||
[Ctb][Moench][Mythen3] Limits (start and stop address) of the loop provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3574,7 +3568,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patloop0(self):
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of loop 0.
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of loop 0.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3594,7 +3588,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patloop1(self):
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of loop 1.
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of loop 1.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3615,7 +3609,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patloop2(self):
|
||||
"""[Ctb][Mythen3] Limits (start and stop address) of loop 2.
|
||||
"""[Ctb][Moench][Mythen3] Limits (start and stop address) of loop 2.
|
||||
|
||||
Example
|
||||
---------
|
||||
@ -3637,7 +3631,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
def patnloop(self):
|
||||
"""
|
||||
[Ctb][Mythen3] Number of cycles of the loop provided.
|
||||
[Ctb][Moench][Mythen3] Number of cycles of the loop provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
@ -3654,7 +3648,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patnloop0(self):
|
||||
"""[Ctb][Mythen3] Number of cycles of loop 0."""
|
||||
"""[Ctb][Moench][Mythen3] Number of cycles of loop 0."""
|
||||
return self.getPatternLoopCycles(0)
|
||||
|
||||
@patnloop0.setter
|
||||
@ -3665,7 +3659,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patnloop1(self):
|
||||
"""[Ctb][Mythen3] Number of cycles of loop 1."""
|
||||
"""[Ctb][Moench][Mythen3] Number of cycles of loop 1."""
|
||||
return self.getPatternLoopCycles(1)
|
||||
|
||||
@patnloop1.setter
|
||||
@ -3676,7 +3670,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def patnloop2(self):
|
||||
"""[Ctb][Mythen3] Number of cycles of loop 2."""
|
||||
"""[Ctb][Moench][Mythen3] Number of cycles of loop 2."""
|
||||
return self.getPatternLoopCycles(2)
|
||||
|
||||
@patnloop2.setter
|
||||
@ -3747,7 +3741,7 @@ class Detector(CppDetectorApi):
|
||||
@property
|
||||
@element
|
||||
def v_limit(self):
|
||||
"""[Ctb] Soft limit for power supplies (ctb only) and DACS in mV."""
|
||||
"""[Ctb][Moench] Soft limit for power supplies (ctb only) and DACS in mV."""
|
||||
return self.getDAC(dacIndex.V_LIMIT, True)
|
||||
|
||||
@v_limit.setter
|
||||
|
@ -61,11 +61,6 @@ void init_det(py::module &m) {
|
||||
(Result<int64_t>(Detector::*)(sls::Positions) const) &
|
||||
Detector::getFirmwareVersion,
|
||||
py::arg() = Positions{});
|
||||
CppDetectorApi.def("getFrontEndFirmwareVersion",
|
||||
(Result<int64_t>(Detector::*)(const defs::fpgaPosition,
|
||||
sls::Positions) const) &
|
||||
Detector::getFrontEndFirmwareVersion,
|
||||
py::arg(), py::arg() = Positions{});
|
||||
CppDetectorApi.def(
|
||||
"getDetectorServerVersion",
|
||||
(Result<std::string>(Detector::*)(sls::Positions) const) &
|
||||
|
@ -286,11 +286,6 @@ void init_enums(py::module &m) {
|
||||
.value("BOTTOM", slsDetectorDefs::portPosition::BOTTOM)
|
||||
.export_values();
|
||||
|
||||
py::enum_<slsDetectorDefs::fpgaPosition>(Defs, "fpgaPosition")
|
||||
.value("FRONT_LEFT", slsDetectorDefs::fpgaPosition::FRONT_LEFT)
|
||||
.value("FRONT_RIGHT", slsDetectorDefs::fpgaPosition::FRONT_RIGHT)
|
||||
.export_values();
|
||||
|
||||
py::enum_<slsDetectorDefs::streamingInterface>(Defs, "streamingInterface",
|
||||
py::arithmetic())
|
||||
.value("NONE", slsDetectorDefs::streamingInterface::NONE)
|
||||
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServerv7.0.0
|
1
serverBin/ctbDetectorServerv7.0.3
Symbolic link
1
serverBin/ctbDetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServerv7.0.3
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServerv7.0.0
|
1
serverBin/eigerDetectorServerv7.0.3
Symbolic link
1
serverBin/eigerDetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServerv7.0.3
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServerv7.0.0
|
1
serverBin/gotthard2DetectorServerv7.0.3
Symbolic link
1
serverBin/gotthard2DetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServerv7.0.3
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServerv7.0.0
|
1
serverBin/gotthardDetectorServerv7.0.3
Symbolic link
1
serverBin/gotthardDetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServerv7.0.3
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv7.0.0
|
1
serverBin/jungfrauDetectorServerv7.0.3
Symbolic link
1
serverBin/jungfrauDetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv7.0.3
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServerv7.0.0
|
1
serverBin/moenchDetectorServerv7.0.3
Symbolic link
1
serverBin/moenchDetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServerv7.0.3
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServer_developer
|
@ -1 +0,0 @@
|
||||
../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0
|
1
serverBin/mythen3DetectorServerv7.0.3
Symbolic link
1
serverBin/mythen3DetectorServerv7.0.3
Symbolic link
@ -0,0 +1 @@
|
||||
../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.3
|
@ -866,7 +866,7 @@ template <class dataType> class analogDetector {
|
||||
for (ix = xmin; ix < xmax; ++ix) {
|
||||
if (det->isGood(ix, iy)) {
|
||||
// addToPedestal(data,ix,iy,1);
|
||||
addToPedestal(data, ix, iy, 0);
|
||||
addToPedestal(data, ix, iy, cm);
|
||||
/* if (ix==50 && iy==50) */
|
||||
/* cout<< "*ped* " << id << " " << ix << " " << iy << " "
|
||||
* << det->getChannel(data,ix,iy) << " " <<
|
||||
@ -1097,8 +1097,6 @@ template <class dataType> class analogDetector {
|
||||
return thr;
|
||||
};
|
||||
|
||||
virtual int setClusterSize(int n = -1) { return 0; };
|
||||
|
||||
/**
|
||||
gets threshold value for conversion into number of photons
|
||||
\returns threshold value
|
||||
|
@ -100,10 +100,7 @@ class commonModeSubtraction {
|
||||
if (iroi >= 0 && iroi < nROI) {
|
||||
if (nCm[iroi] > 0)
|
||||
return mean[iroi] / nCm[iroi];
|
||||
else
|
||||
std::cout << ix << " " << iy << " no data in cm " << iroi << std::endl;
|
||||
} else
|
||||
std::cout << ix << " " << iy << " bad roi " << iroi << std::endl;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
@ -120,8 +117,6 @@ class commonModeSubtraction {
|
||||
return sqrt(mean2[iroi] / nCm[iroi] -
|
||||
(mean[iroi] / nCm[iroi]) *
|
||||
(mean[iroi] / nCm[iroi]));
|
||||
else
|
||||
std::cout << ix << " " << iy << " no data in cm " << iroi << std::endl;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
@ -2,11 +2,7 @@
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#ifndef JUNGFRAULGADSTRIXELDATA_H
|
||||
#define JUNGFRAULGADSTRIXELDATA_H
|
||||
#ifdef CINT
|
||||
#include "sls/sls_detector_defs_CINT.h"
|
||||
#else
|
||||
#include "sls/sls_detector_defs.h"
|
||||
#endif
|
||||
#include "slsDetectorData.h"
|
||||
|
||||
/*
|
||||
@ -36,7 +32,7 @@ typedef struct {
|
||||
uint64_t bunchNumber; /**< is the frame number */
|
||||
uint64_t pre; /**< something */
|
||||
|
||||
} jf_header; //Aldo's header
|
||||
} jf_header;
|
||||
|
||||
|
||||
using namespace std;
|
||||
@ -45,11 +41,7 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
private:
|
||||
int iframe;
|
||||
|
||||
#ifdef ALDO //VH
|
||||
using header = jf_header; //VH
|
||||
#else //VH
|
||||
using header = sls::defs::sls_receiver_header;
|
||||
#endif //VH
|
||||
public:
|
||||
/**
|
||||
Implements the slsReceiverData structure for the moench02 prototype read
|
||||
@ -61,9 +53,6 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
: slsDetectorData<uint16_t>(1024/5, 512*5,
|
||||
512 * 1024 * 2 + sizeof(header)) {
|
||||
cout << "aaa" << endl;
|
||||
#ifdef ALDO //VH
|
||||
cout<< "using reduced jf_header" << endl; //VH
|
||||
#endif //VH
|
||||
for (int ix = 0; ix < 1024/5; ix++) {
|
||||
for (int iy = 0; iy < 512*5; iy++) {
|
||||
dataMap[iy][ix] = sizeof(header);//+ ( 1024 * 5 + 300) * 2; //somewhere on the guardring of the LGAD
|
||||
@ -72,51 +61,44 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//chip1
|
||||
/*
|
||||
* TL;DR comments: y0 is too high by 1, group 1 and group 2 are by one row too short
|
||||
* group34 by 2 rows, x is by one column too short
|
||||
* NOTE: If x0, x1, y0 are changed, likely also ox (and oy and ooy) will be affected!
|
||||
*/
|
||||
|
||||
cout << "G0" << endl; //chip coordinates of chip1 group1: x=255+10 to x=255+246, y=10 to y=64
|
||||
//9 pixels guard ring, bonding shift by one pixel in y, one square pixel in x on the left
|
||||
|
||||
int x0=256+10, x1=256+246; //excludes first column (in chip coordinates)
|
||||
int y0=10, y1=256-10; //y1 does nothing
|
||||
int x0=256+10, x1=256+246;
|
||||
int y0=10, y1=256-10;
|
||||
int ix,iy;
|
||||
int ox=0, oy=0, ooy=0;
|
||||
ox=0;
|
||||
cout << "G0" << endl;
|
||||
|
||||
//chip1
|
||||
|
||||
for (int ipx=x0; ipx<x1; ipx++) {
|
||||
for (int ipy=y0; ipy<y0+54; ipy++) { //y0+54 excludes the last row (in chip coordinates), should be y0+55 to include all rows
|
||||
for (int ipy=y0; ipy<y0+54; ipy++) {
|
||||
ix=(ipx-x0+ox)/3;
|
||||
iy=(ipx-x0+ox)%3+(ipy-y0+oy)*3+ooy;
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
// cout << ipx << " " << ipy << " " << ix << " " << iy << endl;
|
||||
|
||||
// cout << ipx << " " << ipy << " " << ix << " " << iy << endl;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
cout << "G1" << endl; //chip coordinates of chip1 group2: x=255+12 to x=255+246, y=65 to y=128
|
||||
//3 square pixels in x on the left
|
||||
cout << "G1" << endl;
|
||||
oy=-54;
|
||||
ooy=54*3;
|
||||
ox=3;
|
||||
for (int ipx=x0; ipx<x1; ipx++) {
|
||||
for (int ipy=y0+54; ipy<y0+64+54; ipy++) { //I think y0+54 catches the last row of group1! Should be y0+55 if we want to include all rows? And y0+55+64
|
||||
for (int ipy=y0+54; ipy<y0+64+54; ipy++) {
|
||||
ix=(ipx-x0+ox)/5;
|
||||
iy=(ipx-x0+ox)%5+(ipy-y0+oy)*5+ooy;
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "G2" << endl; //chip coordinates of chip1 group34: x=255+11 to x=255+246, y=129 to y=247
|
||||
//2 square pixels on the left
|
||||
cout << "G2" << endl;
|
||||
oy=-54-64;
|
||||
ooy=54*3+64*5;
|
||||
ox=3;
|
||||
for (int ipx=x0; ipx<x1; ipx++) {
|
||||
for (int ipy=y0+64+54; ipy<y0+64*2+54*2; ipy++) { //Same as above, I think it should be y0+55+64 and y0+55*2+64*2 to include all rows
|
||||
for (int ipy=y0+64+54; ipy<y0+64*2+54*2; ipy++) {
|
||||
ix=(ipx-x0+ox)/4;
|
||||
iy=(ipx-x0+ox)%4+(ipy-y0+oy)*4+ooy;
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
@ -124,50 +106,43 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
}
|
||||
|
||||
//chip 6
|
||||
/*
|
||||
* TL;DR comments: y0 is too high by 3, group34 and group 1 are by one row too short
|
||||
* x is by two columns too short
|
||||
* NOTE: If x0, x1, y0 are changed, likely also ox (and oy and ooy) will be affected!
|
||||
*/
|
||||
|
||||
cout << "G0" << endl; //chip coordinates of chip6 group34: x=255+256+9 to x=255+256+244, y=255+8 to y=255+126
|
||||
//9 pixels guard ring, bonding shift by one pixel in -y, 2 square pixels in x on the right
|
||||
x0=256*2+10;
|
||||
y0=256+10;
|
||||
x1=256*2+246;
|
||||
ooy=256*5;
|
||||
oy=0;
|
||||
ox=1;
|
||||
cout << "G0" << endl;
|
||||
for (int ipx=x0; ipx<x1; ipx++) {
|
||||
for (int ipy=y0; ipy<y0+54+64; ipy++) { //shifted by 3 rows because of y0, if y0 is corrected it should be y0+55+64 to include all rows
|
||||
for (int ipy=y0; ipy<y0+54+64; ipy++) {
|
||||
ix=(ipx-x0+ox)/4;
|
||||
iy=(ipx-x0+ox)%4+(ipy-y0+oy)*4+ooy;
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
//if (ipx==x0)
|
||||
// cout << ipx << " " << ipy << " " << ix << " " << iy << endl;
|
||||
if (ipx==x0)
|
||||
cout << ipx << " " << ipy << " " << ix << " " << iy << endl;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
cout << "G1" << endl; //chip coordinates of chip6 group2: x=255+256+9 to x=255+256+243, y=255+127 to y=255+190
|
||||
//3 square pixels in x on the right
|
||||
cout << "G1" << endl;
|
||||
oy=-54-64;
|
||||
ooy+=(54+64)*4;
|
||||
ox=1;
|
||||
for (int ipx=x0; ipx<x1; ipx++) {
|
||||
for (int ipy=y0+54+64; ipy<y0+64*2+54; ipy++) { //shifted by 3 rows because of y0, if y0 is corrected it should be y0+55+64 and y0+55+64*2 to include all rows
|
||||
for (int ipy=y0+54+64; ipy<y0+64*2+54; ipy++) {
|
||||
ix=(ipx-x0+ox)/5;
|
||||
iy=(ipx-x0+ox)%5+(ipy-y0+oy)*5+ooy;
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "G2" << endl; //chip coordinates of chip6 group1: x=255+256+9 to x=255+256+245, y=255+191 to y=255+245
|
||||
//one square pixel in x on the right
|
||||
cout << "G2" << endl;
|
||||
oy=-54-64*2;
|
||||
ooy+=64*5;
|
||||
ox=1;
|
||||
for (int ipx=x0; ipx<x1; ipx++) {
|
||||
for (int ipy=y0+64*2+54; ipy<y0+64*2+54*2; ipy++) { //shifted by 3 rows because of y0, if y0 is corrected it should be y0+55+64*2 and y0+55*2+64*2
|
||||
for (int ipy=y0+64*2+54; ipy<y0+64*2+54*2; ipy++) {
|
||||
ix=(ipx-x0+ox)/3;
|
||||
iy=(ipx-x0+ox)%3+(ipy-y0+oy)*3+ooy;
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
@ -231,11 +206,7 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
|
||||
|
||||
int getFrameNumber(char *buff) {
|
||||
#ifdef ALDO //VH
|
||||
return ((header *)buff)->bunchNumber; //VH
|
||||
#else //VH
|
||||
return ((header *)buff)->detHeader.frameNumber;
|
||||
#endif //VH
|
||||
return ((header *)buff)->detHeader.frameNumber;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -248,11 +219,7 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
|
||||
*/
|
||||
int getPacketNumber(char *buff) {
|
||||
#ifdef ALDO //VH
|
||||
return -1; //VH //TODO: Keep in mind in case of bugs!
|
||||
#else //VH
|
||||
return ((header *)buff)->detHeader.packetNumber;
|
||||
#endif //VH
|
||||
return ((header *)buff)->detHeader.packetNumber;
|
||||
};
|
||||
|
||||
|
||||
@ -298,6 +265,8 @@ class jungfrauLGADStrixelsData : public slsDetectorData<uint16_t> {
|
||||
return NULL;
|
||||
};
|
||||
|
||||
/* /**
|
||||
|
||||
/* Loops over a memory slot until a complete frame is found (i.e. all */
|
||||
/* packets 0 to nPackets, same frame number). purely virtual func \param */
|
||||
/* data pointer to the memory to be analyzed \param ndata reference to the */
|
||||
|
@ -1,305 +0,0 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#ifndef JUNGFRAULGADSTRIXELSDATASINGLECHIP_H
|
||||
#define JUNGFRAULGADSTRIXELSDATASINGLECHIP_H
|
||||
#ifdef CINT
|
||||
#include "sls/sls_detector_defs_CINT.h"
|
||||
#else
|
||||
#include "sls/sls_detector_defs.h"
|
||||
#endif
|
||||
#include "slsDetectorData.h"
|
||||
|
||||
/*
|
||||
/afs/psi.ch/project/mythen/Anna/slsDetectorPackageDeveloperMpc2011/slsDetectorCalibration/jungfrauExecutables
|
||||
make -f Makefile.rawdataprocess jungfrauRawDataProcessStrx
|
||||
../dataStructures/jungfrauLGADStrixelsData.h
|
||||
*/
|
||||
//#define VERSION_V2
|
||||
/**
|
||||
@short structure for a Detector Packet or Image Header
|
||||
@li frameNumber is the frame number
|
||||
@li expLength is the subframe number (32 bit eiger) or real time exposure
|
||||
time in 100ns (others)
|
||||
@li packetNumber is the packet number
|
||||
@li bunchId is the bunch id from beamline
|
||||
@li timestamp is the time stamp with 10 MHz clock
|
||||
@li modId is the unique module id (unique even for left, right, top, bottom)
|
||||
@li xCoord is the x coordinate in the complete detector system
|
||||
@li yCoord is the y coordinate in the complete detector system
|
||||
@li zCoord is the z coordinate in the complete detector system
|
||||
@li debug is for debugging purposes
|
||||
@li roundRNumber is the round robin set number
|
||||
@li detType is the detector type see :: detectorType
|
||||
@li version is the version number of this structure format
|
||||
*/
|
||||
|
||||
namespace strixelSingleChip {
|
||||
constexpr int nc_chip = 256;
|
||||
constexpr int nr_chip = 256;
|
||||
constexpr int gr = 9;
|
||||
|
||||
//Group 1: 25um pitch, groups of 3, 1 column of square pixels
|
||||
constexpr int g1_ncols{ (nc_chip-(2*gr)-1)/3 }; //79
|
||||
constexpr int g1_nrows{ ( (nr_chip/4)-gr )*3 }; //165
|
||||
|
||||
//Group 2: 15um pitch, groups of 5, 3 columns of square pixels
|
||||
constexpr int g2_ncols{ (nc_chip-(2*gr)-3)/5 }; //47
|
||||
constexpr int g2_nrows{ (nr_chip/4)*5 }; //320
|
||||
|
||||
//Group 3: 18.75um pitch, groups of 4, 2 columns of square pixels (double the size of the other groups)
|
||||
constexpr int g3_ncols{ (nc_chip-(2*gr)-2)/4 }; //59
|
||||
constexpr int g3_nrows{ ( ((nr_chip/4)*2)-gr )*4 }; //476
|
||||
|
||||
constexpr int nc_strixel = 2*gr + 1 + g1_ncols; //group 1 is the "longest" group in x and has one extra square pixel
|
||||
constexpr int nr_strixel = 2*gr + g1_nrows + g2_nrows + g3_nrows;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
uint64_t bunchNumber; /**< is the frame number */
|
||||
uint64_t pre; /**< something */
|
||||
|
||||
} jf_header; //Aldo's header
|
||||
|
||||
|
||||
using namespace strixelSingleChip;
|
||||
class jungfrauLGADStrixelsDataSingleChip : public slsDetectorData<uint16_t> {
|
||||
|
||||
private:
|
||||
int iframe;
|
||||
int mchip;
|
||||
|
||||
void remapGroup( const int group ) {
|
||||
int ix, iy;
|
||||
int x0, y0, x1, y1, shifty;
|
||||
int multiplicator;
|
||||
|
||||
switch (group) {
|
||||
default:
|
||||
case 1:
|
||||
multiplicator = 3;
|
||||
break;
|
||||
case 2:
|
||||
multiplicator = 5;
|
||||
break;
|
||||
case 3:
|
||||
multiplicator = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( mchip == 1 ) {
|
||||
switch (group) {
|
||||
default:
|
||||
case 1:
|
||||
x0 = 10;
|
||||
x1 = 247;
|
||||
y0 = 10;
|
||||
y1 = 65;
|
||||
shifty = 0;
|
||||
break;
|
||||
case 2:
|
||||
x0 = 12;
|
||||
x1 = 247;
|
||||
y0 = 65;
|
||||
y1 = 129;
|
||||
shifty = ( (nr_chip/4)-gr )*3;
|
||||
break;
|
||||
case 3:
|
||||
x0 = 11;
|
||||
x1 = 247;
|
||||
y0 = 129;
|
||||
y1 = 248;
|
||||
shifty = ( (nr_chip/4)-gr )*3 + (nr_chip/4)*5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( mchip == 6 ) {
|
||||
switch (group) {
|
||||
default:
|
||||
case 1:
|
||||
x0 = 9;
|
||||
x1 = 246;
|
||||
y0 = 191;
|
||||
y1 = 246;
|
||||
shifty = ( (nr_chip/4)-gr+(nr_chip/4) )*4 + (nr_chip/4)*5;
|
||||
break;
|
||||
case 2:
|
||||
x0 = 9;
|
||||
x1 = 244;
|
||||
y0 = 127;
|
||||
y1 = 191;
|
||||
shifty = ( (nr_chip/4)-gr+(nr_chip/4) )*4;
|
||||
break;
|
||||
case 3:
|
||||
x0 = 9;
|
||||
x1 = 245;
|
||||
y0 = 8;
|
||||
y1 = 127;
|
||||
shifty = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//remapping loop
|
||||
for ( int ipx=x0; ipx!=x1; ++ipx ) {
|
||||
for ( int ipy=y0; ipy!=y1; ++ipy) {
|
||||
ix = (ipx-x0)/multiplicator;
|
||||
for ( int m=0; m!=multiplicator; ++m ) {
|
||||
if ( (ipx-x0)%multiplicator==m ) iy=(ipy-y0)*multiplicator + m + shifty;
|
||||
}
|
||||
dataMap[iy][ix] = sizeof(header) + (nc_chip * ipy + ipx) * 2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
#ifdef ALDO //VH
|
||||
using header = jf_header; //VH
|
||||
#else //VH
|
||||
using header = sls::defs::sls_receiver_header;
|
||||
#endif //VH
|
||||
|
||||
jungfrauLGADStrixelsDataSingleChip( const int chip )
|
||||
: slsDetectorData<uint16_t>( /*nc_strixel*/nc_chip/3, /*nr_strixel*/ nr_chip*5,
|
||||
nc_chip * nr_chip * 2 + sizeof(header) ) {
|
||||
std::cout << "Jungfrau strixels single chip" << std::endl;
|
||||
#ifdef ALDO //VH
|
||||
std::cout<< "using reduced jf_header" << std::endl; //VH
|
||||
#endif //VH
|
||||
|
||||
mchip = chip;
|
||||
//Fill all strixels with dummy values
|
||||
for (int ix = 0; ix != nc_strixel; ++ix) {
|
||||
for (int iy = 0; iy != nr_strixel; ++iy) {
|
||||
dataMap[iy][ix] = sizeof(header);
|
||||
#ifdef HIGHZ
|
||||
dataMask[iy][ix] = 0x3fff;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
remapGroup(1);
|
||||
remapGroup(2);
|
||||
remapGroup(3);
|
||||
|
||||
iframe = 0;
|
||||
std::cout << "data struct created" << std::endl;
|
||||
};
|
||||
|
||||
/**
|
||||
Returns the value of the selected channel for the given dataset as
|
||||
double. \param data pointer to the dataset (including headers etc) \param
|
||||
ix pixel number in the x direction \param iy pixel number in the y
|
||||
direction \returns data for the selected channel, with inversion if
|
||||
required as double
|
||||
|
||||
*/
|
||||
virtual double getValue(char *data, int ix, int iy = 0) {
|
||||
|
||||
uint16_t val = getChannel(data, ix, iy) & 0x3fff;
|
||||
return val;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Returns the frame number for the given dataset. Purely virtual func.
|
||||
\param buff pointer to the dataset
|
||||
\returns frame number
|
||||
|
||||
*/
|
||||
|
||||
|
||||
int getFrameNumber(char *buff) {
|
||||
#ifdef ALDO //VH
|
||||
return ((header *)buff)->bunchNumber; //VH
|
||||
#else //VH
|
||||
return ((header *)buff)->detHeader.frameNumber;
|
||||
#endif //VH
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Returns the packet number for the given dataset. purely virtual func
|
||||
\param buff pointer to the dataset
|
||||
\returns packet number number
|
||||
|
||||
|
||||
|
||||
*/
|
||||
int getPacketNumber(char *buff) {
|
||||
#ifdef ALDO //VH
|
||||
//uint32_t fakePacketNumber = 1000;
|
||||
//return fakePacketNumber; //VH //TODO: Keep in mind in case of bugs! //This is definitely bad!
|
||||
return 1000;
|
||||
#else //VH
|
||||
return ((header *)buff)->detHeader.packetNumber;
|
||||
#endif //VH
|
||||
};
|
||||
|
||||
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin) {
|
||||
int ff = -1, np = -1;
|
||||
return readNextFrame(filebin, ff, np);
|
||||
};
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin, int &ff) {
|
||||
int np = -1;
|
||||
return readNextFrame(filebin, ff, np);
|
||||
};
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin, int &ff, int &np) {
|
||||
char *data = new char[dataSize];
|
||||
char *d = readNextFrame(filebin, ff, np, data);
|
||||
if (d == NULL) {
|
||||
delete[] data;
|
||||
data = NULL;
|
||||
}
|
||||
return data;
|
||||
};
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin, int &ff, int &np,char *data) {
|
||||
char *retval = 0;
|
||||
int nd;
|
||||
int fnum = -1;
|
||||
np = 0;
|
||||
int pn;
|
||||
|
||||
// cout << dataSize << endl;
|
||||
if (ff >= 0)
|
||||
fnum = ff;
|
||||
|
||||
if (filebin.is_open()) {
|
||||
if (filebin.read(data, dataSize)) {
|
||||
ff = getFrameNumber(data);
|
||||
np = getPacketNumber(data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
};
|
||||
|
||||
/* Loops over a memory slot until a complete frame is found (i.e. all */
|
||||
/* packets 0 to nPackets, same frame number). purely virtual func \param */
|
||||
/* data pointer to the memory to be analyzed \param ndata reference to the */
|
||||
/* amount of data found for the frame, in case the frame is incomplete at */
|
||||
/* the end of the memory slot \param dsize size of the memory slot to be */
|
||||
/* analyzed \returns pointer to the beginning of the last good frame (might */
|
||||
/* be incomplete if ndata smaller than dataSize), or NULL if no frame is */
|
||||
/* found */
|
||||
|
||||
/* *\/ */
|
||||
virtual char *findNextFrame(char *data, int &ndata, int dsize) {
|
||||
if (dsize < dataSize)
|
||||
ndata = dsize;
|
||||
else
|
||||
ndata = dataSize;
|
||||
return data;
|
||||
};
|
||||
|
||||
// int getPacketNumber(int x, int y) {return dataMap[y][x]/packetSize;};
|
||||
};
|
||||
|
||||
#endif
|
@ -3,7 +3,6 @@
|
||||
#ifndef JUNGFRAUMODULEDATA_H
|
||||
#define JUNGFRAUMODULEDATA_H
|
||||
#include "slsDetectorData.h"
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
//#define VERSION_V2
|
||||
/**
|
||||
@ -42,15 +41,8 @@ class jungfrauModuleData : public slsDetectorData<uint16_t> {
|
||||
1286 large etc.) \param c crosstalk parameter for the output buffer
|
||||
|
||||
*/
|
||||
|
||||
#ifdef ALDO //VH
|
||||
using header = jf_header; //VH
|
||||
#else //VH
|
||||
using header = sls::defs::sls_receiver_header;
|
||||
#endif //VH
|
||||
|
||||
#ifndef ZMQ
|
||||
#define off sizeof(header)
|
||||
#define off sizeof(jf_header)
|
||||
#endif
|
||||
#ifdef ZMQ
|
||||
#define off 0
|
||||
@ -110,13 +102,9 @@ class jungfrauModuleData : public slsDetectorData<uint16_t> {
|
||||
/* unsigned char frameNumber[3]; */
|
||||
/* unsigned char bunchid[8]; */
|
||||
/* }; */
|
||||
|
||||
|
||||
int getFrameNumber(char *buff) {
|
||||
#ifdef ALDO
|
||||
return ((header *)buff)->bunchNumber;
|
||||
#else
|
||||
return ((header *)buff)->detHeader.frameNumber;
|
||||
#endif
|
||||
return ((jf_header *)buff)->bunchNumber;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,271 +0,0 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#ifndef JUNGFRAUSTRIXELSHALFMODULEOLD_H
|
||||
#define JUNGFRAUSTRIXELSHALFMODULEOLD_H
|
||||
#ifdef CINT
|
||||
#include "sls/sls_detector_defs_CINT.h"
|
||||
#else
|
||||
#include "sls/sls_detector_defs.h"
|
||||
#endif
|
||||
#include "slsDetectorData.h"
|
||||
|
||||
/*
|
||||
/afs/psi.ch/project/mythen/Anna/slsDetectorPackageDeveloperMpc2011/slsDetectorCalibration/jungfrauExecutables
|
||||
make -f Makefile.rawdataprocess jungfrauRawDataProcessStrx
|
||||
../dataStructures/jungfrauLGADStrixelsData.h
|
||||
*/
|
||||
//#define VERSION_V2
|
||||
/**
|
||||
@short structure for a Detector Packet or Image Header
|
||||
@li frameNumber is the frame number
|
||||
@li expLength is the subframe number (32 bit eiger) or real time exposure
|
||||
time in 100ns (others)
|
||||
@li packetNumber is the packet number
|
||||
@li bunchId is the bunch id from beamline
|
||||
@li timestamp is the time stamp with 10 MHz clock
|
||||
@li modId is the unique module id (unique even for left, right, top, bottom)
|
||||
@li xCoord is the x coordinate in the complete detector system
|
||||
@li yCoord is the y coordinate in the complete detector system
|
||||
@li zCoord is the z coordinate in the complete detector system
|
||||
@li debug is for debugging purposes
|
||||
@li roundRNumber is the round robin set number
|
||||
@li detType is the detector type see :: detectorType
|
||||
@li version is the version number of this structure format
|
||||
*/
|
||||
|
||||
namespace strixelsOldDesign {
|
||||
constexpr int NC_STRIXEL = (1024*3);
|
||||
constexpr int NR_TOTAL = (512/3);
|
||||
constexpr int NR_STRIXEL = ( (256-4)/3 );
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
uint64_t bunchNumber; /**< is the frame number */
|
||||
uint64_t pre; /**< something */
|
||||
|
||||
} jf_header; //Aldo's header
|
||||
|
||||
|
||||
using namespace strixelsOldDesign;
|
||||
class jungfrauStrixelsHalfModuleOldDesign : public slsDetectorData<uint16_t> {
|
||||
|
||||
private:
|
||||
int iframe;
|
||||
|
||||
#ifdef ALDO //VH
|
||||
using header = jf_header; //VH
|
||||
#else //VH
|
||||
using header = sls::defs::sls_receiver_header;
|
||||
#endif //VH
|
||||
public:
|
||||
/**
|
||||
Implements the slsReceiverData structure for the moench02 prototype read
|
||||
out by a module i.e. using the slsReceiver (160x160 pixels, 40 packets
|
||||
1286 large etc.) \param c crosstalk parameter for the output buffer
|
||||
|
||||
*/
|
||||
jungfrauStrixelsHalfModuleOldDesign()
|
||||
: slsDetectorData<uint16_t>( 1024*3, 512/3,
|
||||
512 * 1024 * 2 + sizeof(header) ) {
|
||||
std::cout << "Jungfrau strixels old design" << std::endl;
|
||||
#ifdef ALDO //VH
|
||||
std::cout<< "using reduced jf_header" << std::endl; //VH
|
||||
#endif //VH
|
||||
for (int ix = 0; ix != 1024*3; ++ix) {
|
||||
for (int iy = 0; iy != 512/3; ++iy) {
|
||||
dataMap[iy][ix] = sizeof(header);//+ ( 1024 * 5 + 300) * 2; //somewhere on the guardring of the LGAD
|
||||
#ifdef HIGHZ
|
||||
dataMask[iy][ix] = 0x3fff;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//remap
|
||||
int ix, iy;
|
||||
for (int ipx=0; ipx!=1024; ++ipx) {
|
||||
for (int ipy=0; ipy!=256-4; ++ipy) {
|
||||
iy=ipy/3;
|
||||
/* //1
|
||||
if (ipy%3==0) ix=ipx*3+2;
|
||||
if (ipy%3==1) ix=ipx*3+1;
|
||||
if (ipy%3==2) ix=ipx*3;
|
||||
*/
|
||||
/* //2
|
||||
if (ipy%3==2) ix=ipx*3+2;
|
||||
if (ipy%3==0) ix=ipx*3+1;
|
||||
if (ipy%3==1) ix=ipx*3;
|
||||
*/
|
||||
/* //3
|
||||
if (ipy%3==1) ix=ipx*3+2;
|
||||
if (ipy%3==2) ix=ipx*3+1;
|
||||
if (ipy%3==0) ix=ipx*3;
|
||||
*/
|
||||
//4 //This seems to be correct //corresponds to looking from the backside of the sensor
|
||||
if (ipy%3==0) ix=ipx*3;
|
||||
if (ipy%3==1) ix=ipx*3+1;
|
||||
if (ipy%3==2) ix=ipx*3+2;
|
||||
|
||||
/* //5
|
||||
if (ipy%3==2) ix=ipx*3;
|
||||
if (ipy%3==0) ix=ipx*3+1;
|
||||
if (ipy%3==1) ix=ipx*3+2;
|
||||
*/
|
||||
/* //6
|
||||
if (ipy%3==1) ix=ipx*3;
|
||||
if (ipy%3==2) ix=ipx*3+1;
|
||||
if (ipy%3==0) ix=ipx*3+2;
|
||||
*/
|
||||
|
||||
if ( ipx!=255 && ipx!=256 && ipx!=511 && ipx!=512 && ipx!=767 && ipx!=768 ) //avoid double pixels
|
||||
// ( !( ipx%256==0 || ipx%256==255 ) || ipx==0 || ipx==1023 )
|
||||
dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2;
|
||||
// cout << ipx << " " << ipy << " " << ix << " " << iy << endl;
|
||||
}
|
||||
}
|
||||
|
||||
iframe = 0;
|
||||
std::cout << "data struct created" << std::endl;
|
||||
};
|
||||
|
||||
/**
|
||||
Returns the value of the selected channel for the given dataset as
|
||||
double. \param data pointer to the dataset (including headers etc) \param
|
||||
ix pixel number in the x direction \param iy pixel number in the y
|
||||
direction \returns data for the selected channel, with inversion if
|
||||
required as double
|
||||
|
||||
*/
|
||||
virtual double getValue(char *data, int ix, int iy = 0) {
|
||||
|
||||
uint16_t val = getChannel(data, ix, iy) & 0x3fff;
|
||||
return val;
|
||||
};
|
||||
|
||||
/* virtual void calcGhost(char *data, int ix, int iy) { */
|
||||
/* double val=0; */
|
||||
/* ghost[iy][ix]=0; */
|
||||
|
||||
/* } */
|
||||
|
||||
/* virtual void calcGhost(char *data) { */
|
||||
/* for (int ix=0; ix<25; ix++){ */
|
||||
/* for (int iy=0; iy<200; iy++) { */
|
||||
/* calcGhost(data, ix,iy); */
|
||||
/* } */
|
||||
/* } */
|
||||
/* // cout << "*" << endl; */
|
||||
/* } */
|
||||
|
||||
/* double getGhost(int ix, int iy) { */
|
||||
/* return 0; */
|
||||
/* }; */
|
||||
|
||||
/**
|
||||
|
||||
Returns the frame number for the given dataset. Purely virtual func.
|
||||
\param buff pointer to the dataset
|
||||
\returns frame number
|
||||
|
||||
*/
|
||||
|
||||
/* class jfrau_packet_header_t { */
|
||||
/* public: */
|
||||
/* unsigned char reserved[4]; */
|
||||
/* unsigned char packetNumber[1]; */
|
||||
/* unsigned char frameNumber[3]; */
|
||||
/* unsigned char bunchid[8]; */
|
||||
/* }; */
|
||||
|
||||
|
||||
int getFrameNumber(char *buff) {
|
||||
#ifdef ALDO //VH
|
||||
return ((header *)buff)->bunchNumber; //VH
|
||||
#else //VH
|
||||
return ((header *)buff)->detHeader.frameNumber;
|
||||
#endif //VH
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Returns the packet number for the given dataset. purely virtual func
|
||||
\param buff pointer to the dataset
|
||||
\returns packet number number
|
||||
|
||||
|
||||
|
||||
*/
|
||||
int getPacketNumber(char *buff) {
|
||||
#ifdef ALDO //VH
|
||||
//uint32_t fakePacketNumber = 1000;
|
||||
//return fakePacketNumber; //VH //TODO: Keep in mind in case of bugs! //This is definitely bad!
|
||||
return 1000;
|
||||
#else //VH
|
||||
return ((header *)buff)->detHeader.packetNumber;
|
||||
#endif //VH
|
||||
};
|
||||
|
||||
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin) {
|
||||
int ff = -1, np = -1;
|
||||
return readNextFrame(filebin, ff, np);
|
||||
};
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin, int &ff) {
|
||||
int np = -1;
|
||||
return readNextFrame(filebin, ff, np);
|
||||
};
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin, int &ff, int &np) {
|
||||
char *data = new char[dataSize];
|
||||
char *d = readNextFrame(filebin, ff, np, data);
|
||||
if (d == NULL) {
|
||||
delete[] data;
|
||||
data = NULL;
|
||||
}
|
||||
return data;
|
||||
};
|
||||
|
||||
char *readNextFrame(std::ifstream &filebin, int &ff, int &np,char *data) {
|
||||
char *retval = 0;
|
||||
int nd;
|
||||
int fnum = -1;
|
||||
np = 0;
|
||||
int pn;
|
||||
|
||||
// cout << dataSize << endl;
|
||||
if (ff >= 0)
|
||||
fnum = ff;
|
||||
|
||||
if (filebin.is_open()) {
|
||||
if (filebin.read(data, dataSize)) {
|
||||
ff = getFrameNumber(data);
|
||||
np = getPacketNumber(data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
};
|
||||
|
||||
/* Loops over a memory slot until a complete frame is found (i.e. all */
|
||||
/* packets 0 to nPackets, same frame number). purely virtual func \param */
|
||||
/* data pointer to the memory to be analyzed \param ndata reference to the */
|
||||
/* amount of data found for the frame, in case the frame is incomplete at */
|
||||
/* the end of the memory slot \param dsize size of the memory slot to be */
|
||||
/* analyzed \returns pointer to the beginning of the last good frame (might */
|
||||
/* be incomplete if ndata smaller than dataSize), or NULL if no frame is */
|
||||
/* found */
|
||||
|
||||
/* *\/ */
|
||||
virtual char *findNextFrame(char *data, int &ndata, int dsize) {
|
||||
if (dsize < dataSize)
|
||||
ndata = dsize;
|
||||
else
|
||||
ndata = dataSize;
|
||||
return data;
|
||||
};
|
||||
|
||||
// int getPacketNumber(int x, int y) {return dataMap[y][x]/packetSize;};
|
||||
};
|
||||
|
||||
#endif
|
@ -42,7 +42,7 @@ class moench03T1ReceiverDataNew : public slsDetectorData<uint16_t> {
|
||||
int sc_width;
|
||||
int sc_height;
|
||||
const int nSamples;
|
||||
|
||||
int headerSize;
|
||||
double ghost[200][25];
|
||||
|
||||
// Single point of definition if we need to customize
|
||||
@ -62,7 +62,7 @@ class moench03T1ReceiverDataNew : public slsDetectorData<uint16_t> {
|
||||
moench03T1ReceiverDataNew(int ns = 5000)
|
||||
: slsDetectorData<uint16_t>(400, 400, ns * 2 * 32 + sizeof(header)),
|
||||
nSamples(ns) {
|
||||
|
||||
headerSize=112;
|
||||
int nadc = 32;
|
||||
int sc_width = 25;
|
||||
int sc_height = 200;
|
||||
@ -250,13 +250,22 @@ class moench03T1ReceiverDataNew : public slsDetectorData<uint16_t> {
|
||||
virtual char *readNextFrame(std::ifstream &filebin, int &ff, int &np,
|
||||
char *data) {
|
||||
np = 0;
|
||||
if (filebin.is_open()) {
|
||||
if (filebin.read(data, dataSize)) {
|
||||
ff = getFrameNumber(data);
|
||||
np = getPacketNumber(data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
if (filebin.is_open()) {
|
||||
|
||||
if (filebin.read(data, headerSize)) {
|
||||
ff = getFrameNumber(data);
|
||||
np = getPacketNumber(data);
|
||||
if (np>0)
|
||||
filebin.read(data+headerSize, dataSize-headerSize);
|
||||
return data;
|
||||
}
|
||||
/* if (filebin.read(data, dataSize)) { */
|
||||
/* ff = getFrameNumber(data); */
|
||||
/* np = getPacketNumber(data); */
|
||||
/* return data; */
|
||||
/* } */
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -217,7 +217,6 @@ void slsDetectorData<dataType>::setDataMap(int **dMap) {
|
||||
}
|
||||
}
|
||||
}
|
||||
/* //commented this part because it causes out-of-bound issues if nx or ny are larger than dataMap bounds (single-chip readout of strixel with groups of different pitches) VH 2023-02-24
|
||||
for (iy = 0; iy < ny; iy++) {
|
||||
for (ix = 0; ix < nx; ix++) {
|
||||
ip = dataMap[iy][ix] / sizeof(dataType);
|
||||
@ -225,7 +224,7 @@ void slsDetectorData<dataType>::setDataMap(int **dMap) {
|
||||
ymap[ip] = iy;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// cout << "nx:" <<nx << " ny:" << ny << endl;
|
||||
}
|
||||
|
||||
|
@ -13,22 +13,7 @@ class etaInterpolationGlobal : public etaInterpolationBase {
|
||||
|
||||
virtual void prepareInterpolation(int &ok) {
|
||||
ok = 1;
|
||||
#ifdef MYROOT1
|
||||
if (hhx)
|
||||
delete hhx;
|
||||
if (hhy)
|
||||
delete hhy;
|
||||
|
||||
hhx = new TH2D("hhx", "hhx", heta->GetNbinsX(),
|
||||
heta->GetXaxis()->GetXmin(), heta->GetXaxis()->GetXmax(),
|
||||
heta->GetNbinsY(), heta->GetYaxis()->GetXmin(),
|
||||
heta->GetYaxis()->GetXmax());
|
||||
hhy = new TH2D("hhy", "hhy", heta->GetNbinsX(),
|
||||
heta->GetXaxis()->GetXmin(), heta->GetXaxis()->GetXmax(),
|
||||
heta->GetNbinsY(), heta->GetYaxis()->GetXmin(),
|
||||
heta->GetYaxis()->GetXmax());
|
||||
|
||||
#endif
|
||||
|
||||
///*Eta Distribution Rebinning*///
|
||||
double bsize = 1. / nSubPixels; // precision
|
||||
|
@ -22,13 +22,11 @@ enum quadrant {
|
||||
|
||||
#include <iostream>
|
||||
#include <stdio.h>
|
||||
//using namespace std;
|
||||
using namespace std;
|
||||
|
||||
//#ifdef MYROOT1
|
||||
//: public TObject
|
||||
//#endif
|
||||
using namespace std;
|
||||
|
||||
class slsInterpolation {
|
||||
|
||||
public:
|
||||
@ -130,7 +128,7 @@ class slsInterpolation {
|
||||
nSubPixelsY * nPixelsY);
|
||||
delete[] gm;
|
||||
} else
|
||||
std::cout << "Could not allocate float image " << std::endl;
|
||||
cout << "Could not allocate float image " << endl;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -325,7 +323,7 @@ class slsInterpolation {
|
||||
if (ix > 1)
|
||||
sumR += cl[ix + iy * 3];
|
||||
if (iy < 1)
|
||||
sumB = cl[ix + iy * 3]; //???? not "+="? VH
|
||||
sumB = cl[ix + iy * 3];
|
||||
if (iy > 1)
|
||||
sumT += cl[ix + iy * 3];
|
||||
}
|
||||
@ -359,6 +357,16 @@ class slsInterpolation {
|
||||
}
|
||||
}
|
||||
|
||||
/* cout << "(((" << totquad << "\t" << corner << endl; */
|
||||
/* for (int iy=0; iy<3; iy++) { */
|
||||
/* for (int ix=0; ix<3; ix++) */
|
||||
/* cout << cl[ix+iy*3] <<"\t"; */
|
||||
/* cout << endl; */
|
||||
|
||||
/* } */
|
||||
|
||||
/* cout << ")))" << endl; */
|
||||
|
||||
return corner;
|
||||
}
|
||||
|
||||
@ -372,6 +380,10 @@ class slsInterpolation {
|
||||
etax = r / totquad;
|
||||
etay = t / totquad;
|
||||
}
|
||||
/* cout << "************" << endl; */
|
||||
/* cout << sDum[0][0]<< "\t"<<sDum[0][1] << endl << sDum[1][0]<< "\t"<<sDum[1][1] << endl; */
|
||||
/* cout << "***************" <<endl; */
|
||||
/* cout << etax << " " << etay << endl; */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -474,13 +486,13 @@ class slsInterpolation {
|
||||
val = cl[ix + 3 * iy];
|
||||
sum += val;
|
||||
if (iy == 0)
|
||||
b += val;
|
||||
if (iy == 2)
|
||||
t += val;
|
||||
if (ix == 0)
|
||||
l += val;
|
||||
if (ix == 2)
|
||||
if (iy == 2)
|
||||
r += val;
|
||||
if (ix == 0)
|
||||
b += val;
|
||||
if (ix == 2)
|
||||
t += val;
|
||||
}
|
||||
}
|
||||
if (sum > 0) {
|
||||
@ -528,185 +540,6 @@ class slsInterpolation {
|
||||
return calcEta3X(cli, etax, etay, sum);
|
||||
}
|
||||
|
||||
/************************************************/
|
||||
/* Additional strixel eta functions by Viktoria */
|
||||
/************************************************/
|
||||
//Etax: only central row, etay: only central column
|
||||
static int calcEta1x3( double* cl, double& etax, double& etay, double& toth, double& totv ) {
|
||||
double l, r, t, b;
|
||||
//sum = cl[0] + cl[1] + cl[2] + cl[3] + cl[4] + cl[5] + cl[6] + cl[7] + cl[8];
|
||||
toth = cl[3] + cl[4] + cl[5];
|
||||
if (toth > 0) {
|
||||
l = cl[3];
|
||||
r = cl[5];
|
||||
}
|
||||
etax = (-l + r) / toth;
|
||||
totv = cl[1] + cl[4] + cl[7];
|
||||
if (toth > 0) {
|
||||
b = cl[1];
|
||||
t = cl[7];
|
||||
}
|
||||
etay = (-b + t) / totv;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int calcEta1x3( int* cl, double& etax, double& etay, double& toth, double& totv ) {
|
||||
double cli[9];
|
||||
for ( int ix = 0; ix != 9; ++ix )
|
||||
cli[ix] = cl[ix];
|
||||
return calcEta1x3( cli, etax, etay, toth , totv );
|
||||
}
|
||||
|
||||
//Eta 1x2 essentially the same as etaL, but we also return toth and totv
|
||||
static int calcEta1x2(double totquad, int corner, double sDum[2][2],
|
||||
double &etax, double &etay, double& toth, double& totv) {
|
||||
double t, r;
|
||||
if (totquad > 0) {
|
||||
switch (corner) {
|
||||
case TOP_LEFT:
|
||||
t = sDum[1][1];
|
||||
r = sDum[0][1];
|
||||
toth = sDum[0][1] + sDum[0][0];
|
||||
totv = sDum[0][1] + sDum[1][1];
|
||||
break;
|
||||
case TOP_RIGHT:
|
||||
t = sDum[1][0];
|
||||
r = sDum[0][1];
|
||||
toth = sDum[0][1] + sDum[0][0];
|
||||
totv = sDum[1][0] + sDum[0][0];
|
||||
break;
|
||||
case BOTTOM_LEFT:
|
||||
r = sDum[1][1];
|
||||
t = sDum[1][1];
|
||||
toth = sDum[1][0] + sDum[1][1];
|
||||
totv = sDum[0][1] + sDum[1][1];
|
||||
break;
|
||||
case BOTTOM_RIGHT:
|
||||
t = sDum[1][0];
|
||||
r = sDum[1][1];
|
||||
toth = sDum[1][0] + sDum[1][1];
|
||||
totv = sDum[1][0] + sDum[0][0];
|
||||
break;
|
||||
default:
|
||||
etax = -1000;
|
||||
etay = -1000;
|
||||
return 0;
|
||||
}
|
||||
// etax=r/totquad;
|
||||
// etay=t/totquad;
|
||||
etax = r / toth;
|
||||
etay = t / totv;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int calcEta1x2( double *cl, double &etax, double &etay, double &sum,
|
||||
double &totquad, double sDum[2][2], double& toth, double& totv ) {
|
||||
int corner = calcQuad( cl, sum, totquad, sDum );
|
||||
calcEta1x2( totquad, corner, sDum, etax, etay, toth, totv );
|
||||
return corner;
|
||||
}
|
||||
|
||||
static int calcEta1x2( int *cl, double &etax, double &etay, double &sum,
|
||||
double &totquad, double sDum[2][2], double& toth, double& totv ) {
|
||||
int corner = calcQuad( cl, sum, totquad, sDum );
|
||||
calcEta1x2( totquad, corner, sDum, etax, etay, toth , totv );
|
||||
return corner;
|
||||
}
|
||||
|
||||
//Two functions to calculate 2x3 or 3x2 eta
|
||||
static int calcEta2x3( double* cl, double totquad, int corner, double& etax, double& etay, double& tot6 ) {
|
||||
double t, b, r;
|
||||
if (totquad > 0) {
|
||||
switch (corner) {
|
||||
case TOP_LEFT:
|
||||
case BOTTOM_LEFT:
|
||||
t = cl[6] + cl[7];
|
||||
b = cl[0] + cl[1];
|
||||
r = cl[1] + cl[4] + cl[7];
|
||||
tot6 = cl[0] + cl[1] + cl[3] + cl[4] + cl[6] + cl[7];
|
||||
break;
|
||||
case TOP_RIGHT:
|
||||
case BOTTOM_RIGHT:
|
||||
t = cl[7] + cl[8];
|
||||
b = cl[1] + cl[2];
|
||||
r = cl[2] + cl[5] + cl[8];
|
||||
tot6 = cl[1] + cl[2] + cl[4] + cl[5] + cl[7] + cl[8];
|
||||
break;
|
||||
default:
|
||||
etax = -1000;
|
||||
etay = -1000;
|
||||
return -1;
|
||||
}
|
||||
etax = r / tot6;
|
||||
etay = (-b + t) / tot6;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int calcEta3x2( double* cl, double totquad, int corner, double& etax, double& etay, double& tot6 ) {
|
||||
double t, l, r;
|
||||
if (totquad > 0) {
|
||||
switch (corner) {
|
||||
case TOP_LEFT:
|
||||
case TOP_RIGHT:
|
||||
l = cl[3] + cl[6];
|
||||
r = cl[5] + cl[8];
|
||||
t = cl[6] + cl[7] + cl[8];
|
||||
tot6 = cl[3] + cl[4] + cl[5] + cl[6] + cl[7] + cl[8];
|
||||
break;
|
||||
case BOTTOM_LEFT:
|
||||
case BOTTOM_RIGHT:
|
||||
l = cl[0] + cl[3];
|
||||
r = cl[2] + cl[5];
|
||||
t = cl[3] + cl[4] + cl[5];
|
||||
tot6 = cl[0] + cl[1] + cl[2] + cl[3] + cl[4] + cl[5];
|
||||
break;
|
||||
default:
|
||||
etax = -1000;
|
||||
etay = -1000;
|
||||
return -1;
|
||||
}
|
||||
etax = (-l + r) / tot6;
|
||||
etay = t / tot6;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
//overload including both eta2x3 and eta3x2
|
||||
//ornt (orientation of long side (3) of eta) decides which eta is chosen
|
||||
enum orientation {
|
||||
HORIZONTAL_ORIENTATION = 0,
|
||||
VERTICAL_ORIENTATION = 1,
|
||||
UNDEFINED_ORIENTATION = -1
|
||||
};
|
||||
static int calcEta2x3( int ornt, double* cl, double& etax, double& etay, double& tot6 ) {
|
||||
double sum{};
|
||||
double totquad{};
|
||||
double sDum[2][2]{};
|
||||
int corner = calcQuad( cl, sum, totquad, sDum );
|
||||
switch (ornt) {
|
||||
case HORIZONTAL_ORIENTATION:
|
||||
calcEta3x2( cl, totquad, corner, etax, etay, tot6 );
|
||||
break;
|
||||
case VERTICAL_ORIENTATION:
|
||||
calcEta2x3( cl, totquad, corner, etax, etay, tot6 );
|
||||
break;
|
||||
default:
|
||||
etax = -1000;
|
||||
etay = -1000;
|
||||
return -1;
|
||||
}
|
||||
return corner;
|
||||
}
|
||||
|
||||
static int calcEta2x3( int strxo, int* cl, double& etax, double& etay, double& tot6 ) {
|
||||
double cli[9]{};
|
||||
for ( int ix = 0; ix != 9; ++ix )
|
||||
cli[ix] = cl[ix];
|
||||
return calcEta2x3( strxo, cli, etax, etay, tot6 );
|
||||
}
|
||||
|
||||
/* static int calcMyEta(double totquad, int quad, double *cl, double &etax,
|
||||
* double &etay) { */
|
||||
/* double l,r,t,b, sum; */
|
||||
|
@ -1,58 +0,0 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-other
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
#ifndef COMMONMODEJF_H
|
||||
#define COMMONMODEJF_H
|
||||
|
||||
#include "commonModeSubtractionNew.h"
|
||||
|
||||
class commonModeSubtractionSuperColumnJF : public commonModeSubtraction {
|
||||
public:
|
||||
commonModeSubtractionSuperColumnJF()
|
||||
: commonModeSubtraction(32){};
|
||||
virtual int getROI(int ix, int iy) { int top=iy/256; int sc=ix/64; return sc+top*16; };
|
||||
/*
|
||||
virtual void addToCommonMode(double val, int ix = 0, int iy = 0) {
|
||||
int iroi = getROI(ix, iy);
|
||||
// cout << iy << " " << ix << " " << iroi ;
|
||||
if (iroi >= 0 && iroi < nROI) {
|
||||
mean[iroi] += val;
|
||||
mean2[iroi] += val * val;
|
||||
nCm[iroi]++;
|
||||
if (nCm[iroi] > 64*256)
|
||||
std::cout << "Too many pixels added " << nCm[iroi] << std::endl;
|
||||
|
||||
}
|
||||
};
|
||||
*/
|
||||
virtual commonModeSubtractionSuperColumnJF *Clone() {
|
||||
return new commonModeSubtractionSuperColumnJF();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class commonModeSubtractionChip : public commonModeSubtraction {
|
||||
public:
|
||||
commonModeSubtractionChip()
|
||||
: commonModeSubtraction(8){};
|
||||
virtual int getROI(int ix, int iy) { int top=iy/256; int sc=ix/256; return sc+top*4; };
|
||||
/*
|
||||
virtual void addToCommonMode(double val, int ix = 0, int iy = 0) {
|
||||
int iroi = getROI(ix, iy);
|
||||
// cout << iy << " " << ix << " " << iroi ;
|
||||
if (iroi >= 0 && iroi < nROI) {
|
||||
mean[iroi] += val;
|
||||
mean2[iroi] += val * val;
|
||||
nCm[iroi]++;
|
||||
if (nCm[iroi] > 64*256)
|
||||
std::cout << "Too many pixels added " << nCm[iroi] << std::endl;
|
||||
|
||||
}
|
||||
};
|
||||
*/
|
||||
virtual commonModeSubtractionChip *Clone() {
|
||||
return new commonModeSubtractionChip();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
#endif
|
@ -14,19 +14,7 @@ jungfrauRawDataProcess: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcess jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DMODULE
|
||||
|
||||
jungfrauRawDataProcessStrx: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcessStrx jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRX
|
||||
|
||||
jungfrauRawDataProcessStrxChip1: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcessStrxChip1 jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRXCHIP1
|
||||
|
||||
jungfrauRawDataProcessStrxChip6: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcessStrxChip6 jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRXCHIP6
|
||||
|
||||
jungfrauRawDataProcessStrxChip1Aldo: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcessStrxChip1Aldo jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRXCHIP1 -DALDO
|
||||
|
||||
jungfrauRawDataProcessStrxChip6Aldo: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcessStrxChip6Aldo jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRXCHIP6 -DALDO
|
||||
g++ -o jungfrauRawDataProcessStrx jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRX
|
||||
|
||||
jungfrauRawDataProcessStrxAldo: jungfrauRawDataProcess.cpp $(INCS) clean
|
||||
g++ -o jungfrauRawDataProcessStrxAldo jungfrauRawDataProcess.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DJFSTRX -DALDO
|
||||
|
@ -2,19 +2,16 @@
|
||||
// Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
//#include "sls/ansi.h"
|
||||
#include <iostream>
|
||||
|
||||
//enable common mode subtraction
|
||||
#define CMS
|
||||
//disable common mode subtraction
|
||||
//#undef CMS
|
||||
#undef CORR
|
||||
|
||||
#define C_GHOST 0.0004
|
||||
|
||||
#define CM_ROWS 50
|
||||
|
||||
#define RAWDATA
|
||||
|
||||
#if !defined JFSTRX && !defined JFSTRXOLD && !defined JFSTRXCHIP1 && !defined JFSTRXCHIP6
|
||||
#ifndef JFSTRX
|
||||
#ifndef JFSTRXOLD
|
||||
#ifndef MODULE
|
||||
#include "jungfrauHighZSingleChipData.h"
|
||||
#endif
|
||||
@ -22,13 +19,10 @@
|
||||
#include "jungfrauModuleData.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#ifdef JFSTRX
|
||||
#include "jungfrauLGADStrixelsData.h"
|
||||
#endif
|
||||
#if defined JFSTRXCHIP1 || defined JFSTRXCHIP6
|
||||
#include "jungfrauLGADStrixelsDataSingleChip.h"
|
||||
#endif
|
||||
#ifdef JFSTRXOLD
|
||||
#include "jungfrauStrixelsHalfModuleOldDesign.h"
|
||||
#endif
|
||||
@ -40,17 +34,15 @@
|
||||
#include <map>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
//#include "commonModeSubtractionNew.h"
|
||||
#include "jungfrauCommonMode.h"
|
||||
|
||||
#include <ctime>
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc < 6) {
|
||||
if (argc < 5) {
|
||||
cout << "Usage is " << argv[0]
|
||||
<< " indir outdir fname(no extension) fextension csize [runmin] [runmax] [pedfile (raw or tiff)] [threshold]"
|
||||
<< "indir outdir fname(no extension) fextension [runmin] [runmax] [pedfile (raw or tiff)] [threshold] "
|
||||
"[nframes] [xmin xmax ymin ymax] [gainmap]"
|
||||
<< endl;
|
||||
cout << "threshold <0 means analog; threshold=0 means cluster finder; "
|
||||
@ -59,58 +51,58 @@ int main(int argc, char *argv[]) {
|
||||
cout << "nframes <0 means sum everything; nframes=0 means one file per "
|
||||
"run; nframes>0 means one file every nframes"
|
||||
<< endl;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int fifosize = 1000;
|
||||
int nthreads = 1;
|
||||
int csize = 3; //3
|
||||
int nthreads = 10;
|
||||
int csize = 3;
|
||||
int nsigma = 5;
|
||||
int nped = 10000;
|
||||
|
||||
int cf = 0;
|
||||
|
||||
|
||||
#if !defined JFSTRX && !defined JFSTRXOLD && !defined JFSTRXCHIP1 && !defined JFSTRXCHIP6
|
||||
#ifndef JFSTRX
|
||||
#ifndef JFSTRXOLD
|
||||
#ifndef MODULE
|
||||
cout << "This is a JF single chip!" <<endl;
|
||||
jungfrauHighZSingleChipData *decoder = new jungfrauHighZSingleChipData();
|
||||
int nx = 256, ny = 256;
|
||||
#endif
|
||||
#ifdef MODULE
|
||||
cout << "This is a JF module!" <<endl;
|
||||
jungfrauModuleData *decoder = new jungfrauModuleData();
|
||||
int nx = 1024, ny = 512;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifdef JFSTRX
|
||||
cout << "Jungfrau strixel full module readout" << endl;
|
||||
cout << "bbb" << endl;
|
||||
jungfrauLGADStrixelsData *decoder = new jungfrauLGADStrixelsData();
|
||||
int nx = 1024/5, ny = 512*5;
|
||||
#endif
|
||||
#ifdef JFSTRXCHIP1
|
||||
std::cout << "Jungfrau strixel LGAD single chip 1" << std::endl;
|
||||
jungfrauLGADStrixelsDataSingleChip *decoder = new jungfrauLGADStrixelsDataSingleChip(1);
|
||||
int nx = 256/3, ny = 256*5;
|
||||
#endif
|
||||
#ifdef JFSTRXCHIP6
|
||||
std::cout << "Jungfrau strixel LGAD single chip 6" << std::endl;
|
||||
jungfrauLGADStrixelsDataSingleChip *decoder = new jungfrauLGADStrixelsDataSingleChip(6);
|
||||
int nx = 256/3, ny = 256*5;
|
||||
#endif
|
||||
#ifdef JFSTRXOLD
|
||||
std::cout << "Jungfrau strixels old design" << std::endl;
|
||||
cout << "ccc" << endl;
|
||||
jungfrauStrixelsHalfModuleOldDesign *decoder = new jungfrauStrixelsHalfModuleOldDesign();
|
||||
int nx = 1024*3, ny = 512/3;
|
||||
#endif
|
||||
|
||||
|
||||
decoder->getDetectorSize(nx, ny);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cout << "Detector size is " << nx << " " << ny << endl;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
double *gainmap = NULL;
|
||||
//float *gm;
|
||||
|
||||
@ -122,48 +114,47 @@ int main(int argc, char *argv[]) {
|
||||
char *outdir = argv[2];
|
||||
char *fformat = argv[3];
|
||||
char *fext = argv[4];
|
||||
sscanf(argv[5], "%d", &csize);
|
||||
int runmin = 0;
|
||||
|
||||
// cout << "argc is " << argc << endl;
|
||||
if (argc >= 7) {
|
||||
runmin = atoi(argv[6]);
|
||||
if (argc >= 6) {
|
||||
runmin = atoi(argv[5]);
|
||||
}
|
||||
|
||||
int runmax = runmin;
|
||||
|
||||
if (argc >= 8) {
|
||||
runmax = atoi(argv[7]);
|
||||
if (argc >= 7) {
|
||||
runmax = atoi(argv[6]);
|
||||
}
|
||||
|
||||
char *pedfile = NULL;
|
||||
if (argc >= 9) {
|
||||
pedfile = argv[8];
|
||||
if (argc >= 8) {
|
||||
pedfile = argv[7];
|
||||
}
|
||||
double thr = 0;
|
||||
double thr1 = 1;
|
||||
|
||||
if (argc >= 10) {
|
||||
thr = atof(argv[9]);
|
||||
if (argc >= 9) {
|
||||
thr = atof(argv[8]);
|
||||
}
|
||||
|
||||
int nframes = 0;
|
||||
|
||||
if (argc >= 11) {
|
||||
nframes = atoi(argv[10]);
|
||||
if (argc >= 10) {
|
||||
nframes = atoi(argv[9]);
|
||||
}
|
||||
|
||||
int xmin = 0, xmax = nx, ymin = 0, ymax = ny;
|
||||
if (argc >= 15) {
|
||||
xmin = atoi(argv[11]);
|
||||
xmax = atoi(argv[12]);
|
||||
ymin = atoi(argv[13]);
|
||||
ymax = atoi(argv[14]);
|
||||
if (argc >= 14) {
|
||||
xmin = atoi(argv[10]);
|
||||
xmax = atoi(argv[11]);
|
||||
ymin = atoi(argv[12]);
|
||||
ymax = atoi(argv[13]);
|
||||
}
|
||||
|
||||
char *gainfname = NULL;
|
||||
if (argc > 15) {
|
||||
gainfname = argv[15];
|
||||
if (argc > 14) {
|
||||
gainfname = argv[14];
|
||||
cout << "Gain map file name is: " << gainfname << endl;
|
||||
}
|
||||
|
||||
@ -187,13 +178,9 @@ int main(int argc, char *argv[]) {
|
||||
cout << "Nframes is " << nframes << endl;
|
||||
|
||||
uint32_t nnx, nny;
|
||||
commonModeSubtraction *cm = NULL;
|
||||
#ifdef CMS
|
||||
cm = new commonModeSubtractionChip();//commonModeSubtraction(1,5);//commonModeSubtractionSuperColumnJF();
|
||||
std::cout << "Enabled common mode subtraction" << std::endl;
|
||||
#endif
|
||||
|
||||
singlePhotonDetector *filter = new singlePhotonDetector(
|
||||
decoder, 3, nsigma, 1, cm, nped, 200, -1, -1, gainmap, NULL);
|
||||
decoder, csize, nsigma, 1, NULL, nped, 200, -1, -1, gainmap, NULL);
|
||||
|
||||
if (gainfname) {
|
||||
|
||||
@ -224,8 +211,6 @@ int main(int argc, char *argv[]) {
|
||||
// multiThreadedAnalogDetector(filter,nthreads,fifosize);
|
||||
multiThreadedCountingDetector *mt =
|
||||
new multiThreadedCountingDetector(filter, nthreads, fifosize);
|
||||
mt->setClusterSize(csize,csize);
|
||||
|
||||
#ifndef ANALOG
|
||||
mt->setDetectorMode(ePhotonCounting);
|
||||
cout << "Counting!" << endl;
|
||||
@ -253,14 +238,13 @@ int main(int argc, char *argv[]) {
|
||||
double *ped=new double[nx * ny];//, *ped1;
|
||||
|
||||
int pos,pos1;
|
||||
int ipixX=351, ipixY=331;
|
||||
|
||||
if (pedfile) {
|
||||
|
||||
if (string(pedfile).find(".raw") != std::string::npos) {
|
||||
if (string(pedfile).find(".dat") != std::string::npos) {
|
||||
pos1=string(pedfile).rfind("/");
|
||||
strcpy(froot,pedfile+pos1);
|
||||
pos=string(froot).find(".raw");
|
||||
pos=string(froot).find(".dat");
|
||||
froot[pos]='\0';
|
||||
}
|
||||
|
||||
@ -281,43 +265,19 @@ int main(int argc, char *argv[]) {
|
||||
ff = -1;
|
||||
while (decoder->readNextFrame(filebin, ff, np, buff)) {
|
||||
// if (np == 40) {
|
||||
// if ((ifr+1) % 100 == 0) {
|
||||
// cout << " ****" << decoder->getValue(buff,20,20);// << endl;
|
||||
// }
|
||||
if ((ifr+1) % 100 == 0) {
|
||||
cout << " ****" << decoder->getValue(buff,20,20);// << endl;
|
||||
}
|
||||
mt->pushData(buff);
|
||||
|
||||
|
||||
// while (mt->isBusy())
|
||||
// ;
|
||||
//if ((ifr+1) % 100 == 0)
|
||||
|
||||
// double pix=0,ped=0,sub=0,cmp=0, sub0=0;
|
||||
|
||||
// for (int ix=-1; ix<2; ix++) {
|
||||
// for (int iy=-1; iy<2; iy++) {
|
||||
// pix+=decoder->getValue(buff, ipixX+ix, ipixY+iy);
|
||||
// sub+=filter->subtractPedestal(buff, ipixX+ix, ipixY+iy, 1);
|
||||
// sub0+=filter->subtractPedestal(buff, ipixX+ix, ipixY+iy, 0);
|
||||
// ped+=filter->getPedestal(ipixX+ix, ipixY+iy);
|
||||
// cmp+=filter->getCommonMode(ipixX+ix, ipixY+iy);
|
||||
// }
|
||||
// }
|
||||
|
||||
// cout << pix << " " << sub << " " sub0 << " " << ped << " " << cmp << endl;
|
||||
|
||||
|
||||
mt->nextThread();
|
||||
mt->popFree(buff);
|
||||
ifr++;
|
||||
// if (ifr % 100 == 0) {
|
||||
// cout << " ****" << ifr << " " << ff << " " << np << endl;
|
||||
// }
|
||||
|
||||
//else
|
||||
if (ifr % 100 == 0) {
|
||||
cout << " ****" << ifr << " " << ff << " " << np << endl;
|
||||
} //else
|
||||
//cout << ifr << " " << ff << " " << np << endl;
|
||||
// if (ifr>=1000)
|
||||
// break;
|
||||
|
||||
if (ifr>=1000)
|
||||
break;
|
||||
ff = -1;
|
||||
}
|
||||
filebin.close();
|
||||
@ -398,25 +358,7 @@ int main(int argc, char *argv[]) {
|
||||
if ((ifr+1) % 100 == 0) {
|
||||
cout << " ****" << decoder->getValue(buff,20,20);// << endl;
|
||||
}
|
||||
mt->pushData(buff);
|
||||
|
||||
|
||||
// while (mt->isBusy())
|
||||
|
||||
// double pix=0,ped=0,sub=0,cmp=0, sub0=0;
|
||||
|
||||
// for (int ix=-1; ix<2; ix++) {
|
||||
// for (int iy=-1; iy<2; iy++) {
|
||||
// pix+=decoder->getValue(buff, ipixX+ix, ipixY+iy);
|
||||
// sub+=filter->subtractPedestal(buff, ipixX+ix, ipixY+iy, 1);
|
||||
// sub0+=filter->subtractPedestal(buff, ipixX+ix, ipixY+iy, 0);
|
||||
// ped+=filter->getPedestal(ipixX+ix, ipixY+iy);
|
||||
// cmp+=filter->getCommonMode(ipixX+ix, ipixY+iy);
|
||||
// }
|
||||
// }
|
||||
|
||||
// cout << pix << " " << sub << " " sub0 << " " << ped << " " << cmp << endl;
|
||||
|
||||
mt->pushData(buff);
|
||||
// // //pop
|
||||
mt->nextThread();
|
||||
mt->popFree(buff);
|
||||
|
@ -33,7 +33,7 @@ int main(int argc, char *argv[]) {
|
||||
#ifndef FF
|
||||
if (argc < 9) {
|
||||
cout << "Wrong usage! Should be: " << argv[0]
|
||||
<< " infile etafile outfile runmin runmax ns cmin cmax" << endl;
|
||||
<< " infile etafile outfile runmin runmax ns [cmin cmax xmin xmax ymin ymax]" << endl;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
@ -41,7 +41,7 @@ int main(int argc, char *argv[]) {
|
||||
#ifdef FF
|
||||
if (argc < 7) {
|
||||
cout << "Wrong usage! Should be: " << argv[0]
|
||||
<< " infile etafile runmin runmax cmin cmax" << endl;
|
||||
<< " infile etafile runmin runmax [cmin cmax xmin xmax ymin ymax]" << endl;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
@ -65,13 +65,30 @@ int main(int argc, char *argv[]) {
|
||||
nsubpix = atoi(argv[iarg++]);
|
||||
cout << "Subpix: " << nsubpix << endl;
|
||||
#endif
|
||||
float cmin = atof(argv[iarg++]);
|
||||
float cmax = atof(argv[iarg++]);
|
||||
|
||||
float cmin = 0;
|
||||
float cmax=1000000;
|
||||
if (argc>iarg)
|
||||
cmin=atof(argv[iarg++]);
|
||||
if (argc>iarg)
|
||||
cmax= atof(argv[iarg++]);
|
||||
cout << "Energy min: " << cmin << endl;
|
||||
cout << "Energy max: " << cmax << endl;
|
||||
int xmin=0, xmax=NC, ymin=0, ymax=NR;
|
||||
|
||||
if (argc>iarg)
|
||||
xmin=atof(argv[iarg++]);
|
||||
if (argc>iarg)
|
||||
xmax= atof(argv[iarg++]);
|
||||
|
||||
if (argc>iarg)
|
||||
ymin=atof(argv[iarg++]);
|
||||
if (argc>iarg)
|
||||
ymax= atof(argv[iarg++]);
|
||||
|
||||
// int etabins=500;
|
||||
int etabins = 1000; // nsubpix*2*100;
|
||||
double etamin = -1, etamax = 2;
|
||||
double etamin = -0.25, etamax = 1.25;
|
||||
// double etamin=-0.1, etamax=1.1;
|
||||
// double eta3min = -2, eta3max = 2;
|
||||
double sum, totquad;
|
||||
@ -80,7 +97,7 @@ int main(int argc, char *argv[]) {
|
||||
// double eta3x, eta3y, int3_x, int3_y, noint_x, noint_y;
|
||||
|
||||
int ix, iy, isx, isy;
|
||||
int nframes = 0, lastframe = -1;
|
||||
int nframes = 0, lastframe = -1, iframe, nphFrame;
|
||||
//double d_x, d_y, res = 5, xx, yy;
|
||||
int nph = 0, totph = 0;
|
||||
//badph = 0,
|
||||
@ -98,7 +115,7 @@ int main(int argc, char *argv[]) {
|
||||
// int nSubPixels = nsubpix;
|
||||
#ifndef NOINTERPOLATION
|
||||
eta2InterpolationPosXY *interp =
|
||||
new eta2InterpolationPosXY(NC, NR, nsubpix, etabins, etamin, etamax);
|
||||
new eta2InterpolationPosXY(NC, NR, nsubpix, nsubpix, etabins, etabins, etamin, etamax);
|
||||
// eta2InterpolationCleverAdaptiveBins *interp=new
|
||||
// eta2InterpolationCleverAdaptiveBins(NC, NR, nsubpix, etabins, etamin,
|
||||
// etamax);
|
||||
@ -107,8 +124,8 @@ int main(int argc, char *argv[]) {
|
||||
noInterpolation *interp = new noInterpolation(NC, NR, nsubpix);
|
||||
#endif
|
||||
|
||||
#ifndef FF
|
||||
int quad;
|
||||
#ifndef FF
|
||||
#ifndef NOINTERPOLATION
|
||||
char fname[10000];
|
||||
int ok;
|
||||
@ -142,19 +159,26 @@ int main(int argc, char *argv[]) {
|
||||
#endif
|
||||
|
||||
int irun;
|
||||
for (irun = runmin; irun < runmax; irun++) {
|
||||
for (irun = runmin; irun <= runmax; irun++) {
|
||||
sprintf(infname, argv[1], irun);
|
||||
#ifndef FF
|
||||
sprintf(outfname, argv[3], irun);
|
||||
#endif
|
||||
|
||||
|
||||
f = fopen(infname, "r");
|
||||
if (f) {
|
||||
cout << infname << endl;
|
||||
nframes = 0;
|
||||
//f0 = -1;
|
||||
|
||||
while (cl.read(f)) {
|
||||
//iff=0;
|
||||
while (fread((void*)&iframe, 1, sizeof(int), f)) {
|
||||
//n=0;
|
||||
if (fread((void*)&nphFrame, 1, sizeof(int), f)) {
|
||||
for (int iph=0; iph<nphFrame; iph++) {
|
||||
//while (cl.read(f)) {
|
||||
if (cl.read(f)) {
|
||||
totph++;
|
||||
if (lastframe != cl.iframe) {
|
||||
lastframe = cl.iframe;
|
||||
@ -165,18 +189,28 @@ int main(int argc, char *argv[]) {
|
||||
nframes++;
|
||||
}
|
||||
// quad=interp->calcQuad(cl.get_cluster(), sum, totquad, sDum);
|
||||
#ifndef FF
|
||||
// #ifndef FF
|
||||
// quad = interp->calcEta(cl.get_cluster(), etax, etay, sum,
|
||||
// totquad, sDum);
|
||||
// #endif
|
||||
// #ifdef FF
|
||||
|
||||
quad = interp->calcEta(cl.get_cluster(), etax, etay, sum,
|
||||
totquad, sDum);
|
||||
#endif
|
||||
#ifdef FF
|
||||
interp->calcEta(cl.get_cluster(), etax, etay, sum,
|
||||
totquad, sDum);
|
||||
#endif
|
||||
|
||||
|
||||
/* cl.print();
|
||||
cout << "(" << etax <<","<< etay <<")"<< quad<< endl;
|
||||
*/
|
||||
//#endif
|
||||
|
||||
if (sum > cmin && totquad / sum > 0.8 && totquad / sum < 1.2 &&
|
||||
sum < cmax) {
|
||||
nph++;
|
||||
if (totquad > cmin && cl.x >= xmin && cl.x <= xmax &&
|
||||
cl.y >= ymin && cl.y <= ymax &&
|
||||
totquad < cmax) {
|
||||
|
||||
// if (sum > cmin && totquad / sum > 0.8 && totquad / sum < 1.2 &&
|
||||
// sum < cmax) {
|
||||
nph++;
|
||||
// if (sum>200 && sum<580) {
|
||||
// interp->getInterpolatedPosition(cl.x,cl.y,
|
||||
// totquad,quad,cl.get_cluster(),int_x, int_y);
|
||||
@ -227,9 +261,12 @@ int main(int argc, char *argv[]) {
|
||||
#ifdef FF
|
||||
interp->writeFlatField(outfname);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
#ifdef FF
|
||||
|
@ -304,18 +304,38 @@ int main(int argc, char *argv[]) {
|
||||
int ifile = 0;
|
||||
|
||||
mt->setFrameMode(eFrame);
|
||||
int filelist=0;
|
||||
ifstream flist;
|
||||
flist.open (fformat, std::ifstream::in);
|
||||
if (flist.is_open()) {
|
||||
runmin=0;
|
||||
runmax=0;
|
||||
while (flist.getline(ffname,10000)){
|
||||
cout << ffname << endl;
|
||||
runmax++;
|
||||
}
|
||||
runmax--;
|
||||
flist.close();
|
||||
cout << "Found " << runmax << " files " << endl;
|
||||
flist.open (fformat, std::ifstream::in);
|
||||
}
|
||||
|
||||
for (int irun = runmin; irun <= runmax; irun++) {
|
||||
cout << "DATA ";
|
||||
// sprintf(fn,fformat,irun);
|
||||
sprintf(ffname, "%s/%s.raw", indir, fformat);
|
||||
sprintf(fname, (const char*)ffname, irun);
|
||||
sprintf(ffname, "%s/%s.tiff", outdir, fformat);
|
||||
sprintf(imgfname, (const char*)ffname, irun);
|
||||
sprintf(ffname, "%s/%s.clust", outdir, fformat);
|
||||
sprintf(cfname, (const char*)ffname, irun);
|
||||
if (flist.is_open()) {
|
||||
flist.getline(ffname,10000);
|
||||
cout << "file list " << ffname << endl;
|
||||
} else {
|
||||
sprintf(ffname,(const char*)fformat,irun);
|
||||
cout << "loop " << ffname << endl;
|
||||
}
|
||||
cout << "ffname "<<ffname << endl;
|
||||
sprintf(fname, "%s/%s.raw",indir,ffname);
|
||||
sprintf(imgfname, "%s/%s.tiff",outdir,ffname);
|
||||
sprintf(cfname, "%s/%s.clust",outdir,ffname);
|
||||
cout << fname << " ";
|
||||
cout << imgfname << endl;
|
||||
cout << imgfname << " " << cfname << endl;
|
||||
std::time(&end_time);
|
||||
cout << std::ctime(&end_time) << endl;
|
||||
// cout << fname << " " << outfname << " " << imgfname << endl;
|
||||
@ -349,13 +369,15 @@ int main(int argc, char *argv[]) {
|
||||
mt->popFree(buff);
|
||||
|
||||
ifr++;
|
||||
if (ifr % 100 == 0)
|
||||
if (ifr % 10000 == 0)
|
||||
cout << ifr << " " << ff << endl;
|
||||
if (nframes > 0) {
|
||||
if (ifr % nframes == 0) {
|
||||
sprintf(ffname, "%s/%s_f%05d.tiff", outdir, fformat,
|
||||
ifile);
|
||||
sprintf(imgfname, (const char*)ffname, irun);
|
||||
|
||||
sprintf(imgfname, "%s/%s_f%05d.tiff",outdir,ffname,ifile);
|
||||
|
||||
while (mt->isBusy())
|
||||
;
|
||||
mt->writeImage(imgfname, thr1);
|
||||
mt->clearImage();
|
||||
ifile++;
|
||||
@ -374,13 +396,13 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
if (nframes >= 0) {
|
||||
if (nframes > 0) {
|
||||
sprintf(ffname, "%s/%s_f%05d.tiff", outdir, fformat, ifile);
|
||||
sprintf(imgfname, (const char*)ffname, irun);
|
||||
sprintf(imgfname, "%s/%s_f%05d.tiff",outdir,ffname,ifile);
|
||||
} else {
|
||||
sprintf(ffname, "%s/%s.tiff", outdir, fformat);
|
||||
sprintf(imgfname, (const char*)ffname, irun);
|
||||
sprintf(imgfname, "%s/%s_f%05d.tiff",outdir,ffname,ifile);
|
||||
}
|
||||
cout << "Writing tiff to " << imgfname << " " << thr1 << endl;
|
||||
while (mt->isBusy())
|
||||
;
|
||||
mt->writeImage(imgfname, thr1);
|
||||
mt->clearImage();
|
||||
if (of) {
|
||||
@ -395,11 +417,12 @@ int main(int argc, char *argv[]) {
|
||||
cout << "Could not open " << fname << " for reading " << endl;
|
||||
}
|
||||
if (nframes < 0) {
|
||||
sprintf(ffname, "%s/%s.tiff", outdir, fformat);
|
||||
strcpy(imgfname, ffname);
|
||||
cout << "Writing tiff to " << imgfname << " " << thr1 << endl;
|
||||
mt->writeImage(imgfname, thr1);
|
||||
sprintf(imgfname, "%s/%s_tot.tiff",outdir,ffname);
|
||||
cout << "Writing tiff to " << imgfname << " " << thr1 << endl;
|
||||
mt->writeImage(imgfname, thr1);
|
||||
}
|
||||
if (flist.is_open()) {
|
||||
flist.close();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -720,6 +720,22 @@ int main(int argc, char *argv[]) {
|
||||
ymin >> ymax;
|
||||
}
|
||||
|
||||
if (addJsonHeader.find("xMin") != addJsonHeader.end()) {
|
||||
istringstream(addJsonHeader.at("xMin")) >> xmin;
|
||||
}
|
||||
|
||||
if (addJsonHeader.find("yMin") != addJsonHeader.end()) {
|
||||
istringstream(addJsonHeader.at("yMin")) >> ymin;
|
||||
}
|
||||
|
||||
if (addJsonHeader.find("xMax") != addJsonHeader.end()) {
|
||||
istringstream(addJsonHeader.at("xMax")) >> xmax;
|
||||
}
|
||||
|
||||
if (addJsonHeader.find("yMax") != addJsonHeader.end()) {
|
||||
istringstream(addJsonHeader.at("yMax")) >> ymax;
|
||||
}
|
||||
|
||||
cprintf(MAGENTA, "%d %d %d %d\n", xmin, xmax, ymin, ymax);
|
||||
mt->setROI(xmin, xmax, ymin, ymax);
|
||||
if (addJsonHeader.find("dynamicRange") != addJsonHeader.end()) {
|
||||
|
@ -69,11 +69,6 @@ class threadedAnalogDetector {
|
||||
};
|
||||
virtual double setThreshold(double th) { return det->setThreshold(th); };
|
||||
|
||||
virtual double setClusterSize(int csx, int csy) {
|
||||
//cout << "44" << endl;
|
||||
return det->setClusterSize(csx);
|
||||
};
|
||||
|
||||
virtual void setROI(int xmin, int xmax, int ymin, int ymax) {
|
||||
det->setROI(xmin, xmax, ymin, ymax);
|
||||
};
|
||||
|
@ -19,7 +19,7 @@ using namespace std;
|
||||
|
||||
class multiThreadedCountingDetector : public multiThreadedAnalogDetector {
|
||||
public:
|
||||
multiThreadedCountingDetector(singlePhotonDetector *d, int n, int fs = 1000)
|
||||
multiThreadedCountingDetector(singlePhotonDetector *d, int n, int fs = 1000)
|
||||
: multiThreadedAnalogDetector(d, n, fs){};
|
||||
// virtual
|
||||
// ~multiThreadedCountingDetector{multiThreadedAnalogDetector::~multiThreadedAnalogDetector();};
|
||||
@ -33,11 +33,6 @@ class multiThreadedCountingDetector : public multiThreadedAnalogDetector {
|
||||
for (int i = 0; i < nThreads; i++)
|
||||
(dets[i])->setEnergyRange(emi, ema);
|
||||
};
|
||||
virtual void setClusterSize(int sizex, int sizey) {
|
||||
for (int i = 0; i < nThreads; i++)
|
||||
((dets[i]))->setClusterSize(sizex, sizey);
|
||||
//std::cout << "+++++++++++++ sizex " << sizex << std::endl;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -174,9 +174,8 @@ class singlePhotonDetector : public analogDetector<uint16_t> {
|
||||
clusterSizeY = clusterSize;
|
||||
else
|
||||
clusterSizeY = 1;
|
||||
for (int ip = 0; ip < nx * ny; ip++) {
|
||||
for (int ip = 0; ip < nx * ny; ip++)
|
||||
(clusters + ip)->set_cluster_size(clusterSize, clusterSizeY);
|
||||
}
|
||||
// cluster=new single_photon_hit(clusterSize,clusterSizeY);
|
||||
}
|
||||
return clusterSize;
|
||||
@ -396,14 +395,14 @@ class singlePhotonDetector : public analogDetector<uint16_t> {
|
||||
return 0;
|
||||
}
|
||||
newFrame(data);
|
||||
/*
|
||||
|
||||
if (cmSub) {
|
||||
addToCommonMode(data);
|
||||
cm = 1;
|
||||
}
|
||||
*/
|
||||
|
||||
double *val = new double[ny * nx];
|
||||
cm=0;
|
||||
|
||||
for (iy = ymin; iy < ymax; ++iy) {
|
||||
for (ix = xmin; ix < xmax; ++ix) {
|
||||
if (det->isGood(ix, iy) == 0)
|
||||
@ -534,8 +533,7 @@ class singlePhotonDetector : public analogDetector<uint16_t> {
|
||||
(clusters + nph)->print();
|
||||
cout << max << " " << val[iy * nx + ix] << endl;
|
||||
}
|
||||
//else (clusters + nph)->print();
|
||||
good = 1;
|
||||
//good = 1;
|
||||
if (eMin > 0 && tot < eMin)
|
||||
good = 0;
|
||||
if (eMax > 0 && tot > eMax)
|
||||
@ -544,53 +542,15 @@ class singlePhotonDetector : public analogDetector<uint16_t> {
|
||||
nph++;
|
||||
image[iy * nx + ix]++;
|
||||
}
|
||||
|
||||
good=1;
|
||||
} else if (ee == PEDESTAL) {
|
||||
addToPedestal(data, ix, iy, cm);
|
||||
if (cmSub) {
|
||||
addToCommonMode(data, ix, iy);
|
||||
}
|
||||
} /*else {
|
||||
eventMask[iy][ix]=PHOTON;
|
||||
}*/
|
||||
// eventMask[iy][ix]=ee;
|
||||
}
|
||||
}
|
||||
|
||||
if (cmSub) {
|
||||
|
||||
double cmv=0;
|
||||
for (int iph=0; iph<nph; iph++) {
|
||||
ix=(clusters + iph)->x ;
|
||||
iy=(clusters + nph)->y;
|
||||
|
||||
for (ir = -(clusterSizeY / 2); ir < (clusterSizeY / 2) + 1;
|
||||
ir++) {
|
||||
for (ic = -(clusterSize / 2);
|
||||
ic < (clusterSize / 2) + 1; ic++) {
|
||||
if ((iy + ir) >= 0 && (iy + ir) < ny &&
|
||||
(ix + ic) >= 0 && (ix + ic) < nx) {
|
||||
|
||||
cmv=getCommonMode(ix+ic, iy+ir);
|
||||
//if (ir==0 && ic==0)
|
||||
//cout << cmv << endl;
|
||||
(clusters + iph)
|
||||
->set_data((clusters + iph)
|
||||
->get_data(ic,ir)-cmv, ic,ir);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
nphFrame = nph;
|
||||
nphTot += nph;
|
||||
|
@ -44,12 +44,14 @@ class single_photon_hit {
|
||||
// fwrite((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad),
|
||||
// myFile); // if (fwrite((void*)this, 1,
|
||||
// sizeof(int)+2*sizeof(int16_t), myFile))
|
||||
#ifdef OLDFORMAT
|
||||
if (fwrite((void *)&iframe, 1, sizeof(int), myFile)) {
|
||||
};
|
||||
#endif
|
||||
#ifndef WRITE_QUAD
|
||||
// printf("no quad ");
|
||||
if ( fwrite( (void*)&x, sizeof(int16_t), 1, myFile ) ) {
|
||||
if ( fwrite( (void*)&y, sizeof(int16_t), 1, myFile ) )
|
||||
if (fwrite((void *)&x, sizeof(int16_t), 2, myFile))
|
||||
return fwrite((void *)data, sizeof(int), dx * dy, myFile);
|
||||
}
|
||||
#endif
|
||||
#ifdef WRITE_QUAD
|
||||
// printf("quad ");
|
||||
@ -107,27 +109,14 @@ class single_photon_hit {
|
||||
// fread((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad),
|
||||
// myFile);
|
||||
|
||||
#ifdef OLDFORMAT
|
||||
if (fread((void *)&iframe, 1, sizeof(int), myFile)) {
|
||||
}
|
||||
#endif
|
||||
#ifndef WRITE_QUAD
|
||||
//printf( "no quad \n");
|
||||
//This reads two values of size int16_t into x
|
||||
//If x is located next to y (int16_t distance), this reads the values into x and y
|
||||
//How can I be sure, this is always the case?
|
||||
//If, e.g., the memory is padded after int16_t x, do we read the padding instead of y?
|
||||
//How can I be sure the memory is packed and y follows right after x with no padding?
|
||||
//Anyway, this is dangerous if anyone, at any point, changes the order of variable declaration,
|
||||
//or uses another architecture (64 bit vs 32 bit for instance).
|
||||
/*
|
||||
// printf( "no quad \n");
|
||||
if (fread((void *)&x, sizeof(int16_t), 2, myFile))
|
||||
return fread((void *)data, sizeof(int), dx * dy, myFile);
|
||||
*/
|
||||
|
||||
//Suggestion
|
||||
if ( fread( (void*)&x, sizeof(int16_t), 1, myFile) ) { //reads x
|
||||
if ( fread( (void*)&y, sizeof(int16_t), 1, myFile ) ) //reads y
|
||||
return fread( (void*)data, sizeof(int), dx*dy, myFile ); //reads and returns data
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#ifdef WRITE_QUAD
|
||||
int qq[4];
|
||||
@ -228,7 +217,7 @@ class single_photon_hit {
|
||||
// int ix, iy;
|
||||
|
||||
printf("***************\n");
|
||||
printf("** %d %d ** %d %d **\n", x, y, dx, dy);
|
||||
printf("** %d %d **\n",x,y);
|
||||
for (int iy = 0; iy < dy; iy++) {
|
||||
for (int ix = 0; ix < dx; ix++) {
|
||||
printf("%d \t", data[ix + iy * dx]);
|
||||
@ -272,11 +261,10 @@ class single_photon_hit {
|
||||
x within the cluster (center is (0,0)) \param iy coordinate y within the
|
||||
cluster (center is (0,0)) \returns value of the cluster element
|
||||
*/
|
||||
//Why not make these const? VH
|
||||
double get_data(int ix, int iy = 0) const {
|
||||
return data[(iy + dy / 2) * dx + ix + dx / 2]; //NOTE: those are int divisions
|
||||
double get_data(int ix, int iy = 0) {
|
||||
return data[(iy + dy / 2) * dx + ix + dx / 2];
|
||||
};
|
||||
int *get_cluster() const { return data; };
|
||||
int *get_cluster() { return data; };
|
||||
|
||||
int iframe; /**< frame number */
|
||||
double
|
||||
|
@ -3,8 +3,7 @@
|
||||
|
||||
#include "sls/tiffIO.h"
|
||||
#include <iostream>
|
||||
#include "/usr/include/tiffio.h"
|
||||
//#include <tiffio.h>
|
||||
#include <tiffio.h>
|
||||
|
||||
void *WriteToTiff(float *imgData, const char *imgname, int ncol, int nrow) {
|
||||
constexpr uint32_t sampleperpixel = 1;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -32,6 +32,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
|
||||
void SetNumFrames(int val);
|
||||
void SetNumTriggers(int val);
|
||||
void SetNumBursts(int val);
|
||||
void SetNumSamples(int val);
|
||||
void SetNumGates(int val);
|
||||
void SetExposureTime();
|
||||
void SetAcquisitionPeriod();
|
||||
@ -63,6 +64,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
|
||||
void GetNumFrames();
|
||||
void GetNumTriggers();
|
||||
void GetNumBursts();
|
||||
void GetNumSamples();
|
||||
void GetNumGates();
|
||||
void GetExposureTime();
|
||||
void GetAcquisitionPeriod();
|
||||
@ -94,6 +96,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
|
||||
QString errPeriodTip;
|
||||
QPalette red;
|
||||
bool delayImplemented;
|
||||
bool sampleImplemented;
|
||||
bool gateImplemented;
|
||||
bool startingFnumImplemented;
|
||||
bool isAcquisitionStopped{false};
|
||||
|
@ -52,7 +52,6 @@ void qDrawPlot::SetupWidgetWindow() {
|
||||
detType = det->getDetectorType().squash();
|
||||
switch (detType) {
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
pixelMask = ((1 << 14) - 1);
|
||||
gainMask = (3 << 14);
|
||||
gainOffset = 14;
|
||||
@ -194,6 +193,7 @@ void qDrawPlot::SetupPlots() {
|
||||
gainplot2d = new SlsQt2DPlot(boxPlot, true);
|
||||
gainplot2d->SetData(nPixelsX, -0.5, nPixelsX - 0.5, nPixelsY, -0.5,
|
||||
nPixelsY - 0.5, gainData);
|
||||
gainplot2d->Update();
|
||||
gainplot2d->hide();
|
||||
connect(plot2d, SIGNAL(PlotZoomedSignal(const QRectF &)), this,
|
||||
SLOT(Zoom2DGainPlot(const QRectF &)));
|
||||
@ -1010,6 +1010,7 @@ void qDrawPlot::Update2dPlot() {
|
||||
if (isGainDataExtracted) {
|
||||
gainplot2d->SetData(nPixelsX, -0.5, nPixelsX - 0.5, nPixelsY, -0.5,
|
||||
nPixelsY - 0.5, gainData);
|
||||
gainplot2d->Update();
|
||||
if (!gainplot2d->isVisible()) {
|
||||
gainplot2d->setFixedWidth(plot2d->width() /
|
||||
qDefs::DATA_GAIN_PLOT_RATIO);
|
||||
@ -1143,8 +1144,7 @@ void qDrawPlot::toDoublePixelData(double *dest, char *source, int size,
|
||||
break;
|
||||
|
||||
case 16:
|
||||
if (detType == slsDetectorDefs::MOENCH ||
|
||||
detType == slsDetectorDefs::JUNGFRAU ||
|
||||
if (detType == slsDetectorDefs::JUNGFRAU ||
|
||||
detType == slsDetectorDefs::GOTTHARD2) {
|
||||
|
||||
// show gain plot
|
||||
|
@ -48,10 +48,6 @@ void qTabAdvanced::SetupWidgetWindow() {
|
||||
lblDiscardBits->setEnabled(true);
|
||||
spinDiscardBits->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
lblNumStoragecells->setEnabled(true);
|
||||
spinNumStoragecells->setEnabled(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -40,11 +40,13 @@ void qTabDataOutput::SetupWidgetWindow() {
|
||||
comboClkDivider->setEnabled(true);
|
||||
chkParallel->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
chkTenGiga->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
chkParallel->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
lblClkDivider->setEnabled(true);
|
||||
comboClkDivider->setEnabled(true);
|
||||
break;
|
||||
|
@ -111,7 +111,6 @@ void qTabDeveloper::SetupWidgetWindow() {
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"v vb comp: ", getSLSIndex(detType, tempid++)));
|
||||
@ -140,6 +139,72 @@ void qTabDeveloper::SetupWidgetWindow() {
|
||||
"Temperature ADC: ", getSLSIndex(detType, tempid++)));
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MOENCH:
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vbp_colbuf: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vin_cm: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vb_sda: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vcasc_sfp: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vout_cm: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vipre_cds: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"ibias_sfp: ", getSLSIndex(detType, tempid++)));
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcassh: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vth2: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vrshaper: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vrshaper_n: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vipre_out: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vth3: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vth1: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vicin: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcas: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vrpreamp: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcal_p: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vishaper: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vcal_n: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vtrim: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(new qDacWidget(
|
||||
this, det, true, "vdcsh: ", getSLSIndex(detType, tempid++)));
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
"vthreshold: ", getSLSIndex(detType, tempid++)));
|
||||
adcWidgets.push_back(new qDacWidget(
|
||||
this, det, false,
|
||||
"Temperature FPGA: ", getSLSIndex(detType, tempid++)));
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
dacWidgets.push_back(
|
||||
new qDacWidget(this, det, true,
|
||||
@ -321,7 +386,6 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
switch (index) {
|
||||
case 0:
|
||||
return slsDetectorDefs::VB_COMP;
|
||||
@ -347,6 +411,30 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
|
||||
}
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MOENCH:
|
||||
switch (index) {
|
||||
case 0:
|
||||
return slsDetectorDefs::VBP_COLBUF;
|
||||
case 1:
|
||||
return slsDetectorDefs::VIPRE;
|
||||
case 2:
|
||||
return slsDetectorDefs::VIN_CM;
|
||||
case 3:
|
||||
return slsDetectorDefs::VB_SDA;
|
||||
case 4:
|
||||
return slsDetectorDefs::VCASC_SFP;
|
||||
case 5:
|
||||
return slsDetectorDefs::VOUT_CM;
|
||||
case 6:
|
||||
return slsDetectorDefs::VIPRE_CDS;
|
||||
case 7:
|
||||
return slsDetectorDefs::IBIAS_SFP;
|
||||
default:
|
||||
throw RuntimeError(std::string("Unknown dac/adc index") +
|
||||
std::to_string(index));
|
||||
}
|
||||
break;
|
||||
|
||||
case slsDetectorDefs::MYTHEN3:
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
@ -35,6 +35,7 @@ void qTabMeasurement::SetupWidgetWindow() {
|
||||
// timer to update the progress bar
|
||||
progressTimer = new QTimer(this);
|
||||
|
||||
sampleImplemented = false;
|
||||
gateImplemented = false;
|
||||
delayImplemented = true;
|
||||
startingFnumImplemented = false;
|
||||
@ -46,11 +47,18 @@ void qTabMeasurement::SetupWidgetWindow() {
|
||||
// default is triggers and delay (not #bursts and burst period for gotthard2
|
||||
// in auto mode)
|
||||
ShowTriggerDelay();
|
||||
// default is to show samples, mythen3, show gates
|
||||
ShowGates();
|
||||
|
||||
// enabling according to det type
|
||||
lblBurstMode->hide();
|
||||
comboBurstMode->hide();
|
||||
switch (det->getDetectorType().squash()) {
|
||||
case slsDetectorDefs::MOENCH:
|
||||
lblNumSamples->setEnabled(true);
|
||||
spinNumSamples->setEnabled(true);
|
||||
sampleImplemented = true;
|
||||
break;
|
||||
case slsDetectorDefs::EIGER:
|
||||
delayImplemented = false;
|
||||
lblNextFrameNumber->setEnabled(true);
|
||||
@ -58,7 +66,6 @@ void qTabMeasurement::SetupWidgetWindow() {
|
||||
startingFnumImplemented = true;
|
||||
break;
|
||||
case slsDetectorDefs::JUNGFRAU:
|
||||
case slsDetectorDefs::MOENCH:
|
||||
lblNextFrameNumber->setEnabled(true);
|
||||
spinNextFrameNumber->setEnabled(true);
|
||||
startingFnumImplemented = true;
|
||||
@ -105,6 +112,10 @@ void qTabMeasurement::Initialization() {
|
||||
connect(spinNumBursts, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumBursts(int)));
|
||||
}
|
||||
if (spinNumSamples->isEnabled()) {
|
||||
connect(spinNumSamples, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumSamples(int)));
|
||||
}
|
||||
if (gateImplemented) {
|
||||
connect(spinNumGates, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumGates(int)));
|
||||
@ -187,6 +198,16 @@ void qTabMeasurement::ShowTriggerDelay() {
|
||||
}
|
||||
}
|
||||
|
||||
void qTabMeasurement::ShowGates() {
|
||||
if (det->getDetectorType().squash() == slsDetectorDefs::MYTHEN3) {
|
||||
stackedLblSamplesGates->setCurrentWidget(pageLblGates);
|
||||
stackedSpinSamplesGates->setCurrentWidget(pageSpinGates);
|
||||
} else {
|
||||
stackedLblSamplesGates->setCurrentWidget(pageLblSamples);
|
||||
stackedSpinSamplesGates->setCurrentWidget(pageSpinSamples);
|
||||
}
|
||||
}
|
||||
|
||||
void qTabMeasurement::SetupTimingMode() {
|
||||
QStandardItemModel *model =
|
||||
qobject_cast<QStandardItemModel *>(comboTimingMode->model());
|
||||
@ -489,6 +510,31 @@ void qTabMeasurement::SetNumBursts(int val) {
|
||||
&qTabMeasurement::GetNumBursts)
|
||||
}
|
||||
|
||||
void qTabMeasurement::GetNumSamples() {
|
||||
LOG(logDEBUG) << "Getting number of samples";
|
||||
disconnect(spinNumSamples, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumSamples(int)));
|
||||
try {
|
||||
auto retval = det->getNumberOfAnalogSamples().tsquash(
|
||||
"Inconsistent number of analog samples for all detectors.");
|
||||
spinNumSamples->setValue(retval);
|
||||
}
|
||||
CATCH_DISPLAY("Could not get number of samples.",
|
||||
"qTabMeasurement::GetNumSamples")
|
||||
connect(spinNumSamples, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNumSamples(int)));
|
||||
}
|
||||
|
||||
void qTabMeasurement::SetNumSamples(int val) {
|
||||
LOG(logINFO) << "Setting number of samples to " << val;
|
||||
try {
|
||||
det->setNumberOfAnalogSamples(val);
|
||||
}
|
||||
CATCH_HANDLE("Could not set number of samples.",
|
||||
"qTabMeasurement::SetNumSamples", this,
|
||||
&qTabMeasurement::GetNumSamples)
|
||||
}
|
||||
|
||||
void qTabMeasurement::GetNumGates() {
|
||||
LOG(logDEBUG) << "Getting number of gates";
|
||||
disconnect(spinNumGates, SIGNAL(valueChanged(int)), this,
|
||||
@ -803,8 +849,9 @@ void qTabMeasurement::GetNextFrameNumber() {
|
||||
"Inconsistent starting frame number for all detectors.");
|
||||
spinNextFrameNumber->setValue(retval);
|
||||
}
|
||||
CATCH_DISPLAY("Could not get starting frame number.",
|
||||
"qTabMeasurement::GetNextFrameNumber")
|
||||
CATCH_HANDLE("Could not get starting frame number.",
|
||||
"qTabMeasurement::GetNextFrameNumber", spinNextFrameNumber,
|
||||
&QSpinBox::setValue, -1)
|
||||
connect(spinNextFrameNumber, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SetNextFrameNumber(int)));
|
||||
}
|
||||
@ -957,6 +1004,9 @@ void qTabMeasurement::Refresh() {
|
||||
if (spinBurstPeriod->isEnabled()) {
|
||||
GetBurstPeriod();
|
||||
}
|
||||
if (sampleImplemented) {
|
||||
GetNumSamples();
|
||||
}
|
||||
if (gateImplemented) {
|
||||
GetNumGates();
|
||||
}
|
||||
|
@ -62,11 +62,6 @@ void qTabPlot::SetupWidgetWindow() {
|
||||
chkGainPlot->setChecked(true);
|
||||
plot->EnableGainPlot(true);
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
chkGainPlot->setEnabled(true);
|
||||
chkGainPlot->setChecked(true);
|
||||
plot->EnableGainPlot(true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -804,9 +799,6 @@ void qTabPlot::Refresh() {
|
||||
chkGainPlot->setEnabled(true);
|
||||
GetGapPixels();
|
||||
break;
|
||||
case slsDetectorDefs::MOENCH:
|
||||
chkGainPlot->setEnabled(true);
|
||||
break;
|
||||
case slsDetectorDefs::GOTTHARD2:
|
||||
chkGainPlot1D->setEnabled(true);
|
||||
break;
|
||||
|
@ -92,8 +92,7 @@ void qTabSettings::SetupWidgetWindow() {
|
||||
comboDynamicRange->setEnabled(true);
|
||||
lblThreshold->setEnabled(true);
|
||||
spinThreshold->setEnabled(true);
|
||||
} else if (detType == slsDetectorDefs::JUNGFRAU ||
|
||||
detType == slsDetectorDefs::MOENCH) {
|
||||
} else if (detType == slsDetectorDefs::JUNGFRAU) {
|
||||
lblSpinHV->show();
|
||||
spinHV->show();
|
||||
lblGainMode->setEnabled(true);
|
||||
@ -101,6 +100,9 @@ void qTabSettings::SetupWidgetWindow() {
|
||||
} else if (detType == slsDetectorDefs::GOTTHARD) {
|
||||
comboHV->show();
|
||||
lblComboHV->show();
|
||||
} else if (detType == slsDetectorDefs::MOENCH) {
|
||||
lblSpinHV->show();
|
||||
spinHV->show();
|
||||
} else if (detType == slsDetectorDefs::GOTTHARD2) {
|
||||
lblSpinHV->show();
|
||||
spinHV->show();
|
||||
@ -130,7 +132,7 @@ void qTabSettings::SetupWidgetWindow() {
|
||||
}
|
||||
|
||||
void qTabSettings::SetExportMode(bool exportMode) {
|
||||
if (comboGainMode->isVisible()) {
|
||||
if (comboGainMode->isEnabled()) {
|
||||
ShowFixG0(exportMode);
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
BIN
slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/ctbDetectorServer/bin/ctbDetectorServerv7.0.3
Executable file
Binary file not shown.
@ -1742,7 +1742,6 @@ int Feb_Control_WriteRegister_BitMask(uint32_t offset, uint32_t data,
|
||||
|
||||
int Feb_Control_ReadRegister_BitMask(uint32_t offset, uint32_t *retval,
|
||||
uint32_t bitmask) {
|
||||
|
||||
uint32_t actualOffset = offset;
|
||||
char side[2][10] = {"right", "left"};
|
||||
unsigned int addr[2] = {Feb_Control_rightAddress, Feb_Control_leftAddress};
|
||||
@ -2207,51 +2206,6 @@ int Feb_Control_GetRightFPGATemp() {
|
||||
return (int)temperature;
|
||||
}
|
||||
|
||||
int Feb_Control_GetFPGAHardwareVersion(int *retval) {
|
||||
if (!Feb_Control_activated) {
|
||||
return 0;
|
||||
}
|
||||
unsigned int value = 0;
|
||||
if (!Feb_Control_ReadRegister_BitMask(FEB_REG_STATUS, &value,
|
||||
FEB_REG_STATUS_FX30_MSK)) {
|
||||
LOG(logERROR,
|
||||
("Trouble reading FEB_REG_STATUS reg to feb hardware version\n"));
|
||||
return 0;
|
||||
}
|
||||
*retval = (value >> FEB_REG_STATUS_FX30_OFST);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int64_t Feb_Control_GetFrontLeftFirmwareVersion() {
|
||||
if (!Feb_Control_activated) {
|
||||
return 0;
|
||||
}
|
||||
unsigned int value = 0;
|
||||
if (!Feb_Interface_ReadRegister(Feb_Control_leftAddress, FEB_REG_STATUS,
|
||||
&value)) {
|
||||
LOG(logERROR, ("Trouble reading FEB_REG_STATUS reg to get left feb "
|
||||
"fw version\n"));
|
||||
return 0;
|
||||
}
|
||||
return ((value & FEB_REG_STATUS_FW_VERSION_MSK) >>
|
||||
FEB_REG_STATUS_FW_VERSION_OFST);
|
||||
}
|
||||
|
||||
int64_t Feb_Control_GetFrontRightFirmwareVersion() {
|
||||
if (!Feb_Control_activated) {
|
||||
return 0;
|
||||
}
|
||||
unsigned int value = 0;
|
||||
if (!Feb_Interface_ReadRegister(Feb_Control_rightAddress, FEB_REG_STATUS,
|
||||
&value)) {
|
||||
LOG(logERROR, ("Trouble reading FEB_REG_STATUS reg to get right feb "
|
||||
"fw version\n"));
|
||||
return 0;
|
||||
}
|
||||
return ((value & FEB_REG_STATUS_FW_VERSION_MSK) >>
|
||||
FEB_REG_STATUS_FW_VERSION_OFST);
|
||||
}
|
||||
|
||||
int64_t Feb_Control_GetMeasuredPeriod() {
|
||||
if (!Feb_Control_activated) {
|
||||
return 0;
|
||||
|
@ -119,7 +119,5 @@ int Feb_Control_PrintCorrectedValues();
|
||||
// adcs
|
||||
int Feb_Control_GetLeftFPGATemp();
|
||||
int Feb_Control_GetRightFPGATemp();
|
||||
int64_t Feb_Control_GetFrontLeftFirmwareVersion();
|
||||
int64_t Feb_Control_GetFrontRightFirmwareVersion();
|
||||
int64_t Feb_Control_GetMeasuredPeriod();
|
||||
int64_t Feb_Control_GetSubMeasuredPeriod();
|
||||
|
@ -46,10 +46,6 @@
|
||||
#define FEB_REG_STATUS_WAIT_FOR_TRGGR_MSK (0x00000001 << FEB_REG_STATUS_WAIT_FOR_TRGGR_OFST)
|
||||
#define FEB_REG_STATUS_ACQ_DONE_OFST (6)
|
||||
#define FEB_REG_STATUS_ACQ_DONE_MSK (0x00000001 << FEB_REG_STATUS_ACQ_DONE_OFST)
|
||||
#define FEB_REG_STATUS_FX30_OFST (7)
|
||||
#define FEB_REG_STATUS_FX30_MSK (0x00000001 << FEB_REG_STATUS_FX30_OFST)
|
||||
#define FEB_REG_STATUS_FW_VERSION_OFST (8)
|
||||
#define FEB_REG_STATUS_FW_VERSION_MSK (0x000000FF << FEB_REG_STATUS_FW_VERSION_OFST)
|
||||
#define FEB_REG_STATUS_TEMP_OFST (16)
|
||||
#define FEB_REG_STATUS_TEMP_MSK (0x0000FFFF << FEB_REG_STATUS_TEMP_OFST)
|
||||
|
||||
|
Binary file not shown.
BIN
slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/eigerDetectorServer/bin/eigerDetectorServerv7.0.3
Executable file
Binary file not shown.
@ -123,18 +123,18 @@ void basictests() {
|
||||
int64_t sw_fw_apiversion = getFirmwareAPIVersion();
|
||||
|
||||
LOG(logINFOBLUE,
|
||||
("\n********************************************************\n"
|
||||
"Detector IP Addr : 0x%x\n"
|
||||
"Detector MAC Addr : 0x%llx\n"
|
||||
("**************************************************\n"
|
||||
"Detector IP Addr:\t\t 0x%x\n"
|
||||
"Detector MAC Addr:\t\t 0x%llx\n"
|
||||
|
||||
"Firmware (Beb) Version : %lld\n"
|
||||
"F/w-S/w API Version : %lld\n"
|
||||
"Required Firmware Version: %d\n"
|
||||
"Software Version : %s\n"
|
||||
"Firmware Version:\t\t %lld\n"
|
||||
"Software Version:\t\t %s\n"
|
||||
"F/w-S/w API Version:\t\t %lld\n"
|
||||
"Required Firmware Version:\t %d\n"
|
||||
"********************************************************\n",
|
||||
(unsigned int)ipadd, (long long unsigned int)macadd,
|
||||
(long long int)fwversion, (long long int)sw_fw_apiversion,
|
||||
REQUIRED_FIRMWARE_VERSION, swversion));
|
||||
(long long int)fwversion, swversion, (long long int)sw_fw_apiversion,
|
||||
REQUIRED_FIRMWARE_VERSION));
|
||||
|
||||
// update default udpdstip and udpdstmac (1g is hardware ip and hardware
|
||||
// mac)
|
||||
@ -161,9 +161,9 @@ void basictests() {
|
||||
// check for API compatibility - old server
|
||||
if (sw_fw_apiversion > REQUIRED_FIRMWARE_VERSION) {
|
||||
sprintf(initErrorMessage,
|
||||
"This firmware-software api version (0x%lld) is incompatible "
|
||||
"This firmware-software api version (0x%llx) is incompatible "
|
||||
"with the software's minimum required firmware version "
|
||||
"(0x%lld).\nPlease update detector software to be compatible "
|
||||
"(0x%llx).\nPlease update detector software to be compatible "
|
||||
"with this firmware.\n",
|
||||
(long long int)sw_fw_apiversion,
|
||||
(long long int)REQUIRED_FIRMWARE_VERSION);
|
||||
@ -210,70 +210,20 @@ void getServerVersion(char *version) { strcpy(version, APIEIGER); }
|
||||
|
||||
u_int64_t getFirmwareVersion() {
|
||||
#ifdef VIRTUAL
|
||||
return REQUIRED_FIRMWARE_VERSION;
|
||||
return 0;
|
||||
#else
|
||||
return Beb_GetFirmwareRevision();
|
||||
#endif
|
||||
}
|
||||
|
||||
uint64_t getFrontEndFirmwareVersion(enum fpgaPosition fpgaPosition) {
|
||||
uint64_t retval = 0;
|
||||
#ifdef VIRTUAL
|
||||
return REQUIRED_FIRMWARE_VERSION;
|
||||
#else
|
||||
sharedMemory_lockLocalLink();
|
||||
switch (fpgaPosition) {
|
||||
case FRONT_LEFT:
|
||||
retval = Feb_Control_GetFrontLeftFirmwareVersion(fpgaPosition);
|
||||
break;
|
||||
case FRONT_RIGHT:
|
||||
retval = Feb_Control_GetFrontRightFirmwareVersion(fpgaPosition);
|
||||
break;
|
||||
default:
|
||||
LOG(logERROR,
|
||||
("unknown index for fpga position to read firmware version\n"));
|
||||
retval = 0;
|
||||
}
|
||||
sharedMemory_unlockLocalLink();
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
u_int64_t getFirmwareAPIVersion() {
|
||||
#ifdef VIRTUAL
|
||||
return REQUIRED_FIRMWARE_VERSION;
|
||||
return 0;
|
||||
#else
|
||||
return Beb_GetFirmwareSoftwareAPIVersion();
|
||||
return (u_int64_t)Beb_GetFirmwareSoftwareAPIVersion();
|
||||
#endif
|
||||
}
|
||||
|
||||
void getHardwareVersion(char *version) {
|
||||
strcpy(version, "unknown");
|
||||
int hwversion = getHardwareVersionNumber();
|
||||
const int hwNumberList[] = HARDWARE_VERSION_NUMBERS;
|
||||
const char *hwNamesList[] = HARDWARE_VERSION_NAMES;
|
||||
for (int i = 0; i != NUM_HARDWARE_VERSIONS; ++i) {
|
||||
LOG(logDEBUG, ("0x%x %d 0x%x %s\n", hwversion, i, hwNumberList[i],
|
||||
hwNamesList[i]));
|
||||
if (hwNumberList[i] == hwversion) {
|
||||
strcpy(version, hwNamesList[i]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int getHardwareVersionNumber() {
|
||||
int retval = 0;
|
||||
#ifndef VIRTUAL
|
||||
sharedMemory_lockLocalLink();
|
||||
if (!Feb_Control_GetFPGAHardwareVersion(&retval)) {
|
||||
retval = -1;
|
||||
}
|
||||
sharedMemory_unlockLocalLink();
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
int getModuleId(int *ret, char *mess) {
|
||||
return getModuleIdInFile(ret, mess, ID_FILE);
|
||||
}
|
||||
@ -405,37 +355,6 @@ void initControlServer() {
|
||||
Beb_SetTopVariable(top);
|
||||
Beb_Beb();
|
||||
LOG(logDEBUG1, ("Control server: BEB Initialization done\n"));
|
||||
|
||||
// Getting the feb versions after initialization
|
||||
char hversion[MAX_STR_LENGTH] = {0};
|
||||
memset(hversion, 0, MAX_STR_LENGTH);
|
||||
getHardwareVersion(hversion);
|
||||
int64_t fwversion = getFirmwareVersion();
|
||||
int64_t feblfwversion = getFrontEndFirmwareVersion(FRONT_LEFT);
|
||||
int64_t febrfwversion = getFrontEndFirmwareVersion(FRONT_RIGHT);
|
||||
LOG(logINFOBLUE,
|
||||
("\n********************************************************\n"
|
||||
"Feb Versions\n"
|
||||
"Hardware Version : %s\n"
|
||||
"Firmware (Febl) Version : %lld\n"
|
||||
"Firmware (Febr) Version : %lld\n"
|
||||
"********************************************************\n",
|
||||
hversion, (long long int)feblfwversion,
|
||||
(long long int)febrfwversion));
|
||||
|
||||
// ensure febl, febr and beb fw versions are the same
|
||||
if (fwversion != feblfwversion || fwversion != febrfwversion) {
|
||||
sprintf(
|
||||
initErrorMessage,
|
||||
"Inconsistent firmware versions in feb and beb. [Beb: %lld, "
|
||||
"Febl: %lld Febr: %lld]\n",
|
||||
(long long int)fwversion, (long long int)feblfwversion,
|
||||
(long long int)febrfwversion);
|
||||
LOG(logERROR, (initErrorMessage));
|
||||
initError = FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
// also reads config file and deactivates
|
||||
setupDetector();
|
||||
|
@ -5,12 +5,7 @@
|
||||
|
||||
#define LINKED_SERVER_NAME "eigerDetectorServer"
|
||||
|
||||
#define NUM_HARDWARE_VERSIONS (2)
|
||||
#define HARDWARE_VERSION_NUMBERS {0x0, 0x1};
|
||||
#define HARDWARE_VERSION_NAMES \
|
||||
{ "FX70T", "FX30T" }
|
||||
|
||||
#define REQUIRED_FIRMWARE_VERSION (31)
|
||||
#define REQUIRED_FIRMWARE_VERSION (32)
|
||||
// virtual ones renamed for consistency
|
||||
// real ones keep previous name for compatibility (already in production)
|
||||
#ifdef VIRTUAL
|
||||
|
Binary file not shown.
BIN
slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServerv7.0.3
Executable file
Binary file not shown.
@ -3323,6 +3323,27 @@ void *start_timer(void *arg) {
|
||||
break;
|
||||
}
|
||||
|
||||
// change gain and data for every frame
|
||||
{
|
||||
const int nchannels = NCHIP * NCHAN;
|
||||
int gainVal = 0;
|
||||
for (int i = 0; i < nchannels; ++i) {
|
||||
if ((i % nchannels) < 400) {
|
||||
gainVal = 1 + frameNr;
|
||||
} else if ((i % nchannels) < 800) {
|
||||
gainVal = 2 + frameNr;
|
||||
} else {
|
||||
gainVal = 3 + frameNr;
|
||||
}
|
||||
int dataVal =
|
||||
*((uint16_t *)(imageData + i * sizeof(uint16_t)));
|
||||
dataVal += frameNr;
|
||||
int channelVal =
|
||||
(dataVal & ~GAIN_VAL_MSK) | (gainVal << GAIN_VAL_OFST);
|
||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||
(uint16_t)channelVal;
|
||||
}
|
||||
}
|
||||
// sleep for exposure time
|
||||
struct timespec begin, end;
|
||||
clock_gettime(CLOCK_REALTIME, &begin);
|
||||
|
Binary file not shown.
BIN
slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/gotthardDetectorServer/bin/gotthardDetectorServerv7.0.3
Executable file
Binary file not shown.
Binary file not shown.
BIN
slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv7.0.3
Executable file
Binary file not shown.
@ -1388,14 +1388,18 @@ int setMaster(enum MASTERINDEX m) {
|
||||
char *master_names[] = {MASTER_NAMES};
|
||||
LOG(logINFOBLUE, ("Setting up as %s in (%s server)\n", master_names[m],
|
||||
(isControlServer ? "control" : "stop")));
|
||||
|
||||
int prevSync = getSynchronization();
|
||||
setSynchronization(0);
|
||||
int retval = -1;
|
||||
int retMaster = OK;
|
||||
switch (m) {
|
||||
case OW_MASTER:
|
||||
bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_MASTER_MSK);
|
||||
isMaster(&retval);
|
||||
if (retval != 1) {
|
||||
LOG(logERROR, ("Could not set master\n"));
|
||||
return FAIL;
|
||||
retMaster = FAIL;
|
||||
}
|
||||
break;
|
||||
case OW_SLAVE:
|
||||
@ -1403,15 +1407,16 @@ int setMaster(enum MASTERINDEX m) {
|
||||
isMaster(&retval);
|
||||
if (retval != 0) {
|
||||
LOG(logERROR, ("Could not set slave\n"));
|
||||
return FAIL;
|
||||
retMaster = FAIL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(logERROR, ("Cannot reset to hardware settings from client. Restart "
|
||||
"detector server.\n"));
|
||||
return FAIL;
|
||||
retMaster = FAIL;
|
||||
}
|
||||
return OK;
|
||||
setSynchronization(prevSync);
|
||||
return retMaster;
|
||||
}
|
||||
|
||||
int isMaster(int *retval) {
|
||||
@ -1449,7 +1454,7 @@ void setTiming(enum timingMode arg) {
|
||||
}
|
||||
|
||||
enum timingMode getTiming() {
|
||||
if (bus_r(EXT_SIGNAL_REG) == EXT_SIGNAL_MSK)
|
||||
if ((bus_r(EXT_SIGNAL_REG) & EXT_SIGNAL_MSK) >> EXT_SIGNAL_OFST)
|
||||
return TRIGGER_EXPOSURE;
|
||||
return AUTO_TIMING;
|
||||
}
|
||||
@ -1736,40 +1741,40 @@ int setDetectorPosition(int pos[]) {
|
||||
detPos[2] = outerPos[X];
|
||||
detPos[3] = outerPos[Y];
|
||||
|
||||
// row
|
||||
// row [Y]
|
||||
// outer
|
||||
uint32_t addr = COORD_ROW_REG;
|
||||
bus_w(addr,
|
||||
(bus_r(addr) & ~COORD_ROW_OUTER_MSK) |
|
||||
((outerPos[X] << COORD_ROW_OUTER_OFST) & COORD_ROW_OUTER_MSK));
|
||||
((outerPos[Y] << COORD_ROW_OUTER_OFST) & COORD_ROW_OUTER_MSK));
|
||||
if (((bus_r(addr) & COORD_ROW_OUTER_MSK) >> COORD_ROW_OUTER_OFST) !=
|
||||
outerPos[X])
|
||||
ret = FAIL;
|
||||
// inner
|
||||
bus_w(addr,
|
||||
(bus_r(addr) & ~COORD_ROW_INNER_MSK) |
|
||||
((innerPos[X] << COORD_ROW_INNER_OFST) & COORD_ROW_INNER_MSK));
|
||||
if (((bus_r(addr) & COORD_ROW_INNER_MSK) >> COORD_ROW_INNER_OFST) !=
|
||||
innerPos[X])
|
||||
ret = FAIL;
|
||||
|
||||
// col
|
||||
// outer
|
||||
addr = COORD_COL_REG;
|
||||
bus_w(addr,
|
||||
(bus_r(addr) & ~COORD_COL_OUTER_MSK) |
|
||||
((outerPos[Y] << COORD_COL_OUTER_OFST) & COORD_COL_OUTER_MSK));
|
||||
if (((bus_r(addr) & COORD_COL_OUTER_MSK) >> COORD_COL_OUTER_OFST) !=
|
||||
outerPos[Y])
|
||||
ret = FAIL;
|
||||
// inner
|
||||
bus_w(addr,
|
||||
(bus_r(addr) & ~COORD_COL_INNER_MSK) |
|
||||
((innerPos[Y] << COORD_COL_INNER_OFST) & COORD_COL_INNER_MSK));
|
||||
if (((bus_r(addr) & COORD_COL_INNER_MSK) >> COORD_COL_INNER_OFST) !=
|
||||
(bus_r(addr) & ~COORD_ROW_INNER_MSK) |
|
||||
((innerPos[Y] << COORD_ROW_INNER_OFST) & COORD_ROW_INNER_MSK));
|
||||
if (((bus_r(addr) & COORD_ROW_INNER_MSK) >> COORD_ROW_INNER_OFST) !=
|
||||
innerPos[Y])
|
||||
ret = FAIL;
|
||||
|
||||
// col [X]
|
||||
// outer
|
||||
addr = COORD_COL_REG;
|
||||
bus_w(addr,
|
||||
(bus_r(addr) & ~COORD_COL_OUTER_MSK) |
|
||||
((outerPos[X] << COORD_COL_OUTER_OFST) & COORD_COL_OUTER_MSK));
|
||||
if (((bus_r(addr) & COORD_COL_OUTER_MSK) >> COORD_COL_OUTER_OFST) !=
|
||||
outerPos[X])
|
||||
ret = FAIL;
|
||||
// inner
|
||||
bus_w(addr,
|
||||
(bus_r(addr) & ~COORD_COL_INNER_MSK) |
|
||||
((innerPos[X] << COORD_COL_INNER_OFST) & COORD_COL_INNER_MSK));
|
||||
if (((bus_r(addr) & COORD_COL_INNER_MSK) >> COORD_COL_INNER_OFST) !=
|
||||
innerPos[X])
|
||||
ret = FAIL;
|
||||
|
||||
if (ret == OK) {
|
||||
if (getNumberofUDPInterfaces() == 1) {
|
||||
LOG(logINFOBLUE, ("Position set to [%d, %d] #(col, row)\n",
|
||||
@ -2627,6 +2632,7 @@ void *start_timer(void *arg) {
|
||||
if (i % pixelsPerPacket == 0) {
|
||||
++dataVal;
|
||||
}
|
||||
|
||||
if ((i % 1024) < 300) {
|
||||
gainVal = 1;
|
||||
} else if ((i % 1024) < 600) {
|
||||
@ -2667,6 +2673,28 @@ void *start_timer(void *arg) {
|
||||
clock_gettime(CLOCK_REALTIME, &begin);
|
||||
usleep(expUs);
|
||||
|
||||
// change gain and data for every frame
|
||||
{
|
||||
const int npixels = (NCHAN * NCHIP);
|
||||
for (int i = 0; i < npixels; ++i) {
|
||||
int gainVal = 0;
|
||||
if ((i % 1024) < 300) {
|
||||
gainVal = 1 + iframes;
|
||||
} else if ((i % 1024) < 600) {
|
||||
gainVal = 2 + iframes;
|
||||
} else {
|
||||
gainVal = 3 + iframes;
|
||||
}
|
||||
int dataVal =
|
||||
*((uint16_t *)(imageData + i * sizeof(uint16_t)));
|
||||
dataVal += iframes;
|
||||
int pixelVal =
|
||||
(dataVal & ~GAIN_VAL_MSK) | (gainVal << GAIN_VAL_OFST);
|
||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||
(uint16_t)pixelVal;
|
||||
}
|
||||
}
|
||||
|
||||
int srcOffset = 0;
|
||||
int srcOffset2 = DATA_BYTES / 2;
|
||||
int row0 = (numInterfaces == 1 ? detPos[1] : detPos[3]);
|
||||
|
@ -5,8 +5,8 @@
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
#define MIN_REQRD_VRSN_T_RD_API 0x171220
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x221104 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x221103 // 2.0 pcb (version = 011)
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x230516 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x230515 // 2.0 pcb (version = 011)
|
||||
|
||||
#define NUM_HARDWARE_VERSIONS (2)
|
||||
#define HARDWARE_VERSION_NUMBERS \
|
||||
|
@ -8,28 +8,35 @@ add_executable(moenchDetectorServer_virtual
|
||||
../slsDetectorServer/src/blackfin.c
|
||||
../slsDetectorServer/src/common.c
|
||||
../slsDetectorServer/src/commonServerFunctions.c
|
||||
../slsDetectorServer/src/communication_funcs_UDP.c
|
||||
../slsDetectorServer/src/UDPPacketHeaderGenerator.c
|
||||
../slsDetectorServer/src/AD9257.c
|
||||
../slsDetectorServer/src/ALTERA_PLL.c
|
||||
../slsDetectorServer/src/LTC2620.c
|
||||
../slsDetectorServer/src/MAX1932.c
|
||||
../slsDetectorServer/src/programViaBlackfin.c
|
||||
../slsDetectorServer/src/communication_funcs_UDP.c
|
||||
../slsDetectorServer/src/programViaBlackfin.c
|
||||
../slsDetectorServer/src/loadPattern.c
|
||||
../slsDetectorServer/src/sharedMemory.c
|
||||
../../slsSupportLib/src/md5.c
|
||||
)
|
||||
|
||||
target_include_directories(moenchDetectorServer_virtual
|
||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
include_directories(
|
||||
../slsDetectorServer/include
|
||||
../../slsSupportLib/include
|
||||
../../slsDetectorSoftware/include/sls/
|
||||
)
|
||||
|
||||
target_include_directories(moenchDetectorServer_virtual
|
||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
target_compile_definitions(moenchDetectorServer_virtual
|
||||
PUBLIC MOENCHD VIRTUAL STOP_SERVER #TEST_MOD_GEOMETRY
|
||||
PUBLIC MOENCHD VIRTUAL STOP_SERVER
|
||||
)
|
||||
|
||||
target_link_libraries(moenchDetectorServer_virtual
|
||||
PUBLIC pthread rt slsProjectCSettings
|
||||
m
|
||||
)
|
||||
|
||||
set_target_properties(moenchDetectorServer_virtual PROPERTIES
|
||||
@ -37,9 +44,7 @@ set_target_properties(moenchDetectorServer_virtual PROPERTIES
|
||||
)
|
||||
|
||||
install(TARGETS moenchDetectorServer_virtual
|
||||
EXPORT "${TARGETS_EXPORT_NAME}"
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
|
||||
configure_file(config_moench.txt ${CMAKE_BINARY_DIR}/bin/config_moench.txt COPYONLY)
|
||||
configure_file(detid_moench.txt ${CMAKE_BINARY_DIR}/bin/detid_moench.txt COPYONLY)
|
||||
configure_file(DefaultPattern_moench.txt ${CMAKE_BINARY_DIR}/bin/DefaultPattern_moench.txt COPYONLY)
|
301
slsDetectorServers/moenchDetectorServer/DefaultPattern_moench.txt
Executable file
301
slsDetectorServers/moenchDetectorServer/DefaultPattern_moench.txt
Executable file
@ -0,0 +1,301 @@
|
||||
patword 0x0000 0x0008599f0418503a
|
||||
patword 0x0001 0x0008599f0418503a
|
||||
patword 0x0002 0x000859960418503a
|
||||
patword 0x0003 0x000859960418503a
|
||||
patword 0x0004 0x000859960418503a
|
||||
patword 0x0005 0x000859960418503a
|
||||
patword 0x0006 0x000859960418503a
|
||||
patword 0x0007 0x000859960418503a
|
||||
patword 0x0008 0x000859960418503a
|
||||
patword 0x0009 0x000859960418503a
|
||||
patword 0x000a 0x000859960418503a
|
||||
patword 0x000b 0x000859960418503a
|
||||
patword 0x000c 0x000859960418503a
|
||||
patword 0x000d 0x000859960418503a
|
||||
patword 0x000e 0x000859960418503a
|
||||
patword 0x000f 0x000859960418503a
|
||||
patword 0x0010 0x000859960418503a
|
||||
patword 0x0011 0x000859960418503a
|
||||
patword 0x0012 0x000859960418503a
|
||||
patword 0x0013 0x000859960418503a
|
||||
patword 0x0014 0x000859960418503a
|
||||
patword 0x0015 0x000859960418503a
|
||||
patword 0x0016 0x000819960418501a
|
||||
patword 0x0017 0x000819960418501a
|
||||
patword 0x0018 0x000819960418501a
|
||||
patword 0x0019 0x000819960418501a
|
||||
patword 0x001a 0x000819960418501a
|
||||
patword 0x001b 0x000819960418501a
|
||||
patword 0x001c 0x000819960418501a
|
||||
patword 0x001d 0x000819960418501a
|
||||
patword 0x001e 0x000819960418501a
|
||||
patword 0x001f 0x000819960418501a
|
||||
patword 0x0020 0x000819960418501a
|
||||
patword 0x0021 0x000819960418501a
|
||||
patword 0x0022 0x000819960418501a
|
||||
patword 0x0023 0x000819960418501a
|
||||
patword 0x0024 0x000819960418501a
|
||||
patword 0x0025 0x000819960418501a
|
||||
patword 0x0026 0x000819960418501a
|
||||
patword 0x0027 0x000819960418501a
|
||||
patword 0x0028 0x000819960418501a
|
||||
patword 0x0029 0x000819960418501a
|
||||
patword 0x002a 0x000819960418501a
|
||||
patword 0x002b 0x000819960418501a
|
||||
patword 0x002c 0x000819960418501a
|
||||
patword 0x002d 0x000819960418501a
|
||||
patword 0x002e 0x000819960418501a
|
||||
patword 0x002f 0x000819960418501a
|
||||
patword 0x0030 0x000819960008501a
|
||||
patword 0x0031 0x000819960008501a
|
||||
patword 0x0032 0x000819960008501a
|
||||
patword 0x0033 0x000819960008501a
|
||||
patword 0x0034 0x000819960008501a
|
||||
patword 0x0035 0x000819960008501a
|
||||
patword 0x0036 0x000819960008501a
|
||||
patword 0x0037 0x000819960008501a
|
||||
patword 0x0038 0x000819960008501a
|
||||
patword 0x0039 0x000819960008501a
|
||||
patword 0x003a 0x000819960008501a
|
||||
patword 0x003b 0x000819960008501a
|
||||
patword 0x003c 0x000819960008501a
|
||||
patword 0x003d 0x000819960008501a
|
||||
patword 0x003e 0x000819960008501a
|
||||
patword 0x003f 0x000819960008501a
|
||||
patword 0x0040 0x000819960008501a
|
||||
patword 0x0041 0x000819960008501a
|
||||
patword 0x0042 0x000819960008501a
|
||||
patword 0x0043 0x000819960008501a
|
||||
patword 0x0044 0x0008199f0008501a
|
||||
patword 0x0045 0x0008199f0008501a
|
||||
patword 0x0046 0x0008199f0008501a
|
||||
patword 0x0047 0x0008199f0008501a
|
||||
patword 0x0048 0x0008199f0008501a
|
||||
patword 0x0049 0x0008199f0008501a
|
||||
patword 0x004a 0x0008199f0008501a
|
||||
patword 0x004b 0x0008199f0008501a
|
||||
patword 0x004c 0x0008199f0008501a
|
||||
patword 0x004d 0x0008199f0008501a
|
||||
patword 0x004e 0x0008199f0008501a
|
||||
patword 0x004f 0x0008199f0008501a
|
||||
patword 0x0050 0x0008199f0008501a
|
||||
patword 0x0051 0x0008199f0008501a
|
||||
patword 0x0052 0x0008199f0008501a
|
||||
patword 0x0053 0x0008199f0008501a
|
||||
patword 0x0054 0x0008199f0008501a
|
||||
patword 0x0055 0x0008199f0008501a
|
||||
patword 0x0056 0x0008199f0008501a
|
||||
patword 0x0057 0x0008199f0008501a
|
||||
patword 0x0058 0x0008599f0008503a
|
||||
patword 0x0059 0x0008599f0008503a
|
||||
patword 0x005a 0x000c599f000850ba
|
||||
patword 0x005b 0x000c599f000850ba
|
||||
patword 0x005c 0x000c599f000850ba
|
||||
patword 0x005d 0x000c599f000850ba
|
||||
patword 0x005e 0x000c599f000850ba
|
||||
patword 0x005f 0x000c599f000850ba
|
||||
patword 0x0060 0x000c599f000850ba
|
||||
patword 0x0061 0x000c599f000850ba
|
||||
patword 0x0062 0x000c599f000850ba
|
||||
patword 0x0063 0x000c599f000850ba
|
||||
patword 0x0064 0x000c599f000850ba
|
||||
patword 0x0065 0x000c599f000850ba
|
||||
patword 0x0066 0x000c599f000850ba
|
||||
patword 0x0067 0x000c599f000850ba
|
||||
patword 0x0068 0x000c599f000850ba
|
||||
patword 0x0069 0x000c599f000850ba
|
||||
patword 0x006a 0x000c599f000850ba
|
||||
patword 0x006b 0x000c599f000850ba
|
||||
patword 0x006c 0x000c599f000850ba
|
||||
patword 0x006d 0x000c599f000850ba
|
||||
patword 0x006e 0x000c799f010858ba
|
||||
patword 0x006f 0x000c799f010858ba
|
||||
patword 0x0070 0x000c599f000850ba
|
||||
patword 0x0071 0x000c599f000850ba
|
||||
patword 0x0072 0x000c599f000850ba
|
||||
patword 0x0073 0x000c599f000850ba
|
||||
patword 0x0074 0x000c599f000850ba
|
||||
patword 0x0075 0x000c599f000850ba
|
||||
patword 0x0076 0x000c599f000850ba
|
||||
patword 0x0077 0x000c599f000850ba
|
||||
patword 0x0078 0x000c599f000850ba
|
||||
patword 0x0079 0x000c599f000850ba
|
||||
patword 0x007a 0x000c599f000850ba
|
||||
patword 0x007b 0x000c599f000850ba
|
||||
patword 0x007c 0x000c599f000850ba
|
||||
patword 0x007d 0x000c599f000850ba
|
||||
patword 0x007e 0x000c599f000850ba
|
||||
patword 0x007f 0x000c599f000850ba
|
||||
patword 0x0080 0x000c599f000850ba
|
||||
patword 0x0081 0x000c599f000850ba
|
||||
patword 0x0082 0x000c599f000850ba
|
||||
patword 0x0083 0x000c599f000850ba
|
||||
patword 0x0084 0x000c599f000850ba
|
||||
patword 0x0085 0x000c599f000850ba
|
||||
patword 0x0086 0x000c599f400850ba
|
||||
patword 0x0087 0x000c599f400850ba
|
||||
patword 0x0088 0x000c599f600850ba
|
||||
patword 0x0089 0x000c599f400850ba
|
||||
patword 0x008a 0x000c599f400850ba
|
||||
patword 0x008b 0x000c599f400850ba
|
||||
patword 0x008c 0x840c599f682e50ba
|
||||
patword 0x008d 0x840c599f482850ba
|
||||
patword 0x008e 0x840c599f000e50ba
|
||||
patword 0x008f 0x840c599f000850ba
|
||||
patword 0x0090 0x840c599f000e50ba
|
||||
patword 0x0091 0x840c599f000850ba
|
||||
patword 0x0092 0x840c599f000e50ba
|
||||
patword 0x0093 0x840c599f000850ba
|
||||
patword 0x0094 0x840c599f000e50ba
|
||||
patword 0x0095 0x840c599f000850ba
|
||||
patword 0x0096 0x840c599f000e50ba
|
||||
patword 0x0097 0x840c599f000850ba
|
||||
patword 0x0098 0x840c599f000e50ba
|
||||
patword 0x0099 0x840c599f000850ba
|
||||
patword 0x009a 0x840c599f000e50ba
|
||||
patword 0x009b 0x840c599f000850ba
|
||||
patword 0x009c 0x840c599f000e50ba
|
||||
patword 0x009d 0x840c599f000850ba
|
||||
patword 0x009e 0x840c599f000e50ba
|
||||
patword 0x009f 0x840c599f000850ba
|
||||
patword 0x00a0 0x840c599f000e50ba
|
||||
patword 0x00a1 0x840c599f000850ba
|
||||
patword 0x00a2 0x840c599f000e50ba
|
||||
patword 0x00a3 0x840c599f000850ba
|
||||
patword 0x00a4 0x840c599f000e50ba
|
||||
patword 0x00a5 0x840c599f000850ba
|
||||
patword 0x00a6 0x840c599f200e50ba
|
||||
patword 0x00a7 0x840c599f000850ba
|
||||
patword 0x00a8 0x840c599f000e50ba
|
||||
patword 0x00a9 0x840c599f000850ba
|
||||
patword 0x00aa 0x840c599f000e50ba
|
||||
patword 0x00ab 0x840c599f000850ba
|
||||
patword 0x00ac 0x840c599f000e50ba
|
||||
patword 0x00ad 0x840c599f000850ba
|
||||
patword 0x00ae 0x840c599f000e50ba
|
||||
patword 0x00af 0x840c599f000850ba
|
||||
patword 0x00b0 0x840c599f000e50ba
|
||||
patword 0x00b1 0x840c599f000850ba
|
||||
patword 0x00b2 0x840c599f000e50ba
|
||||
patword 0x00b3 0x840c599f000850ba
|
||||
patword 0x00b4 0x840c599f000e50ba
|
||||
patword 0x00b5 0x840c599f000850ba
|
||||
patword 0x00b6 0x840c599f000e50ba
|
||||
patword 0x00b7 0x840c599f000850ba
|
||||
patword 0x00b8 0x840c599f000e50ba
|
||||
patword 0x00b9 0x840c599f000850ba
|
||||
patword 0x00ba 0x840c599f000e50ba
|
||||
patword 0x00bb 0x840c599f000850ba
|
||||
patword 0x00bc 0x840c599f000e50ba
|
||||
patword 0x00bd 0x840c599f000850ba
|
||||
patword 0x00be 0x840c599f282e50ba
|
||||
patword 0x00bf 0x840c599f082850ba
|
||||
patword 0x00c0 0x840c599f000e50ba
|
||||
patword 0x00c1 0x840c599f000850ba
|
||||
patword 0x00c2 0x840c599f000e50ba
|
||||
patword 0x00c3 0x840c599f000850ba
|
||||
patword 0x00c4 0x840c599f000e50ba
|
||||
patword 0x00c5 0x840c599f000850ba
|
||||
patword 0x00c6 0x840c599f000e50ba
|
||||
patword 0x00c7 0x840c599f000850ba
|
||||
patword 0x00c8 0x840c599f000e50ba
|
||||
patword 0x00c9 0x840c599f000850ba
|
||||
patword 0x00ca 0x840c599f000e50ba
|
||||
patword 0x00cb 0x840c599f000850ba
|
||||
patword 0x00cc 0x840c599f000e50ba
|
||||
patword 0x00cd 0x840c599f000850ba
|
||||
patword 0x00ce 0x840c599f000e50ba
|
||||
patword 0x00cf 0x840c599f000850ba
|
||||
patword 0x00d0 0x840c599f000e50ba
|
||||
patword 0x00d1 0x840c599f000850ba
|
||||
patword 0x00d2 0x840c599f000e50ba
|
||||
patword 0x00d3 0x840c599f000850ba
|
||||
patword 0x00d4 0x840c599f000e50ba
|
||||
patword 0x00d5 0x840c599f000850ba
|
||||
patword 0x00d6 0x840c599f000e50ba
|
||||
patword 0x00d7 0x840c599f000850ba
|
||||
patword 0x00d8 0x840c599f200e50ba
|
||||
patword 0x00d9 0x840c599f000850ba
|
||||
patword 0x00da 0x840c599f000e50ba
|
||||
patword 0x00db 0x840c599f000850ba
|
||||
patword 0x00dc 0x840c599f000e50ba
|
||||
patword 0x00dd 0x840c599f000850ba
|
||||
patword 0x00de 0x840c599f000e50ba
|
||||
patword 0x00df 0x840c599f000850ba
|
||||
patword 0x00e0 0x840c599f000e50ba
|
||||
patword 0x00e1 0x840c599f000850ba
|
||||
patword 0x00e2 0x840c599f000e50ba
|
||||
patword 0x00e3 0x840c599f000850ba
|
||||
patword 0x00e4 0x840c599f000e50ba
|
||||
patword 0x00e5 0x840c599f000850ba
|
||||
patword 0x00e6 0x840c599f000e50ba
|
||||
patword 0x00e7 0x840c599f000850ba
|
||||
patword 0x00e8 0x840c599f000e50ba
|
||||
patword 0x00e9 0x840c599f000850ba
|
||||
patword 0x00ea 0x840c599f000e50ba
|
||||
patword 0x00eb 0x840c599f000850ba
|
||||
patword 0x00ec 0x840c599f000e50ba
|
||||
patword 0x00ed 0x840c599f000850ba
|
||||
patword 0x00ee 0x840c599f000e50ba
|
||||
patword 0x00ef 0x840c599f000850ba
|
||||
patword 0x00f0 0x040c599f000850ba
|
||||
patword 0x00f1 0x040c599f000850ba
|
||||
patword 0x00f2 0x000c599f000850ba
|
||||
patword 0x00f3 0x000c599f000850ba
|
||||
patword 0x00f4 0x0008599f200e503a
|
||||
patword 0x00f5 0x0008599f0008503a
|
||||
patword 0x00f6 0x0008599f200e503a
|
||||
patword 0x00f7 0x0008599f0008503a
|
||||
patword 0x00f8 0x0008599f0008503a
|
||||
patword 0x00f9 0x0008599f0008503a
|
||||
patword 0x00fa 0x0008599f0008503a
|
||||
patword 0x00fb 0x0008599f0008503a
|
||||
patword 0x00fc 0x0008599f0008503a
|
||||
patword 0x00fd 0x0008599f0008503a
|
||||
patword 0x00fe 0x0008599f0008503a
|
||||
patword 0x00ff 0x0008599f0008503a
|
||||
patword 0x0100 0x0008599f0008503a
|
||||
patword 0x0101 0x0008599f0008503a
|
||||
patword 0x0102 0x0008599f0008503a
|
||||
patword 0x0103 0x0008599f0008503a
|
||||
patword 0x0104 0x0008599f0008503a
|
||||
patword 0x0105 0x0008599f0008503a
|
||||
patword 0x0106 0x0008599f0008503a
|
||||
patword 0x0107 0x0008599f0008503a
|
||||
patword 0x0108 0x0008599f0008503a
|
||||
patword 0x0109 0x0008599f0008503a
|
||||
patword 0x010a 0x0008599f0008503a
|
||||
patword 0x010b 0x0008599f0008503a
|
||||
patword 0x010c 0x0008599f0008503a
|
||||
patword 0x010d 0x0008599f0008503a
|
||||
patword 0x010e 0x0008599f0008503a
|
||||
patword 0x010f 0x0008599f0008503a
|
||||
patword 0x0110 0x0008599f0008503a
|
||||
patword 0x0111 0x0008599f0008503a
|
||||
patioctrl 0x8f0effff6dbffdbf
|
||||
patlimits 0x0000 0x0110
|
||||
patloop 0 0x00be 0x00ef
|
||||
patnloop 0 199
|
||||
patloop 1 0x0400 0x0400
|
||||
patnloop 1 0
|
||||
patloop 2 0x0400 0x0400
|
||||
patnloop 2 0
|
||||
patwait 0 0x002e
|
||||
patwaittime 0 800
|
||||
patwait 1 0x0400
|
||||
patwaittime 1 0
|
||||
patwait 2 0x0400
|
||||
patwaittime 2 0
|
||||
|
||||
patloop 3 0x1fff 0x1fff
|
||||
patnloop 3 0
|
||||
patloop 4 0x1fff 0x1fff
|
||||
patnloop 4 0
|
||||
patloop 5 0x1fff 0x1fff
|
||||
patnloop 5 0
|
||||
patwait 3 0x1fff
|
||||
patwaittime 3 0
|
||||
patwait 4 0x1fff
|
||||
patwaittime 4 0
|
||||
patwait 5 0x1fff
|
||||
patwaittime 5 0
|
@ -4,21 +4,22 @@ current_dir = $(shell pwd)
|
||||
main_inc = ../slsDetectorServer/include/
|
||||
main_src = ../slsDetectorServer/src/
|
||||
support_lib = ../../slsSupportLib/include/
|
||||
det_lib = ../../slsDetectorSoftware/include/sls/
|
||||
md5_dir = ../../slsSupportLib/src/
|
||||
|
||||
CROSS = bfin-uclinux-
|
||||
CC = $(CROSS)gcc
|
||||
CFLAGS += -Wall -std=gnu99 -DMOENCHD -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(current_dir) #-DVERBOSEI #-DVERBOSE
|
||||
LDLIBS += -lm -lrt -pthread
|
||||
CFLAGS += -Wall -std=gnu99 -DMOENCHD -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(det_lib) -I$(current_dir) #-DVERBOSEI #-DVERBOSE
|
||||
LDLIBS += -lm -lrt -pthread
|
||||
PROGS = moenchDetectorServer
|
||||
DESTDIR ?= bin
|
||||
INSTMODE = 0777
|
||||
|
||||
SRCS = slsDetectorFunctionList.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)blackfin.c $(main_src)common.c $(main_src)commonServerFunctions.c $(main_src)AD9257.c $(main_src)ALTERA_PLL.c $(main_src)LTC2620.c $(main_src)MAX1932.c $(main_src)programViaBlackfin.c $(main_src)/sharedMemory.c $(md5_dir)md5.c
|
||||
SRCS = slsDetectorFunctionList.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)blackfin.c $(main_src)common.c $(main_src)commonServerFunctions.c $(main_src)communication_funcs_UDP.c $(main_src)UDPPacketHeaderGenerator.c $(main_src)AD9257.c $(main_src)ALTERA_PLL.c $(main_src)LTC2620.c $(main_src)MAX1932.c $(main_src)programViaBlackfin.c $(main_src)loadPattern.c $(main_src)/sharedMemory.c $(md5_dir)md5.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
all: clean $(PROGS)
|
||||
version: clean versioning $(PROGS)
|
||||
|
||||
@ -34,12 +35,12 @@ versioning:
|
||||
$(PROGS): $(OBJS)
|
||||
# echo $(OBJS)
|
||||
mkdir -p $(DESTDIR)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
|
||||
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
|
||||
mv $(PROGS) $(DESTDIR)
|
||||
cp config_moench.txt $(DESTDIR)
|
||||
cp detid_moench.txt $(DESTDIR)
|
||||
cp DefaultPattern_moench.txt $(DESTDIR)
|
||||
rm *.gdb
|
||||
rm $(main_src)*.o $(md5_dir)*.o
|
||||
rm $(main_src)*.o
|
||||
rm *.o $(md5_dir)*.o
|
||||
|
||||
clean:
|
||||
rm -rf $(DESTDIR)/$(PROGS) *.o *.gdb $(main_src)*.o $(md5_dir)*.o
|
||||
|
File diff suppressed because it is too large
Load Diff
301
slsDetectorServers/moenchDetectorServer/bin/DefaultPattern_moench.txt
Executable file
301
slsDetectorServers/moenchDetectorServer/bin/DefaultPattern_moench.txt
Executable file
@ -0,0 +1,301 @@
|
||||
patword 0x0000 0x0008599f0418503a
|
||||
patword 0x0001 0x0008599f0418503a
|
||||
patword 0x0002 0x000859960418503a
|
||||
patword 0x0003 0x000859960418503a
|
||||
patword 0x0004 0x000859960418503a
|
||||
patword 0x0005 0x000859960418503a
|
||||
patword 0x0006 0x000859960418503a
|
||||
patword 0x0007 0x000859960418503a
|
||||
patword 0x0008 0x000859960418503a
|
||||
patword 0x0009 0x000859960418503a
|
||||
patword 0x000a 0x000859960418503a
|
||||
patword 0x000b 0x000859960418503a
|
||||
patword 0x000c 0x000859960418503a
|
||||
patword 0x000d 0x000859960418503a
|
||||
patword 0x000e 0x000859960418503a
|
||||
patword 0x000f 0x000859960418503a
|
||||
patword 0x0010 0x000859960418503a
|
||||
patword 0x0011 0x000859960418503a
|
||||
patword 0x0012 0x000859960418503a
|
||||
patword 0x0013 0x000859960418503a
|
||||
patword 0x0014 0x000859960418503a
|
||||
patword 0x0015 0x000859960418503a
|
||||
patword 0x0016 0x000819960418501a
|
||||
patword 0x0017 0x000819960418501a
|
||||
patword 0x0018 0x000819960418501a
|
||||
patword 0x0019 0x000819960418501a
|
||||
patword 0x001a 0x000819960418501a
|
||||
patword 0x001b 0x000819960418501a
|
||||
patword 0x001c 0x000819960418501a
|
||||
patword 0x001d 0x000819960418501a
|
||||
patword 0x001e 0x000819960418501a
|
||||
patword 0x001f 0x000819960418501a
|
||||
patword 0x0020 0x000819960418501a
|
||||
patword 0x0021 0x000819960418501a
|
||||
patword 0x0022 0x000819960418501a
|
||||
patword 0x0023 0x000819960418501a
|
||||
patword 0x0024 0x000819960418501a
|
||||
patword 0x0025 0x000819960418501a
|
||||
patword 0x0026 0x000819960418501a
|
||||
patword 0x0027 0x000819960418501a
|
||||
patword 0x0028 0x000819960418501a
|
||||
patword 0x0029 0x000819960418501a
|
||||
patword 0x002a 0x000819960418501a
|
||||
patword 0x002b 0x000819960418501a
|
||||
patword 0x002c 0x000819960418501a
|
||||
patword 0x002d 0x000819960418501a
|
||||
patword 0x002e 0x000819960418501a
|
||||
patword 0x002f 0x000819960418501a
|
||||
patword 0x0030 0x000819960008501a
|
||||
patword 0x0031 0x000819960008501a
|
||||
patword 0x0032 0x000819960008501a
|
||||
patword 0x0033 0x000819960008501a
|
||||
patword 0x0034 0x000819960008501a
|
||||
patword 0x0035 0x000819960008501a
|
||||
patword 0x0036 0x000819960008501a
|
||||
patword 0x0037 0x000819960008501a
|
||||
patword 0x0038 0x000819960008501a
|
||||
patword 0x0039 0x000819960008501a
|
||||
patword 0x003a 0x000819960008501a
|
||||
patword 0x003b 0x000819960008501a
|
||||
patword 0x003c 0x000819960008501a
|
||||
patword 0x003d 0x000819960008501a
|
||||
patword 0x003e 0x000819960008501a
|
||||
patword 0x003f 0x000819960008501a
|
||||
patword 0x0040 0x000819960008501a
|
||||
patword 0x0041 0x000819960008501a
|
||||
patword 0x0042 0x000819960008501a
|
||||
patword 0x0043 0x000819960008501a
|
||||
patword 0x0044 0x0008199f0008501a
|
||||
patword 0x0045 0x0008199f0008501a
|
||||
patword 0x0046 0x0008199f0008501a
|
||||
patword 0x0047 0x0008199f0008501a
|
||||
patword 0x0048 0x0008199f0008501a
|
||||
patword 0x0049 0x0008199f0008501a
|
||||
patword 0x004a 0x0008199f0008501a
|
||||
patword 0x004b 0x0008199f0008501a
|
||||
patword 0x004c 0x0008199f0008501a
|
||||
patword 0x004d 0x0008199f0008501a
|
||||
patword 0x004e 0x0008199f0008501a
|
||||
patword 0x004f 0x0008199f0008501a
|
||||
patword 0x0050 0x0008199f0008501a
|
||||
patword 0x0051 0x0008199f0008501a
|
||||
patword 0x0052 0x0008199f0008501a
|
||||
patword 0x0053 0x0008199f0008501a
|
||||
patword 0x0054 0x0008199f0008501a
|
||||
patword 0x0055 0x0008199f0008501a
|
||||
patword 0x0056 0x0008199f0008501a
|
||||
patword 0x0057 0x0008199f0008501a
|
||||
patword 0x0058 0x0008599f0008503a
|
||||
patword 0x0059 0x0008599f0008503a
|
||||
patword 0x005a 0x000c599f000850ba
|
||||
patword 0x005b 0x000c599f000850ba
|
||||
patword 0x005c 0x000c599f000850ba
|
||||
patword 0x005d 0x000c599f000850ba
|
||||
patword 0x005e 0x000c599f000850ba
|
||||
patword 0x005f 0x000c599f000850ba
|
||||
patword 0x0060 0x000c599f000850ba
|
||||
patword 0x0061 0x000c599f000850ba
|
||||
patword 0x0062 0x000c599f000850ba
|
||||
patword 0x0063 0x000c599f000850ba
|
||||
patword 0x0064 0x000c599f000850ba
|
||||
patword 0x0065 0x000c599f000850ba
|
||||
patword 0x0066 0x000c599f000850ba
|
||||
patword 0x0067 0x000c599f000850ba
|
||||
patword 0x0068 0x000c599f000850ba
|
||||
patword 0x0069 0x000c599f000850ba
|
||||
patword 0x006a 0x000c599f000850ba
|
||||
patword 0x006b 0x000c599f000850ba
|
||||
patword 0x006c 0x000c599f000850ba
|
||||
patword 0x006d 0x000c599f000850ba
|
||||
patword 0x006e 0x000c799f010858ba
|
||||
patword 0x006f 0x000c799f010858ba
|
||||
patword 0x0070 0x000c599f000850ba
|
||||
patword 0x0071 0x000c599f000850ba
|
||||
patword 0x0072 0x000c599f000850ba
|
||||
patword 0x0073 0x000c599f000850ba
|
||||
patword 0x0074 0x000c599f000850ba
|
||||
patword 0x0075 0x000c599f000850ba
|
||||
patword 0x0076 0x000c599f000850ba
|
||||
patword 0x0077 0x000c599f000850ba
|
||||
patword 0x0078 0x000c599f000850ba
|
||||
patword 0x0079 0x000c599f000850ba
|
||||
patword 0x007a 0x000c599f000850ba
|
||||
patword 0x007b 0x000c599f000850ba
|
||||
patword 0x007c 0x000c599f000850ba
|
||||
patword 0x007d 0x000c599f000850ba
|
||||
patword 0x007e 0x000c599f000850ba
|
||||
patword 0x007f 0x000c599f000850ba
|
||||
patword 0x0080 0x000c599f000850ba
|
||||
patword 0x0081 0x000c599f000850ba
|
||||
patword 0x0082 0x000c599f000850ba
|
||||
patword 0x0083 0x000c599f000850ba
|
||||
patword 0x0084 0x000c599f000850ba
|
||||
patword 0x0085 0x000c599f000850ba
|
||||
patword 0x0086 0x000c599f400850ba
|
||||
patword 0x0087 0x000c599f400850ba
|
||||
patword 0x0088 0x000c599f600850ba
|
||||
patword 0x0089 0x000c599f400850ba
|
||||
patword 0x008a 0x000c599f400850ba
|
||||
patword 0x008b 0x000c599f400850ba
|
||||
patword 0x008c 0x840c599f682e50ba
|
||||
patword 0x008d 0x840c599f482850ba
|
||||
patword 0x008e 0x840c599f000e50ba
|
||||
patword 0x008f 0x840c599f000850ba
|
||||
patword 0x0090 0x840c599f000e50ba
|
||||
patword 0x0091 0x840c599f000850ba
|
||||
patword 0x0092 0x840c599f000e50ba
|
||||
patword 0x0093 0x840c599f000850ba
|
||||
patword 0x0094 0x840c599f000e50ba
|
||||
patword 0x0095 0x840c599f000850ba
|
||||
patword 0x0096 0x840c599f000e50ba
|
||||
patword 0x0097 0x840c599f000850ba
|
||||
patword 0x0098 0x840c599f000e50ba
|
||||
patword 0x0099 0x840c599f000850ba
|
||||
patword 0x009a 0x840c599f000e50ba
|
||||
patword 0x009b 0x840c599f000850ba
|
||||
patword 0x009c 0x840c599f000e50ba
|
||||
patword 0x009d 0x840c599f000850ba
|
||||
patword 0x009e 0x840c599f000e50ba
|
||||
patword 0x009f 0x840c599f000850ba
|
||||
patword 0x00a0 0x840c599f000e50ba
|
||||
patword 0x00a1 0x840c599f000850ba
|
||||
patword 0x00a2 0x840c599f000e50ba
|
||||
patword 0x00a3 0x840c599f000850ba
|
||||
patword 0x00a4 0x840c599f000e50ba
|
||||
patword 0x00a5 0x840c599f000850ba
|
||||
patword 0x00a6 0x840c599f200e50ba
|
||||
patword 0x00a7 0x840c599f000850ba
|
||||
patword 0x00a8 0x840c599f000e50ba
|
||||
patword 0x00a9 0x840c599f000850ba
|
||||
patword 0x00aa 0x840c599f000e50ba
|
||||
patword 0x00ab 0x840c599f000850ba
|
||||
patword 0x00ac 0x840c599f000e50ba
|
||||
patword 0x00ad 0x840c599f000850ba
|
||||
patword 0x00ae 0x840c599f000e50ba
|
||||
patword 0x00af 0x840c599f000850ba
|
||||
patword 0x00b0 0x840c599f000e50ba
|
||||
patword 0x00b1 0x840c599f000850ba
|
||||
patword 0x00b2 0x840c599f000e50ba
|
||||
patword 0x00b3 0x840c599f000850ba
|
||||
patword 0x00b4 0x840c599f000e50ba
|
||||
patword 0x00b5 0x840c599f000850ba
|
||||
patword 0x00b6 0x840c599f000e50ba
|
||||
patword 0x00b7 0x840c599f000850ba
|
||||
patword 0x00b8 0x840c599f000e50ba
|
||||
patword 0x00b9 0x840c599f000850ba
|
||||
patword 0x00ba 0x840c599f000e50ba
|
||||
patword 0x00bb 0x840c599f000850ba
|
||||
patword 0x00bc 0x840c599f000e50ba
|
||||
patword 0x00bd 0x840c599f000850ba
|
||||
patword 0x00be 0x840c599f282e50ba
|
||||
patword 0x00bf 0x840c599f082850ba
|
||||
patword 0x00c0 0x840c599f000e50ba
|
||||
patword 0x00c1 0x840c599f000850ba
|
||||
patword 0x00c2 0x840c599f000e50ba
|
||||
patword 0x00c3 0x840c599f000850ba
|
||||
patword 0x00c4 0x840c599f000e50ba
|
||||
patword 0x00c5 0x840c599f000850ba
|
||||
patword 0x00c6 0x840c599f000e50ba
|
||||
patword 0x00c7 0x840c599f000850ba
|
||||
patword 0x00c8 0x840c599f000e50ba
|
||||
patword 0x00c9 0x840c599f000850ba
|
||||
patword 0x00ca 0x840c599f000e50ba
|
||||
patword 0x00cb 0x840c599f000850ba
|
||||
patword 0x00cc 0x840c599f000e50ba
|
||||
patword 0x00cd 0x840c599f000850ba
|
||||
patword 0x00ce 0x840c599f000e50ba
|
||||
patword 0x00cf 0x840c599f000850ba
|
||||
patword 0x00d0 0x840c599f000e50ba
|
||||
patword 0x00d1 0x840c599f000850ba
|
||||
patword 0x00d2 0x840c599f000e50ba
|
||||
patword 0x00d3 0x840c599f000850ba
|
||||
patword 0x00d4 0x840c599f000e50ba
|
||||
patword 0x00d5 0x840c599f000850ba
|
||||
patword 0x00d6 0x840c599f000e50ba
|
||||
patword 0x00d7 0x840c599f000850ba
|
||||
patword 0x00d8 0x840c599f200e50ba
|
||||
patword 0x00d9 0x840c599f000850ba
|
||||
patword 0x00da 0x840c599f000e50ba
|
||||
patword 0x00db 0x840c599f000850ba
|
||||
patword 0x00dc 0x840c599f000e50ba
|
||||
patword 0x00dd 0x840c599f000850ba
|
||||
patword 0x00de 0x840c599f000e50ba
|
||||
patword 0x00df 0x840c599f000850ba
|
||||
patword 0x00e0 0x840c599f000e50ba
|
||||
patword 0x00e1 0x840c599f000850ba
|
||||
patword 0x00e2 0x840c599f000e50ba
|
||||
patword 0x00e3 0x840c599f000850ba
|
||||
patword 0x00e4 0x840c599f000e50ba
|
||||
patword 0x00e5 0x840c599f000850ba
|
||||
patword 0x00e6 0x840c599f000e50ba
|
||||
patword 0x00e7 0x840c599f000850ba
|
||||
patword 0x00e8 0x840c599f000e50ba
|
||||
patword 0x00e9 0x840c599f000850ba
|
||||
patword 0x00ea 0x840c599f000e50ba
|
||||
patword 0x00eb 0x840c599f000850ba
|
||||
patword 0x00ec 0x840c599f000e50ba
|
||||
patword 0x00ed 0x840c599f000850ba
|
||||
patword 0x00ee 0x840c599f000e50ba
|
||||
patword 0x00ef 0x840c599f000850ba
|
||||
patword 0x00f0 0x040c599f000850ba
|
||||
patword 0x00f1 0x040c599f000850ba
|
||||
patword 0x00f2 0x000c599f000850ba
|
||||
patword 0x00f3 0x000c599f000850ba
|
||||
patword 0x00f4 0x0008599f200e503a
|
||||
patword 0x00f5 0x0008599f0008503a
|
||||
patword 0x00f6 0x0008599f200e503a
|
||||
patword 0x00f7 0x0008599f0008503a
|
||||
patword 0x00f8 0x0008599f0008503a
|
||||
patword 0x00f9 0x0008599f0008503a
|
||||
patword 0x00fa 0x0008599f0008503a
|
||||
patword 0x00fb 0x0008599f0008503a
|
||||
patword 0x00fc 0x0008599f0008503a
|
||||
patword 0x00fd 0x0008599f0008503a
|
||||
patword 0x00fe 0x0008599f0008503a
|
||||
patword 0x00ff 0x0008599f0008503a
|
||||
patword 0x0100 0x0008599f0008503a
|
||||
patword 0x0101 0x0008599f0008503a
|
||||
patword 0x0102 0x0008599f0008503a
|
||||
patword 0x0103 0x0008599f0008503a
|
||||
patword 0x0104 0x0008599f0008503a
|
||||
patword 0x0105 0x0008599f0008503a
|
||||
patword 0x0106 0x0008599f0008503a
|
||||
patword 0x0107 0x0008599f0008503a
|
||||
patword 0x0108 0x0008599f0008503a
|
||||
patword 0x0109 0x0008599f0008503a
|
||||
patword 0x010a 0x0008599f0008503a
|
||||
patword 0x010b 0x0008599f0008503a
|
||||
patword 0x010c 0x0008599f0008503a
|
||||
patword 0x010d 0x0008599f0008503a
|
||||
patword 0x010e 0x0008599f0008503a
|
||||
patword 0x010f 0x0008599f0008503a
|
||||
patword 0x0110 0x0008599f0008503a
|
||||
patword 0x0111 0x0008599f0008503a
|
||||
patioctrl 0x8f0effff6dbffdbf
|
||||
patlimits 0x0000 0x0110
|
||||
patloop 0 0x00be 0x00ef
|
||||
patnloop 0 199
|
||||
patloop 1 0x0400 0x0400
|
||||
patnloop 1 0
|
||||
patloop 2 0x0400 0x0400
|
||||
patnloop 2 0
|
||||
patwait 0 0x002e
|
||||
patwaittime 0 800
|
||||
patwait 1 0x0400
|
||||
patwaittime 1 0
|
||||
patwait 2 0x0400
|
||||
patwaittime 2 0
|
||||
|
||||
patloop 3 0x1fff 0x1fff
|
||||
patnloop 3 0
|
||||
patloop 4 0x1fff 0x1fff
|
||||
patnloop 4 0
|
||||
patloop 5 0x1fff 0x1fff
|
||||
patnloop 5 0
|
||||
patwait 3 0x1fff
|
||||
patwaittime 3 0
|
||||
patwait 4 0x1fff
|
||||
patwaittime 4 0
|
||||
patwait 5 0x1fff
|
||||
patwaittime 5 0
|
Binary file not shown.
BIN
slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServerv7.0.3
Executable file
Binary file not shown.
@ -1,4 +0,0 @@
|
||||
|
||||
|
||||
#chip version version (multiplied by 10)
|
||||
chipversion 11
|
@ -1 +0,0 @@
|
||||
1234
|
File diff suppressed because it is too large
Load Diff
@ -4,140 +4,18 @@
|
||||
#include "RegisterDefs.h"
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x221130 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x221130 // 2.0 pcb (version = 011)
|
||||
#define MIN_REQRD_VRSN_T_RD_API 0x180314
|
||||
#define REQRD_FRMWR_VRSN 0x221205
|
||||
|
||||
#define NUM_HARDWARE_VERSIONS (2)
|
||||
#define NUM_HARDWARE_VERSIONS (1)
|
||||
#define HARDWARE_VERSION_NUMBERS \
|
||||
{ 0x2, 0x3 }
|
||||
{ 0x1 }
|
||||
#define HARDWARE_VERSION_NAMES \
|
||||
{ "1.0", "2.0" }
|
||||
{ "1.0" }
|
||||
|
||||
#define ID_FILE ("detid_moench.txt")
|
||||
#define CONFIG_FILE ("config_moench.txt")
|
||||
#define LINKED_SERVER_NAME "moenchDetectorServer"
|
||||
|
||||
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
||||
|
||||
/* Hardware Definitions */
|
||||
#define NCHAN (400 * 400)
|
||||
#define NCHIP (1)
|
||||
#define NDAC (8)
|
||||
#define DYNAMIC_RANGE (16)
|
||||
#define NUM_BYTES_PER_PIXEL (DYNAMIC_RANGE / 8)
|
||||
#define DATA_BYTES (NCHIP * NCHAN * NUM_BYTES_PER_PIXEL)
|
||||
#define CLK_RUN (40) // MHz
|
||||
#define CLK_SYNC (20) // MHz
|
||||
#define ADC_CLK_INDEX (1)
|
||||
#define DBIT_CLK_INDEX (0)
|
||||
|
||||
/** Default Parameters */
|
||||
#define DEFAULT_NUM_FRAMES (1)
|
||||
#define DEFAULT_STARTING_FRAME_NUMBER (1)
|
||||
#define DEFAULT_NUM_CYCLES (1)
|
||||
#define DEFAULT_EXPTIME (10 * 1000) // ns
|
||||
#define DEFAULT_PERIOD (2 * 1000 * 1000) // ns
|
||||
#define DEFAULT_DELAY (0)
|
||||
#define DEFAULT_HIGH_VOLTAGE (0)
|
||||
#define DEFAULT_TIMING_MODE (AUTO_TIMING)
|
||||
#define DEFAULT_SETTINGS (GAIN0)
|
||||
#define DEFAULT_GAINMODE (DYNAMIC)
|
||||
#define DEFAULT_TX_UDP_PORT (0x7e9a)
|
||||
#define DEFAULT_TMP_THRSHLD (65 * 1000) // milli degree Celsius
|
||||
#define DEFAULT_FLIP_ROWS (0)
|
||||
#define DEFAULT_FILTER_RESISTOR (1) // higher resistor
|
||||
#define DEFAULT_FILTER_CELL (0)
|
||||
|
||||
#define HIGHVOLTAGE_MIN (60)
|
||||
#define HIGHVOLTAGE_MAX (200)
|
||||
#define DAC_MIN_MV (0)
|
||||
#define DAC_MAX_MV (2500)
|
||||
#define MAX_FILTER_CELL_VAL (12)
|
||||
|
||||
#define READ_N_ROWS_MULTIPLE (16) // 400 rows/50packets * 2 interfaces
|
||||
#define MIN_ROWS_PER_READOUT (16)
|
||||
#define MAX_ROWS_PER_READOUT (400)
|
||||
#define ROWS_PER_PACKET (8)
|
||||
|
||||
/* Defines in the Firmware */
|
||||
#define MAX_TIMESLOT_VAL (0x1F)
|
||||
#define MAX_THRESHOLD_TEMP_VAL (127999) // millidegrees
|
||||
#define ACQ_TIME_MIN_CLOCK (2)
|
||||
#define ASIC_FILTER_MAX_RES_VALUE (1)
|
||||
#define MAX_SELECT_CHIP10_VAL (63)
|
||||
|
||||
#define MAX_PHASE_SHIFTS (240)
|
||||
#define BIT16_MASK (0xFFFF)
|
||||
|
||||
#define GAIN_VAL_OFST (14)
|
||||
#define GAIN_VAL_MSK (0x3 << GAIN_VAL_OFST)
|
||||
|
||||
// pipeline
|
||||
#define ADC_PORT_INVERT_VAL (0x5A5A5A5A)
|
||||
#define ADC_PORT_INVERT_BOARD2_VAL (0x453b2a9c)
|
||||
|
||||
// 2.0 pcb (chipv1.1)
|
||||
#define SAMPLE_ADC_FULL_SPEED_CHIP11 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_0_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x0000
|
||||
#define SAMPLE_ADC_HALF_SPEED_CHIP11 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_1_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1110
|
||||
#define SAMPLE_ADC_QUARTER_SPEED_CHIP11 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_2_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2230
|
||||
|
||||
#define ADC_PHASE_FULL_SPEED_CHIP11 (160)
|
||||
#define ADC_PHASE_HALF_SPEED_CHIP11 (160)
|
||||
#define ADC_PHASE_QUARTER_SPEED_CHIP11 (160)
|
||||
|
||||
#define DBIT_PHASE_FULL_SPEED_CHIP11 (80)
|
||||
#define DBIT_PHASE_HALF_SPEED_CHIP11 (135)
|
||||
#define DBIT_PHASE_QUARTER_SPEED_CHIP11 (135)
|
||||
|
||||
#define ADC_OFST_FULL_SPEED_VAL_CHIP11 (0x10)
|
||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP11 (0x08)
|
||||
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP11 (0x04)
|
||||
|
||||
// 2.0 pcb (chipv1.0)
|
||||
#define SAMPLE_ADC_FULL_SPEED_CHIP10 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_1_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x0100
|
||||
#define SAMPLE_ADC_HALF_SPEED_CHIP10 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1310
|
||||
#define SAMPLE_ADC_QUARTER_SPEED_CHIP10 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2630
|
||||
|
||||
#define ADC_PHASE_FULL_SPEED_CHIP10 (160)
|
||||
#define ADC_PHASE_HALF_SPEED_CHIP10 (160)
|
||||
#define ADC_PHASE_QUARTER_SPEED_CHIP10 (160)
|
||||
|
||||
#define DBIT_PHASE_FULL_SPEED_CHIP10 (125)
|
||||
#define DBIT_PHASE_HALF_SPEED_CHIP10 (175)
|
||||
#define DBIT_PHASE_QUARTER_SPEED_CHIP10 (175)
|
||||
|
||||
#define ADC_OFST_FULL_SPEED_VAL_CHIP10 (0x10)
|
||||
#define ADC_OFST_HALF_SPEED_VAL_CHIP10 (0x08)
|
||||
#define ADC_OFST_QUARTER_SPEED_VAL_CHIP10 (0x04)
|
||||
|
||||
// 1.0 pcb (2 resistor network)
|
||||
#define SAMPLE_ADC_HALF_SPEED_BOARD2 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1300
|
||||
#define SAMPLE_ADC_QUARTER_SPEED_BOARD2 \
|
||||
(SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + \
|
||||
SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2610
|
||||
|
||||
#define ADC_PHASE_HALF_SPEED_BOARD2 (110)
|
||||
#define ADC_PHASE_QUARTER_SPEED_BOARD2 (220)
|
||||
|
||||
#define DBIT_PHASE_HALF_SPEED_BOARD2 (150)
|
||||
#define DBIT_PHASE_QUARTER_SPEED_BOARD2 (150)
|
||||
|
||||
#define ADC_OFST_HALF_SPEED_BOARD2_VAL (0x10)
|
||||
#define ADC_OFST_QUARTER_SPEED_BOARD2_VAL (0x08)
|
||||
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
||||
|
||||
/* Struct Definitions */
|
||||
typedef struct udp_header_struct {
|
||||
@ -167,44 +45,111 @@ typedef struct udp_header_struct {
|
||||
#define UDP_IP_HEADER_LENGTH_BYTES (28)
|
||||
|
||||
/* Enums */
|
||||
enum ADCINDEX { TEMP_FPGA, TEMP_ADC };
|
||||
enum DACINDEX {
|
||||
J_VB_COMP,
|
||||
J_VDD_PROT,
|
||||
J_VIN_COM,
|
||||
J_VREF_PRECH,
|
||||
J_VB_PIXBUF,
|
||||
J_VB_DS,
|
||||
J_VREF_DS,
|
||||
J_VREF_COMP
|
||||
MO_VBP_COLBUF,
|
||||
MO_VIPRE,
|
||||
MO_VIN_CM,
|
||||
MO_VB_SDA,
|
||||
MO_VCASC_SFP,
|
||||
MO_VOUT_CM,
|
||||
MO_VIPRE_CDS,
|
||||
MO_IBIAS_SFP
|
||||
};
|
||||
#define DAC_NAMES \
|
||||
"vb_comp", "vdd_prot", "vin_com", "vref_prech", "vb_pixbuf", "vb_ds", \
|
||||
"vref_ds", "vref_comp"
|
||||
|
||||
"vbp_colbuf", "vipre", "vin_cm", "vb_sda", "vcasc_sfp", "vout_cm", \
|
||||
"vipre_cds", "ibias_sfp"
|
||||
#define DEFAULT_DAC_VALS \
|
||||
{ \
|
||||
1220, /* J_VB_COMP */ \
|
||||
3000, /* J_VDD_PROT */ \
|
||||
1053, /* J_VIN_COM */ \
|
||||
1450, /* J_VREF_PRECH */ \
|
||||
750, /* J_VB_PIXBUF */ \
|
||||
1000, /* J_VB_DS */ \
|
||||
480, /* J_VREF_DS */ \
|
||||
420 /* J_VREF_COMP */ \
|
||||
1300, /* MO_VBP_COLBUF */ \
|
||||
1000, /* MO_VIPRE */ \
|
||||
1400, /* MO_VIN_CM */ \
|
||||
680, /* MO_VB_SDA */ \
|
||||
1428, /* MO_VCASC_SFP */ \
|
||||
1200, /* MO_VOUT_CM */ \
|
||||
800, /* MO_VIPRE_CDS */ \
|
||||
900 /* MO_IBIAS_SFP */ \
|
||||
};
|
||||
|
||||
enum MASTERINDEX { MASTER_HARDWARE, OW_MASTER, OW_SLAVE };
|
||||
#define MASTER_NAMES "hardware", "master", "slave"
|
||||
enum CLKINDEX { RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS };
|
||||
#define CLK_NAMES "run", "adc", "sync", "dbit"
|
||||
|
||||
#define NUMSETTINGS (2)
|
||||
#define NSPECIALDACS (3)
|
||||
#define SPECIALDACINDEX {J_VREF_PRECH, J_VREF_DS, J_VREF_COMP};
|
||||
#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS \
|
||||
{ 1450, 480, 420 }
|
||||
#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS \
|
||||
{ 1550, 450, 620 }
|
||||
/* Hardware Definitions */
|
||||
#define NCHAN (32)
|
||||
#define NCHIP (1)
|
||||
#define NDAC (8)
|
||||
#define DYNAMIC_RANGE (16)
|
||||
#define NUM_BYTES_PER_PIXEL (DYNAMIC_RANGE / 8)
|
||||
#define CLK_FREQ (156.25) /* MHz */
|
||||
#define NSAMPLES_PER_ROW (25)
|
||||
#define NCHANS_PER_ADC (25)
|
||||
|
||||
enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G };
|
||||
enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
|
||||
#define CLK_NAMES "run", "adc", "dbit"
|
||||
/** Default Parameters */
|
||||
#define DEFAULT_PATTERN_FILE ("DefaultPattern_moench.txt")
|
||||
#define DEFAULT_STARTING_FRAME_NUMBER (1)
|
||||
#define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL)
|
||||
#define DEFAULT_NUM_SAMPLES (5000)
|
||||
#define DEFAULT_EXPTIME (0)
|
||||
#define DEFAULT_NUM_FRAMES (1)
|
||||
#define DEFAULT_NUM_CYCLES (1)
|
||||
#define DEFAULT_PERIOD (1 * 1000 * 1000) // ns
|
||||
#define DEFAULT_DELAY (0)
|
||||
#define DEFAULT_HIGH_VOLTAGE (0)
|
||||
#define DEFAULT_VLIMIT (-100)
|
||||
#define DEFAULT_TIMING_MODE (AUTO_TIMING)
|
||||
#define DEFAULT_TX_UDP_PORT (0x7e9a)
|
||||
|
||||
#define DEFAULT_RUN_CLK_AT_STARTUP (200) // 40
|
||||
#define DEFAULT_ADC_CLK_AT_STARTUP (40) // 20
|
||||
#define DEFAULT_SYNC_CLK_AT_STARTUP (40) // 20
|
||||
#define DEFAULT_DBIT_CLK_AT_STARTUP (200)
|
||||
|
||||
#define DEFAULT_RUN_CLK (40)
|
||||
#define DEFAULT_ADC_CLK (20)
|
||||
#define DEFAULT_DBIT_CLK (40)
|
||||
#define DEFAULT_ADC_PHASE_DEG (30)
|
||||
|
||||
#define DEFAULT_PIPELINE (15)
|
||||
#define DEFAULT_SETTINGS (G4_HIGHGAIN)
|
||||
|
||||
#define UDP_HEADER_MAX_FRAME_VALUE (0xFFFFFFFFFFFF)
|
||||
|
||||
// settings
|
||||
#define DEFAULT_PATMASK (0x00000C800000800AULL)
|
||||
#define G1_HIGHGAIN_PATSETBIT (0x00000C0000008008ULL)
|
||||
#define G1_LOWGAIN_PATSETBIT (0x0000040000008000ULL)
|
||||
#define G2_HIGHCAP_HIGHGAIN_PATSETBIT (0x0000080000000008ULL)
|
||||
#define G2_HIGHCAP_LOWGAIN_PATSETBIT (0x0000000000000000ULL)
|
||||
#define G2_LOWCAP_HIGHGAIN_PATSETBIT (0x00000C800000800AULL)
|
||||
#define G2_LOWCAP_LOWGAIN_PATSETBIT (0x0000048000008002ULL)
|
||||
#define G4_HIGHGAIN_PATSETBIT (0x000008800000000AULL)
|
||||
#define G4_LOWGAIN_PATSETBIT (0x0000008000000002ULL)
|
||||
|
||||
#define HIGHVOLTAGE_MIN (60)
|
||||
#define HIGHVOLTAGE_MAX (200) // min dac val
|
||||
#define DAC_MIN_MV (0)
|
||||
#define DAC_MAX_MV (2500)
|
||||
|
||||
/* Defines in the Firmware */
|
||||
#define DIGITAL_IO_DELAY_MAXIMUM_PS \
|
||||
((OUTPUT_DELAY_0_OTPT_STTNG_MSK >> OUTPUT_DELAY_0_OTPT_STTNG_OFST) * \
|
||||
OUTPUT_DELAY_0_OTPT_STTNG_STEPS)
|
||||
#define MAX_PHASE_SHIFTS_STEPS (8)
|
||||
|
||||
#define WAIT_TME_US_FR_ACQDONE_REG \
|
||||
(100) // wait time in us after acquisition done to ensure there is no data
|
||||
// in fifo
|
||||
#define WAIT_TIME_US_PLL (10 * 1000)
|
||||
#define WAIT_TIME_US_STP_ACQ (100)
|
||||
#define WAIT_TIME_CONFIGURE_MAC (2 * 1000 * 1000)
|
||||
#define WAIT_TIME_PATTERN_READ (10)
|
||||
#define WAIT_TIME_1US_FOR_LOOP_CNT (50) // around 30 is 1 us in blackfin
|
||||
|
||||
/* MSB & LSB DEFINES */
|
||||
#define MSB_OF_64_BIT_REG_OFST (32)
|
||||
#define LSB_OF_64_BIT_REG_OFST (0)
|
||||
#define BIT32_MSK (0xFFFFFFFF)
|
||||
#define BIT16_MASK (0xFFFF)
|
||||
|
||||
#define ADC_PORT_INVERT_VAL (0x4a342593)
|
||||
#define MAXIMUM_ADC_CLK (20)
|
||||
#define PLL_VCO_FREQ_MHZ (800)
|
||||
|
Binary file not shown.
BIN
slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.3
Executable file
BIN
slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.3
Executable file
Binary file not shown.
@ -4,7 +4,7 @@
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
/**
|
||||
* Set Defines
|
||||
* @param creg control register
|
||||
@ -14,9 +14,8 @@
|
||||
* @param prmsk pll reset mask
|
||||
* @param amsk address mask
|
||||
* @param aofst address offset
|
||||
* @param wd2msk write parameter mask for pll for dbit clock (Jungfrau/moench
|
||||
* only)
|
||||
* @param clk2Index clkIndex of second pll (Jungfrau/moench only)
|
||||
* @param wd2msk write parameter mask for pll for dbit clock (Jungfrau only)
|
||||
* @param clk2Index clkIndex of second pll (Jungfrau only)
|
||||
*/
|
||||
void ALTERA_PLL_SetDefines(uint32_t creg, uint32_t preg, uint32_t rprmsk,
|
||||
uint32_t wpmsk, uint32_t prmsk, uint32_t amsk,
|
||||
@ -51,8 +50,8 @@ void ALTERA_PLL_ResetPLLAndReconfiguration();
|
||||
* Set PLL Reconfig register
|
||||
* @param reg register
|
||||
* @param val value
|
||||
* @param useDefaultWRMask only jungfrau/moench for dbit clk (clkindex1, use
|
||||
* second WR mask)
|
||||
* @param useDefaultWRMask only jungfrau for dbit clk (clkindex1, use second WR
|
||||
* mask)
|
||||
*/
|
||||
void ALTERA_PLL_SetPllReconfigReg(uint32_t reg, uint32_t val,
|
||||
int useSecondWRMask);
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include "clogger.h"
|
||||
|
||||
void initializePatternAddresses();
|
||||
#ifdef CHIPTESTBOARDD
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#ifdef VIRTUAL
|
||||
void initializePatternWord();
|
||||
#endif
|
||||
|
@ -6,8 +6,8 @@
|
||||
#include "AD9252.h" // old board compatibility
|
||||
#include "clogger.h" // runState(enum TLogLevel)
|
||||
#endif
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD)
|
||||
#include "AD9257.h" // commonServerFunctions.h, blackfin.h, ansi.h
|
||||
#endif
|
||||
|
||||
@ -20,8 +20,8 @@
|
||||
|
||||
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#include "nios.h"
|
||||
#elif defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD)
|
||||
#elif defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD)
|
||||
#include "blackfin.h"
|
||||
#endif
|
||||
|
||||
@ -61,16 +61,15 @@ typedef struct udpStruct_s {
|
||||
int isInitCheckDone();
|
||||
int getInitResult(char **mess);
|
||||
void basictests();
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int checkType();
|
||||
int testFpga();
|
||||
int testBus();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARDD) || \
|
||||
((defined(EIGERD) || defined(JUNGFRAUD) || defined(MOENCHD)) && \
|
||||
defined(VIRTUAL))
|
||||
((defined(EIGERD) || defined(JUNGFRAUD)) && defined(VIRTUAL))
|
||||
void setTestImageMode(int ival);
|
||||
int getTestImageMode();
|
||||
#endif
|
||||
@ -78,24 +77,19 @@ int getTestImageMode();
|
||||
// Ids
|
||||
void getServerVersion(char *version);
|
||||
u_int64_t getFirmwareVersion();
|
||||
#ifdef EIGERD
|
||||
uint64_t getFrontEndFirmwareVersion(enum fpgaPosition fpgaPosition);
|
||||
#endif
|
||||
u_int64_t getFirmwareAPIVersion();
|
||||
#ifndef EIGERD
|
||||
void getHardwareVersion(char *version);
|
||||
#ifdef EIGERD
|
||||
int getHardwareVersionNumber();
|
||||
#else
|
||||
u_int16_t getHardwareVersionNumber();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD)
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
u_int16_t getHardwareSerialNumber();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARD2D) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARDD)
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D) || defined(MYTHEN3D) || \
|
||||
defined(GOTTHARDD)
|
||||
int isHardwareVersion_1_0();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
int getChipVersion();
|
||||
void setChipVersion(int version);
|
||||
#endif
|
||||
@ -104,7 +98,7 @@ u_int32_t getDetectorNumber();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARD2D) || defined(EIGERD) || defined(MYTHEN3D) || \
|
||||
defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
defined(JUNGFRAUD)
|
||||
int getModuleId(int *ret, char *mess);
|
||||
int updateModuleId();
|
||||
#ifndef EIGERD
|
||||
@ -131,7 +125,7 @@ void checkVirtual9MFlag();
|
||||
void allocateDetectorStructureMemory();
|
||||
#endif
|
||||
void setupDetector();
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
int updateDatabytesandAllocateRAM();
|
||||
void updateDataBytes();
|
||||
#endif
|
||||
@ -147,8 +141,7 @@ void setASICDefaults();
|
||||
#ifdef MYTHEN3D
|
||||
void setADIFDefaults();
|
||||
#endif
|
||||
#if defined(GOTTHARD2D) || defined(EIGERD) || defined(JUNGFRAUD) || \
|
||||
defined(MOENCHD)
|
||||
#if defined(GOTTHARD2D) || defined(EIGERD) || defined(JUNGFRAUD)
|
||||
int readConfigFile();
|
||||
#endif
|
||||
#if defined(GOTTHARDD) || defined(GOTTHARD2D) || defined(EIGERD) || \
|
||||
@ -164,13 +157,14 @@ void resetToHardwareSettings();
|
||||
int writeRegister(uint32_t offset, uint32_t data);
|
||||
int readRegister(uint32_t offset, uint32_t *retval);
|
||||
#elif GOTTHARDD
|
||||
uint32_t writeRegister16And32(uint32_t offset,
|
||||
uint32_t data); // FIXME its not there in ctb
|
||||
uint32_t
|
||||
writeRegister16And32(uint32_t offset,
|
||||
uint32_t data); // FIXME its not there in ctb or moench?
|
||||
uint32_t readRegister16And32(uint32_t offset);
|
||||
#endif
|
||||
|
||||
// firmware functions (resets)
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) || \
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
void cleanFifos();
|
||||
void resetCore();
|
||||
@ -195,11 +189,11 @@ int getDynamicRange(int *retval);
|
||||
int setROI(ROI arg);
|
||||
ROI getROI();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
void setADCInvertRegister(uint32_t val);
|
||||
uint32_t getADCInvertRegister();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
int setADCEnableMask(uint32_t mask);
|
||||
uint32_t getADCEnableMask();
|
||||
void setADCEnableMask_10G(uint32_t mask);
|
||||
@ -227,11 +221,11 @@ int getReadoutMode();
|
||||
#endif
|
||||
|
||||
// parameters - timer
|
||||
#if defined(JUNGFRAUD)
|
||||
#ifdef JUNGFRAUD
|
||||
int selectStoragecellStart(int pos);
|
||||
int getMaxStoragecellStart();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD)
|
||||
int setNextFrameNumber(uint64_t value);
|
||||
int getNextFrameNumber(uint64_t *value);
|
||||
@ -271,13 +265,13 @@ int64_t getSubDeadTime();
|
||||
int64_t getMeasuredPeriod();
|
||||
int64_t getMeasuredSubPeriod();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD)
|
||||
#ifdef JUNGFRAUD
|
||||
void setNumAdditionalStorageCells(int val);
|
||||
int getNumAdditionalStorageCells();
|
||||
int setStorageCellDelay(int64_t val);
|
||||
int64_t getStorageCellDelay();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
int setNumAnalogSamples(int val);
|
||||
int getNumAnalogSamples();
|
||||
#endif
|
||||
@ -292,8 +286,8 @@ uint32_t getCounterMask();
|
||||
void updatePacketizing();
|
||||
#endif
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARDD) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARDD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int setDelayAfterTrigger(int64_t val);
|
||||
int64_t getDelayAfterTrigger();
|
||||
int64_t getNumFramesLeft();
|
||||
@ -307,7 +301,7 @@ int64_t getNumBurstsLeft();
|
||||
#ifdef GOTTHARDD
|
||||
int64_t getExpTimeLeft();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) || \
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int64_t getFramesFromStart();
|
||||
int64_t getActualTime();
|
||||
@ -318,7 +312,7 @@ int64_t getMeasurementTime();
|
||||
#if defined(MYTHEN3D) || defined(EIGERD)
|
||||
void getModule(sls_detector_module *myMod);
|
||||
#endif
|
||||
#if (!defined(CHIPTESTBOARDD)) && (!defined(GOTTHARD2D))
|
||||
#if (!defined(CHIPTESTBOARDD)) && (!defined(MOENCHD)) && (!defined(GOTTHARD2D))
|
||||
int setModule(sls_detector_module myMod, char *mess);
|
||||
#endif
|
||||
|
||||
@ -334,7 +328,7 @@ int getAllTrimbits();
|
||||
enum detectorSettings setSettings(enum detectorSettings sett);
|
||||
#endif
|
||||
enum detectorSettings getSettings();
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
enum gainMode getGainMode();
|
||||
void setGainMode(enum gainMode mode);
|
||||
#endif
|
||||
@ -363,7 +357,7 @@ void setDAC(enum DACINDEX ind, int val, int mV);
|
||||
#endif
|
||||
int getDAC(enum DACINDEX ind, int mV);
|
||||
int getMaxDacSteps();
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
int dacToVoltage(int dac);
|
||||
int checkVLimitCompliant(int mV);
|
||||
int checkVLimitDacCompliant(int dac);
|
||||
@ -386,15 +380,14 @@ void powerOff();
|
||||
|
||||
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int getADC(enum ADCINDEX ind, int *value);
|
||||
#else
|
||||
#elif !defined(MOENCHD)
|
||||
int getADC(enum ADCINDEX ind);
|
||||
#endif
|
||||
|
||||
int setHighVoltage(int val);
|
||||
|
||||
// parameters - timing, extsig
|
||||
#if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD) || \
|
||||
defined(MOENCHD)
|
||||
#if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD)
|
||||
int setMaster(enum MASTERINDEX m);
|
||||
#endif
|
||||
#ifdef EIGERD
|
||||
@ -402,11 +395,11 @@ int setTop(enum TOPINDEX t);
|
||||
int isTop(int *retval);
|
||||
#endif
|
||||
#if defined(MYTHEN3D) || defined(EIGERD) || defined(GOTTHARDD) || \
|
||||
defined(GOTTHARD2D) || defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
defined(GOTTHARD2D) || defined(JUNGFRAUD)
|
||||
int isMaster(int *retval);
|
||||
#endif
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
int getSynchronization();
|
||||
void setSynchronization(int enable);
|
||||
#endif
|
||||
@ -437,30 +430,29 @@ int getExtSignal(int signalIndex);
|
||||
#ifdef GOTTHARDD
|
||||
void calcChecksum(mac_conf *mac, int sourceip, int destip);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D)
|
||||
void setNumberofUDPInterfaces(int val);
|
||||
#endif
|
||||
int getNumberofUDPInterfaces();
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD) || defined(MYTHEN3D) || \
|
||||
defined(GOTTHARD2D)
|
||||
int getNumberofDestinations(int *retval);
|
||||
int setNumberofDestinations(int value);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(MYTHEN3D) || \
|
||||
defined(GOTTHARD2D)
|
||||
#if defined(JUNGFRAUD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
int getFirstUDPDestination();
|
||||
void setFirstUDPDestination(int value);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
void selectPrimaryInterface(int val);
|
||||
int getPrimaryInterface();
|
||||
void setupHeader(int iRxEntry, enum interfaceType type, uint32_t destip,
|
||||
uint64_t destmac, uint32_t destport, uint64_t sourcemac,
|
||||
uint32_t sourceip, uint32_t sourceport);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARD2D) || \
|
||||
defined(MYTHEN3D) || defined(CHIPTESTBOARDD)
|
||||
#if defined(JUNGFRAUD) || defined(GOTTHARD2D) || defined(MYTHEN3D) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
void calcChecksum(udp_header *udp);
|
||||
#endif
|
||||
#ifdef GOTTHARDD
|
||||
@ -479,15 +471,22 @@ int getInterruptSubframe();
|
||||
int setReadNRows(int value);
|
||||
int getReadNRows();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(EIGERD) || defined(MYTHEN3D)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(MYTHEN3D)
|
||||
int enableTenGigabitEthernet(int val);
|
||||
#endif
|
||||
|
||||
// very detector specific
|
||||
|
||||
// chip test board specific - configure frequency, phase, pll,
|
||||
// moench specific - powerchip
|
||||
#ifdef MOENCHD
|
||||
int powerChip(int on);
|
||||
int setAnalogOnlyReadout();
|
||||
#endif
|
||||
|
||||
// chip test board or moench specific - configure frequency, phase, pll,
|
||||
// flashing firmware
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
int setPhase(enum CLKINDEX ind, int val, int degrees);
|
||||
int getPhase(enum CLKINDEX ind, int degrees);
|
||||
int getMaxPhase(enum CLKINDEX ind);
|
||||
@ -506,9 +505,9 @@ int setLEDEnable(int enable);
|
||||
void setDigitalIODelay(uint64_t pinMask, int delay);
|
||||
#endif
|
||||
|
||||
// jungfrau/moench specific - powerchip, autocompdisable, clockdiv, asictimer,
|
||||
// clock, pll, flashing firmware
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
// jungfrau specific - powerchip, autocompdisable, clockdiv, asictimer, clock,
|
||||
// pll, flashing firmware
|
||||
#ifdef JUNGFRAUD
|
||||
int setReadNRows(int value);
|
||||
int getReadNRows();
|
||||
void initReadoutConfiguration();
|
||||
@ -518,9 +517,7 @@ 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);
|
||||
@ -640,12 +637,11 @@ int setBadChannels(int numChannels, int *channelList);
|
||||
int *getBadChannels(int *numChannels);
|
||||
#endif
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD)
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD)
|
||||
int getTenGigaFlowControl();
|
||||
int setTenGigaFlowControl(int value);
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(EIGERD) || \
|
||||
defined(MYTHEN3D)
|
||||
#if defined(JUNGFRAUD) || defined(EIGERD) || defined(MYTHEN3D)
|
||||
int getTransmissionDelayFrame();
|
||||
int setTransmissionDelayFrame(int value);
|
||||
#endif
|
||||
@ -665,14 +661,14 @@ int stopStateMachine();
|
||||
#ifdef MYTHEN3D
|
||||
int softwareTrigger();
|
||||
#endif
|
||||
#if defined(EIGERD) || defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#if defined(EIGERD) || defined(JUNGFRAUD)
|
||||
int softwareTrigger(int block);
|
||||
#endif
|
||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
||||
int startReadOut();
|
||||
#endif
|
||||
enum runStatus getRunStatus();
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
void readFrames(int *ret, char *mess);
|
||||
#endif
|
||||
#ifdef EIGERD
|
||||
@ -680,7 +676,7 @@ void waitForAcquisitionEnd(int *ret, char *mess);
|
||||
#else
|
||||
void waitForAcquisitionEnd();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
void readandSendUDPFrames(int *ret, char *mess);
|
||||
void unsetFifoReadStrobes();
|
||||
void readSample(int ns);
|
||||
@ -689,8 +685,8 @@ int checkFifoForEndOfAcquisition();
|
||||
int readFrameFromFifo();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
|
||||
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || \
|
||||
defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
u_int32_t runBusy();
|
||||
#endif
|
||||
|
||||
@ -701,7 +697,7 @@ u_int32_t runState(enum TLogLevel lev);
|
||||
// common
|
||||
int calculateDataBytes();
|
||||
int getTotalNumberOfChannels();
|
||||
#if defined(CHIPTESTBOARDD)
|
||||
#if defined(MOENCHD) || defined(CHIPTESTBOARDD)
|
||||
void getNumberOfChannels(int *nchanx, int *nchany);
|
||||
#endif
|
||||
int getNumberOfChips();
|
||||
|
@ -306,4 +306,3 @@ int get_module(int);
|
||||
int get_synchronization(int);
|
||||
int set_synchronization(int);
|
||||
int get_hardware_version(int);
|
||||
int get_frontend_firmware_version(int);
|
||||
|
@ -300,7 +300,7 @@ void AD9257_Configure() {
|
||||
AD9257_CLK_CH_IFCO_MSK);
|
||||
|
||||
// vref
|
||||
#ifdef GOTTHARDD
|
||||
#if defined(GOTTHARDD) || defined(MOENCHD)
|
||||
LOG(logINFO, ("\tVref default at 2.0\n"));
|
||||
AD9257_SetVrefVoltage(AD9257_VREF_DEFAULT_VAL, 0);
|
||||
#else
|
||||
|
@ -127,7 +127,7 @@ uint32_t ALTERA_PLL_Cntrl_Reg = 0x0;
|
||||
uint32_t ALTERA_PLL_Param_Reg = 0x0;
|
||||
uint32_t ALTERA_PLL_Cntrl_RcnfgPrmtrRstMask = 0x0;
|
||||
uint32_t ALTERA_PLL_Cntrl_WrPrmtrMask = 0x0;
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
uint32_t ALTERA_PLL_Cntrl_DBIT_PLL_WrPrmtrMask = 0x0;
|
||||
int ALTERA_PLL_Cntrl_DBIT_ClkIndex = 0;
|
||||
|
||||
@ -136,7 +136,7 @@ uint32_t ALTERA_PLL_Cntrl_PLLRstMask = 0x0;
|
||||
uint32_t ALTERA_PLL_Cntrl_AddrMask = 0x0;
|
||||
int ALTERA_PLL_Cntrl_AddrOfst = 0;
|
||||
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
void ALTERA_PLL_SetDefines(uint32_t creg, uint32_t preg, uint32_t rprmsk,
|
||||
uint32_t wpmsk, uint32_t prmsk, uint32_t amsk,
|
||||
int aofst, uint32_t wd2msk, int clk2Index) {
|
||||
@ -201,7 +201,7 @@ void ALTERA_PLL_SetPllReconfigReg(uint32_t reg, uint32_t val,
|
||||
reg, val, useSecondWRMask));
|
||||
|
||||
uint32_t wrmask = ALTERA_PLL_Cntrl_WrPrmtrMask;
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
if (useSecondWRMask) {
|
||||
wrmask = ALTERA_PLL_Cntrl_DBIT_PLL_WrPrmtrMask;
|
||||
}
|
||||
@ -252,7 +252,7 @@ void ALTERA_PLL_SetPhaseShift(int32_t phase, int clkIndex, int pos) {
|
||||
LOG(logDEBUG1, ("C%d phase word:0x%08x\n", clkIndex, value));
|
||||
|
||||
int useSecondWR = 0;
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
if (clkIndex == ALTERA_PLL_Cntrl_DBIT_ClkIndex) {
|
||||
useSecondWR = 1;
|
||||
}
|
||||
|
@ -224,10 +224,10 @@ int getModuleIdInFile(int *ret, char *mess, char *fileName) {
|
||||
// open id file
|
||||
FILE *fd = fopen(fname, "r");
|
||||
if (fd == NULL) {
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
#ifdef JUNGFRAUD
|
||||
*ret = OK;
|
||||
LOG(logWARNING, ("Could not find detid file to set module id. "
|
||||
"Continuing without.\n"));
|
||||
LOG(logWARNING,
|
||||
("Could not find detid_jungfrau.txt to set module id\n"));
|
||||
return 0;
|
||||
#else
|
||||
*ret = FAIL;
|
||||
@ -485,7 +485,7 @@ int setupDetectorServer(char *mess, char *sname) {
|
||||
|
||||
// blackfin boards (respawn) (only kept for backwards compatibility)
|
||||
#ifndef VIRTUAL
|
||||
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) || \
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || \
|
||||
defined(GOTTHARDD)
|
||||
// delete every line with DetectorServer in /etc/inittab
|
||||
strcpy(cmd, "sed -i '/DetectorServer/d' /etc/inittab");
|
||||
|
@ -13,7 +13,7 @@
|
||||
extern enum TLogLevel trimmingPrint;
|
||||
#endif
|
||||
|
||||
#ifdef CHIPTESTBOARDD
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#ifdef VIRTUAL
|
||||
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
|
||||
#endif
|
||||
@ -40,7 +40,7 @@ void initializePatternAddresses() {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CHIPTESTBOARDD
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#ifdef VIRTUAL
|
||||
void initializePatternWord() {
|
||||
memset(virtual_pattern, 0, sizeof(virtual_pattern));
|
||||
@ -128,7 +128,7 @@ int validate_writePatternWord(char *message, int addr, uint64_t word) {
|
||||
|
||||
// validate result
|
||||
int ret = OK;
|
||||
// cannot validate for ctb ( same as executing pattern word)
|
||||
// cannot validate for moench, ctb ( same as executing pattern word)
|
||||
#ifdef MYTHEN3D
|
||||
uint64_t retval = readPatternWord(addr);
|
||||
LOG(logDEBUG1, ("Pattern word (addr:0x%x) retval: 0x%llx\n", addr,
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "slsDetectorServer_funcs.h"
|
||||
|
||||
#include <getopt.h>
|
||||
#include <limits.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
@ -88,7 +89,7 @@ int main(int argc, char *argv[]) {
|
||||
"and "
|
||||
"initial detector setup. \n"
|
||||
"\t-i, --ignore-config : "
|
||||
"[Eiger][Jungfrau][Gotthard][Gotthard2][Moench] \n"
|
||||
"[Eiger][Jungfrau][Gotthard][Gotthard2] \n"
|
||||
"\t Ignore config file. \n"
|
||||
"\t-m, --master <master> : "
|
||||
"[Eiger][Mythen3][Gotthard][Gotthard2] \n"
|
||||
@ -205,7 +206,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
case 'i':
|
||||
#if defined(EIGERD) || defined(GOTTHARDD) || defined(GOTTHARD2D) || \
|
||||
defined(JUNGFRAUD) || defined(MOENCHD)
|
||||
defined(JUNGFRAUD)
|
||||
LOG(logINFO, ("Ignoring config file\n"));
|
||||
ignoreConfigFileFlag = 1;
|
||||
#else
|
||||
@ -276,6 +277,14 @@ int main(int argc, char *argv[]) {
|
||||
LOG(logERROR, ("Could not set handler function for SIGINT"));
|
||||
}
|
||||
|
||||
// validate control and stop port number
|
||||
if (0 >= portno || portno > USHRT_MAX || 0 >= (portno + 1) ||
|
||||
(portno + 1) > USHRT_MAX) {
|
||||
LOG(logERROR, ("Invalid control server or stop server port "
|
||||
"numbers (%d, %d). It must be in range 1 - %d",
|
||||
portno, portno + 1, USHRT_MAX));
|
||||
return -1;
|
||||
}
|
||||
if (sharedMemory_create(portno) == FAIL) {
|
||||
return -1;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user