Malcolm

Latest version: v6.3

Safety actively analyzes 714860 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 3

5.3

-------------------

Changed:

- Implemented Double Buffering, using both Sequencer tables available on the PandA
to be able to scan over the 2000 max number of rows, and to decrease the
configuration time for long scans.

See the updated "template_double_seq_pcomp" for the new recommended
design. It is also recommended to set repeats on both of the SEQ tables to be
'1', although the PandASeqTriggerPart does also set this when it is needed.

This has a **breaking change** for old PandA designs as seqReset now has to be
exported. Otherwise Stack scans where each inner scan is small enough that the
points will not fill 2 SEQ tables (<8192 points or 30s per inner scan), but large
enough that it will use more than 1 (>4096 points, 15s per inner scan) will fail.

Fixed:

- Fixed bug where, during a 3D scan, the first point of all inner scans after the
first previously triggered immediately even if the outer axes was still moving.

5.2

-------------------

Changed:

- DetectorDriverPart's attributesFile is no longer saved in a design. This stops
the warning when a populated Attributes to Capture table on the web GUI
creates its own attributes file and overwrites the attributeFile value saved
in the design (if present). If wanting to capture additional NDAttributes you
can now either use the Attributes to Capture table and save it to your design,
or alternatively create the attributes XML file via iocbuilder and set the
attributes filepath at IOC startup.

Fixed:

- Fixed bug with PmacChildPart when performing large scans with start of row
triggering. If the profile generation completed with more than 4,000 points
to upload, then during Run you would encounter an error "Why do we still have
points?". This is because the logic expected the profile to be able to written
in a single write (i.e. under 2000 points). Now multiple profile writes are
allowed when the brick is not providing a trigger at every point.

5.1

-------------------

Changed:

- PmacChildPart's profile generation is now split into two methods based on the
trigger type. The loop performance has been improved, reducing configure
times by ~20% for small scans and ~40% for large scans when profile point
generation dominates. A Yield has also been added so the thread suspends
after each batch so it doesn't block other threads for the entire profile
calculation, which previously caused timeout problems with other components.
- HDFWriterPart now looks at the number of frames written to the HDF5 file to
track progress and check for stalling issues. This means a scan will now fail
instead of succeed if the file plugin receives all frames but doesn't write
them.

Fixed:

- PmacChildPart now only reports progress if the brick is providing a trigger
at every point. This means the scan block's RunnableController should now
report more useful progress for scans using start of row triggering or
position compare.

5.0

-------------------

Changed:

- BeamSelectorPart now supports holding at each position for different lengths
of time based on a mutator modifying delay_after, allowing different exposures
to be used for each detector.
- ExposureDeadTimePart now has fixed values for readout time and frequency
accuracy. These are configurable in the YAML but are then fixed at runtime.
This fixes a bug in validate where the resulting exposure time is different if
the target design is not loaded before you run validate/configure.

Designs for detector runnable blocks which contain these entries should be
removed (remove the following lines from the JSON design files):

.. code-block::

- "readoutTime": 0.005,
- "frequencyAccuracy": 50.0

You can then set the readout time when you instantiate the runnable block
(frequency accuracy is probably fine at the default value of 50.0):

.. code-block:: yaml

- ADPco.blocks.pco_runnable_block:
mri_prefix: BL11K-ML-PCO-01
pv_prefix: BL11K-EA-PCO-01
config_dir: $(config_dir)
windows_drive: G
path_prefix: /dls
readout_time: 0.005

Added:

- DetectorDriverPart now has optional min_acquire_period argument. When set to a
non-zero value this is checked during validation against the generator
duration to ensure the detector can keep up during the acquisition.
- Calculate generator duration automatically. If a duration of 0.0 is given
then some parts will attempt to calculate a duration based on other parameters
combined with other information they have. The parts which tweak duration are:

- PmacChildPart
- PandAPulseTriggerPart
- DetectorDriverPart
- ExposureDeadtimePart
- AndorDriverPart
- ReframePluginPart
- BeamSelectorPart (based on a fixed move time)

The largest tweak to generator duration by any part will win, and then all
parts will validate with the new duration to check they are happy with the
tweaked value. This can happen iteratively with up to 10 attempts per
RunnableController.

Fixed

- Malcolm designs will no longer overwrite XMAP energy values
- The PreRunHook will now run at the beginning of do_run() so that it also runs
on a resume.

4.6

-------------------

Changed:

- Added Unrolling block to be able to enable/disable unrolling part in scan
design

Fixed:

- Servo interrupt frequency getter for PowerPMAC (needed at scan
configuring phase), this requires pmac version 2-5-5 or higher
- Issue with PositionLabellerPart subscription not adding more positions after
the initial 5000 points
- OdinWriterPart cast data type to lower case for NumPy V1.2
- Nexus templates for Savu Kinematics added to package data
- Savu Kinematics now supports no axes to move
- Scans with breakpoints and pausing are now working again after breaking in
the 4.5 release

4.5

--------------------------

Changed:

- Improvements when scanning with software outer axes:

- Hardware-triggered detectors remain armed between inner scans
- By default detectors write to single files for the whole scan instead of
for each inner scan
- For ADOdin you can set frames per block and blocks per file to control
number of output files

Fixed:

- Tutorials now described using pipenv
- /tmp no longer becomes a git repository when running tests
- Template designs now included in package data
- Fixed issue where existing block wiring would not be shown before a design is
loaded

Page 2 of 3

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.