aboutsummaryrefslogtreecommitdiff
path: root/noao/twodspec/multispec/doc/MSspecs_c.hlp
blob: 848d589d4263707a1560262a77f03041d46a724e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243

.help multispec Nov82 "Multispec Specifications"
.ce
Comments on Multispec Package Specifications
.ce
November 8, 1983



    The basic package structure and the decomposition of the package into
tasks looks good.  The requirements for both general operators and canned
procedures are addressed well.  I got the impression that you have a pretty
clear idea of what you want to do (which is the thing I am most looking for
when I read a specs document), but I confess to having to reread the document
several times to figure out what you have in mind.  Your writing style is
very terse and leaves much up to the reader!

Most of my comments have to do with details.  These are presented in the
order in which they occurred while reading the document.  These comments
apply only to the specs document.  I have started going over the algorithms
paper, mostly when I could not understand a section of the specs document,
but I have not finished it yet.

.sh
General Comments
.ls 4
.ls (1)
When eventually we write the user documentation, the nomenclature
should be carefully explained up front.  Users will tend to confuse
image lines and spectral lines, but there is little we can do about
that other than to make the distinction clear.  The term "band" is
confusing because it normally refers to the third dimension of an
image and that is not how it is used here.  A better term might be
"swath".  In what follows I will continue to use the term band, but
it is definitely not too late to change.
.le
.ls (2)
It seems to me that the concept of a band or swath is a detail of how
the algorithm works and should not have such a prominent place in the
user interface to the package.  Several of the routines require that
image coordinates be entered in units of band number and column.
This introduces an unnecessary coupling between two input parameters
and forces the user to convert from line number to band number.  The
result will be that the user will be reluctant to change the number
of lines per band (I'll bet that you have kept this a constant in
using the prototype).  My inclination would be to have the user enter
all coordinates in units of lines and columns, and have the program
select the nearest band depending on the band width parameter.
The band width could then be easily changed depending on the data,
without need to respecify the region of the image to be processed.
.le
.ls (3)
Routines all over the system will have an option for printing extra
information, i.e., a verbose mode of execution.  I think we should
standardize on the name of this parameter.  "Verbose" seems to me
more descriptive than "print", and is consistent with UNIX terminology.
.le
.le

.sh
Pages 3,4
.ls
.ls (1)
Functions for extracting spectra.  I assume "strips of constant
width" means aperture sum out to a specified x-radius from the
center of a spectra.  Can the radius be specified in fractional
pixels, and if so, does the routine do fractional pixel interpolation.
What happens if there are blank pixels in the aperture?

If extraction is based on the model, I gather that you are still
summing data pixel values, using a weight for each spectra based
on the modeled contribution of each spectra to the data pixel.  In
other words we are still taking an aperture sum, but with allowances
for crowding.  This has the disadvantage that if we sum way out into
the wings, we will be adding noise to the aperture sum, degrading signal
to noise.

Extraction based on integration of the model rather than
the data should be available as another extraction procedure; this may
yield better photometric results.  I would eventually like to compare
the two approaches with artificial data.  Also by integrating the model
there is no need to "clean" (I assume that deviant pixels are detected
and rejected when the model is fitted, or the model will not be
accurate).  Blank pixels should be recognized and ignored when fitting
the model.
.le

.ls (2)
I gather that all extracted spectra for an image are put into a single
imagefile.  This is fine, even desirable, as long as it is ok if all
spectra share the same header, and as long as all we want to output
is intensity versus wavelength.  If it is desired to also output the
signal to noise or whatever than another scheme may be needed.
.le
.ls (3)
The text file output form ('c'pg.4) should be engineered with the idea
that the user will take the data away in cardimage form.  From the
description it sounds like there is one pixel (wavelength bin) per
line in the text file.  This has its advantages, but is not what one
wants for a cardimage file, which always writes 80 chars per line.
Also, the detailed technical specs should give some details about
such a format; it is a major part of the user interface and people
will want to know what this format is going to look like.  In a way
it is more important to specify formats like this than the calling
sequences of the tasks, because it is harder to change after the
package is released, and other program are written to read the
text format spectra.
.le
.ls (4)
To item 3.2 (2) (on uncertainty estimates) I would add "as a function
of position along the spectrum".
.le
.le

