Joss-reviews: [REVIEW]: morphMan: Automated manipulation of vascular geometries

Created on 4 Nov 2018  ยท  78Comments  ยท  Source: openjournals/joss-reviews

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

status

Status badge code:

HTML: <a href="http://joss.theoj.org/papers/9f871144f31b184bc8b5fdd652bb923c"><img src="http://joss.theoj.org/papers/9f871144f31b184bc8b5fdd652bb923c/status.svg"></a>
Markdown: [![status](http://joss.theoj.org/papers/9f871144f31b184bc8b5fdd652bb923c/status.svg)](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.)

Reviewer instructions & questions

@brainstorm & @rlizzo, please carry out your review in this issue by updating the checklist below. If you cannot edit the checklist please:

  1. Make sure you're logged in to your GitHub account
  2. Be sure to accept the invite at this URL: https://github.com/openjournals/joss-reviews/invitations

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 โœจ

Review checklist for @brainstorm

Conflict of interest

Code of Conduct

General checks

  • [x] Repository: Is the source code for this software available at the repository url?
  • [x] License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • [x] Version: v0.2
  • [x] Authorship: Has the submitting author (@aslakbergersen) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?

Functionality

  • [ ] Installation: Does installation proceed as outlined in the documentation?
  • [x] Functionality: Have the functional claims of the software been confirmed?
  • [x] Performance: If there are any performance claims of the software, have they been confirmed? (If there are no claims, please check off this item.)

Documentation

  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • [x] Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • [x] Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • [x] Automated tests: Are there automated tests or manual steps described so that the function of the software can be verified?
  • [x] Community guidelines: Are there clear guidelines for third parties wishing to 1) Contribute to the software 2) Report issues or problems with the software 3) Seek support

Software paper

  • [x] Authors: Does the paper.md file include a list of authors with their affiliations?
  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] References: Do all archival references that should have a DOI list one (e.g., papers, datasets, software)?

Review checklist for @rlizzo

Conflict of interest

Code of Conduct

General checks

  • [x] Repository: Is the source code for this software available at the repository url?
  • [x] License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • [x] Version: v0.2
  • [x] Authorship: Has the submitting author (@aslakbergersen) made major contributions to the software? Does the full list of paper authors seem appropriate and complete?

Functionality

  • [x] Installation: Does installation proceed as outlined in the documentation?
  • [x] Functionality: Have the functional claims of the software been confirmed?
  • [x] Performance: If there are any performance claims of the software, have they been confirmed? (If there are no claims, please check off this item.)

Documentation

  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • [x] Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • [x] Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • [x] Automated tests: Are there automated tests or manual steps described so that the function of the software can be verified?
  • [x] Community guidelines: Are there clear guidelines for third parties wishing to 1) Contribute to the software 2) Report issues or problems with the software 3) Seek support

Software paper

  • [x] Authors: Does the paper.md file include a list of authors with their affiliations?
  • [x] A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • [x] References: Do all archival references that should have a DOI list one (e.g., papers, datasets, software)?
accepted published recommend-accept review

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 ๐ŸŽ‰๐Ÿ™Œ๐Ÿป๐Ÿฅณ

All 78 comments

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:

  1. Set yourself as 'Not watching' https://github.com/openjournals/joss-reviews:

watching

  1. You may also like to change your default settings for this watching repositories in your GitHub profile here: https://github.com/settings/notifications

