# Changelog

## Version 1.17.99

Important: mvme-1.18 contains the new event builder implementation which has a slightly different configuration than the old version. An attempt is made to convert the old config to the new format on load, but settings have to be manually reviewed in ‘Processing Settings -> Event Builder Settings’.

- general:

  - Multiple ui related crash and bugfixes.
  - Disabled qt debug output in release builds. Might speed things up, especially under windows.
  - Compatibility fix for very old listfiles recorded with the VMUSB.
  - Fix a deadlock when pausing the DAQ while the event builder is active.
  - Can now load and replay listfiles that contain only a MVLC CrateConfig but not a mvme VMEConfig.

- analysis:

  - Fixes for the histogram projection code.
  - Fix for a crash when projecting from a ‘1d listview’ histogram.
  - h1d: add ‘relative width’ stat to the gauss info box.
  - Fix rare crash in ‘show dependency graph’.
  - Allow larger ‘rate monitor’ capacities (2^30 up from 2^20).
  - Immediately replot after selecting a new histogram from a histo array. Forces and update of the axis scales which previously was delayed.
  - ui: Allow larger range for event builder histograms axes.
  - Improve the event builder (aka timestamp sorter) to gracefully handle the case where none of the modules in an incoming event yields a valid timestamp. This case was not handled properly and lead to excess buffering and eventual halt of the analysis processing.

- daq:

  - MVLC export: add more mvme metadata to exported mvlc crateconfig yaml files.

  - Better config checks prior to daq start. It’s now an error to have data producing readout commands in the event multicast start/stop sequences.

  - Add a stream server for streaming raw readout data over TCP or UNIX. If enabled this currently forwars the raw unmodified MVLC readout stream. Uses async send calls to efficiently stream buffers to multiple clients in parallel.

    A simple settings GUI is under ‘Workspace Settings -> Stream Server’.

- templates: Update the description of ‘sample_source’ in the MDPP32_QDC template.

## Version 1.17.5

- Fix a regression with MVLC FW0046 where the ‘daq_start’ trigger_io signal did not become active when starting the DAQ.

## Version 1.17.4

- internal changes to stay compatible with newer graphviz versions(13, 14).
- event_server: inline the functions to avoid duplicate definitions under linux

## Version 1.17.3

- event_server: fix broken socket reads in the example (and ROOT) client under windows.

## Version 1.17.2

- Merge in VMUSB fixes from Chang, Jin-Hee <ChangJ@frib.msu.edu> & Ron Fox. This fixes IRQ mask register handling in certain cases.
- Compatibility with old (2017) VMUSB listfiles restored. These were recorded before the SIS and MVLC controller existed.
- Crash fixes in some of the listfile handling code.

## Version 1.17.1

- analysis:
  - Fixes and updates to histogram projections. Zooming and on-the-fly resolution reduction have been improved.
  - Fix various UI related crashes

- Add/update Dockerfiles for debian:testing, ubuntu:latest and ubuntu:rolling. Remove the Dockerfiles running only tests but not doing packaging (less files, less maintenance).
- Compile fixes for gcc-15 and clang-19 (removed pre-ansi-c style MBS code, will revive if needed)

## Version 1.17.0

- config:

  - Remove special handling for MVLC periodic triggers realized via the trigger io subsystem from the UI.

    These triggers have been superseded by the new StackTimers added in MVLC FW0037. If higher frequency timers are needed they can still be implemented via the trigger io system. This change only removes them as a first class trigger condition from the UI.

    Existing event configs will now show ‘MVLC Trigger I/O’ as their condition instead of ‘Periodic (via MVLC Trigger I/O)’.

- analysis:

  - fix crashes in ‘Debug & Stats’ and the plot grid widget
  - increase initial size of the ‘new operator’ dialogs
  - speed up and improve the ‘MDPP Sample Decoder Monitor’ widget (it was able to lag the whole application)
  - fix crashes in the multiplot widget (plot grid)
  - allow editing polygon vertex coordinates directly in the table
  - zero init memory segments in the internal arena under windows
  - fix convert_to_signed() yielding wrong results under windows.

- templates:

  - various fixes when saving/loading custom modules (.mvmemodule)

  - fixed updating of module meta info when loading a VME config

  - mdpp32_scp/mdpp32_qdc

    - lower readout_num_events from +2 to +1 (buffer limitation if sampling is enabled)
    - corrected number of max samples (488 for SCP, 1000 for QDC)

    This only affects newly created modules, existing modules need to be updated manually.

- trigger_io:

  - remove special hightlight for the previously reserved timer and stackstart units
  - improve the gate generator editors
  - better LUT strobe input explanation

- ui:

  - disable ‘Recent Workspaces’ action when DAQ is not idle
  - improve log output for errors and the ‘accu test’ command
  - fix broken listfile recovery under windows
  - fix silly listfile recovery progress values
  - when importing a .mvmemodule file, disable the module type dropdown
  - fix incorrect module meta info when loading a module from file
  - fix multiple issues with exporting & importing .mvmemodule files
  - update the copyright notices

- vme_script:

  - add new commands for the software accu: ‘accu_add’ and ‘accu_write’. These were added for the PTP support in FW0046: read the current ptp seconds value, add a constant to it and write that value back to a special PTP trigger register.
  - fix evaluation of numerical expressions exceeding 32-bit unsigned

- Fix crash when starting a second mvme instance under windows (logfile related).
- add a Dockerfile for debian trixie and fix some issues with trixie

## Version 1.16.3

- Fix non-multievent readouts for the VMUSB and SIS controllers. This has been broken since 1.16.1 Note: multievent splitting is currently not supported for these old controller.

## Version 1.16.2

- vme_templates: lower max sample count for mdpp32_scp from 1k to 500 (buffer limitation)
- add doc/mdpp_sampling_mode.md with a short description of how to use MDPP sampling mode and decode the data

## Version 1.16.1

