We do our data checking, reduction, and analysis using IDL, the Interactive Data Language. IDL is a proprietary software package and programming language tailored for rapid processing of image data such as one typically obtains in astronomical observing, with a full-featured programming language that includes object-oriented support. I have been using IDL since the bad old days of Version 2 in the early 1990s. The early (non-OO) version of the SSS data reduction routines described by
Hall et al. (1994)
"The Reduction of Fiber-Fed Echelle Spectrograph Data: Methods and an IDL-based Solution Procedure." PASP, 106, 697. [Description of our initial set of routines and algorithms for reducing SSS data.] was written using a long-dead version of the package, and these routines are no longer available. Our code is specifically tailored for use with the SSS, but we have also written some abstract objects intended to be more broadly applicable.
For vendor information about IDL, you should check out the site of the company that sells it, ITTVIS. Beyond that, your one must-have link is David Fanning's IDL site. You'll find most of what you need to know about IDL here. (David is also unusually fluent with the King's English, so his site is one of those Net rarities where you're not gagging on a rogue "it's" in every other sentence.)
Perhaps you have landed here after Googling "IDL" for a programming problem. If so, go to David's site; it's more likely to have what you want. What you'll find here is one example of an OO IDL system, by no means as elegant as the code written by the guys who know every nook and cranny of the language. It does one thing, and does it well enough for our research program.
I do not use IDL Object Graphics, and I do not use widgets. I use IDLDE on a Dell laptop and regular old plots.
OIL stands for Object IDL Library.
Beginning with IDL Version 5, the company formerly known as RSI introduced object-oriented constructs into the IDL programming language. We have incorporated the OO paradigm into our reduction system, enabling us to reduce any part of the SSS database we want with one big swoop. While many of our routines are specific to our project, many are more general, so our intent is to make them all available here. You are welcome to use and modify them in any way you want; they are public domain. If you're an IDL guru, you'll probably want to; I use more pokey FOR loops than one should.
The articles in this section document all the classes we have developed for use in the reduction and processing of SSS data. Some of these classes, particularly the high-level ones, are a bit of overkill for echelle data reduction per se; they were written to accommodate a few different outreach projects from several years ago. What they do offer is the ability to inherit those bits needed for the data reduction. The overall class structure is loosely modeled after the MFC (Microsoft Foundation Classes) developed for MS Visual C++. In any case, the articles include general descriptions of the software as well as detailed descriptions of every class in the hierarchy. If they're useful to you in some way, so much the better!
We have defined a number of high-level classes to handle system monitoring, file I/O, and generic image and FITS header handling. Some of these would qualify as abstract classes, though IDL does not explicitly define abstract classes. Most OIL classes inherit the class Root, which allows any object to accumulate a list of events and diagnostic messages for analysis and recordkeeping if such is desired.
SSS data are quite straightforward (as least as far as formatting is concerned), being 512x400 arrays of ints or floats with a one-unit (2,880 byte) FITS header. We have defined several classes that handle arbitrary images with or without headers, where an "image" can be raw data or a reduced 2D spectrum.
There is one object defined for each of the primary data reduction steps. Look here for an overview of the steps we use to reduce our data. As we work through the QC on the routines prior to uploading them, we'll make them as general as possible; over the years they have accumulated a number of code blocks specifically tailored to deal with pathologies in the SSS spectra.
We define a class SSS that encapsulates an instance of each reducer class, as well as providing a number of methods for analysis of the reduced data and production of the standard plots and data products. This has grown into a rather sprawling class, as it provides all of the standard data products and plots from our program. Look here for the documentation of the SSS class.
The OIL classes include a number of internal messages of varying levels of panic (simple messages, warnings, and fatal errors). Each message has an associated message code (a long int) that can be used to (1) identify it and (2) filter it out if the user doesn't want to log that kind of message. The full list of messages is gathered into a single table for reference.
Every class in the OIL library has a page with a complete description of all the class's data members and methods, along with usage examples. These pages are all formatted identically.
Class description. A summary of what the class does.
Version history. The version history of the public release of the class appears at the top of each page. The version history is also stored at the top of each class's define method in the IDL source code. The version histories will always be synchronized online between documentation and code. New versions will be uploaded as we install our new cameras and CCDs, so if you've downloaded any of the ZIP files, be sure to keep up with the version changes.
Data members. We list all the data members of the class, along with their types. (N.B.: IDL is dynamically typed, and the only thing that prevents chaos is the programmer's own discipline. We take care in the code to preserve types, and we therefore note the intended type explicitly with each data member.)
Method list. For ease of reference, we list all the class's methods in one place, with links to their detailed descriptions.
Method descriptions. Every class method gets its own paragraph, specifying its type (PRO or FUNC), keywords and arguments, return value if any, and a description of what it does.
Sample usage. This section gives, uh, examples of how the class is used.
Throughout the class descriptions, we provide extensive hyperlinks to let you navigate easily between related classes and methods.