aboutsummaryrefslogtreecommitdiff
path: root/pkg/utilities/nttools/trebin/tuinterp.x
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /pkg/utilities/nttools/trebin/tuinterp.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/utilities/nttools/trebin/tuinterp.x')
-rw-r--r--pkg/utilities/nttools/trebin/tuinterp.x139
1 files changed, 139 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/trebin/tuinterp.x b/pkg/utilities/nttools/trebin/tuinterp.x
new file mode 100644
index 00000000..3a3b1d89
--- /dev/null
+++ b/pkg/utilities/nttools/trebin/tuinterp.x
@@ -0,0 +1,139 @@
+include <error.h>
+include <tbset.h>
+include "trebin.h"
+
+# tuinterp -- interpolate to regrid a table
+# Open the input & output tables, interpolate to uniformly spaced values
+# of the independent variable, and close the tables.
+#
+# Phil Hodge, 15-Apr-1988 Subroutine created
+# Phil Hodge, 12-May-1989 Include check for not enough data to interpolate.
+# Phil Hodge, 12-Jun-1989 Also copy header parameters.
+# Phil Hodge, 30-Jan-1992 Call tbtclo instead of close.
+# Phil Hodge, 16-Jun-1993 Check number of rows for interpolation function.
+# Phil Hodge, 4-Apr-1994 Errchk tbtopn, and use iferr for tbtcre.
+# Phil Hodge, 20-May-1996 Pass extrapolate and ext_value to tuival.
+# Phil Hodge, 29-Jul-1998 Add iv_step to calling sequence of tuival.
+# Phil Hodge, 8-Apr-1999 Call tbfpri.
+# Phil Hodge, 22-Apr-1999 Don't set output table type if outtable = STDOUT.
+# Phil Hodge, 25-Apr-2000 Add xtable, padvalue, verbose to calling sequence.
+# Phil Hodge, 30-Oct-2001 Delete just the output table, not the whole file,
+# if there's an error.
+# Phil Hodge, 2-Jan-2002 Remove the statements to delete the output table
+# in case the input table is not monotonic (because
+# calling tbtclo for a text table caused the error
+# message to be replaced by a misleading message).
+
+procedure tuinterp (intable, xtable, outtable,
+ i_func, iv_colname, iv_start, iv_end, iv_step,
+ extrapolate, ext_value, padvalue, verbose)
+
+char intable[ARB] # i: name of input table
+char xtable[ARB] # i: table of output indep var values
+char outtable[ARB] # i: name of output table
+int i_func # i: interpolation function code
+char iv_colname[SZ_COLNAME] # i: name of independent variable column
+double iv_start # i: starting value of independent variable
+double iv_end # i: ending value of independent variable
+double iv_step # i: increment in independent variable
+bool extrapolate # i: true means don't use ext_value
+double ext_value # i: value to assign to extrapolated points
+double padvalue # i: value at end of input indep. var. to ignore
+bool verbose # i: print info?
+#--
+pointer sp
+pointer itp, otp # descr of input & output tables
+pointer iv_icp # descr for input indep var column
+pointer iv_ocp # descr for output indep var column
+pointer icpp, ocpp # column descr for i & o tables
+pointer xout # scratch for output indep var values
+int ttype # indicates row- or column-ordered
+int ncols # number of dependent variable columns
+int incols # total number of input columns
+int outrows # number of rows in output table
+int phu_copied # set by tbfpri and ignored
+bool array # true if indep var column contains arrays
+pointer tbtopn()
+int tbpsta()
+bool strne()
+errchk tbfpri, tbtopn, tbtdel, tudcol, tuxget, tu_getput
+
+begin
+ call smark (sp)
+
+ itp = tbtopn (intable, READ_ONLY, 0)
+ incols = tbpsta (itp, TBL_NCOLS)
+
+ # Either read or compute the values of the independent variable
+ # at which we will interpolate the values from the input table.
+ iferr {
+ call tuxget (xtable, iv_start, iv_end, iv_step, padvalue,
+ xout, outrows)
+ } then {
+ call tbtclo (itp)
+ call erract (EA_ERROR)
+ }
+
+ iferr {
+ call tbfpri (intable, outtable, phu_copied)
+ otp = tbtopn (outtable, NEW_FILE, NULL)
+ } then {
+ call mfree (xout, TY_DOUBLE)
+ call tbtclo (itp)
+ call erract (EA_ERROR)
+ }
+
+ call salloc (icpp, incols, TY_POINTER)
+ call salloc (ocpp, incols, TY_POINTER)
+
+ # Define output columns, and get column pointers.
+ iferr {
+ call tudcol (itp, otp, iv_colname, outrows,
+ iv_icp, iv_ocp, Memi[icpp], Memi[ocpp], ncols, array, verbose)
+ } then {
+ call mfree (xout, TY_DOUBLE)
+ call tbtclo (itp)
+ call tbtclo (otp)
+ call erract (EA_ERROR)
+ }
+
+ # Output table should be same type as input table.
+ if (strne (outtable, "STDOUT")) {
+ ttype = tbpsta (itp, TBL_WHTYPE)
+ call tbpset (otp, TBL_WHTYPE, ttype)
+ if (ttype == TBL_TYPE_S_COL) {
+ call tbpset (otp, TBL_ALLROWS,
+ max (outrows, tbpsta (itp, TBL_ALLROWS)))
+ }
+ }
+
+ iferr {
+ call tbtcre (otp) # create output table
+ } then {
+ call mfree (xout, TY_DOUBLE)
+ call tbtclo (itp)
+ call tbtclo (otp)
+ call erract (EA_ERROR)
+ }
+
+ call tbhcal (itp, otp) # copy all header parameters
+
+ # For each column, get the data, do the interpolation,
+ # write the results.
+ iferr {
+ call tu_getput (itp, otp, iv_icp, iv_ocp,
+ Memi[icpp], Memi[ocpp], ncols,
+ Memd[xout], outrows, iv_step,
+ i_func, extrapolate, ext_value, padvalue, array, verbose)
+ } then {
+ call mfree (xout, TY_DOUBLE)
+ call tbtclo (itp)
+ call erract (EA_ERROR)
+ }
+
+ call mfree (xout, TY_DOUBLE)
+ call sfree (sp)
+
+ call tbtclo (itp)
+ call tbtclo (otp)
+end