Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Standardize Sofast measurement HDF format #131

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 5 additions & 23 deletions opencsp/app/sofast/lib/AbstractMeasurementSofast.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,37 +56,19 @@ def dist_optic_screen(self):
return self.dist_optic_screen_measure.dist_optic_screen

@classmethod
def _load_from_hdf(cls, file: str, prefix: str) -> dict[str, any]:
"""
Loads from HDF file

Parameters
----------
file : string
HDF file to load

"""
def _load_from_hdf(cls, file: str, prefix: str = '') -> dict[str, any]:
# Load grid data
datasets = [prefix + '/date', prefix + '/name']
datasets = [prefix + 'date', prefix + 'name']
kwargs = h5.load_hdf5_datasets(datasets, file)

kwargs['dist_optic_screen_measure'] = sod.DistanceOpticScreen.load_from_hdf(file, prefix)
kwargs['date'] = dt.datetime.fromisoformat(kwargs['date'])

return kwargs

def _save_to_hdf(self, file: str, prefix: str) -> None:
"""
Saves to HDF file

Parameters
----------
file : string
HDF file to save

NOTE: Collection date is saved as string in iso-format.
"""
datasets = [prefix + '/date', prefix + '/name']
def _save_to_hdf(self, file: str, prefix: str = '') -> None:
# NOTE: Collection date is saved as string in iso-format.
datasets = [prefix + 'date', prefix + 'name']
data = [self.date.isoformat(), self.name]

# Save data
Expand Down
26 changes: 5 additions & 21 deletions opencsp/app/sofast/lib/DistanceOpticScreen.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class DistanceOpticScreen(h5.HDF5_IO_Abstract):
dist_optic_screen: float = 0
""" Optic-screen distance, meters. """

def save_to_hdf(self, file: str, prefix: str) -> None:
def save_to_hdf(self, file: str, prefix: str = '') -> None:
"""Saves data to given file. Data is stored as: PREFIX + Folder/Field_1

Parameters
Expand All @@ -30,14 +30,14 @@ def save_to_hdf(self, file: str, prefix: str) -> None:
Prefix to append to folder path within HDF file (folders must be separated by "/").
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is unclear whether the intention is for the prefix parameter to be a folder (ending in '/') or if it is just supposed to be the beginning of the name. I'd suggest updating the documentation and/or parameter name with the intended usage. Maybe something like:

def save_to_hdf(self, file: str, prefix: str = '') -> None:
    """Saves data to given file. Data is stored as: PREFIX + Folder/Field_1
    Parameters
    ----------
    file : str
        HDF file to save to
    prefix : str, optional
        Prefix to prepend to the folder path within the HDF file. Suggested use
        is as a prefix to the folder name such as "202407_BCS_", so that folders
        can still be easily machine identified. Note that folders must be
        separated by "/", so if prefix is a folder name, then it should end in
        "/". Default is empty string ''.
    """

Note also that I changed "append" to "prepend".

Default is empty string ''.
"""
datasets = [prefix + '/v_measure_point_facet', prefix + '/dist_optic_screen']
datasets = [prefix + 'v_measure_point_facet', prefix + 'dist_optic_screen']
data = [self.v_measure_point_facet.data.squeeze(), self.dist_optic_screen]

# Save data
h5.save_hdf5_datasets(data, datasets, file)

@classmethod
def load_from_hdf(cls, file: str, prefix: str):
def load_from_hdf(cls, file: str, prefix: str = ''):
"""Loads data from given file. Assumes data is stored as: PREFIX + Folder/Field_1

Parameters
Expand All @@ -48,26 +48,10 @@ def load_from_hdf(cls, file: str, prefix: str):
Prefix to append to folder path within HDF file (folders must be separated by "/").
Default is empty string ''.
"""
groups, file_names_and_shapes = h5.get_groups_and_datasets(file)
file_names = [name for name, shape in file_names_and_shapes]
datasets = []
for s in ['/measure_point', '/v_measure_point_facet', '/dist_optic_screen', '/optic_screen_dist']:
dataset = prefix + s
if dataset in file_names:
datasets.append(dataset)
datasets = [prefix + 'v_measure_point_facet', prefix + 'dist_optic_screen']

# Load grid data
# datasets = [prefix + '/measure_point', prefix + '/dist_optic_screen']
# Load data
kwargs = h5.load_hdf5_datasets(datasets, file)

# TODO update all existing HDF5 files to use consistent naming
if 'measure_point' in kwargs:
kwargs['v_measure_point_facet'] = kwargs['measure_point']
del kwargs['measure_point']
if 'optic_screen_dist' in kwargs:
kwargs['dist_optic_screen'] = kwargs['optic_screen_dist']
del kwargs['optic_screen_dist']

