# Fsc2

fsc2 is a program running under 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:
* It should be easy for the user to set up a new experiment without having to change the program itself.
* Devices should be exchangeable and support for new devices should not necessitate any changes of the basic program.
* Users doing just standard experiments should only need to interact with a simple graphical user interface.
This flexibility was achieved by making the program an interpreter for a rather easy to learn but powerful enough scripting language called Experiment Description Language (EDL) and employing a strictly modular approach to the handling of devices. This allows users 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 immediately also by users not acquainted at all with the EDL language.

## Major features

* 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 of 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.
* 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, the GPIB bus, LAN, USB, the 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.
* fsc2 is well documented; the documentation with more than 350 pages in HTML, info, PostScript 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, 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 General Public License (GPL), 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)

## Sources

As of June 2, 2009, this article is derived in whole or in part from http://users.physik.fu-berlin.de/~jtt/. The copyright holder has licensed the content in a manner that permits reuse under CC BY-SA 3.0 and GFDL. All relevant terms must be followed. The original text was at "fsc2"