23 #ifndef O2SCL_HDF_FILE_H
24 #define O2SCL_HDF_FILE_H
33 #include <boost/numeric/ublas/vector.hpp>
34 #include <boost/numeric/ublas/matrix.hpp>
36 #include <o2scl/vector.h>
37 #include <o2scl/tensor.h>
38 #include <o2scl/format_float.h>
102 #ifndef DOXYGEN_INTERNAL
121 size_t ch=(size_t)((1.0+1.0e-12)*
122 pow(10.0,floor(log10(((
double)n))+0.5)));
124 if (ch>1000000) ch=1000000;
150 int open(std::string fname,
bool err_on_fail=
true);
178 int getc(std::string name,
char &c);
181 int getd(std::string name,
double &d);
184 int getf(std::string name,
float &f);
187 int geti(std::string name,
int &i);
190 int get_szt(std::string name,
size_t &u);
200 int gets(std::string name, std::string &s);
204 int gets_fixed(std::string name, std::string &s);
209 int gets_def_fixed(std::string name, std::string def, std::string &s);
215 void setc(std::string name,
char c);
218 void setd(std::string name,
double d);
221 void setf(std::string name,
float f);
224 void seti(std::string name,
int i);
227 void set_szt(std::string name,
size_t u);
234 void sets(std::string name, std::string s);
243 void sets_fixed(std::string name, std::string s);
255 hid_t
open_group(hid_t init_id, std::string path);
267 return H5Gclose(group);
279 int getd_vec(std::string name, std::vector<double> &v);
294 template<
class vec_t>
296 std::vector<double> v2;
304 int geti_vec(std::string name, std::vector<int> &v);
310 template<
class vec_
int_t>
315 for(
size_t i=0;i<v2.size();i++) v[i]=v2[i];
319 int get_szt_vec(std::string name, std::vector<size_t> &v);
325 template<
class vec_
size_t>
330 for(
size_t i=0;i<v2.size();i++) v[i]=v2[i];
335 int gets_vec(std::string name, std::vector<std::string> &s);
346 int setd_vec(std::string name,
const std::vector<double> &v);
353 template<
class vec_t>
360 std::vector<double> v2(v.size());
363 return setd_arr(name,v2.size(),&v2[0]);
367 int seti_vec(std::string name,
const std::vector<int> &v);
373 template<
class vec_
int_t>
380 std::vector<int> v2(v.size());
383 return seti_arr(name,v2.size(),&v2[0]);
386 int set_szt_vec(std::string name,
const std::vector<size_t> &v);
392 template<
class vec_
size_t>
399 std::vector<size_t> v2(v.size());
413 int sets_vec(std::string name, std::vector<std::string> &s);
439 int seti_mat_copy(std::string name,
const ubmatrix_int &m);
456 template<
class vec_t,
class vec_
size_t>
472 std::vector<size_t> > &t);
481 template<
class vec_t,
class vec_
size_t>
484 std::vector<size_t> > &t) {
506 int getc_arr(std::string name,
size_t n,
char *c);
514 int getd_arr(std::string name,
size_t n,
double *d);
522 int getf_arr(std::string name,
size_t n,
float *f);
530 int geti_arr(std::string name,
size_t n,
int *i);
556 int setc_arr(std::string name,
size_t n,
const char *c);
559 int setd_arr(std::string name,
size_t n,
const double *d);
561 int setd_arr_comp(std::string name,
size_t n,
const double *d);
564 int setf_arr(std::string name,
size_t n,
const float *f);
567 int seti_arr(std::string name,
size_t n,
const int *i);
570 int set_szt_arr(std::string name,
size_t n,
const size_t *u);
601 int getc_def(std::string name,
char def,
char &c);
604 int getd_def(std::string name,
double def,
double &d);
607 int getf_def(std::string name,
float def,
float &f);
610 int geti_def(std::string name,
int def,
int &i);
613 int get_szt_def(std::string name,
size_t def,
size_t &i);
616 int gets_def(std::string name, std::string def, std::string &s);
645 std::string &group_name,
int verbose=0);
654 std::string &type,
int verbose=0);
657 #ifndef DOXYGEN_INTERNAL
681 std::string group_name;
695 const H5L_info_t *inf,
void *op_data);
706 const H5L_info_t *inf,
void *op_data);
int getf_arr_alloc(std::string name, size_t &n, float *f)
Get a float array named name of size n.
int seti_vec_copy(std::string name, vec_int_t &v)
Set vector dataset named name with v.
int getd_ten_copy(std::string name, o2scl::tensor< vec_t, vec_size_t > &t)
Get a tensor from an HDF file.
int open(std::string fname, bool err_on_fail=true)
Open a file named fname.
hid_t current
Current file or group location.
int getd_vec(std::string name, std::vector< double > &v)
Get vector dataset and place data in v.
int setd_mat_copy(std::string name, const ubmatrix &m)
Set matrix dataset named name with m.
int setd_vec_copy(std::string name, const vec_t &v)
Set vector dataset named name with v.
int setd_vec(std::string name, const std::vector< double > &v)
Set vector dataset named name with v.
int setd_arr(std::string name, size_t n, const double *d)
Set a double array named name of size n to value d.
int geti(std::string name, int &i)
Get a integer named name.
int getd_arr(std::string name, size_t n, double *d)
Get a double array named name of size n.
int set_szt_vec(std::string name, const std::vector< size_t > &v)
Set vector dataset named name with v.
int get_szt_def(std::string name, size_t def, size_t &i)
Get a size_t named name.
int getf_arr(std::string name, size_t n, float *f)
Get a float array named name of size n.
void close()
Close the file.
void set_szt(std::string name, size_t u)
Set an unsigned integer named name to value u.
int getd(std::string name, double &d)
Get a double named name.
void setd(std::string name, double d)
Set a double named name to value d.
int gets_def(std::string name, std::string def, std::string &s)
Get a string named name.
int find_group_by_name(hdf_file &hf, std::string name, std::string &type, int verbose=0)
Look in hdf_file hf for an O<span style='position: relative; top: 0.3em; font-size: 0...
bool file_open
True if a file has been opened.
int setf_arr(std::string name, size_t n, const float *f)
Set a float array named name of size n to value f.
int iterate_match_name(hid_t loc, const char *name, const H5L_info_t *inf, void *op_data)
Look at location loc in an HDF file for an O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl object with a specified name.
int set_szt_arr(std::string name, size_t n, const size_t *u)
Set a integer array named name of size n to value i.
int getd_ten(std::string name, o2scl::tensor< std::vector< double >, std::vector< size_t > > &t)
Get a tensor from an HDF file.
int getc_arr(std::string name, size_t n, char *c)
Get a character array named name of size n.
int getc_arr_alloc(std::string name, size_t &n, char *c)
Get a character array named name of size n.
void seti(std::string name, int i)
Set an integer named name to value i.
int setd_arr_fixed(std::string name, size_t n, const double *c)
Set a double array named name of size n to value d.
void sets_fixed(std::string name, std::string s)
Set a fixed-length string named name to value s.
int geti_vec_copy(std::string name, vec_int_t &v)
Get vector dataset and place data in v.
int geti_arr_alloc(std::string name, size_t &n, int *i)
Get an integer array named name of size n.
int geti_arr(std::string name, size_t n, int *i)
Get an integer array named name of size n.
int iterate_match_type(hid_t loc, const char *name, const H5L_info_t *inf, void *op_data)
Look at location loc in an HDF file for an O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl object of a specified type.
int get_szt(std::string name, size_t &u)
Get an unsigned integer named name.
hid_t get_current_id()
Retrieve the current working id.
int getf_def(std::string name, float def, float &f)
Get a float named name.
An internal structure to pass information to and from iterate_match_type() and iterate_match_name() ...
int getd_vec_prealloc(std::string name, size_t n, double *d)
Get a double array d pre-allocated to have size n.
int geti_vec(std::string name, std::vector< int > &v)
Get vector dataset and place data in v.
void sets(std::string name, std::string s)
Set a string named name to value s.
int setd_ten_copy(std::string name, const o2scl::tensor< std::vector< double >, std::vector< size_t > > &t)
Write a tensor to an HDF file.
int close_group(hid_t group)
Close a previously created group.
int getf(std::string name, float &f)
Get a float named name.
int gets_fixed(std::string name, std::string &s)
Get a fixed-length string named name.
int setc_arr(std::string name, size_t n, const char *c)
Set a character array named name of size n to value c.
int geti_def(std::string name, int def, int &i)
Get a integer named name.
void open_or_create(std::string fname)
Open a file named fname or create if it doesn't already exist.
int getd_mat_copy(std::string name, ubmatrix &m)
Get matrix dataset and place data in m.
int seti_vec(std::string name, const std::vector< int > &v)
Set vector dataset named name with v.
int set_szt_vec_copy(std::string name, vec_size_t &v)
Set vector dataset named name with v.
int setd_ten(std::string name, const o2scl::tensor< std::vector< double >, std::vector< size_t > > &t)
Write a tensor to an HDF file.
void set_current_id(hid_t cur)
Set the current working id.
int geti_vec_prealloc(std::string name, size_t n, int *i)
Get an integer array i pre-allocated to have size n.
int getd_def(std::string name, double def, double &d)
Get a double named name.
int setf_arr_fixed(std::string name, size_t n, const float *f)
Set a float array named name of size n to value f.
int geti_mat_prealloc(std::string name, size_t n, size_t m, int *i)
Get an integer matrix i pre-allocated to have size (n,m)
int find_group_by_type(hdf_file &hf, std::string type, std::string &group_name, int verbose=0)
Look in hdf_file hf for an O<span style='position: relative; top: 0.3em; font-size: 0...
int geti_mat_copy(std::string name, ubmatrix_int &m)
Get matrix dataset and place data in m.
int getd_mat_prealloc(std::string name, size_t n, size_t m, double *d)
Get a double matrix d pre-allocated to have size (n,m)
virtual hsize_t def_chunk(size_t n)
Default chunk size.
hid_t get_file_id()
Get the current file id.
Store data in an O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl...
int sets_vec(std::string name, std::vector< std::string > &s)
Set a vector of strings named name.
int getc(std::string name, char &c)
Get a character named name.
int gets_vec(std::string name, std::vector< std::string > &s)
Get a vector of strings named name and store it in s.
int setc_arr_fixed(std::string name, size_t n, const char *c)
Set a character array named name of size n to value c.
void vector_copy(vec_t &src, vec2_t &dest)
Simple generic vector copy.
void setc(std::string name, char c)
Set a character named name to value c.
int gets(std::string name, std::string &s)
Get a string named name.
int seti_arr_fixed(std::string name, size_t n, const int *i)
Set an integer array named name of size n to value i.
int getd_vec_copy(std::string name, vec_t &v)
Get vector dataset and place data in v.
int get_szt_vec_copy(std::string name, vec_size_t &v)
Get vector dataset and place data in v.
void setf(std::string name, float f)
Set a float named name to value f.
int gets_def_fixed(std::string name, std::string def, std::string &s)
Get a fixed-length string named name with default value s.
int get_szt_vec(std::string name, std::vector< size_t > &v)
Get vector dataset and place data in v.
int getd_arr_alloc(std::string name, size_t &n, double *d)
Get a double array named name of size n.
int seti_arr(std::string name, size_t n, const int *i)
Set a integer array named name of size n to value i.
Tensor class with arbitrary dimensions.
hid_t open_group(hid_t init_id, std::string path)
Open a group relative to the location specified in init_id.
int getc_def(std::string name, char def, char &c)
Get a character named name.