Astropy
Automate and integrate Astropy astronomy tools into your data workflows
Category: productivity Source: K-Dense-AI/claude-scientific-skillsAstropy is a community skill for performing astronomical calculations and data analysis using the Astropy Python library, covering coordinate transformations, unit conversions, FITS file handling, time systems, and observational planning for astronomy research.
What Is This?
Overview
Astropy provides patterns for working with astronomical data and calculations in Python. It covers celestial coordinate systems with transformations between equatorial, galactic, and horizontal frames, unit and quantity handling for type-safe physical calculations, FITS file reading and writing for astronomical image and table data, time system conversions between UTC, TAI, and Julian dates, and observational planning including target visibility and airmass calculations. The skill enables researchers and developers to build reliable astronomy data pipelines and analysis tools.
Who Should Use This
This skill serves astronomers building data reduction pipelines for telescope observations, developers creating observational planning tools for telescope scheduling, and researchers analyzing astronomical catalogs and survey data. It is also useful for educators and students who need a consistent, well-documented framework for introductory and advanced astronomical computing tasks.
Why Use It?
Problems It Solves
Coordinate transformations between reference frames require complex spherical trigonometry that is error-prone to implement manually. Physical calculations without unit tracking lead to dimensional errors that produce incorrect results. FITS file handling requires specialized parsers that understand the astronomy-specific header and data conventions. Time system conversions between astronomical standards involve leap second tables and relativistic corrections.
Core Highlights
SkyCoord provides coordinate objects with built-in transformations between all standard astronomical reference frames. The units system enables arithmetic with physical quantities that automatically tracks and converts units. FITS I/O reads and writes astronomical images, tables, and headers in the standard file format. Time objects handle conversions between dozens of time scales used in astronomy, including barycentric dynamical time for precise timing applications.
How to Use It?
Basic Usage
from astropy.coordinates import SkyCoord
from astropy import units as u
from astropy.time import Time
target = SkyCoord(
ra=10.684 * u.deg,
dec=41.269 * u.deg,
frame="icrs")
galactic = target.galactic
print(f"Galactic l={galactic.l:.3f}, "
f"b={galactic.b:.3f}")
distance = 780 * u.kpc
luminosity = 2.6e10 * u.Lsun
flux = luminosity / (4 * 3.14159 * distance**2)
print(f"Flux: {flux.to(u.W / u.m**2):.3e}")
obs_time = Time("2025-06-15T03:30:00", scale="utc")
print(f"MJD: {obs_time.mjd:.5f}")
print(f"JD: {obs_time.jd:.5f}")
print(f"Unix: {obs_time.unix:.1f}")
Real-World Examples
from astropy.io import fits
from astropy.table import Table
import numpy as np
def read_fits_image(path: str) -> dict:
with fits.open(path) as hdul:
header = dict(hdul[0].header)
data = hdul[0].data
return {"shape": data.shape if data is not None
else None,
"n_extensions": len(hdul),
"object": header.get("OBJECT", ""),
"telescope": header.get("TELESCOP", "")}
def create_catalog(output_path: str,
n_sources: int = 100):
catalog = Table()
catalog["ra"] = np.random.uniform(
0, 360, n_sources)
catalog["dec"] = np.random.uniform(
-90, 90, n_sources)
catalog["mag"] = np.random.uniform(
15, 22, n_sources)
catalog["flux"] = 10 ** (
-0.4 * (catalog["mag"] - 25))
catalog.write(output_path,
format="fits", overwrite=True)
return {"sources": n_sources,
"path": output_path}
Advanced Tips
Use SkyCoord arrays for vectorized coordinate transformations on large catalogs rather than looping over individual objects. Attach units to all physical quantities at the point of creation to catch dimensional errors early in the calculation chain. Read FITS files in memory-mapped mode for large images to avoid loading the entire dataset. When cross-matching catalogs, use the SkyCoord.match_to_catalog_sky method with an appropriate separation threshold rather than implementing a manual nearest-neighbor search.
When to Use It?
Use Cases
Build a target visibility calculator that determines when astronomical objects are observable from a given location. Create a catalog cross-matching tool that identifies sources in common between two survey datasets. Implement a FITS file processing pipeline that extracts photometry from telescope images.
Related Topics
Astronomical coordinate systems, FITS file format, physical unit systems, observational astronomy, and astronomical data analysis.
Important Notes
Requirements
Python with the astropy package installed. NumPy for array operations used in astronomical calculations. FITS data files for testing I/O operations.
Usage Recommendations
Do: always attach units to physical quantities using the astropy.units module. Use SkyCoord for all coordinate work rather than manual trigonometry. Specify the time scale explicitly when creating Time objects.
Don't: perform arithmetic on quantities without units, which bypasses dimensional safety checks. Assume default coordinate frames when the data source specifies a different reference. Ignore FITS header keywords that describe the coordinate system and data calibration.
Limitations
Complex astrometric corrections like proper motion and parallax require additional data beyond basic coordinates. Large FITS files with many extensions may be slow to open without specifying the target extension. Some specialized astronomical calculations need additional packages beyond the core astropy library, such as astroquery for remote catalog access or specutils for spectral analysis.