1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <pkg/gtools.h>
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
|