23 from collections
import defaultdict
25 import lsst.pipe.base
as pipeBase
27 __all__ = [
"CoaddDataIdContainer",
"ExistingCoaddDataIdContainer",
"TractDataIdContainer"]
31 """A version of lsst.pipe.base.DataIdContainer specialized for coaddition. 33 Required because butler.subset does not support patch and tract 35 This code was originally in pipe_tasks (coaddBase.py) 39 """Only retrieve skymap if required""" 40 if not hasattr(self,
"_skymap"):
41 self.
_skymap = namespace.butler.get(namespace.config.coaddName +
"Coadd_skyMap")
45 """Make self.refList from self.idList 47 validKeys = namespace.butler.getKeys(datasetType=self.datasetType, level=self.level)
49 for dataId
in self.idList:
51 if key
in (
"tract",
"patch"):
55 raise argparse.ArgumentError(
None,
"--id must include " + key)
58 if "tract" not in dataId:
60 raise RuntimeError(
"'patch' cannot be specified without 'tract'")
61 addList = [dict(tract=tract.getId(), patch=
"%d,%d" % patch.getIndex(), **dataId)
62 for tract
in self.
getSkymap(namespace)
for patch
in tract]
63 elif "patch" not in dataId:
64 tract = self.
getSkymap(namespace)[dataId[
"tract"]]
65 addList = [dict(patch=
"%d,%d" % patch.getIndex(), **dataId)
for patch
in tract]
69 self.refList += [namespace.butler.dataRef(datasetType=self.datasetType, dataId=addId)
74 """A version of CoaddDataIdContainer that only produces references that exist""" 84 """Make self.refList from self.idList 85 It's difficult to make a data reference that merely points to an entire 86 tract: there is no data product solely at the tract level. Instead, we 87 generate a list of data references for patches within the tract. 89 datasetType = namespace.config.coaddName +
"Coadd" 90 validKeys = set([
"tract",
"filter",
"patch", ])
92 getPatchRefList =
lambda tract: [namespace.butler.dataRef(datasetType=datasetType,
94 filter=dataId[
"filter"],
95 patch=
"%d,%d" % patch.getIndex())
for 98 tractRefs = defaultdict(list)
99 for dataId
in self.idList:
100 for key
in validKeys:
101 if key
in (
"tract",
"patch",):
104 if key
not in dataId:
105 raise argparse.ArgumentError(
None,
"--id must include " + key)
109 if "tract" in dataId:
110 tractId = dataId[
"tract"]
111 if "patch" in dataId:
112 tractRefs[tractId].append(namespace.butler.dataRef(datasetType=datasetType, tract=tractId,
113 filter=dataId[
'filter'],
114 patch=dataId[
'patch']))
116 tractRefs[tractId] += getPatchRefList(skymap[tractId])
118 tractRefs = dict((tract.getId(), tractRefs.get(tract.getId(), []) + getPatchRefList(tract))
def makeDataRefList(self, namespace)
def getSkymap(self, namespace)
def makeDataRefList(self, namespace)
def makeDataRefList(self, namespace)