* alignedData now uses std::align_alloc
* imagedata is now allocated on the heap
* m3 server fix for trimbits and badchannels that are shifted by 1
* formatting
* binary in
* added check for proper memory allocation
* commenting out the example in receiver data call back changing size as it affects users using debugging mode to print out headers
* fixed warnings
* commenting out the example in receiver data call back changing size as it affects users using debugging mode to print out headers
* got rid of cast to uint64
* got rid of Reorder function
* added sanity check to only enable for chipttestboard and xilinx
* removed Gotthard stuff
* update the comment about how to modify data on a data call back from the receiver
* autogenerated commands and make format
* changed font size in GUI
* clang-format with clang-format version 17
* updated update_image_size in xilinx
* version number automated for python build
* mistakenly set version back to 0.0.0
* updated github workflow scripts to support automatic version numbering with environment variable
* managed to load VERSION file in yaml file - simplifies things
* saving changes in git workflow failed
* got typo in github workflow
* updatet regex pattern to support postfix
* normalized version to PEP 440 specification in update_version.py
* bug did not support version 0.0.0
* upgrading to c++17 from c++11 and patch command has to be found before applying patch on libzmq (#1195)
* Dev/allow localhost for virtual tests (#1190)
* remove the check for localhost being used in rx_hostname for python test for simulators, run rx_arping test only if hostname is not 'localhost'
* fix tests for fpath: cannot set back to empty anymore (empty is default)
* default rx_hostname arg = localhost, and default settings path =../../settingsdir
* changed virtual tests script for better printout on exceptions
* fix for catching generaltests exceptions and exiting instead of continuing
* fix minor
* fixed shared memeory tests to include current env and fixed prints for errors
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* added regex pattern matching to version in toml file
* Dev/gitea docker (#1194)
* gitea workflows for RH8 and RH9
* using our docker images
* version now supports . before postfix
* rough draft of test acquire of all detectors for frames caught and file size. ctb not included yet
* moved dbitoffset, dbitreorder and dbitlist to GeneralData
* added error message on receiver side, throw error
* removed log as error already printed
* added tests to check file size and frames caught with an acquire (virtual) for every detector
* minor printout removed
* typo fixed
* removed minor printout
* incorrect counter mask tested
* fix 10g adc enable mask, switched with 1g
* fixed hardcoded values of nchip nchan etc from detPArameters
* fixed ctb tests, need to fix in develoepr (if digital modfe not enabled, should not take into accoutn dbitlist or dbitoffset or dbitreorder
* only reorder bits if some sort of digital readout mode enabled
* trying to fix acquire for xilinx
* fix for xilinx ctb virtual
* alloweing all tests
* typo
* fix for slsreceiver killed but complaining for virtual tests with script
* fixed bug found by @AliceMazzoleni99 that for ctb server is still shown in pgrep -f if xilinx server running, so now the pid is killed and looking for any DetectorServer_virtual instead. also reset color coding after Log
* check if process running for kill -9 slsReceiver fail
* removed -9 to kill with cleanup
* frame synchonrizer fixes: typo of iterator for loop and zmg_msg_t list cleaned up before sending multi part zmq; test written for the frame synchronizer, test_simulator.py rewritten for more robustness and refactoring commonality between both scripts
* better error messageS
* minor
* typo
* moving the erasure of the fnum to after sending the zmg packets and also deleteing all old frames when end of acquisition
* fix bug in blackfin read access to firmware registers
* updates api version based on version file & converted shell script files to python
* updated all makefiles
* refactoring code and compiling binary
* formatting
* rewrote end() for StaticVector
* rearranged receiver topics, differentiated btween receiver variants and added info about slsFrameSynchronizer
* typo
* minor aesthetics
* minor
* added extra fs link and fixed execute_program warning
* and now with link
* updating pmods
* adresses review comments
* dummy commit for versionAPI
* formatted and updated versionAPI.h
* added expat to host section
* updated documentation for pip installation as well
* Dev/add numpy (#1227)
* added numpy dependency
* added build specifications for python version and platform
* updates files/variants for pmods for 9.2.0 (#1233)
* tests for bool in ToString/StringTo (#1230)
- Added tests for ToString/StringTo<bool>
- Added overload for ToString of bool (previously went through int)
* added docs for SLSDETNAME (#1228)
* added docs for SLSDETNAME
* clarification on hostname
* added examples on module index
* fixes
* fixed typo
* Dev/update test framesynchronizer (#1221)
* raise an exception if the pull socket python script had errors at startup (for eg if pyzmq was not installed)
* minor changes that got lost in the merge of automate_version_part 2 PR
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* added workflow for python wheels
* wip
* formatting
* wip
* wip to parse vector of rois at command line
* wip
* first level test
* can get individual rois, but not connected to command yet
* rois shoudl work. left to implement tests for individual rois, create multiple datasets (1 for each roi) in the virutal data file. currently virutal dataset with roi is not implemented and a warning is given instead. wonder why since the inviduviaual roi files are clipped
* all tests pased
* minor
* fixed rx_roi for multi modules jungfrau , tests for eiger, multi modules jungfrau in x and 2 interfaces
* works for eiger as well
* switched to vector instead of std::array<ROI, 2>>, which prints extra [-1, -1] when theres only 1 udp interface
* wip
* fix for empty roi vectors (which shouldnt be) as you cant know if its all or not in roi
* wip: to map roi to virutal
* fix for eiger, added python test for testig roi in different module and detector type configurations
* wip, fails with master and virtual
* works for complete roi
* wip, works for a single roi
* works for all rois
* wip to fix tests
* 1d fixes
* rois test work on 1d as well
* check master file creation as well in rx_roi tests
* get rx_roi from metadata from rxr, cant reconstruct. fixed clear roi should give 1 roi min
* gui shows roi now
* format
* updated python bindings
* updated master file versions
* cmd generation and formatting
* minor fixes in command line and help
* minor
* doesnt happen anymore
* comment
* minor
* redundant getRxROI in Detector class for multi level and module level
* refactor cmd parsing (detid can be parsed directly)
* refactor cmd line
* refactor command line parsing of roi
* modified comments about ctb and xilinx not using roi
* refactoring
* refactorign
* refactoring wip
* wip refactoring
* formattin
* to avoid confusion, moved default initialized, single sized declared vector of roi to be created at setDetectorType
* pybind only 1 function for getRxROI
* command line help
* specified number of receiver error message
* minor comment
* refactored to take out repetitive code, need to adjust for slsMulti and slsFrameSync
* wip
* works, need to add tests
* made Commadnlineoptions into a class
* wip test
* fixed tests
* cleaning up properly , semaphore leaks, child process/thread throwing handled
* getuid issue on github workflow
* constexpr and checking if options object type is same
* unnecessary capture
* remove testing code, minor
* fixed help, -t for multi should not be supported as it never had it
* Formatting
* hdf5 definitions in test when not compiled with hdf5
* typo
* moved optstring and long options to the constructor
* raising a SIGINT when the child thread has an exception so that the parent thread can exit all the threads and clean up gracefully
* minor test typo
* check status of child exiting and use that to send sigint to all the child processes from the parent
* fixed validation in network_utils, added a tests to throw for port 65535 in test mode (option on for sls_use_tests), multi:parent process checks child process exit status to send sigint to others
* moving set signal handler to network utils
* readoutspeed in rx master file and other master file inconsistencies (#1245)
readout speed added to json and h5 master files.
Also fixed master file inconsistencies
Sserver binaries
- update server binaries because readoutspeed needs to be sent to receiver with rx_hostname command
API
- added const to Detector class set/getburstmode
Python
- updated python bindings (burstmode const and roi arguments)
Cmd generation
- added pragma once in Caller.in.h as Caller is included in test files
m3: num channels due to #counters < 3
* workaround for m3 for messed up num channels (client always assumes all counters enabled and adds them to num channels), fix for hdf5
g2: exptime master file inconsistency
- exptime didnt match because of round of when setting burst mode (sets to a different clk divider)
- so updating actual time for all timers (exptime, period, subexptime etc, ) in Module class, get timer values from detector when setting it and then send to receiver to write in master file
ctb image size incorrect:
- write actual size into master file and not the reserved size (digital reduces depending on dbit list and dbit offset)
- added a calculate ctb image size free function in generalData.h that is used there as well as for the tests.
master file inconsistencies
- refactored master attributes writing using templates
- names changed to keep it consistent between json and hdf5 master file (Version, Pixels, Exposure Times, GateDelays, Acquisition Period, etc.)
- datatypes changed to keep it simple where possible: imageSize, dynamicRange, tengiga, quad, readnrows, analog, analogsamples, digital, digitalsamples, dbitreorder, dbitoffset, transceivermask, transeiver, transceiversamples, countermask, gates =>int
- replacing "toString" with arrays, objects etc for eg for scan, rois, etc.
- json header always written (empty dataset or empty brackets)
- hdf5 needs const char* so have to convert strings to it, but taking care that strings exist prior to push_back
- master attributes (redundant string literals->error prone
tests for master file
- suppressed deprecated functions in rapidjson warnings just for the tests
- added slsREceiverSoftware/src to allow access to receiver_defs.h to test binary/hdf5 version
- refactored acquire tests by moving all the acquire tests from individual detector type files to a single one=test-Caller-acquire.cpp
- set some default settings (loadBasicSettings) for a basic acquire at load config part for the test_simulator python scripts. so minimum number of settings for detector to be set for any acquire tests.
- added tests to test master files for json and hdf5= test-Caller-master-attributes.cpp
- added option to add '-m' markers for tests using test_simulator python script
* doc: added inst on how to set persistentn NIC changes after reboot for each ethernet interface such as rx 4096, rx-usecs, adaptive-rx and gro etc.
* added permanent ethtool settings also for fedora or modern rhel
* troubleshooting doc: permanent changes for 10g pc tuning (#1247)
* doc: added inst on how to set persistentn NIC changes after reboot for each ethernet interface such as rx 4096, rx-usecs, adaptive-rx and gro etc.
* added permanent ethtool settings also for fedora or modern rhel
* ifcfg scripts still work on rhel8, just not preferred
* added dataformat for jungfrau
* eiger basic mod
* eiger doc done
* added moench
* done
* free shm exposed in python as free function and detector function
* minimum change
* added quad and updated about 1gbe/10gbe
* more info
* remove arguments info
* replacing commands with links
* minor
* detail explanation of eiger
* fixed imagesize ctb issue (out values not transferred, setting any dbit values was not recalculatign image size in generaldata)
* fixed ctb dbit clock changing period in tests as it was setting run clock instead
* python accessing freed shared memory object (#1253)
* added a 'isValid' member in shared memory (also updated shm version) with default true, any access to shared memory() checks also for validity. any free will set this to false and then unmap shm. Any access to shm will then check validity in python.
* fixed tests for shm
* added tests in python as well
---------
Co-authored-by: Alice <alice.mazzoleni@psi.ch>
* updated error message
* made markers argument in ParseArguments a boolean instead of an int
* removed relative path compared to where executable run in test script for settingsdir
* fix roi test
* updating versions (#1258)
* updating package version, client version, server versions. Renaming server versions, using hardlinks in serverBin. Removing ctb servers in serverBin. (#1259)
* fixed no interpolation mode for moench (#1262)
Co-authored-by: Anna Bergamaschi <anna.bergamaschi@psi.ch>
* fixed multi receiver and frames sync help throw of bad variant access (#1265)
* 1000/doc c standard (#1267)
* updated c++11 to c++17
* more about c++11 and updating readme
* updated documentation for receiver arguments and also making receiver constructor explicit
* minor fix for rxr err message
* fixed doc about gcc version
* 1000/release notes (#1269)
* updated firmware and server version in release notes
* release notes wip
* updated notes(prs done)
* updated release notes. wip
* Release notes
* minor
* minor fix
* 1000/doc architecture commands (#1271)
* sw architecture and setup commands
* 1000/shm free obsolete (#1273)
* freeing obsolete shm withoua a 'isValid' should access raw pointers. Need to move this all into the shm class
* fixed obsolete shm free issue
* minor
* ensuring the test works platform independent for size of int
* removed verify, update, fixed getUser to be a free function, generated commands, python bindings yet to do
* python bindings
* fixed tests
* minor
* minor
* format
* userdetails refinedg
* fixed caller test
* updated client api version (#1277)
* one doesnt need to open shared memory to call removesharedmemory, and calling hasMemoryvalid without opening will cause segfault (not used now, but could in the future)
* fix test on shm
* minor
* added image source files from draw.io to create the images (#1280)
* 1000/fix_actual_tests (#1282)
- fix acquire fail in tests (adcreg test)
- roi tests fail after overlapping invalid test and acquire after
- print udp dest mac in server properly
- fixed udp dst list get (server was not sending entry proper size to match proper struct size in client)
- updated server binaries and updated hard links in serverBin
- added documentation regarding gui: zmqport and zmqip in terms of gui, rx_zmqstream
- removed print - probably ended there for debuggung
---------
Co-authored-by: Alice <alice.mazzoleni@psi.ch>
* 1000/fix_m3_tests (#1286)
* testing clkdiv one must ensure the exptime delay etc all are reset to the exact values for tests
* change dac max values for vth values for m3 in client side (set module
* 1000/doc_cmake (#1289)
* more detail documentation in installation
* more detail documentation in installation
* added links to api examples
* reverted back that vthreshold dacs in m3 have min and max as 200 and 2400 (#1294)
* update release notes and date (#1298)
---------
Co-authored-by: Mazzoleni Alice Francesca <mazzol_a@pc17378.psi.ch>
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
Co-authored-by: AliceMazzoleni99 <alice.mazzoleni@psi.ch>
Co-authored-by: Martin Mueller <martin.mueller@psi.ch>
Co-authored-by: froejdh_e <erik.frojdh@psi.ch>
Co-authored-by: Anna Bergamaschi <anna.bergamaschi@psi.ch>
* Python module is now built using scikit-build-core: Dev/scikitbuild #1164
* slsdet is available on PyPI from this release onwards
* Fixed broken import in typecaster.h #1181
* Dev/automate version number #1193
* Dev/automate version part2 #1209
* 9111: added expat to host section to fix conda #1216
* fix for gotthard.py to import slsdet properly
* added slsFramesynchronizer to conda copy_lib.sh
* version of release
* update version of client
* removed cmake <=3.28 that was added in 9.1.11 (main_library in meta.yaml in conda-recipes)
* added slsFrameSynchronizer binary to conda
* added numpy dependency to toml
* added documentation for pip in installation
Detailed Commits:
* skeleton pyproject.toml
* moved compiled extension into slsdet
* WIP
* WI{
* separated the recipes
* restored comments, cleanup
* cleaned meta yaml
* added back some python versions
* conda build of main library
* fixed typo
* removed conda build pin
* added zlib
* added workflow for python lib
* patching libzmq and cleaned up cmake
* removed compiler version
* switched patch tool
* reverted to scikit-build in pyproject.toml
* added sls_detector bin
* added sync, renamed action
* update cmake<=3.28 in conda build requirements
* Fixed broken import in typecaster.h (#1181)
- Fixed the broken import _slsdet --> slsdet._slsdet caused by a previous upgrade
- added tests that exercises the conversion from python to C++ and from C++ to python
- Python unit tests now run in CI (!)
* removed 3.28 restriction on cmake in meta.yaml
* from #1216 to 9.1.1.rc that got lost in merge from develoepr, added expat to host section to fix conda build
* back with the cmake restriction
* fixing gotthard1 import
* version number automated for python build
* mistakenly set version back to 0.0.0
* updated github workflow scripts to support automatic version numbering with environment variable
* managed to load VERSION file in yaml file - simplifies things
* saving changes in git workflow failed
* got typo in github workflow
* updatet regex pattern to support postfix
* normalized version to PEP 440 specification in update_version.py
* bug did not support version 0.0.0
* added regex pattern matching to version in toml file
* version now supports . before postfix
* updates api version based on version file & converted shell script files to python
* updated all makefiles
* adresses review comments
* updated release version and the api lib version
* raise an exception if the pull socket python script had errors at startup (for eg if pyzmq was not installed)
* cmake<=3.28 not required anymore
* updated documentation for pip installation as well
* 920/add numpy (#1226)
* added numpy dependency
* aded build specifications for python version and platform
* release notes
---------
Co-authored-by: froejdh_e <erik.frojdh@psi.ch>
Co-authored-by: Fröjd Lars Erik <froejdh_e@pcmoench03.psi.ch>
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
Co-authored-by: mazzol_a <mazzol_a@pc17378.psi.ch>
Co-authored-by: AliceMazzoleni99 <alice.mazzoleni@psi.ch>
* warn that the multi id is ignored in config file? or throw?
* throw and not just warn with printouts as that could be silent as well
* throw for any multi id command in the file.
* udpated help on multi module and multi command help
* fixed issues with empty lines and other syntax with docuemntation
* fixed some warningsin documentation
* some changes to documentation about command line usage
* minor
* wip: draft of frame synchronizer, semaphores not done yet
* signal handler not affecting semaphore inside lambda function
* finally works with sem
* install targets cmake error fix
* reducing the number of data call backs. incoming from developer
* WIP: of synchronisation (#969)
* WIP of synchronisation
* working so far if everything goes right
* added all information into json headers
* valid json
* allow frame synchronizer to have access to static libzmq when compiling on conda (libzeromq-devel not installed by default
* upto date with multirecieverapp for invalid arguments and help
* formatting
* remove warnings
* changes to print
* removed prints
* no need for print frames to be called
* minor
* commnet
* adding json header in start callback, imagesize in data callback and formatted
* fixed sanitizer issues. 1 left for ctrl+C
- zmq_msg_t should be deleted, not freed. Same with the char arrays and semaphores.
* fixed sanitizer issues and made it more readable
* moving clearing old frames to new startacq just in case it has to process soem frames before the callback
* created a callback mutex to register the callbacks when using threads for different Receiver objects instead of child processes, remove the clean up of the frames (deleting from a signal is thread unsafe) from the siginterrupt handler, reading or setting terminate should also be inside the mutex, pass receiver object index so that only the first one cleans up the shared structure
---------
Co-authored-by: Felix Engelmann <felix-github@nlogn.org>
* jf wip: bunch id decoder only in pcb v2.0 check and comments
* auto comp disable the same way for both chip versions. compdisabletime also available for 1.1 now
* formatting
* fixed tests
* updated jf binary
* restream stop if stop called, temp solution until new command for it
* chekckrestream is ambiguous when only checking receiver
* moved restreaming in background to receiver stop instead of detector stop (was in stop before due to gui stop button access), increase to 2s time to restream in client acquire
* minor
* moved stop to module class
* fix from before
* dev: update 2d gain plot color map (if no x and ymin/max changes or window resizing): setFixedWidth was updating for window resize, updated virtual servers for g2 and jungfrau to keep changing gain and data for every frame. the data value (#819)
* Dev/jf/fix pedestal (#821)
* jf pedestal fix: touch enable bit last
* dev: jf sync: stopping master gives idle (#824)
* jf sync mode master could return idle when stopped and so not all modules return the same value and must check for 'stopped or idle', Also must throw if any of the module gives an error
* added contains_only to sls::Result (#827)
* added variadic template for checking if a result contains only specified values
* fix for gcc4.8
* renamed to Result::contains_only
* updated condition in Detector.cpp
* stop on only the positions
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* dev jf: change status reg bits (#829)
* jf: rewrite of status reg bits, waiting state includes both wati for trigger and start frame, blocking trigger only waits if its not in waiting for trigger and run busy enabled, error state connected in firmware
* dev jf: reconfigure chip when touching electron collection mode bit (#831)
* jf: if bit 14 in reg 0x5d (electron mode collection bit) is changed, configure chip if v1.1 and powered on. so touch writeregister (setbit/clearbit also calls write register in the end). replace when electroncollectionmode command introduced
* eiger required fw version to 32: fix for blocking trigger in quad (#834)
* fix warning for prev_val (variable size array) in tests (#838)
* Dev: : gui acq finished callback for different status (#850)
* fix acquisition finished status to have different status for different modules, but does not have to be error. for eg. jf sync fw (2.4.1 gives idle for master and stopped for slaves when stopping acquiistion)
* handling inconsistent fnums to be -1 in gui, so when one sets 0 (change of value) will also give an exception (#854)
* Dev: fix py virtual test (#846)
* draft to fix virtual test when it fails
* catching errors in tests and removing sigchild ignore so servers (process in background) executing commands will not fail (pclose no child processes, if sigchld is ignored) fixed
* uncommented python loading config
* somehow killal slsReciever in second detector test fails even though no receiver running
* fixing script for virtual simlator test:fixed issue with check if process running, fixed moench tests
* formatting
* tests for jf (#835)
* execute command inside server fixed (from fix simulator tests and exec command PR) (#857)
* dev: fix server logic in checking detector idle (#861)
* fix buggy logic in checking detector idle and an argument check
* Dev: trigger signal issues handled at acquire (#864)
* if blocking and handling sync, only master gets blocking acq, slaves get non blocking as they are first and so dont get status or error caught when slaves dont get trigger (due to not connected etc) and acq returns with slaves still in waiting status. so check status of all in blocking acq
* for all dets with sync, ensure atleast one master when starting acq
* docs updated about sync
* minor fix for test_simulator
* updating docs
* fixed doc
* added python 3.12 to the conda build variants
* documentation and examples
* formatting
* forward declare zmq_msg_t and moved include (#869)
* forward declare zmq_msg_t and moved include
* removed zmq from pkg list
* removed zmq as dependency for slsdet (#870)
* dev: moench: min exptime (#865)
* moench: remove min clock cycles for setting exptime (had been ported from jf)
* commands code generation (#871)
* commands code generation (#803)
* commands code generation for only frames command
* fix cmake file and add Caller files
* working exptime, fully extended commands file and its variants
* start adding template commands
* add INT_CMD_VEC_ID template
* add list command, generate multiple bins, format code
* reach 208 commands using the cpp macros
* add tests for command parser
* start adding tests for commands parser
* fix typo to use commands.yaml
* add more tests for command_parser
* add all template functions (up to 218 commands)
* finish template functions and add more CmdProxy.cpp functions (250+)
* 257 commands
* 300 commands the rest are very special commands
* add special commands without generation
* separate special functions from generated c++ file
* implementing one command for put and get (buggy)
* add infer action in a separate file
* generate header for special commands from yaml
* allow only 0 or 1 for bool inputs
* group all commands in gen_commands.py
* add help to gen_commands.py
* add autocomplete bash script
* autocompletion: add support for module levels and help
* remove debugging line
* add autocompletion, help to commands, change int [0,1] to bool
* copy tests for Caller.cpp. Tests pass
* update with the new developer branch changes
* fix errors after merging (there is problems with tests)
* fixed port/stopport in yaml (intput typo), added '_caller' to the test dac and test on chip dac command in global test for cmdcaller
* undo previous test simulator debug change
* add documentation for the generated code
* reducing the comment to be replaced in length so formatting does not split into 2 lines
* removed formatting specific style of C++11 in gen_commands.py to keep with the top level clang format of the project
* regeneratign code for commands
* automation generated
* Redirect deprecated commands (#872)
* working implementation, need to fix dac
* fixed deprecation redirect for dac command
* Detector specific autocomplete (#873)
* working implementation, need to fix dac
* fixed deprecation redirect for dac command
* detector specific completion for dac
* added autocomplete using detector specific
* fixed error when autocompleting partial words
* Generate commands/fix commands (#875)
* fix vm_a, im_a etc have deg Celsius suffix, also help missing or changed in some places
* dac: require det id for all, arg0 to be printed at output, help for onchip dac and dac, onchipdac: spacing
* getscan detid and blocking trigger help
* udp_Dstlist det_id fixed, but rx_id invalid
* cmdApp in line with cmdLineApp (missing version, receiver_id, not creating det object in help action
* added set_command to differentiate between check_det_id and require_det_id (mixed up), args: -1 needs to check for at least one argument
* reordering
* reordering and checked till integer_command_hex
* fixed a lot more commands
* fix caller tests for eiger
* changes to tests after Bechir left
* changing .cmd to .cmdcall for the caller commands
* fixed tests for caller, still warning for setexptime about cast input
* autocomplete ran
* add moench test
* regenerating autocomplete and commands
* fixing other things from merge conflicts (renaming slsDetectorDefs to defs in commands.yaml)
* formatting
* added code injection to help (#876)
* updated 3 commands to have get output that can be put into put (#877)
* updated some commands to have get output that can be put into put
* fix tests for clkdiv
* adding help to free (#878)
* removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy) (#879)
* More helpful error messages for unsupported actions (#880)
* removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy)
* Added specific help for unsupported actions
* fixed a vetofile get special exception message. more specific warning for special exception message instead of no function warning
* added condition checking true in exceptions for special message
---------
Co-authored-by: Bechir Brahem <bachbrahem@gmail.com>
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
* Generate commands/fix det command rename (#881)
* made a link to bash autocompletion script in main folder, and replaced all references to 'det' command with 'sls_detector'
* Generate commands/fix detp detg command rename (#882)
* replacing detp with sls_Detector_put and detg with sls_detector_get
* sls_detector_not implemented, but extended message to ask user to use sls_detector_get or sls_detector_put
* autocompletion also for sls_detector or det
* Xilinx ctb (#884)
* updated registers, arm64
* compiler set to aarch64 for xilinx server
* updated RegisterDefs.h
* merge into generate branch and resolving conflicts and adding the xilinx changes to callerspecial and commands.yaml
* compiles and can print firmware version (using a different csp0 address)
* fixing other servers (gotthard, jungfrau, moench, mythen3) that it returns in case of mapping failure, xilinxctb: added that it checks type, prints proper fw version, checks kernel date, added armprocessor define to use in common places, added specifiers to supress overflow and truncation warnings
* added detector ip and mac adddress to the printout
* fixed tests and recompiled servers
* Xilinx client tests (#887)
* implemented testbus, testfpga, set/get #frames, triggers, allowed that and for connection to client, also allowed, getnumchannels, configuremac, getrunstatus, setdetectorposition with dummy values
* allowing tests for xilinx
* binaries in
* Dev/xilinx defaults and pattern (#888)
* implemented testbus, testfpga, set/get #frames, triggers, allowed that and for connection to client, also allowed, getnumchannels, configuremac, getrunstatus, setdetectorposition with dummy values
* connected kernelversion, hardwareversion, versions, framesl, triggersl, dr, timingmode, pattern (except patioctrl) thats there for altera ctb
* replaced set/get64Bit to set/getU64bit in all loadpattern.c for (ctb and m3 also)
* minor
* updated commands generation
* formatting
* moench default speed set to after init readout configuration (half speed) (#886)
* Fixed path when building as submodule
* Moench v8 (#892)
* new rct structure for moench03
* new moench data structure for offline processing
* meonch raw data and zmq process files updated to 7.0.3 version
* implemented config file for Zmq file
* raw data and zmq work with config file, but only with one file/interface
* zmq config change
* added config examples for zmq and rawdata
* pmod for 7.0.3 and 8.0.0 from previous releases
* updated pmod 8.0.1 for rh7 and rh8
* m3 fix to get kernel version properly on nios without an incorrect error msg (#898)
* moench: changed max shifts of adc clk from 240 to 200 (#900)
* Protect from getenv("HOME") returning nullptr (#907) (#908)
* Protect from getenv("HOME") returning nullptr (e.g., in case running in systemd)
* Write proper warning in Module.cpp
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
* Dev/xilinx acq (#901)
* period and exptime(patternwaittime level 0)
* added new regsieterdefs and updated api version and fixedpattern reg
* autogenerate commands
* formatting
* minor
* wip resetflow, readout mode, transceiver mask, transceiver enable
* acquisition, but streaming done bit and busy (exposing + read chip to fifo) not known yet from fw
* programming fpga and device tree done
* most configuration done, need to connect configuretransceiver to client
* stuck at resetting transciever timed out
* minor
* fixed virtual, added chip busyto fifo, streaming busy, set/getnext framenumber
* configuretransceiver from client, added help in client
* make formatt and command generation
* tests for xilinx ctb works
* command generation
* dacs added and tested, power not done
* power added
* added temp_fpga
* binaries in
* ctrlreg is 0 to enable chip=fixed, high dac val = min val= fixed, power regulators in weird order=fixed, device tree could be loaded with dacs before adcs=fixed
* start works
* virtual server sends
* receiver works
* tests
* python function and enum generation, commands generatorn and autocomplete, formatting, tests
* tests fail at start(transceiver not aligned)
* tests passed
* all binaries compiled
* eiger binary in
* added --nomodule cehck for xilinx
* updated binaries
* formatting
* moench server: changed default values of adcphase for full speed from 300 to 150 and dac vipre_cds from 800 to 1280 (#922)
* client bug fix: m3 multi module bad channel file throws bad allocation when modules skipped, needed to add vectors in 2d vector of bad channel list (#920)
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* developer: blocking acquire stop with slave temporarily in waiting (#926)
* client: stopping a blocking acquire of multi modules checks status to catch slaves that might still be in waiting. Problem is (gotthard2 25um at least) slave is in waiting only temporarily before going go idle/stopped. So a 50ms sleep is necessary ot not throw an unnecessary error
* client: when stopping blocking acquire, wait up to 1s in 50ms increments for slave to stop waiting temporarily
* fix to rapidjson for build with gcc 14 (#929)
* Dev: m3 clkdiv0 20 (#924)
* m3: clk 0 changed from 10 to 20 (100MHz to 50MHz)
* g2: startup clk div back to 10 as in firmware but setting in software startup to 20
* m3: minor print error if clk divider > max
* G2: reconfigure chip (#927)
* changed common.c readADCFromFile to make it more general and move temperature calculation for Eiger out of this function and inside whereever it is called.
* g2 and m2: gethighvoltage was just a variable set in server, it is now moved to a get inside DAC5671 implementation (but not reading a measured value, instead what is set from a file), high voltage variable used inside DAC5671 for virtual servers
* g2: switching off hv (ifrom non zero to zero value) will wait for 10s; powering on chip reconfigures chip; powering off chip unconfigures chip; powering off chip also includes check if hv = 0, if not throw exception; chip configuration checked before acquring; at start up: hv switched off and chip powered on, so does not wait 10s to switch off hv;
* included test to check powering off chip when hv is on should throw an exception
* g2: check if chip configured before acquiring
* nios: read hv value set from file and virtual still goes into DAC5671 for conversions to and fro dac to V, change common readadc to readparameter to generalize, make sethighvoltage into a get and set to catch errors in get as well, g2: if not at startup, remmeber hv value before setting it and after check if value was being switched off (from a non zero value) and wait 10s if it was (10s wait only for switching off from non zero and not at startup)
* developer: moench empty data callback (#936)
* moench (feature to wait for post processing to be done in new sls_detector_acquire_zmq executable)
READOUT_ACTION_ZMQ added to action enums
sls_detector_acquire_zmq added to executables
empty data call back so that client listens to last dummy zmq packet from moench post processor
processor: remove NEWZMQ ifdefs and remove connect for zmq publisher socket
* fix to compile
* cmds generated and parsed
* dev: client: status for blocking acquire stop with slave temporarily in waiting (#944)
* acq finish call back gets status squashed with default error but before that need to wait for gotthard slaves to catch up from waiting to stopped
* bug fixes related to file saving (#931) (#946)
* fix the file path resetting issue of GUI in the case where different modules have different fpath setting.
* fix stack-buffer-overflow issue when using HDF5 HDF5DataFile::parameterDataTypes have 64bit type (i.e. STD_U64LE), the size of fill_value should be at least 8 bytes.
* change the type of fill_value to uint64_t
Co-authored-by: Z.H. Li <zhenghenge@gmail.com>
* updated documentation from martin (#948)
* Dev/xilinx ctb test (#942)
* voltage regulators only looks at dac and not at ctrl_reg
* xilinx: change dac max to 2048, setting dac ist not inverse conversion from dac to voltage anymore, but setting power is inverse, also there is max and min to power, a different min for vio and this is checked at funcs interface, not printign or converting to mv in dac for power regulators (as its conversion max and min are different)
* Use links for dacs/adc and adapt power rglt thresholds
* Remove wait for transceiver reset
* adc and dac device not used anymore and hence removed
* udp restucturing: arm has to be multiple of 16 and no byteswap in udp_gen, option to compile locally in arm architecture, memsize of the second udp memory has to be limited
---------
Co-authored-by: Martin Brückner <martin.brueckner@psi.ch>
* formatting
* dev: jungfrau HW 1.0: adc output clock phase to 120 (#952)
* jungfrau: change adc output clock phase from 180 to 120 for v1.0 boards for reliable readout of adc #2
* versioning
* formatting
* rx: moved creating fpath (if it doesnt exist) from setting file path to at the start of acquisition when creating file. This is done here so that it does not fail if fwrite is disabled anyway. Also fixed it in documentation. Changed in documentation that the default for fwrite is disabled (#957)
* added keepalive zmq socket option (after 60s of idle time, 10 probes every sec. Mainly because an issue at Max IV (#956)
* Moench mess from developer (#953)
* new moench data structure for offline processing
* Dev/zmq stream all ipv6 adn remove rx_zmqip (#958)
* enable ipv6 in zmq socket
* removed rx_zmqip API and field in gui, changed client updaterxrzip to updateclientzmqip to have the rx_hostname ip if 0.
* updated command line for rx_zmqip to give a warning.
* Replaced 'depreciated' to 'deprecated' everywhere
* switching from * to 0.0.0.0 works for rebinding zmq sockets
* fixed help in command line for rx_zmqip * to 0.0.0.0 and removed cmd in python
* remove publisher zmq socket ip also for moench post processing
* fixed tests
* publisher zmq ip macros to be reused
* fixed a warning about narrowing conversion from size_t to int (#963)
* fixed stop server not starting up with setup variables (#949)
* m3: fixed stop server not starting up with setup variables
* all servers except eiger fixed for virtual stop server to start up with setupDetector function called
* virtual tests work
* eiger: versions print neednt be in stop server
* jungfrau: stop server (not virtual) also needs to read config file
* ensuring master is setup for virtual and real servers
* Dev/pyctbgui merge (#960)
* added empty c extension
* added rotation to the decoding
* added color map, options and findex
* minor
* move checks to before acquisition
* added pixel map based decoder
* cleanup
* no thread creation for single thread processing
* added rotation and test to compare
* allow high and low water mark for zmq (also buffer size) for fast readouts
* removed roatation during decoding
* added Transpose to image and invert Y False to invert it
* retains the zoomed state after the first image of gui, catch and display exception if no detector connected
* moved start frame to dockable widget, removed extra frame number label, moved current measurement also to dockable widget, hide frame plot entirely when showing patternviewer
* first image dependin on which plot
* remember settings of main window size and position, dockewidget if docked, its size and posisiotn as well, then update it next time the gui is opened
* change in comment
* using c decoder for moench 04 and matterhorn
* catch exception from invalid image from decoder
* clean up
* update row and col when choosing image type, neeeded to show values
* fix for previous PR
* disable resetting colormap values
keep the range selected for every new acquisition
* fix typos + tested on virtual matterhorn
* minor print
* refactored Slow ADCs Tab
* refactored DAC tab
* refactored power supplies
* refactored signals tab
* refactored transceiver tab
* fix typo
* fix typo2
* remove commented code
* delete commented code
* delete commented code
* delete commented signals code
* remove commented code for transceiver tab
* refactor adc tab
* refactor Pattern Tab
* Refactor transceivers tab (PR#5) (#118)
* refactored transceiver tab
* remove commented code for transceiver tab
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
* refactor adc tab (PR#6) (#119)
* refactor adc tab
* refactored Plot and Acquisition Tabs
* fix the regression issue
* restructure project files
* applying singleton and renaming tabs to services
* working install using pip
* applies singleton to tab classes and remove CI erros
* added pyzmq and pillow
* remove the singleton implementation and keep changes
* fix merge errors in mainWindow
* moved misplaced init file
* rename service to tab
* reorganize imports
* iterate over tabs
* reorder tabs
* add slowadc to the list
* saving changes (buggy)
power supply ui not showing in the gui
* split power supply tab
* fixed tests
* add hardcoded values to defines file
* fix error
* separate power supply
* fix errors for powerSuppliesTab
* split dacs
* split slow adcs
* split signals tab
* added tests for bit_utils
* add slowAdc class to defines
* split transceiver ui file
* split adc.ui
* split pattern ui file
* split plot and acquisition ui file
* added basic test for parsing bit names
* removed redundant code in read_alias_file
* fix dacs ui position
* testing for correct exception
* cmd and args at split
* group radio buttons
* fix comments from PR#1
* show legend
* added python version and dev requirements to setup.py
* fix dac issue
* moved _decoder into pkg
* added inplace build
* removed clear
* fixed dependencies
* make tests run without slsdet
* updated name of action
* define colcount
* fixed loading of alias file
* add yapf and ruff
* apply formatting
* fix E and F rules
* add more ruff rules
* change variable name
* squashing gh debugging commits and add pre-commit
* update label values to mv units
* add hook for yapf
* reconfigure yapf precommit hook
* add format and check_format to makefile
* change gh actions
* update readme
* added check_format
* WIP
* added linting in github action
* updated readme]
* add more control for color choice
* remove useless file
* fix un-updated line after refactoring Defines
BIT0_31_MASK is not found in Defines.signals
* visually improve the interface
* fix last commit
* add only selected plots for legend
* add hide legend button
* change hide legend to show legend
checkbox show legend is checked by default
* add support for saving in numpy
* solve conversations
* fix acq index offset
* fix browse button in pattern error
* fix other browse button errors
* finish tests and add usage.md
* remove buffer
* add file,numpy-like interface and tests
* remove useless .npy files
* subscriptible npz files
* remove useless files
* remove repetetive tests
* save changes
* add mode r+, add with support,remove logging
* remove offset of acqIndex between raw and numpy saving
* fix only saving last frame
* save signals of multiple devices
* add comments and move condition for clearer code
* fix bug when vieweing pattern file
* iterate over enabled and plotted plots
* add padestal substraction to transceiver and analog data
* init pedestal frames to detector.frames
* restore old exception
* add pedestal substraction for digital signals
* remove frames spinbox from plotTab
* remove comments and use str instead of Path
* avoid saving all frames
* correct exception and log error's trace
* add gui tests
* add waveform test
* add pedestal test
* refactor by using fixtures
* add tests for moench analog and pattern
* add pytest-qt to dependencies
* add save and load gui parameters
* remove nohup file
* fix old bug IndexError
* save plot type
* a
* handle canceling load, loading matterhorn pedestal for moench
* remove comparing .png files for pattern test
* save plot type
* red error on status bar when shape mismatch for loaded pedestal
* fix makefile and docstrings
* fix PRs conversation
* move code into different function
* fix wrong function names for power supply
* removed old ctbgui
* removed unnecessary files
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
Co-authored-by: Braham Bechir <braham_b@pc11979.psi.ch>
Co-authored-by: Bechir <bechir.braham@psi.ch>
Co-authored-by: Bechir <bechir.brahem420@gmail.com>
* Dev/xilinx mat update (#959)
* put back code to obtain adc and dac device indexafter loading device tree and then create folder iio_device_links and create symbolic links there according to device indices found. ln -sf operation not permitted, so folder has to be deleted and created everytime. Also refactored definitions to have all the xilinx name or detector specific stuff out of programbyArm.c
* uncommented waittransceiverreset at startup (should work now) and return of powering off chip at startup (error for transceiver alignment reset)
* updated registerdefs from firmware
* minor prints and updating names from registerdefs
* waittransceiverreset has been fixed in firmware and removing warnign for that, transceiver alignment check for powering off chip is not done in fw (giving a warning and returning ok for now)
* fixing ipchecksum (not done), removed startperiphery, allowing readout command to be allowed for xilinx when acquiring
* dont build doc for Tobi Schluter from libzmq, which uses iso-8859-1 and the umlaut cause compilation to fail on some machines (#973)
* 8.0.2 psi modules
* missed the rx_zmqip implementations in detector.h and python bindings (#975)
* rx_zmqip has been removed. Remove it also for pyctbgui (#979)
* format
* Dev/rx callbacks (#966)
* changed rxr callback signatures to all include structs
* removed datamodify call back as size can be changed in the original data call back now
* bringing some parameters (set functions) to dataProcessor class for its callback (namely udpport, quad, fliprows, totalframes, jsonheader), resulting in also removing totalframes from 2 other function signatures
* updated MultiReceiverApp to reflect the new callback signatures
* Dev/reg bit change no validate (#970)
- do not validate write reg, setbit and clearbit by default anymore
- --validate will force validation on the bitmask or entire reg
- remove return value for write reg (across server to client, but thankfully not in the Detector class)
- extend validation into writereg, setbit and clearbit for Eiger (always special)
- need to check python (TODO)
- missed the rx_zmqip implementations in detector.h and python bindings
* sleep implemented for command line, mainly for config files for firmware developers (#982)
* change gain mode help from dynamicgain to dynamic (#988)
* fixing python version. allowing versions to execute even if no detector connected or in shared memory (#990)
* Jf: Electron collection mode (#983)
* electron collection mode for jungfrau. also removing the config chip when using register command
* collectionMode: HOLE/ELECTRON (enum)
* Dev/m3 readout speed (#985)
* added readoutspeed command to m3 (fullspeed - 10, half speed - 20, quarter speed - 40), removed reaodut pll, moved up system pll clock indices, leaving pll index in common altera code, default speed is half speed, allow only system_c0 to be set, the others can be obtained, same for clkphase, maxclkphaseshift, clkfreq. added to readoutspeedlist commands, updated help and updated tests
* updated readoutspeedlist command
* jf: timing info decoder (#987)
* timing_info_decoder command with options swissfel (default) and shine. added to python, command line generation, autocomplete, tostring, tests.
* updated jungfrau timing info decoder mask (#991)
* minor. removed warning print at startup for empty eth udp to listen to (#992)
* removed 'Caller/CALLER' from test names as there is only one command line now (#993)
* formatting
* Dev/g2 stop frame number (#980)
* get/set next frame number in G2 (firmware only has set, no get)
* firmware has issues: each stop keeps 2 frame header in fifo and the resetting frame number happens after that
* removed the option to set burstmode to burst external or continuwous internal
* needs to be revisited before 9.0.0
* formatting
* fix the command help in the command help generator for Gotthard2 about nextframenumber (#994)
* first draft at fixing nextframenumber properly with firmware (#995)
* fixing nextframenumber properly with firmware
* updated firmware to have getnextframenumber and fixed setnextframenumber to reset also the header fifo when stopping
* fix tests for gotthard2
* Dev/g2 fix next frame number (#996)
* binaries in
* formatting
* release notes
* release notes
* updating firmware dates
* release notes
* package release version and renaming server names
* updated client versioning
* updated moench fw release version
* 900/proper free (#1002)
* first draft of fixing the free function available within the class
* removed class member function freeSharedmemory for both Detector and Module; made the free function freeSharedmemory accessible to python interface; setHostname if there is already a module in shm will recreate the Detector object while freeing shm completely and keeping detsize and intitialchecks (previous commit), sethostname called from DetectorClass in virtual command to have one point of entry (previous commit), testing Module class frees shared memory using free function
* Detector class: added copy and move constructor and assignmentoperators due to explicit destructor (DetectorImpl fwd declared), DetectorImpl class: included ZmqSocket to remove destructor (should not be virtual in any case), Module class: removed explciit destructor to allow compiler generated constructor and operators
* formatting
* updated client version date
* minor fix for readme autocomplete
* setting detsize after hostname should throw also for single module for consistency (#999)
* 900/autocomplete documentation (#1003)
* fixed the gendoc to reflect the new parser, updated documentation to include info about autocomplete in the command line part, error in createing docs
* fixed list deprecated, fixed command help (to show properly on a html, fixed other help warnings
* minor indents
* 900/g2 chip configure at startup (#1008)
* g2: chip reconfigure variable not set when powering on at startup because readconfig is the one configuring the chip the first time to default chip settings
* cleaning up code
* 900/rm volatile (#1006)
* Removing volatile and replacing with atomic to ensure atomicity
* compiling header include issue
* 900/jf firmware rollback (#1010)
* jf: rolling back firmware required to v1.5 and 2.5, updated release notes, fixed a bug when updating server (when server name same as link name:throws with no message, pedestal mode check changed for the time being for loops to be 0xFF size
* compensating for jf fw bug for pedestalmode where loops should be 16 bit, but is 8 bit in fw. to be fixed in next version
* formatting
* fixed python test simulator to kill previous servers
* gui: hide 'complete image' and just show 'missing packets' when there are missing packets in that image form the receiver (#1013)
* release notes update (#1015)
* 900/detach pthreads not joining (#1017)
* detach the pthreads that are not joining else memory leak
* release notes
* removed the clean up comment, also refactored the pthread join/detach for ctb 1g
* 900/server malloc check (#1020)
* usleep in communication to actually relay the err message of memory allocation to the client (weird but test for now), function in server to handle memory allcoation issues (updates mess, ret and sendsit to the client and returns prior from function implementatin, setting fnum in client for the speicific functions that send to detector each argument separtely, they need to remember the fnum else they throw with the incorrect fnum
* server: every malloc must check if it succeeded, rearranging so that the free is clear as well (only in funcs so far)
* formatting
* fixed malloc checks in other places other than funcs.c
* bug fix return from previous commit
* pointer bug from previous commit
* formatting
* binaries in
* 900/document json ctb file format (#1027)
* docs receiver formats rewrite
* added documentation for all the receiver files, updated release notes, udpated help in commands help for timing, fixed by throwing exception for aa dividy by 0 error caused by not freeing memory (detsize) when switching between 1d and 2d detectors, removed unnecessary 'recevier up' printout, fixed dbit list 64 bit mask error in master json file (was not 64 bit before), fixed bug in reading gotthard1 data (needs to be tested)
* generating commands help and formatting, also fix help for trimen command line
* added ctb frame format documentation, added some links to some commands, added documentation about adding expat-devel in installation for rhel8 gui, fixed some indentation issues that screwed up command line help documentation
* added ctb frame format documentation
* updated documentation about zeromq-devel for <8.0.0 versions
* fixed typo in python for vb_pixbuf Jungfrau dac (#1030)
* fixed cli documentation (#1037)
* 900: legal gain values in jungfrau simulator (#1043)
* legal gain values in jungfrau simulator
* typo
* release notes
* 900/jungfrau temp control default enable (#1041)
* jungfrau: enabling temp control by default at server startup
* 900: fixed invalid arguments to slsmultireceiver (#1039)
* wasnt showing error message for invalid arguments to slsmultireceiver
* allow 0 arguments to act like an slsReceiver with start tcp port 1954 and just 1 receiver
* 9.0.0: version from file to cmake and python (#1024)
- renamed conda-recipe folder
- added a check to see if build and install folder exists in build.sh (conda recipe)
- created VERSION file that has '0.0.0'for developer but can be updated using update_version.py that takes in a version. The script checks for semantic versioning and updates VERSION file
- VERSION file also copied along with py files to slsdet in python cmakelist and build_pylib.sh (for conda), also copied in root folder for installations (for no coding purpose)
- init.py and setup.py reads this file to get the version (a bit differently to find the VERSION file)
- VERSION file read into cmake to get the version and also added to compile definition. So RELEASE removed from versionAPI.h (using SLS_DET_VERSION compile definiton instead) and also removed updateRelease script.
- conda getting project version from environment variable SLS_DET_VERSION that is set in build_pylib.sh prior.
- added 3.13 python to conda build
- anything related to ctb removed from release notes as users will always use developer
- sets 9.0.0 to VERSION file by running update_version.py without an argument
* formatting
* finalized binaries
* updated m3 fw version (#1046)
* release notes
* fix cmake (cannot find VERSION file) when using package as subfolder as cmake_source_dir is not same anymore, add troubleshooting doc for m3 regarding loose control board for waiting status in auto timing mode, fix m3 tests to test register write (previously was read only) (#1047)
* 900: bumped pybind11 version and added setuptools on host (#1050)
* bumped pybind11 version and added setuptools on host
* updated pybind11 tarball to 2.13 and in cmakefile to get 2.13 frpm github, also updated documentation about pybind 2.13
* update release notes, doc
* updating readme
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* 900 cmake_source_dir (#1053)
* when package used as subdirectory (cmake-subfolder-example) it fails when python is used because the cmake_source_dir is now the one above package.
* changed cmake_current_list_dir to cmake_current_source_dir
* removing the unnecessary VERSION file installed in the root directory (from PR #1020)
* 900: pybind 2.13.6 and python 3.8 (#1054)
* changed pybind 2.13.0 to 2.13.6, kept conda at min 2.13.0
* changed min python version from 3.6 to 3.8
* 900/docs (#1056)
* minimum python is 3.8, so >=
* removed ctb frame documentation. should be in internal wiki
* updated release notes
* updated releate date
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
Co-authored-by: froejdh_e <erik.frojdh@psi.ch>
Co-authored-by: anberga <34126852+anberga@users.noreply.github.com>
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
Co-authored-by: Z.H. Li <zhenghenge@gmail.com>
Co-authored-by: Martin Brückner <martin.brueckner@psi.ch>
Co-authored-by: Braham Bechir <braham_b@pc11979.psi.ch>
Co-authored-by: Bechir <bechir.braham@psi.ch>
Co-authored-by: Bechir <bechir.brahem420@gmail.com>
* when package used as subdirectory (cmake-subfolder-example) it fails when python is used because the cmake_source_dir is now the one above package.
* changed cmake_current_list_dir to cmake_current_source_dir
* removing the unnecessary VERSION file installed in the root directory (from PR #1020)
* bumped pybind11 version and added setuptools on host
* updated pybind11 tarball to 2.13 and in cmakefile to get 2.13 frpm github, also updated documentation about pybind 2.13
* updated client versioing, doc
* updating readme
---------
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
- renamed conda-recipe folder
- added a check to see if build and install folder exists in build.sh (conda recipe)
- created VERSION file that has '0.0.0'for developer but can be updated using update_version.py that takes in a version. The script checks for semantic versioning and updates VERSION file
- VERSION file also copied along with py files to slsdet in python cmakelist and build_pylib.sh (for conda), also copied in root folder for installations (for no coding purpose)
- init.py and setup.py reads this file to get the version (a bit differently to find the VERSION file)
- VERSION file read into cmake to get the version and also added to compile definition. So RELEASE removed from versionAPI.h (using SLS_DET_VERSION compile definiton instead) and also removed updateRelease script.
- conda getting project version from environment variable SLS_DET_VERSION that is set in build_pylib.sh prior.
- added 3.13 python to conda build
- anything related to ctb removed from release notes as users will always use developer
- sets 0.0.0 to VERSION file by running update_version.py without an argument
* wasnt showing error message for invalid arguments to slsmultireceiver
* allow 0 arguments to act like an slsReceiver with start tcp port 1954 and just 1 receiver
* docs receiver formats rewrite
* added documentation for all the receiver files, updated release notes, udpated help in commands help for timing, fixed by throwing exception for aa dividy by 0 error caused by not freeing memory (detsize) when switching between 1d and 2d detectors, removed unnecessary 'recevier up' printout, fixed dbit list 64 bit mask error in master json file (was not 64 bit before), fixed bug in reading gotthard1 data (needs to be tested)
* generating commands help and formatting, also fix help for trimen command line
* added ctb frame format documentation, added some links to some commands, added documentation about adding expat-devel in installation for rhel8 gui, fixed some indentation issues that screwed up command line help documentation
* added ctb frame format documentation
* updated documentation about zeromq-devel for <8.0.0 versions
* usleep in communication to actually relay the err message of memory allocation to the client (weird but test for now), function in server to handle memory allcoation issues (updates mess, ret and sendsit to the client and returns prior from function implementatin, setting fnum in client for the speicific functions that send to detector each argument separtely, they need to remember the fnum else they throw with the incorrect fnum
* server: every malloc must check if it succeeded, rearranging so that the free is clear as well (only in funcs so far)
* fixed malloc checks in other places other than funcs.c
* jf: rolling back firmware required to v1.5 and 2.5, updated release notes, fixed a bug when updating server (when server name same as link name:throws with no message, pedestal mode check changed for the time being for loops to be 0xFF size
* compensating for jf fw bug for pedestalmode where loops should be 16 bit, but is 8 bit in fw. to be fixed in next version
* formatting
* formatting, merge fix
* fixed python test simulator to kill previous servers
* rmeoved merge binary
* g2: chip reconfigure variable not set when powering on at startup because readconfig is the one configuring the chip the first time to default chip settings
* cleaning up code
* fixed the gendoc to reflect the new parser, updated documentation to include info about autocomplete in the command line part, error in createing docs
* fixed list deprecated, fixed command help (to show properly on a html, fixed other help warnings
* minor indents
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* first draft of fixing the free function available within the class
* removed class member function freeSharedmemory for both Detector and Module; made the free function freeSharedmemory accessible to python interface; setHostname if there is already a module in shm will recreate the Detector object while freeing shm completely and keeping detsize and intitialchecks (previous commit), sethostname called from DetectorClass in virtual command to have one point of entry (previous commit), testing Module class frees shared memory using free function
* Detector class: added copy and move constructor and assignmentoperators due to explicit destructor (DetectorImpl fwd declared), DetectorImpl class: included ZmqSocket to remove destructor (should not be virtual in any case), Module class: removed explciit destructor to allow compiler generated constructor and operators
* formatting
* minor fix for readme autocomplete
* updated client version date
* fixing nextframenumber properly with firmware
* updated firmware to have getnextframenumber and fixed setnextframenumber to reset also the header fifo when stopping
* fix tests for gotthard2
* get/set next frame number in G2 (firmware only has set, no get)
* firmware has issues: each stop keeps 2 frame header in fifo and the resetting frame number happens after that
* removed the option to set burstmode to burst external or continuwous internal
* needs to be revisited before 9.0.0
* added readoutspeed command to m3 (fullspeed - 10, half speed - 20, quarter speed - 40), removed reaodut pll, moved up system pll clock indices, leaving pll index in common altera code, default speed is half speed, allow only system_c0 to be set, the others can be obtained, same for clkphase, maxclkphaseshift, clkfreq. added to readoutspeedlist commands, updated help and updated tests
* updated readoutspeedlist command
- do not validate write reg, setbit and clearbit by default anymore
- --validate will force validation on the bitmask or entire reg
- remove return value for write reg (across server to client, but thankfully not in the Detector class)
- extend validation into writereg, setbit and clearbit for Eiger (always special)
- need to check python (TODO)
- missed the rx_zmqip implementations in detector.h and python bindings
* changed rxr callback signatures to all include structs
* removed datamodify call back as size can be changed in the original data call back now
* bringing some parameters (set functions) to dataProcessor class for its callback (namely udpport, quad, fliprows, totalframes, jsonheader), resulting in also removing totalframes from 2 other function signatures
* updated MultiReceiverApp to reflect the new callback signatures
* moench: changed max shifts of adc clk from 240 to 200 (#909)
* moench server name and version renaming
* 802/moench default speed (#910)
* moench:change default speed to half speed
* Protect from getenv("HOME") returning nullptr (#907)
* Protect from getenv("HOME") returning nullptr (e.g., in case running in systemd)
* Write proper warning in Module.cpp
* moench: min exptime and also a firmware update required (#911)
* moench server: changed default values of adcphase for full speed from 300 to 150 and dac vipre_cds from 800 to 1280 (#921)
* client bug fix: m3 multi module bad channel file throws bad allocation when modules skipped, needed to add vectors in 2d vector of bad channel list (#919)
* 8.0.2.rc: client: blocking acquire stop with slave temporarily in waiting (#925)
* client: stopping a blocking acquire of multi modules checks status to catch slaves that might still be in waiting. Problem is (gotthard2 25um at least) slave is in waiting only temporarily before going go idle/stopped. So a 50ms sleep is necessary ot not throw an unnecessary error
* client: when stopping blocking acquire, wait up to 1s in 50ms increments for slave to stop waiting temporarily
* fix to rapidjson for build with gcc 14 (#928)
* 8.0.2.rc: m3 clkdiv0 20 (#923)
* m3: clk 0 changed from 10 to 20 (100MHz to 50MHz)
* g2: startup clk div back to 10 as in firmware but setting in software startup to 20
* 8.0.2.rc: moench empty data callback (#935)
* moench: empty data call back so that zmq sockets are still made and listened to in acquire that it waits for the dummy packet to be done
* moench zmq postprocessor: remove NEWZMQ ifdefs and remove connect for publisher socket
* changed enum from READOUT_ACTION_ZMQ to READOUT_ZMQ_ACTION for consistency
* 8.0.2.rc: client: status for blocking acquire stop with slave temporarily in waiting (#943)
* acq finish call back gets status squashed with default error but before that need to wait for gotthard slaves to catch up from waiting to stopped
* bug fixes related to file saving (#931)
* fix the file path resetting issue of GUI in the case where different modules have different fpath setting.
* fix stack-buffer-overflow issue when using HDF5 HDF5DataFile::parameterDataTypes have 64bit type (i.e. STD_U64LE), the size of fill_value should be at least 8 bytes.
* change the type of fill_value to uint64_t
* updated documentation from martin (#947)
* 802: jungfrau HW 1.0: adc output clock phase to 120 (#951)
* jungfrau: change adc output clock phase from 180 to 120 for v1.0 boards for reliable readout of adc #2
* formatting
* 802/release notes (#954)
* updated release notes
* versioning
* fixed a warning about narrowing conversion from size_t to int (#962)
* updating client versioning
* dont build doc for Tobi Schluter from libzmq, which uses iso-8859-1 and the umlaut cause compilation to fail on some machines (#972)
* updated release notes
---------
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
Co-authored-by: Z.H. Li <zhenghenge@gmail.com>
* put back code to obtain adc and dac device indexafter loading device tree and then create folder iio_device_links and create symbolic links there according to device indices found. ln -sf operation not permitted, so folder has to be deleted and created everytime. Also refactored definitions to have all the xilinx name or detector specific stuff out of programbyArm.c
* uncommented waittransceiverreset at startup (should work now) and return of powering off chip at startup (error for transceiver alignment reset)
* updated registerdefs from firmware
* minor prints and updating names from registerdefs
* waittransceiverreset has been fixed in firmware and removing warnign for that, transceiver alignment check for powering off chip is not done in fw (giving a warning and returning ok for now)
* fixing ipchecksum (not done), removed startperiphery, allowing readout command to be allowed for xilinx when acquiring
* added empty c extension
* added rotation to the decoding
* added color map, options and findex
* minor
* move checks to before acquisition
* added pixel map based decoder
* cleanup
* no thread creation for single thread processing
* added rotation and test to compare
* allow high and low water mark for zmq (also buffer size) for fast readouts
* removed roatation during decoding
* added Transpose to image and invert Y False to invert it
* retains the zoomed state after the first image of gui, catch and display exception if no detector connected
* moved start frame to dockable widget, removed extra frame number label, moved current measurement also to dockable widget, hide frame plot entirely when showing patternviewer
* first image dependin on which plot
* remember settings of main window size and position, dockewidget if docked, its size and posisiotn as well, then update it next time the gui is opened
* change in comment
* using c decoder for moench 04 and matterhorn
* catch exception from invalid image from decoder
* clean up
* update row and col when choosing image type, neeeded to show values
* fix for previous PR
* disable resetting colormap values
keep the range selected for every new acquisition
* fix typos + tested on virtual matterhorn
* minor print
* refactored Slow ADCs Tab
* refactored DAC tab
* refactored power supplies
* refactored signals tab
* refactored transceiver tab
* fix typo
* fix typo2
* remove commented code
* delete commented code
* delete commented code
* delete commented signals code
* remove commented code for transceiver tab
* refactor adc tab
* refactor Pattern Tab
* Refactor transceivers tab (PR#5) (#118)
* refactored transceiver tab
* remove commented code for transceiver tab
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
* refactor adc tab (PR#6) (#119)
* refactor adc tab
* refactored Plot and Acquisition Tabs
* fix the regression issue
* restructure project files
* applying singleton and renaming tabs to services
* working install using pip
* applies singleton to tab classes and remove CI erros
* added pyzmq and pillow
* remove the singleton implementation and keep changes
* fix merge errors in mainWindow
* moved misplaced init file
* rename service to tab
* reorganize imports
* iterate over tabs
* reorder tabs
* add slowadc to the list
* saving changes (buggy)
power supply ui not showing in the gui
* split power supply tab
* fixed tests
* add hardcoded values to defines file
* fix error
* separate power supply
* fix errors for powerSuppliesTab
* split dacs
* split slow adcs
* split signals tab
* added tests for bit_utils
* add slowAdc class to defines
* split transceiver ui file
* split adc.ui
* split pattern ui file
* split plot and acquisition ui file
* added basic test for parsing bit names
* removed redundant code in read_alias_file
* fix dacs ui position
* testing for correct exception
* cmd and args at split
* group radio buttons
* fix comments from PR#1
* show legend
* added python version and dev requirements to setup.py
* fix dac issue
* moved _decoder into pkg
* added inplace build
* removed clear
* fixed dependencies
* make tests run without slsdet
* updated name of action
* define colcount
* fixed loading of alias file
* add yapf and ruff
* apply formatting
* fix E and F rules
* add more ruff rules
* change variable name
* squashing gh debugging commits and add pre-commit
* update label values to mv units
* add hook for yapf
* reconfigure yapf precommit hook
* add format and check_format to makefile
* change gh actions
* update readme
* added check_format
* WIP
* added linting in github action
* updated readme]
* add more control for color choice
* remove useless file
* fix un-updated line after refactoring Defines
BIT0_31_MASK is not found in Defines.signals
* visually improve the interface
* fix last commit
* add only selected plots for legend
* add hide legend button
* change hide legend to show legend
checkbox show legend is checked by default
* add support for saving in numpy
* solve conversations
* fix acq index offset
* fix browse button in pattern error
* fix other browse button errors
* finish tests and add usage.md
* remove buffer
* add file,numpy-like interface and tests
* remove useless .npy files
* subscriptible npz files
* remove useless files
* remove repetetive tests
* save changes
* add mode r+, add with support,remove logging
* remove offset of acqIndex between raw and numpy saving
* fix only saving last frame
* save signals of multiple devices
* add comments and move condition for clearer code
* fix bug when vieweing pattern file
* iterate over enabled and plotted plots
* add padestal substraction to transceiver and analog data
* init pedestal frames to detector.frames
* restore old exception
* add pedestal substraction for digital signals
* remove frames spinbox from plotTab
* remove comments and use str instead of Path
* avoid saving all frames
* correct exception and log error's trace
* add gui tests
* add waveform test
* add pedestal test
* refactor by using fixtures
* add tests for moench analog and pattern
* add pytest-qt to dependencies
* add save and load gui parameters
* remove nohup file
* fix old bug IndexError
* save plot type
* a
* handle canceling load, loading matterhorn pedestal for moench
* remove comparing .png files for pattern test
* save plot type
* red error on status bar when shape mismatch for loaded pedestal
* fix makefile and docstrings
* fix PRs conversation
* move code into different function
* fix wrong function names for power supply
* removed old ctbgui
* removed unnecessary files
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
Co-authored-by: Braham Bechir <braham_b@pc11979.psi.ch>
Co-authored-by: Bechir <bechir.braham@psi.ch>
Co-authored-by: Bechir <bechir.brahem420@gmail.com>
* m3: fixed stop server not starting up with setup variables
* all servers except eiger fixed for virtual stop server to start up with setupDetector function called
* virtual tests work
* eiger: versions print neednt be in stop server
* jungfrau: stop server (not virtual) also needs to read config file
* ensuring master is setup for virtual and real servers
* enable ipv6 in zmq socket
* removed rx_zmqip API and field in gui, changed client updaterxrzip to updateclientzmqip to have the rx_hostname ip if 0.
* updated command line for rx_zmqip to give a warning.
* Replaced 'depreciated' to 'deprecated' everywhere
* switching from * to 0.0.0.0 works for rebinding zmq sockets
* fixed help in command line for rx_zmqip * to 0.0.0.0 and removed cmd in python
* remove publisher zmq socket ip also for moench post processing
* fixed tests
* publisher zmq ip macros to be reused
* voltage regulators only looks at dac and not at ctrl_reg
* xilinx: change dac max to 2048, setting dac ist not inverse conversion from dac to voltage anymore, but setting power is inverse, also there is max and min to power, a different min for vio and this is checked at funcs interface, not printign or converting to mv in dac for power regulators (as its conversion max and min are different)
* Use links for dacs/adc and adapt power rglt thresholds
* Remove wait for transceiver reset
* adc and dac device not used anymore and hence removed
* udp restucturing: arm has to be multiple of 16 and no byteswap in udp_gen, option to compile locally in arm architecture, memsize of the second udp memory has to be limited
---------
Co-authored-by: Martin Brückner <martin.brueckner@psi.ch>
* fix the file path resetting issue of GUI in the case where different modules have different fpath setting.
* fix stack-buffer-overflow issue when using HDF5 HDF5DataFile::parameterDataTypes have 64bit type (i.e. STD_U64LE), the size of fill_value should be at least 8 bytes.
* change the type of fill_value to uint64_t
Co-authored-by: Z.H. Li <zhenghenge@gmail.com>
* moench (feature to wait for post processing to be done in new sls_detector_acquire_zmq executable)
READOUT_ACTION_ZMQ added to action enums
sls_detector_acquire_zmq added to executables
empty data call back so that client listens to last dummy zmq packet from moench post processor
processor: remove NEWZMQ ifdefs and remove connect for zmq publisher socket
* fix to compile
* cmds generated and parsed
* changed common.c readADCFromFile to make it more general and move temperature calculation for Eiger out of this function and inside whereever it is called.
* g2 and m2: gethighvoltage was just a variable set in server, it is now moved to a get inside DAC5671 implementation (but not reading a measured value, instead what is set from a file), high voltage variable used inside DAC5671 for virtual servers
* g2: switching off hv (ifrom non zero to zero value) will wait for 10s; powering on chip reconfigures chip; powering off chip unconfigures chip; powering off chip also includes check if hv = 0, if not throw exception; chip configuration checked before acquring; at start up: hv switched off and chip powered on, so does not wait 10s to switch off hv;
* included test to check powering off chip when hv is on should throw an exception
* g2: check if chip configured before acquiring
* nios: read hv value set from file and virtual still goes into DAC5671 for conversions to and fro dac to V, change common readadc to readparameter to generalize, make sethighvoltage into a get and set to catch errors in get as well, g2: if not at startup, remmeber hv value before setting it and after check if value was being switched off (from a non zero value) and wait 10s if it was (10s wait only for switching off from non zero and not at startup)
* m3: clk 0 changed from 10 to 20 (100MHz to 50MHz)
* g2: startup clk div back to 10 as in firmware but setting in software startup to 20
* m3: minor print error if clk divider > max
* client: stopping a blocking acquire of multi modules checks status to catch slaves that might still be in waiting. Problem is (gotthard2 25um at least) slave is in waiting only temporarily before going go idle/stopped. So a 50ms sleep is necessary ot not throw an unnecessary error
* client: when stopping blocking acquire, wait up to 1s in 50ms increments for slave to stop waiting temporarily
* period and exptime(patternwaittime level 0)
* added new regsieterdefs and updated api version and fixedpattern reg
* autogenerate commands
* formatting
* minor
* wip resetflow, readout mode, transceiver mask, transceiver enable
* acquisition, but streaming done bit and busy (exposing + read chip to fifo) not known yet from fw
* programming fpga and device tree done
* most configuration done, need to connect configuretransceiver to client
* stuck at resetting transciever timed out
* minor
* fixed virtual, added chip busyto fifo, streaming busy, set/getnext framenumber
* configuretransceiver from client, added help in client
* make formatt and command generation
* tests for xilinx ctb works
* command generation
* dacs added and tested, power not done
* power added
* added temp_fpga
* binaries in
* ctrlreg is 0 to enable chip=fixed, high dac val = min val= fixed, power regulators in weird order=fixed, device tree could be loaded with dacs before adcs=fixed
* start works
* virtual server sends
* receiver works
* tests
* python function and enum generation, commands generatorn and autocomplete, formatting, tests
* tests fail at start(transceiver not aligned)
* tests passed
* all binaries compiled
* eiger binary in
* added --nomodule cehck for xilinx
* Protect from getenv("HOME") returning nullptr (e.g., in case running in systemd)
* Write proper warning in Module.cpp
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
* forward declare zmq_msg_t and moved include
* removed zmq as dependency for slsdet (#870)
* Fixed path when building as submodule
* new moench data structure for offline processing
* meonch raw data and zmq process files updated to 7.0.3 version
* implemented config file for Zmq file
* raw data and zmq work with config file, but only with one file/interface
* zmq config change
* added config examples for zmq and rawdata
* update release notes, release versions
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
Co-authored-by: froejdh_e <erik.frojdh@psi.ch>
Co-authored-by: Anna Bergamaschi <anna.bergamaschi@psi.ch>
Co-authored-by: anberga <34126852+anberga@users.noreply.github.com>
* new rct structure for moench03
* new moench data structure for offline processing
* meonch raw data and zmq process files updated to 7.0.3 version
* implemented config file for Zmq file
* raw data and zmq work with config file, but only with one file/interface
* zmq config change
* added config examples for zmq and rawdata
* implemented testbus, testfpga, set/get #frames, triggers, allowed that and for connection to client, also allowed, getnumchannels, configuremac, getrunstatus, setdetectorposition with dummy values
* connected kernelversion, hardwareversion, versions, framesl, triggersl, dr, timingmode, pattern (except patioctrl) thats there for altera ctb
* replaced set/get64Bit to set/getU64bit in all loadpattern.c for (ctb and m3 also)
* implemented testbus, testfpga, set/get #frames, triggers, allowed that and for connection to client, also allowed, getnumchannels, configuremac, getrunstatus, setdetectorposition with dummy values
* allowing tests for xilinx
* binaries in
* updated registers, arm64
* compiler set to aarch64 for xilinx server
* updated RegisterDefs.h
* merge into generate branch and resolving conflicts and adding the xilinx changes to callerspecial and commands.yaml
* compiles and can print firmware version (using a different csp0 address)
* fixing other servers (gotthard, jungfrau, moench, mythen3) that it returns in case of mapping failure, xilinxctb: added that it checks type, prints proper fw version, checks kernel date, added armprocessor define to use in common places, added specifiers to supress overflow and truncation warnings
* added detector ip and mac adddress to the printout
* fixed tests and recompiled servers
* replacing detp with sls_Detector_put and detg with sls_detector_get
* sls_detector_not implemented, but extended message to ask user to use sls_detector_get or sls_detector_put
* autocompletion also for sls_detector or det
* commands code generation (#803)
* commands code generation for only frames command
* fix cmake file and add Caller files
* working exptime, fully extended commands file and its variants
* start adding template commands
* add INT_CMD_VEC_ID template
* add list command, generate multiple bins, format code
* reach 208 commands using the cpp macros
* add tests for command parser
* start adding tests for commands parser
* fix typo to use commands.yaml
* add more tests for command_parser
* add all template functions (up to 218 commands)
* finish template functions and add more CmdProxy.cpp functions (250+)
* 257 commands
* 300 commands the rest are very special commands
* add special commands without generation
* separate special functions from generated c++ file
* implementing one command for put and get (buggy)
* add infer action in a separate file
* generate header for special commands from yaml
* allow only 0 or 1 for bool inputs
* group all commands in gen_commands.py
* add help to gen_commands.py
* add autocomplete bash script
* autocompletion: add support for module levels and help
* remove debugging line
* add autocompletion, help to commands, change int [0,1] to bool
* copy tests for Caller.cpp. Tests pass
* update with the new developer branch changes
* fix errors after merging (there is problems with tests)
* fixed port/stopport in yaml (intput typo), added '_caller' to the test dac and test on chip dac command in global test for cmdcaller
* undo previous test simulator debug change
* add documentation for the generated code
* reducing the comment to be replaced in length so formatting does not split into 2 lines
* removed formatting specific style of C++11 in gen_commands.py to keep with the top level clang format of the project
* regeneratign code for commands
* automation generated
* Redirect deprecated commands (#872)
* working implementation, need to fix dac
* fixed deprecation redirect for dac command
* Detector specific autocomplete (#873)
* working implementation, need to fix dac
* fixed deprecation redirect for dac command
* detector specific completion for dac
* added autocomplete using detector specific
* fixed error when autocompleting partial words
* Generate commands/fix commands (#875)
* fix vm_a, im_a etc have deg Celsius suffix, also help missing or changed in some places
* dac: require det id for all, arg0 to be printed at output, help for onchip dac and dac, onchipdac: spacing
* getscan detid and blocking trigger help
* udp_Dstlist det_id fixed, but rx_id invalid
* cmdApp in line with cmdLineApp (missing version, receiver_id, not creating det object in help action
* added set_command to differentiate between check_det_id and require_det_id (mixed up), args: -1 needs to check for at least one argument
* reordering
* reordering and checked till integer_command_hex
* fixed a lot more commands
* fix caller tests for eiger
* changes to tests after Bechir left
* changing .cmd to .cmdcall for the caller commands
* fixed tests for caller, still warning for setexptime about cast input
* autocomplete ran
* add moench test
* regenerating autocomplete and commands
* fixing other things from merge conflicts (renaming slsDetectorDefs to defs in commands.yaml)
* formatting
* added code injection to help (#876)
* updated 3 commands to have get output that can be put into put (#877)
* updated some commands to have get output that can be put into put
* fix tests for clkdiv
* adding help to free (#878)
* removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy) (#879)
* More helpful error messages for unsupported actions (#880)
* removing old commands and renaming them, (also making it work for parameters command as it was still calling cmdproxy)
* Added specific help for unsupported actions
* fixed a vetofile get special exception message. more specific warning for special exception message instead of no function warning
* added condition checking true in exceptions for special message
---------
Co-authored-by: Bechir Brahem <bachbrahem@gmail.com>
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
* if blocking and handling sync, only master gets blocking acq, slaves get non blocking as they are first and so dont get status or error caught when slaves dont get trigger (due to not connected etc) and acq returns with slaves still in waiting status. so check status of all in blocking acq
* for all dets with sync, ensure atleast one master when starting acq
* docs updated about sync
* if blocking and handling sync, only master gets blocking acq, slaves get non blocking as they are first and so dont get status or error caught when slaves dont get trigger (due to not connected etc) and acq returns with slaves still in waiting status. so check status of all in blocking acq
* for all dets with sync, ensure atleast one master when starting acq
* docs updated about sync
* draft to fix virtual test when it fails
* catching errors in tests and removing sigchild ignore so servers (process in background) executing commands will not fail (pclose no child processes, if sigchld is ignored) fixed
* uncommented python loading config
* somehow killal slsReciever in second detector test fails even though no receiver running
* fixing script for virtual simlator test:fixed issue with check if process running, fixed moench tests
* fix virtual test when it fails
* catching errors in tests and removing sigchild ignore so servers (process in background) executing commands will not fail (pclose no child processes, if sigchld is ignored) fixed
* uncommented python loading config
* somehow killal slsReciever in second detector test fails even though no receiver running
* fixing script for virtual simlator test:fixed issue with check if process running, fixed moench tests
* fix acquisition finished status to have different status for different modules, but does not have to be error. for eg. jf sync fw (2.4.1 gives idle for master and stopped for slaves when stopping acquiistion)
* fix acquisition finished status to have different status for different modules, but does not have to be error. for eg. jf sync fw (2.4.1 gives idle for master and stopped for slaves when stopping acquiistion)
* fix acquisition finished status to have different status for different modules, but does not have to be error. for eg. jf sync fw (2.4.1 gives idle for master and stopped for slaves when stopping acquiistion)
* jf: if bit 14 in reg 0x5d (electron mode collection bit) is changed, configure chip if v1.1 and powered on. so touch writeregister (setbit/clearbit also calls write register in the end). replace when electroncollectionmode command introduced
* jf: if bit 14 in reg 0x5d (electron mode collection bit) is changed, configure chip if v1.1 and powered on. so touch writeregister (setbit/clearbit also calls write register in the end). replace when electroncollectionmode command introduced
* jf: rewrite of status reg bits, waiting state includes both wati for trigger and start frame, blocking trigger only waits if its not in waiting for trigger and run busy enabled, error state connected in firmware
* rewrite of status reg bits, waiting state includes both wati for trigger and start frame, blocking trigger only waits if its not in waiting for trigger and run busy enabled, error state connected in firmware
* jf sync mode master could return idle when stopped and so not all modules return the same value and must check for 'stopped or idle', Also must throw if any of the module gives an error
* added contains_only to sls::Result (#827)
* added variadic template for checking if a result contains only specified values
* fix for gcc4.8
* renamed to Result::contains_only
* updated condition in Detector.cpp
* stop on only the positions
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* jf sync mode master could return idle when stopped and so not all modules return the same value and must check for 'stopped or idle', Also must throw if any of the module gives an error
* added contains_only to sls::Result (#827)
* added variadic template for checking if a result contains only specified values
* fix for gcc4.8
* renamed to Result::contains_only
* stop on only the positions
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* jf sync mode master could return idle when stopped and so not all modules return the same value and must check for 'stopped or idle', Also must throw if any of the module gives an error ( not jungfrau, but eiger could)
* added contains_only to sls::Result (#827)
* added variadic template for checking if a result contains only specified values
* fix for gcc4.8
* renamed to Result::contains_only
* stop on only the positions
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
* getVoltageList, getVoltage /set, getMeasuredVoltage, getVoltageNames /set, getVoltageIndex moved to 'Power' as its misleading
* added cstdint and names slowadc, added division to mV
* changed uV to mV in command line slow adc help. removed all python slowadcs (as it was already implemented as slowadc
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
* updated python bindings for port update from int to uint16_t
* user friendly error message for exception when python arg does not match uint16_t for ports
* merge fix from 7.0.2: new jungfrau fw versions, incremented binary, hdf5 and json versions
* moench: changed dac names and default values to old moench values
* moench: remove interface clk polarity at start up
* moench: default speed is half speed, default values for adc offset and adc phase for different speeds (only half speed confirmed), adc vref voltage to 2.0 like G1
* moench: connected adc pipeline to client
* moench: receiver- default frames per file is 100k and discard partial frames as default
* moench binary in
* using tostring in gui for dacs
* moved frame discard policy as a parameter to be configured with a default depending on detector
* moench: 300 degrees for adc phase in full speed
* silence warnings
* making constructors explicit to avoid unintended conversions
* changed struct to class since we already have public:
---------
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
* using fetchcontent to get zmq
* local copy of libzmq
* added guard for policy setting
* removed the need to export by using build interface
* moved pybind11 to FetchContent
* removed zmq hint from cmk script
* Fixed comments
---------
authored-by: froejdh_e <erik.frojdh@psi.ch>
* using fetchcontent to get zmq
* local copy of libzmq
* added guard for policy setting
* removed the need to export by using build interface
* removed zmq hint from cmk script
---------
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
Co-authored-by: froejdh_e <erik.frojdh@psi.ch>
* transceiverenable, tsamples, romode for tranceiver and digital_transceiver
* 202 spec instr only for transceiver mode
* removed check for empty in trans readout and clean memory before reading from fifo
* ctb read fifo strobe for all after reading all channels, adding 1us after selecting channel, changing fw date
* updated 10gb transceiver enable
----
* added transceiver (tsamples, romode(transceiver, digital_transceiver), transceiverenable (mask)
* clean memory before reading from fifo (for analog and digital as well)
* read fifo then read strobe (also corresp fw) fixes number of reads (also for analg and digital)-> increases all pipelines by 1
* fixed bug in rearranging digital data in receiver
* fixed bug in streaming size of data after rearranging
* fixed bug in setbit, clearbit,and getbit
* status checks fifo before returning idle (transmitting if data in fifo if transceiver more enabled)
* soem matterhorn specifics that will need to be put into pattern in a month or two. this is temporary.
* NOTE: breaking api. rxParameters struct has transceiverenabel and tsamples given from det to receiver
* when dbit list is enabled, the size of data in zmq stream is changed to only the digital bits enabled size. now fixed to also include analog size
* allowing to set 0xffffffffffffffff to pat io control. prevously was used to do a get. fixed also for pat bit mask and pat mask
- start acq list: mixup with master pos #743 : fix that only master starts second and not all (for start acq), typo with pos and masters list
- synced master status running when setting to slave #747: synced master status running when setting to slave
* jf: unsync before setting master/slave and then sync (if it was set) to overcome master going into running state when making it a slave and synced
* add tests for this condition
* updated release notes, updated min fw version requirement for v1.0 boards
* moench, removed chip version, filter resistor, filter cells, currentsoures, gain mode, setttings(modes), dbitphase, maxdbitphase, autocompdisable, comparatordisabletime, made acq start and stop a pulse, removed unused registers
* added parallel command
* remove gain plot for moench
* moench: updated adc invert val
* moench: update adcoffset to 0xf and adcphase to 140 degrees
* removed sync clock in moench
* updated min fw version
* removing config file in moench server
* Revert "Ctb: allow adc mask enable to be 0 for 1 and 10GbE (#750)"
This reverts commit a0f250a487.
* better error message about setting adc mask to 0. Cannot set it to 0 due to ram allocation
* using argparse for parsing command line arguments
* added command line option to specify which servers to run
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
adding rx_roi also in the zmq header for external guis to put the "yellow box".. sending full roi instead of -1, and sending for each zmq port. "(multiple yellow boxes)".
* merge fix from #721 PR (sync) 7.0.2.rc -> developer
* row and column for jungfrau mixed up
* multi module jungfrau sync must do slaves first then master for start acquisition and send software trigger, and master first and then slaves for stopacquisition
* non blocking to slaves first and only then blocking/nonblocking to the master for sending software trigger(jungfrau multi mod sync)
* fixed get/set timing jungfrau when sync enabled, getsync during blocking acquire (for trigger or stop) will get stuck as it should ask the stop server
* switching between 1 and 2 interfaces did not set gui/client zmq port properly. Resulted in dummy streaming forever. fixed
* formatting, refactoring: const & for positions, multi mod M3 stop first master first
* adding missing cstdint for gcc 13
* Refactoring handle sync out, handling synchronization also for softwaretrigger for m3, for start/sync/stop for g2/g1
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
* fixed row and col for moench 2 interfaces
* fix moench getTiming and also allow moench to handle sync
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
adding rx_roi also in the zmq header for external guis to put the "yellow box".. sending full roi instead of -1, and sending for each zmq port. "(multiple yellow boxes)".
* row and column for jungfrau mixed up
* multi module jungfrau sync must do slaves first then master for start acquisition and send software trigger, and master first and then slaves for stopacquisition
* non blocking to slaves first and only then blocking/nonblocking to the master for sending software trigger(jungfrau multi mod sync)
* fixed get/set timing jungfrau when sync enabled, getsync during blocking acquire (for trigger or stop) will get stuck as it should ask the stop server
* switching between 1 and 2 interfaces did not set gui/client zmq port properly. Resulted in dummy streaming forever. fixed
* formatting, refactoring: const & for positions, multi mod M3 stop first master first
* adding missing cstdint for gcc 13
* Refactoring handle sync out, handling synchronization also for softwaretrigger for m3, for start/sync/stop for g2/g1
---------
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
Firmware updated. spi moved to firmware. In Software, configuring, then a pulse to start, wait for done bit and convert the values read from a regiter.
* modified ZMQonline display for stripsel usage. modified dataprocessor to overwrite header.detspec1 with ROI in case of ROI.
* Removing changes to the slsReceiver, moved to branch jf_zeromq_display_rxroi
* rx_hostname and port combo to one, or hostname to all, or a vector of hostnames and ports, ignoring none or empty, then verifying no duplicates for the host port combo including from shared memory
* extracted function for rx_hostname (#694)
* c++14 revert
* unique hostname-port combo for port, hostname, rx_tcpport (#696)
* verify unique combo for rx_port as well
* check unique hostname-port combo also when setting control port, hostname, rx_hostname and rx_tcpport
---------
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
Co-authored-by: Erik Frojdh <erik.frojdh@psi.ch>
* eiger: hardwareversion, fix firmware version unable to read version scenarios, check to see if febl, febr and beb have same fw version
* feb versions can be picked up only after feb initialization
stop should really stop even if receiver had crashed, so check rx status after sending stop; also ensuring restream in acquire happens only if thers a callback
* fix to access to shared memory that doesnt exist
* fix for freeing shm and then setting hostname from API
* exception error message moved to private function
* refactoring to avoid allocating intermediate string
* modified ZmqSocket to expose the SO_RCVBUF and SO_SENDBUF parameters. Modified DataStreamer.cpp to change the SENDBUF to 1MB when HWL is <10. Modified Datastreamer.cpp so that when HWL is changed, socket is unbind/rebind. Added rebind to ZmqSocket.cpp.
Changed slot UpdatePlot() in qdrawplot.h from privat tto public, added plot->UpdatePlot() after every axis range change, so the plots are updated immediatly and not at the next image.
Added onlinedisp_zmq program which connects to the receiver ZMQ port and show images and histos. Compiled against ROOT 6.22/02. Added examples files.
* added setbuffer size also for gui, moved hardcoded values to a macro, removed unnecessary return of ok or success, added actual zmq exception message to could not create sockets error
* zmq: changing buffer size done within hwm
---------
Co-authored-by: mozzanica <l_mozzanica@mpc2012.psi.ch>
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
* eiger: adding mask to read/write registers. useful for setting quad parameters as they might have different values for left and right fpga registers.
** fix quad position
* fix quad flipping
* formatting
* first tries with a process intead of thread for rx_arping
* Moving delete pointer of udp socket to stopReciever,so rx_arping can only be set when udp socket is closed
* refactoring and formatting
* unused variable processId
* ignore sigchild to prevent zombie from child processes being killed
* added none or 0 to unset bad channels
* free function split to get int array from string of arguments for badchannels
* missed a file
* allowing list for badchannels in command line
* added badchannels in python
* added size check
* more comments in Detector.h and added more tests for facny command line badchannels
* removeDuplicates accept any container, added tests
* corner cases: 1:5,6,7 or 5,6,7 or just 1:5
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
* copied jungfrau server to moench and adapted
* fixed image size and num packets
* read n rows allows 16
* commneted out configure_asic_timer at server startup. To be removed later the ASIC_CTRL_REG and storage cell options
* moench:removing the decrement (which was in jf) in read n rows to register
* removed lblsamples from gui
* loop for stop, 10 retries
For example, if module A got a "stop" during an acquisition, it stops to an 'Idle' state. If module B gets a "stop" before an acquisition, it will return it is in 'Idle' state and continue to start the next acquisition, but module B then waits for "ready for trigger" synchronization from module A, which it will never get. Since module B missed the asynchronous stop command, the workaround in the client is to send another "stop" command (upto 10 retries) till it returns Idle.
* added a lock when stopping or starting state machine in eiger server
* added 5ms right after acq started to make sure it really started
* added 100ms right after acq started to make sure it really started
- qt4->qt5
- in built qt5 6.1.5 because rhel7 is not upto date with qt5, removed findqwt.cmake
- made a fix in qwt lib (qwt_plot_layout.h) to work with 5.15 and lower versions for qrect constr.
- qt5 forms fixed, qt4 many hard coding forms switched to forms including qtabwidget, scrolls etc, fonts moved to forms
- docking option enabled by default, removed option to disable docking feature from "Mode"
- added qVersionResolve utility functions to handle compatibility before and after qt5.12
- qtplots (ian's code) takes in gain mode enable to set some settings within the class, with proper gain plot ticks
- ensure gain plots have no zooming of z axis in 2d and y axis in 1d
- removed placeholder text in qpalette in main window form as its not supportd until 5.12 (so using qt5.9 designer insted of qt5.15 to cope)
- tab order
Servers:
- fixed some error messages that were empty for fail in funcs (mostly minor as if this error, major issues)
- removed getClientServerAPIVersion in server (not used)
- removed rxr side (clientversion compatibility check), removed enum as well as it is now done on the client side.
- versionAPI.h
- GITBRANCH changed to RELEASE
- dates for all API changed to "sem_version date". Scripts to compile servers modified for this. Empty "branch" name will end up with developer for sem_version.
- Version class with constructor taking in the long version (APILIB date). Other member functions including concise(to get sem_version for new releases and date for old releases),
- bypassing initial tests, also now bypasses the client-rxr compatibility check (at rx_hostname command)
- previously, compatibility between client-det was ensuring both had the same detector API (eg. same APIJUNGFRAU)
- Now, compatibility only checks APILIB (client side) and detector API(eg. APIJUNGFRAU) (detector side) have same major version. It only does backward compatibility test. Rest is upto user to ensure.
- If server is from an older release, it will compare dates like previous implementation (APIJUNGFRAU from both client and det)
- - previously, compatibility between client-rxr was ensuring both had the same APIRECEIVER
- Now, compatibility only checks APILIB (client side) and APIRECEIVER (rxr side) have same major version. It only does backward compatibility test. Rest is upto user to ensure.
- If rxr is from an older release, it will compare dates like previous implementation (APIRECEIVER from both client and rxr)
- removed APIGUI, evalVersionVariables.sh, genVersionHeader.sh (not needed or not used)
- clientVersion, rxrversion and detectorserverversion all return strings and not integers (in hex) anymore. Depending if it has semantic versioning, it will print that or the date if it is too old.
- fixed in python (strings for versions)
- check_version function in detector server changed to "initial checks" as it only checks server-firmware compatibility and initial server checks. Client compatibilities are moved to client side.
- --version gives sem_version and date? Is date needed as well. The clientversion, detserverversion and rxrversion API gives only sem_version (no date)
- - formatting
- eiger server: fix for fw workaround where stop acquisition processing done signal does not come up, by removing reset in stop acquisition and waiting for2 seconds for feb done processing signal to go down, if it doesnt, throw if status is not idle.
- error messages not setup for some eiger server errors
- quad fix (chip signals to trim quad, both left and right registers can be different)
- minor logical error of no consequence (stop acquisition returns a different enum than expected)
- removed feb reset in stop acquisition as it caused processing bit to randomly not go high (leads to infinite loop waiting for it to go high). This is anyway done at prepare acquisition and set trimbits.
- left AND right registers monitored for processing bit done
- febProcessinginprogress returns STATUS_IDLE and not IDLE
- In feb stop acquisition, if processing bit is running forever, checks for 1 s, then if acq done bit is high, returns ok, else throws
- feb stop acquisition returns 1 if success and fucntion in list calling it compares properly instead of STATUS_IDLE (no effect, but incorrect logic)
- chipsignals to trimquad should only monitor right fpga (not both as it will throw)
- fixed error messages of readregister inconsistent values
- setmodule and read frame was returning fail without setting error messages (leading to broken tcp connection due to no error message)
-
* badchannels for m3 and modify for g2 (file from single and multi)
* m3: invert polarity of bit 7 and 11 signals from setmodule, allow commas in bad channel file
* badchannel file can take commas, colons and comments (also taking care of spaces at the end of channel numbers)
* tests 'badchannels' and 'Channel file reading' added, removing duplicates in badchannel list, defining macro for num counters in client side
* fix segfault when list from file is empty,
* fix tests assertion for ctbconfig (adding message) for c++11
* fixed badchannels in m3server (clocking in trimming)
* badchannel tests can be run from any folder (finds the file)
* initital implementation
* datetime replaces with sls::Duration in Python C bindings
* using custom type caster
* fix for conversion to seconds
* added set_count in python
* common header for pybind11 includes
authored-by: Erik Frojdh <erik.frojdh@psi.ch>
* g2: new hdi values, write hdi value to reg, set slave/master to reg, able to set master from server config file, server command line and client
* print versions for virtual as well
* udp socket refactor from reuss: closing socket before throwing for bind error in constructor, closing socket at destructor and not at shutdown to allow other thread to read with a -1, so the object can still be accessed
* check for size of packet for every detector
* nullptr to unique ptr to call its destructor, when deallocating resources moved out of shutdown
* minor
* incorrect dimensions for virtual hdf5 parameter set
* fix for corner case bug in hdf5 virtual parameter dataset when frames caught is not a multiple of framesperfile
* reafctoring for readability and error prone hard numbers
* gui message doesnt show if it has a '>' symbol in error msg
* minor refactoring for readability (size_t calc fifo size)
* refactoring listening udp socket code: activated and datastream dont create udp sockets anyway, rc<=- should be discarded in any case
* wip
* refactoring memory structure access
* wip: bugfix write header + data to binary
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* portRoi no roi effecto on progress
* fail at receiver progress, wip
* segfaults for char pointer in struct
* reference to header to get header and data
* refactoring
* use const defined for size of header of fifo
* updated release notes
* remove pointer in callback for sls_receiver_header pointer
* rx same name arguments in constructors
* rx: same name arguments in constructor
* rx: removing the '_' suffix in class data members
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* diff undo for clang later
* wip
* Wip
* const string&
* gui message doesnt show if it has a '>' symbol in error msg
* minor refactoring for readability (size_t calc fifo size)
* refactoring listening udp socket code: activated and datastream dont create udp sockets anyway, rc<=- should be discarded in any case
* wip
* refactoring memory structure access
* wip: bugfix write header + data to binary
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* portRoi no roi effecto on progress
* fail at receiver progress, wip
* segfaults for char pointer in struct
* reference to header to get header and data
* refactoring
* use const defined for size of header of fifo
* updated release notes
* remove pointer in callback for sls_receiver_header pointer
* rx same name arguments in constructors
* rx: same name arguments in constructor
* rx: removing the '_' suffix in class data members
* merge fix
* merge fix
* review fix refactoring
* gui message doesnt show if it has a '>' symbol in error msg
* minor refactoring for readability (size_t calc fifo size)
* refactoring listening udp socket code: activated and datastream dont create udp sockets anyway, rc<=- should be discarded in any case
* wip
* refactoring memory structure access
* wip: bugfix write header + data to binary
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* portRoi no roi effecto on progress
* fail at receiver progress, wip
* segfaults for char pointer in struct
* reference to header to get header and data
* refactoring
* use const defined for size of header of fifo
* updated release notes
* remove pointer in callback for sls_receiver_header pointer
* passing reference header for callback instead of copying it
* gui message doesnt show if it has a '>' symbol in error msg
* minor refactoring for readability (size_t calc fifo size)
* refactoring listening udp socket code: activated and datastream dont create udp sockets anyway, rc<=- should be discarded in any case
* wip
* refactoring memory structure access
* wip: bugfix write header + data to binary
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* portRoi no roi effecto on progress
* fail at receiver progress, wip
* segfaults for char pointer in struct
* reference to header to get header and data
* refactoring
* use const defined for size of header of fifo
* updated release notes
* refactoring from review: fwrite, static_cast
* separating pattern levels from command name: command line done
* separated patten level from command in examples and default pattern files in servers
* command line and server works
* python: patnloop not verified, wip
* works except for patloop (set, and get does not list properly)
* minor
* fixed tests
* added 3 more levels for ctb and moench
* wip
* minor err msg
* minor
* binaries in
* separating pattern levels from command name: command line done
* separated patten level from command in examples and default pattern files in servers
* command line and server works
* python: patnloop not verified, wip
* works except for patloop (set, and get does not list properly)
* minor
* fixed tests
* added 3 more levels for ctb and moench
* wip
* minor err msg
* minor
* binaries in
* python working
* import fix
* changed fw version for ctb and moench. binaries in
Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
* prevent mem size check before Detector constructed (for loading config files), allowing freeing shm for submodules
* back to not allowing free submodules - consistency issues
* vicin default changed to 800, only setting vthx directly allows to set dac even if counter disabled, else disable counter, setallthresholdenergy if an energy is -1, get module value, fix that reg was repaced by isettings
* vth3 disabled for interpolation enable, interpolation disable sets counter mask to what it was before (updating old mask whn setting counter mask except for setting all counters for interpolation enable) and enabling vth3 if counter was enabled
* refactor and test for previous commit
* pump probe only has vth2 enabled, handles both pump probe mode and interpolation mode as well
* wip
* refactored pump probe and interpolation and added to setmodule
* check dacs and trimbits out of range for setmodule (not just threshold)
* binaries in
* m3: pump probe and interpolation mutually exclusive
* minor
* added the possibility to save settings file for m3 and eiger
* added save trimbits to gui
* update release notes
* python wip
* moved location of trimbits save option in gui
* python works
* updating getModule with all its parameters in the server side
* updating binaries
* roi structure expanded to have ymin and ymax
* compile with 'detector roi'
* wip
* wip, rx_roi, rx_clearroi
* wip rxroi
* rxroi wip
* wip rxroi
* merge fix
* wip
* rx_roi works, impl wip, test
* tests in, impl left
* wip, rxroi impl
* wip, rxroi impl
* wip
* setrx_Roi works, getrx_roi, wip
* rx_roi impl done
* wip, rxroi
* wip, getrx_roi rxr ports
* fix ports
* wip
* wip
* fix positions on server side
* wip
* numports wip
* wip
* jungfrau top inner interface row increment
* x, y detpos, wip
* removed eiger row indices flipping in gui (bottom flipping maintained)
* wip
* wip, jungfrau numinterfaces2
* jungfrau virtual works
* eiger, jungfrau, g2 virtual server works
* eiger positions fix, wip
* binaries in
* minor printout
* binaries in
* merge fix
* merge fix
* removing getposition
* setrxroi wip
* set upto port
* get messed, wip
* roi multi to module works, wip
* wip
* roi dont return -1
* added rxroi metadata in master file
* added rxroifromshm, not yet in detector
* rx roi in gui with box, also for gap pixels (gappixels for jungfrau mess)
* fix for segfault in gui with detaching roi box in gui
* wip
* m3 gui: slave timing modes should be discarded when squashing
* fixed m3 virtual data, and fixed counters in gui asthetics
* m3 roi works
* wip, g2
* wip
* handling g225um boards, and showing roi for gainplot as well
* udpate python functions
* fix for 1d and a2d roi written
* fixed actual roi written to file
* no virtual hdf5 when handling rx roi
* test
* minor
* binarie in
* start acq for master m3 was sent twice (non blocking), removed redundant code, check that there is only one master
* m3 can have more than 1 master (when many master modules used independently)
* fix for singe mod m3 or other dets
Use already installed version of the slsDetectorPackage. Assumes that the library has already been built and installed either on a system wide location or pointed to by CMAKE_PREFIX_PATH
* inconsistent copy with generalData and implementation members, especially for m3 (non default rxr generic values), issue caught on second configure with non m3 default values, eg tengiga 0
* removing test
* wip, adding m3 functions: polarity, inerpolation, pumpprobe
* added interpol, polarity, pump probe, analog pulsing, digital pulsing
* tests
* binaries in
* update release
* added python polarity enum
* fixed python and minor readability in mythen3.c
* binarie sin
* added all the m3 funcs also in list.c and enablingall counters for enabling interpolation
* binarie sin
Fixed by checking for help action before using the detector
added test that checks that for all helps this doesn't crash
Disabled Timer tests by default since they take ~2s
# Setting DAC names for CTB
* Introduced new shared memory for CTB only
* Prepared for additional functionality
* Works from C++ and Python
Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
- progress looks at activated or enabled ports, so progress does not stagnate
- (eiger) disable datastreaming also for virtual servers only for 10g
- missing packets also takes care of disabled ports
* test for rx_arping
* arping ip and interface from client interface
* apring thread added to thread ids
* clean code for thread for arping
* removing the assumption that udpip1 fill be updated along with udpip2
* review, replacing syscall(sys_gettid) with gettid()
* removed Makefile for moench and integrated the build in CMake
* broke out tiff reading and writing to its own library
* moved tiff includes to include/sls
* moved tiffio source to src
* removed incorrectly used bps
* cleanup and tests for tiffio
* removed using namespace std from header
* some fixing for moench04
* Program for offline processing renamed
Co-authored-by: Anna Bergamaschi <anna.bergamaschi@psi.ch>
A delay of 100ms has been added between the generation of the stop pulse and the resetCore function call. This should give enough time to the detector to readout and streamout the ongoing frame before the internal logic is reset (even after the transmission is delayed with txndelay_frame).
Conflicts:
slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServerv6.1.0
A delay of 100ms has been added between the generation of the stop pulse and the resetCore function call. This should give enough time to the detector to readout and streamout the ongoing frame before the internal logic is reset (even after the transmission is delayed with txndelay_frame).
Before building from source make sure that you have the [dependencies](https://slsdetectorgroup.github.io/devdoc/dependencies.html) installed. If installing using conda, conda will manage the dependencies. Avoid also installing dependency packages with pip.
Please do not update to any xxxx.xx.xx.dev0 tags. They are not releases, but tags for internal usage.
Use only releases with tags such as x.x.x or x.x.x-rcx.
## Documentaion
Detailed documentation including installation can be found in the [software wiki](https://slsdetectorgroup.github.io/devdoc/index.html).
### Documentation
##### 5.0.0 - Latest Release
Detailed documentation on the latest release can be found in the [software wiki](https://slsdetectorgroup.github.io/devdoc/index.html) and on the [official site](https://www.psi.ch/en/detectors/software).
List of releases can be found on the [official site](https://www.psi.ch/en/lxn/software-releases).
##### Older Releases
Documentation is found in the package.
Firmware compatiblity can be found in [firmware page](https://github.com/slsdetectorgroup/slsDetectorFirmware)
## Installation
The slsDetectorPackage provides core detector software implemented in C++, along with Python bindings packaged as the slsdet Python extension module. Choose the option that best fits your environment and use case.
1.**Install pre-built binaries using conda (Recommended)**: Install pre-built binaries for the C++ client, receiver, GUI and the Python API (`slsdet`), simplifying setup across platforms.
2.**Pip**: Install only the Python extension module, either by downloading the pre-built library from PyPI or by building the extension locally from source. Available only from v9.2.0 onwards.
3.**Build from source**: Compile the entire package yourself, including both the C++ core and the Python bindings, for maximum control and customization. However, make sure that you have the dependencies installed. If installing using conda, conda will manage the dependencies. Avoid installing packages with pip and conda simultaneously.
### 1. Install pre-built binaries using conda (Recommended)
Conda is not only useful to manage python environments but can also
be used as a user space package manager. Dates in the tag (for eg. 2020.07.23.dev0)
are from the developer branch. Please use released tags for stability.
We have three different packages available:
***slsdetlib** Shared libraries and command line utilities
***slsdetgui** GUI
***slsdet** Python bindings
***moenchzmq** Moench
### Binaries
Binaries for the slsDetectorPackage are available through conda.
```
#Add conda channels
#Add channels for dependencies and our library
conda config --add channels conda-forge
conda config --add channels slsdetectorgroup
conda config --set channel_priority strict
conda install slsdetlib #only shared lib and command line
make -j12 #or whatever number of cores you are using to build
# install headers and libs in /your/install/path directory
make install
```
Instead of the cmake command, one can use ccmake to get a list of options to configure and generate Makefiles at ease.
```
# ccmake3 for some systems
ccmake ..
**2. Compile without script**<br>
Use cmake to create out-of-source builds, by creating a build folder parallel to source directory. This would create a debug build with address sanitizers.
This document describes the differences between v10.0.1 and v10.0.0
CONTENTS
--------
1 Changes
1.1 Compilation Changes
1.2 New or Changed Features
1.2.1 Breaking API
1.2.2 Resolved or Changed Features
1.2.3 New Features
3 On-board Detector Server Compatibility
4 Firmware Requirements
5 Kernel Requirements
6 Download, Documentation & Support
1 Changes
==========
1.1 Compilation Changes
========================
1.2 New or Changed Features
============================
Python
-------
* receiver ROI can be set from Python using command ``rx_roi``(it supports any sequence of four or two (for mythen3 and gotthard) ints e.g. a tuple (xmin, xmax, ymin, ymax) or a sequence of such for multiple ROIS)
* one can clear all ROI's from Python using command ``rx_clearroi``
1.2.1 Breaking API
===================
1.2.2 Resolved or Changed Features
===================================
1.2.3 New Features
===================
2 On-board Detector Server Compatibility
==========================================
Eiger 10.0.0
Jungfrau 10.0.0
Mythen3 10.0.0
Gotthard2 10.0.0
Moench 10.0.0
On-board Detector Server Upgrade
--------------------------------
From v6.1.0 (without tftp):
update only on-board detector server
Using command 'updatedetectorserver'
udpate both on-board detector server and firmware simultaneously
This is the default file format that can be configured using command `fformat <commandline.html#term-fformat-binary-hdf5>`_.
..code-block::bash
sls_detector_put fformat binary
Master File
--------------
* File Name: [fpath]/[fname]_master_[findex].json :ref:`Details here<file name format>`
* It is in json format and created for every acquisition.
* It contains :ref:`attributes<master file attributes>` relevant to the acquisition. This can vary with detector type shown in :ref:`master json file examples <json master file examples>` here.
* It shows the :ref:`**SLS Receiver Header** <sls receiver header format>` format used in data files.
* Enabled/disabled using command `fmaster <commandline.html#term-fmaster-0-1>`_.
Data File
----------
* File Name: [fpath]/[fname]_dx_fy_[findex].raw :ref:`Details here<file name format>`
* It store multiple frames sequentially, with total number of frames determined by `rx_framesperfile <commandline.html#term-rx_framesperfile-n_frames>`_ parameter.
* Each frame includes a :ref:`**sls_receiver_header** <sls receiver header format>` structure, followed by the actual frame data.
* More details on :ref:`slsReceiverHeader<sls receiver header format>` and the actual image data is described in the :ref:`Detector Image Size and Format <data format>` section.
Commands can be used either with sls_detector_get or sls_detector_put
The syntax is *'[detector index]-[module index]:[command]'*, where the indices are by default '0', when not specified.
.._cl-module-index-label:
Module index
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Modules are indexed based on their order in the hostname command. They are used to configure a specific module within a detector and are followed by a ':' in syntax.
..code-block::
# Applies to all modules of detector 0
sls_detector_put exptime 5s
# Applies to only the 4th module
sls_detector_put 3:exptime 5s
Detector index
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This index is useful when configuring multiple detectors from a single host. Each detector uses a unique shared memory identified by a detector index, derived again from the hostname command. It is followed by a '-'.
# Starting acquisition only for detector with index 2
sls_detector_put 2-start
# Applies only to the 2nd detector, 4th module
sls_detector_put 1-3:exptime 5s
Command Execution
^^^^^^^^^^^^^^^^^^^^^^^
Commands can be executed using:
***sls_detector_put**: setting values
***sls_detector_get**: getting values
***sls_detector**: automatically infers based on the number of arguments.
***sls_detector_help**: gets help on the specific command
***sls_detector_acquire**: initiates acquisition with the detector. This command blocks until the entire acquisition process is completed.
..code-block::
sls_detector_get vrf
Help
--------
@@ -24,6 +69,19 @@ Help
# get help for a particular command
sls_detector_get -h fpath
sls_detector_help fpath
# list of deprecated commands
list deprecated
Autocompletion
---------------
bash_autocomplete.sh or zsh_autocomplete.sh must be sourced from the main package folder to enable auto completion of commands and arguments for the command line on that shell.
..code-block::
source bash_autocomplete.sh
Commands
@@ -32,14 +90,14 @@ Commands
..include:: ../commands.rst
Depreciated commands
Deprecated commands
------------------------
.. note ::
All the dac commands are preceded with the **dac** command. Use command **daclist** to get correct list of dac command arguments for current detector.
To connect to any device, one needs a unique combination of **IP address** (which identifies the device) and **port number** (which specifies the service).
This package typically deals with two types of network interfaces:
***1 GbE public interface** - Accessible from anywhere on the network. Connectivity can be verified by pinging this interface from any PC.
***10 GbE private interface** - Dedicated to high-speed data transfer with a specific PC. In addition to the 1 GbE public interface (MTU 1500), the device may include one or more private 10 GbE interfaces (MTU 9000), which are not accessible from other machines.
Client to Module
-----------------
..figure:: images/Client_module_commands.png
:target:_images/Client_module_commands.png
:width:700px
:align:center
:alt:Client Module Commands
Client Module TCP Commands
The client configures and controls modules via the 1 GbE public TCP interface.
* Should be able to ping the module's hostname from any PC on the network.
* If one cannot ping, ensure that it is powered on.
* If the command cannot connect to the port (`hostname command <commandline.html#term-hostname>`_ failed), the onboard servers may not have started yet.
Each physical module has its own unique IP address. As the IPs are already different, all modules can share the same default ports:
* 1952 - Default Module TCP Control Port
* 1953 - Default Module TCP Stop port
..code-block::bash
# Therefore, one can use
hostname bchip100+bchip101+
# instead of
hostname bchip100:1952+bchip101:1954+
**Simulators**, however, usually run on the same PC. See `virtual servers <https://slsdetectorgroup.github.io/devdoc/virtualserver.html>`_ for more details. In that case, each instance must use a different port. By incrementing port numbers, you can also use the virtual command for convenience.
..code-block::bash
# Therefore, one can use
virtual 2 1952
# instead of
hostname localhost:1952+localhost:1954+
Client to Receiver
--------------------
..figure:: images/Client_receiver_commands.png
:target:_images/Client_receiver_commands.png
:align:center
:alt:Client Receiver Commands
Client Receiver TCP Commands
Each module has a receiver, which can be either local or remote.
The client can configure and control receivers via the 1 GbE public TCP interface:
* Should be able to ping the receiver's hostname from any PC on the network.
* If one cannot ping, ensure that it is powered on.
* If the command cannot connect to the port (`rx_hostname command <commandline.html#term-rx_hostname-hostname-or-ip-address>`_ failed), the receivers may not have started yet.
Since multiple receiver processes typically run on the same PC, they share the same IP. Here, each receiver process must use a different TCP port for a unique connection.
* 1954 - Default Receiver TCP port
Configuring the receiver with the command `rx_hostname command <commandline.html#term-rx_hostname-hostname-or-ip-address>`_, sets up a receiver for every module in shared memory automatically ie. every module's receiver TCP port will automatically increment in shared memory. The starting port is defined by the command `rx_tcpport <commandline.html#term-rx_tcpport-port>`_ with the default being 1954.
A multi-module command (without colon or module index) sets incremental ports starting from the specified port number.
..code-block::bash
hostname bchip100+bchip101+bchip102+bchip103+
rx_tcport 2000 # sets the receiver port to 2000, 2001, 2002, 2003
For example, using default TCP ports (1954, 1955):
..code-block::bash
hostname bchip100+bchip101+
rx_hostname localhost
# Equivalent to:
rx_hostname localhost:1954+localhost:1955+
# or set to another set of ports (automatically incremented)
rx_tcpport 1984
rx_hostname localhost
# instead of
rx_hostname localhost:1984+localhost:1985+
Module to Receiver
-------------------
..figure:: images/Module_receiver_commands.png
:target:_images/Module_receiver_commands.png
:align:center
:alt:Module Receiver Commands
Module Receiver UDP Commands
**10GbE Interface**
The module typically sends images to the receiver via a 10 GbE private interface on the receiver PC, which has an MTU of 9000 to support jumbo packets. The private interface is not reachable from other machines, so it cannot be pinged from anywhere.
**Multiple UDP Packets**
Images are split into UDP packets for transmission. Unlike TCP, UDP is connectionless and does not guarantee delivery. Therefore, the receiver PC must be tuned for reliable reception. See `Troubleshooting <https://slsdetectorgroup.github.io/devdoc/troubleshooting.html>`_.
**UDP Configuration**
Unlike TCP, the module (hardware) requires explicit configuration for sending images via UDP, including:
* Source and destination IPs
* Source and destination MAC addresses
* Source and destination ports
**UDP Destination**
Info on where to send the image from the module to.
**UDP Desination IP** - The IP of the receiver PC's 10 GbE interface, usually found via ``ifconfig``. Command: `udp_dstip <commandline.html#term-udp_dstip-x.x.x.x-or-auto>`_. For 1GbE interface and for this command, one can use 'auto' as an argument, which will pick up the IP from the `rx_hostname command <commandline.html#term-rx_hostname-hostname-or-ip-address>`_.
**UDP desintation MAC** - Also obtained from the interface using ``ifconfig``. For built-in receivers, the module configures this automatically from the ``UDP destination IP``. For custom receivers, it must be explicitly provided. Command: `udp_dstmac <commandline.html#term-udp_dstmac-x-x-x-x-x-x>`_
**UDP destination port** - Ensure uniqueness if multiple users share the interface. Command: `udp_dstport <commandline.html#term-udp_dstport-n>`_
* 50001 - Default Receiver UDP port
**UDP Source**
As it is a one-way communication (module to receiver with no reply or acknowledgements), info on the source of the image is more for debugging purposes and prevent packet rejection.
**UDP source IP** - Must be on the same subnet as the destination IP (same first three octets) to prevent packet rejection by the receiver interface. For 1GbE interface and for this command (except for Eiger), one can use ``auto`` as an argument, which will pick up the IP from the `hostname command <commandline.html#term-hostname>`_. Command: `udp_srcip <commandline.html#term-udp_srcip-x.x.x.x-or-auto>`_
..code-block::bash
# 10 GbE interface
hostname bchip100
udp_dstip 10.0.2.1
udp_srcip 10.0.2.19
rx_hostname localhost
# 1 GbE interface
hostname bchip100
rx_hostname localhost
udp_dstip auto # this command uses IP from rx_hostname. So, it comes after.
udp_srcip auto # this command uses IP from hostname
**UDP source MAC** - By default, it is set to ``aa:bb:cc:dd:xx:yy`` where ``xx`` and ``yy`` are module row and column indices to differentiate the modules while debugging. Command: `udp_srcmac <commandline.html#term-udp_srcmac-x-x-x-x-x-x>`_
**UDP source port** - This is hardcoded in every module to the same value in the detector server and cannot be changed.
Note: If there is a second UDP port on the module, use 'udp_dstport2' or 'udp_dstip2'etc. See `here <https://slsdetectorgroup.github.io/devdoc/dataformat.html>`_ for more detector specific info.
Receiver to GUI
-----------------
..figure:: images/Receiver_gui_commands.png
:target:_images/Receiver_gui_commands.png
:align:center
:alt:Receiver GUI Commands
Receiver GUI Commands
Enabling the GUI automatically streams images from the receiver via ZMQ sockets. Even without the GUI, streaming can be activated explicitly using the command `rx_zmqstream <commandline.html#term-rx_zmqstream-0-1>`_. ZMQ streaming uses TCP/IP, so the ports must be configured appropriately.
**Receiver ZMQ Port** - Port from which the receiver streams ZMQ packets. Command: `rx_zmqport <commandline.html#term-rx_zmqport-port>`_
* 30001 - Default Receiver ZMQ Port (stream out from)
**Client ZMQ Port** - Port that the client ZMQ socket listens to. Command: `zmqport <commandline.html#term-zmqport-port>`_
* 30001 - Default Client ZMQ Port (listens to)
**Client ZMQ IP** - IP address the client ZMQ socket listens to. Command: `zmqip <commandline.html#term-zmqip-x.x.x.x>`_. By default, this is set to the IP of ``rx_hostname``, but can be set to any IP address that the client can reach.
* Default: Receiver’s hostname (rx_hostname)
.. note ::
``zmqport`` and ``zmqip`` need to be set up in shared memory before starting up the Gui. If the Gui is already running, change it in the Advanced Tab directly in the Gui.
``rx_zmqstream`` is set to 1 when the GUI is started, but has to be manually set back to 0 to disable zmq streaming in the receiver for better performance when not using the Gui.
The GUI hwm (high water mark, which is like a measurement of the number of enqueued zmq packets) values are set to a low number (from library default of possibly 1000 to 2) to reduce the zmq buffer to display only some of the images. Resetting it back to -1 or 1000 should only matter if one plans to not use the Gui and still zmq stream without wanting to drop zmq images (eg. for external processing chain).
Images from the receiver can also be streamed to an external processing chain for further processing or storage. In this setup:
* The external processor listens to the ZMQ ports and IPs that the receiver streams from.
* The client ZMQ sockets now listen to the ports and IPs that the external processor streams from instead of the receiver.
**Receiver ZMQ Port** - Port from which the receiver streams ZMQ packets. Command: `rx_zmqport <commandline.html#term-rx_zmqport-port>`_
* 30001 - Default Receiver ZMQ Port (stream out from)
**Client ZMQ Port** - Port that the client ZMQ socket listens to. Command: `zmqport <commandline.html#term-zmqport-port>`_. In this set up, it should listen to the zmq port that the external process is streaming out from.
* 30001 - Default Client ZMQ Port (listens to)
**Client ZMQ IP** - IP address the client ZMQ socket listens to. Command: `zmqip <commandline.html#term-zmqip-x.x.x.x>`_. By default, this is set to the IP of ``rx_hostname``, but in this set up, it should listen to the zmq IP that the external process is streaming out from.
Each UDP port creates its own output file, which contains the data of the image transmitted over that port. More on number of files and naming for each file in the `File format <fileformat.html>`_ section.
Jungfrau
-------------
Single Port Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Jungfrau_module.png
:target:_images/Jungfrau_module.png
:width:650px
:align:center
:alt:Jungfrau Module Single Port Configuration
By default, only the outer 10GbE interface is enabled, transmitting the full image over a single UDP port. This results in one file per module containing the complete image.
Total image size = 524,288 bytes
- 8 chips (2 x 4 grid)
- 256 x 256 pixels (chip size)
- 2 bytes (pixel width)
Double Port Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Jungfrau_two_port.png
:target:_images/Jungfrau_two_port.png
:width:500px
:align:center
:alt:Jungfrau Module Two Port Configuration
If both interfaces are enabled using the `numinterfaces <commandline.html#term-numinterfaces-1-2>`_ command on compatible hardware and firmware, the image splits into top and bottom halves sent over two UDP ports:
- The top half transmits via the inner interface (`udp_dstport2 <commandline.html#term-udp_dstport2-n>`_ and `udp_dstip2 <commandline.html#term-udp_dstip2-x.x.x.x-or-auto>`_).
- The bottom half uses the outer interface(`udp_dstport <commandline.html#term-udp_dstport-n>`_ and `udp_dstip <commandline.html#term-udp_dstip-x.x.x.x-or-auto>`_).
The number of files per module equals the active UDP ports—two files per module when both interfaces are used.
The number of image rows per port can be adjusted using the `readnrows <commandline.html#term-readnrows>`_ command. By default, 512 rows are read, but a smaller value centers the readout vertically (e.g., 8 rows reads 4 above and 4 below the center). Increasing the value symmetrically expands the region toward the top and bottom. Permissible values are multiples of 8.
Total image size = 32,768 bytes
- 8 chips (2 x 4 grid)
- **8** x 256 pixels (chip size: **8 rows**)
- 2 bytes (pixel width)
Note: Still in prototype stage, writes complete image (padded or not depending on `rx_padding <commandline.html#term-rx_padding-0-1>`_ parameter) to file. Only the summary written to console in the receiver handles the `readnrows <commandline.html#term-readnrows>`_ to calculate to calculate complete images received. Only reduces network load, not file size. Use `rx_roi <commandline.html#term-rx_roi-xmin-xmax-ymin-ymax>`_ for file size.
Moench
-------------
Single Port Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Moench_module.png
:target:_images/Moench_module.png
:width:550px
:align:center
:alt:Moench Module Single Port Configuration
By default, only the outer 10GbE interface is enabled, transmitting the full image over a single UDP port. This results in one file per module containing the complete image.
Total image size = 320,000 bytes
- 400 x 400 pixels (chip size)
- 2 bytes (pixel width)
Double Port Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Moench_two_port.png
:target:_images/Moench_two_port.png
:width:400px
:align:center
:alt:Moench Module Two Port Configuration
If both interfaces are enabled using the `numinterfaces <commandline.html#term-numinterfaces-1-2>`_ command on compatible hardware and firmware, the image splits into top and bottom halves sent over two UDP ports:
- The top half transmits via the inner interface (`udp_dstport2 <commandline.html#term-udp_dstport2-n>`_ and `udp_dstip2 <commandline.html#term-udp_dstip2-x.x.x.x-or-auto>`_).
- The bottom half uses the outer interface(`udp_dstport <commandline.html#term-udp_dstport-n>`_ and `udp_dstip <commandline.html#term-udp_dstip-x.x.x.x-or-auto>`_).
The number of files per module equals the active UDP ports—two files per module when both interfaces are used.
The number of image rows per port can be adjusted using the `readnrows <commandline.html#term-readnrows>`_ command. By default, 400 rows are read, but a smaller value centers the readout vertically (e.g., 16 rows reads 8 above and 8 below the center). Increasing the value symmetrically expands the region toward the top and bottom. Permissible values are multiples of 16.
Total image size = 12,800 bytes
- **16** x 400 pixels (chip size: **16 rows**)
- 2 bytes (pixel width)
Note: Still in prototype stage, writes complete image (padded or not depending on `rx_padding <commandline.html#term-rx_padding-0-1>`_ parameter) to file. Only the summary written to console in the receiver handles the read n rows to calculate complete images received. Only reduces network load, not file size. Use `rx_roi <commandline.html#term-rx_roi-xmin-xmax-ymin-ymax>`_ for file size.
Eiger
-------------
Default Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Eiger_module.png
:target:_images/Eiger_module.png
:width:350px
:align:center
:alt:Eiger Module Default Configuration
Each Eiger module has two independent identical readout systems (other than firmware), each with its own control port and `hostname <commandline.html#term-hostname>`_ to be configured with. They are referred to as the 'top' and 'bottom' half modules. The bottom half module is flipped vertically.
Each half module has 2 parallel UDP ports for 2 chips each. The left UDP port is configured with `udp_dstport <commandline.html#term-udp_dstport-n>`_, while the right UDP port is configured with `udp_dstport2 <commandline.html#term-udp_dstport2-n>`_. This is vice versa for the bottom half module.
Image size per UDP port or File = 262,144 bytes
- 2 chips (1 x 2 grid)
- 256 x 256 pixels (chip size)
- 2 bytes (default pixel width)
The myth, the legend, the bottom ports: Demystifying them
:alt:Eiger Bottom after the firmware flips it horizontally
After the firmware flips it horizontally
..figure:: images/Eiger_bottom_3.png
:target:_images/Eiger_bottom_3.png
:width:350px
:align:center
:alt:After the software swaps the udp ports
After the software swaps the udp ports
..figure:: images/Eiger_bottom_4.png
:target:_images/Eiger_bottom_4.png
:width:400px
:align:center
:alt:After the gui has flipped the bottom vertically
After the gui has flipped the bottom vertically
Note: The same process happens for the bottom 2 udp ports of the quad.
Pixel width
^^^^^^^^^^^^^
The pixel width can be configured to 4, 8, 16 (default) or 32 bits using the command `dr <commandline.html#term-dr-value>`_. This affects image size per UDP port or file.
Flip rows
^^^^^^^^^^
One can use the command `fliprows <commandline.html#term-fliprows-0-1>`_ to flip the rows vertically for the bottom or top half module. It is sent out to the reciever, but does not flip rows in the output file itself, but rather streams out this info via the json header and thus instructs the GUI to display them correctly.
1GbE/ 10GbE Interfaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Both UDP ports `udp_dstport <commandline.html#term-udp_dstport-n>`_ and `udp_dstport2 <commandline.html#term-udp_dstport2-n>`_ are used in Eiger as shows in the figure. Both of them can be set to use either the 1GbE or the 10GbE interface for data. The 1GbE interface is used also for control and configuration. For data, the 1GbE interface is enabled by default. It can be disabled by enabling the `tengiga <commandline.html#term-tengiga-0-1>`_ command and updating both the `udp_dstport <commandline.html#term-udp_dstport-n>`_ , `udp_dstport2 <commandline.html#term-udp_dstport2-n>`_ , `udp_dstip <commandline.html#term-udp_dstip-x.x.x.x-or-auto>`_ commands to match the 1GbE or 10GbE interface. This setting only affects packetsize and number of packets, but does not affect the total image size.
Reducing network load
^^^^^^^^^^^^^^^^^^^^^^
**Activate**: By default, the `hostname <commandline.html#term-hostname>`_ command activates the respective half module it connects to, enabling all UDP ports. To deactivate an entire half module (i.e., both UDP ports), use the `activate <commandline.html#term-activate-0-1>`_ command. This disables both UDP ports for that half module, so no data is transmitted from it — only half of the module is read out. To specify which half module to activate or deactivate, use the module index (for Eiger, each half module has its own module index).
**Datastream**: The `datastream <commandline.html#term-datastream-left-right-0-1>`_ command with arguments to specify which port can be used to disable the data streaming from one or both the two UDP ports in a half module. This allows for more flexible configurations, such as reading only two chips or one UDP port of a half module. To specify which half module to activate or deactivate, use the module index (for Eiger, each half module has its own module index).
Note: Only the activated ports will write data as it does not make sense to write an empty file.
**Read Partial Rows**: The number of image rows per port can be adjusted using the `readnrows <commandline.html#term-readnrows>`_ command. By default, 256 rows are read, but a smaller value centers the readout vertically (e.g., 8 rows reads 4 above and 4 below the center). Increasing the value symmetrically expands the region toward the top and bottom. Permissible values depend on dynamic range and 10GbE enable.
..image:: images/Eiger_read_rows.png
:target:_images/Eiger_read_rows.png
:width:400px
:align:center
:alt:Eiger Module Read Partial Rows Configuration
Total image size per UDP Port = 8,192 bytes
- 2 chips (1 x 2 grid)
- **8** x 256 pixels (chip size: **8 rows**)
- 2 bytes (default pixel width)
Note: Still in prototype stage, writes complete image (padded or not depending on `rx_padding <commandline.html#term-rx_padding-0-1>`_ parameter) to file. Only the summary written to console in the receiver handles the `readnrows <commandline.html#term-readnrows>`_ to calculate complete images received. Only reduces network load, not file size. Use `rx_roi <commandline.html#term-rx_roi-xmin-xmax-ymin-ymax>`_ for file size.
Quad
^^^^^^
The Eiger quad is a special hardware configuration that uses only the top half-module to create a quad layout. In this setup, the second half of the top module—normally associated with the right-side UDP port—is used to represent the inverted bottom half of the quad.
As with any standard half-module, it includes one control TCP port (with a hostname) and two UDP data ports (top and bottom). When the quad option is enabled, the firmware automatically flips the second UDP port vertically.
In this configuration, the fliprows command cannot be used to flip the entire half-module. Instead, the receiver automatically includes row-flipping information only for the second UDP port in the JSON header, so the GUI can apply the correct orientation during display
..image:: images/Eiger_quad.png
:target:_images/Eiger_quad.png
:width:300px
:align:center
:alt:Eiger Quad Configuration
Image size per UDP port = same as a normal Eiger UDP port
Mythen3
-------------
Default Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Mythen3_module.png
:target:_images/Mythen3_module.png
:align:center
:alt:Mythen3 Module Default Configuration
Each Mythen3 module is a 1D detector with 10 chips, each with 128 channels. Each channel has 3 counters that are enabled by default.
Image size = 15,360 bytes
- 10 chips (1 x 10 grid)
- 128 channels
- 3 counters
- 4 bytes (default pixel width)
Counters
^^^^^^^^^^^
If all 3 counters are enabeld, the frame size for each channel is multiplied by 3. The counters are stored consecutively per channel. One can disable one or more of the counters using the `counters <commandline.html#term-counters-i0-i1-i2-...>`_ command. The frame size will then be reduced accordingly.
Image size = 10,240 bytes
- 10 chips (1 x 10 grid)
- 128 channels
- 2 counters (0, 1 enabled)
- 4 bytes (default pixel width)
Pixel width
^^^^^^^^^^^^^
The pixel width can be configured to 8, 16 or 32 (default) bits using the command `dr <commandline.html#term-dr-value>`_. 32 bits is actually 24 bits in the chip. This setting does affect image size.
1GbE/ 10GbE Interfaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The UDP port can be set to use either the 1GbE or the 10GbE interface for data. The 1GbE interface is used also for control and configuration. For data, the 10GbE interface is enabled by default. It can be disabled by using the `tengiga <commandline.html#term-tengiga-0-1>`_ command and updating the `udp_dstport <commandline.html#term-udp_dstport-n>`_ and `udp_dstip <commandline.html#term-udp_dstip-x.x.x.x-or-auto>`_ commands to match the 1GbE or 10GbE interface. This setting only affects packetsize and number of packets, but does not affect the total image size.
Gotthard2
-------------
Default Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^
..image:: images/Gotthard2_module.png
:target:_images/Gotthard2_module.png
:align:center
:alt:Gotthard2 Module Default Configuration
Each Gotthard2 module is a 1D detector with 10 chips, each with 128 channels.
Image size = 2,560 bytes
- 10 chips (1 x 10 grid)
- 128 channels
- 2 bytes (pixel width)
Veto Info
^^^^^^^^^^^
One can enable veto data in the chip of the Gotthard2 module using the `veto <commandline.html#term-veto-0-1>`_ command. By default, this is disabled. This does not affect the image size as veto information is not sent out through the same 10GbE interface.
One can either stream out the veto info through the low latency link (2.5 gbps) or for debugging purposes through another 10GbE interface.
For debugging purposes, the veto info can be enabled using the `numinterfaces <commandline.html#term-numinterfaces-1-2>`_ command and the following parameters are updated: `udp_dstport2 <commandline.html#term-udp_dstport2-n>`_ and `udp_dstip2 <commandline.html#term-udp_dstip2-x.x.x.x-or-auto>`_. The veto data from this port is of course written to a separate file and is not combined in the virtual HDF5 file mapping (complete image mapped).
If `fwrite <commandline.html#term-fwrite-0-1>`_ is enabled, the receiver will write data to files.
Number of Files
----------------
Every acquisition will create a master file and data files.
An acquisition can have multiple data files for a single frame. The number of files is determined by the number of UDP ports per module and the number of modules.
* Every modules has its own receiver process. Every receiver process can have 1 or 2 UDP ports.
* Each UDP port will create its own file. Therefore, each receiver can write 1 or 2 files.
* So, for example a detector with 4 modules with 2 UDP ports each will create a total of 8 files with file names containing UDP port index **'_d0'** to **'_d7'**.
A new file containing **'_f[file_index]'** in file name is also created when reaching the maximum frames per file. Configured using `rx_framesperfile <commandline.html#term-rx_framesperfile-n_frames>`_.
| Data File Name: [fpath]/[fname]_dx_fy_[findex].[ext]
* fpath: file path set using command `fpath <commandline.html#term-fpath-path>`_. Default: '/'
* fname: file name prefix using command `fname <commandline.html#term-fname-name>`_. Default: "run"
* findex: acquisition index using command `findex <commandline.html#term-findex-n_value>`_. Automatically incremented for every acquisition with `sls_detector_acquire <commandline.html#term-acquire>`_ (if `fwrite <commandline.html#term-fwrite-0-1>`_ enabled).
* x: unique udp port index. New file per UDP port.
* y: file index. New file created after reaching max frames per file.
* ext: file extension. Default: "raw"(data file) or "json"(master file)
Some file name examples:
..code-block::bash
# first file
path-to-file/run_d0_f0_0.raw
# first file for second UDP port
path-to-file/run_d1_f0_0.raw
# second file after reaching max frames in first file
path-to-file/run_d0_f1_0.raw
# second acquisition, first file
path-to-file/run_d0_f0_1.raw
Formats
--------
There are 2 file formats supported by the receiver:
The default is binary. HDF5 can be enabled by compiling the package with HDF5 option enabled. The file format is set using the command `fformat <commandline.html#term-fformat-binary-hdf5>`_.
Content
--------
|`Master File`: Contains the metadata of the acquisition. The content is described in :ref:`master file attributes <master file attributes>`.
|`Data File`: Contains the metadata for each image (:ref:`slsReceiverHeader<sls receiver header format>`) and the `data of the image` transmitted over that port. The image data is described in :ref:`Detector Image Size and Format <data format>` section.
| More content and examples are found in the :ref:`HDF5 file format <hdf5 file format>` and :ref:`Binary file format <binary file format>` sections.
In case you have had issues in the past with programming via software:
* 6.1.2 server has a fix for seamless fpga programming
* We recommend first updating the on-board detector server to 6.1.2 (with client 6.1.x) using command `updatedetectorserver <commandline.html#term-updatedetectorserver-server_name-with-full-path>`_.
* Then use command 'programfpga' to only update firmware or use command 'update' to update firmware and server to the latest release.
These instructions are for upgrades from v5.0.0. For earlier versions, contact us.
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
Always ensure that the client and server software are of the same release.
Program from console
.. code-block:: bash
# copies server from tftp folder of pc, links new server to jungfrauDetectorServer,
# These instructions are for upgrades from v5.0.0. For earlier versions, please contact us.
# Always ensure that the client and server software are of the same release.
# copies server, links new server to jungfrauDetectorServer,
# removes old server from respawn, sets up new lnked server to respawn
# programs fpga,
# reboots
# programs fpga, reboots
# older versions: v5.0.0 - 6.0.0 using tftp from tftp folder of pc
In case you have had issues in the past with programming via software:
* 6.1.2 server has a fix for seamless fpga programming
* We recommend first updating the on-board detector server to 6.1.2 (with client 6.1.x) using command `updatedetectorserver <commandline.html#term-updatedetectorserver-server_name-with-full-path>`_.
* Then use command 'programfpga' to only update firmware or use command 'update' to update firmware and server to the latest release.
Check :ref:`firmware troubleshooting <blackfin firmware troubleshooting>` if you run into issues while programming firmware.
Always ensure that the client and server software are of the same release.
Program from console
.. code-block:: bash
# copies server from tftp folder of pc, links new server to moenchDetectorServer,
# Always ensure that the client and server software are of the same release.
# copies server, links new server to moenchDetectorServer,
# removes old server from respawn, sets up new lnked server to respawn
# programs fpga,
# reboots
# programs fpga, reboots
# older versions: v5.0.0 - 6.0.0 using tftp from tftp folder of pc
# step 1: get the kernel image (uImage.lzma) from slsdetectorgroup
# and copy it to pc's tftp folder
Last Resort using USB Blaster
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# step 2: connect to the board
telnet bchipxxx
#step 3: go to directory for space
cd /var/tmp/
# step 3: copy kernel to board
tftp pcxxx -r uImage.lzma -g
# step 4: verify kernel copied properly
ls -lrt
# step 5: erase flash
flash_eraseall /dev/mtd1
# step 6: copy new image to kernel drive
cat uImage.lzma > /dev/mtd1
# step 7:
sync
# step 8:
reboot
# step 9: verification
telnet bchipxxx
uname -a # verify kernel date
more /proc/mtd # verify mtd3 is listed
If none of these steps work, the last resort might be physically upgrading the firmware using a USB blaster, which also requires opening up the detector. Instructions for all the blackfin detectors are the same as the one for :ref:`gotthard firmware upgrade <firmware upgrade using blaster for blackfin>`.
#. Using cmk script: ./cmk.sh -hj9 -d [path of hdf5 dir] (-d is optional and for custom installation folder)
#. Enable using cmake option **-DSLS_USE_HDF5=ON** and **-DCMAKE_INSTALL_PREFIX=/path/to/custom/hdf/installation** (optional).
Setup
-------
#. Start Receiver process
#. Load config file
#. Set file format using command `fformat <commandline.html#term-fformat-binary-hdf5>`_.
.. code-block:: bash
sls_detector_put fformat hdf5
Master File
-------------
* File Name: [fpath]/[fname]_master_[findex].h5 :ref:`Details here<file name format>`
* It contains :ref:`attributes<master file attributes>` relevant to the acquisition. This can vary with detector type.
..code-block::text
/ # Root level
|---> entry # entry group
| |---> data # data group
| |---> column # dataset of each sls_receiver_header member
| |---> data
| |---> detector header version
| |---> detector specific 1
| |---> detector specific 2
| |---> detector specific 3
| |---> detector specific 4
| |---> detector type
| |---> exp length or sub exposure time
| |---> frame number
| |---> mod id
| |---> packets caught
| |---> packets caught bit mask
| |---> row
| |---> timestamp
| |---> instrument # instrument group
| |---> beam # beam group
| |---> detector # detector group
| |---> Master File Attribute 1 # dataset of each master file attribute
| |---> Master File Attribute 2
| |---> Master File Attribute 3
| |---> Master File Attribute ..
| |---> sample # sample group
If more than 1 data file per frame:
* The dataset of each :ref:`**SLS Receiver Header** <sls receiver header format>` member is a virtual dataset.
* **data** dataset is a virtual dataset.
More details regarding master file attributes can be found :ref:`here<master file attributes>`.
Data File
-----------
* File Name: [fpath]/[fname]_dx_fy_[findex].h5 :ref:`Details here<file name format>`
* More details on :ref:`slsReceiverHeader<sls receiver header format>` and the actual image data is described in the :ref:`Detector Image Size and Format <data format>` section.
Virtual Data File
------------------
* File Name: [fpath]/[fname]_virtual_[findex].h5 :ref:`Details here<file name format>`
* For multiple modules, a virtual file linking data from all the modules is created. The individual files are expected to be present.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.