pyOpenSci/software-submission

GALFITools: a library for GALFIT

Opened this issue · 38 comments

Submitting Author: (@canorve)
All current maintainers: (@canorve)
Package Name: GALFITools
One-Line Description of Package: A library for efficient data processing customized for the GALFIT package
Repository Link: https://github.com/canorve/GALFITools
Version submitted: v1.15.0
EiC: @SimonMolinsky, @coatless
Editor: @hamogu
Reviewer 1: @Jammy2211
Reviewer 2: @ tepickering
Archive: https://zenodo.org/records/17010007
JOSS DOI: TBD
Version accepted: 1.18.0
Date accepted (month/day/year): 10/30/2025


Code of Conduct & Commitment to Maintain Package

Description

  • Include a brief paragraph describing what your package does:

GALFIT, a well-established two-dimensional image fitting algorithm (Peng et al. 2002, AJ, 124, 266), is integral to precise modeling of galaxy surface brightness in astronomical images. To optimize GALFIT's utility, GALFITools provides a suite of Python routines that streamline input and output parsing for enhanced efficiency and usability.

Scope

  • Please indicate which category or categories.
    Check out our package scope page to learn more about our
    scope. (If you are unsure of which category you fit, we suggest you make a pre-submission inquiry):

    • Data retrieval
    • Data extraction
    • Data processing/munging
    • Data deposition
    • Data validation and testing
    • Data visualization1
    • Workflow automation
    • Citation management and bibliometrics
    • Scientific software wrappers
    • Database interoperability

Domain Specific

  • Geospatial
  • Education

Community Partnerships

If your package is associated with an
existing community please check below:

  • For all submissions, explain how and why the package falls under the categories you indicated above. In your explanation, please address the following points (briefly, 1-2 sentences for each):

GALFITools enhances functionality with a range of features, including mask creation, PSF generation, initial parameter estimation, galaxy image model visualizaton, multigaussian expansion (MGE) fitting, and calculation of sky background along with other key photometric parameters.

  • Who is the target audience and what are scientific applications of this package?
    This a tool for astronomers to streamline image data processing and enhance interpretation of GALFIT outputs

  • Are there other Python packages that accomplish the same thing? If so, how does yours differ?
    No, similar tools act as GALFIT wrappers but focus on different objectives, such as automating GALFIT for large galaxy samples.

  • If you made a pre-submission enquiry, please paste the link to the corresponding issue, forum post, or other discussion, or @tag the editor you contacted:

#216

Technical checks

For details about the pyOpenSci packaging requirements, see our packaging guide. Confirm each of the following by checking the box. This package:

  • does not violate the Terms of Service of any service it interacts with.
  • uses an OSI approved license.
  • contains a README with instructions for installing the development version.
  • includes documentation with examples for all functions.
  • contains a tutorial with examples of its essential functions and uses.
  • has a test suite.
  • has continuous integration setup, such as GitHub Actions CircleCI, and/or others.

Publication Options

JOSS Checks
  • The package has an obvious research application according to JOSS's definition in their submission requirements. Be aware that completing the pyOpenSci review process does not guarantee acceptance to JOSS. Be sure to read their submission requirements (linked above) if you are interested in submitting to JOSS.
  • The package is not a "minor utility" as defined by JOSS's submission requirements: "Minor ‘utility’ packages, including ‘thin’ API clients, are not acceptable." pyOpenSci welcomes these packages under "Data Retrieval", but JOSS has slightly different criteria.
  • The package contains a paper.md matching JOSS's requirements with a high-level description in the package root or in inst/.
  • The package is deposited in a long-term repository with the DOI:
    https://zenodo.org/records/13994492

Note: JOSS accepts our review as theirs. You will NOT need to go through another full review. JOSS will only review your paper.md file. Be sure to link to this pyOpenSci issue when a JOSS issue is opened for your package. Also be sure to tell the JOSS editor that this is a pyOpenSci reviewed package once you reach this step.

Are you OK with Reviewers Submitting Issues and/or pull requests to your Repo Directly?

This option will allow reviewers to open smaller issues that can then be linked to PR's rather than submitting a more dense text based review. It will also allow you to demonstrate addressing the issue via PR links.

  • Yes I am OK with reviewers submitting requested changes as issues to my repo. Reviewers will then link to the issues in their submitted review.

Confirm each of the following by checking the box.

  • I have read the author guide.
  • I expect to maintain this package for at least 2 years and can help find a replacement for the maintainer (team) if needed.

