include include "ffit.h" define LEN_CURVE 200 # number of points for evaluating function # fcs_plot -- plot data and fitted curve # Phil Hodge, 1990 Original. # Phil Hodge, 22-Jan-1993 !IS_INDEFR (Change) to !IS_INDEF for pxmin & pxmax. procedure fcs_plot (fnl, device, title, xlabel, ylabel, pxmin, pxmax, pfunction) pointer fnl # i: pointer to fit struct char device[ARB] # i: graphics device char title[ARB] # i: title for plot char xlabel[ARB] # i: label for Y axis char ylabel[ARB] # i: label for Y axis real pxmin, pxmax # i: limits for X axis (or indef) extern pfunction() # i: function to be plotted with data real pfunction() #-- pointer gp pointer sp pointer x, y # scr for independent & dependent var. values real xmin, xmax, ymin, ymax real extend real incre real size # size of symbols int k pointer gopen() begin call smark (sp) call salloc (x, LEN_CURVE, TY_REAL) call salloc (y, LEN_CURVE, TY_REAL) size = 1. # Get the range of X values for the plot. xmax = F_XMAX(fnl) xmin = F_XMIN(fnl) extend = (xmax - xmin) / 20. xmin = xmin - extend xmax = xmax + extend # Override by user-specified values. if (!IS_INDEFR (pxmin)) xmin = pxmin if (!IS_INDEFR (pxmax)) xmax = pxmax incre = (xmax - xmin) / (LEN_CURVE - 1) # Evaluate the curve at each point. We're passing the array # of parameters to pfunction. do k = 0, LEN_CURVE-1 { # zero indexed Memr[x+k] = xmin + k * incre Memr[y+k] = pfunction (Memr[x+k], F_PAR(fnl,1)) } # Get the range of Y values for the plot. ymax = F_YMAX(fnl) ymin = F_YMIN(fnl) do k = 0, LEN_CURVE-1 { # zero indexed if (Memr[x+k] > F_XMIN(fnl) && Memr[x+k] < F_XMAX(fnl)) { if (Memr[y+k] < ymin) ymin = Memr[y+k] else if (Memr[y+k] > ymax) ymax = Memr[y+k] } } extend = (ymax - ymin) / 20. ymin = ymin - extend ymax = ymax + extend gp = gopen (device, NEW_FILE, STDGRAPH) call gswind (gp, xmin, xmax, ymin, ymax) call gseti (gp, G_XNMINOR, 5) call glabax (gp, title, xlabel, ylabel) do k = 1, F_NPTS(fnl) call gmark (gp, F_X(fnl,k), F_Y(fnl,k), GM_BOX, size, size) call gpline (gp, Memr[x], Memr[y], LEN_CURVE) call gclose (gp) call sfree (sp) end