A public and community-maintained catalog of known strong gravitational lenses
Project description
$\texttt{lenscat}$
A public and community-contributed catalog of known strong gravitational lenses.
Quickstart
The catalog is available as a plain csv file under lenscat/data/catalog.csv. Alternatively, one can interact with the catalog using a web app (mobile-friendly).
We also provide a python package lenscat
, available in pypi. Simply do
pip install lenscat
to install the latest version. Here we adopt the continuous deployment paradigm (similar to astroquery
). Whenever there is a change in the catalog content, or a major change in the code, a new release will be available instantaneously on both GitHub and PyPI.
The code converts the catalog in the csv file into a custom Catalog
object that is inherited from the Table
object in astropy
. To access the catalog, simply run
import lenscat; lenscat.catalog
and this will show a formatted table to the output. For example,
<Catalog length=4587>
name RA DEC zlens type grading
deg deg
str20 float64 float64 str15 str7 str9
------------- --------- -------- ----- ------- ---------
J0011-0845 2.83435 -8.7643 - galaxy confident
J0013+5119 3.348077 51.3183 - galaxy confident
... ... ... ... ... ...
235948-005913 359.95245 -0.98702 0.758 galaxy probable
235952+004154 359.9698 0.6985 0.267 cluster probable
Note that the code will try to assign the unit for each of the columns inferred from its name, and that it will hide the 'ref' column by default. One can show or hide the 'ref' column by calling .show_ref()
and .hide_ref()
on the Catalog
object respectively.
Every Catalog
object supports three features: basic searching with .search()
, crossmatching with a skymap with .crossmatch()
, and visualizing with .plot()
. Note that these function will return a Catalog
object, and hence they can be composed together (e.g., .crossmatch().search()
).
Basic searching
This feature is implemented as .search()
. One can search/filter by any combination of
- ranges of right ascension (specified as
RA_range=(RA_min, RA_max)
) - ranges of declination (specified as
DEC_range=(DEC_min, DEC_max)
) - ranges of lens redshift if available (specified as
zlens_range=(zlens_min, zlens_max)
) - type of the lenses (specified as
lens_type
) - grading of the lenses (specified as
grading
)
For example, to get a list of the cluster-scale lenses which are confidently identified and with a redshift $z_{\mathrm{lens}} \geq 1$ together with the reference, run
import lenscat, numpy
lenscat.catalog.search(grading="confident", lens_type="cluster", zlens_range=(1,numpy.inf)).show_ref()
The output would be something like
<Catalog length=3>
name RA DEC zlens type grading ref
deg deg
str20 float64 float64 str15 str7 str9 str227
------------- --------- --------- ----- ------- --------- -------------------------------------------------------------------------------------------------
021118-042729 32.827087 -4.458069 1.02 cluster confident https://arxiv.org/abs/2004.00634 https://arxiv.org/abs/1109.1821 https://arxiv.org/abs/1504.05587
023100-062139 37.7516 -6.3608 1.17 cluster confident https://arxiv.org/abs/2002.01611
220859+020655 332.2495 2.1153 1.04 cluster confident https://arxiv.org/abs/2002.01611
Crossmatching with a skymap
This feature is implemented as .crossmatch()
. This function is simply a wrapper to the crossmatch()
function in ligo.skymap
which performs the cross-matching of a gravitational-wave (GW) skymap with a given list of coordinates. For example, to cross-match the GW skymap of GW170814 (download from here) with only galaxy-scale lenses in the lenscat
catalog, simply run
import lenscat
lenscat.catalog.search(lens_type="galaxy").crossmatch("GW170814_skymap.fits.gz")
Running this will give
<CrossmatchResult length=3818>
name RA DEC zlens type grading searched probability searched area
deg deg deg2
str20 float64 float64 str15 str7 str9 float64 float64
------------- --------- --------- ----- ------ -------- -------------------- -----------------
DESJ0303-4626 45.9507 -46.44066 1.37 galaxy probable 0.11857081625736535 2.59328622407046
DESJ0311-4232 47.86322 -42.53863 0.37 galaxy probable 0.2301796464718608 5.619333233953008
... ... ... ... ... ... ... ...
145459+015846 223.74648 1.979505 0.375 galaxy probable 0.9999999999999997 41252.96124941707
145612+011941 224.05141 1.328216 0.555 galaxy probable 0.9999999999999997 41252.96124941707
The cross-matching can be done to the sky localization from any type of transients as long as it is in the FITS format. For example, to cross-match the localization of GRB 240229A (download from here), simply run
import lenscat
lenscat.catalog.crossmatch("glg_healpix_all_bn240229588.fit")
In this case, the output would be
<CrossmatchResult length=4587>
name RA DEC zlens type grading searched probability searched area
deg deg deg2
str20 float64 float64 str15 str7 str9 float64 float64
--------------- ----------- ----------- ------ ------ --------- -------------------- ------------------
SDSSJ1320+1644* 200.24778 16.73437 0.899 galaxy confident 0.1614180609749184 6.9241725729921235
SDSSJ1330+1750 202.63079 17.84456 0.2074 galaxy confident 0.6132034472687292 44.48256319619201
... ... ... ... ... ... ... ...
B0128+437 22.80585 43.97032 1.145? galaxy confident 1.0 41038.10207619734
H1417+526 4.402083333 52.44444444 0.81 galaxy confident 1.0 41038.10207619734
To generate a visualization of a crossmatching result, simply invoke .plot()
to a crossmatching result. For example,
import lenscat
lenscat.catalog.crossmatch("GW170814_skymap.fits.gz").plot(searched_prob_threshold=0.7)
will generate a figure like this
Format
Column name | Description |
---|---|
name |
Names of galaxies/galaxy clusters |
RA [deg] |
Right ascension in dergees |
DEC [deg] |
Declination in degress |
zlens |
Lens redshift (if known) |
type |
Type of lens (i.e. galaxy or galaxy cluster). Eithergalaxy or cluster . |
grading |
Grading whether it is a confidently identified lens or a probable lens (see individual references for internal grading systems). Either confident or probable . |
ref |
Reference to the corresponding catalog or study |
References
This catalog contains the known strong lenses from the following studies:
-
(COSMOS) LensFlow: A Convolutional Neural Network in Search of Strong Gravitational Lenses
-
Survey of Gravitationally-lensed Objects in HSC Imaging (SuGOHI) Candidate List
See also
Acknowledgements
This project was supported by the research grant no. VIL37766 and no. VIL53101 from Villum Fonden, and the DNRF Chair program grant no. DNRF162 by the Danish National Research Foundation.
This project has received funding from the European Union's Horizon 2020 research and innovation programme under the Marie Sklodowska-Curie grant agreement No 101131233.
We would also like to thank Jonah Kanner for introducing us the amazing streamlit service that hosts the web app for lenscat
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file lenscat-1.1.0.tar.gz
.
File metadata
- Download URL: lenscat-1.1.0.tar.gz
- Upload date:
- Size: 104.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f46fa292dd7eb6bcfdd108a4c6d7c81e55e9ad643b2030d996c8dda215d1b02 |
|
MD5 | 5c9a4435df9535438703f98afc06aec1 |
|
BLAKE2b-256 | ce445be6e17fdbf6994932f30daaa3d388d5e6338522ba99685f82f3c017c087 |
Provenance
The following attestation bundles were made for lenscat-1.1.0.tar.gz
:
Publisher:
python-publish.yml
on lenscat/lenscat
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
lenscat-1.1.0.tar.gz
- Subject digest:
9f46fa292dd7eb6bcfdd108a4c6d7c81e55e9ad643b2030d996c8dda215d1b02
- Sigstore transparency entry: 147311909
- Sigstore integration time:
- Predicate type:
File details
Details for the file lenscat-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: lenscat-1.1.0-py3-none-any.whl
- Upload date:
- Size: 101.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eaf5fff7e3995a89767d6dd252985a9e0d3bce1902f71a71ac594767fc37abf8 |
|
MD5 | 48013e748be7e65a301e8065bf85d6a9 |
|
BLAKE2b-256 | 505853dbee1b535f0c09ca6b4a68ff6cb0cdc5f8ab12dd2cf8bd8b28c172dc48 |
Provenance
The following attestation bundles were made for lenscat-1.1.0-py3-none-any.whl
:
Publisher:
python-publish.yml
on lenscat/lenscat
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
lenscat-1.1.0-py3-none-any.whl
- Subject digest:
eaf5fff7e3995a89767d6dd252985a9e0d3bce1902f71a71ac594767fc37abf8
- Sigstore transparency entry: 147311912
- Sigstore integration time:
- Predicate type: