Skip to content

Commit

Permalink
Add MakeVisitTableTask to postprocess.py
Browse files Browse the repository at this point in the history
  • Loading branch information
cmsaunders committed Jun 2, 2021
1 parent 3ab2d77 commit a1c249b
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions python/lsst/pipe/tasks/postprocess.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import functools
import pandas as pd
from collections import defaultdict
import numpy as np

import lsst.geom
import lsst.pex.config as pexConfig
Expand Down Expand Up @@ -1299,3 +1300,75 @@ def writeConfig(self, butler, clobber=False, doBackup=True):
"""No config to write.
"""
pass


class MakeVisitTableConnections(pipeBase.PipelineTaskConnections,
dimensions=("instrument",),
defaultTemplates={}):
visitSummaries = pipeBase.connectionTypes.Input(
doc="Per-visit consolidated exposure metadata from ConsolidateVisitSummaryTask",
name="visitSummary",
storageClass="ExposureCatalog",
dimensions=("instrument", "visit",),
multiple=True,
deferLoad=True,
)
outputCatalog = connectionTypes.Output(
doc="Visit metadata table",
name="visitTable",
storageClass="DataFrame",
dimensions=("instrument",)
)


class MakeVisitTableConfig(pipeBase.PipelineTaskConfig,
pipelineConnections=MakeVisitTableConnections):
pass


class MakeVisitTableTask(CmdLineTask, pipeBase.PipelineTask):
"""Produce a `visitTable` from the `visitSummary` exposure catalogs.
"""
_DefaultName = 'makeVisitTable'
ConfigClass = MakeVisitTableConfig

def run(self, visitSummaries):
""" Make a table of visit information from the `visitSummary` catalogs
Parameters
----------
visitSummaries : list of `lsst.afw.table.ExposureCatalog`
List of exposure catalogs with per-detector summary information.
Returns
-------
result : `lsst.pipe.Base.Struct`
Results struct with attribute:
``outputCatalog``
Catalog of visit information.
"""
visitEntries = []
for visitSummary in visitSummaries:
visitSummary = visitSummary.get()

visitRow = visitSummary[0]
visitInfo = visitRow.getVisitInfo()
visitEntry = {}
visitEntry["visitId"] = visitRow['visit']
visitEntry["filterName"] = visitRow['physical_filter']
visitEntry["ra"] = np.mean(visitSummary['ra'])
visitEntry["decl"] = np.mean(visitSummary['decl'])
visitEntry["skyRotation"] = visitInfo.getBoresightRotAngle().asRadians()
azimuth, altitude = visitInfo.getBoresightAzAlt()
visitEntry["azimuth"] = azimuth.asRadians()
visitEntry["altitude"] = altitude.asRadians()
visitEntry["zenithDistance"] = visitRow['zenithDistance']
visitEntry["airmass"] = visitInfo.getBoresightAirmass()
visitEntry["obsStart"] = visitInfo.getDate().toPython()
visitEntry["expTime"] = visitInfo.getExposureTime()
visitEntries.append(visitEntry)
# TODO: Add programId, exposureType, expMidpt, cameraTemp, mirror1Temp, mirror2Temp, mirror3Temp,
# domeTemp, externalTemp, dimmSeeing, pwvGPS, pwvMW, flags, nExposures

outputCatalog = pd.DataFrame(data=visitEntries)
return pipeBase.Struct(outputCatalog=outputCatalog)

0 comments on commit a1c249b

Please sign in to comment.