def copyVesselnetworkAndComputeFlow(gvdst, gv, bloodflowparams): '''gdst = group where the data is placed in, does not create a 'vesse' folder in it but writes nodes, edges directly; gv = source vessel group ''' myutils.buildLink(gvdst, 'CLASS', gv) myutils.buildLink(gvdst, 'SOURCE', gv) # first we need to copy some of the vessel data gvedst = gvdst.create_group('edges') gvndst = gvdst.create_group('nodes') gvedst.attrs['COUNT'] = gv['edges'].attrs['COUNT'] gvndst.attrs['COUNT'] = gv['nodes'].attrs['COUNT'] if (gv.attrs.__contains__('CLASS')): #special things if it is lattice based if (gv.attrs['CLASS'] == 'GRAPH'): gv.copy('lattice', gvdst) gvedst.attrs['CLASS'] = 'GRAPH' for name in ['lattice_pos', 'roots']: gv['nodes'].copy(name, gvndst) if (gv.attrs['CLASS'] == 'REALWORLD'): gvedst.attrs['CLASS'] = 'REALWORLD' for name in [ 'world_pos', 'roots', 'bc_node_index', 'bc_type', 'bc_value' ]: gv['nodes'].copy(name, gvndst) for name in ['radius', 'node_a_index', 'node_b_index']: gv['edges'].copy(name, gvedst) # then we recompute blood flow because the alorithm has changed and we may or may not want hematocrit if bloodflowparams['includePhaseSeparationEffect'] == True: pressure, flow, shearforce, hematocrit, flags = _ku.calc_vessel_hydrodynamics( gv, return_flags=True, bloodflowparams=bloodflowparams) gvedst.create_dataset('flow', data=flow, compression=9) gvedst.create_dataset('shearforce', data=shearforce, compression=9) gvedst.create_dataset('hematocrit', data=hematocrit, compression=9) gvedst.create_dataset('flags', data=flags, compression=9) gvndst.create_dataset('pressure', data=pressure, compression=9) else: print("Computing without phase seperation effect") pressure, flow, shearforce, hematocrit, flags = _ku.calc_vessel_hydrodynamics( gv, return_flags=True, bloodflowparams=bloodflowparams) gvedst.create_dataset('flow', data=flow, compression=9) gvedst.create_dataset('shearforce', data=shearforce, compression=9) gvedst.create_dataset('hematocrit', data=hematocrit, compression=9) gvedst.create_dataset('flags', data=flags, compression=9) gvndst.create_dataset('pressure', data=pressure, compression=9)
def write(gmeasure, name): press, flow, force, hema = krebsutils.calc_vessel_hydrodynamics( vesselgroup, True) grp = gmeasure.create_group(name) egrp = grp.create_group('edges') ngrp = grp.create_group('nodes') ngrp.create_dataset('h_press', data=press, compression=9) egrp.create_dataset('h_flow', data=flow, compression=9) egrp.create_dataset('h_hema', data=hema, compression=9) egrp.create_dataset('h_force', data=force, compression=9)
def create_Y_sample(file_to_save): radii = [2, 2, np.power(2**3 + 2**3, 1 / 3.)] radii = [radius * 1.2 for radius in radii] N_edges = len(radii) file_to_save.create_group('vessels') edgegrp = file_to_save['vessels'].create_group("edges") edgegrp.attrs.create('COUNT', N_edges) ds_nodeA = edgegrp.create_dataset('node_a_index', data=[0, 1, 3]) ds_nodeB = edgegrp.create_dataset('node_b_index', data=[3, 3, 2]) ds_radius = edgegrp.create_dataset('radius', data=radii) ds_flags = edgegrp.create_dataset('flags', data=[ int(krebsutils.VEIN), int(krebsutils.VEIN), int(krebsutils.VEIN) ]) points = [] points.append([-100, +100, 0]) points.append([-100, -100, 0]) points.append([0, 0, 100]) points.append([0, 0, 0]) N_nodes = len(points) nodegrp = file_to_save['vessels'].create_group("nodes") nodegrp.attrs.create('COUNT', N_nodes) ds_roots = file_to_save['vessels/nodes'].create_dataset('roots', data=[0, 1, 2]) ds_bc_node_index = file_to_save['vessels/nodes'].create_dataset( 'bc_node_index', data=[0, 1, 2]) #dummy pressure for compatiblility #ds_pressure = f3['vessels/nodes'].create_dataset('roots_pressure', data = roots_pressure) #this works #ds_value_of_bc = f2['symetricA/vessels/nodes'].create_dataset('bc_value', data=[70*0.133,10*0.133]) ds_value_of_bc = file_to_save['vessels/nodes'].create_dataset( 'bc_value', data=[2, 2, 1]) ds_conductivity_of_bc = file_to_save['vessels/nodes'].create_dataset( 'bc_conductivity_value', data=[0, 0, 0]) ds_bctyp_of_roots = file_to_save['vessels/nodes'].create_dataset( 'bc_type', data=[1, 1, 1]) ds_world_pos = file_to_save['vessels/nodes'].create_dataset( 'world_pos', data=np.array(points)) file_to_save['vessels'].attrs.create('CLASS', 'REALWORLD') #no bloodflowParams --> simple --> no hematocrit output (pressure, flow, shearforce, flags) = krebsutils.calc_vessel_hydrodynamics(file_to_save['vessels'], return_flags=True) # then we save the new data to complete the network copy edgegrp.create_dataset('flow', data=flow, compression=9) edgegrp.create_dataset('shearforce', data=shearforce, compression=9) nodegrp.create_dataset('pressure', data=pressure, compression=9)
def enlarge_vessels(factor, gv_filename, bloodflowparams): '''gvdst = group where the data is placed in, does not create a 'vesse' folder in it but writes nodes, edges directly; gv = source vessel group ''' inFile = h5files.open(gv_filename, 'r') gv = inFile['vessels'] fac_as_percent = int(np.ceil(float(factor) * 100 - 100)) dest_file = h5files.open( myutils.strip_from_end(gv_filename, '.h5') + '_growth_by_%02i.h5' % fac_as_percent, 'a') dest_file.attrs.create('enlargeFactor', data=fac_as_percent) gvdst = dest_file.create_group('vessels') gvdst.attrs['CLASS'] = 'GRAPH' myutils.buildLink(gvdst, 'SOURCE', gv) # first we need to copy some of the vessel data gvedst = gvdst.create_group('edges') gvndst = gvdst.create_group('nodes') gvedst.attrs['COUNT'] = gv['edges'].attrs['COUNT'] gvndst.attrs['COUNT'] = gv['nodes'].attrs['COUNT'] gv.copy('lattice', gvdst) for name in [ 'lattice_pos', 'roots', 'nodeflags', 'gf', 'bc_conductivity_value', 'bc_node_index', 'bc_type', 'bc_value' ]: gv['nodes'].copy(name, gvndst) for name in ['radius', 'node_a_index', 'node_b_index', 'flags']: if name == 'radius': radii = gv['edges/' + name] radii = factor * np.asarray(radii) gvedst.create_dataset(name, data=radii) else: gv['edges'].copy(name, gvedst) # then we recompute blood flow because the alorithm has changed and we may or may not want hematocrit (pressure, flow, shearforce, hematocrit, flags) = krebsutils.calc_vessel_hydrodynamics( gvdst, return_flags=True, bloodflowparams=bloodflowparams) # then we save the new data to complete the network copy gvedst.create_dataset('flow', data=flow, compression=9) gvedst.create_dataset('shearforce', data=shearforce, compression=9) gvedst.create_dataset('hematocrit', data=hematocrit, compression=9) gvndst.create_dataset('pressure', data=pressure, compression=9)
def createMostBasic_world(fn): points = [] points.append([-5, 0, 0]) p1 = [0, 0, 0] p2 = [2.5, 3, 0] p3 = [7.5, 3, 0] p4 = [10, 0, 0] p5 = [2.5, -3, 0] p6 = [7.5, -3, 0] p7 = [15, 0, 0] points.append(p1) points.append(p2) points.append(p3) points.append(p4) points.append(p5) points.append(p6) points.append(p7) node_a_index = [0, 1, 2, 3, 1, 5, 6, 4] node_b_index = [1, 2, 3, 4, 5, 6, 4, 7] flags = [] radii = [] flags.append(int(ku.ARTERY)) #0 radii.append(7) flags.append(int(ku.ARTERY)) #1 radii.append(5) flags.append(int(ku.CAPILLARY)) #2 radii.append(3) flags.append(int(ku.VEIN)) #3 radii.append(6) flags.append(int(ku.ARTERY)) #4 radii.append(5) flags.append(int(ku.CAPILLARY)) #5 radii.append(3) flags.append(int(ku.VEIN)) #6 radii.append(6) flags.append(int(ku.VEIN)) #7 radii.append(10) # flags.append(int(ku.VEIN))#8 # radii.append(level1) # flags.append(int(ku.ARTERY))#9 # radii.append(level2) # flags.append(int(ku.ARTERY))#10 # radii.append(level3) # flags.append(int(ku.CAPILLARY))#11 # radii.append(level3) # flags.append(int(ku.VEIN))#12 # radii.append(level3) # flags.append(int(ku.ARTERY))#13 # radii.append(level3) # flags.append(int(ku.CAPILLARY))#14 # radii.append(level3) # flags.append(int(ku.VEIN))#15 # radii.append(level3) # flags.append(int(ku.VEIN))#16 # radii.append(level2) # flags.append(int(ku.CAPILLARY))#17 # radii.append(level3) # #mirror x axis # for i in range(len(points)): # points.append([points[i][0],-points[i][1],points[i][2]]) # # # #double flags # for i in range(len(flags)): # flags.append(flags[i]) # radii.append(radii[i]) # # #add entrence # flags.append(int(ku.ARTERY)) # radii.append(level0) # points.append([-13,0,0]) # flags.append(int(ku.VEIN)) # radii.append(level0) # points.append([13,0,0]) # # def reverse_xy(points): # points2 = [] # scale = 100 # for point in points: # points2.append([point[1]*scale,point[0]*scale,point[2]*scale]) # return points2 # # #points = reverse_xy(points) # points = scale_points(points) # #add circulated flag # flags2=[] # for aflag in flags: # flags2.append(np.bitwise_or(ku.CIRCULATED,aflag)) # # #this datalist is after successfull adaption with all signals # datalist=[13.301738,9.563003,7.1691427,7.108207,5.7596083,5.6054125,5.584573,6.330745,8.065095,9.596836,7.166868, # 5.7524166,5.6175594,7.166868,5.7524166,5.6175594,6.354387,5.704988,13.301738,9.563003,7.1691427,7.108207, # 5.7596083,5.6054125,5.584573,6.330745,8.065095,9.596836,7.166868,5.7524166,5.6175594,7.166868,5.7524166, # 5.6175594,6.354387,5.704988,17.057396,9.972254] # #radii = np.array(datalist) # #radii=10*np.ones(len(node_a_index)) # #radii=6.5*np.ones(len(node_a_index)) # #write the data to a h5 file # #f2 = h5files.open(fn,'w') f2 = fn f2.create_group('mostBasic_world/vessels') #edge stuff N_edges = len(radii) edgegrp = f2['mostBasic_world/vessels'].create_group("edges") edgegrp.attrs.create('COUNT', N_edges) ds_nodeA = edgegrp.create_dataset('node_a_index', data=node_a_index) ds_nodeB = edgegrp.create_dataset('node_b_index', data=node_b_index) ds_radius = edgegrp.create_dataset('radius', data=radii) #ds_hema = edgegrp.create_dataset('hematocrit', data=hema) #ds_flow = edgegrp.create_dataset('flow', data=flow) #mw_vessel_flags = get_flags_from_other_file() ds_vesselflags = edgegrp.create_dataset('flags', data=flags) #node stuff N_nodes = len(points) nodegrp = f2['mostBasic_world/vessels'].create_group("nodes") nodegrp.attrs.create('COUNT', N_nodes) ds_roots = f2['mostBasic_world/vessels/nodes'].create_dataset('roots', data=[0, 7]) ds_bc_node_index = f2['mostBasic_world/vessels/nodes'].create_dataset( 'bc_node_index', data=[0, 7]) #dummy pressure for compatiblility #ds_pressure = f3['vessels/nodes'].create_dataset('roots_pressure', data = roots_pressure) #this works #ds_value_of_bc = f2['symetricA/vessels/nodes'].create_dataset('bc_value', data=[70*0.133,10*0.133]) ds_value_of_bc = f2['mostBasic_world/vessels/nodes'].create_dataset( 'bc_value', data=[5, 3]) ds_bctyp_of_roots = f2['mostBasic_world/vessels/nodes'].create_dataset( 'bc_type', data=[1, 1]) ds_world_pos = f2['mostBasic_world/vessels/nodes'].create_dataset( 'world_pos', data=np.array(points)) f2['mostBasic_world/vessels'].attrs.create('CLASS', 'REALWORLD') import krebsjobs.parameters.parameterSetsAdaption #set_name = 'adaption_symetric_world' set_name = 'adaption_symetricA_world_break' #set_name = 'adaption_symetric_world' adaptionParams = getattr(krebsjobs.parameters.parameterSetsAdaption, set_name) #CALCULATE!!!! myutils.hdf_write_dict_hierarchy(f2['/'], 'mostBasic_world/parameters', adaptionParams) f2['mostBasic_world/parameters'].attrs.create('name', set_name) f2['/'].file.flush() dd = ku.calc_vessel_hydrodynamics( f2['mostBasic_world/vessels'], adaptionParams['calcflow']['includePhaseSeparationEffect'], False, None, adaptionParams['calcflow']) print('Calcflow done')
def createSymetricIrregular_world(fn): points = [] points.append([-10, 0, 0]) p1 = [-6, 4, 0] p2 = [-3, 6, 0] p3 = [-1, 7, 0] p4 = [-1, 5, 0] p5 = [-3, 2, 0] p6 = [-1, 3, 0] p7 = [-1, 1, 0] points.append(p1) points.append(p2) points.append(p3) points.append(p4) points.append(p5) points.append(p6) points.append(p7) #mirror y axis for i in range(len(points)): points.append([-points[i][0], points[i][1], points[i][2]]) node_a_index = [ 0, 1, 2, 2, 3, 11, 12, 10, 9, 1, 5, 6, 14, 5, 7, 15, 13, 4, 0, 17, 18, 18, 19, 27, 28, 26, 25, 17, 21, 22, 30, 21, 23, 31, 29, 20, 32, 8 ] node_b_index = [ 1, 2, 3, 4, 11, 10, 10, 9, 8, 5, 6, 14, 13, 7, 15, 13, 9, 12, 17, 18, 19, 20, 27, 26, 26, 25, 8, 21, 22, 30, 29, 23, 31, 29, 25, 28, 0, 33 ] flags = [] radii = [] flags.append(int(ku.ARTERY)) #0 radii.append(9.5) flags.append(int(ku.ARTERY)) #1 radii.append(8) flags.append(int(ku.ARTERY)) #2 radii.append(7.5) flags.append(int(ku.ARTERY)) #3 radii.append(7.) flags.append(int(ku.CAPILLARY)) #4 radii.append(6.5) flags.append(int(ku.VEIN)) #5 radii.append(7.) flags.append(int(ku.VEIN)) #6 radii.append(7.5) flags.append(int(ku.VEIN)) #7 radii.append(8) flags.append(int(ku.VEIN)) #8 radii.append(9.5) flags.append(int(ku.ARTERY)) #9 radii.append(8) flags.append(int(ku.ARTERY)) #10 radii.append(7.5) flags.append(int(ku.CAPILLARY)) #11 radii.append(6.5) flags.append(int(ku.VEIN)) #12 radii.append(7.5) flags.append(int(ku.ARTERY)) #13 radii.append(7.5) flags.append(int(ku.CAPILLARY)) #14 radii.append(6.5) flags.append(int(ku.VEIN)) #15 radii.append(7.5) flags.append(int(ku.VEIN)) #16 radii.append(8) flags.append(int(ku.CAPILLARY)) #17 radii.append(6.5) #mirror x axis for i in range(len(points)): points.append([points[i][0], -points[i][1], points[i][2]]) #double flags for i in range(len(flags)): flags.append(flags[i]) radii.append(radii[i]) #add entrence flags.append(int(ku.ARTERY)) radii.append(11.5) points.append([-13, 0, 0]) flags.append(int(ku.VEIN)) radii.append(11.5) points.append([13, 0, 0]) def reverse_xy(points): points2 = [] scale = 100 for point in points: points2.append([point[1] * scale, point[0] * scale, point[2]] * scale) return points2 def scale_points(points): points2 = [] scale = 100 for point in points: points2.append([point[0] * scale, point[1] * scale, point[2]] * scale) return points2 #points = reverse_xy(points) points = scale_points(points) #add circulated flag flags2 = [] for aflag in flags: flags2.append(np.bitwise_or(ku.CIRCULATED, aflag)) #radii=30*np.ones(len(node_a_index)) #radii=10*np.ones(len(node_a_index)) #now we will randomize the points a little bit def screw_points(points, variation): points2 = [] for point in points: points2.append([ point[0] + point[0] * np.random.normal(0, variation), point[1] + point[1] * np.random.normal(0, 2 * variation), point[2] + point[2] * np.random.normal(0, variation) ]) return points2 if os.path.isfile('screwed_points.h5'): f_out = h5py.File('screwed_points.h5', 'r') points = np.asarray(f_out['screwed_points']) else: points = screw_points(points, 0.05) f_out = h5py.File('screwed_points.h5', 'w') f_out.create_dataset('screwed_points', data=points) f_out.close() #write the data to a h5 file #f2 = h5files.open(fn,'w') f2 = fn f2.create_group('symetricIrregular/vessels') #edge stuff N_edges = len(radii) edgegrp = f2['symetricIrregular/vessels'].create_group("edges") edgegrp.attrs.create('COUNT', N_edges) ds_nodeA = edgegrp.create_dataset('node_a_index', data=node_a_index) ds_nodeB = edgegrp.create_dataset('node_b_index', data=node_b_index) ds_radius = edgegrp.create_dataset('radius', data=radii) #ds_hema = edgegrp.create_dataset('hematocrit', data=hema) #ds_flow = edgegrp.create_dataset('flow', data=flow) #mw_vessel_flags = get_flags_from_other_file() ds_vesselflags = edgegrp.create_dataset('flags', data=flags2) #node stuff N_nodes = len(points) nodegrp = f2['symetricIrregular/vessels'].create_group("nodes") nodegrp.attrs.create('COUNT', N_nodes) ds_roots = f2['symetricIrregular/vessels/nodes'].create_dataset( 'roots', data=[32, 33]) ds_bc_node_index = f2['symetricIrregular/vessels/nodes'].create_dataset( 'bc_node_index', data=[32, 33]) #dummy pressure for compatiblility #ds_pressure = f3['vessels/nodes'].create_dataset('roots_pressure', data = roots_pressure) ds_value_of_bc = f2['symetricIrregular/vessels/nodes'].create_dataset( 'bc_value', data=[70 * 0.133, 2.5e6]) ds_bctyp_of_roots = f2['symetricIrregular/vessels/nodes'].create_dataset( 'bc_type', data=[1, 2]) ds_world_pos = f2['symetricIrregular/vessels/nodes'].create_dataset( 'world_pos', data=np.array(points)) f2['symetricIrregular/vessels'].attrs.create('CLASS', 'REALWORLD') import krebsjobs.parameters.parameterSetsAdaption set_name = 'adaption_symetricIrregular_world' adaptionParams = getattr(krebsjobs.parameters.parameterSetsAdaption, set_name) #CALCULATE!!!! myutils.hdf_write_dict_hierarchy(f2['/'], 'symetricIrregular/parameters', adaptionParams) f2['symetricIrregular/parameters'].attrs.create('name', set_name) f2['/'].file.flush() dd = ku.calc_vessel_hydrodynamics( f2['symetricIrregular/vessels'], adaptionParams['calcflow']['includePhaseSeparationEffect'], False, None, adaptionParams['calcflow']) print('Calcflow done') #r = adap.computeAdaption(f3['vessels'], None, adaptionParams, adaptionParams['calcflow'], f3['/'] ) #dst_grp = f2['/symetric'].create_group('symetric/vessels_after_adaption') dd = adap.computeAdaption_( f2['/symetricIrregular'].create_group('vessels_after_adaption'), f2['symetricIrregular/vessels'], adaptionParams) a = os.system( "python2 /localdisk/thierry/tumorcode/py/krebs/hdfvessels2vtk.py test_configs.h5 /symetricIrregular/vessels_after_adaption/vessels_after_adaption" ) os.system( "python2 /localdisk/thierry/tumorcode/py/krebs/povrayRenderVessels.py test_configs.h5 /symetricIrregular/vessels_after_adaption/vessels_after_adaption" )
def createSymetric_worldB(fn): points = [] points.append([-10, 0, 0]) p1 = [-6, 4, 0] p2 = [-3, 6, 0] p3 = [-1, 7, 0] p4 = [-1, 5, 0] p5 = [-3, 2, 0] p6 = [-1, 3, 0] p7 = [-1, 1, 0] points.append(p1) points.append(p2) points.append(p3) points.append(p4) points.append(p5) points.append(p6) points.append(p7) #mirror y axis for i in range(len(points)): points.append([-points[i][0], points[i][1], points[i][2]]) node_a_index = [ 0, 1, 2, 2, 3, 11, 12, 10, 9, 1, 5, 6, 14, 5, 7, 15, 13, 4, 0, 17, 18, 18, 19, 27, 28, 26, 25, 17, 21, 22, 30, 21, 23, 31, 29, 20, 32, 8 ] node_b_index = [ 1, 2, 3, 4, 11, 10, 10, 9, 8, 5, 6, 14, 13, 7, 15, 13, 9, 12, 17, 18, 19, 20, 27, 26, 26, 25, 8, 21, 22, 30, 29, 23, 31, 29, 25, 28, 0, 33 ] flags = [] radii = [] # level0 = 12. # level1 = 10.1 # level2 = 8.5 # level3 = 7.1 level0 = 11.95 level1 = 9.55 level2 = 7.55 level3 = 6.0 flags.append(int(ku.ARTERY)) #0 radii.append(level1) flags.append(int(ku.ARTERY)) #1 radii.append(level2) flags.append(int(ku.ARTERY)) #2 radii.append(level3) flags.append(int(ku.ARTERY)) #3 radii.append(level3) flags.append(int(ku.CAPILLARY)) #4 radii.append(level3) flags.append(int(ku.VEIN)) #5 radii.append(level3) flags.append(int(ku.VEIN)) #6 radii.append(level3) flags.append(int(ku.VEIN)) #7 radii.append(level2) flags.append(int(ku.VEIN)) #8 radii.append(level1) flags.append(int(ku.ARTERY)) #9 radii.append(level2) flags.append(int(ku.ARTERY)) #10 radii.append(level3) flags.append(int(ku.CAPILLARY)) #11 radii.append(level3) flags.append(int(ku.VEIN)) #12 radii.append(level3) flags.append(int(ku.ARTERY)) #13 radii.append(level3) flags.append(int(ku.CAPILLARY)) #14 radii.append(level3) flags.append(int(ku.VEIN)) #15 radii.append(level3) flags.append(int(ku.VEIN)) #16 radii.append(level2) flags.append(int(ku.CAPILLARY)) #17 radii.append(level3) #mirror x axis for i in range(len(points)): points.append([points[i][0], -points[i][1], points[i][2]]) #double flags for i in range(len(flags)): flags.append(flags[i]) radii.append(radii[i]) #add entrence flags.append(int(ku.ARTERY)) radii.append(level0) points.append([-13, 0, 0]) flags.append(int(ku.VEIN)) radii.append(level0) points.append([13, 0, 0]) def reverse_xy(points): points2 = [] scale = 100 for point in points: points2.append([point[1] * scale, point[0] * scale, point[2]] * scale) return points2 #points = reverse_xy(points) points = scale_points(points) #add circulated flag flags2 = [] for aflag in flags: flags2.append(np.bitwise_or(ku.CIRCULATED, aflag)) #this datalist is after successfull adaption with all signals datalist = [ 13.301738, 9.563003, 7.1691427, 7.108207, 5.7596083, 5.6054125, 5.584573, 6.330745, 8.065095, 9.596836, 7.166868, 5.7524166, 5.6175594, 7.166868, 5.7524166, 5.6175594, 6.354387, 5.704988, 13.301738, 9.563003, 7.1691427, 7.108207, 5.7596083, 5.6054125, 5.584573, 6.330745, 8.065095, 9.596836, 7.166868, 5.7524166, 5.6175594, 7.166868, 5.7524166, 5.6175594, 6.354387, 5.704988, 17.057396, 9.972254 ] #radii = np.array(datalist) #radii=10*np.ones(len(node_a_index)) #radii=6.5*np.ones(len(node_a_index)) #write the data to a h5 file #f2 = h5files.open(fn,'w') f2 = fn f2.create_group('symetricB/vessels') #edge stuff N_edges = len(radii) edgegrp = f2['symetricB/vessels'].create_group("edges") edgegrp.attrs.create('COUNT', N_edges) ds_nodeA = edgegrp.create_dataset('node_a_index', data=node_a_index) ds_nodeB = edgegrp.create_dataset('node_b_index', data=node_b_index) ds_radius = edgegrp.create_dataset('radius', data=radii) #ds_hema = edgegrp.create_dataset('hematocrit', data=hema) #ds_flow = edgegrp.create_dataset('flow', data=flow) #mw_vessel_flags = get_flags_from_other_file() ds_vesselflags = edgegrp.create_dataset('flags', data=flags2) #node stuff N_nodes = len(points) nodegrp = f2['symetricB/vessels'].create_group("nodes") nodegrp.attrs.create('COUNT', N_nodes) ds_roots = f2['symetricB/vessels/nodes'].create_dataset('roots', data=[32, 33]) ds_bc_node_index = f2['symetricB/vessels/nodes'].create_dataset( 'bc_node_index', data=[32, 33]) #dummy pressure for compatiblility #ds_pressure = f3['vessels/nodes'].create_dataset('roots_pressure', data = roots_pressure) ds_value_of_bc = f2['symetricB/vessels/nodes'].create_dataset( 'bc_value', data=[70 * 0.133, 0.5e6]) ds_bctyp_of_roots = f2['symetricB/vessels/nodes'].create_dataset( 'bc_type', data=[1, 2]) ds_world_pos = f2['symetricB/vessels/nodes'].create_dataset( 'world_pos', data=np.array(points)) f2['symetricB/vessels'].attrs.create('CLASS', 'REALWORLD') import krebsjobs.parameters.parameterSetsAdaption set_name = 'adaption_symetricB_world' adaptionParams = getattr(krebsjobs.parameters.parameterSetsAdaption, set_name) #CALCULATE!!!! myutils.hdf_write_dict_hierarchy(f2['/'], 'symetricB/parameters', adaptionParams) f2['symetricB/parameters'].attrs.create('name', set_name) f2['/'].file.flush() dd = ku.calc_vessel_hydrodynamics( f2['symetricB/vessels'], adaptionParams['calcflow']['includePhaseSeparationEffect'], False, None, adaptionParams['calcflow']) print('Calcflow done') #r = adap.computeAdaption(f3['vessels'], None, adaptionParams, adaptionParams['calcflow'], f3['/'] ) #dst_grp = f2['/symetric'].create_group('symetric/vessels_after_adaption') dd = adap.computeAdaption_( f2['/symetricB'].create_group('vessels_after_adaption'), f2['symetricB/vessels'], adaptionParams) a = os.system( "python2 /localdisk/thierry/tumorcode/py/krebs/hdfvessels2vtk.py test_configs.h5 /symetricB/vessels_after_adaption/vessels_after_adaption" ) os.system( "python2 /localdisk/thierry/tumorcode/py/krebs/povrayRenderVessels.py test_configs.h5 /symetricB/vessels_after_adaption/vessels_after_adaption" )
def createAsymetric_world(fn): points = [] points.append([0, 0, 0]) points.append([200, 0, 0]) points.append([400, 0, 0]) points.append([600, 0, 0]) points.append([800, 0, 0]) points.append([1000, 0, 0]) points.append([1200, 0, 0]) points.append([1400, 0, 0]) points.append([1450, 120, 0]) points.append([1500, 240, 0]) points.append([1500, 360, 0]) points.append([1450, 480, 0]) points.append([1400, 600, 0]) points.append([1350, 480, 0]) points.append([1300, 360, 0]) points.append([1300, 240, 0]) points.append([1350, 120, 0]) points.append([1200, 600, 0]) points.append([1000, 600, 0]) points.append([800, 600, 0]) points.append([600, 600, 0]) points.append([400, 600, 0]) points.append([200, 600, 0]) points.append([0, 600, 0]) points.append([1200, 360, 0]) points.append([1000, 360, 0]) points.append([800, 360, 0]) points.append([600, 360, 0]) points.append([400, 360, 0]) points.append([200, 360, 0]) points.append([1200, 240, 0]) points.append([1000, 240, 0]) points.append([800, 240, 0]) points.append([600, 240, 0]) points.append([400, 240, 0]) points.append([200, 240, 0]) def scale_points(points): points2 = [] scale = 1 for point in points: points2.append([-point[0] * scale, -point[1] * scale, point[2]] * scale) return points2 #points = reverse_xy(points) points = scale_points(points) node_a_index = [] node_b_index = [] flags = [] radii = [] #1 node_a_index.append(0) node_b_index.append(1) flags.append(int(ku.ARTERY)) radii.append(7.5) #2 node_a_index.append(1) node_b_index.append(2) flags.append(int(ku.ARTERY)) radii.append(7.) #3 node_a_index.append(2) node_b_index.append(3) flags.append(int(ku.ARTERY)) radii.append(6.5) #4 node_a_index.append(3) node_b_index.append(4) flags.append(int(ku.ARTERY)) radii.append(6.0) #5 node_a_index.append(4) node_b_index.append(5) flags.append(int(ku.ARTERY)) radii.append(5.8) #6 node_a_index.append(5) node_b_index.append(6) flags.append(int(ku.ARTERY)) radii.append(5.6) #7 node_a_index.append(6) node_b_index.append(7) flags.append(int(ku.ARTERY)) radii.append(5.4) #8 node_a_index.append(7) node_b_index.append(8) flags.append(int(ku.ARTERY)) radii.append(5.2) #9 node_a_index.append(8) node_b_index.append(9) flags.append(int(ku.ARTERY)) radii.append(5.) #10 node_a_index.append(9) node_b_index.append(10) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #11 node_a_index.append(10) node_b_index.append(11) flags.append(int(ku.VEIN)) radii.append(7.) #12 node_a_index.append(11) node_b_index.append(12) flags.append(int(ku.VEIN)) radii.append(7.) #13 node_a_index.append(12) node_b_index.append(13) flags.append(int(ku.VEIN)) radii.append(7.) #14 node_a_index.append(13) node_b_index.append(14) flags.append(int(ku.VEIN)) radii.append(7.) #15 node_a_index.append(14) node_b_index.append(15) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #16 node_a_index.append(15) node_b_index.append(16) flags.append(int(ku.ARTERY)) radii.append(7.) #17 node_a_index.append(16) node_b_index.append(7) flags.append(int(ku.ARTERY)) radii.append(7.) #18 node_a_index.append(12) node_b_index.append(17) flags.append(int(ku.VEIN)) radii.append(7.) #19 node_a_index.append(17) node_b_index.append(18) flags.append(int(ku.VEIN)) radii.append(7.) #20 node_a_index.append(18) node_b_index.append(19) flags.append(int(ku.VEIN)) radii.append(7.) #21 node_a_index.append(19) node_b_index.append(20) flags.append(int(ku.VEIN)) radii.append(7.) #22 node_a_index.append(20) node_b_index.append(21) flags.append(int(ku.VEIN)) radii.append(7.) #23 node_a_index.append(21) node_b_index.append(22) flags.append(int(ku.VEIN)) radii.append(7.) #24 node_a_index.append(22) node_b_index.append(23) flags.append(int(ku.VEIN)) radii.append(7.) #25 node_a_index.append(17) node_b_index.append(24) flags.append(int(ku.VEIN)) radii.append(7.) #26 node_a_index.append(18) node_b_index.append(25) flags.append(int(ku.VEIN)) radii.append(7.) #27 node_a_index.append(19) node_b_index.append(26) flags.append(int(ku.VEIN)) radii.append(7.) #28 node_a_index.append(20) node_b_index.append(27) flags.append(int(ku.VEIN)) radii.append(7.) #29 node_a_index.append(21) node_b_index.append(28) flags.append(int(ku.VEIN)) radii.append(7.) #30 node_a_index.append(22) node_b_index.append(29) flags.append(int(ku.VEIN)) radii.append(7.) #31 node_a_index.append(24) node_b_index.append(30) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #32 node_a_index.append(25) node_b_index.append(31) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #33 node_a_index.append(26) node_b_index.append(32) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #34 node_a_index.append(27) node_b_index.append(33) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #35 node_a_index.append(28) node_b_index.append(34) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #36 node_a_index.append(29) node_b_index.append(35) flags.append(int(ku.CAPILLARY)) radii.append(4.5) #37 node_a_index.append(30) node_b_index.append(6) flags.append(int(ku.ARTERY)) radii.append(7.) #38 node_a_index.append(31) node_b_index.append(5) flags.append(int(ku.ARTERY)) radii.append(7.) #39 node_a_index.append(32) node_b_index.append(4) flags.append(int(ku.ARTERY)) radii.append(7.) #40 node_a_index.append(33) node_b_index.append(3) flags.append(int(ku.ARTERY)) radii.append(7.) #41 node_a_index.append(34) node_b_index.append(2) flags.append(int(ku.ARTERY)) radii.append(7.) #42 node_a_index.append(35) node_b_index.append(1) flags.append(int(ku.ARTERY)) radii.append(7.) #add circulated flag flags2 = [] for aflag in flags: flags2.append(np.bitwise_or(ku.CIRCULATED, aflag)) #radii=30*np.ones(len(node_a_index)) #write the data to a h5 file #f3 = h5files.open(fn,'w') f3 = fn f3.create_group('Asymetric/vessels') #edge stuff N_edges = len(radii) edgegrp = f3['Asymetric/vessels'].create_group("edges") edgegrp.attrs.create('COUNT', N_edges) ds_nodeA = edgegrp.create_dataset('node_a_index', data=node_a_index) ds_nodeB = edgegrp.create_dataset('node_b_index', data=node_b_index) ds_radius = edgegrp.create_dataset('radius', data=radii) #ds_hema = edgegrp.create_dataset('hematocrit', data=hema) #ds_flow = edgegrp.create_dataset('flow', data=flow) #mw_vessel_flags = get_flags_from_other_file() ds_vesselflags = edgegrp.create_dataset('flags', data=flags2) #node stuff N_nodes = len(points) nodegrp = f3['Asymetric/vessels'].create_group("nodes") nodegrp.attrs.create('COUNT', N_nodes) ds_bc_node_index = f3['Asymetric/vessels/nodes'].create_dataset( 'bc_node_index', data=[0, 23]) ds_roots = f3['Asymetric/vessels/nodes'].create_dataset('roots', data=[0, 23]) #dummy pressure for compatiblility #ds_pressure = f3['vessels/nodes'].create_dataset('roots_pressure', data = roots_pressure) ds_value_of_bc = f3['Asymetric/vessels/nodes'].create_dataset( 'bc_value', data=[70 * 0.133, 2.5e6]) """ Michael 1: press, 2, flow, Secomb 0: press, 2, flow """ ds_bctyp_of_roots = f3['Asymetric/vessels/nodes'].create_dataset( 'bc_type', data=[1, 2]) ds_world_pos = f3['Asymetric/vessels/nodes'].create_dataset( 'world_pos', data=np.array(points)) f3['Asymetric/vessels'].attrs.create('CLASS', 'REALWORLD') import krebsjobs.parameters.parameterSetsAdaption set_name = 'adaption_asymetric_world' adaptionParams = getattr(krebsjobs.parameters.parameterSetsAdaption, set_name) #CALCULATE!!!! myutils.hdf_write_dict_hierarchy(f3['/'], 'Asymetric/parameters', adaptionParams) f3['Asymetric/parameters'].attrs.create('name', set_name) f3['/'].file.flush() dd = ku.calc_vessel_hydrodynamics( f3['Asymetric/vessels'], adaptionParams['calcflow']['includePhaseSeparationEffect'], False, None, adaptionParams['calcflow']) print('Calcflow done') #r = adap.computeAdaption(f3['vessels'], None, adaptionParams, adaptionParams['calcflow'], f3['/'] ) dd = adap.computeAdaption_( f3['Asymetric'].create_group('vessels_after_adaption'), f3['Asymetric/vessels'], adaptionParams)
dataman = myutils.DataManager(100, [DataBasicVessel()]) filenames, pattern = args[:-1], args[-1] files = [ h5files.open(fn, 'a' if options.add_resistor_bc else 'r+') for fn in filenames ] groups = list( itertools.chain.from_iterable( myutils.walkh5(f, pattern, return_h5objects=True) for f in files)) for vesselgroup in groups: if options.force_flow_recompute and not options.add_resistor_bc: (pressure, flow, shearforce) = krebsutils.calc_vessel_hydrodynamics(vesselgroup) vessels = dataman.obtain_data('vessel_graph', vesselgroup, ['flags', 'radius']) vessels.edges['flow'] = flow vessels.nodes['pressure'] = pressure else: vessels = dataman.obtain_data( 'vessel_graph', vesselgroup, ['flow', 'pressure', 'flags', 'radius']) def DoBC(): conductivities, avgVenousPressure, avgArterialPressure, totalFlow = ComputeVascularTreeBloodFlowResistances( vessels) avgConductivity = (totalFlow / (avgArterialPressure - avgVenousPressure)) print 'avgVenousPressure', avgVenousPressure
def createMostBasic_world(fn): points = [] points.append([-5, 0, 0]) p1 = [0, 0, 0] p2 = [2.5, 3, 0] p3 = [7.5, 3, 0] p4 = [10, 0, 0] p5 = [2.5, -3, 0] p6 = [7.5, -3, 0] p7 = [15, 0, 0] points.append(p1) points.append(p2) points.append(p3) points.append(p4) points.append(p5) points.append(p6) points.append(p7) node_a_index = [0, 1, 2, 3, 1, 5, 6, 4] node_b_index = [1, 2, 3, 4, 5, 6, 4, 7] flags = [] radii = [] flags.append(int(ku.ARTERY)) #0 radii.append(7) flags.append(int(ku.ARTERY)) #1 radii.append(5) flags.append(int(ku.CAPILLARY)) #2 radii.append(3) flags.append(int(ku.VEIN)) #3 radii.append(6) flags.append(int(ku.ARTERY)) #4 radii.append(5) flags.append(int(ku.CAPILLARY)) #5 radii.append(3) flags.append(int(ku.VEIN)) #6 radii.append(6) flags.append(int(ku.VEIN)) #7 radii.append(10) f2 = fn f2.create_group('mostBasic_world/vessels') #edge stuff N_edges = len(radii) edgegrp = f2['mostBasic_world/vessels'].create_group("edges") edgegrp.attrs.create('COUNT', N_edges) ds_nodeA = edgegrp.create_dataset('node_a_index', data=node_a_index) ds_nodeB = edgegrp.create_dataset('node_b_index', data=node_b_index) ds_radius = edgegrp.create_dataset('radius', data=radii) #ds_hema = edgegrp.create_dataset('hematocrit', data=hema) #ds_flow = edgegrp.create_dataset('flow', data=flow) ds_vesselflags = edgegrp.create_dataset('flags', data=flags) #node stuff N_nodes = len(points) nodegrp = f2['mostBasic_world/vessels'].create_group("nodes") nodegrp.attrs.create('COUNT', N_nodes) ds_roots = f2['mostBasic_world/vessels/nodes'].create_dataset('roots', data=[0, 7]) ds_bc_node_index = f2['mostBasic_world/vessels/nodes'].create_dataset( 'bc_node_index', data=[0, 7]) ds_value_of_bc = f2['mostBasic_world/vessels/nodes'].create_dataset( 'bc_value', data=[5, 3]) ds_bctyp_of_roots = f2['mostBasic_world/vessels/nodes'].create_dataset( 'bc_type', data=[1, 1]) ds_world_pos = f2['mostBasic_world/vessels/nodes'].create_dataset( 'world_pos', data=np.array(points)) f2['mostBasic_world/vessels'].attrs.create('CLASS', 'REALWORLD') '''get some hydrodynamics parameters''' import krebsjobs.parameters.parameterSetsVesselGen set_name = 'default' vesselGenParams = getattr(krebsjobs.parameters.parameterSetsVesselGen, set_name) #CALCULATE!!!! myutils.hdf_write_dict_hierarchy(f2['/'], 'mostBasic_world/parameters', vesselGenParams['calcflow']) f2['mostBasic_world/parameters'].attrs.create('name', set_name) f2['/'].file.flush() #calc_vessel_hydrodynamics(vesselgroup, calc_hematocrit=False, return_flags=False, override_hematocrit = None, bloodflowparams = dict(),storeCalculationInHDF=False) dd = ku.calc_vessel_hydrodynamics( f2['mostBasic_world/vessels'], bloodflowparams=vesselGenParams['calcflow'], storeCalculationInHDF=True) print('Calcflow done')
vesselgrp.create_dataset('edges/hematocrit', data=hema_new) print("done... deleting double entries") if __name__ == '__main__': #write the data to a h5 file fn = 'apj.h5' f3 = h5files.open(fn, 'w') vesselgrp = f3.create_group('vessels') vesselgrp.attrs.create('CLASS', 'REALWORLD') '''***** INPUT *****''' '''path to apj_network_546_segments.txt this might change during your installation''' path_to_txt = '/home/usersHR/thierry/tumorcode/py/krebs/adaption' get_network_from_file(vesselgrp, path_to_txt) node_label2index = get_nodes_from_file(vesselgrp, path_to_txt) delete_double_edges(vesselgrp) correct_vessel_indeces(node_label2index, vesselgrp) '''***** tumorcode stuff *****''' import krebsjobs.parameters.parameterSetsAdaption adaptionParams = getattr(krebsjobs.parameters.parameterSetsAdaption, 'apj') ##CALCULATE!!!! #pressure, flow, force, hema, flags = ku.calc_vessel_hydrodynamics(f3['vessels'], False, False, None, adaptionParams['calcflow'],storeCalculationInHDF=True) dd = ku.calc_vessel_hydrodynamics( f3['vessels'], return_flags=True, bloodflowparams=adaptionParams['calcflow'], storeCalculationInHDF=True) f3.close