Skip to content

Commit

Permalink
Merge pull request #183 from lsst/tickets/DM-25965
Browse files Browse the repository at this point in the history
DM-25965: Switch ingest to using ButlerURI
  • Loading branch information
timj committed Mar 18, 2021
2 parents d3a79bc + d1b8080 commit 1e69a3f
Showing 1 changed file with 30 additions and 17 deletions.
47 changes: 30 additions & 17 deletions python/lsst/obs/decam/ingest.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,39 +23,52 @@
import re


from lsst.daf.butler import ButlerURI, Formatter
from astro_metadata_translator import fix_header, DecamTranslator
from lsst.afw.fits import readMetadata
from lsst.pipe.tasks.ingest import ParseTask, IngestTask, IngestArgumentParser
from lsst.obs.base.ingest import RawFileData
import lsst.obs.base
from ._instrument import DarkEnergyCamera

__all__ = ["DecamRawIngestTask", "DecamIngestArgumentParser", "DecamIngestTask", "DecamParseTask"]


class DecamRawIngestTask(lsst.obs.base.RawIngestTask):
"""Task for ingesting raw DECam data into a Gen3 Butler repository.
"""
def extractMetadata(self, filename: str) -> RawFileData:
def extractMetadata(self, filename: ButlerURI) -> RawFileData:
datasets = []
fitsData = lsst.afw.fits.Fits(filename, 'r')
# NOTE: The primary header (HDU=0) does not contain detector data.
for i in range(1, fitsData.countHdus()):
fitsData.setHdu(i)
header = fitsData.readMetadata()
if header['CCDNUM'] > 62: # ignore the guide CCDs
continue
datasets.append(self._calculate_dataset_info(header, filename))

# The data model currently assumes that whilst multiple datasets
# can be associated with a single file, they must all share the
# same formatter.
instrument = DarkEnergyCamera()
FormatterClass = instrument.getRawFormatter(datasets[0].dataId)
try:
with filename.as_local() as local_file:
fitsData = lsst.afw.fits.Fits(local_file.ospath, 'r')
# NOTE: The primary header (HDU=0) does not contain detector data.
for i in range(1, fitsData.countHdus()):
fitsData.setHdu(i)
header = fitsData.readMetadata()
if header['CCDNUM'] > 62: # ignore the guide CCDs
continue
datasets.append(self._calculate_dataset_info(header, filename))
except Exception as e:
self.log.debug("Problem extracting metadata from %s: %s", filename, e)
# Indicate to the caller that we failed to read.
# Do not try to ingest partial contents of file.
datasets = []
formatterClass = Formatter
instrument = None
self._on_metadata_failure(filename, e)
if self.config.failFast:
raise RuntimeError(f"Problem extracting metadata for file {filename}") from e
else:
# The data model currently assumes that whilst multiple datasets
# can be associated with a single file, they must all share the
# same formatter.
instrument, formatterClass = self._determine_instrument_formatter(datasets[0].dataId, filename)
if instrument is None:
datasets = []

self.log.debug(f"Found images for {len(datasets)} detectors in {filename}")
return RawFileData(datasets=datasets, filename=filename,
FormatterClass=FormatterClass,
FormatterClass=formatterClass,
instrumentClass=type(instrument))


Expand Down

0 comments on commit 1e69a3f

Please sign in to comment.