Esempio n. 1
0
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)
Esempio n. 2
0
 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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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')
Esempio n. 6
0
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"
    )
Esempio n. 7
0
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"
    )
Esempio n. 8
0
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)
Esempio n. 9
0
    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
Esempio n. 10
0
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')
Esempio n. 11
0
    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