diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/vops/lz/awvgd.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'sys/vops/lz/awvgd.x')
-rw-r--r-- | sys/vops/lz/awvgd.x | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/sys/vops/lz/awvgd.x b/sys/vops/lz/awvgd.x new file mode 100644 index 00000000..58b1d87b --- /dev/null +++ b/sys/vops/lz/awvgd.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 awvgd (a, npix, mean, sigma, lcut, hcut) + +double a[ARB] +double 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 = INDEFD + sigma = INDEFD + case 1: + mean = sum + sigma = INDEFD + 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 |