Back to homepage

fsc2 logo

fsc2 is a program running under GNU/Linux for controlling spectrometers. Programs for remote control of spectrometers usually are home-written and often restricted to doing a certain set of experiments with only a fixed set of devices. In contrast, fsc2 is much more flexible because it was written with three main aims:

This flexibility is due to making the program an interpreter for a rather easy to learn but powerful enough scripting language called EDL (Experiment Description Language) and employing a strictly modular approach to the handling of devices. This allows to set up a new experiment or change an already existing one easily without requiring any detailed knowledge of the internals of fsc2 or how exactly devices are controlled by the computer. Everything required is to become acquainted with the EDL scripting language. Moreover, an already working script for an experiment can be swiftly converted to display a graphical user interface for entering the experimental parameters by adding just a few extra lines and converting it via a Perl script (included in the package), thus allowing it to be used also by users not acquainted with the EDL language at all.

fsc2 is in a mature ("production") state since several years (development already started back in 1998) and quite a number of research groups all over the world use it for their data acquisition requirements. During the last years the majority of changes of the program itself were additions of new features suggested by users, while most of the development time has been gone into writing modules for new devices.

main window   1D experiment window   2D experiment window
Screenshots: start window with (the start of) an EDL script, a 1D and a 2D EPR experiment (click to enlarge)


I'd recommend to obtain the sources of the program by using git. While it's a bit larger download than a tar-ball this has the advantage that you can easily upgrade to the newest version later. To get a copy of the git repository use the command

git clone

If git isn't available on your system please install it, every Linux distribution I know of has packages for it. You then update to the very newest version with a simple

git pull

run from within the directory created by 'git clone' whenever you feel like it.

The most recent commit to the git repository was on 2019-02-09 16:19 UTC.

If you insist here's also a tar-ball of the sources, based on the one of latest version in the git repository (the way things are currenty configured it gets rebuild within 30 minutes after the latest commit to the git repository):


If you contact me about troubles you might experience with the program it's useful to let me know which version you are using. If you're working with the git repository, just send me the first line of the output of

git log

when run in the reposiory directory. The tar-ball contains a file named VERSION.log and its first line contains the same information.

Note: Since May 2015 fsc2 requires a C99 compliant compiler - but that shouldn't pose any problems unless you try to install it on a truely ancient machine which hasn't been updated in the last 10 years or so;-).


The online documentation for (a moderately recent version of) the program can be found here. An up-to-date version (and also in PDF format) can be build from the sources.

Terms of use

Since fsc2 is open source there are no obligations attached except those imposed by the GPL (v3) license it is (in nearly all parts) distributed under. But I definitely would be delighted to hear from you if you use it and what for. And if you feel like citing it in a publication it was used for that won't make me unhappy - sending me an (electronic) copy of the paper would be great;-)

XForms Library

fsc2 requires a number of libraries, and one of them is the XForms GUI toolkit for X. The version you get with several Linux distributions isn't up-to-date (actually chances are that it's several years old) since development of XForms had stalled a bit for some time. I strongly recommend that you use the currently stable version, which you can download from here:

As one of the maintainers of XForms I always test that new versions work with fsc2. Unfortunately I am not able distribute binary packages of the library, so you will have to compile and install the library from source, but hopefully that isn't too difficult (see the INSTALL file in the top directory). Please contact me if you should encounter problems.


