[Mx-mailing-list] MX 2.0.0 is available
lavender at agni.phys.iit.edu
Tue Mar 15 12:11:06 CDT 2016
This message is to announce the release of version 2.0.0 of the MX data
acquisition and control system. MX is currently used for beamline control
at several X-ray beamlines at the Advanced Photon Source. It is also used
to control several X-ray area detectors at both the Advanced Light Source
and the Advanced Photon Source.
It has been quite some time since the last full release of MX, so we have
chosen to call this the 2.0.0 release to reflect the large number of changes
since the old 1.5.4 release. This new release can be downloaded from
More information about MX is available from the MX web site at
Some of the most important additions are native support for several new
area detectors from Dexela and Research Detectors Inc. Several other new
third-party area detectors are now supported as well.
For this new release, GNU Make is now the only supported build system for
building MX on all platforms.
For other changes, please look at the change log entries show below.
lavender at agni.phys.iit.edu
Illinois Institute of Technology
=========================== Changelog for MX 2.0.0 ===========================
Version 2.0.0 (02/10/16):
Added new build targets: bsd-clang, linux-clang, macosx-clang, hurd
The -clang targets provide support for compiling MX using the
LLVM Clang compiler.
On Windows, MX is normally compiled from Cygwin or Msys shell sessions
even if the compiler is Visual C++. The source code directory
mx/scripts/windows/visual_studio now contains some example scripts
that automatically figure out all of the environment variable
definitions needed for Cygwin to be able to compile using Visual C++
from a Cygwin command line. All you need to do is to copy the
script that matches your compiler to some place like /usr/local/bin,
arrange for your Cygwin Bash startup scripts to automatically source
that script, and then modify the definition of PROGRAM_FILES_DIR or
MSDEV_DIR at the top of the script to match the location that
Visual Studio has been installed to on your system. At present,
example scripts are available for Visual Studio 2010, 2012, 2013,
and 2015, as well as Visual C++ 4.0, 5.0, and 6.0.
If you are using the Visual Studio Cygwin scripts just mentioned above,
the Windows makefile mx/libMx/Makehead.win32 now supports
autoconfiguration of the variables used to build MX with Visual C++
on Windows. Under normal circumstances, it should not be necessary
to modify mx/libMx/Makehead.win32 at all. Similar autoconfiguration
changes have been made to other MX makefiles. Most of the time, you
should not need to change anything other than the variables MX_ARCH
and MX_INSTALL_DIR in the top level MX Makefile.
'mxserver' now has support for an ASCII command interface in addition
to the regular binary command interface. This was done for third-party
beamline control programs that prefer to use an ASCII interface. At
present, the commands 'GET record.field' and 'PUT record.file value'
are implemented. If you have a choice, use the binary command
interface since it is much, much faster than the ASCII interface and
has many more features.
The 'mxupdate' program has been renamed to 'mxautosave'. The
immediate cause for doing this is the fact that Windows 7 seems
to insist on popping up a UAC dialog any time that you try to
run an EXE file with the string 'update' embedded in its name.
Changing the name to 'mxautosave' is probably just as well, since
the new name more directly describes what it does, namely,
automatically saving and restoring MX variables.
Added new 'mxmonitor' program. It will display value change updates
in your terminal window for MX record fields whose name are specified
on the 'mxmonitor' command line.
Added 'mx_config' utility program. 'mx_config' can be used in
MX makefiles to report the compiler version, the runtime library
version, the operating system version, etc.
Added cross-platform support for "file monitors". These allow MX
to be informed when monitored files have been changed.
Changed the length of record names and field names to 40.
Including the '.' between the two, this allows for 81 character
record field names.
Added new sequence types:
gated - In a gated sequence, an area detector or video input
takes images as long as an external gate signal is active.
Area Detector-Related Changes:
'Flood field' has been renamed to 'flat field' in both
messages and function names for greater compatibility with
standard terminology in the imaging business.
Renamed area detector oscillation functions and variables to
'oscillation' rather than the older, misleading name of
A low resolution ASCII image display can now be written to
the output log of 'mxserver' by writing a command like this:
mxput cmos.show_image_display 4
The number for the example above means this:
0 - Display the current image frame buffer for the detector.
1 - Display the mask frame buffer.
2 - Display the bias frame buffer.
4 - Display the dark current frame buffer.
8 - Display the flat field frame buffer.
mxput cmos.show_image_statistics 4
can similarly be used to display statistics about the image
in the matching MX frame buffer.
MX database changes:
New fields for the 'mx_database' record.
mx_database.cflags - Displays the value that the CFLAGS
macro had at the time MX was compiled.
mx_database.crash - Writing to this field immediately
crashes the MX server for testing the handling of such
crashes. Only available if remote breakpoint (-r)
support is enabled for the running MX server.
mx_database.breakpoint_number - Adds support for
"numbered" breakpoints in MX that can be individually
turned on or off.
mx_database.posix_time - Reports the current time for the
MX server using the Posix epoch.
Added new database file directives for MX database files.
!break - causes mx_breakpoint() to be invoked at the point
where the '!break' statement is encountered in reading
a database file.
!return - causes MX to stop reading the current database file
at the point where the '!return' statement is encountered.
New Driver Superclasses:
operation - This driver superclass provides a way of managing
long-running operations that are managed via an MX record.
Drivers are expected to supply 'start', 'stop', and
'get status' functionality, but the actions performed by
"operations" are not otherwise constrained.
operation_class - Includes the 'network_operation',
'toast', 'rdi_mbc_log' (rdi_mbc.mxo), and
special - This driver superclass provides a place to store driver
classes that do not really fit anywhere else.
program - For managing external processes that are
typically used by "mxserver".
Available driver: 'external_command'.
mod - For MX drivers that override the behavior of
other MX drivers. Typically this is done by
replacing some of the method functions in the
At present, the only existing driver is the
'rdi_xineos_gige' driver from the RDI-proprietary
New Variable Classes:
field - A driver class that contains drivers for reading and
writing record fields as MX variable records.
special_variable - A driver class for variable drivers that
do not fit anywhere else.
Available drivers are 'rdi_mbc_string' (rdi_mbc.mxo),
'rdi_mbc_filename' (rdi_mbc.mxo), 'rdi_mbc_datafile_prefix'
(rdi_mbc.mxo), 'rdi_mbc_pathname_builder' (rdi_mbc.mxo),
'rdi_mbc_save_frame' (rdi_mbc.mxo), and 'biocat_6k_joystick'
New Driver Types Added to MX Core (libMx):
ainput_as_dinput - Uses an analog input as a digital input with
selectable values for low, high, and threshold voltages for
compatibility with 5V, 3.3V, 1.8v, and other voltage-based
aoutput_as_doutput - Uses an analog output to generate a digital
output with selectable values for low, high, and threshold
coordinated_angle - This driver coordinates the moves of several
motors to maintain them all at the same relative angle.
Used at BioCAT to move several motors when mirror angles
digital_fanin - Reads values from other MX record fields and
performs a logical operation on the values read (and, or, xor).
digital_fanout - Forwards the value written to this record to
several other MX record fields.
external_command - Runs an external command using mx_spawn()
and waits for the command to finish. These commands are
intended to be run during MX database startup and can be
run either at finish_record_initialization() time or at
field_string, field_char, field_uchar, field_short, field_ushort,
field_bool, field_long, field_ulong, field_hex, field_int64,
field_uint64, field_float, field_double, field_record -
These drivers provide a way of reading and writing arbitrary
MX record fields as if they were MX variables.
gittelsohn_pulser - MX pulse generator driver for Mark Gittelsohn's
Arduino-based pulse generator used by RDI area detectors.
indirect_string - This variable driver can read values from
several other MX record fields and then construct a string
value from them based on a C-style format string specified
in the MX database.
merlin_medipix - MX area detector driver for the Merlin Medipix
series of detector from Quantum Detectors.
monte_carlo_mca - An MX driver that calculates a simulated MCA
spectrum. The details of the peak sizes and widths are
specified in the MX database entry for this record. At
present, "gaussian" and "lorentzian" peaks are supported,
as well as "polynomial" and "uniform" backgrounds.
network_operation - MX operation driver for operations controlled
by a remote MX server.
network_wvin - MX waveform input driver for waveform input devices
controlled by a remote MX server.
pilatus - MX area detector driver for Dectris Pilatus area
detectors. Not all functionality of the Pilatus is supported
yet, but single frame capture works.
relay_as_doutput - MX digital output driver that treats an MX relay
as a digital output.
soft_mce - Implements software-emulated MX multichannel encoders
that periodically read motor positions from other records.
For most records, the value read is the value that is currently
found in motor->position. However, for 'soft_motor' records,
the motor position is computed using the function
mx_dead_reckoning_predict_motion(). This driver is only
suitable for software testing and should not be used for
synaccess_netbooter_relay - The Synaccess netBooter is a remotely
controllable power strip to provide remote users the ability
to remotely power cycle a device. For some versions of the
netBooter, it is also possible to measure the current draw
of the device and the ambient temperature of the netBooter.
toast - MX operation driver that oscillates a motor back and forth
until stopped. For some kinds of experiments, this can be
thought of as "toasting" the sample in the X-ray beam.
xafs_k_power_law_scan - Implements XAFS wavenumber scans for which
the counting time follows a power law. This is an alternative
to multiregion XAFS scans.
Note that in each case a backward compatibility alias is
available for the old name.
databox_mce - New name for 'databox_encoder'.
mcs_mce - New name for 'mcs_encoder'.
Current Dynamically Loadable Modules:
In MX 2.0.0, all drivers that depend on third-party DLLs or
shared libraries have been moved to dynamically loaded MX
modules, so that the core of MX can be compiled independently
of these external libraries.
Here is the list of currently working modules for MX 2.0.0.
Drivers for Aviex (later Dexela) PCCD series area detectors.
The drivers for these used to be in libMx.
pccd_16080 - This is an old detector located at the BioCAT
beamline of the Advanced Photon Source.
pccd_170170 - This detector is in use at the SWING beamline
of Synchrotron Soleil.
pccd_4824 - This detector is located at ESRF.
pccd_9785 - This is the newest and last member of the series
of PCCD detectors. It is located at the BioCAT beamline
of the Advanced Photon Source.
The driver for this used to be in libMx.
driverlinx_portio - A low level driver for communicating
with x86 architecture I/O ports. The third party
driver this MX driver depends on does not work on
recent versions of Windows or on 64-bit Windows.
Core MX client support for EPICS, as well as MX drivers for
most of the EPICS drivers in the SynApps package. The
drivers for these used to be in libMx.
epics_ainput - MX analog_input driver that reads floating
point values from EPICS PVs with support for dark current
epics_aoutput - MX analog_output driver that writes floating
point values to EPICS PVs.
epics_area_detector - MX area_detector driver that communicates
with area detectors controlled by the EPICS areaDetector
epics_ccd - MX area_detector driver that communicates with
the obsolete ccd EPICS module.
epics_dinput - MX digital_input driver that reads integer
values from EPICS PVs.
epics_doutput - MX digital_output driver that writes integer
values from EPICS PVs.
epics_mca - MX mca driver that communicates with multichannel
analyzers controlled by the EPICS mca module.
epics_mcs - MX mcs driver that communicates with multichannel
scalers controlled by the EPICS mca module.
epics_motor - MX motor driver that communicates with motors
controlled by the EPICS Motor record.
epics_scaler - MX scaler driver that communicates with a
single scaler channel of a device controlled by the
EPICS scaler module.
epics_scaler_mce - MX multichannel encoder driver that
reads out channels from EPICS Scaler channels that were
saved using synchronous groups.
epics_scaler_mcs - MX multichannel scaler driver that
reads out channels from EPICS Scaler channels that were
saved using synchronous groups.
epics_timer - MX timer driver that communicates with the
timer channel of a device controlled by the EPICS
epics_camac - MX CAMAC driver that communicates with a
CAMAC crate controller using the EPICS CAMAC module.
epics_gpib, epics_rs232 - MX gpib and rs232 drivers that
communicate with GPIB and RS-232 ports using an old
obsolete EPICS interface for such ports. They should be
replaced by drivers using Asyn support, but this has
not been done yet.
epics_vme - MX VME driver that reads and writes values
located at VME addresses managed by the EPICS VME module.
epics_char, epics_short, epics_long, epics_float, epics_double,
epics_string - These are MX variable drivers that read and
write EPICS PVs with matching variable types.
epics_timeout - Controls the EPICS PV connection timeout
MX drivers for devices only found at the Advanced Photon
aps_gap - MX motor driver that controls the undulator gap
for an Advanced Photon Source insertion device.
aps_quadem_amplifier - MX amplifier driver for the quadEM
aps_id_qscan - An MX quick scan driver that arranges for
an APS insertion device to be scanned in sync with a
aps_topup_time - Reports the time until the next Topup
MX drivers for EPICS PVs specific to the MBC beamline 4.2.2
at the Advanced Light Source:
mbc_gsc_trigger, mbc_noir, mbc_noir_trigger
MX drivers for EPICS controlled devices at the BioCAT
beamline (18-ID) at the Advanced Photon Source.
epics_pmac_biocat - A version of the MX motor driver for
PMAC-controlled motor axes at BioCAT. It has more
features than the older 'epics_pmac_tc' module.
MX drivers for the original EPICS databases for PMAC-
pmac_tc_motor - An MX motor driver for this module.
MX drivers for 2-dimensional image frame grabbers from
epix_xclib - MX driver for communicating with the XCLIB
epix_rs232 - MX driver for communication with serial devices
controlled by the XCLIB library.
epix_camera_link - MX driver for communication with Camera
Link devices controlled by the XCLIB library.
epix_xclib_dinput, epix_xclib_doutput - MX digital input
and digital output drivers for digital I/O controlled
by the XCLIB library.
epix_xclib_video_input - An MX video_input driver for frame
grabbers controlled by the EPIX XCLIB library.
MX module wrapper for communication with a CAMAC crate
controlled via an ESONE-compatible API library.
esone_camac - MX CAMAC interface driver for the CAMAC
MX module for controlling the USB-controlled Velleman K8055
data acquisition device.
k8055 - MX driver for USB communications to the K8055 device.
k8055_ainput, k8055_aoutput, k8055_dinput, k_8055_doutput
- MX analog and digital I/O drivers for the Velleman K8055.
k8055_scaler - MX scaler driver for a counter channel of the
k8055_timer - MX timer driver for the timer of the Velleman
MX module for communicating with the deprecated libusb-0.1
libusb_01 - MX USB driver for the libusb-0.1 API.
MX module for communicating with x86 I/O ports using the
'linux_portio' kernel device driver.
linux_portio - MX port I/O driver using the 'linux_portio'
kernel device driver.
MX module for controlling the Newport XPS-C and XPS-Q series
of motor controllers via the vendor-provided C++ code.
newport_xps - MX interface driver for the controller as
newport_xps_motor - MX motor driver for a single axis of
the motor controller.
MX module for controlling GPIB interfaces using either the
National Instruments IEEE-488 library or the open source
MX module for controlling National Instruments DAQmx devices.
ni_daqmx - MX driver for controlling the DAQmx library.
ni_daqmx_ainput, ni_daqmx_aoutput, ni_daqmx_dinput,
ni_daqmx_aoutput - MX analog and digital I/O drivers
for the DAQmx library.
ni_daqmx_thermocouple - An MX analog_input driver for
thermocouples read out via DAQmx.
MX module for controlling National Instruments ValueMotion
motor controllers via the vendor-provided Win32 libraries.
pcmotion32 - MX interface driver for the controller as
pcmotion32_motor - MX motor driver for a single axis of
MX module for EG&G Ortec devices controlled via the
Unified MCB Interface for 32 Bits library (A11-B32)
umcbi - MX interface driver for the UMCBI library.
trump_mca - MX mca driver for the Ortec Trump MCA.
MX module for the vendor-provide Win32 C++ libraries
for the Pleora iPORT camera interface.
pleora_iport - MX interface driver for the Pleora iPORT.
pleora_iport_vinput - MX video input driver for Pleora
iPORT camera interfaces.
pleora_iport_dinput, pleora_iport_doutput - MX digital I/O
drivers for the Pleora iPORT.
MX module for the Precision MicroControl MCAPI series of
pmc_mcapi - MX interface driver for communicating with MCAPI.
pmc_mcapi_motor - MX motor driver for a single axis controlled
by the MCAPI library.
pmc_mcapi_ainput, pmc_mcapi_aoutput, pmc_mcapi_dinput,
pmc_mcapi_doutput - MX analog and digital I/O drivers for
the MCAPI library.
MX module for controlling Delta Tau PowerPMAC motor
controllers. Please note that these drivers are designed
to be run directly on the controller itself using the
installed version of PowerPC Debian GNU/Linux and the
installed GCC compiler.
powerpmac - MX interface driver for communicating with the
powerpmac_motor - MX motor driver for a single motor axis.
powerpmac_ainput, powerpmac_aoutput, powerpmac_dinput,
powerpmac_doutput - MX analog and digital I/O drivers
for the PowerPMAC.
powerpmac_long, powerpmac_ulong, powerpmac_double - MX
variable drivers for the matching internal variables of
MX module for calling MP-based Python scripts from a C/C++
based user program. Typically this is used by 'mxmotor'.
python - An MX extension (not a driver) that controls
communication with Python 2.x.
Warning: Creating and modifying MX scans is not yet fully
supported by this extension module.
MX module for the Radicon Helios 25x20 and 10x10 CMOS
area detectors. These were test devices for RDI that
were never made into a product.
radicon_helios - MX area_detector driver for the detector.
radicon_helios_trigger - An MX pulse_generator driver for
MX module for the Radicon Taurus-based CMOS_8M series of
area detectors from Research Detectors Inc. Currently in
use at the ALS 4.2.2 MBC crystallography beamline.
radicon_taurus - MX area detector driver for the detector.
radicon_taurus_rs232 - MX interface driver for communicating
the detector FPGA via an ASCII protocol.
MX module for custom additions to the ALS 4.2.2 detector
interface for compatibility with that beamline's existing
rdi_mbc_string, rdi_mbc_filename, rdi_mbc_datafile_prefix,
rdi_mbc_pathname_builder, rdi_mbc_log, rdi_mbc_save_frame
MX module for Teledyne DALSA's Sapera LT interface library
for controlling DALSA cameras and frame grabbers. Please
note that DALSA cameras and frame grabbers have similar,
but not identical, APIs, so it is necessary to have two
separate video input drivers for them.
sapera_lt - MX interface driver for communicating with the
Sapera LT libraries.
sapera_lt_frame_grabber - MX video_input driver for DALSA
sapera_lt_camera - MX video_input driver for DALSA cameras.
MX module for controlling VME crates via the Struck 1100/3100
set of VME controller cards.
sis3100 - MX VME driver for the Struck interface.
Site-specific drivers for a Parker Compumotor controller
used at the BioCAT (18-ID) beamline of the Advanced Photon
biocat_6k_toast - This MX operation driver uses an X-Y
translation stage to "toast" samples in front of an
biocat_6k_joystick - This MX special variable driver
allows the joystick input of the X-Y translation
stage to be controlled from an MX-based GUI.
MX module for the vendor-provided Win32 libraries for the
Aerotech Unidex 500 motor controller.
u500 - MX interface driver for the controller as a whole.
u500_rs232 - MX rs232 driver for sending command strings
to the driver.
u500_motor - MX motor driver for a single axis.
u500_status - MX digital_input driver for reading status
values from the controller.
u500_variable - MX variable driver for U500 V variables.
MX module for the Linux-only Video4Linux version 2 video
v4l2_input - MX video_input driver for the Video4Linux 2
MX module for the NI-VISA VXI/VME controller via the
vxi_memacc - MX VME driver for the MEMACC resource.
MX module for multichannel analyzers made by XIA that
are controlled via the Handel library.
handel - MX interface driver for the Handel API.
handel_mca - MX mca driver for a single MCA in a multi-MCA
handel_sum - MX driver that computes weighted sums of XIA
handel_timer - MX timer driver to control the timing of
Handel controlled MCAs.
MX module for the DALSA Xineos GigE series of detectors.
xineos_gige - MX area detector driver for this detector.
There are several modules that were written, but never fully
tested for various different reasons. These modules have been
kept in the source code tree, but need more work to be usable
by end users: avt_pvapi, avt_vimba, bnc725, edt, fastcam_pcclib,
labjack_ux, libtiff, nuvant_ezware2
=========================== Changelog for MP 2.0.0 ===========================
Version 2.0.0 (03/11/16):
This version of Mp does not yet support Python 3.x.
The 'linux' build target now automatically figures out which
version of Python is in use, so that this information can be
used in the Mp makefiles. In most cases, this means that it
should not be necessary to modify 'mp/libMp/Makehead.linux'.
The 'win32' build target now automatically figures out which
version of Python is installed by reading this from the Windows
registry using the 'mx_config' program from MX. In most cases,
this means that it should not be necessary to modify the
Added MpNum.ImageFrame class. This class allows one to exchange
image data with NumPy arrays and is more efficient at processing
the binary image data.
Added support for Mp being invoked from the MX 'python' extension
module. If Mp is running standalone, it creates it own MX record
list. If Mp has been loaded by a C executable that already has
its own internal MX database, then Mp attaches to that database
rather than creating its own in-memory database.
Mp now stores C-based MX database and callback pointers in
PyCapsule objects (or PyCObject on older Pythons).
A number of small Mp changes to match changes and new features in MX.
More information about the Mx-mailing-list