@@ -1851,6 +1851,7 @@ def construct_optimizer(tree, point, vessel, **kwargs):
18511851 lines [2 , 3 :6 ] = terminal
18521852 lines [:, 12 :15 ] = (lines [:, 3 :6 ] - lines [:, 0 :3 ])/ numpy .linalg .norm (lines [:, 3 :6 ] - lines [:, 0 :3 ]).reshape (- 1 , 1 )
18531853 lines [0 , 21 ] = data [vessel , 21 ]
1854+ parent_vessel = data [vessel , 17 ]
18541855 if tree .clamped_root and vessel == 0 :
18551856 get_line_pt = map_clamped (tree , point , vessel )
18561857 def cost (x , func = tree_cost_2 , d_min = d_min , terminal = terminal ,
@@ -1910,13 +1911,22 @@ def cost(x, func=tree_cost_2, d_min=d_min, terminal=terminal,
19101911 vec1 = vec1 / numpy .linalg .norm (vec1 )
19111912 vec2 = vec2 / numpy .linalg .norm (vec2 )
19121913 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 )
1914+ angle1 = numpy .arccos (numpy .dot (vec1 , vec3 ))* (180 / numpy .pi )
1915+ angle2 = numpy .arccos (numpy .dot (vec2 , vec3 ))* (180 / numpy .pi )
19151916 #angle3 = numpy.arccos(numpy.dot(vec3, vec1))*(180/numpy.pi)
1917+ #ADD Parent angles
1918+
19161919 if angle1 > 90 or angle2 > 90 :
19171920 angle_penalty = penalty
19181921 else :
19191922 angle_penalty = 0.0
1923+ if parent_vessel != numpy .nan :
1924+ parent_vessel = int (parent_vessel )
1925+ vec4 = data [parent_vessel , 3 :6 ] - data [parent_vessel , 0 :3 ]
1926+ vec4 = vec4 / numpy .linalg .norm (vec4 )
1927+ angle3 = numpy .arccos (numpy .dot (vec3 , vec4 ))* (180 / numpy .pi )
1928+ if angle3 > 90 :
1929+ angle_penalty += penalty
19201930 triad_penalty = numpy .max ([0.0 , - 1.0 * numpy .min (dists - d_min )])/ d_min * penalty
19211931 #[TODO] angle penalty
19221932 #[TODO] require that resulting parent vessel is at least a certain length? remove buffer region around triad
0 commit comments