[Mx-mailing-list] MX 2.0.0 is available

Bill Lavender 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.

William Lavender
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.

            The command

                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.numbered_breakpoint_status and
                    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.

                Available class:
                    operation_class - Includes the 'network_operation',
                        'toast', 'rdi_mbc_log' (rdi_mbc.mxo), and
                        'biocat_6k_toast' (site_biocat_toast.mxo).

            special - This driver superclass provides a place to store driver
                classes that do not really fit anywhere else.

                Available classes:
                    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
                        original driver.

                        At present, the only existing driver is the
                        'rdi_xineos_gige' driver from the RDI-proprietary
                        rdi_xineos_gige.mxo module.

        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
                digital logic.

            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
                are changed.

            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
                open() time.

            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
                real experiments.

            synaccess_netbooter, synaccess_netbooter_ainput,
              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.

        Renamed Drivers:
            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
                    scaler module.

                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
                    from MX.

                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
                    EPICS module.

                aps_id_qscan - An MX quick scan driver that arranges for
                    an APS insertion device to be scanned in sync with a
                    beamline monochromator.

                aps_topup_interlock -
                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-
                controlled motors.

                pmac_tc_motor - An MX motor driver for this module.

                MX drivers for 2-dimensional image frame grabbers from
                EPIX, Inc.

                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
                    crate controller.

                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
                    Velleman K8055.
                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
                    a whole.
                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
                Linux-GPIB library.

                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
                    a whole.
                pcmotion32_motor - MX motor driver for a single axis of
                    the controller.

                MX module for EG&G Ortec devices controlled via the
                Unified MCB Interface for 32 Bits library (A11-B32)
                under Windows.

                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
                motor controllers.

                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 controller.
                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
                    the PowerPMAC

                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
                    the detector.

                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
                control software.

                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
                    frame grabbers.
                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
                    X-ray beam.
                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
                capture API.

                v4l2_input - MX video_input driver for the Video4Linux 2

                MX module for the NI-VISA VXI/VME controller via the
                MEMACC resource.

                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 values.
                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.

        Unfinished modules:

            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

        Modules deprecated:
            dalsa_gev, nuvant_ezstat

        Drivers deleted:

=========================== 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
	'mp/libMp/Makehead.win32' file.

        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 mailing list