aboutsummaryrefslogtreecommitdiff
path: root/noao/onedspec/identify/autoid/aidgraph.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/onedspec/identify/autoid/aidgraph.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/onedspec/identify/autoid/aidgraph.x')
-rw-r--r--noao/onedspec/identify/autoid/aidgraph.x240
1 files changed, 240 insertions, 0 deletions
diff --git a/noao/onedspec/identify/autoid/aidgraph.x b/noao/onedspec/identify/autoid/aidgraph.x
new file mode 100644
index 00000000..35494004
--- /dev/null
+++ b/noao/onedspec/identify/autoid/aidgraph.x
@@ -0,0 +1,240 @@
+include <mach.h>
+include <gset.h>
+include <pkg/gtools.h>
+include <smw.h>
+include "../identify.h"
+include "autoid.h"
+
+
+# AID_LGRAPH -- Graph target and reference spectra and associated lines.
+# This is only used for debugging.
+
+procedure aid_lgraph (aid, x1, n1, x2, n2)
+
+pointer aid #I AID pointer
+double x1[n1] #I Reference lines
+int n1 #I Number of reference lines
+double x2[n2] #I Target lines
+int n2 #I Number of target lines
+
+int i, wcs, key, nr, nt, redraw, clgcur(), stridxs()
+real wx, wy, wz, a, b, c, d, dy, ytmin, ytmax
+pointer sp, cmd, id, sht, shr, gp, gt, xr, yr, yt, y, gt_init()
+double shdr_lw()
+
+begin
+ call smark (sp)
+ call salloc (cmd, SZ_LINE, TY_CHAR)
+
+ id = AID_IDT(aid)
+ sht = ID_SH(id)
+ shr = ID_SH(AID_IDR(aid))
+
+ gp = ID_GP(id)
+ if (gp == NULL)
+ return
+ gt = gt_init()
+ call gt_sets (gt, GTTYPE, "line")
+ call gt_seti (gt, GTSYSID, NO)
+ if (DC(sht) == DCNO || WP(sht) * AID_CDSIGN(aid) < 0.) {
+ call gt_setr (gt, GTXMIN, AID_W1(aid))
+ call gt_setr (gt, GTXMAX, AID_W2(aid))
+ } else {
+ call gt_setr (gt, GTXMIN, W0(sht))
+ call gt_setr (gt, GTXMAX, W1(sht))
+ }
+
+ if (shr != NULL) {
+ xr = SX(shr) + AID_X1R(aid) - 1
+ yr = AID_SPECR(aid)
+ nr = AID_X2R(aid) - AID_X1R(aid) + 1
+ }
+
+ nt = ID_NPTS(id)
+ yt = ID_IMDATA(id)
+ call alimr (Memr[yt], nt, ytmin, ytmax)
+
+ call malloc (y, max(nr,nt), TY_REAL)
+
+ key = 'r'
+ repeat {
+ switch (key) {
+ case ':':
+ call gt_colon (Memc[cmd], gp, gt, redraw)
+ case 'Q':
+ i = stridxs ("l", AID_DEBUG(aid,1))
+ AID_DEBUG(aid,i) = ' '
+ break
+ case 'q':
+ break
+ case 'r':
+ redraw = YES
+ case 'w':
+ call gt_window (gt, gp, "gcur", redraw)
+ }
+
+ if (redraw == YES) {
+ call gclear (gp)
+ call gseti (gp, G_YDRAWTICKS, NO)
+ if (shr != NULL) {
+ call gascale (gp, Memr[xr], nr, 1)
+ call gascale (gp, Memr[yr], nr, 2)
+ } else {
+ call gswind (gp, real(x1[1]), real(x1[n1]), 0., 1.)
+ }
+ call gt_swind (gp, gt)
+ call ggwind (gp, a, b, c, d)
+ dy = 2 * (d - c)
+ call gswind (gp, a, b, c, c + dy)
+ call gt_labax(gp, gt)
+
+ if (shr != NULL) {
+ call aminkr (Memr[yr], c + 0.44 * dy, Memr[y], nr)
+ call gt_plot (gp, gt, Memr[xr], Memr[y], nr)
+ }
+
+ wy = c + 0.46 * dy
+ wz = c + 0.49 * dy
+ do i = 1, n1 {
+ wx = x1[i]
+ if (wx < min (a,b) || wx > max (a,b))
+ next
+ call gline (gp, wx, wy, wx, wz)
+ }
+
+ call amapr (Memr[yt], Memr[y], nt,
+ ytmin, ytmax, c+0.55*dy, c+0.99*dy)
+ wy = c + 0.50 * dy
+ wz = c + 0.53 * dy
+
+ if (DC(sht) == DCNO || WP(sht) * AID_CDSIGN(aid) < 0.) {
+ call gvline (gp, Memr[y], nt, a, b)
+ do i = 1, n2 {
+ wx = a + (x2[i] - 1) / (nt - 1) * (b - a)
+ call gline (gp, wx, wy, wx, wz)
+ }
+ } else {
+ call gpline (gp, Memr[SX(sht)], Memr[y], nt)
+ do i = 1, n2 {
+ wx = shdr_lw (sht, double (x2[i]))
+ call gline (gp, wx, wy, wx, wz)
+ }
+ }
+
+ redraw = NO
+ }
+ } until (clgcur ("gcur", wx, wy, wcs, key, Memc[cmd], SZ_LINE) == EOF)
+
+ call gdeactivate (gp, 0)
+ call mfree (y, TY_REAL)
+ call gt_free (gt)
+ call sfree (sp)
+end
+
+
+# AID_DGRAPH -- Graph candidate dispersions.
+# This routine is only used for debugging.
+
+procedure aid_dgraph (aid, x, y, n, w1, dw, nd)
+
+pointer aid #I AID pointer
+real x[n] #I Array of candidate reference coordinates (sorted)
+real y[n] #I Array of candidate target coordinates
+int n #I Number of candidate pairs
+real w1[nd] #I Dispersion origin
+real dw[nd] #I Dispersion slope
+int nd #I Number of dispersions
+
+int i, ndplot, wcs, key, redraw, clgcur(), stridxs(), ctoi()
+real wx, wy, a, b, c, d, dy, crpix, crval, cdelt
+pointer sp, cmd, sh, gp, gt, gt_init()
+
+begin
+ call smark (sp)
+ call salloc (cmd, SZ_LINE, TY_CHAR)
+
+ sh = ID_SH(AID_IDT(aid))
+ gp = ID_GP(AID_IDT(aid))
+ if (gp == NULL)
+ return
+ gt = gt_init()
+ call gt_seti (gt, GTSYSID, NO)
+ if (DC(sh) != DCNO) {
+ call gt_setr (gt, GTXMIN, W0(sh))
+ call gt_setr (gt, GTXMAX, W1(sh))
+ call gt_setr (gt, GTYMIN, 1.)
+ call gt_setr (gt, GTYMAX, real(SN(sh)))
+ }
+
+ ndplot = nd
+ key = 'r'
+ repeat {
+ switch (key) {
+ case ':':
+ if (Memc[cmd] == '/')
+ call gt_colon (Memc[cmd], gp, gt, redraw)
+ else {
+ i = 1
+ if (ctoi (Memc[cmd], i, ndplot) == 0)
+ ndplot = nd
+ }
+ case 'Q':
+ i = stridxs ("d", AID_DEBUG(aid,1))
+ AID_DEBUG(aid,i) = ' '
+ break
+ case 'q':
+ break
+ case 'r':
+ redraw = YES
+ case 'w':
+ call gt_window (gt, gp, "gcur", redraw)
+ }
+
+ if (redraw == YES) {
+ call gclear (gp)
+ call gascale (gp, x, n, 1)
+ call gascale (gp, y, n, 2)
+ call gt_swind (gp, gt)
+ call gt_labax(gp, gt)
+
+ call gt_plot (gp, gt, x, y, n)
+
+ call ggwind (gp, a, b, c, d)
+ dy = (b - a) / 500.
+ do i = 1, ndplot {
+ crval = w1[i]
+ cdelt = dw[i]
+ wy = c
+ wx = crval + wy * cdelt
+ call gamove (gp, wx, wy)
+ for (wy=wy+dy; wy<d+dy; wy=wy+dy) {
+ wx = crval + wy * cdelt
+ call gadraw (gp, wx, wy)
+ }
+ }
+
+ if (AID_CRMIN(aid) > -MAX_DOUBLE / 10. &&
+ AID_CRMAX(aid) < MAX_DOUBLE / 10.) {
+ crpix = AID_CRPIX(aid)
+ crval = AID_CDSIGN(aid) * AID_CDMIN(aid)
+ cdelt = AID_CDSIGN(aid) * AID_CDMAX(aid)
+ for (wy=c; wy<d+dy; wy=wy+dy) {
+ wx = AID_CRMIN(aid) +
+ min ((wy-crpix)*crval, (wy-crpix)*cdelt)
+ call gmark (gp, wx, wy, GM_POINT, 2, 2)
+ }
+ for (wy=c; wy<d+dy; wy=wy+dy) {
+ wx = AID_CRMAX(aid) +
+ max ((wy-crpix)*crval, (wy-crpix)*cdelt)
+ call gmark (gp, wx, wy, GM_POINT, 2, 2)
+ }
+ }
+
+ redraw = NO
+ }
+ } until (clgcur ("gcur", wx, wy, wcs, key, Memc[cmd], SZ_LINE) == EOF)
+
+ call gdeactivate (gp, 0)
+ call gt_free (gt)
+ call sfree (sp)
+end