- multi_event_splitter:
  - The splitter can now make use of multiple event header filters per module. This is needed to support mdpp16/32 sampling formats which use a new header word allowing to encode larger frame sizes.
  - Revive error counters (moduleHeaderMismatches and moduleEventSizeExceedsBuffer are counted again).
  - Display more info when inspecting buffers.
- vme_templates:
  - Add strict firmware version checks for MTDC-32 IRQ masks.
  - Add new module header filters to support sampling mode for mdpp16_qdc, mdpp16_scp, mdpp32_scp and mdpp32_qdc.
  - Improve the load/save module functionality and ui.
- analysis:
  - Add spline interpolation option to the waveform viewer
  - Rework of the waveform viewer logic. Most update and mode related bugs should be fixed now. Note: the plot legend may start to jitter at times. Still have to find a fix for this.
  - Add a deconvolution operator to be used with mdpp sampling mode.
  - Improve the multiplot widget
    - Can now drop single 1D histograms onto the widget.
    - Autosave the view on dropping an object.
- Add a tiny lmd2mvme converter tool. Works with GSI MBS TRIVA structured readout configs only.
- Add ‘Tools -> Scan VME Bus’ for the MVLC. Does a full scan of the VME address space and tries to identify mesytec modules.

## Version 1.16.0

- Updated MVLC DAQ start sequence order to fix initial timestamp sync under very high trigger load: MVLC DAQ mode is now enabled _after_ the MCST DAQ start sequence, not before. Note: this breaks multicrate. Will be fixed in an upcoming firmware+software release.
- Event Builder:
  - Add module timestamp delta histograms and more detailed counters.
  - Improve the configuration ui.
- vme_templates:
  - Add new MVLC trigger signal mappings implemented since MVLC FW0041
  - Add the new trigger signal mappings to the TRIVA7 master init script
  - Add/update the ‘Streaming and Sampling’ init scripts for MDPP modules.
- analysis:
  - Improve the MDPP Sample Trace viewer.
  - Updates for the upcoming MDPP-32 firmware with Sampling support.

## Version 1.15.2

- Improved Event Builder module for timestamp based event building.

## Version 1.15.1

- analysis: implement auto phase correction in the EventHistory data sink.

Note: breaking change, users of 1.15.0 need to recreate the MDPP sample decoder or reconnect the EventHistory sink.

## Version 1.15.0

The major user facing improvement is support for MDPP-16/32-SCP sampling mode. A new analysis data source for decoding sample traces from MDPP modules has been added. Additionally a new EventHistory data sink with supporting widgets has been added to visualize acquired sample traces.

- vme_templates:
  - Add eventHeaderFilter to the mvlc_event_stamper module. This makes the stamper work with multi-event readouts.
  - Add ‘Streaming and Sampling’ init script to the MDPP-16_SCP module.
- mvlc:
  - Support the new MVLC smart transaction retry mechanism in MVLC FW0039. This ensures that VME transactions are never executed more than once, even in the face of ETH packet loss.
  - Various fixes and improvements from the mesytec-mvlc driver library.
- analysis:
  - Fix a crash when opening a histogram sink without any allocated histograms.
  - Fix output limit calculations for the `BinarySumDiff` operator. Swap inverted limits on analysis load.
  - Fix some crashes in the histogram accumulation code where calculated bin numbers could become negative when extreme input limits were used.
  - MDPP_SAM: Add new data source to support MDPP sampling mode: DataSourceMdppSampleDecoder.
  - MDPP_SAM: Add new EventHistory data sink and a corresponding widget for rendering input data as waveforms.

## Version 1.14.4

- analysis: fix crash when a specific parameter array index is selected in the ui

## Version 1.14.3

- analysis: fix Calibration when input is a single parameter instead of an array.

## Version 1.14.2

- analysis ui: Improve input/output node highlighting in the tree views.

## Version 1.14.1

- analysis ui: Nest operators by category in the operator creation menu.

## Version 1.14.0

- analysis
  - Change Condition Filter to be compatible with the output of the newer condition operators: Invalids and 0.0 are considered false, everything else is true. Before this change only invalids were considered false.
  - Deprecate 1d range and 2d rect filters. Use the newer condition system and optionally the ConditionFilter instead.
  - Store and restore geometries of operator editor dialogs.
  - Fix drag & drop for directories in the data display area.

## Version 1.13.0

- vme_templates:
  - New templates for MDPP-16/32-SCP streaming mode
  - Update templates for MDPP-32 SCP, QDC and PADC
- analysis:
  - Add new `extended timestamp` filter template to relevant VME modules.
  - Improve runtime performance.

## Version 1.12.2 - works with MVLC FW0037 or earlier

- mvlc:
  - Update FTDI driver for windows from 1.3.0.2 to 1.3.0.8.
  - Fix broken trigger setup with MVLC < FW0037.
  - Fixes and improvements to the mesytec-mvlc YAML export/import.
- vme_script
  - Fix wrong FIFO mode setting when parsing block transfer commands.
  - Do not accept invalid VME amods for block transfers (e.g. MBLT with a24).
- vme_templates: Add template for MHV-4 readout via RC-Bus connection from a parent VME module.
- analysis
  - Improve the Calibration editor.
  - Fix potential corruption in the Difference operator when input sizes are not equal (old analysis files).
- vme ui: Bugfixes in the Add/Edit Module GUI.
- Fix hang on shutdown under windows (promteheus-cpp related issue).

## Version 1.11.0 - MVLC FW0037 or later only!

- Support for new MVLC firmware FW0037 features:
  - The 4 new StackTimer units can now be used to create periodic readout events without having to use `TriggerResource` and `StackStart` units.
  - New event trigger condition to activate command stacks on one of the master trigger signals.
  - The total number of MVLC command stacks has been raised from 8 to 16, so now 15 command stacks are available for readout events.
