From lavender at agni.phys.iit.edu Tue Mar 15 12:11:06 2016 From: lavender at agni.phys.iit.edu (Bill Lavender) Date: Tue, 15 Mar 2016 12:11:06 -0500 Subject: [Mx-mailing-list] MX 2.0.0 is available Message-ID: <20160315171105.GA19989@agni.phys.iit.edu> 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 http://mx.iit.edu/source.html More information about MX is available from the MX web site at http://mx.iit.edu/ 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 +1-510-612-4747 =========================== 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 'exposure'. 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' (site_biocat_toast.mxo). 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 voltages. 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. aviex_pccd.mxo: 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. driverlinx_portio.mxo: 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. epics.mxo: 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 subtraction. 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 module. 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. epics_aps.mxo: MX drivers for devices only found at the Advanced Photon Source. 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 injection. epics_mbc.mxo: 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 epics_pmac_biocat.mxo: 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. epics_pmac_tc.mxo: MX drivers for the original EPICS databases for PMAC- controlled motors. pmac_tc_motor - An MX motor driver for this module. epix_xclib.mxo: MX drivers for 2-dimensional image frame grabbers from EPIX, Inc. epix_xclib - MX driver for communicating with the XCLIB library. 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. esone_camac.mxo: 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. k8055.mxo: 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 K8055. libusb_01.mxo: MX module for communicating with the deprecated libusb-0.1 API. libusb_01 - MX USB driver for the libusb-0.1 API. linux_portio.mxo: 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. newport_xps.mxo: 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. ni488.mxo: MX module for controlling GPIB interfaces using either the National Instruments IEEE-488 library or the open source Linux-GPIB library. ni_daqmx.mxo: 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. ni_valuemotion.mxo: 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. ortec_umcbi.mxo: 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. pleora_iport.mxo: 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. pmc_mcapi.mxo: 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. powerpmac.mxo: 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 python.mxo: 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. radicon_helios.mxo: 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. radicon_taurus.mxo: 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. rdi_mbc.mxo: 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 sapera_lt.mxo: 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. sis3100.mxo: 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_biocat_toast.mxo: Site-specific drivers for a Parker Compumotor controller used at the BioCAT (18-ID) beamline of the Advanced Photon Source. 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. u500.mxo: 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. v4l2_input.mxo: MX module for the Linux-only Video4Linux version 2 video capture API. v4l2_input - MX video_input driver for the Video4Linux 2 API. vxi_memacc.mxo: MX module for the NI-VISA VXI/VME controller via the MEMACC resource. vxi_memacc - MX VME driver for the MEMACC resource. xia_handel.mxo: 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 module. 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. xineos_gige.mxo: 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: brandeis_biocat =========================== 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.