aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/daophot/psf/dppcolon.x
blob: 9934f24459cedd05f48bed8226da5094f9ef2104 (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
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