- mvlc:
  - The default Trigger I/O script is now empty as the previous default script was confusing.
  - Remember last connected ETH hostname and other settings when switching controller types.
  - Add more utility VME scripts for the MVLC related to multicrate master/slave handling.
  - Trigger I/O DSO: Fix simulation of strobed LUT outputs.
- analysis:
  - histo1d: log scale plotting and stat calculation fixes
  - ExportSink: updates to the generated code: port to python3, require cmake 3.0, suppress compiler warnings, do not force c++14 but pick the standard used by ROOT instead. Tested with python-3.11.
- Only attempt to connect to VME controllers once instead of multiple times to reduce log spam and wait time in case of errors.
- Crash fix with old mvmelst formatted data and multi event splitting.

## Version 1.10.4

- analysis: Fix bug leading to ExportSink output files being truncated on listfile load.

## Version 1.10.3

- mvlc: Fix `mblts` and `mbltsfifo` commands producing broken readout stacks.
- analysis:
  - correctly set the output limits of the `Previous Value` operator
  - allow toggling between scientific and full number display in the “Show Parameters” window.

## Version 1.10.2

- Fix large values for listfile split size and split duration being truncated.

## Version 1.10.1

- Add the prometheus+grafana docker-compose project to the binary packages (extras/metrics).

## Version 1.10.0

- new: filter listfiles based on analysis conditions. Produces MVLC_USB formatted output listfiles.
- new: prometheus metrics for the MVLC readout and the analysis. Metrics are exposed on port 13802 by default.
- vme_templates: Updated VMMR template. Merge vmmr and vmmr_1ns variants.
- MVLC Trigger IO: fixes for the LUT simulation code (FW0036 related).
- analysis: conditions now output 0.0 if false instead of invalid_param()/NaN. Allows to track condition true/false and total counts in a single 1d histogram.
- bugfixes: empty listfile filename display, uninitialized data in multi_event_splitter

## Version 1.9.2

- mvlc: abort daq start sequence on error in trigger io init.
- histo2d: enable slicing only for 2d histos, not for 1d array views

## Version 1.9.1

- vme_script: Add new `mvme_require_version` command: software side check of minimum mvme version required to run the script.
- MVLC Trigger IO
  - Add `mvme_require_version 1.9.1` at the top of the script. Older versions cannot parse the updated format (`mvlc_stack_begin/end` blocks) correctly. They will now error out due to the unknown `mvme_require_version` command.
  - Trigger IO script exec fixes: the standard `run_script` function is now used to run the script.
- mvlc: Fix bogus value of `moduleData.hasDynamic` in mvlc_readout_parser.

## Version 1.9.0

- Major mesytec-mvlc update for MVLC FW0036 and later:
  - MVLC now supports the FIFO flag for block reads. The `mvlc_set_address_inc_mode` command has been removed. New VME Script commands have been added instead (see below).
  - Larger command stack uploads are now possible. The stack is uploaded in parts. The max size of each part depends on the transport being used: ETH is limited by the max UDP packet size, USB by MVLC internal buffer sizes.
- vme_script: Implement new commands for 2eSST fifo and memory block reads: `2esstfifo`, `2esstsfifo`, `2esstmem`, `2esstsmem`.
- vme_script: Better error handling and log output for MVLC inline stacks.
- MVLC Trigger IO: unit initialization is now wrapped in `mvlc_stack_begin/end` blocks to get atomic init behavior. This means executing the Trigger IO script won’t interfere with the DSO or active readouts that are using the Trigger IO system. This change also speeds up execution of the Trigger IO init script. Note: the Trigger IO script has to be regenerated via the GUI for this change to take effect!
- vme_script: Better error handling and log output for MVLC inline stacks (`mvlc_stack_begin/end`).
- MVLC Trigger IO: unit initialization is now wrapped in `mvlc_stack_begin/end` blocks to get atomic init behavior. This means executing the Trigger IO script won’t interfere with the DSO or active readouts that are using the Trigger IO system. This change also speeds up execution of the Trigger IO init script. Note: the Trigger IO script has to be regenerated via the GUI for this change to take effect!
- MVLC DSO
  - Fix DSO readout returning early before having received a trigger.
  - DSO readout does not use an internal timeout anymore. This means pulses with very long interval times can now be reliably sampled.
  - Rework the UI: can now enter measurement duration instead of post-trigger time. Max measurement duration is limited to 65500 ns by the MVLC.
  - Plot: Fix issue where the trigger edge was not aligned with the 0 coordinate.
- Implement 2D Histogram slicing. Works for X and Y and uses the currently visible area. The slices are opened in a new 1D histogram window.
- vme_templates: Add hardware id checks for mesytec modules similar to MDPP-16 firmware type checks.
- Merge PR from wvonseeg to make the sparse ExportSink python code work with python-3.10.
- Use FIFO block reads in VME Debug Widget.

## Version 1.8.2

- Better fix for the EventServer reconnect race: clients are not disconnected anymore when loading listfiles or switching VME controllers. Also remove the sleep from mvme_jsonrpc_replay.py
- Readd the `mvme.sh` script to directly start mvme with the correct env variables set. Note: mvme.sh sources the `initMVME` script to setup the environment.

## Version 1.8.1

- mvme_root_client: Abort if the DAQ run/replay is already in progress whenn connecting. Can be disabled by passing “run-in-progress-is-ok” on the command line.
- mvme_jsonrpc_replay.py: Sleep between loading a listfile and starting the replay. This works around a race where the mvme_root_client was not connected yet but the replay was already running.

## Version 1.8.0

- [mesytec-mvlc]

  - mvlc_eth: Do not send a frame to the data pipe when connecting. This way ongoing readouts won’t be redirected when a second process connects to the MVLC.

  - eth and usb: Do not reset the stack trigger registers when connecting. It made reading back the last trigger configuration impossible. Now only the DAQ mode register is written when requested via disableTriggersOnConnect().

  - New SplitZipReader to replay from split listfiles stored across multiple zip archives. To consumers it looks like the data came from a single file.

    Replaying all parts from a split listfile is done in the ‘listfile browser (ctrl+4)’ by checking ‘replay all parts’ before opening the first part that should be replayed.

