CLI Reference
The pyKOSMOS++ command-line interface provides a complete spectroscopic reduction workflow through the kosmos-reduce command and its subcommands.
Main Command
kosmos-reduce
Process KOSMOS longslit spectroscopy observations from raw FITS files to wavelength-calibrated 1D spectra.
Synopsis:
kosmos-reduce [OPTIONS] --input-dir INPUT --output-dir OUTPUT
Required Arguments:
--input-dir PATHInput directory containing FITS files organized in subdirectories:
biases/: Bias frames (≥3 required)flats/: Flat field frames (≥3 required)arcs/: Arc lamp frames (≥1 required)science/: Science target frames
--output-dir PATHOutput directory for reduced data products. Will be created if it doesn’t exist.
Optional Arguments:
--config PATHPath to custom YAML configuration file. If not provided, uses default KOSMOS parameters.
--mode {batch,interactive}Processing mode:
batch: Automatic processing of all detected traces (default)interactive: Visual trace selection with matplotlib GUI
--max-traces NMaximum number of traces to extract per science frame (default: 5)
--verboseEnable verbose logging output
--quietSuppress non-essential output
--log-file PATHWrite detailed logs to specified file
--validate-onlyValidate calibrations and inputs without processing science frames
--overwriteOverwrite existing output files without prompting
Examples:
Basic reduction with default settings:
kosmos-reduce --input-dir data/2024-01-15 --output-dir reduced/
Custom configuration with verbose output:
kosmos-reduce --input-dir data/faint_galaxy \\
--output-dir reduced/ \\
--config custom_config.yaml \\
--verbose
Interactive trace selection:
kosmos-reduce --input-dir data/multi_slit \\
--output-dir reduced/ \\
--mode interactive
Validation only (check calibrations):
kosmos-reduce --input-dir data/ --output-dir tmp/ --validate-only
Subcommands
calibrate
Generate master bias and flat calibration frames only, without processing science data.
Synopsis:
kosmos-reduce calibrate [OPTIONS] --input-dir INPUT --output-dir OUTPUT
Arguments:
--input-dir PATHDirectory containing
biases/andflats/subdirectories--output-dir PATHDirectory for calibration outputs (
calibrations/subdirectory created)--method {median,mean}Combination method (default: median)
Example:
kosmos-reduce calibrate --input-dir data/ --output-dir calibrations/
wavelength
Perform wavelength calibration on arc lamp frames independently.
Synopsis:
kosmos-reduce wavelength [OPTIONS] --input-arc ARC --lamp-type LAMP
Required Arguments:
--input-arc PATHPath to arc lamp FITS file
--lamp-type {HeNeAr,Ar,Kr,Ne}Arc lamp type for linelist selection
Optional Arguments:
--output PATHOutput FITS table for wavelength solution (default: wavelength_solution.fits)
--poly-order NPolynomial order (3-7, default: auto-select with BIC)
--rms-threshold FLOATMaximum acceptable RMS residual in Angstroms (default: 0.1)
--min-lines NMinimum number of identified lines required (default: 20)
--plotGenerate diagnostic plot (wavelength_fit.pdf)
Example:
kosmos-reduce wavelength --input-arc arc_001.fits \\
--lamp-type HeNeAr \\
--poly-order 5 \\
--plot
combine
Combine multiple reduced 1D spectra onto a common wavelength grid.
Synopsis:
kosmos-reduce combine [OPTIONS] --input-spectra PATTERN --output OUTPUT
Required Arguments:
--input-spectra PATTERNGlob pattern for input spectrum FITS files (e.g.,
"spectra_1d/*.fits")--output PATHOutput combined spectrum FITS file
Optional Arguments:
--method {median,mean,weighted}Combination method:
median: Robust to outliersmean: Simple averageweighted: Weighted by inverse variance
--wavelength-grid START STOP STEPCommon wavelength grid in Angstroms (default: auto-determine from inputs)
--resolution FLOATTarget spectral resolution in Angstroms (default: preserve native)
Example:
kosmos-reduce combine --input-spectra "reduced/spectra_1d/*.fits" \\
--output combined_spectrum.fits \\
--method weighted
Exit Codes
The pipeline uses standard exit codes to indicate processing status:
Code |
Meaning |
|---|---|
0 |
Success - all processing completed without errors |
1 |
Missing or insufficient calibration frames |
2 |
Invalid FITS files or configuration |
3 |
Wavelength solution failed to converge |
4 |
No traces detected in science frames |
5 |
User canceled interactive mode |
Example usage in scripts:
#!/bin/bash
kosmos-reduce --input-dir data/ --output-dir reduced/
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "Reduction successful!"
elif [ $EXIT_CODE -eq 1 ]; then
echo "Error: Missing calibration frames"
exit 1
else
echo "Pipeline error (code $EXIT_CODE)"
exit 1
fi
Output Products
The pipeline creates a standardized output directory structure:
output_dir/
├── calibrations/
│ ├── master_bias.fits
│ ├── master_flat.fits
│ └── bad_pixel_mask.fits
├── reduced_2d/
│ ├── science_001_2d.fits
│ └── science_002_2d.fits
├── spectra_1d/
│ ├── science_001_trace1.fits
│ ├── science_001_trace2.fits
│ └── science_002_trace1.fits
├── wavelength_solutions/
│ └── wavelength_solution_arc001.fits
├── quality_reports/
│ ├── science_001_quality.yaml
│ └── summary_report.txt
├── diagnostic_plots/
│ ├── wavelength_solution.png
│ ├── science_001_2d.png
│ └── science_001_trace1_profile.png
└── logs/
└── reduction_log.txt
See Output Products for detailed format specifications.
Configuration Files
Custom configuration files use YAML format with nested sections:
# Detector parameters
detector:
gain: 1.4 # e-/ADU
readnoise: 3.7 # e-
saturate: 58982 # ADU
# Wavelength calibration
wavelength:
max_order: 7
initial_dispersion: 1.0
rms_threshold: 0.1
# Trace detection
trace_detection:
expected_fwhm: 4.0
min_snr: 3.0
min_separation: 20
# Extraction
extraction:
method: optimal # or 'boxcar'
aperture_width: 10
sky_buffer: 30
# Quality thresholds
quality:
min_snr: 5.0
max_wavelength_rms: 0.2
See Configuration Reference for complete parameter documentation.
Performance Tips
Speed up calibration creation:
Use
--method meaninstead of median for faster (but less robust) combinationProcess only necessary calibration frames:
# Only combine first 5 bias/flat frames ls biases/*.fits | head -5 | xargs -I {} cp {} subset_biases/
Parallel processing:
Process multiple nights independently in separate terminals
Use
--max-tracesto limit extraction overhead for multi-slit observations
Memory optimization:
Process large datasets in batches rather than all at once
Use
--quietmode to reduce I/O overhead from logging
Disk space:
Diagnostic plots can be large; use
--no-plots(if implemented) for production runsRemove intermediate
reduced_2d/files after successful 1D extraction
Troubleshooting
“No FITS files found”
Check directory structure matches expected layout
Ensure files have
.fitsextension (not.fitor.FITS)Verify FITS headers contain
IMAGETYPkeyword
“Insufficient calibration frames”
Need ≥3 bias, ≥3 flat, ≥1 arc minimum
Check subdirectory names match exactly:
biases/,flats/,arcs/
“Wavelength solution failed”
Arc lamp exposure may be too short (need SNR >10 for line detection)
Try
--lamp-typematching actual lamp usedUse
wavelengthsubcommand with--plotto diagnose
“No traces detected”
Lower
min_snrin config for faint sourcesUse
--mode interactiveto visually verify 2D spectrumCheck flat field quality (illumination pattern)
For more issues, see Troubleshooting.
See Also
Python API - Programmatic access
Configuration Reference - Configuration file reference
Output Products - Output format specifications
quickstart - Quick start guide