def test_bounding_box(): soma = neuron.make_soma([[0, 0, 0, 1, 1, 1, -1]]) nrn = neuron.Neuron(soma, [TREE]) ref1 = ((-1, -1, -1), (4.0, 6.0, 3.0)) for a, b in izip(nrn.bounding_box(), ref1): nt.assert_true(np.allclose(a, b)) soma = neuron.make_soma(SOMA_A_PTS) nrn = neuron.Neuron(soma, [TREE]) ref2 = ((-33, -22, -11), (55, 66, 77)) for a, b in izip(nrn.bounding_box(), ref2): nt.assert_true(np.allclose(a, b))
def test_neuron(): soma = neuron.make_soma(SOMA_A_PTS) nrn = neuron.Neuron(soma, ['foo', 'bar']) nt.assert_equal(nrn.soma.center, (11, 22, 33)) nt.assert_equal(nrn.neurites, ['foo', 'bar']) nt.assert_equal(nrn.name, 'Neuron') nrn = neuron.Neuron(soma, ['foo', 'bar'], 'test') nt.assert_equal(nrn.name, 'test')
def test_neuron(): soma = neuron.make_soma(SOMA_A_PTS) nrn = neuron.Neuron(soma, ['foo', 'bar']) nt.assert_items_equal(nrn.soma.center, (11, 22, 33)) nt.assert_equal(nrn.neurites, ['foo', 'bar']) nt.assert_equal(nrn.name, 'Neuron') nrn = neuron.Neuron(soma, ['foo', 'bar'], 'test') nt.assert_equal(nrn.name, 'test')
def test_i_neurites_filter(): soma = neuron.make_soma(SOMA_A_PTS) nrn = neuron.Neuron(soma, ['foo', 'bar', 'baz']) ref = 'barbaz' for i, j in izip(ref, nrn.i_neurites(iter, tree_filter=lambda s: s.startswith('b'))): nt.assert_equal(i, j)
def test_trunk_elevation(): t = Tree((1, 0, 0, 2)) s = make_soma([[0, 0, 0, 4]]) nt.assert_equal(trunk_elevation(t, s), 0.0) t = Tree((0, 1, 0, 2)) nt.assert_equal(trunk_elevation(t, s), np.pi/2) t = Tree((0, -1, 0, 2)) nt.assert_equal(trunk_elevation(t, s), -np.pi/2) t = Tree((0, 0, 0, 2)) try: trunk_elevation(t, s) nt.ok_(False) except ValueError: nt.ok_(True)
def make_neuron(raw_data, tree_action=None): """Build a neuron from a raw data block The tree contains rows of raw data. Parameters: raw_data: a RawDataWrapper object. tree_action: optional function to run on the built trees. Raises: SomaError if no soma points in raw_data or points incompatible with soma. IDSequenceError if filename contains invalid ID sequence """ _soma = make_soma([raw_data.get_row(s_id) for s_id in get_soma_ids(raw_data)]) _trees = [make_tree(raw_data, iseg, tree_action) for iseg in get_initial_neurite_segment_ids(raw_data)] return Neuron(_soma, _trees)
def test_copy(): soma = neuron.make_soma([[0, 0, 0, 1, 1, 1, -1]]) nrn1 = neuron.Neuron(soma, [TREE], name="Rabbit of Caerbannog") nrn2 = nrn1.copy() # check if two neurons are identical # somata nt.assert_true(isinstance(nrn2.soma, type(nrn1.soma))) nt.assert_true(nrn1.soma.radius == nrn2.soma.radius) for v1, v2 in izip(nrn1.soma.iter(), nrn2.soma.iter()): nt.assert_true(np.allclose(v1, v2)) # neurites for neu1, neu2 in izip(nrn1.neurites, nrn2.neurites): nt.assert_true(isinstance(neu2, type(neu1))) for v1, v2 in izip(val_iter(ipreorder(neu1)), val_iter(ipreorder(neu2))): nt.assert_true(np.allclose(v1, v2)) # check if the ids are different # somata nt.assert_true( nrn1.soma is not nrn2.soma) # neurites for neu1, neu2 in izip(nrn1.neurites, nrn2.neurites): nt.assert_true(neu1 is not neu2) # check if changes are propagated between neurons nrn2.soma.radius = 10. nt.assert_false(nrn1.soma.radius == nrn2.soma.radius) # neurites for neu1, neu2 in izip(nrn1.neurites, nrn2.neurites): for v1, v2 in izip(val_iter(ipreorder(neu1)), val_iter(ipreorder(neu2))): v2 = np.array([-1000., -1000., -1000., 1000., -100., -100., -100.]) nt.assert_false(any(v1 == v2))
def make_neuron(raw_data, tree_action=None): '''Build a neuron from a raw data block The tree contains rows of raw data. Parameters: raw_data: a RawDataWrapper object. tree_action: optional function to run on the built trees. Raises: SomaError if no soma points in raw_data or points incompatible with soma. ''' _soma = make_soma( [raw_data.get_row(s_id) for s_id in get_soma_ids(raw_data)]) _trees = [ make_tree(raw_data, iseg, tree_action) for iseg in get_initial_segment_ids(raw_data) ] return Neuron(_soma, _trees)
def test_trunk_azimuth(): t = Tree((0, 0, 0, 2)) s = make_soma([[0, 0, 1, 4]]) nt.assert_equal(trunk_azimuth(t, s), -np.pi/2) s = make_soma([[0, 0, -1, 4]]) nt.assert_equal(trunk_azimuth(t, s), np.pi/2) s = make_soma([[0, 0, 0, 4]]) nt.assert_equal(trunk_azimuth(t, s), 0.0) s = make_soma([[-1, 0, -1, 4]]) nt.assert_equal(trunk_azimuth(t, s), np.pi/4) s = make_soma([[-1, 0, 0, 4]]) nt.assert_equal(trunk_azimuth(t, s), 0.0) s = make_soma([[1, 0, 0, 4]]) nt.assert_equal(trunk_azimuth(t, s), np.pi)
iterator: tree iterator for a tree holding raw data rows. ''' return imap(as_point, tree.val_iter(iterator)) if __name__ == '__main__': filename = 'test_data/swc/Neuron.swc' rd = load_data(filename) init_seg_ids = get_initial_segment_ids(rd) trees = [make_tree(rd, sg) for sg in init_seg_ids] soma = neuron.make_soma([rd.get_row(si) for si in get_soma_ids(rd)]) for tr in trees: for p in point_iter(tree.ipreorder(tr)): LOG.debug(p) LOG.info('Initial segment IDs: %s', init_seg_ids) nrn = neuron.Neuron(soma, trees) LOG.info('Neuron soma raw data % s', [r for r in nrn.soma.iter()]) LOG.info('Neuron soma points %s', [as_point(p) for p in nrn.soma.iter()]) LOG.info('Neuron tree init points, types') for tt in nrn.neurites:
def test_i_neurites_chains(): soma = neuron.make_soma(SOMA_A_PTS) nrn = neuron.Neuron(soma, ['foo', 'bar', 'baz']) s = 'foobarbaz' for i, j in izip(s, nrn.i_neurites(iter)): nt.assert_equal(i, j)
iterator: tree iterator for a tree holding raw data rows. ''' return imap(as_point, tree.val_iter(iterator)) if __name__ == '__main__': filename = 'test_data/swc/Neuron.swc' rd = load_data(filename) init_seg_ids = get_initial_segment_ids(rd) trees = [make_tree(rd, sg) for sg in init_seg_ids] soma = neuron.make_soma([rd.get_row(si) for si in get_soma_ids(rd)]) for tr in trees: for p in point_iter(tree.ipreorder(tr)): print p print 'Initial segment IDs:', init_seg_ids nrn = neuron.Neuron(soma, trees) print 'Neuron soma raw data', [r for r in nrn.soma.iter()] print 'Neuron soma points', [as_point(p) for p in nrn.soma.iter()] print 'Neuron tree init points, types' for tt in nrn.neurites: print tt.value[COLS.ID], tt.value[COLS.TYPE]
def test_invalid_soma_points_2_raises_SomaError(): neuron.make_soma(INVALID_PTS_2)
def check_SomaC(points): soma = neuron.make_soma(points) nt.ok_('SomaC' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaC)) nt.assert_items_equal(soma.center, (11, 22, 33)) nt.ok_(soma.radius == 0.0)
def test_trunk_direction(): t = Tree((1, 0, 0, 2)) s = make_soma([[0, 0, 0, 4]]) nt.ok_(np.allclose(trunk_direction(t, s), np.array([1, 0, 0])))
import numpy as np from copy import copy TREE = Tree([0.0, 0.0, 0.0, 1.0, 1, 1, 2]) T1 = TREE.add_child(Tree([0.0, 1.0, 0.0, 1.0, 1, 1, 2])) T2 = T1.add_child(Tree([0.0, 2.0, 0.0, 1.0, 1, 1, 2])) T3 = T2.add_child(Tree([0.0, 4.0, 0.0, 2.0, 1, 1, 2])) T4 = T3.add_child(Tree([0.0, 5.0, 0.0, 2.0, 1, 1, 2])) T5 = T4.add_child(Tree([2.0, 5.0, 0.0, 1.0, 1, 1, 2])) T6 = T4.add_child(Tree(np.array([0.0, 5.0, 2.0, 1.0, 1, 1, 2]))) T7 = T5.add_child(Tree(np.array([3.0, 5.0, 0.0, 0.75, 1, 1, 2]))) T8 = T7.add_child(Tree(np.array([4.0, 5.0, 0.0, 0.75, 1, 1, 2]))) T9 = T6.add_child(Tree(np.array([0.0, 5.0, 3.0, 0.75, 1, 1, 2]))) T10 = T9.add_child(Tree(np.array([0.0, 6.0, 3.0, 0.75, 1, 1, 2]))) SOMA = make_soma(np.array([[0., 0., 0., 1., 1., 1., -1.]])) NEURON = Neuron(SOMA, [TREE]) TREE = NEURON.neurites[0] TEST_UVEC = np.array([ 0.01856633, 0.37132666, 0.92831665]) TEST_ANGLE = np.pi / 3. def _Rx(angle): sn = np.sin(angle) cs = np.cos(angle) return np.array([[1., 0., 0.], [0., cs, -sn], [0., sn, cs]])
def test_make_Soma_SinglePoint(): soma = neuron.make_soma(SOMA_SINGLE_PTS) nt.ok_('SomaSinglePoint' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaSinglePoint)) nt.assert_items_equal(soma.center, (11, 22, 33)) nt.ok_(soma.radius == 44)
pass stylize(ax, cell.name, feature) return fig if __name__ == "__main__": import numpy as np import os args = parse_args() nrns = [] for j, neuronFile in enumerate(get_morph_files(args.datapath)): _name = os.path.splitext(os.path.split(neuronFile)[-1])[0] nrn = None try: soma = make_soma([np.array([11, 22, 33, 44, 1, 1, -1])]) trees = load_trees(neuronFile) cn = coreNeuron(soma, trees, name=_name) nrn = ezyNeuron(cn) except IDSequenceError: pass for i, _feature in enumerate(args.features): f = plot_feature(_feature, nrn) figname = "{0}_{1}_{2}.eps".format(i, j, _name) f.savefig(os.path.join(args.odir, figname)) pl.close(f)
def test_make_SomaB(): soma = neuron.make_soma(SOMA_B_PTS) nt.ok_('SomaB' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaB)) nt.assert_items_equal(soma.center, (11, 22, 33)) nt.ok_(soma.radius == 0.0)
def test_make_SomaB(): soma = neuron.make_soma(SOMA_B_PTS) nt.ok_('SomaB' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaB)) nt.assert_equal(soma.center, (11, 22, 33)) nt.ok_(soma.radius == 0.0)
def test_make_SomaA(): soma = neuron.make_soma(SOMA_A_PTS) nt.ok_('SomaA' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaA)) nt.assert_equal(soma.center, (11, 22, 33)) nt.ok_(soma.radius == 44)
def check_SomaC(points): soma = neuron.make_soma(points) nt.ok_('SomaC' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaC)) nt.assert_equal(soma.center, (11, 22, 33)) nt.ok_(soma.radius == 0.0)
def test_make_Soma_ThreePoint(): soma = neuron.make_soma(SOMA_THREEPOINTS_PTS) nt.ok_('SomaThreePoint' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaThreePoint)) nt.assert_items_equal(soma.center, (11, 22, 33)) nt.eq_(soma.radius, 0.0)
def check_SomaC(points): soma = neuron.make_soma(points) nt.ok_('SomaSimpleContour' in str(soma)) nt.ok_(isinstance(soma, neuron.SomaSimpleContour)) np.testing.assert_allclose(soma.center, (0., 0., 0.), atol=1e-16) nt.eq_(soma.radius, 1.0)
return i_neurites(self.neurites, lambda n: n.sections(), neu_filter=tree_type_checker(neurite_type)) if __name__ == '__main__': from neurom.core.tree import Tree from neurom.core.neuron import make_soma TREE = Tree([0.0, 0.0, 0.0, 1.0, 1, 1, 2]) T1 = TREE.add_child(Tree([0.0, 1.0, 0.0, 1.0, 1, 1, 2])) T2 = T1.add_child(Tree([0.0, 2.0, 0.0, 1.0, 1, 1, 2])) T3 = T2.add_child(Tree([0.0, 4.0, 0.0, 2.0, 1, 1, 2])) T4 = T3.add_child(Tree([0.0, 5.0, 0.0, 2.0, 1, 1, 2])) T5 = T4.add_child(Tree([2.0, 5.0, 0.0, 1.0, 1, 1, 2])) T6 = T4.add_child(Tree([0.0, 5.0, 2.0, 1.0, 1, 1, 2])) T7 = T5.add_child(Tree([3.0, 5.0, 0.0, 0.75, 1, 1, 2])) T8 = T7.add_child(Tree([4.0, 5.0, 0.0, 0.75, 1, 1, 2])) T9 = T6.add_child(Tree([0.0, 5.0, 3.0, 0.75, 1, 1, 2])) T10 = T9.add_child(Tree([0.0, 6.0, 3.0, 0.75, 1, 1, 2])) sm = make_soma([[0, 0, 0, 1, 1, 1, -1]]) nrts = [Neurite(tr) for tr in [TREE, TREE, TREE]] nrn = Neuron(sm, nrts) pop = Population([nrn, nrn, nrn, nrn]) print list(pop.segments()) print print list(pop.neurons[0].segments()) print print list(pop.neurons[0].neurites[0].segments())