Class table3d (o2scl)¶
-
class
o2scl
::
table3d
¶ A data structure containing one or more slices of two-dimensional data points defined on a grid.
- Idea for Future:
Improve interpolation and derivative caching, possibly through non-const versions of the interpolation functions.
- Idea for Future:
Should there be a clear_grid() function separate from clear_data() and clear()?
- Idea for Future:
Allow the user to more clearly probe ‘size_set’ vs. ‘xy_set’? (AWS 07/18: This is apparently resolved.)
Initialization
-
template<class
vec_t
, classvec2_t
>
voidset_xy
(std::string x_name, size_t nx, const vec_t &x, std::string y_name, size_t ny, const vec2_t &y)¶ Initialize the x-y grid.
This function will not allow you to redefine the grid when there is data in the if a grid of a different size was already set from a previous call to either set_xy() or set_size(). However, you may freely redefine the grid after a call to clear_data() or clear_table(). You may change individual grid points at any time with set_grid_x() and set_grid_y().
-
void
set_xy
(std::string x_name, uniform_grid<double> gx, std::string y_name, uniform_grid<double> gy)¶ Initialize the x-y grid with uniform_grid objects.
This function will not allow you to redefine the grid when there is data in the if a grid of a different size was already set from a previous call to either set_xy() or set_size(). However, you may freely redefine the grid after a call to clear_data() or clear_table(). You may change individual grid points at any time with set_grid_x() and set_grid_y().
-
void
set_size
(size_t nx, size_t ny)¶ Initialize size.
This function will not allow you to resize the if it already has data or if the size has already been set with the set_xy() function, unless you clear the data with clear_data() or the with clear_table() first.
On-grid get and set methods
-
void
set
(size_t ix, size_t iy, std::string name, double val)¶ Set element in slice
name
at locationix,iy
to valueval
.
-
void
set
(size_t ix, size_t iy, size_t z, double val)¶ Set element in slice of index
z
at locationix,iy
to valueval
.
-
double &
get
(size_t ix, size_t iy, std::string name)¶ Get element in slice
name
at locationix,iy
-
const double &
get
(size_t ix, size_t iy, std::string name) const¶ Get element in slice
name
at locationix,iy
(const version)
-
double &
get
(size_t ix, size_t iy, size_t z)¶ Get element in slice of index
z
at locationix,iy
-
const double &
get
(size_t ix, size_t iy, size_t z) const¶ Get element in slice of index
z
at locationix,iy
(const version)
Off-grid get and set methods
These methods return the value of a slice on the grid point nearest to a user-specified location. For interpolation into a point off the grid, use table3d::interp().
-
void
set_val
(double x, double y, std::string name, double val)¶ Set element in slice
name
at the nearest location tox,y
to valueval
.
-
void
set_val
(double x, double y, size_t z, double val)¶ Set element in slice of index
z
at the nearest location tox,y
to valueval
.
-
double &
get_val
(double x, double y, std::string name)¶ Get element in slice
name
at location closest tox,y
-
const double &
get_val
(double x, double y, std::string name) const¶ Get element in slice
name
at location closest tox,y
-
double &
get_val
(double x, double y, size_t z)¶ Get element in slice of index
z
at location closest tox,y
-
const double &
get_val
(double x, double y, size_t z) const¶ Get element in slice of index
z
at location closest tox,y
Off-grid get and set methods returning nearest point
-
void
set_val_ret
(double &x, double &y, std::string name, double val)¶ Set element in slice
name
at the nearest location tox,y
to valueval
.
-
void
set_val_ret
(double &x, double &y, size_t z, double val)¶ Set element in slice of index
z
at the nearest location tox,y
to valueval
.
-
double &
get_val_ret
(double &x, double &y, std::string name)¶ Get element in slice
name
at location closest tox,y
, and also return the corresponding values ofx
andy
.
-
const double &
get_val_ret
(double &x, double &y, std::string name) const¶ Get element in slice
name
at location closest tox,y
, and also return the corresponding values ofx
andy
.
-
double &
get_val_ret
(double &x, double &y, size_t z)¶ Get element in slice of index
z
at location closest tox,y
, and also return the corresponding values ofx
andy
.
-
const double &
get_val_ret
(double &x, double &y, size_t z) const¶ Get element in slice of index
z
at location closest tox,y
, and also return the corresponding values ofx
andy
.
-
void
add_slice_from_table
(table3d &source, std::string slice, std::string dest_slice = "")¶ This function adds a slice from a different table3d object, interpolating the results into the current table3d object.
Grid information get and set methods
-
void
set_grid_x
(size_t ix, double val)¶ Set x grid point at index
ix
.
-
void
set_grid_y
(size_t iy, double val)¶ Set y grid point at index
iy
.
-
double
get_grid_x
(size_t ix) const¶ Get x grid point at index
ix
.
-
double
get_grid_y
(size_t iy) const¶ Get y grid point at index
iy
.
-
std::string
get_x_name
() const¶ Get the name of the x grid variable.
-
std::string
get_y_name
() const¶ Get the name of the y grid variable.
-
void
set_x_name
(std::string name)¶ Set the name of the x grid variable.
-
void
set_y_name
(std::string name)¶ Set the name of the y grid variable.
Size get methods
-
void
get_size
(size_t &nx, size_t &ny) const¶ Get the size of the slices.
-
size_t
get_nx
() const¶ Get the x size.
-
size_t
get_ny
() const¶ Get the y size.
-
size_t
get_nslices
() const¶ Get the number of slices.
-
bool
is_size_set
() const¶ True if the size of the table has been set.
-
bool
is_xy_set
() const¶ True if the grid has been set.
Slice manipulation
-
void
line_of_names
(std::string names)¶ Create a set of new slices specified in the string
names
.
-
std::string
get_slice_name
(size_t z) const¶ Returns the name of slice with index
z
.
-
void
new_slice
(std::string name)¶ Add a new slice.
-
void
set_slice_all
(std::string name, double val)¶ Set all of the values in slice
name
toval
.
-
size_t
lookup_slice
(std::string name) const¶ Find the index for slice named
name
.
-
bool
is_slice
(std::string name, size_t &ix) const¶ Return true if slice is already present.
-
void
rename_slice
(std::string olds, std::string news)¶ Rename slice named
olds
tonews
.This is slow since we have to delete the column and re-insert it. This process in turn mangles all of the iterators in the list.
-
void
copy_slice
(std::string src, std::string dest)¶ Make a new slice named
dest
which is a copy of the slice with name given insrc
.
-
void
init_slice
(std::string scol, double val)¶ Initialize all values of slice named
scol
toval
.- Note
This will call the error handler if the value
val
is not finite (i.e. eitherInf
orNaN
).
Lookup and search methods
-
void
lookup_x
(double val, size_t &ix) const¶ Look for a value in the x grid.
-
void
lookup_y
(double val, size_t &iy) const¶ Look for a value in the y grid.
-
void
lookup
(double val, std::string slice, size_t &ix, size_t &iy) const¶ Look for a value in a specified slice.
Interpolation, differentiation, and integration
-
void
set_interp_type
(size_t interp_type)¶ Specify the interpolation type.
-
size_t
get_interp_type
() const¶ Get the interpolation type.
-
double
interp
(double x, double y, std::string name) const¶ Interpolate
x
andy
in slice namedname
.
-
double
deriv_x
(double x, double y, std::string name) const¶ Interpolate the derivative of the data with respect to the x grid at point
x
andy
in slice namedname
.
-
double
deriv_y
(double x, double y, std::string name) const¶ Interpolate the derivative of the data with respect to the y grid at point
x
andy
in slice namedname
.
-
double
deriv_xy
(double x, double y, std::string name) const¶ Interpolate the mixed second derivative of the data at point
x
andy
in slice namedname
.
-
double
integ_x
(double x1, double x2, double y, std::string name) const¶ Interpolate the integral of the data respect to the x grid.
-
double
integ_y
(double x, double y1, double y2, std::string name) const¶ Interpolate the integral of the data respect to the y grid.
-
template<class
vec_t
>
voidinterp_slices
(double x, double y, size_t nv, vec_t &v)¶ Fill a vector of interpolated values from each slice at the point
x,y
-
void
deriv_x
(std::string fname, std::string fpname)¶ Create a new slice, named
fpname
, containing the derivative offname
with respect to the x coordinate.
-
void
deriv_y
(std::string fname, std::string fpname)¶ Create a new slice, named
fpname
, containing the derivative offname
with respect to the y coordinate.
Extract 2-dimensional tables
Clear methods
-
void
zero_table
()¶ Zero the data entries but keep the slice names and grid.
-
void
clear
()¶ Clear everything.
-
void
clear_data
()¶ Remove all of the data by setting the number of lines to zero.
This leaves the column names intact and does not remove the constants.
Summary method
-
void
summary
(std::ostream *out, int ncol = 79) const¶ Output a summary of the information stored.
Outputs the number of constants, the grid information, and a list of the slice names
Contour lines method
-
template<class
vec_t
>
voidslice_contours
(std::string name, size_t nlev, vec_t &levs, std::vector<contour_line> &clines)¶ Create contour lines from the slice named
name
.This uses contour to compute contour lines (stored in
clines
) from slicename
givennlev
contour levels inlevs
.
Manipulating constants
-
void
add_constant
(std::string name, double val)¶ Add a constant, or if the constant already exists, change its value.
-
void
remove_constant
(std::string name)¶ Remove a constant.
-
int
set_constant
(std::string name, double val, bool err_on_notfound = true)¶ Set a constant equal to a value, but don’t add it if not already present.
If
err_on_notfound
istrue
(the default), then this function throws an exception if a constant with namename
is not found. Iferr_on_notfound
isfalse
, then if a constant with namename
is not found this function just silently returns o2scl::exc_enotfound.
-
bool
is_constant
(std::string name) const¶ Test if
name
is a constant.
-
double
get_constant
(std::string name)¶ Get a constant.
-
void
get_constant
(size_t ix, std::string &name, double &val) const¶ Get a constant by index.
-
size_t
get_nconsts
() const¶ Get the number of constants.
Miscellaneous methods
-
int
read_gen3_list
(std::istream &fin, int verbose = 0, double eps = 1.0e-12)¶ Read a generic table3d object specified as a text file.
This function reads a set of columns of numerical values, presuming that the first column is the x-grid value, the second column is the y-grid value, and the remaining columns are slices to be added. If the first row appears to be strings rather than numerical values, then the first row is used for the x name, y name, and slice names. Values in the first two columns which differ by less than
eps
are assumed to refer to the same grid point. If not all combinations of x and y are found, then those entries are left unchanged in all slices.- Idea for Future:
It would be great to add a function which generates a text file in this format as well.
-
template<class
vec_t
>
intread_table
(const o2scl::table<vec_t> &tab, std::string xname2 = "", std::string yname2 = "", double empty_value = 0.0, int verbose = 0, bool err_on_fail = true, double eps = 1.0e-12)¶ Set the current table3d object by reading a o2scl::table.
-
const char *
type
()¶ Return the type,
"table3d"
.
Parsing mathematical functions specified as strings
-
template<class
resize_mat_t
>
intfunction_matrix
(std::string function, resize_mat_t &mat, bool throw_on_err = true)¶ Fill a matrix from the function specified in
function
.
-
void
function_slice
(std::string function, std::string col)¶ Make a column from
function
and add it to the table.If the column already exists, the data already present is overwritten with the result.
-
table3d
slice_to_uniform_grid
(std::string slice, size_t xpts, bool log_x, size_t ypts, bool log_y)¶ Copy slice named
slice
to a new o2scl::table3d object with a uniform grid using the current interpolation type.
-
table3d
table_to_uniform_grid
(size_t xpts, bool log_x, size_t ypts, bool log_y)¶ Copy entire table to a new o2scl::table3d object with a uniform grid using the current interpolation type.
Iterator types
-
typedef std::map<std::string, size_t, std::greater<std::string>>::iterator
map_iter
¶
-
typedef std::map<std::string, size_t, std::greater<std::string>>::const_iterator
map_const_iter
¶
Data storage
-
std::map<std::string, double>
constants
¶ The list of constants.
-
size_t
numx
¶ The size of the x grid.
-
size_t
numy
¶ The size of the y grid.
-
std::map<std::string, size_t, std::greater<std::string>>
tree
¶ A tree connecting column names to list indexes.
-
std::string
xname
¶ The name for the x grid.
-
std::string
yname
¶ The name for the y grid.
-
bool
xy_set
¶ True if the grid has been set.
-
bool
size_set
¶ True if the size of the grid has been set.
-
bool
has_slice
¶ True if the table has at least one slice.
-
size_t
itype
¶ The interpolation type.
Tree iterator boundaries
-
map_const_iter
const_begin
() const¶ Return the beginning of the slice tree.
-
map_const_iter
const_end
() const¶ Return the end of the slice tree.
Public Types
-
typedef boost::numeric::ublas::vector<double>
ubvector
¶
-
typedef boost::numeric::ublas::matrix<double>
ubmatrix
¶
Public Functions
-
table3d
()¶ Create a new 3D.
-
~table3d
()¶
-
table3d
(o2scl::table_units<> &t, std::string colx, std::string coly)¶ Create a table3d object from a table, assuming
scolx
andscoly
store the x- and y-grid data, respectively.