- [vme_templates] Update integration parameter ranges for MDPP-16/32-QDC

- When a listfile is opened do not try to auto connect to the VME controller.

- Updates to the JSON-RPC listfile handling methods: ‘loadAnalyis’, ‘keepHistoContents’ and ‘replayAllParts’ are now explicit parameters to the respective methods.

- The Qt Assistant binary is now again contained with the linux package.

## Version 1.7.2-1

- Use current workspace directory as the starting point for MVLC CrateConfig exports.

## Version 1.7.2

- Fix mvme_root_client compilation issue against root 6.22.06

- New JSON-RPC remote control methods for loading analysis configs and opening listfiles.

  extras/mvme_jsonrpc_replay.py shows how to replay from a list of input listmode files while accumulating into the same analysis.

- Close projection plots when the parent h2d plot is closed.

- Better error logging in multi_event_splitter.

- Fix ‘read_to_accu’ missing the ‘late’ flag when exporting a VMEConfig to mesytec-mvlc CrateConfig.

## Version 1.7.1

- [analysis]
  - Show module/group names in readout parser debug.
  - Improve histo stats widget table formatting and show the RMS value of each column.
  - Fix 1D histo statistics not following the zoom under Windows.
  - Clear 2D histograms when their subrange was modified.
  - Replace the histo resolution slider with a combo box.
  - Interval condition can now exclude/ignore specific intervals from affecting the conditions result.
  - Many improvements to graphical interval/polygon condition editing.
  - Dependency Graph View now starts editing data sources on double-click.
  - Fix a source of frequent crashes when modifying the analysis (periodic histo counter updates).
- [vme_templates]
  - Slightly improve the bus_time filters for VMMR modules
  - Calibrate mesytec vme module timestamps to µs.
- [mvlc]
  - DSO plot and logic updates (recommended to use MVLC Firmware FW0031 or later).
  - Start/stop the DSO using a single stack transaction instead of multiple individual commands. Fixes issues when the DSO is running while the Triger IO script is being written to the MVLC.
- [doc]
  - Update to the “Manual ARP setup” section for the MVLC.
- [packaging]
  - Add missing graphviz dependencies to the linux packages.

## Version 1.7.0

- [vme_script]

  - Breaking change: spaces are not allowed in variables names anymore. The UI now also rejects attempts to uses spaces in variable names.

  - Can now place complete vme_script command lines in variables, e.g.:

        set readout_cmd "mbltfifo a32 0x0100 65535"
        ${readout_cmd}

    The second line above is now correctly parsed as a mbltfifo command.

    Variable references can also be used on the right-hand side:

        set my_addr 0x1234
        set readout_cmd "mbltfifo a32 ${my_addr} 65535"
        ${readout_cmd} # Will be expanded to "mbltfifo a32 0x1234 65535"

    This process is not recursive.

- [ui]

  - Save/restore node expansion state of the VME Config tree.
  - VME script editor: add new “Run (ignore errors)” action. Useful for temporarily ignoring errors from VME scripts and running the script to the end.
  - Remove BerrMarker and EoMMarker text from buffer debut output. These values were only added for the VM-USB and are misleading when looking at MVLC buffers.
  - Show RMS value in 1d plot grid tiles.

- [mvme_root_client]

  Breaking change: improve handling of TTrees split across multiple files.

  The TTree::SetMaxTreeSize() can now be specified on the command line when recording: –root-max-tree-size=<maxBytesPerFile>. The default value is set to the ROOT default of 100000000000LL.

  Replay mode is now enabled via –replay. In this mode mvme_root_client now accepts a list of filenames instead of a single file. The filenames are used to create a TChain object which becomes the source for the replay data.

## Version 1.6.3

- Another mvme_root_client compilation fix.

## Version 1.6.2

- vme_templates: Add support for the MVHV-4 VME High Voltage Bias Supply
- Fix mvme_root_client compilation issue: do not set c++ standard in the Makefile.
- Packaging: do not package libz.so anymore.

## Version 1.6.1

- [gui]

  - New feature: recover corrupted listfiles.

    If a listfile ZIP archive is corrupted due to a crash/power outage the UI now offers a way to attempt to recover the data when opening the corrupted archive.

    Recovery works by searching for the first local file header in the zip archive and attempting to unpack the following data. The recovery process also works for listfile archives containing LZ4 compressed readout data.

  - New feature: can now save/load VME event configs to/from file

    Saving is done via the events context menu entry “Save Event to file”.

    To load an event and add it as a new event use the top-level “Events” node context menu and select “Add Event from file”.

    Saved events can also be merged into existing events: Use “Merge with Event from file” from the destination events context menu. This will add all modules from the source event to the target event. Non-system and non-mesytec VME Script variables defined in the source event will be added to the destination event. Existing variables are overwritten.

  - add “Save Script” to the VME tree context menu

  - Do not allow deleting the MVLC Trigger/IO script

  - Fix file saving logic across the GUI. The logic was flawed and could lead to files being overwritten.

- [vme/readout]

  - Return earlier if errors occur during the DAQ start sequence. Return points are: after global start scripts, after VME module init scripts and after event start scripts.
  - Update module template for the MDLL: init script udpates and analaysis filter and naming fixes.

- [analysis]

  - Implement on-the-fly histogram creation when attempting to graphically edit a condition that does not have a matching histogram.
  - Increase initial size of plot windows so that all toolbar buttons are visible (hopefully).
  - Crash fix in the ExportSink operator UI.

- [doc] Changelog was missing from PDF file in windows builds.

- [mesytec-mvlc]

  - Add a command line vme-scan-bus tool. This is in its early stages and needs more polish.

