Skip to content

Commit

Permalink
Do not apply scaling to neurites when correcting for slice shrinkage
Browse files Browse the repository at this point in the history
Add an optional keyword argument scale_radius=True to the transform
Apply scale correction witht scale_radius=False
  • Loading branch information
sgratiy committed May 21, 2020
1 parent 9577f70 commit 2f941d7
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
14 changes: 11 additions & 3 deletions neuron_morphology/transforms/affine_transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,14 +160,19 @@ def _get_scaling_factor(self) -> float:
determinant = np.linalg.det(self.affine)
return np.power(abs(determinant), 1.0 / 3.0)

def transform_morphology(self, morphology: Morphology,
clone: bool = False) -> Morphology:
def transform_morphology(self,
morphology: Morphology,
clone: bool = False,
scale_radius: bool = True,
) -> Morphology:
"""
Apply this transform to all nodes in a morphology.
Parameters
----------
morphology: a Morphology loaded from an swc file
clone: make a new object if True
scale_radius: apply radius scaling if True
Returns
-------
Expand All @@ -176,7 +181,10 @@ def transform_morphology(self, morphology: Morphology,
if clone:
morphology = morphology.clone()

scaling_factor = self._get_scaling_factor()
if scale_radius:
scaling_factor = self._get_scaling_factor()
else:
scaling_factor = 1

for node in morphology.nodes():
coordinates = np.array((node['x'], node['y'], node['z']),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ def run_scale_correction(
[0, 0, scale_correction]]
)
at = aff.AffineTransform(scale_transform)
morphology_scaled = at.transform_morphology(morphology)
morphology_scaled = at.transform_morphology(morphology,
scale_radius=False)

return {
"morphology_scaled": morphology_scaled,
Expand Down
8 changes: 5 additions & 3 deletions tests/transforms/test_scale_correction.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ def setUp(self):

self.morphology = (
MorphologyBuilder()
.root(1, 2, 3)
.axon(0, 2, 100)
.root(1, 2, 3, radius=1.3)
.axon(0, 2, 100, radius=0.4)
.build()
)
self.max_morphology = (
Expand Down Expand Up @@ -79,12 +79,14 @@ def test_scale_correction_end_to_end(self):
self.assertAlmostEqual(outputs['scale_correction'], 2.0)

aff_t = AffineTransform.from_dict(outputs['scale_transform'])
morph_t = aff_t.transform_morphology(self.morphology)
morph_t = aff_t.transform_morphology(self.morphology,
scale_radius=False)

axon = morph_t.node_by_id(1)
self.assertAlmostEqual(axon['x'], 0)
self.assertAlmostEqual(axon['y'], 2)
self.assertAlmostEqual(axon['z'], 200)
self.assertAlmostEqual(axon['radius'], 0.4)

def test_run_scale_correction(self):

Expand Down

0 comments on commit 2f941d7

Please sign in to comment.