# Astropy Astronomy

Astronomical computations via Astropy.

- Repository: https://github.com/beita6969/ScienceClaw (1024 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add beita6969/ScienceClaw --skill astropy-astronomy -g -a claude-code -y`
Codex: `npx skills add beita6969/ScienceClaw --skill astropy-astronomy -g -a codex -y`
Cursor: `npx skills add beita6969/ScienceClaw --skill astropy-astronomy -g -a cursor -y`
Gemini CLI: `npx skills add beita6969/ScienceClaw --skill astropy-astronomy -g -a gemini-cli -y`

## Description

Astronomical computations via Astropy. Use when: user asks about celestial coordinates, FITS files, or cosmological calculations. NOT for: telescope control or real-time observation planning.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Astropy Astronomy

Astronomical computations using Astropy.

## When to Use

- Celestial coordinate transforms (ICRS, Galactic, AltAz)
- Unit conversions for astronomical quantities
- Reading, writing, or inspecting FITS files
- Cosmological calculations (distances, ages, lookback times)
- Time system conversions (UTC, TAI, TDB, MJD, JD)

## When NOT to Use

- Telescope control or instrument automation
- Real-time observation planning or scheduling
- Image reduction or photometry pipelines (use photutils)
- N-body simulations

## Coordinate Transforms

```python
from astropy.coordinates import SkyCoord, EarthLocation, AltAz
from astropy.time import Time
import astropy.units as u

coord = SkyCoord(ra=10.684*u.deg, dec=41.269*u.deg, frame='icrs')  # M31
coord_str = SkyCoord('00h42m44.3s', '+41d16m09s', frame='icrs')

# ICRS to Galactic
galactic = coord.galactic
print(f"l={galactic.l:.4f}, b={galactic.b:.4f}")

# Angular separation
c1 = SkyCoord(ra=10.684*u.deg, dec=41.269*u.deg)
c2 = SkyCoord(ra=11.0*u.deg, dec=41.5*u.deg)
sep = c1.separation(c2)

# AltAz (horizontal) coordinates
location = EarthLocation(lat=34.05*u.deg, lon=-118.25*u.deg, height=100*u.m)
time = Time('2026-03-15 03:00:00', scale='utc')
altaz = coord.transform_to(AltAz(obstime=time, location=location))
print(f"Alt={altaz.alt:.2f}, Az={altaz.az:.2f}")
```

## Unit Conversions

```python
import astropy.units as u

d = 10 * u.pc
print(d.to(u.lyr))         # parsecs to light-years
wav = 21 * u.cm
freq = wav.to(u.GHz, equivalencies=u.spectral())
wavelength = (13.6 * u.eV).to(u.nm, equivalencies=u.spectral())
```

## FITS File Handling

```python
from astropy.io import fits

with fits.open('image.fits') as hdul:
    hdul.info()
    header = hdul[0].header
    data = hdul[0].data

hdu = fits.PrimaryHDU(data_array)
hdu.header['OBJECT'] = 'M31'
hdu.writeto('output.fits', overwrite=True)
```

## Cosmological Calculations

```python
from astropy.cosmology import Planck18 as cosmo

The rest: https://github.com/beita6969/ScienceClaw/blob/HEAD/skills/astropy-astronomy/SKILL.md
