# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. include include "icfit.h" include "names.h" # ICG_AXES -- Set axes data. # The applications program may set additional axes types. procedure icg_axes$t (ic, gt, cv, axis, x, y, z, npts) pointer ic # ICFIT pointer pointer gt # GTOOLS pointer pointer cv # CURFIT pointer int axis # Output axis PIXEL x[npts] # Independent variable PIXEL y[npts] # Dependent variable PIXEL z[npts] # Output values int npts # Number of points int i, axistype, gtlabel[2], gtunits[2] PIXEL a, b, xmin, xmax pointer label, units PIXEL $tcveval(), icg_dvz$t() errchk adiv$t() extern icg_dvz$t() data gtlabel/GTXLABEL, GTYLABEL/ data gtunits/GTXUNITS, GTYUNITS/ begin axistype = IC_AXES(ic, IC_GKEY(ic), axis) switch (axistype) { case 'x': # Independent variable call gt_sets (gt, gtlabel[axis], Memc[IC_LABELS(ic,1)]) call gt_sets (gt, gtunits[axis], Memc[IC_UNITS(ic,1)]) call amov$t (x, z, npts) case 'y': # Dependent variable call gt_sets (gt, gtlabel[axis], Memc[IC_LABELS(ic,2)]) call gt_sets (gt, gtunits[axis], Memc[IC_UNITS(ic,2)]) call amov$t (y, z, npts) case 'f': # Fitted values call gt_sets (gt, gtlabel[axis], "fit") call gt_sets (gt, gtunits[axis], Memc[IC_UNITS(ic,2)]) call $tcvvector (cv, x, z, npts) case 'r': # Residuals call gt_sets (gt, gtlabel[axis], "residuals") call gt_sets (gt, gtunits[axis], Memc[IC_UNITS(ic,2)]) call $tcvvector (cv, x, z, npts) call asub$t (y, z, z, npts) case 'd': # Ratio call gt_sets (gt, gtlabel[axis], "ratio") call gt_sets (gt, gtunits[axis], "") call $tcvvector (cv, x, z, npts) # iferr (call adiv$t (y, z, z, npts)) call advz$t (y, z, z, npts, icg_dvz$t) case 'n': # Linear component removed call gt_sets (gt, gtlabel[axis], "non-linear component") call gt_sets (gt, gtunits[axis], Memc[IC_UNITS(ic,2)]) xmin = IC_XMIN(ic) xmax = IC_XMAX(ic) a = $tcveval (cv, PIXEL (xmin)) b = ($tcveval (cv, PIXEL (xmax)) - a) / (xmax - xmin) do i = 1, npts z[i] = y[i] - a - b * (x[i] - xmin) case 'v': call gt_sets (gt, gtlabel[axis], "Velocity") call gt_sets (gt, gtunits[axis], "km/s") call $tcvvector (cv, x, z, npts) do i = 1, npts z[i] = (z[i] - y[i]) / y[i] * 300000. default: # User axes types. call malloc (label, SZ_LINE, TY_CHAR) call malloc (units, SZ_LINE, TY_CHAR) if (axis == 1) { call strcpy (Memc[IC_LABELS(ic,1)], Memc[label], SZ_LINE) call strcpy (Memc[IC_UNITS(ic,1)], Memc[units], SZ_LINE) call amov$t (x, z, npts) } else { call strcpy (Memc[IC_LABELS(ic,2)], Memc[label], SZ_LINE) call strcpy (Memc[IC_UNITS(ic,2)], Memc[units], SZ_LINE) call amov$t (y, z, npts) } call icg_uaxes$t (axistype, cv, x, y, z, npts, Memc[label], Memc[units], SZ_LINE) call gt_sets (gt, gtlabel[axis], Memc[label]) call gt_sets (gt, gtunits[axis], Memc[units]) call mfree (label, TY_CHAR) call mfree (units, TY_CHAR) } end # ICG_DVZ -- Error action to take on zero division. PIXEL procedure icg_dvz$t (x) PIXEL x # Numerator begin return (1.) end