Source code for svcco.branch_addition.calculate_radii

import numba as nb
import numpy as np

[docs]@nb.jit(nopython=True,cache=True,nogil=True) def radii(data,Pperm,Pterm): updated_radii = [0] data[0,21] = ((data[0,25]*data[0,22])/(Pperm-Pterm)) ** (1/4) if data[0,15] < 0: return children_d = data[0,15:17].flatten() children_i = children_d.astype(np.int64) parents_d = data[children_i,17].flatten() parents_i = parents_d.astype(np.int64) bifs = data[parents_i[::2],23:25].flatten() radii = data[parents_i,21].flatten() while len(children_i) > 0: data[children_i,21] = bifs*radii updated_radii.extend(children_i) next_children = np.argwhere(data[children_i,15] > 0) next_children = children_i[next_children.flatten()] children_d = data[next_children,15:17].flatten() children_i = children_d.astype(np.int64) parents_d = data[children_i,17].flatten() parents_i = parents_d.astype(np.int64) bifs = data[parents_i[::2],23:25].flatten() radii = data[parents_i,21].flatten() return updated_radii
[docs]def update_radii(data,Pperm,Pterm): data[0,21] = ((data[0,25]*data[0,22])/(Pperm-Pterm)) ** (1/4) idx = [int(data[0,15]),int(data[0,16])] while len(idx) > 0: tmp = [] for vessel in idx: parent = int(data[vessel,17]) LR = data[parent,15:17].astype(int) BIF = data[parent,23:25].flatten() LR_type = np.argwhere(LR == vessel).flatten()[0] BIF = BIF[LR_type] data[vessel,21] = data[parent,21]*BIF data[vessel,28] = data[parent,28]*BIF if data[vessel,15]>0: tmp.append(int(data[vessel,15])) if data[vessel,16]>0: tmp.append(int(data[vessel,16])) idx = tmp
#def naive_radii(data,Pperm,Pterm,idx): # if idx == 0: # data[idx,21] = ((data[idx,25]*data[idx,22])/(Pperm-Pterm)) ** (1/4) # elif data[idx,15] > 0 and data[idx,16] > 0: ################################################################## # UNIT TEST ##################################################################