Skip to content

Commit 5573bf5

Browse files
authored
Merge pull request #41 from zasexton/main
fixing mis-matched "GlobalNodeID" type expectations
2 parents 6336525 + 7146f96 commit 5573bf5

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

svv/simulation/simulation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,9 @@ def build_meshes(self, fluid=True, tissue=False, hausd=0.0001, hsize=None, minra
200200
hmin = ((4.0*low_tri_area)/3.0**0.5) ** (0.5)
201201
upper_tri_area = area / lower_num_triangles
202202
hmax = ((4.0*upper_tri_area)/3.0**0.5) ** (0.5)
203-
#tissue_domain = remesh_surface(tissue_domain, hausd=hausd)
204-
#else:
205-
# #tissue_domain = remesh_surface(tissue_domain, hausd=hausd)
203+
tissue_domain = remesh_surface(tissue_domain, hausd=hausd)
204+
else:
205+
tissue_domain = remesh_surface(tissue_domain, hausd=hausd)
206206
tet_tissue = tetgen.TetGen(tissue_domain)
207207
if not fluid:
208208
self.synthetic_object.data[0, 0:3] += root_extension * self.synthetic_object.data.get('w_basis', 0)

svv/simulation/utils/extract_faces.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ def compute_circularity(loop_polydata):
407407
npts = face.GetNumberOfPoints()
408408
# Canonicalize face nodes to a sorted tuple so orientation/order doesn't matter
409409
key = tuple(sorted(face.GetPointId(k) for k in range(npts)))
410+
print("key: {} -> {}".format(key, i))
410411
face_to_cell[key] = i
411412
#for i, cap in enumerate(iscap):
412413
# if not cap == 1:
@@ -422,9 +423,9 @@ def compute_circularity(loop_polydata):
422423
if not isinstance(mesh, type(None)):
423424
wall_surface.point_data["GlobalNodeID"] = numpy.zeros(wall_surface.n_points, dtype=numpy.int32)
424425
wall_surface.cell_data['GlobalElementID'] = numpy.zeros(wall_surface.n_cells, dtype=numpy.int32)
425-
wall_surface.cell_data['ModelFaceID'] = numpy.ones(wall_surface.n_cells, dtype=numpy.int32)
426+
wall_surface.cell_data['ModelFaceID'] = numpy.ones(wall_surface.n_cells, dtype=numpy.int32) * i
426427
_, indices = global_node_tree.query(wall_surface.points)
427-
wall_surface.point_data["GlobalNodeID"] = indices.astype(int)
428+
wall_surface.point_data["GlobalNodeID"] = indices.astype(numpy.int32)
428429
# Assign Global Element IDs
429430
wall_faces = wall_surface.point_data["GlobalNodeID"][wall_surface.faces]
430431
wall_faces = wall_faces.reshape(-1, 4)[:, 1:].tolist()
@@ -465,10 +466,10 @@ def compute_circularity(loop_polydata):
465466
if not isinstance(mesh, type(None)):
466467
cap_surface.point_data["GlobalNodeID"] = numpy.zeros(cap_surface.n_points, dtype=numpy.int32)
467468
cap_surface.cell_data["GlobalElementID"] = numpy.zeros(cap_surface.n_cells, dtype=numpy.int32)
468-
cap_surface.cell_data["ModelFaceID"] = numpy.ones(cap_surface.n_cells, dtype=numpy.int32)
469+
cap_surface.cell_data["ModelFaceID"] = numpy.ones(cap_surface.n_cells, dtype=numpy.int32) * (len(walls) + i)
469470
# Assign Global Node IDs
470471
_, indices = global_node_tree.query(cap_surface.points)
471-
cap_surface.point_data["GlobalNodeID"] = indices.astype(int)
472+
cap_surface.point_data["GlobalNodeID"] = indices.astype(numpy.int32)
472473
# Assign Global Element IDs
473474
cap_faces = cap_surface.point_data["GlobalNodeID"][cap_surface.faces]
474475
cap_faces = cap_faces.reshape(-1, 4)[:, 1:].tolist()
@@ -507,10 +508,10 @@ def compute_circularity(loop_polydata):
507508
if not isinstance(mesh, type(None)):
508509
lumen_surface.point_data["GlobalNodeID"] = numpy.zeros(lumen_surface.n_points, dtype=int)
509510
lumen_surface.cell_data["GlobalElementID"] = numpy.zeros(lumen_surface.n_cells, dtype=int)
510-
lumen_surface.cell_data["ModelFaceID"] = numpy.ones(lumen_surface.n_cells, dtype=int) * (len(caps) + i + 2)
511+
lumen_surface.cell_data["ModelFaceID"] = numpy.ones(lumen_surface.n_cells, dtype=int) * (len(walls) + len(caps) + i)
511512
# Assign Global Node IDs
512513
_, indices = global_node_tree.query(lumen_surface.points)
513-
lumen_surface.point_data["GlobalNodeID"] = indices.astype(int)
514+
lumen_surface.point_data["GlobalNodeID"] = indices.astype(numpy.int32)
514515
# Assign Global Element IDs
515516
lumen_faces = lumen_surface.point_data["GlobalNodeID"][lumen_surface.faces]
516517
lumen_faces = lumen_faces.reshape(-1, 4)[:, 1:].tolist()

svv/tree/branch/bifurcation.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1904,6 +1904,19 @@ def cost(x, func=tree_cost_2, d_min=d_min, terminal=terminal,
19041904
dists = numpy.array([numpy.linalg.norm(lines[0, 0:3] - x),
19051905
numpy.linalg.norm(lines[0, 3:6] - x),
19061906
numpy.linalg.norm(lines[1, 3:6] - x)])
1907+
vec1 = distal - x
1908+
vec2 = terminal - x
1909+
vec3 = proximal - x
1910+
vec1 = vec1/numpy.linalg.norm(vec1)
1911+
vec2 = vec2/numpy.linalg.norm(vec2)
1912+
vec3 = vec3/numpy.linalg.norm(vec3)
1913+
angle1 = numpy.arctan2(numpy.dot(vec1, vec3))*(180/numpy.pi)
1914+
angle2 = numpy.arctan2(numpy.dot(vec2, vec3))*(180/numpy.pi)
1915+
#angle3 = numpy.arccos(numpy.dot(vec3, vec1))*(180/numpy.pi)
1916+
if angle1 > 90 or angle2 > 90:
1917+
angle_penalty = penalty
1918+
else:
1919+
angle_penalty = 0.0
19071920
triad_penalty = numpy.max([0.0, -1.0 * numpy.min(dists - d_min)])/d_min * penalty
19081921
#[TODO] angle penalty
19091922
#[TODO] require that resulting parent vessel is at least a certain length? remove buffer region around triad
@@ -1924,7 +1937,7 @@ def cost(x, func=tree_cost_2, d_min=d_min, terminal=terminal,
19241937
#assert results > tree_scale, '{} results < {} tree_scale'.format(results, tree_scale)
19251938
#return (((np.clip(numpy.nan_to_num(results - scale, nan=2*scale+penalty), 0, 2*scale+penalty) + triad_penalty))/(scale+penalty))# + 1.0
19261939
#return -1/np.clip(numpy.nan_to_num(results - scale, nan=2*scale+penalty), 0, 2*scale+penalty)
1927-
return -1 / np.clip(numpy.nan_to_num(results + triad_penalty, nan=2 * scale + penalty), 0, 2 * scale + penalty)
1940+
return -1 / np.clip(numpy.nan_to_num(results + triad_penalty + angle_penalty, nan=2 * scale + penalty), 0, 2 * scale + penalty)
19281941
#return results
19291942
#return results
19301943
#return value

0 commit comments

Comments
 (0)