aboutsummaryrefslogtreecommitdiff
path: root/sys/vops/lz/awvgr.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/vops/lz/awvgr.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'sys/vops/lz/awvgr.x')
-rw-r--r--sys/vops/lz/awvgr.x62
1 files changed, 62 insertions, 0 deletions
diff --git a/sys/vops/lz/awvgr.x b/sys/vops/lz/awvgr.x
new file mode 100644
index 00000000..fab5efe7
--- /dev/null
+++ b/sys/vops/lz/awvgr.x
@@ -0,0 +1,62 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+# AWVG -- Compute the mean and standard deviation (sigma) of a sample. Pixels
+# whose value lies outside the specified lower and upper limits are not used.
+# If the upper and lower limits have the same value (e.g., zero), no limit
+# checking is performed. The number of pixels in the sample is returned as the
+# function value.
+
+int procedure awvgr (a, npix, mean, sigma, lcut, hcut)
+
+real a[ARB]
+real mean, sigma, lcut, hcut
+double sum, sumsq, value, temp
+int npix, i, ngpix
+
+begin
+ sum = 0.0
+ sumsq = 0.0
+ ngpix = 0
+
+ # Accumulate sum, sum of squares. The test to disable limit checking
+ # requires numerical equality of two floating point numbers; this should
+ # be ok since they are used as flags not as numbers (they are not used
+ # in computations).
+
+ if (hcut == lcut) {
+ do i = 1, npix {
+ value = a[i]
+ sum = sum + value
+ sumsq = sumsq + value ** 2
+ }
+ ngpix = npix
+
+ } else {
+ do i = 1, npix {
+ value = a[i]
+ if (value >= lcut && value <= hcut) {
+ ngpix = ngpix + 1
+ sum = sum + value
+ sumsq = sumsq + value ** 2
+ }
+ }
+ }
+
+ switch (ngpix) { # compute mean and sigma
+ case 0:
+ mean = INDEFR
+ sigma = INDEFR
+ case 1:
+ mean = sum
+ sigma = INDEFR
+ default:
+ mean = sum / ngpix
+ temp = (sumsq - (sum/ngpix) * sum) / (ngpix - 1)
+ if (temp < 0) # possible with roundoff error
+ sigma = 0.0
+ else
+ sigma = sqrt (temp)
+ }
+
+ return (ngpix)
+end