- Updated build system for linux binaries: Debian Stretch with glibc-2.24 is used with custom built gcc-10.4 and Qt-5.15.8 libraries. Deployment is done using ‘linuxdeployqt’.

  The binaries should now run on a wider range of systems (all using glibc>=2.24) while still containing a modern version of Qt. A detailed list of glibc versions used in common distributions can be found here: https://repology.org/project/glibc/versions

## Version 1.6.0

- [analysis]
  - Add plot grid views: configurable window for showing multiple plots in a grid layout.
  - Reworked the 1d histogram statistics window: it now uses a table to display the data and the statistics are synchronized to the zoomed area of the histogram widget.
  - Add multi_event_splitter counter output to the analysis info widget.
- [vme_script]
  - VME amod parsing is not case-sensitive anymore. By default the user/non-privileged VME amods are used but numeric amod arguments are now also accepted to allow full control of the amod.
  - The effective vme amod value is now logged in the output of script commands.
  - read and readabs now accept “late” in addition to “slow”
  - Improve the script level accumulator commands to make them similar to the MVLC accu stack commands.
- Fix VME Debug Widget block reads not working anymore (wrong VME amod was used)
- mvme now requires c++17!

## Version 1.5.0

- [analysis]
  - Implemented a condition system and 1d-interval, 2d-polygon and expression (exprtk) conditions.
  - Added a new dependency viewer to visualize data processing and active conditions.
- [vme/readout]
  - Revert a change from 1.4.9 where lowercase amod specifiers used the privileged value, while uppercase specifiers where converted to the user value. Now by default the user amods are used but numeric amod arguments can be given to single and block read commands for full control over the amod.
  - Add the raw VME amod value to the log output of vme script commands.
  - Add new commands for the fast 2eSST VME transfer modes: 2esst and the word swapped version 2essts.
  - Add new module templates for mesytec MDLL, mesytec MCPD-8_MPSD and the CAEN v1742
  - Add a new software accumulator and related functions: accu_set, accu_mask_rotate, accu_test
  - Update MDPP-16/32 scripts to check if the correct firmware revision is loaded.
  - Listfile filenames can now be specified using format strings (fmt library).

## Version 1.4.9.5

- Bugfix release: listfile archives where missing the analysis config and log file.

## Version 1.4.9.4

- Fix data rate monitoring and display when using MVLC_USB (read timeout issue)

## Version 1.4.9.3

- Improved listfile filename generation: an fmt format string can now be used to specify the output filename. Currently the run number and the timestamp are passed as arguments when generating the output filename.
- Add untested templates for the CAEN v775 TDC module.

## Version 1.4.9.2

- [analysis] Suppress completely empty events when using the SIS3153 controller.

## Version 1.4.9

- [analysis]

  - Add a new MultiHitExtractor data source allowing to extract multiple hits per address.
  - Add ‘Generate Histograms’ context menu action to data sources and operators to quickly generate histograms for selected objects.
  - Raise maximum number of data sources and operators per VME event context from 256 to 65536.
  - Improve histo1d stats output.

- New feature: listfile splitting (MVLC only)

  When recording readout data the output listfile can now be split either based on file size or elapsed time. Each partial listfile ZIP archive is in itself a complete, valid mvme listfile and includes the VME config, analysis config and logged messages.

  Replaying from split listfiles currently has to be done manually for each part. Using the ‘keep histo contents’ in mvme allows to accumulate data from multiple (partial) listfiles into the same analysis.

- Listfile output directory can now be selected in the Workspace Settings GUI.

- Add new optional suffix part to listfile filename generation.

- New feature: VME modules can now be saved to and loaded from JSON files. This can be used to create custom VME modules without having to use the mvme VME template system.

- DAQ run number is now incremented on MVLC readout stop to represent the next run number.

- Show the original incoming data rate in the analysis window when replaying from listfile.

- VME Config: allow moving modules between VME Events via drag&drop.

- [mvlc]

  - Revert the MVLC readout parser simplification done in 1.4.8

    The parser now allows prefix, dynamic and suffix parts again. The parser data callback remains unchanged, passing the parsed data as a single pointer + size.

  - Fix command timeout errors with older USB2 chipsets.

  - Fix USB2 connection issues by retrying opening the device.

  - Periodically add stack error information received on the command pipe to recorded listfile data. Uses a new system_event::StackErrors section to store stack error locations, flags and counts.

  - Fix ‘VME Script -> Run’ in the MVLC Debug GUI

- [vme_templates]

  - Add ‘stop_acquisition’, ‘reset_fifo’ and ‘readout_reset’ commands to mesytec module reset scripts. Fixes an issue where the modules could signal a VME IRQ during the init sequence but before the DAQ was properly started with the multicast start sequence.
  - Improve Triva7 VME module templates.

- Improved VME Script Execution: log messages from commands are now immediately visible. Progress dialog shows progress based on number of commands.

- Fix wrong VME -> analysis module assignments when disabled VME modules are present in the config.

- New ZMQ publisher listfile output (MVLC only).

  Sends readout buffers through a ZMQ PUB socket. Based on code from GANIL.

## Version 1.4.8.2

Raise MVLC command timeout (request/response) from 500ms to 1000ms.

## Version 1.4.8.1

Make mvme build against qwt versions older than 6.2.0 again.

## Version 1.4.8

- [mvlc]

  - Simplify the readout parser: modules readout data may now consist of either a dynamic or a fixed part instead of prefix, dynamic and suffix parts. This allows for a simpler callback interface for the parser.

    The previous, more complex structure can be recrated by adding multiple modules to the VME config, each performing either fixed size reads or a block transfer.

  - Add support for new features in firmware FW0021:

    - New vme_script commands to work with the MVLC stack accumulator.

      See mvlc_signal_accu and the commands following it.

    - Add ability to define custom and inline MVLC stacks in VME scripts.

      See mvlc_stack_begin/end and mvlc_custom_begin/end.

    - The readout parser now knows about the accumulator and emulated accumulator block reads.

    - Support CR/CSR addressing modes.

