diff options
Diffstat (limited to 'noao/twodspec/apextract/apgmark.x')
-rw-r--r-- | noao/twodspec/apextract/apgmark.x | 126 |
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 |