.sh
4.1 Basic Programs
.ls
.ls (1)
Evidently there is a datafile associated with each image.  What is
the function of the datafile?  Is it transparent to the user?  How
much is stored in the image header and how much in the datafile?
.le
.ls (2)
The distinction between "line_list" and "model_list" is confusing.
Does "line_list" print the sum of the models for all the spectra
a each column?  Please specify the form of the output for this
procedure in more detail.  The line_list and model_list procedures
are natural candidates for use with the "lists" utilities for
extracting columns, plotting one column against another, etc. I
could not tell whether or not this would work well from the info
given.
.le
.ls (3)
"ap_plate":  "The identifications for the spectra ... is recorded."
Is recorded where?  In the datafile?  Is this information essential
to the operation of multispec, or is it merely passed on through
multispec?
.le
.ls (4)
"find_background":  Might be more aptly named "fit_background".
I would expect "find" to mean find which regions of the image are
background and which are spectra.  Find is spatial, fit is grayscale.

We need to decide whether we want to specify polynomials in IRAF by
the order (0,1,2, etc.) or by the number of coefficients or terms.
It seems to me that people are most used to talking about second,
third, fifth etc. order polynomials and that we might better specify
polynomials with an "order" parameter rather than a "terms" param.

Buffer radius or diameter?  I would assume radius, but it is not
clear from the docs.  What is being "searched"?  Shouldn't that read
"bands to be fitted".  The "colummns" parameter should permit a list
of ranges of columns; I couldn't tell whether this was the case
from the specs.  Cursor input may be desirable here.

Blank pixels should be detected and ignored when fitting the
background.  Are deviant pixels detected and rejected?  This is
generally a desirable option in a bkg fit.  You may be able to
decompose this routine (internally) into a find_background and
a fit_background, making use of the Images background fitting
routines, though these generate an image as output rather than the
coeff of the fitted functions.  I wuld guess that you are storing
the bkg coeff for each band in the datafile from the description,
and that the fit is strictly one-dimensional.

If only a limited number of bands are fitted, what do you do about
the other bands if the bkg fit is one-dimensional?  Is the user
req'd to use the same bands range when they do the extraction?
.le

.ls (5)
"find_spectra".  It is not clear how this routine uses cursor input.
Perhaps you should have a gcur type parameter.  Reading cursor
coordinates from the standard input may be the way to go, but you
should explain how this is going to work.
.le
.ls (6)
"line_list".  One output line per image line?  One or more spectra
per output line?  Output should be suitable for further processing
with the LISTS package utilities (i.e., getcol, and the graphics
utility which will plot or overplot lists).  The specs should
specify the form of the output.
.le
.ls (7)
I assume that the extraction procedures extract spectra which
are put somewhere.  Where, in the datafile?  If the image is
to be cleaned, it would be safer to write a new output image,
or at least to rename the original.  It is strange to have these
two quite different functions in the same module.
.le
.ls (8)
"model_fit".  The range of modeling options is impressive, good
stuff.  However, there must be something better than magic integer
numbers for specifying the model to be fitted.  Perhaps the
strings  "i, ip, ipw, ipw2, ipw3, ipw4", where 'i' is for intensity,
'p' for position, and 'w' for width.

How are the "initial parameters" specified?
.le
.ls (9)
"model_list".  Again, I can only guess from the description what the
output will look like.  It sounds like it might be best to have
this routine print data for only one spectra at a time, particularly
if the lists package is to be used for analysis.  It might be good
to have the line number in the output somewhere, especially if the
wavelength information is not available.
.le
.le

.sh
4.2 Scripts
.ls
.ls (1)
It sounds like there is no easy alternative to an automatic search
for the line centers.  This is best as long as it works, but the
users will want easy way to use the cursor available as an option.
A script such as this can easily use the line plot routine Images
to make a plot and generate a list of line centers, without even
requiring find_spectra to be able to access the cursor (and perhaps
it should not if the script can do it).  The graphics cursor should
be used here rather than the image cursor.
.le
.le

.sh
5. Example
.ls
.ls (1)
The rcamera example is in error.  Rcamera, as implemented, has only
three query mode params, while you show four in the example.
I believe the ranges string should be quoted and should be the second
argument.

The last command should be "to_onedspec", not "onedspec".
.le
.ls (2)
5.(5): It seems strange to make the user manually count 50 spectra
by examining a plot.  If the program automatically finds centers,
this should not be necessary; if the user interactively marks centers,
it is not necessary.
.le
.le
.endhelp