aboutsummaryrefslogtreecommitdiff
path: root/pkg/obsolete/imcombine/icaverage.gx
blob: 505f4577712d8780ddbc8d08da881dea468a3c6c (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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<imhdr.h>
include	"../icombine.h"

$for (sird)
# IC_AVERAGE -- Compute the average image line.
# Options include a weight average.

procedure ic_average$t (d, m, n, wts, npts, doblank, average)

pointer	d[ARB]			# Data pointers
pointer	m[ARB]			# Image ID pointers
int	n[npts]			# Number of points
real	wts[ARB]		# Weights
int	npts			# Number of output points per line
int	doblank			# Set blank values?
$if (datatype == sil)
real	average[npts]		# Average (returned)
$else
PIXEL	average[npts]		# Average (returned)
$endif

int	i, j, k
real	sumwt, wt
$if (datatype == sil)
real	sum
$else
PIXEL	sum
$endif

include	"../icombine.com"

begin
	# If no data has been excluded do the average without checking the
	# number of points and using the fact that the weights are normalized.
	# If all the data has been excluded set the average to the blank value
	# if requested.

	if (dflag == D_ALL) {
	    if (dowts) {
		do i = 1, npts {
		    k = i - 1
		    wt = wts[Memi[m[1]+k]]
		    sum = Mem$t[d[1]+k] * wt
		    do j = 2, n[i] {
			wt = wts[Memi[m[j]+k]]
			sum = sum + Mem$t[d[j]+k] * wt
		    }
		    average[i] = sum
		}
	    } else {
		do i = 1, npts {
		    k = i - 1
		    sum = Mem$t[d[1]+k]
		    do j = 2, n[i]
			sum = sum + Mem$t[d[j]+k]
		    average[i] = sum / n[i]
		}
	    }
	} else if (dflag == D_NONE) {
	    if (doblank == YES) {
		do i = 1, npts
		    average[i] = blank
	    }
	} else {
	    if (dowts) {
		do i = 1, npts {
		    if (n[i] > 0) {
			k = i - 1
			wt = wts[Memi[m[1]+k]]
			sum = Mem$t[d[1]+k] * wt
			sumwt = wt
			do j = 2, n[i] {
			    wt = wts[Memi[m[j]+k]]
			    sum = sum + Mem$t[d[j]+k] * wt
			    sumwt = sumwt + wt
			}
			average[i] = sum / sumwt
		    } else if (doblank == YES)
			average[i] = blank
		}
	    } else {
		do i = 1, npts {
		    if (n[i] > 0) {
			k = i - 1
			sum = Mem$t[d[1]+k]
			do j = 2, n[i]
			    sum = sum + Mem$t[d[j]+k]
			average[i] = sum / n[i]
		    } else if (doblank == YES)
			average[i] = blank
		}
	    }
	}
end
$endfor