def export_elem_subset(elem_subset, elems, group_name, filename):
    elem_subset.sort()
    subset_of_elems = np.zeros((len(elem_subset), 3), dtype=int)
    i = 0
    for element in elem_subset:
        subset_of_elems[i][0] = elems[element][0]
        subset_of_elems[i][1] = elems[element][1]
        subset_of_elems[i][2] = elems[element][2]
        i = i + 1
    pg.export_exelem_1d(subset_of_elems, group_name, filename)

    return 0
Exemplo n.º 2
0
        new_node_loc[new_node][0] = new_node
        new_node_loc[new_node][1] = node_loc[i][1]
        new_node_loc[new_node][2] = node_loc[i][2]
        new_node_loc[new_node][3] = node_loc[i][3]
#write the new node file
name = 'new_nodes' + version
pg.export_ex_coords(new_node_loc, name, name, 'exnode')

new_elems = np.zeros((num_elems - len(elems_to_remove), 3), dtype=int)

for i in range(0, num_elems):
    new_elem = old_to_new_elem[i]
    if (new_elem >= 0):
        new_elems[new_elem][0] = new_elem
        new_elems[new_elem][1] = old_to_new_node[elems[i][1]]
        if (old_to_new_node[elems[i][1]] == -1):
            print('elem', i, 'new elem', new_elem, 'old node', elems[i][1])
        new_elems[new_elem][2] = old_to_new_node[elems[i][2]]
        if (old_to_new_node[elems[i][2]] == -1):
            print('elem', i, 'new elem', new_elem, 'old node', elems[i][2])
#write the new element file
name = 'new_elems' + version
pg.export_exelem_1d(new_elems, name, name)

#write the radius file again

radius_info = radius_file[['updated_radius']].copy()
new_radius_file = radius_info.drop(radius_file.index[elems_to_remove])
new_radius_file.reset_index(inplace=True)
filename = 'elem_radius_large_vessels' + version + '.csv'
new_radius_file.to_csv(filename)
Exemplo n.º 3
0
#df1 = pd.DataFrame(np.array(chorion_and_stem['nodes']).reshape(len(chorion_and_stem['nodes']),4))
#df1.to_csv('chorion_and_stem.csv')

#populate element connectivity
elem_connectivity = pg.element_connectivity_1D(chorion_and_stem['nodes'],chorion_and_stem['elems'])
chorion_and_stem['elem_up'] = elem_connectivity['elem_up']
chorion_and_stem['elem_down'] = elem_connectivity['elem_down']

if (seed_points_option== 'generate'):
    # Define data points that represent the density of villous tissue, equispaced within an ellipsoidal geometry
    datapoints_villi=pg.equispaced_data_in_ellipsoid(n_seed,volume,thickness,ellipticity)
else:
    #read in seed points filling the volume of the placenta based on images
    datapoints_villi = pg.import_exnode_tree(seed_points_in_file)['nodes'][:, 1:4]

if(export_intermediates):
    export_file = export_directory + '/villous_data'
    pg.export_ex_coords(datapoints_villi,'villous',export_file,'exdata')

#Now grow a tree to these data points, optimised for larger trees
full_geom=pg.grow_large_tree(angle_max_ft, angle_min_ft, fraction_ft, min_length_ft, point_limit_ft, volume, thickness, ellipticity, datapoints_villi, chorion_and_stem)

# Export the final results
if(export_results or export_intermediates):
    export_file = export_directory + '/full_tree'
    pg.export_ex_coords(full_geom['nodes'],'placenta', export_file,'exnode')
    pg.export_exelem_1d(full_geom['elems'],'placenta', export_file)
    export_file = export_directory + '/terminals'
    pg.export_ex_coords(full_geom['term_loc'],'villous',export_file,'exdata')

get_tree_stats(export_directory)
Exemplo n.º 4
0
#populate nodes array
node_loc = np.zeros((num_nodes, 4))
for i in range(0,num_nodes):
    node_loc[i][0] = i
    node_loc[i][1] = nodes.iloc[i]['x']
    node_loc[i][2] = nodes.iloc[i]['y']
    node_loc[i][3] = nodes.iloc[i]['z']

#write the exnode file
pg.export_ex_coords(node_loc,group_name,node_out_file,'exnode')

#populate elems array
element_info = pd.read_csv(elems_in_file)
elements = element_info[['n1','n2']].copy()
elements.columns = ['n1', 'n2']
num_elems = len(elements)

elems = np.zeros((num_elems, 3), dtype=int)

for i in range(0,num_elems):
    elems[i][0] = i  # creating new element;
    #export_exelem_1d adds 1 to all values
    elems[i][1] = elements.iloc[i]['n1'] -1  # starts at this node
    elems[i][2] = elements.iloc[i]['n2'] -1  # ends at this node

#write the exelem file
pg.export_exelem_1d(elems,group_name,elems_out_file)
 

Exemplo n.º 5
0
angle_max_ft = 180 * np.pi / 180
angle_min_ft = 0 * np.pi / 180
fraction_ft = 0.4
min_length_ft = 0.0  #mm
point_limit_ft = 1

