Claude-skill-registry astropy-fundamentals
Work with astronomical data using Astropy for FITS file I/O, coordinate transformations, physical units, precise time handling, and catalog operations. Use when processing telescope images, matching celestial catalogs, handling time-series observations, or building photometry/spectroscopy pipelines. Ideal for astronomy research requiring proper unit handling, coordinate frame transformations, and astronomical time scales.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/astropy-fundamentals" ~/.claude/skills/majiayu000-claude-skill-registry-astropy-fundamentals && rm -rf "$T"
skills/data/astropy-fundamentals/SKILL.mdAstropy Fundamentals
Master Astropy, the foundational Python library for astronomy and astrophysics. Learn to work with astronomical data formats, coordinate systems, physical units, precise time calculations, and scientific tables - the essential toolkit for modern astronomical computing.
Official Documentation: https://docs.astropy.org/en/stable/
GitHub: https://github.com/astropy/astropy
Quick Reference Card
Installation & Setup
# Using pixi (recommended for scientific projects) pixi add astropy photutils specutils # Using pip pip install astropy[all] # Optional affiliated packages pixi add photutils specutils astroquery reproject
Essential Operations
import astropy.units as u from astropy.io import fits from astropy.coordinates import SkyCoord from astropy.time import Time from astropy.table import Table, QTable from astropy.wcs import WCS # Units and Quantities distance = 10 * u.parsec wavelength = 5000 * u.angstrom freq = wavelength.to(u.Hz, equivalencies=u.spectral()) # FITS I/O with fits.open('image.fits') as hdul: data = hdul[0].data header = hdul[0].header # Coordinates coord = SkyCoord(ra=10.625*u.degree, dec=41.2*u.degree, frame='icrs') galactic = coord.galactic separation = coord.separation(other_coord) # Time t = Time('2024-01-01T00:00:00', format='isot', scale='utc') jd = t.jd future = t + 1*u.day # Tables tbl = Table([ra_col, dec_col, flux_col], names=['ra', 'dec', 'flux']) filtered = tbl[tbl['flux'] > 100] # WCS wcs = WCS(header) ra, dec = wcs.pixel_to_world(x_pix, y_pix)
Quick Decision Tree
Working with astronomical data? ├─ FITS files → astropy.io.fits ├─ Celestial coordinates → astropy.coordinates (SkyCoord) ├─ Physical quantities → astropy.units ├─ Astronomical time → astropy.time ├─ Catalogs/tables → astropy.table ├─ Image coordinates → astropy.wcs ├─ Photometry → photutils └─ Spectroscopy → specutils Need coordinate transformation? ├─ Simple conversions → SkyCoord.transform_to() ├─ Sky separations → SkyCoord.separation() ├─ Matching catalogs → match_to_catalog_sky() └─ Custom frames → Define new frame class Working with units? ├─ Standard units → multiply by u.unit ├─ Unit conversions → quantity.to() ├─ Wavelength/frequency → Use u.spectral() equivalency └─ Dimensionless → quantity.decompose() Need precise time? ├─ Single instant → Time() ├─ Arrays of times → Time(array) ├─ Time scales → specify scale='utc', 'tai', etc. └─ Time formats → specify format='jd', 'isot', etc.
When to Use This Skill
Use Astropy fundamentals when working with:
- FITS files from telescopes, surveys, or simulations
- Celestial coordinates requiring precise transformations between reference frames
- Physical quantities with units (distances, velocities, energies, magnitudes)
- Astronomical time needing sub-nanosecond precision or specific time scales
- Catalogs and tables from surveys, observations, or simulations
- Image astrometry relating pixel positions to sky coordinates
- Photometric analysis of point sources or aperture measurements
- Spectroscopic data requiring wavelength calibration or line analysis
- Multi-wavelength astronomy combining data across electromagnetic spectrum
- Observational planning calculating rise/set times, airmass, visibility
Core Concepts
1. Units and Quantities
Physical quantities with dimensional correctness. Attach units to values and convert automatically.
Key operations:
- Create:
distance = 10 * u.parsec - Convert:
distance.to(u.lightyear) - Equivalencies:
wavelength.to(u.Hz, equivalencies=u.spectral()) - Arithmetic: Units propagate automatically
See references/PATTERNS.md for custom units, logarithmic units, and advanced equivalencies.
2. FITS I/O
Standard format for astronomical data. Read/write images and tables with headers.
Key operations:
- Open:
with context managerfits.open('file.fits') - Access:
,hdul[0].datahdul[0].header - Headers: Dictionary-like access, add comments
- Memory mapping:
for large filesfits.open('file.fits', memmap=True)
See references/PATTERNS.md for multi-extension FITS, header inheritance, and large file handling.
3. Coordinates
Celestial positions with automatic frame transformations.
Key operations:
- Create:
SkyCoord(ra=10*u.deg, dec=20*u.deg, frame='icrs') - Transform:
,coord.galacticcoord.transform_to('fk5') - Separations:
coord1.separation(coord2) - Matching:
coord.match_to_catalog_sky(catalog)
See references/PATTERNS.md for custom frames, catalog cross-matching, and observer-dependent coordinates.
4. Time
Sub-nanosecond precision with multiple time scales and formats.
Key operations:
- Create:
Time('2024-01-01', scale='utc') - Formats:
,.jd
,.mjd
,.iso.datetime - Scales:
,.utc
,.tai
,.tt.tdb - Arithmetic:
t + 1*u.day
See references/PATTERNS.md for high-precision calculations, time series, and barycentric corrections.
5. Tables
Flexible tabular data with units and metadata.
Key operations:
- Create:
Table([col1, col2], names=['a', 'b']) - QTable: Preserves Quantity units
- Filter:
tbl[tbl['mag'] < 15] - Join:
join(tbl1, tbl2, keys='id') - I/O:
,.read()
for FITS, CSV, HDF5.write()
See references/PATTERNS.md for masked tables, joins, metadata, and indexing.
6. WCS (World Coordinate System)
Maps pixel coordinates to sky coordinates.
Key operations:
- Load:
WCS(header) - Pixel→Sky:
returns SkyCoordwcs.pixel_to_world(x, y) - Sky→Pixel:
wcs.world_to_pixel(coord) - Legacy:
for arrayswcs.all_pix2world(x, y, 0)
See references/PATTERNS.md for creating WCS, SIP distortions, and cutouts.
7. Photometry (Photutils)
Source detection and aperture photometry.
Key operations:
- Detect:
DAOStarFinder(fwhm=3.0, threshold=5*std) - Aperture:
CircularAperture(positions, r=5.0) - Measure:
aperture_photometry(image, apertures) - Background: Use
for local backgroundCircularAnnulus
See references/PATTERNS.md for PSF photometry and grouped sources.
8. Spectroscopy (Specutils)
1D spectroscopy with wavelength calibration and line analysis.
Key operations:
- Create:
Spectrum1D(spectral_axis=wavelength, flux=flux) - Read:
Spectrum1D.read('spec.fits') - Convert:
.with_spectral_axis_unit(u.Hz) - Lines:
line_flux(spectrum, region)
See references/PATTERNS.md for line fitting, continuum normalization, and redshift measurement.
Patterns
See references/PATTERNS.md for detailed patterns including:
FITS Manipulation:
- Multi-extension FITS handling
- Header inheritance and propagation
- Large file processing with memory mapping
- Updating headers without loading data
Units and Quantities:
- Custom unit definitions
- Logarithmic units (magnitudes, decibels)
- Spectral equivalencies (wavelength/frequency/energy)
- Structured arrays with units
Coordinates:
- Custom coordinate frames
- Efficient catalog cross-matching
- Observer-dependent coordinates (AltAz)
- Proper motion and radial velocity
Time:
- High-precision time arithmetic
- Time series analysis and folding
- Time zone handling
- Barycentric corrections
Tables:
- Masked tables for missing data
- Multi-key joins
- Table metadata and descriptions
- Fast indexing for large tables
WCS:
- Creating WCS from astrometry solutions
- SIP distortion polynomials
- Cutouts with WCS preservation
Photometry:
- PSF photometry
- Grouped source photometry
- Background subtraction strategies
Spectroscopy:
- Spectral line fitting
- Continuum normalization
- Redshift measurement via cross-correlation
Real-World Examples
See references/EXAMPLES.md for complete workflows:
-
Telescope Image Processing Pipeline: FITS loading → background subtraction → source detection → aperture photometry → catalog creation with WCS
-
Catalog Cross-Matching: Multi-catalog matching with coordinate transformations, quality filtering, and color calculations
-
Light Curve Analysis: Time series handling, period search with Lomb-Scargle, phase folding, and binning
-
Multi-Wavelength SED Construction: Combining multi-band photometry with proper unit handling and flux conversions
-
Spectroscopic Redshift Measurement: Emission line identification, template cross-correlation, and redshift refinement
-
Observability Calculation: Target visibility from specific location, airmass calculation, sun/moon constraints
Common Issues and Solutions
See references/COMMON_ISSUES.md for troubleshooting:
FITS I/O Issues:
- VerifyError with non-standard FITS
- Memory errors with large files
- Compressed FITS handling
Unit Problems:
- UnitConversionError between incompatible units
- Losing units after NumPy operations
- Logarithmic unit confusion
Coordinate Issues:
- Frame attribute mismatches
- AltAz requiring location and time
- Slow coordinate transformations
Time Issues:
- Time scale confusion (UTC vs TAI vs TDB)
- ISO format parsing ambiguity
- Precision loss in calculations
Table Issues:
- Column type mismatches
- Units lost when writing to CSV
- Joining tables with different column names
WCS Problems:
- WCS transformations giving NaN
- Pixel origin convention confusion (origin=0 vs origin=1)
- SIP distortion handling
Performance:
- Out of memory with large FITS files
- Slow operations on large catalogs
- Vectorization strategies
Best Practices Checklist
Units and Quantities
- Always attach units to physical quantities
- Use
for explicit conversions.to() - Leverage equivalencies for wavelength/frequency/energy
- Decompose complex units to verify correctness
FITS Files
- Use context managers (
) for safe file handlingwith fits.open() - Include descriptive header keywords with comments
- Use
for files larger than RAMmemmap=True - Validate headers before writing
Coordinates
- Use SkyCoord for all coordinate operations
- Specify frames explicitly
- Use catalog matching instead of manual loops
- Cache transformations for repeated use
Time
- Specify both format and scale when creating Time objects
- Use appropriate time scale for your science (UTC for observations, TDB for dynamics)
- Work in arrays for efficiency
- Document time system in metadata
Tables
- Use QTable to preserve units
- Add metadata (descriptions, units) to columns
- Index tables for fast lookups
- Use masked columns for missing data
Performance
- Work with arrays instead of loops
- Use lazy loading for large FITS files
- Cache expensive computations
- Profile before optimizing
Resources and References
Official Documentation
- Astropy Documentation: https://docs.astropy.org/en/stable/
- Astropy Tutorials: https://learn.astropy.org/
- Photutils: https://photutils.readthedocs.io/
- Specutils: https://specutils.readthedocs.io/
Core Modules
- astropy.io.fits: https://docs.astropy.org/en/stable/io/fits/
- astropy.units: https://docs.astropy.org/en/stable/units/
- astropy.coordinates: https://docs.astropy.org/en/stable/coordinates/
- astropy.time: https://docs.astropy.org/en/stable/time/
- astropy.table: https://docs.astropy.org/en/stable/table/
- astropy.wcs: https://docs.astropy.org/en/stable/wcs/
Community
- Astropy Discourse: https://community.openastronomy.org/c/astropy
- GitHub Issues: https://github.com/astropy/astropy/issues
- Stack Overflow: Tag
astropy
Summary
Astropy is the foundational library for astronomical computing in Python, providing essential tools for FITS files, coordinates, units, time, tables, and more.
Key takeaways:
- Units: Always attach physical units to prevent dimensional errors
- FITS I/O: Standard format for astronomical images and tables
- Coordinates: SkyCoord simplifies transformations between reference frames
- Time: Sub-nanosecond precision with multiple scales and formats
- Tables: Flexible tabular data with unit and metadata support
- WCS: Maps pixel coordinates to sky positions
- Photutils: Source detection and aperture photometry
- Specutils: 1D spectroscopy with wavelength calibration
Progressive Learning Path:
- Start with FITS I/O and tables for basic data handling
- Learn units and quantities for physical calculations
- Master coordinates for astrometry and sky matching
- Explore time handling for time-series analysis
- Use WCS for image astrometry
- Apply photutils for source extraction
- Add specutils for spectroscopic analysis
For detailed patterns, complete examples, and troubleshooting, see the reference files in the
references/ directory.