Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[REVIEW]: morphMan: Automated manipulation of vascular geometries #1065

Closed
35 of 36 tasks
whedon opened this issue Nov 4, 2018 · 78 comments
Closed
35 of 36 tasks

[REVIEW]: morphMan: Automated manipulation of vascular geometries #1065

whedon opened this issue Nov 4, 2018 · 78 comments
Assignees
Labels
accepted published Papers published in JOSS recommend-accept Papers recommended for acceptance in JOSS. review

Comments

@whedon
Copy link

whedon commented Nov 4, 2018

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

  • Repository: Is the source code for this software available at the repository url?
  • License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • Version: v0.2
  • 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?
  • Functionality: Have the functional claims of the software been confirmed?
  • 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

  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • Automated tests: Are there automated tests or manual steps described so that the function of the software can be verified?
  • 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

  • Authors: Does the paper.md file include a list of authors with their affiliations?
  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • 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

  • Repository: Is the source code for this software available at the repository url?
  • License: Does the repository contain a plain-text LICENSE file with the contents of an OSI approved software license?
  • Version: v0.2
  • 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?
  • Functionality: Have the functional claims of the software been confirmed?
  • 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

  • A statement of need: Do the authors clearly state what problems the software is designed to solve and who the target audience is?
  • Installation instructions: Is there a clearly-stated list of dependencies? Ideally these should be handled with an automated package management solution.
  • Example usage: Do the authors include examples of how to use the software (ideally to solve real-world analysis problems).
  • Functionality documentation: Is the core functionality of the software documented to a satisfactory level (e.g., API method documentation)?
  • Automated tests: Are there automated tests or manual steps described so that the function of the software can be verified?
  • 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

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

whedon commented Nov 4, 2018

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 🎉.

⭐ Important ⭐

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

@whedon
Copy link
Author

whedon commented Nov 4, 2018

Attempting PDF compilation. Reticulating splines etc...

@whedon
Copy link
Author

whedon commented Nov 4, 2018

@brainstorm
Copy link
Member

@aslakbergersen No references in paper.md?

@aslakbergersen
Copy link

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

@brainstorm
Copy link
Member

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 ;)

@trallard
Copy link
Member

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.

@aslakbergersen
Copy link

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?

@trallard
Copy link
Member

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

@brainstorm
Copy link
Member

@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

@aslakbergersen
Copy link

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

@brainstorm
Copy link
Member

brainstorm commented Dec 12, 2018

Great, thanks @aslakbergersen, all good from my side, not yet, see comments below.

@aslakbergersen
Copy link

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

@trallard
Copy link
Member

trallard commented Jan 2, 2019

@rlizzo ping, I hope you had a nice holiday season I was wondering if there are still outstanding actions to proceed with the review?

@trallard
Copy link
Member

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)

@brainstorm
Copy link
Member

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 vmtk/conda-recipes#2 as well as in KVSlab/morphMan#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.

@aslakbergersen
Copy link

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 KVSlab/morphMan#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.

@brainstorm
Copy link
Member

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.

@aslakbergersen
Copy link

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

@rlizzo
Copy link

rlizzo commented Feb 1, 2019

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.

@trallard
Copy link
Member

@aslakbergersen is there any update with regards to the status of this? Have all the reviewers concerns been addressed?

@aslakbergersen
Copy link

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

@whedon
Copy link
Author

whedon commented Mar 20, 2019

Attempting PDF compilation. Reticulating splines etc...

@whedon
Copy link
Author

whedon commented Mar 20, 2019

👉 Check article proof 📄 👈

@arfon
Copy link
Member

arfon commented Mar 20, 2019

@whedon accept

@whedon
Copy link
Author

whedon commented Mar 20, 2019

Attempting dry run of processing paper acceptance...

@whedon
Copy link
Author

whedon commented Mar 20, 2019

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

@arfon
Copy link
Member

arfon commented Mar 20, 2019

@whedon accept

@whedon
Copy link
Author

whedon commented Mar 20, 2019

Attempting dry run of processing paper acceptance...

@arfon
Copy link
Member

arfon commented Mar 20, 2019

pandoc: 10.21105.joss.01065.pdf: openBinaryFile: does not exist (No such file or directory)

Sometimes @whedon times out generating these PDFs...

@whedon
Copy link
Author

whedon commented Mar 20, 2019


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
Copy link
Author

whedon commented Mar 20, 2019

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 <top (required)>'
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

'

@whedon
Copy link
Author

whedon commented Mar 20, 2019


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

@arfon
Copy link
Member

arfon commented Mar 20, 2019

@whedon accept

@whedon
Copy link
Author

whedon commented Mar 20, 2019

Attempting dry run of processing paper acceptance...

@openjournals openjournals deleted a comment from whedon Mar 20, 2019
@openjournals openjournals deleted a comment from whedon Mar 20, 2019
@arfon
Copy link
Member

arfon commented Mar 20, 2019

@whedon generate pdf

@whedon
Copy link
Author

whedon commented Mar 20, 2019

Attempting PDF compilation. Reticulating splines etc...

@whedon
Copy link
Author

whedon commented Mar 20, 2019

@arfon
Copy link
Member

arfon commented Mar 20, 2019

@whedon accept deposit=true

@whedon
Copy link
Author

whedon commented Mar 20, 2019

Doing it live! Attempting automated processing of paper acceptance...

@whedon
Copy link
Author

whedon commented Mar 20, 2019

🚨🚨🚨 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 👉 Creating pull request for 10.21105.joss.01065 joss-papers#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...

@arfon
Copy link
Member

arfon commented Mar 20, 2019

@brainstorm, @rlizzo - many thanks for your reviews here and to @trallard for editing this submission ✨

@aslakbergersen @hkjeldsberg - your paper is now accepted into JOSS ⚡🚀💥

@arfon arfon closed this as completed Mar 20, 2019
@ooo
Copy link

ooo bot commented Mar 20, 2019

👋 Hey @arfon...

Letting you know, @trallard is currently OOO until Sunday, April 7th 2019. ❤️

@whedon
Copy link
Author

whedon commented Mar 20, 2019

🎉🎉🎉 Congratulations on your paper acceptance! 🎉🎉🎉

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:

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
accepted published Papers published in JOSS recommend-accept Papers recommended for acceptance in JOSS. review
Projects
None yet
Development

No branches or pull requests

7 participants