- [analysis]

  - Improvements to the EventBuilder module. This version does work with non-mesytec modules being present in an event and allows to exclude modules from the timestamp matching algorithm.
  - Improve Histo1D ‘Print Stats’ output
  - Crash fix when loading a session file with unconnected histograms.

- [vme_templates]

  Add module templates for the GSI Triva 7 trigger module.

- [build]

  - Upgrade to Qt 5.15.2 and Qwt 6.2.0

## Version 1.4.7

- Reopen to the last used VME config when closing a listfile.
- When saving VME/analysis config files suggest a filename based on the workspace directory.
- Add a `--offline` option to mvme which disables any connection attempts to the VME controller. Useful for replay-only sessions.
- Improve MVLC stack error reporting.
- Decrease number of readout buffers in-flight to reduce latency when stopping a run/replay.
- Various bug and crash fixes.
- [analysis]
  - Add an EventBuilder module to the analysis processing chain.
  - Fix analysis stats display when using more than 12 modules in an event.
  - Prepend the module name to analysis objects generated when adding the default filters.
- [vme_script]
  - Add support for MVLC stacks containing custom data (mvlc_custom_begin).
  - Add support for new MVLC commands in Firmware 0x0020.
- [packaging]
  - make installed files and directories group and world readable.
  - re-add the mvme.sh startup shell script to the bin/ directory.

## Version 1.4.6

- [mvlc]
  - Improve immediate MVLC/VME command latency when using the DSO.
  - Trigger/IO updates
- [analysis]
  - Fix crash in the ExportSink (“File Export”) operator.
  - Add CSV output option to the ExportSink.
- [vme] Change default vme amods from the privileged to the user variants.

## Version 1.4.5

- Create an empty analysis when opening a workspace and no existing analysis could be loaded from the workspace. This fixes an issue where analysis objects from the previously opened workspace still existed after changing the workspace.

## Version 1.4.4

- [vme_script] Behavior changes:
  - Do not accept octal values anymore. ‘010’ was parsed as 8 decimal while ‘080’ - which is an invalid octal literal - was parsed as a floating point value and interepreted as 8 decimal.
  - Floating point parsing is now only applied if the literal contains a ‘.’.
- [analysis] Module hit counts in the top left tree now display the count and rate of non-empty readout data from the module. Previously they showed all hits and where thus equal to parent event rate unless multi-event splitting was in effect.
- [vmusb] Fix readout being broken.
- Do not auto create non-existing workspace directories on startup. Instead ask the user to open an existing workspace or create a new one.
- Do not set default vme and analysis config file names when creating a workspace or no previously loaded files exist in the current workspace. This makes the user have to pick a name when saving each of the files and should make it less likely to accidentially overwrite existing configs.

## Version 1.4.3

- [mvlc] Add support for the oscilloscope built into the MVLC since firmware FW0018.
- [analysis]
  - Remove the vme module assignment dialog. Instead show data sources belonging to unassigned modules in a hierarchy in the top left tree of the analysis window. Data sources can be dragged from there onto known modules to assign them.
  - Add static variables to the Expression Operator. These variables exist per operator instance and persist their values throughout a DAQ or replay run.
  - Add a ScalerOverflow operator which outputs a contiguous increasing value given an input value that overflows. This can be used to handle data like module timestamps which wrap after a certain time.
  - The RateMonitor can now display a plain value on the x axis instead of time values. Useful when plotting timestamp or counter values.
  - Added division to the binary equation operator.
- Better handling of vme/analysis config files when opening listfiles to reduce the number of instances where the vme and analysis configs diverge.
- Add print statements to the module reset vme template scripts.

## Version 1.4.2

- [vme_templates]
  - Wait 500ms instead of 50ms in the reset scripts of MDPP-32_PADC/QDC
  - Update MDPP-32_QDC calibration to 16 bits
  - Do not set vme mcst address in the mvlc_timestamper `VME Interface Settings` script.
- [analysis]
  - Improve Rate Monitor draw performance
  - Make Rate Estimation work in projections of 2D histograms
  - Analysis session data parsing fixes

## Version 1.4.1

- [vme_templates] Fix gain calculation in MDPP16-SCP `Frontend Settings` script.

## Version 1.4.0

- [mvlc] Trigger/IO updates for firmware FW0017
  - Replace IRQ, SoftTrigger and SlaveTrigger units with the new TriggerResource units
  - Support the IRQ input, L1.LUT5/6 and L2.LUT2 units
  - Support Frequency Counter Mode for Counter units
  - Basic support for the Digital Storage Oscilloscpe built into the Trigger/IO system.
  - Crash fixes when parsing Trigger/IO scripts
- [mvlc] Updates to the DAQ Start and Stop sequence
- [vme_config] The order of Modules within an Event can now be changed via drag and drop.
- [analysis]
  - Performance and visual updates for the RateMonitors
  - Display directory hierarchy in Histogram and RateMonitor window titles
- [vme_templates]
  - Add the new MDPP-16/32 channel based IRQ signalling.
  - Add the ‘stop acq’ sequence to all module ‘VME Interface Settings’ scripts. This makes modules not produce data/triggers directly after being intialized but only after the ‘Event DAQ Start’ script has been executed.

## Version 1.3.0

- [mvlc] Support MVLC ethernet readout throttling

  - Throttling is done by sending ‘delay’ commands to the MVLC which then adds small gaps between outgoing ethernet packets thus effectively limiting the data rate.
  - The MVLC will block the VME readout side if it cannot send out enough ethernet packets either due to reaching the maximum bandwidth or due to throttling. This behaves in the same way as USB readouts when the software side cannot keep up with the USB data rate.
  - The delay value is currently calculated based on the usage level of the readout socket receive buffer. Throttling starts at 50% buffer usage level and increases exponentially from there.

  This method of ethernet throttling is effective when the receiving PC cannot handle the incoming data rate, e.g. because it cannot compress the listfile fast enough. Instead of bursts of packet loss which can lead to losing big chunks of readout data the readout itself is slowed down, effectively limiting the trigger rate. The implementation does not compensate for packet loss caused by network switches or other network equipment.

  Throttling and socket buffer statistics are shown at the bottom of the main window, below the VME config tree.

