def boxcountInitialVessels(fn, opts): items_to_analyze = [ 'arteries', 'veins', 'capillaries', 'complete', 'arteriovenous' ] with h5py.File(fn, 'r') as f: data = {} for item_to_analyze in items_to_analyze: calcBoxCounts(data, f['vessels'], item_to_analyze, opts) with myutils.MeasurementFile(fn, h5files, opts.prefix) as fdst: gdst = fdst.recreate_group('fractaldim') myutils.hdf_write_dict_hierarchy(gdst, '.', data)
def computeAdaption_(gdst, vesselgroup, parameters): #myutils.buildLink(gdst, 'SOURCE_VESSELS', vesselgroup) #gdst.attrs['PARAMETER_CHECKSUM'] = myutils.checksum(parameters) #gdst.attrs['UUID'] = myutils.uuidstr() #writing parameters as acsii string. but i think it is better to store them as hdf datasets directly #ds = gdst.create_dataset('PARAMETERS_AS_JSON', data = np.string_(json.dumps(parameters, indent=2))) #myutils.hdf_write_dict_hierarchy(gdst, 'parameters', parameters) #gdst.file.flush() # now we can compute Adaption. The c++ routine can a.t.m. only read from hdf so it has to use our new file r = adaption_cpp.computeAdaption(vesselgroup, parameters['adaption'], parameters['calcflow'], gdst) myutils.hdf_write_dict_hierarchy(gdst, 'parameters', parameters) gdst.file.flush()
def doit_optimize(vesselFileName,adaptParams,BfParams): returns = adaption_cpp.doAdaptionOptimization(vesselFileName,adaptParams,BfParams) print("should be optimized vaules:") print(returns) print('from file: %s' %vesselFileName) f_results = h5files.open("optimize_results.h5", 'a') a_uuid = str(uuid.uuid4()) g = f_results.create_group(vesselFileName + '_' + a_uuid) g.create_dataset('x_opt', data=returns) myutils.hdf_write_dict_hierarchy(g, 'adaptParams', adaptParams) myutils.hdf_write_dict_hierarchy(g, 'BfParams', BfParams) g.file.flush() #f_results.close() return returns
def boxcountTumorVessels(fn, opts): items_to_analyze = ['complete', 'withintumor'] with h5py.File(fn, 'r') as f: groups = myutils.getTimeSortedGroups(f['.'], "out") for g in groups[-1:]: data = {} print '%s : %s' % (fn, g.name) for item_to_analyze in items_to_analyze: calcBoxCounts(data, g['vessels'], item_to_analyze, opts) with myutils.MeasurementFile(fn, h5files, opts.prefix) as fdst: dstgroup = myutils.require_snapshot_group_(fdst, g) fdst.attrs.create('tumorcode_file_type', data='fractaldim_analyze_bulktum') #gdst = fdst.require_snapshot_group_(g) #gdst = gdst.recreate_group('fractaldim') #myutils.hdf_write_dict_hierarchy(gdst, '.', data) myutils.hdf_write_dict_hierarchy(dstgroup, 'fractaldim', data)
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)
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')
def generate_data(statedata, dstgroup): """ main routine that does all the measurement. Enable Individual parts. Computed date overwrites old data. """ print statedata.file.filename, statedata.name time = statedata.attrs['time'] tum_grp = statedata['tumor'] tum_ld = get_tumld(tum_grp) cellvol = tum_ld.scale**3 distmap = calc_distmap(tum_grp) radialmap = krebsutils.make_radial_field(tum_ld) axial_max_rad = np.max(np.abs(tum_ld.worldBox.ravel())) ptc = np.asarray(tum_grp['ptc']) if 1: ## shape data: rim surface area, volume vtkds, = extractVtkFields.Extractor(statedata['tumor'], ['ls']).asVtkDataSets() area = integrate_surface(vtkds) del vtkds vol = np.sum(ptc) * cellvol radius = np.average(radialmap[np.nonzero( np.logical_and(distmap > -2 * tum_ld.scale, distmap < 2 * tum_ld.scale))]) sphere_equiv_radius = math.pow(vol * 3. / (4. * math.pi), 1. / 3.) sphere_equiv_area = 4. * math.pi * (sphere_equiv_radius**2) sphericity = sphere_equiv_area / area #cylinder vol = pi r^2 h cylinder_equiv_radius = math.sqrt(vol / tum_ld.GetWorldSize()[2] / math.pi) cylinder_equiv_area = 2. * math.pi * cylinder_equiv_radius * tum_ld.GetWorldSize( )[2] cylindericity = cylinder_equiv_area / area d = dict(time=time, area=area, volume=vol, radius=radius, sphericity=sphericity, cylindericity=cylindericity, sphere_equiv_radius=sphere_equiv_radius, sphere_equiv_area=sphere_equiv_area, cylinder_equiv_radius=cylinder_equiv_radius, cylinder_equiv_area=cylinder_equiv_area) pprint(d) print 'geometry data for %s/%s' % (statedata.file.filename, statedata.name) g = dstgroup.recreate_group('geometry') myutils.hdf_write_dict_hierarchy(g, '.', d) if 1: print 'regenerating radial for %s/%s' % (statedata.file.filename, statedata.name) dstdata = dstgroup.recreate_group('radial') ## radial data; vessels vessels = krebsutils.read_vesselgraph(statedata['vessels'], [ 'position', 'flags', 'shearforce', 'radius', 'flow', 'maturation' ]) vessels = vessels.get_filtered( edge_indices=(vessels.edges['flags'] & krebsutils.CIRCULATED != 0)) sample_length = 50. far = 1.e10 s = plotVessels.generate_samples(vessels, 'position', 'nodes', sample_length) dist = krebsutils.sample_field(s, distmap, tum_ld, linear_interpolation=True, extrapolation_value=far) rad = krebsutils.sample_field(s, radialmap, tum_ld, linear_interpolation=True, extrapolation_value=far) del s dstdata.recreate_group('vs_r').create_dataset( 'bins', data=np.average((bins_rad[:-1], bins_rad[1:]), axis=0)) dstdata.recreate_group('vs_dr').create_dataset( 'bins', data=np.average((bins_dist[:-1], bins_dist[1:]), axis=0)) # dstdata['vs_r'] = dict(bins = np.average((bins_rad[:-1],bins_rad[1:]), axis=0)) # dstdata['vs_dr'] = dict(bins = np.average((bins_dist[:-1],bins_dist[1:]), axis=0)) # def add_histogram_data(dst, name, (s_avg, s_std, s_sqr)): # dst[name] = dict(avg = s_avg, std = s_std, sqr = s_sqr) for name in ['shearforce', 'radius', 'flow', 'maturation']: s = plotVessels.generate_samples(vessels, name, 'edges', sample_length) myutils.MeanValueArray.fromHistogram1d(bins_rad, rad, s).write( dstdata['vs_r'], name) myutils.MeanValueArray.fromHistogram1d(bins_dist, dist, s).write( dstdata['vs_dr'], name) # d = myutils.scatter_histogram(rad, s, bins_rad, 1.) # add_histogram_data(dstdata['vs_r'], name, d) # d = myutils.scatter_histogram(dist, s, bins_dist, 1.) # add_histogram_data(dstdata['vs_dr'], name, d) def make_mvd(flavor, s, bins, smap, mask_bound): a = myutils.MeanValueArray.fromHistogram1d(bins, s, np.ones_like(s)) b = myutils.MeanValueArray.fromHistogram1d( bins, smap.ravel(), np.ones_like(smap.ravel())) a.cnt = b.cnt.copy() a.sum *= sample_length / cellvol a.sqr *= a.sum**2 a.write(dstdata[flavor], 'mvd') # d = myutils.scatter_histogram(xdata, np.ones_like(xdata), bins=bins, xdata2 = np.ravel(xdata2)) # m = dstdata[flavor]['bins'] > mask_bound # for x in d[:2]: # x *= sample_length/cellvol # x.mask |= m # for x in d[2:]: # x *= (sample_length/cellvol)**2 # x.mask |= m # add_histogram_data(dstdata[flavor], 'mvd', d) make_mvd('vs_r', rad, bins_rad, radialmap, axial_max_rad) make_mvd('vs_dr', dist, bins_dist, distmap, 1000.) # pyplot.errorbar(dstdata['vs_dr']['bins'], dstdata['vs_dr']['mvd_avg'], yerr=dstdata['vs_dr']['mvd_std']) # pyplot.show() del rad, dist for name in ['conc', 'sources', 'ptc', 'press']: a = np.ravel(np.asarray(tum_grp[name])) myutils.MeanValueArray.fromHistogram1d( bins_rad, np.ravel(radialmap), a).write(dstdata['vs_r'], name) myutils.MeanValueArray.fromHistogram1d(bins_dist, np.ravel(distmap), a).write( dstdata['vs_dr'], name) # d = myutils.scatter_histogram(np.ravel(distmap), np.ravel(np.asarray(tum_grp[name])), bins_dist, 1.) # add_histogram_data(dstdata['vs_dr'], name, d) # d = myutils.scatter_histogram(np.ravel(radialmap), np.ravel(np.asarray(tum_grp[name])), bins_rad, 1.) # add_histogram_data(dstdata['vs_r'], name, d) # velocities, projected radially outward vel_field = tuple( np.asarray(tum_grp['vel'][:, :, :, i]) for i in range(3)) vnorm = np.zeros(distmap.shape, dtype=np.float32) dgrad = krebsutils.field_gradient(radialmap, spacing=tum_ld.scale) for vv, g in zip(vel_field, dgrad): vnorm += vv * g del vel_field, dgrad phi_tumor = ptc * np.asarray(tum_grp['conc']) oxy = np.asarray(statedata['fieldOxy']) gf = np.array(statedata['fieldGf']) for name, field in [('phi_tumor', phi_tumor), ('vel', vnorm), ('oxy', oxy), ('gf', gf)]: a = np.ravel(field) myutils.MeanValueArray.fromHistogram1d( bins_rad, np.ravel(radialmap), a).write(dstdata['vs_r'], name) myutils.MeanValueArray.fromHistogram1d(bins_dist, np.ravel(distmap), a).write( dstdata['vs_dr'], name)