Skip to main content

A public and community-maintained catalog of known strong gravitational lenses

Project description

$\texttt{lenscat}$

license GitHub release Upload Python Package Create Release and Tag

A public and community-contributed catalog of known strong gravitational lenses.

Known 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 image

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:

See also

Master Lens Database

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lenscat-1.1.0.tar.gz (104.2 kB view details)

Uploaded Source

Built Distribution

lenscat-1.1.0-py3-none-any.whl (101.0 kB view details)

Uploaded Python 3

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

Hashes for lenscat-1.1.0.tar.gz
Algorithm Hash digest
SHA256 9f46fa292dd7eb6bcfdd108a4c6d7c81e55e9ad643b2030d996c8dda215d1b02
MD5 5c9a4435df9535438703f98afc06aec1
BLAKE2b-256 ce445be6e17fdbf6994932f30daaa3d388d5e6338522ba99685f82f3c017c087

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenscat-1.1.0.tar.gz:

Publisher: python-publish.yml on lenscat/lenscat

Attestations:

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

Hashes for lenscat-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eaf5fff7e3995a89767d6dd252985a9e0d3bce1902f71a71ac594767fc37abf8
MD5 48013e748be7e65a301e8065bf85d6a9
BLAKE2b-256 505853dbee1b535f0c09ca6b4a68ff6cb0cdc5f8ab12dd2cf8bd8b28c172dc48

See more details on using hashes here.

Provenance

The following attestation bundles were made for lenscat-1.1.0-py3-none-any.whl:

Publisher: python-publish.yml on lenscat/lenscat

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page