JuliaAstro / JuliaAstro/SpectrumBase.jl

Roadmap

Open
#3 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

planning
Dominant language
Julia
Stars
5
Forks
9
PR merge metrics
No merged PRs in 30d

Description

Below is a broad-strokes road map of the design of Spectra.jl

Types

General spectrum types

  • AbstractSpectrum
  • Spectrum <: AbstractSpectrum
    This would be a type very similar to python's SpecUtils.spectrum1d. It contains a spectral axis (wavelength) and flux. This flux could be signified with a standard array or a Measurements.jl array signifying measurement uncertainty. Note that this is a design choice over having an explicit sigma array within the Spectrum type.
  • CountSpectrum <: Spectrum
    Similar to the above but carries an extra array around with the counts such that proper addition between spectra could happen.
  • EchelleSpectrum <: AbstractSpectrum
    Not sure the best way to implement this. It seems like a natural extension of Spectrum but into two dimensions. Is it appropriate to keep this a separate type, or should Spectrum have an intrinsic dimension and an echelle spectrum would just be a Spectrum{..., 2}

These types should be easy to create and have decent interoperability with FITSIO.jl and WCS.jl.

Operations

I would definitely enjoy some input on these, I have limited experience

  • Extinction
    Use DustExtinction.jl
  • Broadening
    • Instrumental
    • Rotational
      In general, I'm not certain whether it's appropriate to put these explicitly here or put the underlying broadening mechanics in AstroBase and provide the explicit instrumental or rotational broadening ops here (cc @giordano).
  • Doppler Shift
  • Resampling
    Currently using Interpolations.jl but running into some problems. May switch to Diereckx.jl. It will be nice to have a function that can resample to a minimum doppler content. The way I've implemented this before is to determine the minimal $\Delta \nu$ and create a subsequent log-lambda spaced grid.
  • Rescale
    A few ideas- rescale to a given integrated flux (as a value) or to another spectrum. Can optionally use a bandpass to only scale in a certain area (see photometry below)
  • Photometry
    This would be similar to what PySynphot offers, where a user specifies a bandpass (either a standard like V or HST-OIII, or a Distributions-like object with a pdf) and we can get the respective integrated flux density.

Spectral Library Interface

I'm not certain if this is appropriate here or in a separate package, but it would be nice to have standardized interfaces to common model libraries (like PHOENIX). My gut says this should be a different package, but I'm not convinced yet. For an example of such an interface take a look at the work I've done here.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

This issue is a broad roadmap rather than a single implementation task. Start by selecting one unchecked area, such as a spectrum type or operation, then review the relevant package mentioned in the roadmap, including FITSIO.jl, WCS.jl, DustExtinction.jl, or Interpolations.jl. The design and completion criteria need to be agreed before implementation can begin.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.