- [mvlc] readout_parser fixes: - disabled VME modules where confusing the readout parser - stale data from the previous DAQ run was remaining in the buffers

- [mvlc] Updates and fixes for the trigger IO editor.

- [mvlc] When creating a new VME config a new default trigger IO setup is loaded. The setup provides 5 trigger inputs, 5 gated trigger outputs, a free trigger output and daq_start, stack_busy and readout_busy signals on the NIMs. The setup is intended to be used with two events: one for the readout and one periodic event for counter readout.

- [analysis] Allow directories, copy/paste and drag/drop for raw histograms (bottom-left tree view). When generating default filters and histograms for a module the histograms are also placed in a directory instead of being attached to special module nodes. When loading analysis files from previous versions the missing directories are automatically created.

- [analysis] Updated the multievent_splitter to work with modules which do not contain the length of the following event data in their header word. Instead the event length is determined by repeatedly trying the module header filter until it matches the next header or the end of the readout data is reached.

- [analysis] Updates and fixes for the RateMonitors

- [vme_templates]

  - Updates to the mesytec VMMR template.
  - Updates to the CAEN v785 template.
  - Add templates for the CAEN V1190A Multihit TDC.

- [vme_script] add ‘readabs’ command

- [core] Improve the high level stopDAQ logic and resulting state updates. This in turn makes stopping the DAQ via JSON-RPC work reliably.

## Version 1.2.1

- [analyis] Fix two crashes when using the ExportSink

## Version 1.2.0

- [mvlc] Update mesytec-mvlc lib to work around an issue were MVLC_ETH was not able to connect under Windows 10 Build 2004.

  This issue has also been fixed in MVLC Firmware FW0008.

- [vme_templates] Add VME and analysis templates for the mesytec MDPP-16_CSI, MDPP-16_PADC and MDPP-32_PADC module variants.

- [vme_templates] Add templates for the MDI-2 starting from firmware FW0300.

- [vme_templates] Add files for the CAEN V830 latching scaler.

- [vme_script] Add a new ‘mblts’ (swapped block read) command for the MVLC which swaps the two 32-bit words received from MBLT64 block reads.

  This was added to the MVLC to support the CAEN V830 and possibly other modules which have the data words swapped compared to the mesytec modules.

- [analysis] Generate histograms and calibrations for ListfilterExtractors found in module analysis template files. This was added for the V830 which is the first template file to use ListfilterExtractors.

- [core] Add facilities for storing the log messages generated by mvme to disk:

  - All messages generated during DAQ runs (from ‘DAQ start’ to ‘DAQ stop’) are written to a file in the workspace ‘run_logs/’ directory.

    The maximum number of files kept is limited to 50. On exceeding the limit the oldest file is removed. Filenames are based on the current date and time.

    This feature was added because previously only the logs from successful DAQ starts where kept on disk (inside the listfile ZIP archive generated by mvme). Log contents from aborted starts had to be manually copied from the log window.

  - All messages generated by mvme are written to ‘logs/mvme.log’. On opening a workspace an existing logfile is moved to ‘logs/last_mvme.log’ and a new logfile is created.

    These files contain all messages generated by mvme, even those produced while no DAQ run was active.

- [event_server] Use relative path for dlopen() in mvme_root_client. Attempts to fix an issue where the analysis.so could not be loaded on some machines.

## Version 1.1.0

- MVLC support is now implemented using the mesytec-mvlc library. Listfiles created by this version of mvme can be replayed using the library (e.g. the mini-daq-replay program).

## Version 1.0.1

- [vme_templates] Add new VMMR_Monitor module intended for reading out MMR monitor data (power, temperature, errors).
- [vme_templates] Module templates can now specify a set of default variables to create when the module is instantiated.
- [vme_templates] Allow using ListFilterExtractors in module analysis templates in addition to MultiWordDataFilters.
- [mvlc] Update trigger io editor connection bars to reflect changes to the firmware.
- [mvlc] Fix potential data loss under very high data rates.
- [doc] Updates to the Installation section.

## Version 1.0.0

- Add ability to run the data acquisition for a limited amount of time before automatically stopping the run.

- Add VME templates for the MDPP-32 (SCP and QDC variants).

