{"id":34831815,"url":"https://github.com/sibirrer/psfr","last_synced_at":"2026-04-02T18:37:16.931Z","repository":{"id":56188067,"uuid":"514965981","full_name":"sibirrer/psfr","owner":"sibirrer","description":"Point Spread Function reconstruction","archived":false,"fork":false,"pushed_at":"2024-08-22T16:49:00.000Z","size":9176,"stargazers_count":30,"open_issues_count":1,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-02T07:59:45.422Z","etag":null,"topics":["astronomy","lenstronomy","psf-estimation"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sibirrer.png","metadata":{"files":{"readme":"README.rst","changelog":"HISTORY.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-17T22:06:48.000Z","updated_at":"2025-11-19T17:32:51.000Z","dependencies_parsed_at":"2024-04-29T20:29:02.898Z","dependency_job_id":"ebc6df54-b831-4932-b4f9-818c23945f33","html_url":"https://github.com/sibirrer/psfr","commit_stats":{"total_commits":99,"total_committers":4,"mean_commits":24.75,"dds":0.4040404040404041,"last_synced_commit":"ccc7aca0affefa735aa3cf4fc759dd514f6bc26e"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/sibirrer/psfr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sibirrer%2Fpsfr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sibirrer%2Fpsfr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sibirrer%2Fpsfr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sibirrer%2Fpsfr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sibirrer","download_url":"https://codeload.github.com/sibirrer/psfr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sibirrer%2Fpsfr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31313041,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astronomy","lenstronomy","psf-estimation"],"created_at":"2025-12-25T15:52:05.608Z","updated_at":"2026-04-02T18:37:16.912Z","avatar_url":"https://github.com/sibirrer.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"===========================================\nPSFr - Point Spread Function reconstruction\n===========================================\n\n|PyPI| |CI| |Docs| |Coveralls|\n\n.. |CI| image:: https://github.com/sibirrer/psfr/workflows/Tests/badge.svg\n    :target: https://github.com/sibirrer/psfr/actions\n\n.. |Docs| image:: https://readthedocs.org/projects/psfr/badge/?version=latest\n        :target: http://psfr.readthedocs.io/en/latest/?badge=latest\n        :alt: Documentation Status\n\n.. |Coveralls| image:: https://coveralls.io/repos/github/sibirrer/psfr/badge.svg?branch=main\n    :target: https://coveralls.io/github/sibirrer/psfr?branch=main\n\n.. |PyPI| image:: https://img.shields.io/pypi/v/psfr?label=PyPI\u0026logo=pypi\n    :target: https://pypi.python.org/pypi/psfr\n\n.. image:: https://github.com/sibirrer/psfr/blob/main/docs/_static/stacked_psf_animation.gif\n\nPoint Spread Function reconstruction for astronomical\nground- and space-based imaging data.\n\n\nExample\n-------\n\n.. code-block:: python\n\n    # get cutout stars in the field of a JWST observation (example import)\n    from psfr.util import jwst_example_stars\n    star_list_jwst = jwst_example_stars()\n\n    # run PSF reconstruction (see documentation for further options)\n    from psfr.psfr import stack_psf\n    psf_model, center_list, mask_list = stack_psf(star_list_jwst, oversampling=4,\n                                                  saturation_limit=None, num_iteration=50)\n\nWe further refer to the example Notebook_ and the Documentation_.\n\n.. _Notebook: https://github.com/sibirrer/psfr/blob/main/notebooks/JWST_PSF_reconstruction.ipynb\n.. _Documentation: https://psfr.readthedocs.io/en/latest/\n\n\nFeatures\n--------\n\n* Iterative PSF reconstruction given cutouts of individual stars or other point-like sources.\n* Sub-pixel astrometric shifts calculated and accounted for while performing the PSF reconstruction.\n* PSF reconstruction available in super-sampling resolution.\n* Masking pixels, saturation levels and other options to deal with artifacts in the data.\n\nAlgorithm\n---------\nThe algorithm to iteratively propose a (optionally oversampled) PSF from a set of star cutouts goes as follow:\n\n\n(1) Stack all the stars for an initial guess of the PSF on the centroid pixel (ignoring sub-pixel offsets)\n\n(2) Fit the subpixel centroid with the PSF model estimate\n\n(3) Shift PSF with sub-pixel interpolation to the sub-pixel position of individual stars\n\n(4) Retrieve residuals of the shifted PSF model relative to the data of the cutouts\n\n(5) Apply an inverse sub-pixel shift of the residuals to be focused on the center of the pixel\n\n(6) Based on the inverse shifted residuals of a set of fixed stars, propose a correction to the previous PSF model\n\n(7) Repeat step (3) - (6) multiple times with the option to repeat step (2)\n\n\nDetails and options for the different steps can be found in the documentation and the source code.\n\n\nUsed by\n-------\nPSFr is in use with James Webb Space Telescope imaging data (i.e., `Santini et al. 2022  \u003chttps://ui.adsabs.harvard.edu/abs/2022arXiv220711379S/abstract\u003e`_,\n`Merlin et al. 2022  \u003chttps://ui.adsabs.harvard.edu/abs/2022arXiv220711701M/abstract\u003e`_,\n`Yang et al. 2022  \u003chttps://ui.adsabs.harvard.edu/abs/2022arXiv220713101Y/abstract\u003e`_,\n`Ding et al. 2022  \u003chttps://ui.adsabs.harvard.edu/abs/2022arXiv220903359D/abstract\u003e`_).\nThe iterative PSF reconstruction procedure was originally developed and used for analyzing strongly lensed quasars\n(i.e., `Birrer et al. 2019 \u003chttps://ui.adsabs.harvard.edu/#abs/2018arXiv180901274B/abstract\u003e`_\n, `Shajib et al. 2018 \u003chttps://ui.adsabs.harvard.edu/abs/2019MNRAS.483.5649S\u003e`_ ,\n`Shajib et al. 2019 \u003chttps://ui.adsabs.harvard.edu/abs/2019arXiv191006306S/abstract\u003e`_ ,\n`Schmidt et al. 2022 \u003chttps://arxiv.org/abs/2206.04696\u003e`_).\n\n\nOther resources\n---------------\n\nWe also refer to the astropy core package\n`photutils \u003chttps://photutils.readthedocs.io/en/stable/index.html\u003e`_\nand in particular to the empirical PSF module\n`ePSF \u003chttps://photutils.readthedocs.io/en/stable/epsf.html#build-epsf\u003e`_ .\nPSF reconstructions are e.g. reported by\n`Anderson and King (2000; PASP 112, 1360) \u003chttps://ui.adsabs.harvard.edu/abs/2000PASP..112.1360A/abstract\u003e`_\nand\n`Anderson (2016), ISR WFC3 2016-12 \u003chttps://www.stsci.edu/files/live/sites/www/files/home/hst/instrumentation/wfc3/documentation/instrument-science-reports-isrs/_documents/2016/WFC3-2016-12.pdf\u003e`_.\n\n\n\nCredits\n-------\n\nThe software is an off-spring of the iterative PSF reconstruction scheme of `lenstronomy \u003chttps://github.com/lenstronomy/lenstronomy\u003e`_, in particular its `psf_fitting.py \u003chttps://github.com/lenstronomy/lenstronomy/blob/v1.10.4/lenstronomy/Workflow/psf_fitting.py\u003e`_ functionalities.\n\nIf you make use of this software, please cite: 'This code is using PSFr (Birrer et al. in prep) utilizing features of\nlenstronomy (`Birrer et al. 2021 \u003chttps://joss.theoj.org/papers/10.21105/joss.03283\u003e`_)'.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsibirrer%2Fpsfr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsibirrer%2Fpsfr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsibirrer%2Fpsfr/lists"}