# Ecosystem

The joy of our community is the many astronomy and astrophysics packages available for wide use. Packages are separated by functionality and Julia's declarative package manager takes care of resolving dependencies. You get just the functionality you need, and smaller packages lead to more rapid development.

## Data I/O

### AstroImages.jl

**Load, manipulate, and visualize astronomical images**

- Works with the FileIO.jl interface

### FITSIO.jl

**Reading and writing FITS files**

- Interact with header data units (HDUs), FITS headers, and FITS data: both images and tables
- FITS tables follow the Tables.jl interface, allowing seamless integration with the rich data ecosystem, like CSV.jl, DataFrames.jl, etc.

### CFITSIO.jl

**Reading and writing FITS files**

- Low-level wrapper for cfitsio
- The c interface can be directly accessed with the CFITSIO_jll package

### mweastwood/CasaCore.jl

**Tables and measurement sets for radio astronomy**

- Wrapper for CasaCore
- Interface for CASA tables and measures

### emmt/OIFITS.jl

**Support for OI-FITS**

- Read and write OI-FITS optical interferometry data format

### aplavin/VLBIData.jl

**Work with data formats common in very long baseline interferometry (VLBI)**

- Read interferometric visibilities (
`uvfits`

), images (`fits`

), and source models - Minimal writing support for source models

### aplavin/Difmap.jl

**Wrapper for the Difmap program used in synthesis imaging**

- Execute Difmap scripts, handle inputs/outputs and logs
- Display images and plots from Difmap in interactive Julia environments

## Visualization and Plotting

### AstroImages.jl

**Load, manipulate, and visualize astronomical images**

- Works with the FileIO.jl interface
- Automatic visualizations are directly integrated into many environments like VSCode, Pluto.jl, and IJulia.jl
- Includes recipes for plotting with Plots.jl

### SAOImageDS9.jl

**Interface with the DS9 image viewer**

- Uses XPA.jl to communicate with DS9 instances
- Easily display images in DS9 and add features like circles and lines
- Low-level API accessible with
`set`

and`get`

## Image Processing

### CCDReduction.jl

**Common CCD image processing routines**

- Creation of calibration files
- Dark subtraction, flat normalization, bias subtraction, cropping
- Specialized iterator for processing directories of FITS files using a table built from the FITS headers.

### LACosmic.jl

**Cosmic-ray rejection by Laplacian edge detection**

- Implementation of the L.A.Cosmic algorithm (van Dokkum, 2001)
- Returns bad pixel masks and cleaned data

### Photometry.jl

**Aperture photometry**

- Background estimation and source extraction
- Fast and precise aperture photometry

### PSFModels.jl

**Analytical, allocation-free point-spread-functions (PSF)**

- Lazy representation allows fast allocation-free calculations
- Gaussian (Normal), Moffat, and Airy disk.

### Reproject.jl

**Astronomical image reprojection**

### JuliaHCI/HCIToolbox.jl

**Common utilities for high-contrast imaging (HCI) processing**

- Morphological operations (rotation, stacking, shifting)
- Masking routines (circles, annulus, series of annuli)
- Spectral scaling and descaling

### JuliaHCI/SubpixelRegistration.jl

**Sub-pixel registration using discrete Fourier transforms**

- Uses FFTs to register images, with arbitrary precision
- Includes methods for Fourier based image-translation (phase-shifting)

### JuliaHCI/ADI.jl

**Angular Differential Imaging (ADI) routines in Julia**

- PCA, NMF, LLSG, LOCI, etc.
- Apply algorithms framewise or in spectral differential imaging (SDI) using Julia's multiple dispatch
- Provide an interface for using these algorithms in other tools
- Common HCI metrics including S/N maps, contrast curves, throughput curves (from PSF injection), STIM, etc.

## Statistics

### mileslucas/BiweightStats.jl

**Robust statistics based on the biweight transform**

- Implements the location, scale, midvariance, midcovariance, and midcorrelation statistics

### JuliaHCI/ADI.jl

**Angular Differential Imaging (ADI) routines in Julia**

- PCA, NMF, LLSG, LOCI, etc.
- Apply algorithms framewise or in spectral differential imaging (SDI) using Julia's multiple dispatch
- Provide an interface for using these algorithms in other tools
- Common HCI metrics including S/N maps, contrast curves, throughput curves (from PSF injection), STIM, etc.

## Time, Coordinates, Units

### AstroAngles.jl

**String parsing and representation of angles**

- Parse and represent sexagesimal angles with a variety of delimiters
- Methods for converting to hour-minute-second angles from degrees and radians, and vice-versa

### AstroTime.jl

**Astronomical time keeping**

- High-precision, time-scale aware, DateTime-like data type
- Support all commonly used astronomical time scales

### ERFA.jl

**Time systems conversions**

- Low-level wrapper for liberfa

### SkyCoords.jl

**Astronomical coordinate systems**

- Supports ICRS, galactic, and FK5 coordinate systems
- Fast conversion of coordinates between different systems

### UnitfulAstro.jl

**Astronomical units**

- Extension of Unitful.jl

### WCS.jl

**World Coordinate System transformations**

- Wrapper for wcslib

## Orbits and Ephemerides

### Transits.jl

**Flexible photometric transit curves with limb darkening**

- Inspired by exoplanet
- Includes Keplerian orbits and generic orbits
- Fully compatible with Unitful.jl

### sefffal/PlanetOrbits.jl

**Tools for displaying and solving Keplerian orbits in the context of direct imaging**

### EarthOrientation.jl

**Earth orientation parameters**

- Calculate Earth orientation parameters from IERS tables

### JPLEphemeris.jl

**JPL Development Ephemerides**

- Calculate positions and velocities of solar system bodies

### AstroLib.jl

**Collection of generic astronomical and astrophysical functions**

- Translation of many IDL AstroLib procedures

## General

### AstroLib.jl

**Collection of generic astronomical and astrophysical functions**

- Translation of many IDL AstroLib procedures

### BoxLeastSquares.jl

**Compute box-least-squares periodogram**

- Fit BLS periodograms to time-series data
- Extract best-fitting transit parameters from the BLS periodogram
- Fully compatible with Unitful.jl

### Cosmology.jl

**Distances in the universe**

- $\Lambda$-CDM and $w_0$-$w_a$ cosmologies
- Open, closed, and flat variants
- Fully compatible with Unitful.jl

### DustExtinction.jl

**Dust extinction laws and maps**

- Various empirical extinction models
- SFD (1998) galactic dust map
- Fully compatible with Unitful.jl

### LombScargle.jl

**Compute Lomb-Scargle periodogram**

- Create periodograms from unevenly sampled periodic signals
- Supports multi-threading

### manuelbehrendt/Mera.jl

**Working with large hydrodynamical simulation data**

- Loading, writing, analysing 3D AMR/uniform-grid and N-body data sets
- Memory lightweight data processing within a database framework
- Many predefined functions and examples

### Photometry.jl

**Aperture photometry**

- Background estimation and source extraction
- Fast and precise aperture photometry

### Transits.jl

**Flexible photometric transit curves with limb darkening**

- Inspired by exoplanet
- Includes Keplerian orbits and generic orbits
- Fast polynomial limb-darkening laws based on Agol, Luger, Foreman-Mackey (2020)
- Composable limb-darkening extensions for integrated light curves and secondary light curves.
- Fully compatible with Unitful.jl