Source code for pyUSID.io.reg_ref

# -*- coding: utf-8 -*-
"""
Created on Tue Nov  3 21:14:25 2015

@author: Chris Smith, Suhas Somnath
"""

from __future__ import division, print_function, absolute_import, unicode_literals
import sys
import h5py
from sidpy.hdf.reg_ref import *

from .hdf_utils import check_if_main

if sys.version_info.major == 3:
    unicode = str


[docs] def copy_region_refs(h5_source, h5_target): """ Check the input dataset for plot groups, copy them if they exist Also make references in the Spectroscopic Values and Indices tables Parameters ---------- h5_source : HDF5 Dataset source dataset to copy references from h5_target : HDF5 Dataset target dataset the references from h5_source are copied to """ ''' Check both h5_source and h5_target to ensure that are Main ''' are_main = all([check_if_main(h5_source), check_if_main(h5_target)]) if not all([isinstance(h5_source, h5py.Dataset), isinstance(h5_target, h5py.Dataset)]): raise TypeError('Inputs to copy_region_refs must be HDF5 Datasets') # It is OK if objects are in different files if are_main: h5_source_inds = h5_source.file[h5_source.attrs['Spectroscopic_Indices']] h5_spec_inds = h5_target.file[h5_target.attrs['Spectroscopic_Indices']] h5_spec_vals = h5_target.file[h5_target.attrs['Spectroscopic_Values']] for key in h5_source.attrs.keys(): if not isinstance(h5_source.attrs[key], h5py.RegionReference): continue if are_main: if h5_source_inds.shape[0] == h5_spec_inds.shape[0]: ''' Spectroscopic dimensions are identical. Do direct copy. ''' ref_inds = simple_region_ref_copy(h5_source, h5_target, key) else: ''' Spectroscopic dimensions are different. Do the dimension reducing copy. ''' ref_inds = copy_reg_ref_reduced_dim(h5_source, h5_target, h5_source_inds, h5_spec_inds, key) ''' Create references for Spectroscopic Indices and Values Set the end-point of each hyperslab in the position dimension to the number of rows in the index array ''' ref_inds[:, 1, 0][ref_inds[:, 1, 0] > h5_spec_inds.shape[0]] = h5_spec_inds.shape[0] - 1 spec_inds_ref = create_region_reference(h5_spec_inds, ref_inds) h5_spec_inds.attrs[key] = spec_inds_ref spec_vals_ref = create_region_reference(h5_spec_vals, ref_inds) h5_spec_vals.attrs[key] = spec_vals_ref else: ''' If not main datasets, then only simple copy can be used. ''' simple_region_ref_copy(h5_source, h5_target, key)