xylib is a portable library for reading files that contain x-y data from powder diffraction, spectroscopy and other experimental methods.
It comes with two programs that can convert supported formats to plain text: command-line xyconv and graphical xyconvert.
Supported formats:
- plain text, delimiter-separated values (e.g. CSV)
- Crystallographic Information File for Powder Diffraction (pdCIF)
- Siemens/Bruker UXD
- Siemens/Bruker RAW ver. 1/2/3/4
- Philips UDF
- Philips PC-APD RD raw scan V3/V5
- PANalytical XRDML
- Rigaku DAT
- Sietronics Sieray CPI
- DBWS/DMPLOT data file
- Canberra CNF (from Genie-2000 software; aka CAM format)
- Canberra AccuSpec MCA
- XFIT/Koalariet XDD
- RIET7/LHPM/CSRIET/ILL_D1A5/PSI_DMC DAT
- Vamas ISO14976 (only experiment modes: SEM or MAPSV or MAPSVDP are supported; only REGULAR scan_mode is supported)
- Princeton Instruments WinSpec SPE (only 1-D data is supported)
- χPLOT CHI
- Ron Unwin's Spectra XPS format (VGX-900 compatible)
- Freiberg Instruments XSYG (from lexsyg)
- Bruker SPC/PAR
Examples of supported files are collected in sample-urls.
The library is written in C++11 and has C bindings.
R bindings: rxylib (CRAN) by Sebastian Kreutzer.
Python bindings: pip-installable, generated by SWIG, details below.
Other languages (suggestions): you may access C API through FFI (here is an example), or extend xylib.i to wrap the C++ interface using SWIG.
The API is documented in the xylib/xylib.h file. Adding new formats -- in README.dev.
Licence: LGPL 2+
xylib is used by:
Converts a file from one of the supported formats to plain text:
xyconv myfile.bin plain.txt
It has a few options, see xyconv -h
for details.
The GUI is designed for quick converting of many files at once.
Binary packages:
- Windows and OS X bundles from the latest release on GitHub
- Linux: fresh RPMs and DEBs from OBS
Source:
- tarball
- GitHub repository
To compile the source code you need:
- C++ compiler (all popular ones are tested: GCC, Clang, MSVC, icc)
- Boost libraries >= 1.46.1 (only headers).
- optionally, zlib and bzlib libraries (for reading compressed files)
- optionally, wxWidgets 3.0 (for xyconvert - GUI converter)
Two build systems are provided: either use CMake or, on Unix,
./configure && make
. To skip building the GUI use option
-D GUI=OFF
for CMake or --without-gui
for configure.
If you are using git, autoreconf -i
is needed before ./configure
.
Python bindings require SWIG, Boost headers and a C++ compiler. It may be enough to just type:
pip install xylib-py --user
If the Boost headers cannot be found, run pip with options
--global-option=build_ext --global-option=-I/path/to/boost_1_60_0
.
See the xyconv.py
file for usage examples.
- Marcin Wojdyr wojdyr@gmail.com (maintainer)
- Peng ZHANG zhangpengcas@gmail.com
Feel free to send e-mail to the authors, or to the fityk-dev mailing list.
- Google - the library was started as Google Summer of Code 2007 project by Peng ZHANG, mentored by Marcin Wojdyr from Fityk organization.
- Michael Richardson provided VAMAS specification and sample files.
- David Hovis provided a WinSpec file format specification and sample files.
- Pablo Bianucci provided his code for reading WinSpec format and sample files.
- Martijn Fransen provided very useful specifications of Philips formats.
- Vincent Favre-Nicolin provided PSI_DMC and ILL_D1A5 samples; reading his ObjCryst library was also helpful.
- Janos Vegh sent us his VAMAS reading routines (long time ago, before this project started).
- Andreas Breslau added Bruker V3 (RAW1.01) support.
- Bjørn Tore Lønstad provided Bruker RAW V3 format specification and samples.
- Hector Zhao patched VAMAS code.
- Jim Fitzgerald (author of FitzPeaks) provided code for reading Canberra (Genie) CNF files.
- Matthias Richter added Ron Unwin's Spectra XPS format and SpecsLab2 xy format.
- Johannes Friedrich added xsyg (lexsyg) format.
- Sebastian Kreutzer added Bruker SPC binary format.
- 1.6 (2020-09-08)
- added XSYG format from Freiberg Instruments' lexsyg (Johannes Friedrich)
- added Bruker SPC binary format (Sebastian Kreutzer)
- added PANalytical XRDML
- 1.5 (2016-12-17)
- improved CNF reading (thanks to Jim and Miha)
- changes to reading SpecsLab2 xy
- support text files with lines terminated by CR only
- more robust reading of CSV files
- 1.4 (2015-03-31)
- included xyConvert (GUI converter)
- support filenames with non-ascii characters
- 1.3 (2014-01-24)
- bug fixes only
- 1.2 (2013-08-01)
- added SpecsLab2 xy format (Matthias Richter)
- 1.1 (2012-11-05)
- added XPS format from Ron Unwin's Spectra program (Matthias Richter)
- fixed bug in reading energy calibration from Canberra formats
- 1.0 (2012-07-25)
- added option
decimal-comma
for text format - fixed bug in CSV format
- added option
- 0.9 (2012-05-20)
- added CSV format, or more acurately: delimiter-separated values format.
Supports popular delimiters (
TAB ,;|:/
), quoting ("
) and escape character (\
). Non-numeric fields are read as NaNs. - added Canberra CNF format
- added CSV format, or more acurately: delimiter-separated values format.
Supports popular delimiters (
- 0.8 (2011-01-18)
- fixed a couple of bugs in pdCIF implementation
- 0.7 (2010-10-09)
- added χPLOT (CHIPLOT) format (extension .chi)
- fixed bug in reading VAMAS files with transmission data (Hector Zhao)
- 0.6 (2010-04-29)
- fixed reading of Bruker v3 files
- changes in API, added C API
- 0.5 (2010-01-04)
- added support for compressed files *.gz (requires zlib) and *.bz2 (bzlib)
- 0.4 (2009-06-11)
- added file caching (for details see
xylib/cache.h
) - changes to parsing text files in which numeric data is mixed with text
- added file caching (for details see
- 0.3 (2008-06-03)
- added Bruker binary RAW1.01 format
- fixed bug in reading one-column ascii files
- 0.2 (2008-03-09)
- initial public release