#!/usr/bin/python
import copy
import math
class SwcNode:
"""Encapsulates a single Swc node"""
def __init__(self, formatted_node):
"""Initializes a point from a test string.
formatted_node: An swc-formatted text string describing a single node.
That is, a single line of an SWC text file.
"""
text_elements = formatted_node.split()
if len(text_elements) != 7:
print "ERROR: Node formatted incorrectly."
self._id = int(text_elements[0])
self._type = int(text_elements[1])
self._x = float(text_elements[2])
self._y = float(text_elements[3])
self._z = float(text_elements[4])
self._radius = float(text_elements[5])
self._parent_id = float(text_elements[6])
self._children = []
self._node_count_from_soma = -1
def Id(self):
return self._id
# TODO(pcoskren): Have this return a constant so that client code doesn't have
# to depend on a bare integer.
def Type(self):
"""Returns the node's type:
0: undefined
1: soma
2: axon
3: basal
4: apical
5: branch point
6: tip
7: custom
"""
return self._type
def SetType(self, type):
self._type = type
def X(self):
return self._x
def Y(self):
return self._y
def Z(self):
return self._z
def Radius(self):
return self._radius
def ParentId(self):
return self._parent_id
def AddChild(self, node):
self._children.append(node.Id())
def Children(self):
return self._children
def SetNodeCountFromSoma(self, node_count):
self._node_count_from_soma = node_count
def NodeCountFromSoma(self):
return self._node_count_from_soma
def ToString(self):
children_string = '[ '
first = 1
for each_id in self._children:
if not first:
children_string += ', '
children_string += str(each_id)
first = 0
children_string += ' ]'
return "%d\t%d\t%f\t%f\t%f\t%f\t%d\t%s" % (self._id, self._type, self._x,
self._y, self._z, self._radius,
self._parent_id, children_string)