Date: 30 April 2006 ARCS - Software for the ARCS Instrument and beyond ================================================== This is the official release announcement for arcs-beta, the initial release of the ARCS Instrument software [1]. A R C S A wide Angular-Range Chopper Spectrometer at the SNS Version 0.3 patchlevel 0 (beta) last modified Sun Apr 30 23:45:01 PST 2006 The ARCS instrument is designed to measure excitations in materials and condensed matter having energies from a few meV to several hundred meV, with an efficiency better than any existing high-energy chopper spectrometer. The software included in this release is targeted at supporting the data reduction, simulation, analysis, and visualization needs of users of the ARCS instrument. The ARCS software project is an open source effort, and the software is released primarily under the BSD license with some components under the GPL license. This beta release of the ARCS software is intended primarily for internal evalulation by participants in the ARCS and DANSE projects, and by SNS personnel. Others are welcome to experiment with it. We welcome your feedback, but we are unable to provide systematic support. All ARCS software runs under the pyre [2] framework version 0.8, which is included in the beta release. Project Resources ================= ARCS Instrument homepage * http://www.cacr.caltech.edu/projects/ARCS ARCS Software homepage * http://www.cacr.caltech.edu/projects/ARCS/Software.html ARCS beta release pages on the DANSE wiki * http://wiki.cacr.caltech.edu/danse/index.php/ARCS_beta_windows_binary_installer-allinone Distribution ============ By the time you recieve this, copies of arcs-beta.tar.gz should be available at the official ARCS repository, and soon afterward on the ARCS webpage. Binary versions for various non-Unix platforms will be made available in the same places. Please allow a couple of days for these distributions to appear. Documentation for the ARCS software is currently being collected and tested, and thus will also be updated within the official ARCS release in the coming days. Package Overview ================ distutils_adpt: Distutils [3] was extended to more easily generate distributions for packages that follow Michael Aivazis' template package structure. Some improvements include recursive inclusion of python subdirectories, the option to use dynamically linked libraries, and the ability to find and modify PATH variables (from DANSE's grid services light [4] package). journal: journal [5] allows component and core programmers to communicate information to subsequent users on an unlimited number of channels that can be switched on at will, with severities including debug, error, info, warning, and firewall. Journal is available in both C++ and Python [6], with C++ journals fully integrated with their Python counterparts. Journal devices are abstracted, making them adaptable to environments such as massively parallel platforms or geographically dispersed distributed computing. pyre: Pyre is the software framework for high performance computing. Written in Python, pyre is an extensible, object-oriented framework for specifying and staging complex, multi-physics simulations. It includes support for remote monitoring and visualization. With pyre, you don't need to be fluent in FORTRAN or C to harness the power of massively parallel computational resources. Pyre, which has the ability to utilize code written in other languages, provides a level of transparency that allows scientists to focus on their research rather than being distracted by computational details. However, while pyre will enable the average user, it was also designed not to hinder expert users, offering powerful, flexible development features. ARCSTest: ARCSTest is a lightweight test framework that unifies the reporting of test objectives and results for C++ and Python code. It also provides a few functions for comparing C++ std::vectors and Python lists of floating point numbers to within a user-specified tolerance. array_kluge: Dynamically allocate C arrrays of numbers and maintain them correctly. Limited array to and from list conversions are offered. array_kluge has been largely replaced by stdVector. stdVector: StdVector allows Python programmers to create C++ standard vector objects in a variety of numerical types. Limited interaction with those vectors is supported through methods like size, assign, begin, end, plusEquals, average, etc. Through the asNumarray() method, StdVectors may also be manipulated using the Numarray [7] multidimensional indexing interface, and passed to functions that expect a numarray object, without potentially costly copying. Through the asList method, a StdVector may be converted to a Python list. Thus, StdVector objects are compatible with a wide variety of Python, C, and C++ interfaces. hdf5_cpp: Recent releases of NCSA's C++ interface have not supported building shared objects. For those who do not have access to a properly prepared HDF5 distribution, this package provides a limited remedy by distributing the NCSA HDF5 C++ interface [8], version 1.6.4, along with Caltech build system or Python distutils instructions to build as a shared object. It requires the user to have the NCSA HDF5 version 1.6.4 of the C library already built. hdf5fs: hdf5fs [9] provides Python bindings to part of the HDF5 C++ library. It offers the user a UNIX filesystem abstraction, implementing function like 'open', 'stat', etc. Written primarily by Maciek Brodowicz of CACR, it has since been modified by Tim Kelley. This is the primary ARCS interface to HDF5 files. nx5: Our primary file format is HDF5, structured according to NeXus [10]. nx5 is a layer above HDF5 (via hdf5fs, though one could use the nexus API) that represents the structure of files and the corresponding semantic content. histogram: The histogram package supplies classes that combine arrays (storage) with attributes to model various complex ideas about neutron scattering datasets. measurement: combines nx5 and histogram to provide a convenient layer for applications programmers through functions such as "getPixelData", "getMonitorData", etc. instrument: The instrument package consists of classes to represent neutron scattering instrument information. An instrument is represented by an instance of the Instrument class, which is the root node of a graph of objects (Elements). The coordinates of the elements of an instrument are maintained by a separate class, Geometer. This creates a generic way to represent and serve information about instrument configuration & properties and sample configuration & properties. Factories construct core representations from both hard-coded sources (such as ARCSBootstrap) and from nx5 file graphs (NX5ToARCS family); additional factories render instrument graphs to file graphs (ARCSToNX5 family) or to visual models (VTKInstrumentViewer). reduction: The reduction subpackage contains the classes and components that are responsible for actually reducing data from a time-of-flight direct geometry spectrometer. Reduction transforms data from I(TOF, {detectorLabels}) to something approximating (or resembling) S(|Q|, E). These classes are mostly built up out of pieces from other ARCS subpackages. bvk: bvk provides basic Born-von Karman (force constant) models of phonons from perfect crystals. While nothing in the code precludes the use of a completely arbitrary crystal structure, presently the relation between bonds and force constants must be specified by the user by overriding the ForceConstantTensor class. Present outputs include density of states histograms; plans are in place to include neutron scattering cross sections. The code is structured to allow arbitrary iteration of {Q} space; random sampling from a user-specified cube is implemented. sam: Sam [11] provides python bindings to Matlab [12], and is written and maintained by Patrick Hung. Sam does NOT provide a pyre component; however, it both a standalone package and required by 'graphics.Matlab'. pyIDL: pyIDL provides python bindings to RSI's IDL [13], and is based on Andrew McMurray's python-IDL [14]. pyIDL provides an IDL session emulator where IDL commmands can be used directly to manipulate data. pyIDL is also NOT a pyre component; however, it is both a standalone package and required by 'graphics.IDL'. graphics: This package is a collection of bindings to several graphics and visualization enviroments. Packages currently include: Matlab, IDL, Matplotlib [15], gnuplot [16], and grace [17]. The gnuplot component uses gnuplot-py [18], while the grace component uses both Michael Haggerty's grace_np [19] and Nathaniel Gray's gracePlot [20]. cctbx_adpt: This package extends the cctbx [21] python bindings to the pyre framework. simulation: The simulation package provides a framework allowing flexible integration of virtual neutron instruments for simulation. A base class for constructing a simulation application can be conveniently subclassed for a neutron instrument. Currently most neutron components that can be used in such a simulation application are provided by package "mcstas". This simulation package, however, has a collection of generic components, which provides a scheme for flexible and extensible simulation of samples and detectors. mcstas: The mcstas package provides Python bindings to McStas [22]. Bindings are available for building neutron scattering instrument components and launching simulations of experiments. In McStas, an instrument is constructed from an ordered list of components described by a dedicated meta-language. Neutrons go through each component one by one. The state of a neutron is modified (scattered or absorbed) by the C-code of each component. The statistical weight of the neutron is adjusted if, for example, a specific target solid angle for scattering is provided, in order to reduce the simulation time. The code is generated by McStas, which acts as a compiler that compiles the meta language in an instrument description file to one big C file. pyIO: PyIO is a 'generic' file reader/writer package for N-column text or python nested list formats. PyIO reads some plain text dialects, can read/write data asRows or asColumns, and can extract simple headers from text files (if matches dialect format) Package Versions and Depedencies ================================ The following list of package version numbers and dependencies is current at official release time. Any changes will be reflected in the main README file for the ARCS software. PACKAGE VERSION DEPENDS -------------- --------- ----------------------------------------- distutils_adpt beta distutils journal pythia0.8 pyre pythia0.8 ARCSTest beta array_kluge beta stdVector beta Numarray, journal hdf5_cpp 1.6.4 NCSA HDF5 1.6.4 hdf5fs beta NCSA HDF5, journal, array_kluge nx5 beta pyre, journal, hdf5fs, array_kluge, stdVector histogram beta pyre, journal, ARCSTest, stdVector measurement beta pyre, journal, ARCSTest, nx5, instrument, histogram instrument beta pyre, journal, ARCSTest, nx5, stdVector reduction beta pyre, journal, ARCSTest, stdVector, scipy, nx5, measurement, histogram, instrument bvk beta journal, lapack, blas sam 1.0 Matlab, Numeric pyIDL 0.1.1 RSI IDL, Numarray, X11 (linux) graphics beta {see below...} pyIO beta pyre, Numeric cctbx_adpt beta pyre, cctbx, boost, Numeric simulation beta pyre, journal, Numeric, nx5, cctbx_adpt, stdVector mcstas beta Riso McStas, pyre, journal, Numeric, distutils_adpt, cctbx_adpt, simulation SUBPACKAGE DEPENDS -------------- ----------------------------------------- graphics.grace pyre, Numeric, grace graphics.gnuplot pyre, Numeric, gnuplot-py graphics.Matplotlib pyre, Matplotlib graphics.Matlab pyre, sam, Numeric graphics.IDL pyre, pyIDL Footnotes ========= [1] ARCS software development is an activity of the ARCS spectrometer project, ongoing since 2001 under DOE Award DE-FG02-01ER45950. Development is housed at Caltech's Center for Advanced Computing Research and at the Keck Laboratory. [2] Pyre development, ongoing since 1998, has been funded by the Department of Energy's Advanced Simulation and Computing program and the National Science Foundation's Information Technology Research (ITR) program (grant no. 0205653). Development is housed at Caltech's Center for Advanced Computing Research. [3] distutils... [4] DANSE; grid services light... [5] Journal is part of the pythia distribution, of which pyre is the central package. [6] Python... [7] Numarray... [8] NCSA hdf5... [9] hdf5fs... [10] NeXus... [11] sam... [12] Matlab... [13] python-IDL... [14] IDL... [15] Matplotlib... [16] gnuplot... [17] grace... [18] gnuplot-py... [19] grace_np... [20] gracePlot... [21] cctbx... [22] McStas is copyright (C) Risø National Laboratory. All rights reserved. McStas is distibuted using the GNU General Public License, see conditions of use are in the file COPYING, which is also found in the McStas distribution.