aboutsummaryrefslogtreecommitdiff
path: root/noao/nproto/ace/skyimages.x
blob: 899fc5da798240dfbcdcb27336357e289e79c416 (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
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