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
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
include <mach.h>
include <ctype.h>
include "../lib/daophotdef.h"
include "../lib/psfdef.h"
define HELPFILE "daophot$psf/showpsf.key"
# DP_SHOWPSF -- Interactively make surface and/or contour plots of the
# data subraster around the current PSF star.
procedure dp_showpsf (dao, im, subrast, ncols, nlines, x1, y1, gd, star_ok)
pointer dao # pointer to DAOPHOT structure
pointer im # the input image descriptor
real subrast[ncols,nlines] # image subraster
int ncols, nlines # dimensions of the subraster
int x1, y1 # coordinates of left hand corner
pointer gd # pointer to the graphics stream
bool star_ok # true if PSF star ok
real hibad, wx, wy, rval
pointer sp, cmd, title, psf
int wcs, key, ip
bool do_replot
int clgcur(), ctor()
begin
# Return if the graphics stream is undefined.
if (gd == NULL)
return
# Allocate working space.
call smark (sp)
call salloc (cmd, SZ_LINE, TY_CHAR)
call salloc (title, SZ_LINE, TY_CHAR)
# Initialize various daophot pointers.
psf = DP_PSF (dao)
# Initialize the contour plot parameters.
DP_CCEILING (psf) = 0.0
DP_CFLOOR (psf) = 0.0
# Define the hibad parameter.
hibad = DP_MAXGDATA(dao)
if (IS_INDEFR(hibad))
hibad = MAX_REAL
# Create the plot title.
call dp_ltov (im, DP_CUR_PSFX(psf), DP_CUR_PSFY(psf), wx, wy, 1)
call sprintf (Memc[title], SZ_LINE, "Star: %d X: %g Y: %g Mag: %g\n")
call pargi (DP_CUR_PSFID(psf))
call pargr (wx)
call pargr (wy)
call pargr (DP_CUR_PSFMAG(psf))
# Initialize plot.
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT)
call dp_surfpsf (dao, subrast, ncols, nlines, Memc[title], gd)
else if (DP_PLOTTYPE(psf) == PSF_CONTOURPLOT)
call dp_contpsf (dao, subrast, ncols, nlines, Memc[title], gd)
else if (DP_PLOTTYPE(psf) == PSF_RADIALPLOT)
call dp_radpsf (dao, subrast, ncols, nlines, x1, y1, Memc[title],
gd)
if (DP_CUR_PSFMAX(psf) > hibad)
call printf ("Warning: Star is probably saturated\n")
do_replot = false
while (clgcur ("gcommands", wx, wy, wcs, key, Memc[cmd],
SZ_LINE) != EOF) {
switch (key) {
# Print the help page
case '?':
if (gd == NULL)
call pagefile (HELPFILE, "")
else
call gpagefile (gd, HELPFILE, "")
# Print out the photometry for the star.
case 'p':
call printf ("Star: %d Mag: %7.2f Coords: %7.2f %7.2f\n")
call pargi (DP_CUR_PSFID(psf))
call pargr (DP_CUR_PSFMAG(psf))
call pargr (DP_CUR_PSFX(psf))
call pargr (DP_CUR_PSFY(psf))
# Print out the plot parameters.
case 't':
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT) {
call printf ("Surface plot: angv = %6.1f angh = %6.1f ")
call pargr (DP_MANGV(psf))
call pargr (DP_MANGH(psf))
call printf (" Minimum: %7.1f Maximum: %7.1f\n")
call pargr (DP_CUR_PSFMIN(psf))
call pargr (DP_CUR_PSFMAX(psf))
} else if (DP_PLOTTYPE(psf) == PSF_CONTOURPLOT) {
call printf ("Contour plot: floor = %6.1f ceil = %6.1f ")
call pargr (DP_CFLOOR(psf))
call pargr (DP_CCEILING(psf))
call printf (" Minimum: %7.1f Maximum: %7.1f\n")
call pargr (DP_CUR_PSFMIN(psf))
call pargr (DP_CUR_PSFMAX(psf))
} else if (DP_PLOTTYPE(psf) == PSF_RADIALPLOT) {
call printf (
"Profile plot: Minimum: %7.1f Maximum: %7.1f\n")
call pargr (DP_CUR_PSFMIN(psf))
call pargr (DP_CUR_PSFMAX(psf))
} else
call printf ("Unknown plot type.\n")
# Accept star and quit cursor loop.
case 'a':
star_ok = true
break
# Star rejected
case 'd':
star_ok = false
break
# Increase vertical viewing angle of mesh plot by 15 degrees.
case 'n':
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT) {
DP_MANGV (psf) = DP_MANGV (psf) + 15.
do_replot = true
} else
call printf ("This key only active for mesh plots.\n")
# Decrease vertical viewing angle of mesh plot by 15 degrees.
case 's':
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT) {
DP_MANGV (psf) = DP_MANGV (psf) - 15.
do_replot = true
} else
call printf ("This key only active for mesh plots.\n")
# Decrease horizontal viewing angle of mesh plot by 15 degrees.
case 'w':
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT) {
DP_MANGH (psf) = DP_MANGH (psf) - 15.
do_replot = true
} else
call printf ("This key only active for mesh plots.\n")
# Increase horizontal viewing angle of mesh plot by 15 degrees.
case 'e':
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT) {
DP_MANGH (psf) = DP_MANGH (psf) + 15.
do_replot = true
} else
call printf ("This key only active for mesh plots.\n")
# Plot the default mesh plot.
case 'm':
DP_PLOTTYPE(psf) = PSF_MESHPLOT
DP_MANGV (psf) = 30.
DP_MANGH (psf) = -30.
DP_MFLOOR(psf) = 0.0
DP_MCEILING(psf) = 0.0
do_replot = true
# Plot the default contour plots.
case 'c':
DP_PLOTTYPE(psf) = PSF_CONTOURPLOT
DP_CFLOOR(psf) = 0.0
DP_CCEILING(psf) = 0.0
do_replot = true
# Plot the radial profile plots.
case 'r':
DP_PLOTTYPE(psf) = PSF_RADIALPLOT
do_replot = true
# Command mode.
case ':':
for (ip=1; IS_WHITE (Memc[cmd+ip-1]); ip=ip+1)
;
switch (Memc[cmd+ip-1]) {
# Set surface plot and angles
case 'm':
DP_PLOTTYPE(psf) = PSF_MESHPLOT
ip = ip + 1
if (ctor (Memc[cmd], ip, DP_MANGV(psf)) <= 0)
DP_MANGV(psf) = 30.
if (ctor (Memc[cmd], ip, DP_MANGH(psf)) <= 0)
DP_MANGH(psf) = -30.
do_replot = true
case 'c':
# Set surface contour and levels
DP_PLOTTYPE(psf) = PSF_CONTOURPLOT
ip = ip + 1
if (ctor (Memc[cmd], ip, DP_CFLOOR(psf)) <= 0)
DP_CFLOOR(psf) = 0.0
if (ctor (Memc[cmd], ip, DP_CCEILING(psf)) <= 0)
DP_CCEILING(psf) = 0.0
do_replot = true
case 'r':
# PLot radial profile.
DP_PLOTTYPE(psf) = PSF_RADIALPLOT
do_replot = true
# Set vertical angle
case 'v':
ip = ip + 1
if (ctor (Memc[cmd], ip, rval) <= 0) {
call printf (
"Surface plot vertical viewing angle: %g\n")
call pargr (DP_MANGV(psf))
} else {
DP_MANGV(psf) = rval
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT)
do_replot = true
}
# Set horizontal angle
case 'h':
ip = ip + 1
if (ctor (Memc[cmd], ip, rval) <= 0) {
call printf (
"Surface plot horizontal viewing angle: %g\n")
call pargr (DP_MANGH(psf))
} else {
DP_MANGH(psf) = rval
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT)
do_replot = true
}
# Set the floor value.
case 'l':
ip = ip + 1
if (ctor (Memc[cmd], ip, rval) <= 0) {
call printf (
"Contour plot floor value: %g\n")
call pargr (DP_CFLOOR(psf))
} else {
DP_CFLOOR(psf) = rval
if (DP_PLOTTYPE(psf) == PSF_CONTOURPLOT)
do_replot = true
}
# Set the ceiling value.
case 'u':
ip = ip + 1
if (ctor (Memc[cmd], ip, rval) <= 0) {
call printf (
"Contour plot ceiling value: %g\n")
call pargr (DP_CCEILING(psf))
} else {
DP_CCEILING(psf) = rval
if (DP_PLOTTYPE(psf) == PSF_CONTOURPLOT)
do_replot = true
}
default:
call printf ("Unknown keystroke or cursor command.\007\n")
}
default:
call printf ("Unknown keystroke or cursor command.\007\n")
}
# Replot the data.
if (do_replot) {
if (DP_PLOTTYPE(psf) == PSF_MESHPLOT)
call dp_surfpsf (dao, subrast, ncols, nlines, Memc[title],
gd)
else if (DP_PLOTTYPE(psf) == PSF_CONTOURPLOT)
call dp_contpsf (dao, subrast, ncols, nlines, Memc[title],
gd)
else if (DP_PLOTTYPE(psf) == PSF_RADIALPLOT)
call dp_radpsf (dao, subrast, ncols, nlines, x1, y1,
Memc[title], gd)
do_replot = false
}
}
call gdeactivate (gd, 0)
call sfree (sp)
end
|