aboutsummaryrefslogtreecommitdiff
path: root/noao/twodspec/apextract/apgmark.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/twodspec/apextract/apgmark.x')
-rw-r--r--noao/twodspec/apextract/apgmark.x126
1 files changed, 126 insertions, 0 deletions
diff --git a/noao/twodspec/apextract/apgmark.x b/noao/twodspec/apextract/apgmark.x
new file mode 100644
index 00000000..72ad6a68
--- /dev/null
+++ b/noao/twodspec/apextract/apgmark.x
@@ -0,0 +1,126 @@
+include <pkg/rg.h>
+include "apertures.h"
+
+# AP_GMARK -- Mark an aperture.
+
+define SZ_TEXT 10 # Maximum size of aperture number string
+
+procedure ap_gmark (gp, imvec, aps, naps)
+
+pointer gp # GIO pointer
+int imvec # Image vector
+pointer aps[ARB] # Aperture data
+int naps # Number of apertures
+
+int i, apaxis
+real x1, x2, y1, y2, dy, xc, xl, xu
+pointer sp, text, format, ap
+
+int itoc()
+real ap_cveval()
+
+begin
+ # The aperture is marked at the top of the graph.
+ call smark (sp)
+ call salloc (text, SZ_TEXT, TY_CHAR)
+
+ call ggwind (gp, xl, xu, y1, y2)
+ x1 = min (xl, xu)
+ x2 = max (xl, xu)
+ dy = 0.025 * (y2 - y1)
+ y1 = y2 - 4 * dy
+
+ if (naps > 20) {
+ call salloc (format, SZ_LINE, TY_CHAR)
+ call sprintf (Memc[format], SZ_LINE, "h=c,v=b,s=%4.2f")
+ call pargr (20. / naps)
+ }
+
+ for (i = 1; i <= naps; i = i + 1) {
+ ap = aps[i]
+ apaxis = AP_AXIS(ap)
+
+ xc = AP_CEN(ap, apaxis) + ap_cveval (AP_CV(ap), real (imvec))
+ xl = xc + AP_LOW(ap, apaxis)
+ xu = xc + AP_HIGH(ap, apaxis)
+ call gline (gp, xc, y1 - 2 * dy, xc, y1 + 2 * dy)
+ call gline (gp, xl, y1 - dy, xl, y1 + dy)
+ call gline (gp, xu, y1 - dy, xu, y1 + dy)
+ call gline (gp, xl, y1, xu, y1)
+ if ((xc > x1) && (xc < x2)) {
+ if (itoc (AP_ID(ap), Memc[text], SZ_TEXT) > 0) {
+ if (naps > 20)
+ call gtext (gp, xc, y1 + 2.5 * dy, Memc[text],
+ Memc[format])
+ else
+ call gtext (gp, xc, y1 + 2.5 * dy, Memc[text],
+ "h=c,v=b")
+ }
+ }
+ }
+
+ call sfree (sp)
+end
+
+
+# AP_GMARKB -- Mark backgrounds.
+
+procedure ap_gmarkb (gp, imvec, aps, naps)
+
+pointer gp # GIO pointer
+int imvec # Image vector
+pointer aps[ARB] # Aperture data
+int naps # Number of apertures
+
+int i, j, nx, apaxis
+real x1, x2, y1, y2, dy, xc, xl, xu
+pointer sp, sample, x, ap, rg
+
+real ap_cveval()
+pointer rg_xrangesr()
+
+begin
+ call smark (sp)
+ call salloc (sample, SZ_LINE, TY_CHAR)
+
+ # The background is marked at the bottom of the graph.
+ call ggwind (gp, xl, xu, y1, y2)
+ x1 = min (xl, xu)
+ x2 = max (xl, xu)
+ dy = 0.005 * (y2 - y1)
+ y1 = y1 + 4 * dy
+
+ # Allocate x array.
+ nx = x2 - x1 + 2
+ call salloc (x, nx, TY_REAL)
+
+ for (i = 1; i <= naps; i = i + 1) {
+ ap = aps[i]
+ apaxis = AP_AXIS(ap)
+
+ xc = AP_CEN(ap, apaxis) + ap_cveval (AP_CV(ap), real (imvec))
+
+ if (AP_IC(ap) == NULL)
+ next
+ call ic_gstr (AP_IC(ap), "sample", Memc[sample], SZ_LINE)
+
+ do j = 0, nx-1
+ Memr[x+j] = x1 + j - xc
+ rg = rg_xrangesr (Memc[sample], Memr[x], nx)
+
+ do j = 1, RG_NRGS(rg) {
+ xl = Memr[x+RG_X1(rg,j)-1] + xc
+ xu = Memr[x+RG_X2(rg,j)-1] + xc
+ if (xl > x1 && xl < x2)
+ call gline (gp, xl, y1-dy, xl, y1+dy)
+ if (xu > x1 && xu < x2)
+ call gline (gp, xu, y1-dy, xu, y1+dy)
+ call gline (gp, xl, y1, xu, y1)
+
+ }
+
+ call rg_free (rg)
+ }
+
+ call sfree (sp)
+end