DIPSO has access to a suite of subroutines which are designed to fit a variety of line profiles to observed data. The commands really need a bit more explanation than can readily be put into the alphabetical reference list which follows; so here’s a bit more explanation...
The primary purpose of the ELF routines is to separate blends by fitting multiple profiles.
Gaussian profiles are the most commonly used, but other analytic forms are possible, as are
‘numerical’ profiles. Facilities are provided for constraining line centre positions, widths, and
relative fluxes, so that known atomic data (such as relative wavelengths or intensities within
multiplets) can be utilised. The option of relative flux constraint is particularly useful when
analysing optically thin emission lines (hence Emission Line Fitting), but the package is entirely
happy with absorption lines (which it treats as emission lines with negative fluxes), or
any other form of data that can be reasonably approximated with the available profile
forms.
Fits are made to the spectrum data stored in the DIPSO ‘current’ arrays. The continuum level may be
set to zero by manipulations within DIPSO, or a polynomial fit to the continuum can be made
simultaneously with the profile fitting. (The former option is strongly recommended.) Specification of
constraints and starting values for the fit parameters is done in a command language (invoked by the
DIPSO command ELFINP) which is described below. After optimisation of parameters (DIPSO
command ELFOPT), the full specification of the fit and the results may be stored. The resulting fit, in
spectrum form, can be pushed on the DIPSO stack (ELFPUSH).
The complete set of ELF commands are described in detail in appendixA. They are:
As you can see, they are all of the form ELF..., so that they can easily be found in the
documentation.
The ELF package takes a COPY of the DIPSO ‘current’ spectrum. The maximum space
available is 1000 datum points. This number is deliberately rather smaller than the space
available in DIPSO itself, since fitting to large numbers of datum points is prohibitively time
consuming.
Fit data are maintained in three storage areas:
The stack of profile types has space for up to ten entries. The first five of these are reserved for analytically specified profiles, and the last five for numerical profiles. Profile definition is as follows:
Although the command descriptions given later describe functionality in detail, it is probably worth just summarising how to do a simple Gaussian fit, for illustration. The steps would typically be:
POP the data of interest into the current arrays. Use (e.g.) RXR to restrict the number of data
points to the minimum consistent with adequately defining the line(s) of interest and a
small amount of continuum.
PF, or
CDRAW, for example, together with ASUB). If you really must incorporate a background
polynomial in the fit, keep the degree as low as possible (e.g. zero) to avoid indeterminacy.
ELFINP to invoke ELFs special command language, and input your first guesses at
the values of the parameters to be optimised. Make life easier for yourself by keeping the
number of non-linear parameters (line centre positions and widths) as small as possible,
and try to make your guesses good ones. Type QELF to leave the command language
processor.
ELFOPT to start the ELF Fit Coefficient OPTimisation. If you have many free
parameters, and the machine is being heavily used, go for a cup of tea, after you’ve
checked the first iteration of the optimisation to make sure everything is as you expect.
ELFPUSH.
You can also save the fit coefficients on the separate fit coefficient stack, for later use or
reference, with ELFPUSHC.
A serious program crash while optimising, such as divide by zero or overflow, may occur occasionally. Such problems are usually caused by overspecified fits, or starting values that are grossly in error.