forked from ISISNeutronMuon/digital-muon-pipeline
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdataset.rs
More file actions
76 lines (65 loc) · 2.89 KB
/
dataset.rs
File metadata and controls
76 lines (65 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use super::{
error::{ConvertResult, NexusHDF5Result},
DatasetExt, HasAttributesExt,
};
use crate::run_engine::NexusDateTime;
use hdf5::{types::VarLenUnicode, Attribute, Dataset, H5Type};
use ndarray::s;
impl HasAttributesExt for Dataset {
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn add_attribute<T: H5Type>(&self, attr: &str) -> NexusHDF5Result<Attribute> {
let attr = self.new_attr::<T>().create(attr).err_dataset(self)?;
Ok(attr)
}
fn add_string_attribute(&self, attr: &str) -> NexusHDF5Result<Attribute> {
self.add_attribute::<VarLenUnicode>(attr)
}
fn add_constant_string_attribute(&self, attr: &str, value: &str) -> NexusHDF5Result<Attribute> {
let attr = self.add_string_attribute(attr)?;
attr.write_scalar(&value.parse::<VarLenUnicode>().err_dataset(self)?)
.err_dataset(self)?;
Ok(attr)
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn get_attribute(&self, attr: &str) -> NexusHDF5Result<Attribute> {
self.attr(attr).err_dataset(self)
}
}
impl DatasetExt for Dataset {
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn set_scalar<T: H5Type>(&self, value: &T) -> NexusHDF5Result<()> {
self.write_scalar(value).err_dataset(self)
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn set_string(&self, value: &str) -> NexusHDF5Result<()> {
self.write_scalar(&value.parse::<VarLenUnicode>().err_dataset(self)?)
.err_dataset(self)
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn get_string(&self) -> NexusHDF5Result<String> {
let string: VarLenUnicode = self.read_scalar().err_dataset(self)?;
Ok(string.into())
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn get_datetime(&self) -> NexusHDF5Result<NexusDateTime> {
let string: VarLenUnicode = self.read_scalar().err_dataset(self)?;
string.parse().err_dataset(self)
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn set_slice<T: H5Type>(&self, value: &[T]) -> NexusHDF5Result<()> {
self.resize(value.len()).err_dataset(self)?;
self.write_raw(value).err_dataset(self)
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn append_value<T: H5Type>(&self, value: T) -> NexusHDF5Result<()> {
self.append_slice(&[value]).err_dataset(self)
}
#[tracing::instrument(skip_all, level = "debug", err(level = "warn"))]
fn append_slice<T: H5Type>(&self, value: &[T]) -> NexusHDF5Result<()> {
let cur_size = self.size();
let new_size = cur_size + value.len();
self.resize(new_size).err_dataset(self)?;
self.write_slice(value, s![cur_size..new_size])
.err_dataset(self)
}
}