Example #1
0
def parse_rsml_(organ: ET, polylines: list, properties: dict, functions: dict,
                parent: int) -> (list, dict, dict):
    """ Recursivly parses the rsml file, used by read_rsml """
    for poly in organ.iterfind('geometry'):  # only one
        polyline = []
        for p in poly[0]:  # 0 is the polyline
            n = p.attrib
            newnode = [float(n['x']), float(n['y']), float(n['z'])]
            polyline.append(newnode)
        polylines.append(polyline)
        properties.setdefault("parent-poly", []).append(parent)

    for prop in organ.iterfind('properties'):
        for p in prop:  # i.e legnth, type, etc..
            properties.setdefault(str(p.tag),
                                  []).append(float(p.attrib['value']))

    for funcs in organ.iterfind('functions'):
        for fun in funcs:
            samples = []
            for sample in fun.iterfind('sample'):
                samples.append(float(sample.attrib['value']))
            functions.setdefault(str(fun.attrib['name']), []).append(samples)

    pi = len(polylines) - 1
    for elem in organ.iterfind('root'):  # and all laterals
        polylines, properties, functions = parse_rsml_(elem, polylines,
                                                       properties, functions,
                                                       pi)

    return polylines, properties, functions
Example #2
0
def parse_rsml_(organ: ET, polylines: list, properties: dict, functions: dict,
                parent: int) -> (list, dict, dict):
    """ Recursivly parses the rsml file, used by read_rsml """
    for poly in organ.iterfind('geometry'):  # only one
        polyline = []
        for p in poly[0]:  # 0 is the polyline
            n = p.attrib
            if len(n) == 3:  # RSML is 3D
                newnode = [float(n['x']), float(n['y']), float(n['z'])]
            else:  # RSML is 2D
                newnode = [
                    float(n['x']) / 116.93, 0.0,
                    -1 * float(n['y']) / 116.93 + 10
                ]  # 116.93 is resolution in pixel/cm TODO: get this info out of RSML if possible
            polyline.append(newnode)
        polylines.append(polyline)
        properties.setdefault("parent-poly", []).append(parent)

    for prop in organ.iterfind('properties'):

        if len(
                list(prop)
        ) == 2:  # special fix for broken .rsml # TODO <--------- Remove after repairs...
            properties.setdefault('parent-node', []).append(-1)

        for p in prop:  # i.e length, type, etc..
            if 'value' in p.attrib:  # no value defined
                try:
                    properties.setdefault(str(p.tag),
                                          []).append(float(p.attrib['value']))
                except:
                    properties.setdefault(str(p.tag), []).append(float(np.nan))
            else:
                try:
                    properties.setdefault(str(p.tag), []).append(float(p.text))
                except:
                    properties.setdefault(str(p.tag), []).append(float(np.nan))

    for funcs in organ.iterfind('functions'):
        for fun in funcs:
            samples = []
            for sample in fun.iterfind('sample'):
                if 'value' in sample.attrib:
                    samples.append(float(sample.attrib['value']))
                else:
                    try:
                        samples.append(float(sample.text))
                    except:
                        samples.append(float(np.nan))
            functions.setdefault(str(fun.attrib['name']), []).append(samples)

    pi = len(polylines) - 1
    for elem in organ.iterfind('root'):  # and all laterals
        polylines, properties, functions = parse_rsml_(elem, polylines,
                                                       properties, functions,
                                                       pi)

    return polylines, properties, functions
Example #3
0
def recipe_etree_to_triples(source, etree):
    for recipe in etree.iterfind("recipe"):
        key = recipe.attrib['name']
        uri_label = el_uri_label(source, recipe)
        if uri_label:
            uri, label = uri_label
            item_uri = tag_uri(ITEMS_SOURCE, key)

            # give it a type 
            yield (uri, RDF.type, source.rdf_type)

            # link the item to it's recipe
            yield (item_uri, source.ns['recipe'], uri)

            for triple in parent_label(uri, source, label):
                yield triple
            
            for triple in attrib_to_triples(source, uri, recipe.attrib):
                yield triple
            
            
            for ingredient in recipe.iterfind("ingredient"):
                name = ingredient.attrib['name']
                
                ingredient_uri = uri_join(uri, u"ingredient/{name}".format(name=name))
                yield (uri, source.ns['ingredient'], ingredient_uri)

                item_uri = source_uri(ITEMS_SOURCE, name)
                yield (ingredient_uri, SEVEN_NS['Item'], item_uri)
                yield (ingredient_uri, SEVEN_NS['count'], Literal(int(ingredient.attrib['count'])))
Example #4
0
def parse_rsml_(organ: ET, polylines: list, properties: dict, functions: dict,
                parent: int) -> (list, dict, dict):
    """ Recursivly parses the rsml file, used by read_rsml """
    for poly in organ.iterfind('geometry'):  # only one
        polyline = []
        for p in poly[0]:  # 0 is the polyline
            n = p.attrib
            if len(n) == 3:  # RSML is 3D
                newnode = [float(n['x']), float(n['y']), float(n['z'])]
            else:  # RSML is 2D
                newnode = [
                    float(n['x']) / 116.93, 0.0,
                    -1 * float(n['y']) / 116.93 + 10
                ]  # 116.93 is resolution in pixel/cm TODO: get this info out of RSML if possible
            polyline.append(newnode)
        polylines.append(polyline)
        properties.setdefault("parent-poly", []).append(parent)

    for prop in organ.iterfind('properties'):
        for p in prop:  # i.e legnth, type, etc..
            if not p.attrib['value']:  # no value defined
                properties.setdefault(str(p.tag), []).append(-99)
            elif any(c.isalpha() for c in p.attrib['value']):
                properties.setdefault(str(p.tag), []).append(-99)
            else:
                properties.setdefault(str(p.tag),
                                      []).append(float(p.attrib['value']))

    for funcs in organ.iterfind('functions'):
        for fun in funcs:
            samples = []
            for sample in fun.iterfind('sample'):
                samples.append(float(sample.attrib['value']))
            functions.setdefault(str(fun.attrib['name']), []).append(samples)

    pi = len(polylines) - 1
    for elem in organ.iterfind('root'):  # and all laterals
        polylines, properties, functions = parse_rsml_(elem, polylines,
                                                       properties, functions,
                                                       pi)

    return polylines, properties, functions
Example #5
0
def etree_to_triples(parent_source, source, etree):
    for parent in etree.iterfind('./*/property/..'):
        for prop in parent.iterfind('property'):
            for triple in prop_to_triples(parent_source, source, parent, prop):
                yield triple