QMCPACK
ObservableHelper Class Reference

define ObservableHelper More...

+ Collaboration diagram for ObservableHelper:

Public Member Functions

 ObservableHelper (hdf_path title)
 Favored constructor. More...
 
 ObservableHelper (const ObservableHelper &)=delete
 delete copy constructor as hdf5 handlers must have unique owners More...
 
ObservableHelperoperator= (const ObservableHelper &)=delete
 
 ObservableHelper (ObservableHelper &&) noexcept=default
 Move constructor. More...
 
ObservableHelperoperator= (ObservableHelper &&) noexcept=default
 
 ~ObservableHelper ()
 Destructor closes hdf5 remaining resources. More...
 
void set_dimensions (const std::vector< int > &dims, int first)
 set the shape of this observable More...
 
template<typename T >
void addProperty (T &p, const std::string &pname, hdf_archive &file)
 add named property to describe the collectable this helper class handles More...
 
void addProperty (float &p, const std::string &pname, hdf_archive &file)
 
void addProperty (Tensor< float, OHMMS_DIM > &p, const std::string &pname, hdf_archive &file)
 
void addProperty (Matrix< float > &p, const std::string &pname, hdf_archive &file)
 
void addProperty (TinyVector< float, OHMMS_DIM > &p, const std::string &pname, hdf_archive &file)
 
void addProperty (std::vector< float > &p, const std::string &pname, hdf_archive &file)
 
void addProperty (std::vector< TinyVector< float, OHMMS_DIM >> &p, const std::string &pname, hdf_archive &file)
 
void write (const value_type *const first_v, hdf_archive &file)
 

Public Attributes

hsize_t lower_bound = 0
 starting index More...
 

Private Attributes

hsize_t current = 0
 "file pointer" for h5d_append More...
 
hdf_path group_name
 Path of this observable. More...
 
std::vector< hsize_t > mydims
 my dimensions More...
 
std::vector< hsize_t > offsets
 offsets More...
 

Detailed Description

define ObservableHelper

This is a helper class to manage a hdf5 dagroup for each collectable. The data handled by an Estimator should be presented by dense N-dim array in C. /observables/title/value

Definition at line 36 of file ObservableHelper.h.

Constructor & Destructor Documentation

◆ ObservableHelper() [1/3]

Favored constructor.

Parameters
[in]titleis the ordered hdf5 group path elements of the observable

Definition at line 23 of file ObservableHelper.cpp.

23 : group_name(std::move(title)) {}
hdf_path group_name
Path of this observable.

◆ ObservableHelper() [2/3]

ObservableHelper ( const ObservableHelper )
delete

delete copy constructor as hdf5 handlers must have unique owners

◆ ObservableHelper() [3/3]

ObservableHelper ( ObservableHelper &&  )
defaultnoexcept

Move constructor.

Parameters
ininput object to be moved to this

◆ ~ObservableHelper()

~ObservableHelper ( )
default

Destructor closes hdf5 remaining resources.

Member Function Documentation

◆ addProperty() [1/7]

void addProperty ( T &  p,
const std::string &  pname,
hdf_archive file 
)
inline

add named property to describe the collectable this helper class handles

Parameters
pany intrinsic datatype including vector, basic containers
pnameproperty

Definition at line 75 of file ObservableHelper.h.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

Referenced by EnergyDensityEstimator::registerCollectables(), StaticStructureFactor::registerCollectables(), SpaceGrid::registerCollectables(), NESpaceGrid< REAL >::registerGrid(), and ReferencePoints::save().

76  {
77  file.push(group_name, true);
78  file.write(p, pname);
79  file.pop();
80  }
hdf_path group_name
Path of this observable.

◆ addProperty() [2/7]

void addProperty ( float &  p,
const std::string &  pname,
hdf_archive file 
)

Definition at line 37 of file ObservableHelper.cpp.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

38 {
39  double p_DP(p);
40  file.push(group_name, true);
41  file.write(p_DP, pname);
42  file.pop();
43 }
hdf_path group_name
Path of this observable.

◆ addProperty() [3/7]

void addProperty ( Tensor< float, OHMMS_DIM > &  p,
const std::string &  pname,
hdf_archive file 
)

Definition at line 45 of file ObservableHelper.cpp.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

46 {
47  Tensor<double, OHMMS_DIM> p_DP(p);
48  file.push(group_name, true);
49  file.write(p_DP, pname);
50  file.pop();
51 }
hdf_path group_name
Path of this observable.

◆ addProperty() [4/7]

void addProperty ( Matrix< float > &  p,
const std::string &  pname,
hdf_archive file 
)

Definition at line 53 of file ObservableHelper.cpp.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

54 {
55  Matrix<double> p_DP;
56  p_DP = p;
57  file.push(group_name, true);
58  file.write(p_DP, pname);
59  file.pop();
60 }
hdf_path group_name
Path of this observable.

◆ addProperty() [5/7]

void addProperty ( TinyVector< float, OHMMS_DIM > &  p,
const std::string &  pname,
hdf_archive file 
)

