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
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
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'])))
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
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