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
|
include "epix.h"
# EP_BACKGROUND -- Replace aperture by background values.
# The aperture is first centered. The background is determined from a
# annulus buffered from the aperture and of a specified width. The
# background is obtained by fitting a surface. Noise may be added
# using a gaussian or by histogram sampling.
procedure ep_background (ep, ap, xa, ya, xb, yb)
pointer ep # EPIX structure
int ap # Aperture type
int xa, ya, xb, yb # Aperture coordinates
int i, x1, x2, y1, y2
pointer mask, x, y, w, gs
begin
i = max (5.,
abs (EP_SEARCH(ep)) + EP_BUFFER(ep) + EP_WIDTH(ep) + 1)
x1 = min (xa, xb) - i
x2 = max (xa, xb) + i
y1 = min (ya, yb) - i
y2 = max (ya, yb) + i
call ep_gdata (ep, x1, x2, y1, y2)
if (EP_OUTDATA(ep) != NULL) {
call malloc (mask, EP_NPTS(ep), TY_INT)
call malloc (x, EP_NPTS(ep), TY_REAL)
call malloc (y, EP_NPTS(ep), TY_REAL)
call malloc (w, EP_NPTS(ep), TY_REAL)
call ep_search (ep, Memr[EP_OUTDATA(ep)], EP_NX(ep), EP_NY(ep),
ap, xa, ya, xb, yb)
call ep_mask (ep, mask, ap, xa, ya, xb, yb)
call ep_gsfit (ep, Memr[EP_OUTDATA(ep)], Memi[mask], Memr[x],
Memr[y], Memr[w], EP_NX(ep), EP_NY(ep), gs)
call ep_bg (Memr[EP_OUTDATA(ep)], Memi[mask],
Memr[x], Memr[y], EP_NPTS(ep), gs)
call ep_noise (EP_SIGMA(ep), Memr[EP_OUTDATA(ep)],
Memi[mask], Memr[x], Memr[y], EP_NPTS(ep), gs)
call mfree (mask, TY_INT)
call mfree (x, TY_REAL)
call mfree (y, TY_REAL)
call mfree (w, TY_REAL)
call gsfree (gs)
}
end
# EP_BG -- Replace aperture pixels by the background surface fit values.
procedure ep_bg (data, mask, x, y, npts, gs)
real data[npts] # Data subraster
int mask[npts] # Mask subraster
real x[npts], y[npts] # Coordinates
int npts # Number of points
pointer gs # Surface pointer
int i
real gseval()
begin
if (gs == NULL)
return
do i = 1, npts
if (mask[i] == 1)
data[i] = gseval (gs, x[i], y[i])
end
|