fioh5: h5py-like API to FIO file#
This module provides a h5py-like API to access FioFile data.
API description#
Fiofile data structure exposed by this API:
/
n.1/
title = "…"
start_time = "…"
instrument/
fiofile/
comments = "…"
parameter = "…"
comment = "…"
parameter/
parameter_name = value
measurement/
colname0 = …
colname1 = …
…
The top level scan number n.1 is determined from the filename as in
prefix_n.fio. (e.g. eh1_sixc_00045.fio would give 45.1)
If no number is available, will use the filename instead.
comments and parameter in group fiofile are the raw headers as they
appear in the original file, as a string of lines separated by newline
(\n) characters. comment are the remaining comments,
which were not parsed.
The title is the content of the first comment header line
(e.g "ascan ss1vo -4.55687 -0.556875 40 0.2").
The start_time is parsed from the second comment line.
Datasets are stored in the data format specified in the fio file header.
Scan data (e.g. /1.1/measurement/colname0) is accessed by column,
the dataset name colname0 being the column label as defined in the
Col … header line.
If a / character is present in a column label or in a motor name in the
original FIO file, it will be substituted with a % character in the
corresponding dataset name.
MCA data is not yet supported.
This reader requires a fio file as defined in src/sardana/macroserver/recorders/storage.py of the Sardana project (sardana-org/sardana).
Accessing data#
Data and groups are accessed in h5py fashion:
from silx.io.fioh5 import FioH5
# Open a FioFile
fiofh5 = FioH5("test_00056.fio")
# using FioH5 as a regular group to access scans
scan1group = fiofh5["56.1"]
instrument_group = scan1group["instrument"]
# alternative: full path access
measurement_group = fiofh5["/56.1/measurement"]
# accessing a scan data column by name as a 1D numpy array
data_array = measurement_group["Pslit HGap"]
FioH5 files and groups provide a keys() method:
>>> fiofh5.keys()
['96.1', '97.1', '98.1']
>>> fiofh5['96.1'].keys()
['title', 'start_time', 'instrument', 'measurement']
They can also be treated as iterators:
from silx.io import is_dataset
for scan_group in FioH5("test_00056.fio"):
dataset_names = [item.name in scan_group["measurement"] if
is_dataset(item)]
print("Found data columns in scan " + scan_group.name)
print(", ".join(dataset_names))
You can test for existence of data or groups:
>>> "/1.1/measurement/Pslit HGap" in fiofh5
True
>>> "positioners" in fiofh5["/2.1/instrument"]
True
>>> "spam" in fiofh5["1.1"]
False
Classes#
- class FioH5(filename, order=1)[source]#
Bases:
FileThis class reads a FIO file and exposes it as a h5py.File.
It inherits
silx.io.commonh5.Group(viacommonh5.File), which implements most of its API.- __contains__(name)#
Returns true if name is an existing child of this group.
- Return type:
bool
- __enter__()#
- __exit__(exc_type, exc_val, exc_tb)#
- __getitem__(name)#
Return a child from his name.
- Parameters:
name (str) – name of a member or a path throug members using ‘/’ separator. A ‘/’ as a prefix access to the root item of the tree.
- Return type:
- __iter__()#
Iterate over member names
- __len__()#
Returns the number of children contained in this group.
- Return type:
int
- property attrs#
Returns HDF5 attributes of this node.
- Return type:
dict
- property basename#
Returns the HDF5 basename of this node.
- close()#
Close the object, and free up associated resources.
- create_dataset(name, shape=None, dtype=None, data=None, **kwds)#
Create and return a sub dataset.
- Parameters:
name (str) – Name of the dataset.
shape – Dataset shape. Use “()” for scalar datasets. Required if “data” isn’t provided.
dtype – Numpy dtype or string. If omitted, dtype(‘f’) will be used. Required if “data” isn’t provided; otherwise, overrides data array’s dtype.
data (numpy.ndarray) – Provide data to initialize the dataset. If used, you can omit shape and dtype arguments.
kwds – Extra arguments. Nothing yet supported.
- create_group(name)#
Create and return a new subgroup.
Name may be absolute or relative. Fails if the target name already exists.
- Parameters:
name (str) – Name of the new group
- property filename#
- get(name, default=None, getclass=False, getlink=False)#
Retrieve an item or other information.
If getlink only is true, the returned value is always h5py.HardLink, because this implementation do not use links. Like the original implementation.
- Parameters:
name (str) – name of the item
default (object) – default value returned if the name is not found
getclass (bool) – if true, the returned object is the class of the object found
getlink (bool) – if true, links object are returned instead of the target
- Returns:
An object, else None
- Return type:
object
- property h5_class#
Returns the
h5py.Fileclass
- property h5py_class#
Returns the h5py classes which is mimicked by this class. It can be one of h5py.File, h5py.Group or h5py.Dataset
This should not be used anymore. Prefer using h5_class
- Return type:
Class
- items()#
Returns items iterator containing name-node mapping.
- Return type:
iterator
- keys()#
Returns an iterator over the children’s names in a group.
- property mode#
- property name#
Returns the HDF5 name of this node.
- values()#
Returns an iterator over the children nodes (groups and datasets) in a group.
New in version 0.6.
- visit(func, visit_links=False)#
Recursively visit all names in this group and subgroups. See the documentation for h5py.Group.visit for more help.
- Parameters:
func (callable) – Callable (function, method or callable object)
- visititems(func, visit_links=False)#
Recursively visit names and objects in this group. See the documentation for h5py.Group.visititems for more help.
- Parameters:
func (callable) – Callable (function, method or callable object)
visit_links (bool) – If False, ignore links. If True, call func(name) for links and recurse into target groups.