Submitting author: @aslakbergersen (Aslak Bergersen)
Repository: https://github.com/KVSlab/morphMan
Version: v0.2
Editor: @trallard
Reviewer: @brainstorm, @rlizzo
Archive: 10.5281/zenodo.2591725
Status badge code:
HTML: <a href="http://joss.theoj.org/papers/9f871144f31b184bc8b5fdd652bb923c"><img src="http://joss.theoj.org/papers/9f871144f31b184bc8b5fdd652bb923c/status.svg"></a>
Markdown: [](http://joss.theoj.org/papers/9f871144f31b184bc8b5fdd652bb923c)
Reviewers and authors:
Please avoid lengthy details of difficulties in the review thread. Instead, please create a new issue in the target repository and link to those issues (especially acceptance-blockers) in the review thread below. (For completists: if the target issue tracker is also on GitHub, linking the review thread in the issue or vice versa will create corresponding breadcrumb trails in the link target.)
@brainstorm & @rlizzo, please carry out your review in this issue by updating the checklist below. If you cannot edit the checklist please:
The reviewer guidelines are available here: https://joss.theoj.org/about#reviewer_guidelines. Any questions/concerns please let @trallard know.
โจ Please try and complete your review in the next two weeks โจ
paper.md
file include a list of authors with their affiliations?paper.md
file include a list of authors with their affiliations?Hello human, I'm @whedon, a robot that can help you with some common editorial tasks. @brainstorm, it looks like you're currently assigned as the reviewer for this paper :tada:.
:star: Important :star:
If you haven't already, you should seriously consider unsubscribing from GitHub notifications for this (https://github.com/openjournals/joss-reviews) repository. As a reviewer, you're probably currently watching this repository which means for GitHub's default behaviour you will receive notifications (emails) for all reviews ๐ฟ
To fix this do the following two things:
For a list of things I can do to help you, just type:
@whedon commands
Attempting PDF compilation. Reticulating splines etc...
@aslakbergersen No references in paper.md
?
@brainstorm thank you for agreeing to review morphMan. I'm not sure I understand what you are asking. There are 13 references in the paper.md, but the bibliography (paper.bib) is located here. I hope that answered your question.
My bad, I was reading the rendered version and I saw that section empty, but they are indeed in the .bib as they should, ticking off that box ;)
Hi @aslakbergersen I can see there are still some open issues and unchecked items on the reviewer's lists so I wanted to check if everything was in order.
Hi @trallard, thank you for checking in. After comments from both reviewers, we have just changed the installation method, meeting the comments in KVSlab/morphMan#14.
@brainstorm and @rlizzo is there anything else we should address?
I can see that both reviewers left the following point of the checklist unchecked:
Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
@brainstorm @rlizzo can you advise on this? I saw there is a read the docs website but I am unsure if you both deemed that more work would need to be done at an API level
@aslakbergersen I advised the authors to publish their package under conda-forge for easy installation/access instead of creating their own channel on Anaconda.
@aslakbergersen Do you reckon you can put it there?
Also, the tests seem to be passing on appveyor, but I cannot make them pass locally after doing the equivalent of:
# Start testing
- cd .\\test
- ps: Start-FileDownload 'http://ecm2.mathcs.emory.edu/aneuriskdata/download/C0001/C0001_models.tar.gz'
- tar --force-local -zxvf C0001_models.tar.gz
- del /f C0001_models.tar.gz
- pytest .
On my system under morphman conda virtual environment. There should be a mini-section on the readme on how to make the tests run locally.
$ cd test
test$ wget http://ecm2.mathcs.emory.edu/aneuriskdata/download/C0001/C0001_models.tar.gz && tar xvfj *.tar.gz
test$ pytest .
============================================================================================================= test session starts ==============================================================================================================
platform darwin -- Python 3.6.1, pytest-4.0.1, py-1.7.0, pluggy-0.8.0
rootdir: /Users/romanvg/dev/morphMan, inifile:
collected 16 items
test_landmarking.py FF [ 12%]
test_manipulate_area.py FFFFF [ 43%]
test_manipulate_bend.py FFFFF [ 75%]
test_manipulate_bifurcation.py FF [ 87%]
test_manipulate_curvature.py FF [100%]
=================================================================================================================== FAILURES ===================================================================================================================
_________________________________________________________________________________________________________ test_landmarking[bogunovic] __________________________________________________________________________________________________________
common_input = {'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, 'no_smooth_point': None, 'output_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model_output.vtp', ...}
algorithm = 'bogunovic'
@pytest.mark.parametrize("algorithm", ["bogunovic", "piccinelli"])
def test_landmarking(common_input, algorithm):
# Get region points
base_path = get_path_names(common_input["input_filepath"])
relevant_outlets = [35.8, 59.8, 39.7, 76.8, 54.7, 53.2]
ica_centerline = extract_ica_centerline(base_path, common_input["resampling_step"],
> relevant_outlets=relevant_outlets)
test_landmarking.py:22:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/common/common.py:1703: in extract_ica_centerline
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x12319c278>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
Cleaning surface.
Triangulating surface.
_________________________________________________________________________________________________________ test_landmarking[piccinelli] _________________________________________________________________________________________________________
common_input = {'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, 'no_smooth_point': None, 'output_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model_output.vtp', ...}
algorithm = 'piccinelli'
@pytest.mark.parametrize("algorithm", ["bogunovic", "piccinelli"])
def test_landmarking(common_input, algorithm):
# Get region points
base_path = get_path_names(common_input["input_filepath"])
relevant_outlets = [35.8, 59.8, 39.7, 76.8, 54.7, 53.2]
ica_centerline = extract_ica_centerline(base_path, common_input["resampling_step"],
> relevant_outlets=relevant_outlets)
test_landmarking.py:22:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/common/common.py:1703: in extract_ica_centerline
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123193278>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
Cleaning surface.
Triangulating surface.
___________________________________________________________________________________________________________ test_area_variation[1.5] ___________________________________________________________________________________________________________
ratio = 1.5, common_input = {'beta': None, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'method': 'variation', 'no_smooth': False, ...}
@pytest.mark.parametrize("ratio", [1.5, 3.0])
def test_area_variation(ratio, common_input):
common_input.update(dict(method = "variation",
region_points = None, # Inactive
region_of_interest = "first_line",
stenosis_length = 0, # Inactive
percentage = 0, # Inactive
ratio = ratio,
beta = None))
# Run area variation
> manipulate_area(**common_input)
test_manipulate_area.py:28:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_area.py:61: in manipulate_area
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x12355c1d0>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
Cleaning surface.
Triangulating surface.
___________________________________________________________________________________________________________ test_area_variation[3.0] ___________________________________________________________________________________________________________
ratio = 3.0, common_input = {'beta': None, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'method': 'variation', 'no_smooth': False, ...}
@pytest.mark.parametrize("ratio", [1.5, 3.0])
def test_area_variation(ratio, common_input):
common_input.update(dict(method = "variation",
region_points = None, # Inactive
region_of_interest = "first_line",
stenosis_length = 0, # Inactive
percentage = 0, # Inactive
ratio = ratio,
beta = None))
# Run area variation
> manipulate_area(**common_input)
test_manipulate_area.py:28:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_area.py:61: in manipulate_area
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123187908>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
Cleaning surface.
Triangulating surface.
_____________________________________________________________________________________________________________ test_create_stenosis _____________________________________________________________________________________________________________
common_input = {'beta': None, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'method': 'variation', 'no_smooth': False, ...}
def test_create_stenosis(common_input):
# Get region points
base_path = get_path_names(common_input['input_filepath'])
> centerline = extract_single_line(read_polydata(base_path + "_centerline.vtp"), 0)
test_manipulate_area.py:51:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
filename = '/Users/romanvg/dev/morphMan/test/C0001/surface/model_centerline.vtp', datatype = None
def read_polydata(filename, datatype=None):
"""
Load the given file, and return a vtkPolyData object for it.
Args:
filename (str): Path to input file.
datatype (str): Additional parameter for vtkIdList objects.
Returns:
polyData (vtkSTL/vtkPolyData/vtkXMLStructured/
vtkXMLRectilinear/vtkXMLPolydata/vtkXMLUnstructured/
vtkXMLImage/Tecplot): Output data.
"""
# Check if file exists
if not path.exists(filename):
> raise RuntimeError("Could not find file: %s" % filename)
E RuntimeError: Could not find file: /Users/romanvg/dev/morphMan/test/C0001/surface/model_centerline.vtp
../morphman/common/common.py:62: RuntimeError
__________________________________________________________________________________________________ test_inflation_and_deflation_of_area[-15] ___________________________________________________________________________________________________
common_input = {'beta': None, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'method': 'area', 'no_smooth': False, ...}, percentage = -15
@pytest.mark.parametrize("percentage",[-15, 15])
def test_inflation_and_deflation_of_area(common_input, percentage):
common_input.update(dict(method = "area",
region_points = None, # Inactive
region_of_interest = "first_line",
stenosis_length = 0, # Inactive
percentage = percentage,
ratio = None, # Inactive
beta = None)) # Inactive
# Perform area manipulation
> manipulate_area(**common_input)
test_manipulate_area.py:96:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_area.py:61: in manipulate_area
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x12318d710>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
Cleaning surface.
Triangulating surface.
___________________________________________________________________________________________________ test_inflation_and_deflation_of_area[15] ___________________________________________________________________________________________________
common_input = {'beta': None, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'method': 'area', 'no_smooth': False, ...}, percentage = 15
@pytest.mark.parametrize("percentage",[-15, 15])
def test_inflation_and_deflation_of_area(common_input, percentage):
common_input.update(dict(method = "area",
region_points = None, # Inactive
region_of_interest = "first_line",
stenosis_length = 0, # Inactive
percentage = percentage,
ratio = None, # Inactive
beta = None)) # Inactive
# Perform area manipulation
> manipulate_area(**common_input)
test_manipulate_area.py:96:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_area.py:61: in manipulate_area
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123193f28>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
Cleaning surface.
Triangulating surface.
____________________________________________________________________________________________________________ test_siphon[-0.2-0.0] _____________________________________________________________________________________________________________
common_input = {'alpha': -0.2, 'beta': 0.0, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, ...}, alpha = -0.2, beta = 0.0
@pytest.mark.parametrize("alpha,beta",
[(-0.2, 0.0),
( 0.2, 0.0),
( 0.0, 0.2),
( 0.0, -0.2),
( 0.2, -0.2)])
def test_siphon(common_input, alpha, beta):
# Set problem specific parameters
common_input.update(dict(alpha=alpha,
beta=beta,
region_of_interest="commandline",
# TODO: Set points
region_points=[44.17085266113281,
38.514854431152344,
41.20818328857422,
43.242130279541016,
42.68572235107422,
38.65191650390625],
resampling_step = 0.1))
# Perform manipulation
> manipulate_bend(**common_input)
test_manipulate_bend.py:36:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bend.py:72: in manipulate_bend
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123e222e8>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Compute centerlines and Voronoi diagram
Cleaning surface.
Triangulating surface.
_____________________________________________________________________________________________________________ test_siphon[0.2-0.0] _____________________________________________________________________________________________________________
common_input = {'alpha': 0.2, 'beta': 0.0, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, ...}, alpha = 0.2, beta = 0.0
@pytest.mark.parametrize("alpha,beta",
[(-0.2, 0.0),
( 0.2, 0.0),
( 0.0, 0.2),
( 0.0, -0.2),
( 0.2, -0.2)])
def test_siphon(common_input, alpha, beta):
# Set problem specific parameters
common_input.update(dict(alpha=alpha,
beta=beta,
region_of_interest="commandline",
# TODO: Set points
region_points=[44.17085266113281,
38.514854431152344,
41.20818328857422,
43.242130279541016,
42.68572235107422,
38.65191650390625],
resampling_step = 0.1))
# Perform manipulation
> manipulate_bend(**common_input)
test_manipulate_bend.py:36:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bend.py:72: in manipulate_bend
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x12318dc18>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Compute centerlines and Voronoi diagram
Cleaning surface.
Triangulating surface.
_____________________________________________________________________________________________________________ test_siphon[0.0-0.2] _____________________________________________________________________________________________________________
common_input = {'alpha': 0.0, 'beta': 0.2, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, ...}, alpha = 0.0, beta = 0.2
@pytest.mark.parametrize("alpha,beta",
[(-0.2, 0.0),
( 0.2, 0.0),
( 0.0, 0.2),
( 0.0, -0.2),
( 0.2, -0.2)])
def test_siphon(common_input, alpha, beta):
# Set problem specific parameters
common_input.update(dict(alpha=alpha,
beta=beta,
region_of_interest="commandline",
# TODO: Set points
region_points=[44.17085266113281,
38.514854431152344,
41.20818328857422,
43.242130279541016,
42.68572235107422,
38.65191650390625],
resampling_step = 0.1))
# Perform manipulation
> manipulate_bend(**common_input)
test_manipulate_bend.py:36:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bend.py:72: in manipulate_bend
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123195588>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Compute centerlines and Voronoi diagram
Cleaning surface.
Triangulating surface.
____________________________________________________________________________________________________________ test_siphon[0.0--0.2] _____________________________________________________________________________________________________________
common_input = {'alpha': 0.0, 'beta': -0.2, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, ...}, alpha = 0.0, beta = -0.2
@pytest.mark.parametrize("alpha,beta",
[(-0.2, 0.0),
( 0.2, 0.0),
( 0.0, 0.2),
( 0.0, -0.2),
( 0.2, -0.2)])
def test_siphon(common_input, alpha, beta):
# Set problem specific parameters
common_input.update(dict(alpha=alpha,
beta=beta,
region_of_interest="commandline",
# TODO: Set points
region_points=[44.17085266113281,
38.514854431152344,
41.20818328857422,
43.242130279541016,
42.68572235107422,
38.65191650390625],
resampling_step = 0.1))
# Perform manipulation
> manipulate_bend(**common_input)
test_manipulate_bend.py:36:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bend.py:72: in manipulate_bend
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x12365f1d0>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Compute centerlines and Voronoi diagram
Cleaning surface.
Triangulating surface.
____________________________________________________________________________________________________________ test_siphon[0.2--0.2] _____________________________________________________________________________________________________________
common_input = {'alpha': 0.2, 'beta': -0.2, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, ...}, alpha = 0.2, beta = -0.2
@pytest.mark.parametrize("alpha,beta",
[(-0.2, 0.0),
( 0.2, 0.0),
( 0.0, 0.2),
( 0.0, -0.2),
( 0.2, -0.2)])
def test_siphon(common_input, alpha, beta):
# Set problem specific parameters
common_input.update(dict(alpha=alpha,
beta=beta,
region_of_interest="commandline",
# TODO: Set points
region_points=[44.17085266113281,
38.514854431152344,
41.20818328857422,
43.242130279541016,
42.68572235107422,
38.65191650390625],
resampling_step = 0.1))
# Perform manipulation
> manipulate_bend(**common_input)
test_manipulate_bend.py:36:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bend.py:72: in manipulate_bend
smooth=False, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123611898>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Compute centerlines and Voronoi diagram
Cleaning surface.
Triangulating surface.
__________________________________________________________________________________________________ test_bifurcation_angle[0.3490658503988659] __________________________________________________________________________________________________
common_input = {'angle': 0.3490658503988659, 'bif': False, 'cylinder_factor': 7, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', ...}, angle = 0.3490658503988659
@pytest.mark.parametrize("angle", [20 / 180 * np.pi, -20 / 180 * np.pi])
def test_bifurcation_angle(common_input, angle):
common_input.update(dict(keep_fixed_1 = False,
keep_fixed_2 = False,
bif = False,
lower = False,
cylinder_factor = 7,
angle = angle,
region_of_interest = "commandline",
region_points = [35.8, 59.8, 39.7, 76.8, 54.7, 53.2]))
> manipulate_bifurcation(**common_input)
test_manipulate_bifurcation.py:28:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bifurcation.py:93: in manipulate_bifurcation
resampling=resampling_step, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x123ad2518>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Region of interest is defined by the region points:
Outlet 1: (35.759422302246094, 59.80244827270508, 39.67420196533203)
Outlet 2: (76.80976104736328, 54.73926544189453, 53.23825454711914)
Cleaning surface.
Triangulating surface.
_________________________________________________________________________________________________ test_bifurcation_angle[-0.3490658503988659] __________________________________________________________________________________________________
common_input = {'angle': -0.3490658503988659, 'bif': False, 'cylinder_factor': 7, 'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', ...}, angle = -0.3490658503988659
@pytest.mark.parametrize("angle", [20 / 180 * np.pi, -20 / 180 * np.pi])
def test_bifurcation_angle(common_input, angle):
common_input.update(dict(keep_fixed_1 = False,
keep_fixed_2 = False,
bif = False,
lower = False,
cylinder_factor = 7,
angle = angle,
region_of_interest = "commandline",
region_points = [35.8, 59.8, 39.7, 76.8, 54.7, 53.2]))
> manipulate_bifurcation(**common_input)
test_manipulate_bifurcation.py:28:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../morphman/manipulate_bifurcation.py:93: in manipulate_bifurcation
resampling=resampling_step, base_path=base_path)
../morphman/common/common.py:1315: in compute_centerlines
centerlines.Execute()
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:595: in Execute
self.SeedSelector.Execute()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <vmtk.vmtkcenterlines.vmtkPointListSeedSelector object at 0x12355b898>
def Execute(self):
if not self._Surface:
self.PrintError('vmtkPointListSeedSelector Error: Surface not set.')
return
if not self.SourcePoints:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not set.')
return
if not self.TargetPoints:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not set.')
return
self._SourceSeedIds.Initialize()
self._TargetSeedIds.Initialize()
if len(self.SourcePoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: SourcePoints not made up of triplets.')
return
if len(self.TargetPoints) % 3 != 0:
self.PrintError('vmtkPointListSeedSelector Error: TargetPoints not made up of triplets.')
return
pointLocator = vtk.vtkPointLocator()
pointLocator.SetDataSet(self._Surface)
pointLocator.BuildLocator()
> for i in range(len(self.SourcePoints)/3):
E TypeError: 'float' object cannot be interpreted as an integer
../../../.miniconda/envs/morphman/lib/python3.6/site-packages/vmtk/vmtkcenterlines.py:128: TypeError
------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------
-- Region of interest is defined by the region points:
Outlet 1: (35.759422302246094, 59.80244827270508, 39.67420196533203)
Outlet 2: (76.80976104736328, 54.73926544189453, 53.23825454711914)
Cleaning surface.
Triangulating surface.
________________________________________________________________________________________________________ test_decrease_curvature[True] _________________________________________________________________________________________________________
common_input = {'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, 'no_smooth_point': None, 'output_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model_output.vtp', ...}
smooth_line = True
@pytest.mark.parametrize("smooth_line", [True, False])
def test_decrease_curvature(common_input, smooth_line):
# Get region points
base_path = get_path_names(common_input["input_filepath"])
> centerline = extract_single_line(read_polydata(base_path + "_centerline.vtp"), 1)
test_manipulate_curvature.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
filename = '/Users/romanvg/dev/morphMan/test/C0001/surface/model_centerline.vtp', datatype = None
def read_polydata(filename, datatype=None):
"""
Load the given file, and return a vtkPolyData object for it.
Args:
filename (str): Path to input file.
datatype (str): Additional parameter for vtkIdList objects.
Returns:
polyData (vtkSTL/vtkPolyData/vtkXMLStructured/
vtkXMLRectilinear/vtkXMLPolydata/vtkXMLUnstructured/
vtkXMLImage/Tecplot): Output data.
"""
# Check if file exists
if not path.exists(filename):
> raise RuntimeError("Could not find file: %s" % filename)
E RuntimeError: Could not find file: /Users/romanvg/dev/morphMan/test/C0001/surface/model_centerline.vtp
../morphman/common/common.py:62: RuntimeError
________________________________________________________________________________________________________ test_decrease_curvature[False] ________________________________________________________________________________________________________
common_input = {'input_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model.vtp', 'no_smooth': False, 'no_smooth_point': None, 'output_filepath': '/Users/romanvg/dev/morphMan/test/C0001/surface/model_output.vtp', ...}
smooth_line = False
@pytest.mark.parametrize("smooth_line", [True, False])
def test_decrease_curvature(common_input, smooth_line):
# Get region points
base_path = get_path_names(common_input["input_filepath"])
> centerline = extract_single_line(read_polydata(base_path + "_centerline.vtp"), 1)
test_manipulate_curvature.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
filename = '/Users/romanvg/dev/morphMan/test/C0001/surface/model_centerline.vtp', datatype = None
def read_polydata(filename, datatype=None):
"""
Load the given file, and return a vtkPolyData object for it.
Args:
filename (str): Path to input file.
datatype (str): Additional parameter for vtkIdList objects.
Returns:
polyData (vtkSTL/vtkPolyData/vtkXMLStructured/
vtkXMLRectilinear/vtkXMLPolydata/vtkXMLUnstructured/
vtkXMLImage/Tecplot): Output data.
"""
# Check if file exists
if not path.exists(filename):
> raise RuntimeError("Could not find file: %s" % filename)
E RuntimeError: Could not find file: /Users/romanvg/dev/morphMan/test/C0001/surface/model_centerline.vtp
../morphman/common/common.py:62: RuntimeError
========================================================================================================== 16 failed in 5.26 seconds ===========================================================================================================
(morphman) ua-eduroam-ten-25-153-30:test romanvg$ ls
C0001 __pycache__ test_landmarking.py test_manipulate_bend.py test_manipulate_curvature.py
__init__.py fixtures.py test_manipulate_area.py test_manipulate_bifurcation.py
@brainstorm We would prefer to have morphman on conda-forge, however, since we rely on VMTK, which is not on conda-forge (yet), we instead created your own channel, for now, cf. conda-forge dependencies.
@rlizzo You mentioned that vmtk eventually will be moved over to conda-forge, how is that work going, and is there something we could contribute with?
@brainstorm, regarding running the test locally. Thank you for pointing this out, because this is a critical bug. In vmtk version 1.4 there is a python3 bug in how the centerlines are created, as a workaround, we modify the vmtk installation in both TravisCI and AppVayor, cf. this line for travis and this line for AppVayor. The problem is fixed in master for vmtk, so while we wait for a updated vmtk package to be relseased in conda we have added a warning to the installation instructions with a workaround for the problem.
Great, thanks @aslakbergersen, all good from my side, not yet, see comments below.
@rlizzo I know we all have a lot on our todo-lists now before Christmas holiday break, but I'm wondering if you have any additional comments, or if it would be possible to wrap this up before the Holidays?
@rlizzo ping, I hope you had a nice holiday season I was wondering if there are still outstanding actions to proceed with the review?
It seems that @rlizzo has gone under the radar, @brainstorm I know you gave some sort of ok before but I just want to check if you are happy recommending this package for acceptance or if any changes should be made (there is still an unchecked item on your list)
I just gave it another look/try and I would advise against accepting the installation facet of this paper.
I still would recommend to have vmtk packaged in conda-forge (as a dependency), as @rlizzo diligently pointed out in https://github.com/vmtk/conda-recipes/issues/2 as well as in https://github.com/KVSlab/morphMan/issues/14.
From a functional perspective, I would like to have easier means to download test data locally in order to evaluate the software (had to fish it out from the testsuite). Something like a simple scripts/morphman-data-download
or similar would help a lot getting newcomers acquainted with the software fast.
Other than those two small details, I would totally endorse this nice piece of software.
Thank you for testing the software @brainstorm, it is much appreciated.
From a functional perspective, I would like to have easier means to download test data locally in order to evaluate the software (had to fish it out from the testsuite). Something like a simple scripts/morphman-data-download or similar would help a lot getting newcomers acquainted with the software fast.
I agree that there should be an additional script to ease playing around with the test data. To take it one step further, I took the command line examples from the Tutorial and rewrote them as python demos as well, see https://github.com/KVSlab/morphMan/pull/20. I also added a script which downloads the test data. Please also note that there are links for downloading the test data in the tutorials.
I still would recommend to have vmtk packaged in conda-forge (as a dependency), as @rlizzo diligently pointed out in vmtk/conda-recipes#2 as well as in KVSlab/morphMan#14.
Just a clarification before starting to move the installation to conda-forge: Do I understand you correctly if you are asking us to add a _vmtk_ recipe to conda-forge, and then move _morphMan_ into conda-forge when it is accepted? If that is the case, I would like to confer with the main developers of _vmtk_ first, like @rlizzo. Or, do you propose that we add vmtk as an outside dependency, although disadvised.
That's fantastic Aslak, thanks for putting it together as an script!
And yes, I would advise to add vmtk
into conda-forge itself, it's relatively straightforward to add dependencies there (did it myself in the past for packages for which I'm not author). The main reason behind this preference is my experience with OSS projects in custom anaconda repositories not maintained by a bigger community (conda-forge).
When developers/PhDs/postdocs/people move on with other duties, if the dependencies are not maintained as well as the main package, bitrot happens faster, that's why I would like to insist on that point.
@brainstorm, I agree that moving the project into conda-forge is the better option. We have been working on adding vmtk
to conda-forge, but we are facing some problems with getting it to build properly against vtk
and itk
. We will hopefully resolve this issue soon.
Adding morphMan
to conda-corge will be much simpler since it is pure python.
Hi Guys, I'm sorry I've been away. This has been a horribly busy start of the year that kept me off of github for a bit. If it's worth anything, the installation methods that I had previously commented on seem to be taken care of by @aslakbergersen's work on the conda-forge recipes. I've cleared up the rest of the checkboxes from my end. I'm terribly sorry to hold up the process. here. The package looks good from my end.
@aslakbergersen is there any update with regards to the status of this? Have all the reviewers concerns been addressed?
@trallard thank you for the follow-up. We are still working on moving vmtk
over to conda-forge as requested by @brainstorm, such that also morphMan
can be added to conda-forge. However, it has proven to be a bit challenging, and it is not finished yet, but is work in progress. To follow the progress, please see conda-forge/staged-recipes/pull/7609.
@brainstorm, we have tried to add vmtk
into conda-forge
, however without any luck conda-forge/staged-recipes/pull/7609. At this point, we, the vmtk developers, and members of conda-forge have all been unable to get any progress on this the last two weeks. We feel like we have exhausted all options on solving this problem within a reasonable timeframe.
Since vmtk
is not our software, is already published in JOSS, and our installation methods are in satisfaction with JOSS criteria, we kindly ask this not to be a blocking issue for publication, but rather just a regular issue in the repository.
CC: @trallard
@aslakbergersen Agreed, I've been following the threads on the side, thanks for putting the effort into it anyway. Hopefully upstream vmtk/conda will at some point in the future realise that the build/integration needs more love and fix it for good.
@trallard Go ahead, all clear from my side now after seeing this. Thanks everyone!
@trallard, is there anything you need from our side to complete the review of this paper?
Hi all thanks for the time spent in this review, it seems that all the issues have already been dealt with and there are just a few steps that need to be completed.
@aslakbergersen I have l have conducted a high-level review of the code itself. Everything looks ship-shape to me.
At this point, it'll be good to double check the paper, review any lingering details in your code/readme/etc., and then make an archive of the reviewed software in Zenodo/figshare/other service. Please be sure that the DOI metadata (title, authors, etc.) matches this JOSS submission. And complete the following tasks:
[x] double check the submission paper to ensure it is up-to-date (citations are correct, DOIs are added, etc)
After these are completed I'll move forward with accepting the submission! Until then, now is your moment for final touchups!
@whedon generate pdf
Attempting PDF compilation. Reticulating splines etc...
@whedon check references
Attempting to check references...
```Reference check summary:
OK DOIs
MISSING DOIs
INVALID DOIs
@whedon check references
Attempting to check references...
```Reference check summary:
OK DOIs
MISSING DOIs
INVALID DOIs
@whedon generate pdf
Attempting PDF compilation. Reticulating splines etc...
@trallard , the latest version has been released as morphMan v0.2 (master branch).
I believe the following points summarize the main changes in v0.2:
Additionally, the DOI for the new release of morphMan is https://doi.org/10.5281/zenodo.2591725
Me and @aslakbergersen are also happy with the submission paper. Citations have been double checked, all DOIs are included, and the version number of morphMan reflects the latest release.
And a huge thank you to @brainstorm and @rlizzo for your review!
@trallard, is the information provided by @hkjeldsberg what you needed for starting the final steps of publication? Unfortunately, we do not have the rights to "check off" the task-boxes in your post, but I think we have addressed all of them.
@whedon set https://doi.org/10.5281/zenodo.2591725 as archive
OK. 10.5281/zenodo.2591725 is the archive.
@whedon set v0.2 as version
OK. v0.2 is the version.
@aslakbergersen and @hkjeldsberg all looks good to me now so I am going to proceed for acceptance โกโจ
@brainstorm and @rlizzo thank you so much for your time and expertise as reviewers it is much appreciated at JOSS ๐๐ป
@openjournals/joss-eics this submission has been accepted and is ready to be published ๐๐๐ป๐ฅณ
@whedon accept
Attempting dry run of processing paper acceptance...
```Reference check summary:
OK DOIs
MISSING DOIs
INVALID DOIs
PDF failed to compile for issue #1065 with the following error:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 15 0 15 0 0 177 0 --:--:-- --:--:-- --:--:-- 178
sh: 0: getcwd() failed: No such file or directory
sh: 0: getcwd() failed: No such file or directory
pandoc: 10.21105.joss.01065.pdf: openBinaryFile: does not exist (No such file or directory)
Looks like we failed to compile the PDF
@whedon generate pdf
@whedon generate pdf
Attempting PDF compilation. Reticulating splines etc...
@aslakbergersen @hkjeldsberg - could you merge this PR: https://github.com/KVSlab/morphMan/pull/23 - it will improve the formatting of your citations when there are multiples.
@arfon Thank you for the PR, it is now merged.
@whedon generate pdf
Attempting PDF compilation. Reticulating splines etc...
@whedon accept
Attempting dry run of processing paper acceptance...
PDF failed to compile for issue #1065 with the following error:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 15 0 15 0 0 86 0 --:--:-- --:--:-- --:--:-- 86
sh: 0: getcwd() failed: No such file or directory
pandoc: 10.21105.joss.01065.pdf: openBinaryFile: does not exist (No such file or directory)
Looks like we failed to compile the PDF
@whedon accept
Attempting dry run of processing paper acceptance...
pandoc: 10.21105.joss.01065.pdf: openBinaryFile: does not exist (No such file or directory)
Sometimes @whedon times out generating these PDFs...
```Reference check summary:
OK DOIs
MISSING DOIs
INVALID DOIs
PDF failed to compile for issue #1065 with the following error:
/app/vendor/ruby-2.4.4/lib/ruby/2.4.0/find.rb:43:in block in find': No such file or directory - tmp/1065 (Errno::ENOENT)
from /app/vendor/ruby-2.4.4/lib/ruby/2.4.0/find.rb:43:in
collect!'
from /app/vendor/ruby-2.4.4/lib/ruby/2.4.0/find.rb:43:in find'
from /app/vendor/bundle/ruby/2.4.0/bundler/gems/whedon-01ece1d1d135/lib/whedon/processor.rb:57:in
find_paper_paths'
from /app/vendor/bundle/ruby/2.4.0/bundler/gems/whedon-01ece1d1d135/bin/whedon:73:in compile'
from /app/vendor/bundle/ruby/2.4.0/gems/thor-0.20.3/lib/thor/command.rb:27:in
run'
from /app/vendor/bundle/ruby/2.4.0/gems/thor-0.20.3/lib/thor/invocation.rb:126:in invoke_command'
from /app/vendor/bundle/ruby/2.4.0/gems/thor-0.20.3/lib/thor.rb:387:in
dispatch'
from /app/vendor/bundle/ruby/2.4.0/gems/thor-0.20.3/lib/thor/base.rb:466:in start'
from /app/vendor/bundle/ruby/2.4.0/bundler/gems/whedon-01ece1d1d135/bin/whedon:116:in
load'
from /app/vendor/bundle/ruby/2.4.0/bin/whedon:23:in
```Reference check summary:
OK DOIs
MISSING DOIs
INVALID DOIs
@whedon accept
Attempting dry run of processing paper acceptance...
@whedon generate pdf
Attempting PDF compilation. Reticulating splines etc...
@whedon accept deposit=true
Doing it live! Attempting automated processing of paper acceptance...
๐จ๐จ๐จ THIS IS NOT A DRILL, YOU HAVE JUST ACCEPTED A PAPER INTO JOSS! ๐จ๐จ๐จ
Here's what you must now do:
Party like you just published a paper! ๐๐๐ฆ๐๐ป๐ค
Any issues? notify your editorial technical team...
@brainstorm, @rlizzo - many thanks for your reviews here and to @trallard for editing this submission โจ
@aslakbergersen @hkjeldsberg - your paper is now accepted into JOSS :zap::rocket::boom:
:wave: Hey @arfon...
Letting you know, @trallard
is currently OOO until Sunday, April 7th 2019. :heart:
:tada::tada::tada: Congratulations on your paper acceptance! :tada::tada::tada:
If you would like to include a link to your paper from your README use the following code snippets:
Markdown:
[](https://doi.org/10.21105/joss.01065)
HTML:
<a style="border-width:0" href="https://doi.org/10.21105/joss.01065">
<img src="http://joss.theoj.org/papers/10.21105/joss.01065/status.svg" alt="DOI badge" >
</a>
reStructuredText:
.. image:: http://joss.theoj.org/papers/10.21105/joss.01065/status.svg
:target: https://doi.org/10.21105/joss.01065
This is how it will look in your documentation:
We need your help!
Journal of Open Source Software is a community-run journal and relies upon volunteer effort. If you'd like to support us please consider doing either one (or both) of the the following:
Most helpful comment
@aslakbergersen and @hkjeldsberg all looks good to me now so I am going to proceed for acceptance โกโจ
@brainstorm and @rlizzo thank you so much for your time and expertise as reviewers it is much appreciated at JOSS ๐๐ป
@openjournals/joss-eics this submission has been accepted and is ready to be published ๐๐๐ป๐ฅณ