- [vme_script] Drop support for the ‘counted block read` commands. They are complex, rarely used and the MVLC does not currently support them. As long as a VME module supports either reading until BERR or can be read out using a fixed amount of (M)BLT cycles there is no need for these special commands.

- [vme_script] VME scripts now support floating point values, variables and embedded mathematical expressions.

- [vme_config] Updates to the mesytec module templates and the internal config logic to make use of the new VME script variables.

  These changes make IRQ and MCST handling with multiple modules and events much simpler. When using only mesytec modules no manual editing of scripts is required anymore.

  When loading a config file from a previous mvme version all module and event scripts will be updated to make use of the standard set of variables added to each VME event.

- Improve UI responsiveness with the MVLC at low data rates.

- Multiple MVLC fixes and improvements.

- Various bugfixes and UI improvements

  - VME Script error messages are now highlighted in red in the log view.
  - Speed up creating and updating the analysis tree views. This is especially noticeable when using many modules or many VME events.

- Upgrade Qt to version 5.14.1 on the build servers.

- Do not ship libstdc++ with the linux binary package anymore. It caused issues in combination with setting LD_LIBRARY_PATH as is done in the initMVME shell script.

## Version 0.9.6

- Improved support for the MVLC. Among others VME Scripts can now be directly executed during a DAQ run without having to pause and resume the DAQ.
- New UI for setting up the MVLC Trigger and I/O logic system.
- Updates to the auto-matching of vme and analysis objects on config load.
- Improved the mvlc_root_client
- Documentation updates
- Improved VME module templates
- Various stability and bugfixes

## Version 0.9.5.5

- This is the first version with support for the upcoming mesytec MVLC VME controller.
- Added the EventServer component which allows to transmit extracted readout data over a TCP connection.
- Added a client for the EventServer protocol which generates and loads ROOT classes, fills instances of the generated classes with incoming readout data and writes these objects out to a ROOT file. Additionally user defined callbacks are invoked to perform further analysis on the data.

## Version 0.9.5.4

- Log values written to the VMUSB ActionRegister when starting / stopping the DAQ

## Version 0.9.5.3

- Allow access to all VMUSB registers via vme_script commands `vmusb_write_reg` and `vmusb_read_reg`
- Fix a crash in Histo1DWidget when resolution reduction factor was set to 0

## Version 0.9.5.2

- Fix a race condition at DAQ/replay startup time
- Remove old config autosave files after successfully loading a different config. This fixes an issue where apparently wrong autosave contents where restored.
- Rewrite the analysis session system to not depend on HDF5 anymore. This was done to avoid potential issues related to HDF5 and multithreading.

Note

Session files created by previous versions cannot be loaded anymore. They have to be recreated by replaying from the original readout data.

## Version 0.9.5.1

This release fixes issues with the code generated by the analysis export operator.

Specifically the generated CMakeLists.txt file was not able to find the ROOT package under Ubuntu-14.04 using the recommended way (probably other versions and other debian-based distributions where affected aswell). A workaround has been implemented.

Also c++11 support is now properly enabled when using CMake versions older than 3.0.0.

## Version 0.9.5

Note

Analysis files created by this version can not be opened by prior versions because the file format has changed.

This version contains major enhancements to the analysis user interface and handling of analysis objects.

- It is now possible to export an object selection to a library file and import objects from library files.

- Directory objects have been added which, in addition to the previously existing userlevels, allow to further structure an analysis.

  Directories can contain operators, data sinks (histograms, rate monitors, etc.) and other directories.

- Objects can now be moved between userlevels and directories using drag and drop.

- A copy/paste mechanism has been implemented which allows creating a copy of a selection of objects.

  If internally connected objects are copied and then pasted the connections will be restored on the copies.

Other fixes and changes:

- New feature: dynamic resolution reduction for 1D and 2D histograms.

  Axis display resolutions can now be adjusted via sliders in the user interface without having to change the physical resolution of the underlying histogram.

- Improved hostname lookups for the SIS3153 VME controller under Windows. The result is now up-to-date without requiring a restart of mvme.

- Add libpng to the linux binary package. This fixes a shared library version conflict under Ubuntu 18.04.

- SIS3153: OUT2 is now active during execution of the main readout stack. Unchanged: OUT1 is active while in autonomous DAQ mode.

- The Rate Monitor can now take multiple inputs, each of which can be an array or a single parameter.

  Also implemented a combined view showing all rates of a Rate Monitor in a single plot.

- Add new VM-USB specific vme script commands: `vmusb_write_reg` and `vmusb_read_reg` which allow setting up the VM-USB NIM outputs, the internal scalers and delay and gate generators.

  Refer to the VM-USB manual for details about these registers.

## Version 0.9.4.1

- Fix expression operator GUI not properly loading indexed parameter connections
- Split Histo1D info box into global and gauss specific statistics. Fixes to gauss related calculations.

## Version 0.9.4

- New: Analysis Expression Operator

  This is an operator that allows user-defined scripts to be executed for each readout event. Internally exprtk is used to compile and evaluate expressions.

- New: Analysis Export Sink

  Allows exporting of analysis parameter arrays to binary files. Full and sparse data export formats and optional zlib compression are available.

  Source code showing how to read and process the exported data and generate ROOT histograms can be generated.

- New: Analysis Rate Monitor

  Allows to monitor and plot analysis data flow rates and rates calculated from successive counter values (e.g. timestamp differences).

- Moved the MultiEvent Processing option and the MultiEvent Module Header Filters from the VME side to the analysis side. This is more logical and allows changing the option when doing a replay.

- General fixes and improvements to the SIS3153 readout code.

- New: JSON-RPC interface using TCP as the transport mechanism.

  Allows to start/stop DAQ runs and to request status information.

## Version 0.9.3

- Support for the Struck SIS3153 VME Controller using an ethernet connection
- Analysis:
  - Performance improvments
  - Better statistics
  - Can now single step through events to ease debugging
  - Add additional analysis aggregate operations: min, max, mean, sigma in x and y
  - Save/load of complete analysis sessions: Histogram contents are saved to disk and can be loaded at a later time. No new replay of the data is neccessary.
  - New: rate monitoring using rates generated from readout data or flow rates through the analysis.
- Improved mesytec vme module templates. Also added templates for the new VMMR module.
- More options on how the output listfile names are generated.
- Various bugfixes and improvements

## Version 0.9.2

- New experimental feature: multi event readout support to achieve higher data rates.
- DataFilter (Extractor) behaviour change: Extraction masks do not need to be consecutive anymore. Instead a “bit gather” step is performed to group the extracted bits together and the end of the filter step.
- UI: Keep/Clear histo data on new run is now settable via radio buttons.
- VMUSB: Activate output NIM O2 while DAQ mode is active. Use the top yellow LED to signal “USB InFIFO Full”.
- Analysis performance improvements.
- Major updates to the VME templates for mesytec modules.

## Version 0.9.1

- Record a timetick every second. Timeticks are stored as sections in the listfile and are passed to the analyis during DAQ and replay.
- Add option to keep histo data across runs/replays
- Fixes to histograms with axis unit values >= 2^31
- Always use ZIP format for listfiles