22 __all__ = [
"CoaddDataIdContainer",
"ExistingCoaddDataIdContainer",
"TractDataIdContainer"]
25 from collections
import defaultdict
27 import lsst.pipe.base
as pipeBase
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 def getPatchRefList(tract):
93 return [namespace.butler.dataRef(datasetType=datasetType,
95 filter=dataId[
"filter"],
96 patch=
"%d,%d" % patch.getIndex())
for patch
in tract]
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)