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