* The EDL language used to describe experiments is similar to other medium to high level languages, borrowing from e.g. MatLab, Fortran, C and Perl etc. It comes with a lot of functions for handling, displaying and saving data in completely user defined ways. Thus writing a description for a new experiment or adapting an already existing EDL script won't be difficult for anyone remotely acquainted with one of the above mentioned programming languages. The online documentation has a chapter with an introduction to writing EDL scripts.
* Devices are not "hard-coded" into fsc2. Instead, they are dealt with by modules that get loaded on demand (a single instruction in an EDL script). For each sort of devices a set of EDL functions exists to set up and control the device and e.g. fetch measured data. This allows to employ a different device with similar functionality by often just changing a single line in an EDL script.
* fsc2 allows other programs to send it EDL scripts for execution. Thus one may write scripts for standard experiments that in turn automatically create EDL scripts from user input, for example via a graphical user interface. fsc2 comes with a tool that automatically generates such scripts for a GUI from slightly modified EDL programs. Once such a script has been created, "normal" users don't have to know how to write or change EDL programs, thus retaining all the convenience of the traditional type of programs but without sacrificing any of fsc2's flexibility.
* fsc2 comes with a simple built-in web server (only running on user demand) that allows to remotely monitor the state of the experiment.
* Currently fsc2 can control devices that are either connected via the serial ports, GPIB, LAN, USB, RULBUS (Rijksuniversiteit Leiden BUS) or are realized as PCI or ISA cards (Linux drivers for these cards are supplied with the package as far as possible).
* Writing new device modules (or adapting existing ones for a new device) shouldn't be too difficult for anyone having some experience with writing programs in C. More than 70 modules for quite a range of devices are already part of the package and can also be used as a starting point for developing modules for new devices. The documentation has a whole chapter on how to write new modules.
* fsc2 is well-documented, the documentation with about 400 pages in HTML, info and PDF format is part of the package, covering all aspects of fsc2, i.e. the graphical interface, the EDL language, device functions and the writing of new device modules etc.
* fsc2 has been extensively tested and is currently used for controlling quite a number of EPR spectrometers as well as Optical Single Molecule and Raman spectrometers etc., using a broad range of different devices and experimental techniques.
* The complete sources for the program and all device modules (as well as several Linux device drivers) are available under the GNU Public License (GPLv3), so they can be adapted or extended to fit whatever requirements there are without any restrictions (except, obviously, that you're not allowed to just grab the code and use it in a proprietary, closed source product or distribute binary-only versions;-).

Supported devices

For a complete list of supported device see

Please note that some of the devices listed below typically are part of "complete" sprectrometers, e.g. the Bruker ESP 300 series EPR spectrometers. fsc2 can thus be used to replace the legacy software used for controlling those spectrometers and also allows to use further devices not supported by the legacy software.

* Digitizing oscilloscopes
* Pulse generators
* Lock-in amplifiers
* Magnet power supplies
* Magnetic field meters
* Microwave and RF synthesizers
* Frequency counters
* Temperature controllers
* Digital voltmeters etc.
* Box-car integrators
* Event counters
* DIO cards
* Data acquisition cards
* CCD cameras
* Monochromators
* Power/Energy Meters
* SourceMeters
* Goniometers
* Power supplies

fsc2 works with four different GPIB driver/library combinations, the Linux Lab Project driver and its successor, a driver supporting a huge range of different GPIB cards (strongly recommended), as well as the National Instruments driver (please note: currently only tested with the older versions of the drivers, the newer ones may still pose problems - if it doesn't work and you want to try an older versions write me an email, I still have a copy) and a driver for PCII and NI AT-GPIB/TNT (ISA) cards I wrote some years ago.


Due to my background fsc2 had originally been written with different types of EPR (Electron Paramagnetic Resonance) experiments in mind. On the other hand, fsc2's fundamental concepts should make it easy to use it also for a wide range of other types of spectrometers as has been demonstrated by using it for e.g. (optical) single molecule and Raman spectrometers.

See also

If you are interested but don't want a whole "system" for controlling your devices but single, stand-alone modules for each device (for C++, C and Python) have a look at my newly started Fsc3 project. At the moment it's in its infancy and only a single device is supported, but I hope to be able to convert at least some of the modules written for fsc2 to it in the near future.

Back to homepage

Last modified: August 20, 2015 Valid XHTML 1.0 Strict Valid CSS

© 2015 Jens Thoms Törring
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation as well as the Creative Commons Attribution/Share-Alike License 3.0.