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
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
include "../lib/daophotdef.h"
include "../lib/psfdef.h"
# DP_PCOLON -- Process the PSF fitting colon commands.
procedure dp_pcolon (dao, psfim, opst, psfgr, cmdstr, psf_new, psf_computed,
psf_written)
pointer dao # pointer to the daophot structure
pointer psfim # pointer to the output psf image
int opst # the output psf star list file descriptor
int psfgr # the output psf group file descriptor
char cmdstr[ARB] # the input command string
bool psf_new # is the psf star list defined ?
bool psf_computed # has the psf been fit ?
bool psf_written # has the psf been updated ?
bool bval
int ncmd, ival
pointer sp, cmd, str1, str2, str3
real rval
bool itob()
int strdic(), nscan(), btoi(), dp_stati(), open(), dp_fctdecode()
int dp_pstati(), strlen()
pointer immap(), tbtopn()
real dp_statr()
errchk immap(), open(), tbtopn()
begin
# Allocate working space.
call smark (sp)
call salloc (cmd, SZ_LINE, TY_CHAR)
call salloc (str1, SZ_LINE, TY_CHAR)
call salloc (str2, SZ_LINE, TY_CHAR)
call salloc (str3, SZ_LINE, TY_CHAR)
# Get the command.
call sscan (cmdstr)
call gargwrd (Memc[cmd], SZ_LINE)
if (Memc[cmd] == EOS) {
call sfree (sp)
return
}
# Process the command
ncmd = strdic (Memc[cmd], Memc[cmd], SZ_LINE, PSF_CMDS)
switch (ncmd) {
case PSFCMD_PSFIMAGE:
call gargwrd (Memc[str1], SZ_LINE)
call gargwrd (Memc[str2], SZ_LINE)
call gargwrd (Memc[str3], SZ_LINE)
if (nscan() == 1) {
call dp_stats (dao, PSFIMAGE, Memc[str1], SZ_LINE)
call dp_stats (dao, OUTREJFILE, Memc[str2], SZ_LINE)
call dp_stats (dao, OUTPHOTFILE, Memc[str3], SZ_LINE)
call printf ("psfim = %s opstfile = %s grpfile = %s\n")
call pargstr (Memc[str1])
call pargstr (Memc[str2])
call pargstr (Memc[str3])
} else if (nscan() == 4) {
if (psfim != NULL)
call imunmap (psfim)
psfim = NULL
if (opst != NULL) {
if (dp_stati (dao, TEXT) == YES)
call close (opst)
else
call tbtclo (opst)
}
opst = NULL
if (psfgr != NULL) {
if (dp_stati (dao, TEXT) == YES)
call close (psfgr)
else
call tbtclo (psfgr)
}
psfgr = NULL
iferr {
psfim = immap (Memc[str1], NEW_IMAGE, dp_pstati (dao,
LENUSERAREA))
if (dp_stati (dao, TEXT) == YES)
opst = open (Memc[str2], NEW_FILE, TEXT_FILE)
else
opst = tbtopn (Memc[str2], NEW_FILE, 0)
if (dp_stati (dao, TEXT) == YES)
psfgr = open (Memc[str3], NEW_FILE, TEXT_FILE)
else
psfgr = tbtopn (Memc[str3], NEW_FILE, 0)
} then {
if (psfim != NULL)
call imunmap (psfim)
psfim = NULL
if (opst != NULL) {
if (dp_stati (dao, TEXT) == YES)
call close (opst)
else
call tbtclo (opst)
}
opst = NULL
if (psfgr != NULL) {
if (dp_stati (dao, TEXT) == YES)
call close (psfgr)
else
call tbtclo (psfgr)
}
psfgr = NULL
call dp_sets (dao, PSFIMAGE, "")
call dp_sets (dao, OUTREJFILE, "")
call dp_sets (dao, OUTPHOTFILE, "")
} else {
call dp_sets (dao, PSFIMAGE, Memc[str1])
call dp_sets (dao, OUTREJFILE, Memc[str2])
call dp_sets (dao, OUTPHOTFILE, Memc[str2])
}
psf_written = false
}
case PSFCMD_FUNCTION:
call gargwrd (Memc[str1], SZ_LINE)
if (nscan() == 1) {
call dp_stats (dao, FUNCLIST, Memc[str1], SZ_LINE)
call strcpy (Memc[str1+1], Memc[str2],
strlen (Memc[str1]) - 2)
call printf ("function = %s\n")
call pargstr (Memc[str2])
} else if (dp_fctdecode (Memc[str1], Memc[str2], SZ_FNAME) > 0) {
call dp_sets (dao, FUNCLIST, Memc[str2])
psf_computed = false
psf_written = false
}
case PSFCMD_VARORDER:
call gargi (ival)
if (nscan() == 1) {
call printf ("varorder = %d\n")
call pargi (dp_stati (dao, VARORDER))
} else if (ival >= -1 && ival <= 2) {
call dp_seti (dao, VARORDER, ival)
psf_computed = false
psf_written = false
}
case PSFCMD_FEXPAND:
call gargb (bval)
if (nscan() == 1) {
call printf ("fexpand = %b\n")
call pargb (itob (dp_stati (dao, FEXPAND)))
} else {
call dp_seti (dao, FEXPAND, btoi (bval))
psf_computed = false
psf_written = false
}
case PSFCMD_PSFRAD:
call gargr (rval)
if (nscan() == 1) {
call printf ("psfrad = %g scale units\n")
call pargr (dp_statr (dao, SPSFRAD))
} else {
call dp_setr (dao, SPSFRAD, rval)
call dp_setr (dao, RPSFRAD, rval)
call dp_setr (dao, PSFRAD, rval / dp_statr (dao, SCALE))
psf_computed = false
psf_written = false
}
case PSFCMD_FITRAD:
call gargr (rval)
if (nscan() == 1) {
call printf ("fitrad = %g scale units\n")
call pargr (dp_statr (dao, SFITRAD))
} else {
call dp_setr (dao, SFITRAD, rval)
call dp_setr (dao, FITRAD, rval / dp_statr (dao, SCALE))
psf_new = true
psf_computed = false
psf_written = false
}
case PSFCMD_MATCHRAD:
call gargr (rval)
if (nscan() == 1) {
call printf ("matchrad = %g scale units\n")
call pargr (dp_statr (dao, SMATCHRAD))
} else {
call dp_setr (dao, SMATCHRAD, rval)
call dp_setr (dao, MATCHRAD, rval / dp_statr (dao, SCALE))
}
case PSFCMD_NCLEAN:
call gargi (ival)
if (nscan() == 1) {
call printf ("nclean = %d\n")
call pargi (dp_stati (dao, NCLEAN))
} else if (ival >= 0) {
call dp_seti (dao, NCLEAN, ival)
psf_computed = false
psf_written = false
}
case PSFCMD_SATURATED:
call gargb (bval)
if (nscan() == 1) {
call printf ("saturated = %b\n")
call pargb (itob (dp_stati (dao, SATURATED)))
} else {
call dp_seti (dao, SATURATED, btoi (bval))
psf_computed = false
psf_written = false
}
case PSFCMD_SCALE:
call gargr (rval)
if (nscan() == 1) {
call printf ("scale = %g units per pixel\n")
call pargr (dp_statr (dao, SCALE))
} else {
call dp_setr (dao, FWHMPSF, dp_statr (dao, SFWHMPSF) / rval)
call dp_setr (dao, PSFRAD, dp_statr (dao, SPSFRAD) / rval)
call dp_setr (dao, FITRAD, dp_statr (dao, SFITRAD) / rval)
call dp_setr (dao, MATCHRAD, dp_statr (dao, SMATCHRAD) / rval)
call dp_setr (dao, SCALE, rval)
psf_new = true
psf_computed = false
psf_written = false
}
case PSFCMD_FWHMPSF:
call gargr (rval)
if (nscan() == 1) {
call printf ("fwhmpsf = %g scale units\n")
call pargr (dp_statr (dao, SFWHMPSF))
} else {
call dp_setr (dao, SFWHMPSF, rval)
call dp_setr (dao, FWHMPSF, rval / dp_statr (dao, SCALE))
psf_computed = false
psf_written = false
}
case PSFCMD_DATAMIN:
call gargr (rval)
if (nscan() == 1) {
call printf ("datamin = %g counts\n")
call pargr (dp_statr (dao, MINGDATA))
} else {
call dp_setr (dao, MINGDATA, rval)
psf_new = true
psf_computed = false
psf_written = false
}
case PSFCMD_DATAMAX:
call gargr (rval)
if (nscan() == 1) {
call printf ("datamax = %g counts\n")
call pargr (dp_statr (dao, MAXGDATA))
} else {
call dp_setr (dao, MAXGDATA, rval)
psf_new = true
psf_computed = false
psf_written = false
}
default:
call printf ("Unknown or ambiguous colon command\7\n")
}
call sfree (sp)
end
|