Development
Architecture
src/
├── Lazy.jl # Main module definition and version checking
├── cli.jl # Command-line interface and user interaction
├── fitting.jl # Core photometric redshift fitting algorithms
├── io.jl # I/O operations, caching, and data management
├── utils.jl # Utilities (progress bars, memory estimation, formatting)
├── template_grid.jl # Template grid construction and IGM/CGM modeling
├── writedata.py # Python interface for FITS I/O (via PyCall)
├── example_params.toml # Example parameter file (used by `lazy params`)
├── templates/ # SED template library
│ └── template_directory.toml
├── filter_files/ # Filter transmission curves
│ └── filter_directory.toml
└── igm_data/ # IGM attenuation model data (Inoue+2014)Data Flow
Input: FITS catalog + TOML parameter file
Template grid construction (
template_grid.jl): Interpolate templates onto the redshift grid, apply IGM/CGM attenuation, integrate through filter bandpassesFitting (
fitting.jl): For each object, solve non-negative least squares at every redshift to find the best-fit template combinationOutput (
io.jl): Write results to FITS or HDF5
Key Algorithms
Non-negative least squares (
NonNegLeastSquares.jl): Ensures template coefficients are non-negative (physically motivated – you can't have negative flux contributions)IGM attenuation: Inoue et al. (2014) model with Lyman-series and continuum absorption
CGM damping wing: Asada et al. (2024) Lyman-alpha damping wing model
P(z) computation: exp(-0.5 * chi2) normalized over the redshift grid
Contributing
Contributions are welcome, especially new filter transmission curves and template sets! If you've added filters for an instrument or survey not yet included, or have a useful template set, please submit a PR to make them available to the community.
Fork the repository
Create a feature branch:
git checkout -b feature-nameTest your changes:
julia --project=. -e "using Pkg; Pkg.test()"Submit a pull request
Running Tests
julia --project=. -e "using Pkg; Pkg.test()"The test suite covers CLI parsing, template/filter directory integrity, CGM model physics, and spectroscopic redshift fixing.
Extending Lazy.jl
Adding Templates
See Templates for the full guide. In brief: add files to src/templates/ and register them in template_directory.toml.
Adding Filters
See Filters for the full guide. In brief: add transmission curves to src/filter_files/ and register them in filter_directory.toml.
Other Extension Points
IGM models: Add attenuation data to
src/igm_data/and implement the loaderTemplate error functions: Add to
src/templates/template_error/Output formats: Extend I/O functions in
src/io.jlFitting algorithms: Modify the core fitting loop in
src/fitting.jl