Definition at line 62 of file ObservableHelper.cpp.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

63 {
65  file.push(group_name, true);
66  file.write(p_DP, pname);
67  file.pop();
68 }
hdf_path group_name
Path of this observable.

◆ addProperty() [6/7]

void addProperty ( std::vector< float > &  p,
const std::string &  pname,
hdf_archive file 
)

Definition at line 70 of file ObservableHelper.cpp.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

71 {
72  std::vector<double> p_DP;
73  p_DP.assign(p.begin(), p.end());
74  file.push(group_name, true);
75  file.write(p_DP, pname);
76  file.pop();
77 }
hdf_path group_name
Path of this observable.

◆ addProperty() [7/7]

void addProperty ( std::vector< TinyVector< float, OHMMS_DIM >> &  p,
const std::string &  pname,
hdf_archive file 
)

Definition at line 79 of file ObservableHelper.cpp.

References ObservableHelper::group_name, hdf_archive::pop(), hdf_archive::push(), and hdf_archive::write().

82 {
83  std::vector<TinyVector<double, OHMMS_DIM>> p_DP;
84  p_DP.assign(p.begin(), p.end());
85  file.push(group_name, true);
86  file.write(p_DP, pname);
87  file.pop();
88 }
hdf_path group_name
Path of this observable.

◆ operator=() [1/2]

ObservableHelper& operator= ( const ObservableHelper )
delete

◆ operator=() [2/2]

ObservableHelper& operator= ( ObservableHelper &&  )
defaultnoexcept

◆ set_dimensions()

void set_dimensions ( const std::vector< int > &  dims,
int  first 
)

set the shape of this observable

Parameters
dimsdimensions
firststarting index

Definition at line 27 of file ObservableHelper.cpp.

References copy(), qmcplusplus::dims, ObservableHelper::lower_bound, ObservableHelper::mydims, ObservableHelper::offsets, and qmcplusplus::rank.

Referenced by SpaceGrid::registerCollectables(), SpinDensity::registerCollectables(), DensityMatrices1B::registerCollectables(), NESpaceGrid< REAL >::registerGrid(), OperatorBase::registerObservables(), MagnetizationDensity::registerOperatorEstimator(), SpinDensityNew::registerOperatorEstimator(), OneBodyDensityMatrices::registerOperatorEstimator(), and qmcplusplus::TEST_CASE().

28 {
29  //rank is increased
30  hsize_t rank = dims.size() + 1;
31  mydims.resize(rank, 1);
32  copy(dims.begin(), dims.end(), mydims.begin() + 1);
33  offsets.resize(rank, 0);
34  lower_bound = first;
35 }
std::vector< hsize_t > offsets
offsets
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
std::vector< hsize_t > mydims
my dimensions
hsize_t lower_bound
starting index
std::vector< int > dims

◆ write()

void write ( const value_type *const  first_v,
hdf_archive file 
)

Definition at line 90 of file ObservableHelper.cpp.

References ObservableHelper::current, ObservableHelper::group_name, qmcplusplus::h5d_append(), ObservableHelper::lower_bound, ObservableHelper::mydims, hdf_archive::pop(), hdf_archive::push(), qmcplusplus::rank, and hdf_archive::top().

91 {
92  hsize_t rank = mydims.size();
93  if (rank)
94  {
95  file.push(group_name, true);
96  h5d_append(file.top(), "value", current, rank, mydims.data(), first_v + lower_bound);
97  file.pop();
98  }
99 }
bool h5d_append(hid_t grp, const std::string &aname, hsize_t &current, hsize_t ndims, const hsize_t *const dims, const T *const first, hsize_t chunk_size=1, hid_t xfer_plist=H5P_DEFAULT)
hsize_t current
"file pointer" for h5d_append
std::vector< hsize_t > mydims
my dimensions
hsize_t lower_bound
starting index
hdf_path group_name
Path of this observable.

Member Data Documentation

◆ current

hsize_t current = 0
private

"file pointer" for h5d_append

Definition at line 96 of file ObservableHelper.h.

Referenced by ObservableHelper::write().

◆ group_name

hdf_path group_name
private

Path of this observable.

Definition at line 98 of file ObservableHelper.h.

Referenced by ObservableHelper::addProperty(), and ObservableHelper::write().

◆ lower_bound

hsize_t lower_bound = 0

starting index

Definition at line 92 of file ObservableHelper.h.

Referenced by ObservableHelper::set_dimensions(), qmcplusplus::TEST_CASE(), and ObservableHelper::write().

◆ mydims

std::vector<hsize_t> mydims
private

my dimensions

Definition at line 100 of file ObservableHelper.h.

Referenced by ObservableHelper::set_dimensions(), and ObservableHelper::write().

◆ offsets

std::vector<hsize_t> offsets
private

offsets

Definition at line 102 of file ObservableHelper.h.

Referenced by ObservableHelper::set_dimensions().


The documentation for this class was generated from the following files: