界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

astropy-astronomy

astropy-astronomy

【效率与协作】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.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: astropy-astronomy 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." metadata: { "openclaw": { "emoji": "\uD83D\uDD2D", "requires": { "bins": ["python3"] }, "install": [{ "id": "uv-astropy", "kind": "uv", "package": "astropy" }] } }

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

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

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

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

from astropy.cosmology import Planck18 as cosmo

z = 1.0
d_L = cosmo.luminosity_distance(z)       # luminosity distance
d_A = cosmo.angular_diameter_distance(z) # angular diameter distance
age = cosmo.age(z)                       # age of universe at z
lookback = cosmo.lookback_time(z)        # lookback time
H_z = cosmo.H(z)                        # Hubble parameter at z

Time Conversions

from astropy.time import Time
import astropy.units as u

t = Time('2026-03-15 12:00:00', scale='utc')
print(t.jd, t.mjd, t.unix)   # JD, MJD, Unix
print(t.tai, t.tdb)           # TAI, TDB scales
now = Time.now()

Quick One-liner

python3 -c "
from astropy.coordinates import SkyCoord; import astropy.units as u
c = SkyCoord(ra=83.633*u.deg, dec=22.014*u.deg)
print(f'Galactic: l={c.galactic.l:.3f}, b={c.galactic.b:.3f}')
"

Best Practices

  1. Always attach units to quantities using astropy.units.
  2. Specify time scale explicitly (utc, tai, tdb).
  3. Use Planck18 as default cosmology unless otherwise specified.
  4. Close FITS files or use context managers to prevent resource leaks.
  5. Use SkyCoord for all coordinate work rather than manual trig.
我的收藏