コード例 #1
0
ファイル: io.py プロジェクト: kai0703/microcircuit
def load_neurohdf(filename, hdf5path, memmapped=False):
    """ Loads the circuit from a NeuroHDF file as exported from CATMAID

    Parameters
    ----------
    filename : str
        Path to the NeuroHDF file
    hdfpath : str
        HDF5 path to the irregular dataset containing the circuit
        e.g. /Microcircuit
    """
    if memmapped:
        raise NotImplementedError('Memmapped HDF5 reading not yet implemented')

    circuit = Circuit()

    f = h5py.File(filename, 'r')
    circuitdata_group=f[hdf5path]
    vertices_group = circuitdata_group.get('vertices')
    connectivity_group = circuitdata_group.get('connectivity')
    metadata_group = circuitdata_group.get('metadata')

    def helpdict(v):
        helpdict = dict.fromkeys( v.attrs.keys() )
        for k in helpdict:
            helpdict[k] = v.attrs.get(k)
        return helpdict

    for k,v in vertices_group.items():
        if k == 'id':
            circuit.vertices = vertices_group[k].value
        else:
            circuit.vertices_properties[k] = dict.fromkeys( [const.DATA, const.METADATA] )
            circuit.vertices_properties[k][const.DATA] = v.value
            circuit.vertices_properties[k][const.METADATA] = helpdict(v)
        print('Added vertices {0}'.format(k))

    for k,v in connectivity_group.items():
        if k == 'id':
            circuit.connectivity = connectivity_group[k].value
        else:
            circuit.connectivity_properties[k] = dict.fromkeys( [const.DATA, const.METADATA] )
            circuit.connectivity_properties[k][const.DATA] = v.value
            circuit.connectivity_properties[k][const.METADATA] = helpdict(v)

        print('Added connectivity {0}'.format(k))
    if metadata_group:
        for k,v in metadata_group.items():
            circuit.metadata[k] = dict.fromkeys( [const.DATA, const.METADATA] )
            circuit.metadata[k][const.DATA] = v.value
            circuit.metadata[k][const.METADATA] = helpdict(v)
        print('Added metadata {0}'.format(k))
    circuit._remap_vertices_id2indices()
    f.close()

    return circuit