mirror of
https://github.com/CHN-beta/ufo.git
synced 2024-10-22 19:58:44 +08:00
fix hdf5 read/write bug
This commit is contained in:
parent
7cf384bf6c
commit
9721976e4c
@ -104,23 +104,32 @@ namespace ufo
|
||||
return output;
|
||||
}
|
||||
|
||||
class Hdf5File
|
||||
class Hdf5file
|
||||
{
|
||||
public:
|
||||
inline Hdf5File(std::string filename) : File_(filename, HighFive::File::ReadWrite
|
||||
| HighFive::File::Create | HighFive::File::Truncate) {}
|
||||
template <typename T> inline Hdf5File& read(T& object, std::string name)
|
||||
inline Hdf5file& open_for_read(std::string filename)
|
||||
{
|
||||
object = File_.getDataSet(name).read<std::remove_cvref_t<decltype(object)>>();
|
||||
File_ = HighFive::File(filename, HighFive::File::ReadOnly);
|
||||
return *this;
|
||||
}
|
||||
template <typename T> inline Hdf5File& write(const T& object, std::string name)
|
||||
inline Hdf5file& open_for_write(std::string filename)
|
||||
{
|
||||
File_.createDataSet(name, object);
|
||||
File_ = HighFive::File(filename, HighFive::File::ReadWrite | HighFive::File::Create
|
||||
| HighFive::File::Truncate);
|
||||
return *this;
|
||||
}
|
||||
template <typename T> inline Hdf5file& read(T& object, std::string name)
|
||||
{
|
||||
object = File_->getDataSet(name).read<std::remove_cvref_t<decltype(object)>>();
|
||||
return *this;
|
||||
}
|
||||
template <typename T> inline Hdf5file& write(const T& object, std::string name)
|
||||
{
|
||||
File_->createDataSet(name, object);
|
||||
return *this;
|
||||
}
|
||||
protected:
|
||||
HighFive::File File_;
|
||||
std::optional<HighFive::File> File_;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ namespace ufo
|
||||
{
|
||||
std::vector resolution{ Resolution.first, Resolution.second };
|
||||
std::vector range{ Range.first, Range.second };
|
||||
Hdf5File(filename).write(Values, "Values")
|
||||
Hdf5file{}.open_for_write(filename).write(Values, "Values")
|
||||
.write(XTicks, "XTicks")
|
||||
.write(YTicks, "YTicks")
|
||||
.write(resolution, "Resolution")
|
||||
|
@ -135,7 +135,7 @@ namespace ufo
|
||||
{
|
||||
std::vector<std::vector<std::vector<double>>> frequency, path;
|
||||
std::vector<std::vector<std::vector<std::vector<PhonopyComplex>>>> eigenvector_vector;
|
||||
Hdf5File(QpointDataInputFile.FileName).read(frequency, "/frequency")
|
||||
Hdf5file{}.open_for_read(QpointDataInputFile.FileName).read(frequency, "/frequency")
|
||||
.read(eigenvector_vector, "/eigenvector")
|
||||
.read(path, "/path");
|
||||
std::vector size = { frequency.size(), frequency[0].size(), frequency[0][0].size() };
|
||||
@ -247,7 +247,7 @@ namespace ufo
|
||||
Weight.back().push_back(mode.Weight);
|
||||
}
|
||||
}
|
||||
Hdf5File(filename).write(Qpoint, "/Qpoint")
|
||||
Hdf5file{}.open_for_write(filename).write(Qpoint, "/Qpoint")
|
||||
.write(Source, "/Source")
|
||||
.write(Frequency, "/Frequency")
|
||||
.write(Weight, "/Weight");
|
||||
|
Loading…
Reference in New Issue
Block a user