notifications

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] make a new release of the package (unless the latest release is up to date with the recent modifications) and add let us know what is the most up to date version
  • [x] post the latest DOI in this thread so we can use it as the archive
  • [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

  • 10.1227/NEU.0b013e31820b5242 is OK

MISSING DOIs

INVALID DOIs

  • None
    ```

@whedon check references

Attempting to check references...

```Reference check summary:

OK DOIs

  • 10.1016/s0140-6736(96)07492-2 is OK
  • 10.1001/archinte.156.16.1829 is OK
  • 10.1001/jama.282.21.2035 is OK
  • 10.1007/s13239-018-00374-2 is OK
  • 10.1007/s13239-018-00376-0 is OK
  • 10.1160/th15-07-0597 is OK
  • 10.1161/strokeaha.113.001762 is OK
  • 10.1227/NEU.0b013e31820b5242 is OK
  • 10.1007/s10439-010-9901-0 is OK
  • 10.3171/jns.2004.101.1.0108 is OK
  • 10.1093/neuros/nyy152 is OK
  • 10.1371/journal.pcbi.1006510 is OK
  • 10.14236/ewic/hci2018.41 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

@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:

  • Simplified installation with Anaconda
  • Demo suite supporting tutorials in the documentation
  • Resolved blocking issues related to the JOSS submission

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.

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

  • 10.1016/s0140-6736(96)07492-2 is OK
  • 10.1001/archinte.156.16.1829 is OK
  • 10.1001/jama.282.21.2035 is OK
  • 10.1007/s13239-018-00374-2 is OK
  • 10.1007/s13239-018-00376-0 is OK
  • 10.1160/th15-07-0597 is OK
  • 10.1161/strokeaha.113.001762 is OK
  • 10.1227/NEU.0b013e31820b5242 is OK
  • 10.1007/s10439-010-9901-0 is OK
  • 10.3171/jns.2004.101.1.0108 is OK
  • 10.1093/neuros/nyy152 is OK
  • 10.1371/journal.pcbi.1006510 is OK
  • 10.14236/ewic/hci2018.41 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

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

  • 10.1016/s0140-6736(96)07492-2 is OK
  • 10.1001/archinte.156.16.1829 is OK
  • 10.1001/jama.282.21.2035 is OK
  • 10.1007/s13239-018-00374-2 is OK
  • 10.1007/s13239-018-00376-0 is OK
  • 10.1160/th15-07-0597 is OK
  • 10.1161/strokeaha.113.001762 is OK
  • 10.1227/NEU.0b013e31820b5242 is OK
  • 10.1007/s10439-010-9901-0 is OK
  • 10.3171/jns.2004.101.1.0108 is OK
  • 10.1093/neuros/nyy152 is OK
  • 10.1371/journal.pcbi.1006510 is OK
  • 10.14236/ewic/hci2018.41 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

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:incollect!'
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:infind_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:inrun'
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:indispatch'
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 from /app/vendor/bundle/ruby/2.4.0/bin/whedon:23:in load' from /app/vendor/bundle/ruby/2.4.0/bin/whedon:23:in

'

```Reference check summary:

OK DOIs

  • 10.1016/s0140-6736(96)07492-2 is OK
  • 10.1001/archinte.156.16.1829 is OK
  • 10.1001/jama.282.21.2035 is OK
  • 10.1007/s13239-018-00374-2 is OK
  • 10.1007/s13239-018-00376-0 is OK
  • 10.1160/th15-07-0597 is OK
  • 10.1161/strokeaha.113.001762 is OK
  • 10.1227/NEU.0b013e31820b5242 is OK
  • 10.1007/s10439-010-9901-0 is OK
  • 10.3171/jns.2004.101.1.0108 is OK
  • 10.1093/neuros/nyy152 is OK
  • 10.1371/journal.pcbi.1006510 is OK
  • 10.14236/ewic/hci2018.41 is OK

MISSING DOIs

  • None

INVALID DOIs

  • None
    ```

@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:

  1. Check final PDF and Crossref metadata that was deposited :point_right: https://github.com/openjournals/joss-papers/pull/566
  2. Wait a couple of minutes to verify that the paper DOI resolves https://doi.org/10.21105/joss.01065
  3. If everything looks good, then close this review issue.
  4. 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:
[![DOI](http://joss.theoj.org/papers/10.21105/joss.01065/status.svg)](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:

DOI

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:

Was this page helpful?
0 / 5 - 0 ratings