datapoints_chorion = pg.uniform_data_on_ellipsoid(n_chorion, volume, thickness,
                                                  ellipticity, 0)
pg.export_ex_coords(datapoints_chorion, 'chorion', 'chorion_data', 'exdata')

seed_geom = pg.umbilical_seed_geometry(volume, thickness, ellipticity,
                                       cord_insertion_x, cord_insertion_y,
                                       umb_artery_distance, umb_artery_length,
                                       datapoints_chorion)
pg.export_ex_coords(seed_geom['umb_nodes'], 'umb', 'umb_nodes', 'exnode')
pg.export_exelem_1d(seed_geom['umb_elems'], 'umb', 'umb_elems')

chorion_geom = pg.grow_chorionic_surface(angle_max, angle_min,
                                         fraction_chorion, min_length,
                                         point_limit, volume, thickness,
                                         ellipticity, datapoints_chorion,
                                         seed_geom, 'surface')

pg.export_ex_coords(chorion_geom['nodes'], 'chorion', 'chorion_nodes',
                    'exnode')
pg.export_exelem_1d(chorion_geom['elems'], 'chorion', 'chorion_elems')

#Refine once from defined element number
from_elem = 5
refined_geom = pg.refine_1D(chorion_geom, from_elem)
for i in range(0, num_nodes):
    node_loc[i][0] = i
    node_loc[i][1] = nodes.iloc[i]['x']
    node_loc[i][2] = nodes.iloc[i]['y']
    node_loc[i][3] = nodes.iloc[i]['z']

#write the exnode file
pg.export_ex_coords(node_loc, 'p51_large_vessels_v2', 'p51_large_vessels_v2',
                    'exnode')

#populate elems array
num_elems = len(branch_info)
elems = np.zeros((num_elems, 3), dtype=int)

for i in range(0, num_elems):
    #get indices for node 1 and 2
    node1_index = nodes.index[(nodes['x'] == branch_info.iloc[i]['V1 x'])
                              & (nodes['y'] == branch_info.iloc[i]['V1 y']) &
                              (nodes['z'] == branch_info.iloc[i]['V1 z'])]
    node2_index = nodes.index[(nodes['x'] == branch_info.iloc[i]['V2 x'])
                              & (nodes['y'] == branch_info.iloc[i]['V2 y']) &
                              (nodes['z'] == branch_info.iloc[i]['V2 z'])]

    elems[i][0] = i  # creating new element
    elems[i][1] = node1_index[
        0]  # starts at this node (using node index so don't need to take away 1)
    elems[i][2] = node2_index[0]  # ends at this node

#write the exelem file
pg.export_exelem_1d(elems, 'p51_large_vessels_v2', 'p51_large_vessels_v2')
Exemplo n.º 7
0
for n in range(8,len(node_file),4):
    node_loc[i][2] = node_file[0][n]
    i=i+1

i=0
for n in range(9,len(node_file),4):
    node_loc[i][3] = node_file[0][n]
    i=i+1

#write the exnode file
pg.export_ex_coords(node_loc,'chor_nodes_cycle3_v3','chorionic_vessels/chor_nodes_cycle3_v3','exnode')


#read the element file
element_file = pd.read_csv('chorionic_vessels/chor_elems_cycle3_v2.exelem',sep="\n", header=None)

num_elems = (len(element_file)-31)/5
elems = np.zeros((num_elems, 3), dtype=int)

i=0
for n in range(33, len(element_file),5):
    elems[i][0] = i  # creating new element
    nodes = element_file[0][n].split()
    elems[i][1] = old_to_new_node[int(nodes[0])]  # starts at this node
    elems[i][2] = old_to_new_node[int(nodes[1])]  # ends at this node
    i = i+1


# write the exelem file
pg.export_exelem_1d(elems, 'chor_elems_cycle3_v3', 'chorionic_vessels/chor_elems_cycle3_v3')
                           geom['radii'], geom['branch_angles'],
                           geom['diam_ratio'], geom['length_ratio'])

#3d plots
print('Plotting')
plotVasculature3D(geom['nodes'], geom['elems'], geom['branch_angles'],
                  geom['radii'])

#csv files
output = 0
if output:
    print('Writing files')
    elems = geom['elems']
    outPutData = np.column_stack(
        [elems[:, 1:3], geom['radii'], geom['branch_angles'], strahler])

    np.savetxt('ElementInfo.csv',
               outPutData,
               fmt='%.2f',
               delimiter=',',
               header=" ,elems,  radii(mm),  angles(degrees),  order")
    np.savetxt('NodeInfo.csv',
               geom['nodes'],
               fmt='%.4f',
               delimiter=',',
               header=" ,nodes(voxels)")

    #cmgui files
    pg.export_ex_coords(geom['nodes'], 'placenta', 'full_tree', 'exnode')
    pg.export_exelem_1d(geom['elems'], 'placenta', 'full_tree')