xylib

August 6, 2022 · View on GitHub

===== xylib

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

.. _CHI: http://www.esrf.eu/computing/scientific/FIT2D/FIT2D_REF/node115.html#SECTION0001851500000000000000

Examples of supported files are collected in sample-urls__.

__ https://raw.github.com/wojdyr/xylib/master/sample-urls

LIBRARY

The library is written in C++11 and has C bindings.

R bindings: rxylib (CRAN) <https://CRAN.R-project.org/package=rxylib>_ by Sebastian Kreutzer.

Python bindings: pip-installable <https://pypi.python.org/pypi/xylib-py/>_, 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.

__ https://github.com/wojdyr/xylib/blob/master/xylib_capi.py

The API is documented in the xylib/xylib.h__ file. Adding new formats -- in README.dev <https://raw.github.com/wojdyr/xylib/master/README.dev>_.

__ https://raw.github.com/wojdyr/xylib/master/xylib/xylib.h

Licence: LGPL 2+ <https://raw.githubusercontent.com/wojdyr/xylib/master/COPYING>_

xylib is used by:

  • fityk <http://fityk.nieto.pl>_
  • qpx-gamma <https://github.com/usnistgov/qpx-gamma>_
  • GammaSpy <https://github.com/wgurecky/GammaSpy>_
  • gamma <https://github.com/crp2a/gamma>_ through rxylib <https://github.com/R-Lum/rxylib>_
  • ...

xyconv

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.

xyConvert

.. image:: web/xyconvert-linux.png :width: 804px :height: 609px :scale: 75% :align: center :target: web/xyconvert-linux.png

The GUI is designed for quick converting of many files at once.

DOWNLOAD

Binary packages:

  • |ico-win| Windows and |ico-osx| OS X bundles from the latest release on GitHub__
  • |ico-tux| Linux: fresh RPMs and DEBs from OBS_

__ https://github.com/wojdyr/xylib/releases .. _from OBS: http://software.opensuse.org/download/package?project=home:wojdyr&package=xyconvert

.. |ico-win| image:: web/ico-win.png .. |ico-tux| image:: web/ico-tux.png .. |ico-osx| image:: web/ico-osx.png

Source:

  • tarball_
  • GitHub repository_ |ci-status|_ |appveyor-status|_

.. _tarball: https://github.com/wojdyr/xylib/releases/download/v1.6/xylib-1.6.tar.bz2 .. _repository: https://github.com/wojdyr/xylib .. _ci-status: https://github.com/wojdyr/xylib/actions .. |ci-status| image:: https://github.com/wojdyr/xylib/workflows/CI/badge.svg .. _appveyor-status: https://ci.appveyor.com/project/wojdyr/xylib .. |appveyor-status| image:: https://ci.appveyor.com/api/projects/status/9gotaqqhl8j9ovge?svg=true

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)

.. _Boost: http://www.boost.org/

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.

AUTHORS

CONTACT

Feel free to send e-mail to the authors, or to the fityk-dev mailing list <http://groups.google.com/group/fityk-dev>_.

CREDITS

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

.. _FitzPeaks: http://www.jimfitz.demon.co.uk/fitzpeak.htm

HISTORY

  • 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
  • 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
  • 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
  • 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

.. raw:: html