Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ build/
simple/version.py
*.zip
*.fits
*sty2054_supplemental_files/
118 changes: 118 additions & 0 deletions scripts/spectra_convert/zhang18/add_header.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import os
import numpy as np
import pandas as pd
from astropy.io import fits
from astropy.time import Time
from datetime import date
import astropy.units as u
from specutils import Spectrum
from astrodb_utils.fits import add_missing_keywords, add_wavelength_keywords, check_header
from astrodb_utils.spectra import check_spectrum_plottable
from astroquery.simbad import Simbad
from pathlib import Path

# Path config
path = "/Users/guanying/SIMPLE db/SIMPLE-db/scripts/spectra_convert/zhang18/processed_spectra"


def get_paper_metadata(filename):
if "-I_SIMPLE.fits" in filename or "-I_SMOOTHED_SIMPLE.fits" in filename:
title = "Primeval very low-mass stars and brown dwarfs - I. Six new L subdwarfs, classification and atmospheric properties"
voref = "10.1093/mnras/stw2438"
elif "-II.fits" in filename or "-II_SMOOTHED_SIMPLE.fits" in filename:
title = "Primeval very low-mass stars and brown dwarfs - II. The most metal-poor substellar object"
voref = "10.1093/mnras/stx350"
elif "-III.fits" in filename or "-III_SMOOTHED_SIMPLE.fits" in filename:
title = "Primeval very low-mass stars and brown dwarfs - III. The halo transitional brown dwarfs"
voref = "10.1093/mnras/sty1352"
elif "IV.fits" in filename or "IV_SMOOTHED_SIMPLE.fits" in filename:
title = "Primeval very low-mass stars and brown dwarfs - IV. New L subdwarfs, Gaia astrometry, population properties, and a blue brown dwarf binary"
voref = "10.1093/mnras/sty2054"
else:
title = "Unknown Paper"
voref = "Unknown DOI"

return title, voref


def add_header(path):
missing_telescop_instrument = []
missing_dateobs = []
file_proceed = 0


fits_files = list(Path(path).glob("*.fits"))

for fits_file in fits_files:
filename = fits_file.name
print(f"\nProcessing {filename}...")
spectrum = Spectrum.read(fits_file)

title, voref = get_paper_metadata(filename)

with fits.open(fits_file, mode="update") as hdul:
header = hdul[0].header

# add SIMPLE FITS headers
header["SIMPLE"] = (True, "Conforms to FITS standard")
header["VOPUB"] = ("SIMPLE Archive", "Publication of the spectrum")

# object name
object_name = " ".join(filename.split("_")[:2])
header["OBJECT"] = (object_name, "Name of the object")

# Query simbad for ra/dec
try:
result = Simbad.query_object(object_name)
if result is not None and len(result) > 0:
header["RA_TARG"] = (result[0]["ra"], "[ra] Pointing position")
header["DEC_TARG"] = (result[0]["dec"], "[dec] Pointing position")
except Exception as e:
print(f" SIMBAD lookup failed: {e}")

# Remove deprecated keyword
if "RADECSYS" in header:
header.remove("RADECSYS", ignore_missing=True)
print(" Removed RADECSYS")

# Check TELESCOP + INSTRUME
if "TELESCOP" not in header or "INSTRUME" not in header:
missing_telescop_instrument.append(filename)

# Paper metadata
header["TITLE"] = (title, "Title of the paper")
header["VOREF"] = (voref, "DOI of the paper")
header["AUTHOR"] = ("Zhang, Z.H. et al.", "Original authors")
header["DATE"] = (date.today().isoformat(), "Header update date")

# Fix flux units
if "BUNIT" not in header:
header["BUNIT"] = "erg / (cm2 s Angstrom)"
elif header["BUNIT"] == "erg/s/cm2/Angstrom":
header["BUNIT"] = "erg / (cm2 s Angstrom)"

# date-obs check
if "DATE-OBS" not in header or header["DATE-OBS"] in ["", "UNKNOWN", None]:
missing_dateobs.append(filename)

add_wavelength_keywords(header, spectrum.spectral_axis)
add_missing_keywords(header)
check_header(hdul[0].header)

hdul.flush()
print(f" Finished {filename}")
file_proceed += 1

# Summary
print(f"\File processed: {file_proceed}/{len(fits_files)}")
if missing_telescop_instrument:
print("\nFiles missing TELESCOP or INSTRUME:")
for f in missing_telescop_instrument:
print(f" - {f}")

if missing_dateobs:
print("\nFiles missing DATE-OBS:")
for f in missing_dateobs:
print(f" - {f}")

add_header(path)
296 changes: 296 additions & 0 deletions scripts/spectra_convert/zhang18/convert_FIRE.ipynb

Large diffs are not rendered by default.

1,862 changes: 1,862 additions & 0 deletions scripts/spectra_convert/zhang18/convert_OSIRIS.ipynb

Large diffs are not rendered by default.

378 changes: 378 additions & 0 deletions scripts/spectra_convert/zhang18/convert_SDSS_IMACS.ipynb

Large diffs are not rendered by default.

1,438 changes: 1,438 additions & 0 deletions scripts/spectra_convert/zhang18/convert_xshooter.ipynb

Large diffs are not rendered by default.

Loading