aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/apphot/center/apmctr1d.x
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /noao/digiphot/apphot/center/apmctr1d.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/digiphot/apphot/center/apmctr1d.x')
-rw-r--r--noao/digiphot/apphot/center/apmctr1d.x88
1 files changed, 88 insertions, 0 deletions
diff --git a/noao/digiphot/apphot/center/apmctr1d.x b/noao/digiphot/apphot/center/apmctr1d.x
new file mode 100644
index 00000000..5dc47f60
--- /dev/null
+++ b/noao/digiphot/apphot/center/apmctr1d.x
@@ -0,0 +1,88 @@
+include <mach.h>
+include "../lib/center.h"
+
+# AP_MCTR1D -- Procedure to compute the center from the 1D marginal
+# distributions.
+
+int procedure ap_mctr1d (ctrpix, nx, ny, norm, xc, yc, xerr, yerr)
+
+real ctrpix[nx, ny] # object to be centered
+int nx, ny # dimensions of subarray
+real norm # the normalization factor
+real xc, yc # computed centers
+real xerr, yerr # estimate of centering error
+
+pointer sp, xm, ym
+
+begin
+ call smark (sp)
+ call salloc (xm, nx, TY_REAL)
+ call salloc (ym, ny, TY_REAL)
+
+ # Compute the marginal distributions.
+ call ap_mkmarg (ctrpix, Memr[xm], Memr[ym], nx, ny)
+ call adivkr (Memr[xm], real (ny), Memr[xm], nx)
+ call adivkr (Memr[ym], real (nx), Memr[ym], ny)
+
+ # Get the centers and errors.
+ call ap_cmmarg (Memr[xm], nx, norm, xc, xerr)
+ call ap_cmmarg (Memr[ym], ny, norm, yc, yerr)
+
+ call sfree (sp)
+ return (AP_OK)
+end
+
+
+# AP_CMMARG -- Compute the center and estimate its error given the
+# marginal distribution and the number of points. The center is estimated
+# using a centroid which is an optimal solution for a gaussian star with
+# no background noise. The centering error is computing using a variance
+# estimate based on a gaussian star with no background noise.
+
+procedure ap_cmmarg (a, npts, norm, xc, err)
+
+real a[npts] # array
+int npts # number of points
+real norm # the normalization factor
+real xc # center value
+real err # error
+
+int i, npos
+real sumi, sumix, sumix2, mean, val
+real asumr()
+
+begin
+ # Initialize.
+ mean = asumr (a, npts) / npts
+ npos = 0
+ sumi = 0.0
+ sumix = 0.0
+ sumix2 = 0.0
+
+ # Accumulate the sums.
+ do i = 1, npts {
+ val = (a[i] - mean)
+ if (val > 0.0) {
+ npos = npos + 1
+ sumi = sumi + val
+ sumix = sumix + val * i
+ sumix2 = sumix2 + val * i ** 2
+ }
+ }
+
+ # Compute the position and the error.
+ if (npos <= 0) {
+ xc = (1.0 + npts) / 2.0
+ err = INDEFR
+ } else {
+ xc = sumix / sumi
+ err = (sumix2 / sumi - xc * xc)
+ if (err <= 0.0) {
+ err = 0.0
+ } else {
+ err = sqrt (err / ((sumi + mean * npts) * norm))
+ if (err > real (npts))
+ err = INDEFR
+ }
+ }
+end