When a Table is assigned a value, it may be assigned a single constant (double-precision) value, a functional form, or the name of a file. A single value can be assigned as in
one of the following two statements:
Table table1 = 1234.5678;
Table table2 = "9876.5432";
The first of the above statements simply assigns the value 1234.5678 to table1. The second is a string assignment. If the string cannot be interpreted as a single
number, then interpretation by one of the alternative expressions, given below, will be attempted.
A Table may also be assigned a simple functional form:
Table table3 = "@x:1+x^2+x^3";
Table table4 = "@y:(sin(y),cos(y))";
This simple functional form must start with an ampersand (@), be followed by a variable name (in the examples, x and y), a colon (:), and an expression. The second of the
two examples returns two values. By default, only the first of the two values is used. However, if the Table is directed to use the third column, then the second value will be used. When
a Table is used by a dielectric_function, two values will be needed.
The given function will be evaluated each time it is needed. That is, the values are not tabulated and there is is no interpolation.
If the string cannot be interpreted as a single value or a simple function, it will be interpreted to be the name of a file and the software will attempt to read that file. If the filename is followed
by an exclamation point (!) and a number, say n, the n-th column will be used.
There are three file formats recognized by this
class. The first is a simple
whitespace-delimited table of values,
the second generates a table from a
function, and the third contains a simple functional form as described above with optional parameters. Each of these formats accepts comments, which is any text
following a semicolon and continuing to the end of the line.
When opening a file, the software first looks in the current directory of the application for the file. If the file does not exist, it uses the SCATMECH environment variable to
find the file. The formats are described in more detail below.
Simple Table Format
The simple table format has two or more columns. Each row contains the same number of columns. The columns are separated by whitespace (space, tab, etc.). An example of a simple table is:
; These data are being used for an example...
0 2 7 9
0.1 2.2 6.8 9.9
0.2 2.5 6.5 10.3 ; This is the third row
0.3 2.8 6.1 10.9
0.4 3.1 5.8 11.2
Notice the two comments. Each row must have the same number of columns. Text preceding the first row containing only numbers (aside from comments) is treated as a header. The file may have
blank rows, which are ignored. Any row not having as many columns as the first row will be ignored.
Function Table Format
The function table format creates a table using a functional
form. The function can have parameters, which are given
default values that can be changed at a later
time. The following example creates a generic Cauchy formula
with three columns and three parameters:
PARAMETERS
b 1.4580 ; The Cauchy B parameter
c 0.00354 ; The Cauchy C parameter
d 0 ; The Cauchy D parameter
END
; The wavelength is scanned from 0.2 um to 1.6 um in steps of 10 nm.
FOR lambda FROM 0.2 TO 1.6 BY 0.01
WORKING
term1 b
term2 c/lambda^2
term3 d/lambda^4
n term1+term2+term3
k 0
END
VALUES
lambda ; The first column
n ; The second column
k ; The third column
END
There are four blocks (PARAMETERS, FOR, WORKING, and VALUES) in the file.
In the PARAMETERS block, each of the parameters and their default values are listed. The block ends with the word END.
The second block iterates a variable (in the example: lambda)
from a starting value, to an ending value, with an increment
value. In this example, the variable is used as the first
column in the table, but that does not have to be the case.
The third block (WORKING) contains pairs of variables and
expressions. Each expression, which cannot contain spaces
unless surrounded by double-quotation marks, is evaluated and
assigned to the variable. The WORKING block must end with the word END.
The fourth block (VALUES) defines the values that make up the
columns in the table. In this example, three values (lambda,
n, and k) make up the table columns. The VALUES block must
end with the word END.
Whitespace and linefeeds are ignored in the file, except insofar as they delimit words, and comments end at the next linefeed.
The parameters can be assigned different values later by using the set_parameter function. If the Table is
a member of a Model class, then the parameters can be assigned through the Model's set_parameter function, as if the
parameters were sub-parameters (e.g., via table.a, table.b, and table.c).
Simple Function Format
The simple function format does not create a lookup table. Instead, each time the function is needed, an expression is evaluated. An example for the simple function format,
using the Cauchy formula above, is
PARAMETERS
b 1.4580 ; The Cauchy B parameter
c 0.00354 ; The Cauchy C parameter
d 0 ; The Cauchy D parameter
END
@lambda:(b+c/lambda^2+d/lambda^4,0)
There are only two blocks (PARAMETERS and the function itself) in the file.
In the PARAMETERS block, each of the parameters and their default values are listed. The block ends with the word END.
The function itself uses the format described above. That is, the functional form must start with an ampersand (@), be followed by an independent variable name
(in the example, lambda), a colon (:), and an expression. The expression can have multiple values, separated by commas and optionally in parentheses. The
first value is treated as if it were the second column in a table, etc. The independent variable is treated as the first column in the table.
This example can be used as a dielectric_function, since the function returns two values, corresponding to columns 2 and 3 of a table (column 1 is lambda).
Whitespace and linefeeds are ignored in the file, except insofar as they delimit words, and comments end at the next linefeed.
The parameters can be assigned different values later by using the set_parameter function. If the Table is
a member of a Model class, then the parameters can be assigned through the Model's set_parameter function, as if the
parameters were sub-parameters (e.g., via table.a, table.b, and table.c.)
Notice that there is no WORKING section, so intermediate, temporary variables cannot be used.
Class constructors. In
the first two constructors, the class will read columns 1
and col of the file given by filename. In the third
constructor, the class will be initialized with a constant
value singlevalue. In the fourth constructor, two
arrays of length n, x and y will be
used to fill the table. In the fifth and sixth
constructors, vectors x and y or a vector of
pairs v are used to fill the table. Note that the
latter arrays must be of the same length.
Top of Page
Functions which evaluates the table at a specific value lambda.
Top of Page
Function which will set the table contents based upon the string filename.. The function will read columns 1 and ycol.
Top of Page
By default, a table is interpolated linearly. Other choices are available to the user.
The independent variable (x) may be interpolated linearly (LIN) or logarithmically (LOG).
The dependent variable (y) may be interpolated linearly (LIN), logarithmically (LOG), as
a cubic spline (SPLINE), or as a cubic spline on a logarithmic scale (LOGSPLINE).
Top of Page
Functions to set and get the interpolation mode for each of the axes of the Table.
By default, a Table is interpolated linearly for both the xy axes.
The independent variable (x) may be interpolated linearly (LIN) or logarithmically (LOG).
The dependent variable (y) may be interpolated linearly (LIN), logarithmically (LOG), as
a cubic spline (SPLINE), or as a cubic spline on a logarithmic scale (LOGSPLINE).
Top of Page
Functions to set and get parameters of the Table. The parameters may be interpolationx, interpolationy, or, if
the Table is read in from a formula file, any of the parameters in the formula file.
Top of Page
Functions which prompt the user for either a value or a
filename.
Example:
Table reflectance = Table::AskUser("Reflectance","reflectance.dat");
Top of Page
When table files are read, their information
is read into a cache, increasing the speed at which
subsequent calls are made or when reading multiple
columns. This function clears that cache. Clearing the cache is useful,
if it is known that the file needs to be read in again or memory needs to be freed.
Top of Page
For More Information
SCATMECH Technical Information and Questions
Sensor Science Division Home Page
Sensor Science Division Inquiries
Website Comments
Current SCATMECH version: 7.22 (April 2021)