

NAME · USAGE · DESCRIPTION · PARAMETERS · EXAMPLES · REFERENCES
SEE_ALSO
fitspec -- Fit a parametrized model spectrum to spectrophotometry data
fitspec input spectrum
This task will fit a model spectrum to an observed spectrum stored in
a spectrophotometric table. You specify an expression containing free
variables and initial values of these variables. The task then
searches for values of those variables which minimize the squared
difference between the model spectrum and the spectrum stored in the
table. When the task finds the optimized solution, it writes the
fitted values of the free variables back to the parameter file and
prints the expression with the fitted values substituted for the free
variables.
The name of the spectrophotometric table is given by the task
parameter input. The model spectrum is specified by task parameter
spectrum. If the model spectrum is too long to fit in the task
parameter (63 chracters max), the model spectrum can be placed in a
file. The task parameter should then be set to the file name preceded
by an "@". If the model spectrum is placed in a file, the expression
may be split over more than one line wherever a blank is a legal
character in the expression. The variables in the model spectrum are
indicated by a dollar sign followed by a digit. There are nine legal
variables, $1 through $9. The initial values of these variables are
given by setting task parameters vone through vnine. All variables not
used should be set to INDEF. The model spectrum expression
should not skip variables, for example, if the model contains three
free variables, they should be named $1, $2, and $3, not $1, $2, and
$4. Upon exiting the task these vone through vnine will contain the
final fitted values of the free variables.
The task can use two different methods to compute the least squares
fit: the Levenberg Marquardt method and the downhill simplex method,
sometimes called the amoeba method. The method used is selected by the
task parameter slow. The downhill simplex method is used if slow is
set to yes. The downhill simplex method is slow because it requires
more iterations to converge to a solution. In compensation, however,
it converges to the solution over a larger range of initial values
than the Levenberg Marquardt method. However, the initial values of
the free variables should always be as accurate as possible as neither
method will converge to a solution from arbitrarily chosen initial
values of the free variables. If the inital values are outside the
range of convergence, the task may either compute a false solution or
wander outside the range where the model expession is defined and
terminate with an error.
- input [file name]
- The name of a spectrophotometry file. The spectrophotometric table can
have the columns WAVELENGTH, FLUX, STATERROR, and FWHM. The WAVELENGTH
and FLUX columns contain the wavelength and values of flux at that
wavelength, respectively. The STATERROR and FWHM columns contain the
respective errors of the FLUX and WAVELENGTH columns. If the
spectrophotometry file is an ascii file, the first through fourth
columns are the wavelength, flux, staterror, and fwhm and the third
and fourth columns are optional. The contents of the STATERROR column
are used in weighting the data points if they are present and if
equal is set to no. The FWHM column is not used by this task.
- spectrum [string]
- The model spectrum expression to be fitted to the spectrophotometric
data. The free variables in the expression are indicated by a dollar
sign followed by a digit. The model spectrum can be placed in a file,
whose name is passed to this parameter, preceded by a "@" character,
command. Newlines may be placed in the expression wherever blanks are
legal in a synphot expression. The form of a synphot expression is
discussed in detail in the help file for the calcspec task.
- (output = "none") [string]
- The name of the output table containing the fitted spectrum. If
output is set to "none" or left blank, no table will be produced.
The output table contains the model spectrum expression evaluated with
the fitted values of the free variables. The flux units are the same
as the input spectrophotmetry file. The header of the table contains
the names of the graph and component lookup tables and the model
expression.
- (ftol = 1.0e-5) [real, min = 0.0, max = INDEF]
- The fractional tolerance convergence criterion. Iteration of the least
square fit ceases when the scaled distance between two successive
estimates of the free variables is less than this value. Each
component of the scaled distance is scaled by dividing the difference
between the two estimates by half their sum. Please note that the fit
soulution may not converge to an arbitrarily small value, instead it
may cycle between several values, so setting ftol to too small a
value may result in failure of the solution to converge.
- (maxiter = 500) [int, min = 1, max = INDEF]
- The maximum number of iterations to be performed. If convergence is
not achieved in this number of iterations, then the task stops
execution with a warning message to that effect.
- (nprint = 0) [int, min = 0, max = INDEF]
- The number of iterations between diagnostic prints. If nprint is set
to zero, there will be no diagnostic prints. Diagnostic prints are
sent to STDERR and contain the number of the iteration, the chi
squared value, and the model spectrum with the trial values of the
free variables.
- (slow = no) [bool]
- Select which method to use to compute the least squares fit. If slow
is set to no, it uses the Levenberg Marquardt method and if it is set to
yes, it uses the downhill simplex method. The Levenberg Marquardt
method computes an approximation to the matrix of second derivatives
of the model in order to extrapolate to the point where the chi
squared is a minimum. The downhill simplex method constructs a polygon
of trial points and replaces the point with the highest chi squared
with a new point with a lower chi squared, chosen by one of a set of
strategies. The Levenberg Marquardt method usually converges on the
solution in a fewer number of iterations, but the downhill simplex
method will converge to the solution from a wider range of initial
estimates of the free variables.
- (equal = no) [bool]
- Select whether to weight the data points when computing the chi
squared. If equal is set to no and the input table contains the
staterror column, data points will be weighted according to their
errors. Points with indefinite, negative, or zero errors are not used
in the fit. If equal is set to yes or the staterror column is zero,
the data points will not be weighted.
- (vone = INDEF) [real]
- The value of the first free variable. Before running this task, this
parameter should contain the initial estimate of the first free
variable and on exit it will contain the final fitted value. If this
variable is not in the equation, it should be set to INDEF.
- (vtwo = INDEF) [real]
- The value of the second free variable.
- (vthree = INDEF) [real]
- The value of the third free variable.
- (vfour = INDEF) [real]
- The value of the fourth free variable.
- (vfive = INDEF) [real]
- The value of the fifth free variable.
- (vsix = INDEF) [real]
- The value of the sixth free variable.
- (vseven = INDEF) [real]
- The value of the seventh free variable.
- (veight = INDEF) [real]
- The value of the eighth free variable.
- (vnine = INDEF) [real]
- The value of the ninth free variable.
Fit a black body temperature, visual magnitude, and reddening to the
spectrum of eta ursa majoris. Equal is set to yes because the visual
region of this spectrum does not contain error estimates.
sy> fitspec crcalspec$eta_uma_002.tab \
>>> "rn(bb($1),band(v),$2,vegamag)*ebmv($3)" \
>>> out="umafit.tab" nprint=1 vone=20000 vtwo=2 vthree=0 equal+
The task produces the following output:
irep = 1 chisq = 25306.82 exp = rn(bb(20000.),band(v),2.,vegamag)
*ebmv(0.01)
irep = 2 chisq = 16473.78 exp = rn(bb(22098.21),band(v),2.162239,
vegamag)*ebmv(0.01375842)
irep = 3 chisq = 10925.13 exp = rn(bb(26996.77),band(v),2.250071,
vegamag)*ebmv(0.06069669)
irep = 4 chisq = 8347.195 exp = rn(bb(30768.06),band(v),2.076039,
vegamag)*ebmv(0.1018063)
irep = 5 chisq = 8064.211 exp = rn(bb(31439.05),band(v),2.074771,
vegamag)*ebmv(0.1028053)
irep = 6 chisq = 8062.454 exp = rn(bb(31473.2),band(v),2.078477,
vegamag)*ebmv(0.1025254)
irep = 7 chisq = 8062.335 exp = rn(bb(31474.32),band(v),2.078932,
vegamag)*ebmv(0.1024742)
irep = 8 chisq = 8062.316 exp = rn(bb(31474.33),band(v),2.078977,
vegamag)*ebmv(0.1024683)
irep = 9 chisq = 8048.326 exp = rn(bb(31474.1),band(v),2.078995,
vegamag)*ebmv(0.1014501)
Final solution:
rn(bb(31473.12),band(v),2.057049,vegamag)*ebmv(0.1015078)
In order to see how good the fit is, plot the ratio of the spectrum to
the fit:
sy> plband "crcalspec$eta_uma_002.tab / umafit.tab"
Written by Bernie Simon based on XCAL code written by Keith Horne. The
Levenberg Marquardt code was taken from the minpack library at Argonne
National Laboratory. The downhill simplex code was adapted from
Numerical Recipes.
calcspec
Package Help · Search Form · STSDAS
Maintained by the Science Software Group at STScI
This file last updated on 1 May 2009