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
|
include <error.h>
include <imhdr.h>
# SKYIMAGES -- Write out sky images.
procedure skyimages (outsky, outsig, im, skymap, sigmap, gainmap, expmap, logfd)
char outsky[ARB] #I Output sky image name
char outsig[ARB] #I Output sigma image name
pointer im #I Image pointer
pointer skymap #I Sky map
pointer sigmap #I Sigma map
pointer gainmap #I Gain map
pointer expmap #I Exposure map
int logfd #I Logfile
int l, nc, nl
pointer skyim, sigim, data, skydata, ssigdata, gaindata, expdata, sigdata, ptr
pointer immap(), imgl2r(), impl2r(), map_glr()
errchk immap, map_glr
begin
# Return no output is needed.
if (outsky[1] == EOS && outsig[1] == EOS)
return
# Write log information.
if (logfd != NULL) {
call fprintf (logfd, " Output sky images:")
if (outsky[1] != EOS) {
call fprintf (logfd, " sky = %s")
call pargstr (outsky)
}
if (outsig[1] != EOS) {
call fprintf (logfd, " sigma = %s")
call pargstr (outsig)
}
call fprintf (logfd, "\n")
}
iferr {
skyim = NULL; sigim = NULL
# Map output image(s)
if (outsky[1] != EOS) {
ptr = immap (outsky, NEW_COPY, im)
skyim = ptr
}
if (outsig[1] != EOS) {
ptr = immap (outsig, NEW_COPY, im)
sigim = ptr
}
# Output the sky image data.
nc = IM_LEN(im,1)
nl = IM_LEN(im,2)
do l = 1, nl {
data = NULL
skydata = NULL
if (skyim != NULL) {
skydata = map_glr (skymap, l, READ_ONLY)
call amovr (Memr[skydata], Memr[impl2r(skyim,l)], nc)
}
if (sigim != NULL) {
ssigdata = map_glr (sigmap, l, READ_ONLY)
if (gainmap == NULL && expmap == NULL)
sigdata = ssigdata
else if (expmap == NULL) {
if (data == NULL)
data = imgl2r (im, l)
if (skydata == NULL)
skydata = map_glr (skymap, l, READ_ONLY)
gaindata = map_glr (gainmap, l, READ_ONLY)
call noisemodel (Memr[data], Memr[skydata],
Memr[ssigdata], Memr[gaindata], INDEFR,
Memr[sigdata], nc)
} else if (gainmap == NULL) {
expdata = map_glr (expmap, l, READ_WRITE)
call noisemodel (Memr[expdata], Memr[expdata],
Memr[ssigdata], INDEFR, Memr[expdata],
Memr[sigdata], nc)
} else {
if (data == NULL)
data = imgl2r (im, l)
if (skydata == NULL)
skydata = map_glr (skymap, l, READ_ONLY)
gaindata = map_glr (gainmap, l, READ_ONLY)
expdata = map_glr (expmap, l, READ_WRITE)
call noisemodel (Memr[data], Memr[skydata],
Memr[ssigdata], Memr[gaindata],
Memr[expdata], Memr[sigdata], nc)
}
if (skyim != NULL)
call amovr (Memr[sigdata], Memr[impl2r(sigim,l)], nc)
}
}
# Finish up.
if (skyim != NULL)
call imunmap (skyim)
if (sigim != NULL)
call imunmap (sigim)
} then {
call erract (EA_WARN)
# Close and delete output images on an errror.
if (skyim != NULL) {
call imunmap (skyim)
iferr (call imdelete (outsky))
;
}
if (sigim != NULL) {
call imunmap (sigim)
iferr (call imdelete (outsig))
;
}
}
end
|