Please fill out our survey

P.S. Have feedback/comments about our review process? Leave a comment here

Editor and Review Templates

The editor template can be found here.

The review template can be found here.

Footnotes

  1. Please fill out a pre-submission inquiry before submitting a data visualization package.

Editor in Chief checks

Hi there! Thank you for submitting your package for pyOpenSci
review. Below are the basic checks that your package needs to pass
to begin our review. If some of these are missing, we will ask you
to work on them before the review process begins.

Please check our Python packaging guide for more information on the elements
below.

  • Installation The package can be installed from a community repository such as PyPI (preferred), and/or a community channel on conda (e.g. conda-forge, bioconda).
    • The package imports properly into a standard Python environment import package.
  • Fit The package meets criteria for fit and overlap.
  • Documentation The package has sufficient online documentation to allow us to evaluate package function and scope without installing the package. This includes:
    • User-facing documentation that overviews how to install and start using the package.
    • Short tutorials that help a user understand how to use the package and what it can do for them.
    • API documentation (documentation for your code's functions, classes, methods and attributes): this includes clearly written docstrings with variables defined using a standard docstring format.
  • Core GitHub repository Files
    • README The package has a README.md file with clear explanation of what the package does, instructions on how to install it, and a link to development instructions.
    • Contributing File The package has a CONTRIBUTING.md file that details how to install and contribute to the package.
    • Code of Conduct The package has a CODE_OF_CONDUCT.md file.
    • License The package has an OSI approved license.
      NOTE: We prefer that you have development instructions in your documentation too.
  • Issue Submission Documentation All of the information is filled out in the YAML header of the issue (located at the top of the issue template).
  • Automated tests Package has a testing suite and is tested via a Continuous Integration service.
  • Repository The repository link resolves correctly.
  • Package overlap The package doesn't entirely overlap with the functionality of other packages that have already been submitted to pyOpenSci.
  • Archive (JOSS only, may be post-review): The repository DOI resolves correctly.
  • Version (JOSS only, may be post-review): Does the release version given match the GitHub release (v1.0.0)?

  • Initial onboarding survey was filled out
    We appreciate each maintainer of the package filling out this survey individually. 🙌
    Thank you authors in advance for setting aside five to ten minutes to do this. It truly helps our organization. 🙌


Editor comments

@canorve I've checked your package and have two issues that should be addressed before we assign the editor and reviewers:

  1. You have provided documentation, but I see only raw rst files. Have you built docs somewhere? Do you have a link to the build docs? Here is the guide that might help you: https://www.pyopensci.org/python-package-guide/documentation/hosting-tools/intro.html
  2. Are your tests automated? Have you considered using GitHub Actions for this? Here's an example of how to set up automated tests: https://www.pyopensci.org/python-package-guide/tests/tests-ci.html

We will go forward with the review when you address those two points!

@canorve

Here are my comments:

I've checked your package and have two issues that should be addressed before we assign the editor and reviewers:

  1. You have provided documentation, but I see only raw rst files. Have you built docs somewhere? Do you have a link to the build docs? Here is the guide that might help you: https://www.pyopensci.org/python-package-guide/documentation/hosting-tools/intro.html
  2. Are your tests automated? Have you considered using GitHub Actions for this? Here's an example of how to set up automated tests: https://www.pyopensci.org/python-package-guide/tests/tests-ci.html
    We will go forward with the review when you address those two points!

Hi @canorve

How are you? Could you tell me how updating documentation and automated tests is going?

Hello @SimonMolinsky,

The documentation and GitHub Actions are new to me, but I'm working on them. The GitHub Actions workflow is already implemented, though I'm not sure if it's working properly. Currently, I'm following the Read the Docs documentation.

Dear @SimonMolinsky, I have completed the documentation, which is hosted at GALFITools Documentation.

Additionally, GitHub Actions for automated tests have been implemented and tested.

I am now ready for feedback on both the documentation and the code

Hi @canorve !

Sorry for the delay. I'm not as available as I would like to be! I've checked your docs and found one broken link under here—there is a typo in a link path, with an additional / after .html. Just remove it, and it will work fine.

First of all, install [GALFIT](https://users.obs.carnegiescience.edu/peng/work/galfit/galfit.html) if you haven’t done so. Check instructions [here](https://users.obs.carnegiescience.edu/peng/work/galfit/galfit.html/). Make sure that GALFIT can run in any path in your linux/macOS terminal.

GitHub Actions work, your documentation, especially the API description, is ready, and you have fulfilled all EiC checks. We can move forward with the review!

Don't worry, I appreciate your time in reviewing it. Thanks for informing me about the broken link; it has now been corrected.

hi colleagues! I noticed this has the astropy check on it. I"ve alerted the current astropy editors of that fact so it can be considered for astropy affiliation in the review. Someone from the astropy editorial team will be in touch about the next steps. 🚀

@SimonMolinsky thank you so much for continuing to work on this submission 💓 You are so appreciated here.

@SimonMolinsky I'll handle this submission going forward. Thank you again for everything!

@canorve sorry for the delay in moving this forward. I've gone ahead and assigned @hamogu as the editor for the submission as it meets all of our requirements.

I will note that there are scientific similarities with PyAutoGalaxy that is also now under review; but, fundamentally the software is different in the underlying implementation and front facing uses.

Editor response to review:

Hi @SimonMolinsky ! Thanks for submitting your package to PyOpenSci. I'll be your editor - please feel free to reach out to me with any questions you might have. I'll now start to look for reviewers; usually that's the most time-consuming part of the process but I'll keep you updated as that goes along!


Editor comments

👋 Hi @Jammy2211 and @tepickering! Thank you for volunteering to review
for pyOpenSci!

Please fill out our pre-review survey

Before beginning your review, please fill out our pre-review survey. This helps us improve all aspects of our review and better understand our community. No personal data will be shared from this survey - it will only be used in an aggregated format by our Executive Director to improve our processes and programs.

  • reviewer 1 survey completed.
  • reviewer 2 survey completed.
  • reviewer 3 (if applicable)

The following resources will help you complete your review:

  1. Here is the reviewers guide. This guide contains all of the steps and information needed to complete your review.
  2. Here is the review template that you will need to fill out and submit
    here as a comment, once your review is complete.

Please get in touch with any questions or concerns! Your review is due:

Reviewers: @Jammy2211 @tepickering
Due date: 11-Jun-2025

@canorve : You indicated that you intend to have this package also submitted to JOSS by setting the tick mark in the submission. As you may know, the review we do will automatically be accepted as the review by JOSS; they will only do some editorial stuff, but not look at the package again. That means that the reviewers here also need to look at the paper.md that JOSS will publish. Could you point us to where we find that paper in your repro? (See links to JOSS documentation in the first post in this thread for details).

Thank you for pointing this out. I will review the JOSS documentation and upload the paper.md file to the repository at my earliest convenience. Once uploaded, I will notify you here.

Dear @canorve, I'm just putting a "pending-maintainer-response" label on this issue for now to mark that we are waiting for the paper.md to review before we proceed. No rush - I just want to make sure that people who look at this issue don't get confused why the review has not started yet.

Dear @hamogu,
Thank you for the update. I’ve received the message and appreciate the clarification. I’ll upload the paper.md as soon as possible.

Dear @hamogu, just to let you know that I have uploaded the paper.md file; it is located in the paper folder. I'm sorry for the delay.

@canorve Thanks for letting me know. I'm looking for a second reviewer now so that we can get started!

@tepickering and @Jammy2211 Thank you so much for volunteering to review this package. It should all be set for you to start looking. Review instructions are linked here #220 (comment) and please reach out to me with any questions! As is customary, I set the review due date for there weeks from now, but if you run into problems or need more time let me know and we'll work it out.

I began my review, but after downloading the GALFIT debian64 kernel from the GALFIT home page, when I run it I get this error

./galfit: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

I have tried other kernels, but no luck.

ChatGPT suggests I could down a route of changing my libncurses installation, but I have had issues with my windows subsystem for linux breaking when I start to change random libraries.

The alternative would be to try build GALFIT from source, but this would again require me to touch C libraries that I would rather not risk breaking.

I doubt there is a simple fix, so I see two ways forward:

  1. I complete the review without actually running GALFITools, which is not ideal but is probably something I can get most of the way there.
  2. You find another reviewer who (hopefully) has the hardware to run GALFIT.

If there is a fix which doesn't require me to risk running sudo apt install something I would be happy to try that.

@canorve Do you have a suggestion? If not, I would also @Jammy2211 to review as good as you can (documentation and JOSS paper for example don't depend on actually installing it) and I will install it and do a partial review myself to be added to that.

now that the AAS is over i'll finally have some time to devote to this. would it be helpful to set up a docker container with galfit and GALFITools installed? that would work around having to match the various dependencies on one's local machine, at least for review purposes.

I don't think there's an easier fix than running sudo apt install libncurses-dev
If it's helpful, GALFIT is only invoked when the makePSF function is used; the rest of GALFITools does not depend on it.

I attach my review below, as discussed above the vast majority of functionality did not actually require GALFIT and simply ran off of GALFIT results files, so I was able to go through the majority of code without issue.

Package Review

Please check off boxes as applicable, and elaborate in comments below. Your review is not limited to these topics, as described in the reviewer guide

  • [x ] As the reviewer I confirm that there are no conflicts of interest for me to review this work (If you are unsure whether you are in conflict, please speak to your editor before starting your review).

Documentation

The package includes all the following forms of documentation:

  • A statement of need clearly stating problems the software is designed to solve and its target audience in README.
  • [x ] Installation instructions: for the development version of the package and any non-standard dependencies in README.
  • Vignette(s) demonstrating major functionality that runs successfully locally.
  • Function Documentation: for all user-facing functions.
  • Examples for all user-facing functions.
  • Community guidelines including contribution guidelines in the README or CONTRIBUTING.
  • Metadata including author(s), author e-mail(s), a url, and any other relevant metadata e.g., in a pyproject.toml file or elsewhere.

Readme file requirements
The package meets the readme requirements below:

  • Package has a README.md file in the root directory.

The README should include, from top to bottom:

  • The package name
  • Badges for:
    • Continuous integration and test coverage,
    • Docs building (if you have a documentation website),
    • A repostatus.org badge,
    • Python versions supported,
    • Current package version (on PyPI / Conda).

NOTE: If the README has many more badges, you might want to consider using a table for badges: see this example. Such a table should be more wide than high. (Note that the a badge for pyOpenSci peer-review will be provided upon acceptance.)

  • Short description of package goals.
  • Package installation instructions
  • Any additional setup required to use the package (authentication tokens, etc.)
  • Descriptive links to all vignettes. If the package is small, there may only be a need for one vignette which could be placed in the README.md file.
    • Brief demonstration of package usage (as it makes sense - links to vignettes could also suffice here if package description is clear)
  • Link to your documentation website.
  • If applicable, how the package compares to other similar packages and/or how it relates to other packages in the scientific ecosystem.
  • Citation information

Usability

Reviewers are encouraged to submit suggestions (or pull requests) that will improve the usability of the package as a whole.
Package structure should follow general community best-practices. In general please consider whether:

  • Package documentation is clear and easy to find and use.
  • The need for the package is clear
  • All functions have documentation and associated examples for use
  • The package is easy to install

Functionality

  • Installation: Installation succeeds as documented.
  • Functionality: Any functional claims of the software been confirmed.
  • Performance: Any performance claims of the software been confirmed.
  • Automated tests:
    • All tests pass on the reviewer's local machine for the package version submitted by the author. Ideally this should be a tagged version making it easy for reviewers to install.
    • [x ] Tests cover essential functions of the package and a reasonable range of inputs and conditions.
  • [x ] Continuous Integration: Has continuous integration setup (We suggest using Github actions but any CI platform is acceptable for review)
  • Packaging guidelines: The package conforms to the pyOpenSci packaging guidelines.
    A few notable highlights to look at:
    • Package supports modern versions of Python and not End of life versions.
    • Code format is standard throughout package and follows PEP 8 guidelines (CI tests for linting pass)

For packages also submitting to JOSS

Note: Be sure to check this carefully, as JOSS's submission requirements and scope differ from pyOpenSci's in terms of what types of packages are accepted.

The package contains a paper.md matching JOSS's requirements with:

  • A short summary describing the high-level functionality of the software
  • Authors: A list of authors with their affiliations
  • A statement of need clearly stating problems the software is designed to solve and its target audience.
  • References: With DOIs for all those that have one (e.g. papers, datasets, software).

Final approval (post-review)

  • The author has responded to my review and made changes to my satisfaction. I recommend approving this package.

Estimated hours spent reviewing:

3


Review Comments

  • My main critique is that the package assumes the user has a lot of Astronomy experience and knowledge in terms of how its documented and phrased.

For example, the documentation for the MGE reads as follows:

Routines that use the Multi-Gaussian Expansion.

mge2galfit fits multi-gaussian expansion of Cappellari (2002) and formats to GALFIT

positional arguments:
  GalfitFile            GALFIT file to obtain the header options
  Ds9regFile            the DS9 ellipse region file containing the galaxy

options:
  -h, --help            show this help message and exit
  -t, --twist           uses twist option for mge
  -c, --center          uses the center given in DS9 region file,otherwise it will found the x,y peak within DS9
                        ellipse
  -p PSF, --psf PSF     the value of PSF sigma
  -gas, --gauss         uses gauss function for galfit file
  -fser, --freeser      leaves the sersic index as a free parameter to fit
  -fsk, --freesky       leaves the sky as a free parameter to fit
  -ng NUMGAUSS, --numgauss NUMGAUSS
SbProf creates a surface brightness profile from a ellipse ds9 region

positional arguments:
  Image                 image fits file
  Ds9Region             Ds9 ellipse region file

options:
  -h, --help            show this help message and exit
  -q AXRAT, --axrat AXRAT
                        axis ratio
  -pa ANGLE, --angle ANGLE
                        angular position (same as GALFIT)
  -mz MGZPT, --mgzpt MGZPT
                        Magnitud zero point
  -m MASK, --mask MASK  mask fits file
  -s SKY, --sky SKY     sky value. Default = 0
  -p PLATE, --plate PLATE
                        plate scale
  -o OUTPUT, --output OUTPUT
                        output file
  -c, --center          uses the center given in DS9 region file,otherwise it will found the x,y
                        peak within DS9 ellipse
  -rx RANX RANX, --ranx RANX RANX
                        provide a range for x-axis: xmin - xmax
  -ry RANY RANY, --rany RANY RANY
                        provide a range for y-axis: ymin - ymax
  -lx, --logx           turn the X-axis to logarithm
  -px, --pix            turn the top x-axis in pixels
  -g, --grid            display a grid in the plot
  -r RAD, --rad RAD     value for a vertical line to add into the plot
  -r2 RAD2, --rad2 RAD2
                        value for a second vertical line to add into the plot

The documentation above, as far as I can tell, is essentially assuming one has used mgefit before and knows what a Multi Gaussian Expansion is.

For users who are not already familiar with a specific set of Astronomy tools (including things like DS9) I think it is quite difficult for one to get their head around what the correct inputs of GALFITools are in many cases.

Another example is this one:

getKappa2 gets the kappa radius from a set of Sersics using an alternative method to getKappa

positional arguments:
  GalfitFile            Galfit File containing the Sersics or gaussians components

options:
  -h, --help            show this help message and exit
  -d DIS, --dis DIS     Maximum distance among components
  -n NUMCOMP, --numcomp NUMCOMP
                        Number of component where it'll obtain center of all components, default = 1
  -a ANGLE, --angle ANGLE
                        Angle of the major axis of the galaxy. Default= it will take the angle of the
                        last components
  -p, --plot            makes plot of double derivative vs. radius
  -rx RANX RANX, --ranx RANX RANX
                        x-axis range to search for the Break radius: xmin - xmax

I don't know what the kappa radius is, I dont know why there is an alternative method to compute it and I don't know what that method does.

I am assuming this package is aimed at people who use a specific set of tools with known conventions and definitions within Astronomy, and that the package essentially acts as a streamlined interface for performing those calculations.

This may be fine and within the scope of a standalone software package, but for someone who only touched GALFIT a few times 10 years ago and hasn't used tools like DS9, I found it difficult to understand what a lot of the functionality does.

I am not sure what to suggest, on the one hand the documentation could be expanded to make this more accessible to a user who is unfamiliar with many of these tools. On the other hand, the package is targeting those with familiarity so the concise nature of the docs may be fine. Nevertheless, I raise here my experience and will see what others think.

My review was done using an Apple M1 platform running Sequoia 15.5. The galfit binary for "Mavericks" works fine using Apple's Rosetta x86_64 emulation and I was able to run through the galfit examples.

Package Review

Please check off boxes as applicable, and elaborate in comments below. Your review is not limited to these topics, as described in the reviewer guide

  • As the reviewer I confirm that there are no conflicts of interest for me to review this work (If you are unsure whether you are in conflict, please speak to your editor before starting your review).

Documentation

The package includes all the following forms of documentation:

  • A statement of need clearly stating problems the software is designed to solve and its target audience in README.
  • Installation instructions: for the development version of the package and any non-standard dependencies in README.
  • Vignette(s) demonstrating major functionality that runs successfully locally.
  • Function Documentation: for all user-facing functions.
  • Examples for all user-facing functions.
  • Community guidelines including contribution guidelines in the README or CONTRIBUTING.
  • Metadata including author(s), author e-mail(s), a url, and any other relevant metadata e.g., in a pyproject.toml file or elsewhere.

Readme file requirements
The package meets the readme requirements below:

  • Package has a README.md file in the root directory.

The README should include, from top to bottom:

  • The package name
  • Badges for:
    • Continuous integration and test coverage,
    • Docs building (if you have a documentation website),
    • A repostatus.org badge,
    • Python versions supported,
    • Current package version (on PyPI / Conda).

NOTE: If the README has many more badges, you might want to consider using a table for badges: see this example. Such a table should be more wide than high. (Note that the a badge for pyOpenSci peer-review will be provided upon acceptance.)

  • Short description of package goals.
  • Package installation instructions
  • Any additional setup required to use the package (authentication tokens, etc.)
  • Descriptive links to all vignettes. If the package is small, there may only be a need for one vignette which could be placed in the README.md file.
    • Brief demonstration of package usage (as it makes sense - links to vignettes could also suffice here if package description is clear)
  • Link to your documentation website.
  • If applicable, how the package compares to other similar packages and/or how it relates to other packages in the scientific ecosystem.
  • Citation information

Usability

Reviewers are encouraged to submit suggestions (or pull requests) that will improve the usability of the package as a whole.
Package structure should follow general community best-practices. In general please consider whether:

  • Package documentation is clear and easy to find and use.
  • The need for the package is clear
  • All functions have documentation and associated examples for use
  • The package is easy to install

Functionality

  • Installation: Installation succeeds as documented.
  • Functionality: Any functional claims of the software been confirmed.
  • Performance: Any performance claims of the software been confirmed.
  • Automated tests:
    • All tests pass on the reviewer's local machine for the package version submitted by the author. Ideally this should be a tagged version making it easy for reviewers to install.
    • Tests cover essential functions of the package and a reasonable range of inputs and conditions.
  • Continuous Integration: Has continuous integration setup (We suggest using Github actions but any CI platform is acceptable for review)
  • Packaging guidelines: The package conforms to the pyOpenSci packaging guidelines.
    A few notable highlights to look at:
    • Package supports modern versions of Python and not End of life versions.
    • Code format is standard throughout package and follows PEP 8 guidelines (CI tests for linting pass)

For packages also submitting to JOSS

Note: Be sure to check this carefully, as JOSS's submission requirements and scope differ from pyOpenSci's in terms of what types of packages are accepted.

The package contains a paper.md matching JOSS's requirements with:

  • A short summary describing the high-level functionality of the software
  • Authors: A list of authors with their affiliations
  • A statement of need clearly stating problems the software is designed to solve and its target audience.
  • References: With DOIs for all those that have one (e.g. papers, datasets, software).

Final approval (post-review)

  • The author has responded to my review and made changes to my satisfaction. I recommend approving this package.

Estimated hours spent reviewing:
3

Review Comments

  • I found the statement of need to be sufficient because the package has a very specific target audience: the users of galfit. As such, some prior knowledge of galfit and its capabilities can be assumed. A significant background in astronomy and astronomical image analysis is a prerequisite for effectively using galfit and interpreting its results. The same prerequisite applies to this package.
  • The link to the datafile used for the example, galfit.01, points to a file within the repository tree. As it's currently linked, it is a multi-step process to download into a usable format. One option would be to use a link to the raw file, e.g. https://raw.githubusercontent.com/canorve/GALFITools/refs/heads/master/docs/galfit.01, which would facilitate right-click->"save as", or include the file within the documentation tree and serve from RTD.
  • The links to the "Module Reference", "Usage guide", and "API Reference" are kinda buried at the bottom of the documentation index page. It would be nice to feature them more prominently so they're easier to find, e.g. in the "Documentation" section which currently only links recursively back to the main page.
  • The README includes instructions for installation via pip and the instructions for installing a development version are in the documentation under "Contributing". I think this is fine and allows the developer instructions to be more detailed.
  • Several requested badges are missing.
  • I tested locally under python 3.13 and everything passed. I would recommend adding 3.13 to the CI test matrix.

My comments are all relatively minor and overall the package works very well for me. It's something I wish I had access to back when I was working on galaxy surface photometry long before even galfit existed...

Thank you for your helpful comments. I will address them as soon as possible

Hello, I have released v1.18.0 and will reply to the reviewers’ comments below.

Dear reviewer @Jammy2211 :

My main critique is that the package assumes the user has a lot of Astronomy experience and knowledge in terms of how its documented and phrased ...

We have added a new Concepts section in the documentation, which includes a primer on key concepts, GALFIT example file, inline definitions of terms, and a brief Audience statement on the main page. We also reduced the use of jargon and added cross-links to definitions. For each concept, we now provide the related API functions and CLI commands directly below, making it easier for users without a deep astronomy background to navigate the package.

I can’t see the statement of need in the docs, only the JOSS paper has one, maybe move it to here: https://galfitools.readthedocs.io/en/latest/index.html

I have added a clear Statement of Need to the index page of the documentation, adapted from the JOSS paper, so that new users can immediately understand the motivation for GALFITools.

Please include the supported Python versions (e..g. 3.10 - 3.12 ?) in the installation instructions.

The supported Python versions (3.10–3.13) have been added to the installation instructions.

The link to “install GALFIT” on the installation page goes to the FAQ, which has no installation instructions. Link here instead: https://users.obs.carnegiescience.edu/peng/work/galfit/galfit.html

I have updated the installation page so that the link now points to the installation file added to the project’s GitHub repository. The guide provides step-by-step instructions and replaces the previous FAQ link.

 Instructions on needing to install pytest-cov for unit testing.

I have updated the contributing/testing instructions (CONTRIBUTING.rst) to specify that pytest-cov is required.

Dear reviewer @tepickering :

I found the statement of need to be sufficient because the package has a very specific target audience: the users of galfit. As such, some prior knowledge of galfit and its capabilities can be assumed. A significant background in astronomy and astronomical image analysis is a prerequisite for effectively using galfit and interpreting its results. The same prerequisite applies to this package.

Thank you. The statement of need has also been included in the documentation, with slight modifications for clarification.

The link to the datafile used for the example, galfit.01, points to a file within the repository tree. As it's currently linked, it is a multi-step process to download into a usable format. One option would be to use a link to the raw file, e.g. https://raw.githubusercontent.com/canorve/GALFITools/refs/heads/master/docs/galfit.01, which would facilitate right-click->"save as", or include the file within the documentation tree and serve from RTD.

The link to galfit.01 has been updated so that it now points directly to the raw file, allowing immediate download.

The links to the "Module Reference", "Usage guide", and "API Reference" are kinda buried at the bottom of the documentation index page. It would be nice to feature them more prominently so they're easier to find, e.g. in the "Documentation" section which currently only links recursively back to the main page.

I have moved the "Module Reference" and "Usage Guide" to a more prominent location in the documentation index to make them easier to find.

Several requested badges are missing.

I have added the remaining requested badges to the README.

I tested locally under python 3.13 and everything passed. I would recommend adding 3.13 to the CI test matrix.

Python 3.13 has been added to the CI test matrix.

@tepickering and @Jammy2211: Thanks for your thorough review and good suggestions and to @canorve for addresses them; It hope the team found it all useful!

@tepickering and @Jammy2211: Can you take a look at the changes to the package and see if they address the points you raised in the review? If so, please update the "Final approval (post-review)" in your review and let me know here (I only get a notification from GH if there is a new comment, not if an old comment is updated); if not we welcome your feedback what else can be improved!

@tepickering and @Jammy2211: Can I ping you again to take a look at the changes to the package and see if they address the points you raised in the review?
Your approval (or any further points you might see in the responses) is essentially all that's required for package approval at this point!

sorry! yes, the changes all look good to me. sorry to hang up the approval process...

Yep, changes look good to me.

@canorve When you opened the issue, you ticked "submit to JOSS", but not "The package contains a paper.md matching JOSS's requirements with a high-level description in the package root or in inst/."
Of course, the package DOES have a paper.md file and our reviewers thinks it's a good one. Just checking before we pass that on to JOSS: Is there anything that you believe still needs to be done to the paper.md or can we just go back and set the tick for "The package contains a paper.md matching ..."?

🎉 GALFITools has been approved by pyOpenSci! Thank you @canorve for submitting GALFITools and many thanks to @tepickering and @Jammy2211 for reviewing this package! 😸

Author Wrap Up Tasks

There are a few things left to do to wrap up this submission:

  • Activate Zenodo watching the repo if you haven't already done so.
  • Tag and create a release to create a Zenodo version and DOI.
  • Add the badge for pyOpenSci peer-review to the README.md of . The badge should be [![pyOpenSci Peer-Reviewed](https://pyopensci.org/badges/peer-reviewed.svg)](https://github.com/pyOpenSci/software-review/issues/issue-number).
  • Please fill out the post-review survey. All maintainers and reviewers should fill this out.

It looks like you would like to submit this package to JOSS. Here are the next steps:

  • Once the JOSS issue is opened for the package, we strongly suggest that you subscribe to issue updates. This will allow you to continue to update the issue labels on this review as it goes through the JOSS process.
  • Login to the JOSS website and fill out the JOSS submission form using your Zenodo DOI. When you fill out the form, be sure to mention and link to the approved pyOpenSci review. JOSS will tag your package for expedited review if it is already pyOpenSci approved.
  • Wait for a JOSS editor to approve the presubmission (which includes a scope check).
  • Once the package is approved by JOSS, you will be given instructions by JOSS about updating the citation information in your README file.
  • When the JOSS review is complete, add a comment to your review in the pyOpenSci software-review repo here that it has been approved by JOSS. An editor will then add the JOSS-approved label to this issue.

🎉 Congratulations! You are now published with both JOSS and pyOpenSci! 🎉

Editor Final Checks

Please complete the final steps to wrap up this review. Editor, please do the following:

  • Make sure that the maintainers filled out the post-review survey
  • Invite the maintainers to submit a blog post highlighting their package. Feel free to use / adapt language found in this comment to help guide the author.
  • Change the status tag of the issue to 6/pyOS-approved6 🚀🚀🚀. (You can remove all other labels; If the the package is moving on to JOSS then add a JOSS label)
  • Update the header of this issue with the date accepted, the version accepted, and the accepted version DOI (from Zenodo) to the header of this issue.
  • Invite the package maintainer(s) and both reviewers to the pyOpenSci Slack.
  • If the review is complete (not submitting to JOSS), close the issue when all items on this checklist are complete. If it's moving to JOSS, please close the issue once the JOSS review is complete and you've performed the task below.
  • If the author submits to JOSS, please continue to update the labels for JOSS on this issue until the author is accepted (do not remove the 6/pyOS-approved label). Once accepted add the label 9/joss-approved to the issue. Skip this check if the package is not submitted to JOSS.
  • If the package is JOSS-accepted please add the JOSS DOI to the YAML at the top of the issue.

If you have any feedback for us about the review process please feel free to share it here. We are always looking to improve our process and documentation in the peer-review-guide.

hey there @canorve ! We want to invite you and your maintainer team to write a blog post (totally optional) on your package for us to promote your work! if you are interested - here are a few examples of other blog posts:

pandera
movingpandas

and here is a markdown example that you could use as a guide when creating your post.

it can even be a tutorial like post that highlights what your package does. then we can share it with people to get the word out about your package.

If you are too busy for this no worries. But if you have time - we'd love to spread the word about your package!

To package authors and reviewers: We are happy to invite you to the PyOpenSci Slack (at least for now, we are probably migrating to a different platform, e.g. Zulip soon). There is a lot of discussion about best practices for packaging and very helpful community to help you out if you ever get stuck.
If you are interested, just contact me with the email address you'd like to me send the invite to.

@canorve Please let me know when you've submitted this to JOSS (and remember to link to this issue, so JOSS knows that they don't have to do a code review again!) so that I can follow along and update the status here, including the JOSS DOI when it's accepted by JOSS, too.

@canorve When you opened the issue, you ticked "submit to JOSS", but not "The package contains a paper.md matching JOSS's requirements with a high-level description in the package root or in inst/."
Of course, the package DOES have a paper.md file and our reviewers thinks it's a good one. Just checking before we pass that on to JOSS: Is there anything that you believe still needs to be done to the paper.md or can we just go back and set the tick for "The package contains a paper.md matching ..."?

Thank you for checking. The paper.md file is complete and matches JOSS’s requirements. There are no further changes needed, so please go ahead and mark the item as fulfilled.

Thank you to the reviewers and the editor for your valuable feedback on the GALFITools package.

Dear editor @hamogu , I have added the badge and completed the post-review survey. I just wanted to let you know.