kwargs['v_measure_point_facet'] = Vxyz(kwargs['v_measure_point_facet'])

return cls(**kwargs)
19 changes: 12 additions & 7 deletions opencsp/app/sofast/lib/MeasurementSofastFixed.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,37 +41,42 @@ def __init__(
self.origin = origin

@classmethod
def load_from_hdf(cls, file: str, prefix='') -> 'MeasurementSofastFixed':
def load_from_hdf(cls, file: str, prefix: str = '') -> 'MeasurementSofastFixed':
"""
Loads from HDF file
Loads data from given file. Assumes data is stored as: PREFIX + MeasurementSofastFringe/Field_1

Parameters
----------
file : string
HDF file to load

prefix : str, optional
Prefix to append to folder path within HDF file (folders must be separated by "/").
Default is empty string ''.
"""
# Load grid data
datasets = [prefix + 'MeasurementSofastFixed/image', prefix + 'MeasurementSofastFixed/origin']
kwargs = hdf5_tools.load_hdf5_datasets(datasets, file)
kwargs.update(super()._load_from_hdf(file, prefix + 'MeasurementSofastFixed'))
kwargs.update(super()._load_from_hdf(file, prefix + 'MeasurementSofastFixed/'))

kwargs['origin'] = Vxy(kwargs['origin'])

return cls(**kwargs)

def save_to_hdf(self, file: str, prefix='') -> None:
def save_to_hdf(self, file: str, prefix: str = '') -> None:
"""
Saves to HDF file
Saves data to given file. Data is stored as: PREFIX + MeasurementSofastFringe/Field_1

Parameters
----------
file : string
HDF file to save
prefix : str, optional
Prefix to append to folder path within HDF file (folders must be separated by "/").
Default is empty string ''.
"""
datasets = [prefix + 'MeasurementSofastFixed/image', prefix + 'MeasurementSofastFixed/origin']
data = [self.image, self.origin.data.squeeze()]

# Save data
hdf5_tools.save_hdf5_datasets(data, datasets, file)
super()._save_to_hdf(file, prefix + 'MeasurementSofastFixed')
super()._save_to_hdf(file, prefix + 'MeasurementSofastFixed/')
19 changes: 12 additions & 7 deletions opencsp/app/sofast/lib/MeasurementSofastFringe.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,17 @@ def calibrate_fringe_images(self, calibration: ImageCalibrationAbstract, **kwarg
self._fringe_images_calibrated = calibration.apply_to_images(self, **kwargs)

@classmethod
def load_from_hdf(cls, file: str, prefix='') -> 'MeasurementSofastFringe':
def load_from_hdf(cls, file: str, prefix: str = '') -> 'MeasurementSofastFringe':
"""
Loads from HDF file
Loads data from given file. Assumes data is stored as: PREFIX + MeasurementSofastFringe/Field_1

Parameters
----------
file : string
HDF file to load

prefix : str, optional
Prefix to append to folder path within HDF file (folders must be separated by "/").
Default is empty string ''.
"""
# Load grid data
datasets = [
Expand All @@ -137,18 +139,21 @@ def load_from_hdf(cls, file: str, prefix='') -> 'MeasurementSofastFringe':
prefix + 'MeasurementSofastFringe/fringe_periods_y',
]
kwargs = hdf5_tools.load_hdf5_datasets(datasets, file)
kwargs.update(super()._load_from_hdf(file, prefix + 'MeasurementSofastFringe'))
kwargs.update(super()._load_from_hdf(file, prefix + 'MeasurementSofastFringe/'))

return cls(**kwargs)

def save_to_hdf(self, file: str, prefix='') -> None:
def save_to_hdf(self, file: str, prefix: str = '') -> None:
"""
Saves to HDF file
Saves data to given file. Data is stored as: PREFIX + MeasurementSofastFringe/Field_1

Parameters
----------
file : string
HDF file to save
prefix : str, optional
Prefix to append to folder path within HDF file (folders must be separated by "/").
Default is empty string ''.
"""
datasets = [
prefix + 'MeasurementSofastFringe/mask_images',
Expand All @@ -160,4 +165,4 @@ def save_to_hdf(self, file: str, prefix='') -> None:

# Save data
hdf5_tools.save_hdf5_datasets(data, datasets, file)
super()._save_to_hdf(file, prefix + 'MeasurementSofastFringe')
super()._save_to_hdf(file, prefix + 'MeasurementSofastFringe/')
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.