Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
    print 'arr1ev.shape =', arr1ev.shape
    print 'arr1ev =\n',     arr1ev

Advanced operations

Get item attributes

...

As in previous examples we assume that

Code Block

    file = h5py.File(hdf5_file_name, 'r')
    ds   = file[dataset_name]

Check if the HDF5 item is "File", "Group", or "Data"

Code Block

isFile    = isinstance(ds,h5py.File)
isGroup   = isinstance(ds,h5py.Group)
isDataset = isinstance(ds,h5py.Dataset)

Get information about HDF5 item

  • For all HDF5 items:
    these parameters are available:
    Code Block
    
    ds.id
    ds.ref
    ds.parent
    ds.file
    ds.name
    
  • Dataset
    Code Block
     
    dataset_type  = ds.dtype
    dataset_shape = ds.shape
    dataset_value = ds.value 
    
  • Get item attributes for File or Group (if attributes available)
    Code Block
    
                        #group or file
    dict_attributes    = group.attrs
    attrs_keys         = group.attrs.keys()
    attrs_values       = group.attrs.values()
    number_of_attrs    = len(group.attrs)
    
    # For example, one of the file attributes is a run number:
    run_number         = file.attrs['runNumber']
    
  • Get group name and the list of daughters
    Code Block
    
    list_of_item_names = group.items()
    print list_of_item_names
    
    or
    Code Block
    
    for key,val in dict(group).iteritems():
        print key, val
    

Extract time

Time variable is stored in HDF5 as a tuple of two long integer numbers representing the seconds since 01/01/1970 and nanoseconds as a fraction of the second. Time can be stored in the group attributes and in the data record with name "time", which can be extracted as shown below

...

  • from the time data record
    Code Block
    time_dataset = file['/Configure:0000/Run:0000/CalibCycle:0002/Acqiris::DataDescV1/XppLas.0:Acqiris.0/time']
    
    index = 0                   # this is an index in the dataset
    time = time_dataset[index]  # get the time tuple consisting of seconds and nanoseconds
    time_sec  = time[0]
    time_nsec = time[1]
    

Code examples

Example 1, basic operations

...

Code Block
#!/usr/bin/env python

import h5py
import numpy as np

eventNumber = 5

file    = h5py.File('/reg/d/psdm/XPP/xppcom10/hdf5/xppcom10-r0546.h5', 'r')
dataset = file['/Configure:0000/Run:0000/CalibCycle:0000/Camera::FrameV1/XppSb4Pim.1:Tm6740.1/image']
arr1ev  = dataset[eventNumber]
file.close()

print 'arr1ev.shape =', arr1ev.shape
print 'arr1ev =\n',     arr1ev

Example 2, advanced operations

...

Code Block

Needs to be added

Example, extract and print the time variables:

Code Block
#!/usr/bin/env python

import h5py
import time

#-----------------------------------------------------

def print_time(t_sec, t_nsec):
    """Converts seconds in human-readable time and prints formatted time"""

    tloc = time.localtime(t_sec) # converts sec to the tuple struct_time in local
    print 'Input time :',t_sec,'sec,',  t_nsec,'nsec, '
    print 'Local time :', time.strftime('%Y-%m-%d %H:%M:%S',tloc)

#-----------------------------------------------------

file_name = '/reg/d/psdm/xpp/xpp22510/hdf5/xpp22510-r0100.h5'
file = h5py.File(file_name, 'r') # open read-only

print "EXAMPLE: Get time from the group attributes:"

group = file["/Configure:0000"]
t_sec  = group.attrs.values()[0]
t_nsec = group.attrs.values()[1]
print_time(t_sec, t_nsec)


print "EXAMPLE: Get time from the data record 'time':"

dataset = file['/Configure:0000/Run:0000/CalibCycle:0002/Acqiris::DataDescV1/XppLas.0:Acqiris.0/time']
index = 0
time = dataset[ind]
t_sec  = time[0]
t_nsec = time[1]
print_time(t_sec, t_nsec)

f.close()

#----------------------------------------------------

Example, print entire file/group structure using recursive method

Code Block

#!/usr/bin/env python
import h5py

def print_group(g,offset='    '):
    """Prints the input file/group/dataset (g) name and begin iterations on its content"""
    print "Structure of the",
    if   isinstance(g,h5py.File):    print "'File'",
    elif isinstance(g,h5py.Group):   print "'Group' from file",
    elif isinstance(g,h5py.Dataset): print "'Dataset' from file",
    print g.file,"\n",g.name
    if   isinstance(g,h5py.Dataset): print offset, "(Dateset)   len =", g.shape #, subg.dtype
    else:                            print_group_content(g,offset)

def print_group_content(g,offset='    '):
    """Prints content of the file/group/dataset iteratively, starting from the sub-groups of g"""
    for key,val in dict(g).iteritems():
        subg = val
        print offset, key, #,"   ", subg.name #, val, subg.len(), type(subg),
        if   isinstance(subg, h5py.Dataset):
            print " (Dateset)   len =", subg.shape #, subg.dtype
        elif isinstance(subg, h5py.Group):
            print " (Group)   len =",len(subg)
            print_group_content(subg,offset + '    ')

def print_hdf5_file_structure(file_name):
    """Prints the HDF5 file structure"""
    file = h5py.File(file_name, 'r') # open read-only
    print_group(file)
    file.close()
    print '=== EOF ==='

if __name__ == "__main__" :
    print_hdf5_file_structure('/reg/d/psdm/xpp/xpp22510/hdf5/xpp22510-r0100.h5')