lsst.pipe.drivers g96f01af41f+188e9e7a3b
utils.py
Go to the documentation of this file.
1import argparse
2
3from lsst.pipe.base import Struct, TaskRunner
4from lsst.pipe.tasks.coaddBase import CoaddDataIdContainer
5from lsst.pipe.tasks.selectImages import BaseSelectImagesTask, BaseExposureInfo
6
7
8class ButlerTaskRunner(TaskRunner):
9 """Get a butler into the Task scripts"""
10 @staticmethod
11 def getTargetList(parsedCmd, **kwargs):
12 """Task.runDataRef should receive a butler in the kwargs"""
13 return TaskRunner.getTargetList(parsedCmd, butler=parsedCmd.butler, **kwargs)
14
15
16def getDataRef(butler, dataId, datasetType="raw"):
17 """Construct a dataRef from a butler and data identifier"""
18 dataRefList = [ref for ref in butler.subset(datasetType, **dataId)]
19 assert len(dataRefList) == 1
20 return dataRefList[0]
21
22
24 """Select images by taking everything we're given without further examination
25
26 This is useful if the examination (e.g., Wcs checking) has been performed
27 previously, and we've been provided a good list.
28 """
29
30 def runDataRef(self, patchRef, coordList, makeDataRefList=True, selectDataList=[]):
31 return Struct(
32 dataRefList=[s.dataRef for s in selectDataList],
33 exposureInfoList=[BaseExposureInfo(
34 s.dataRef.dataId, None) for s in selectDataList],
35 )
36
37
38class TractDataIdContainer(CoaddDataIdContainer):
39
40 def makeDataRefList(self, namespace):
41 """Make self.refList from self.idList
42
43 It's difficult to make a data reference that merely points to an entire
44 tract: there is no data product solely at the tract level. Instead, we
45 generate a list of data references for patches within the tract.
46 """
47 datasetType = namespace.config.coaddName + "Coadd_calexp"
48 validKeys = set(["tract", "filter", "patch"])
49
50 def getPatchRefList(tract):
51 return [namespace.butler.dataRef(datasetType=datasetType,
52 tract=tract.getId(),
53 filter=dataId["filter"],
54 patch="%d,%d" % patch.getIndex())
55 for patch in tract]
56
57 tractRefs = {} # Data references for each tract
58 for dataId in self.idList:
59 for key in validKeys:
60 if key in ("tract", "patch",):
61 # Will deal with these explicitly
62 continue
63 if key not in dataId:
64 raise argparse.ArgumentError(
65 None, "--id must include " + key)
66
67 skymap = self.getSkymap(namespace)
68
69 if "tract" in dataId:
70 tractId = dataId["tract"]
71 if tractId not in tractRefs:
72 tractRefs[tractId] = []
73 if "patch" in dataId:
74 tractRefs[tractId].append(namespace.butler.dataRef(datasetType=datasetType, tract=tractId,
75 filter=dataId[
76 'filter'],
77 patch=dataId['patch']))
78 else:
79 tractRefs[tractId] += getPatchRefList(skymap[tractId])
80 else:
81 tractRefs = dict((tract.getId(), tractRefs.get(tract.getId(), []) +
82 getPatchRefList(tract)) for tract in skymap)
83
84 self.refList = list(tractRefs.values())
def getTargetList(parsedCmd, **kwargs)
Definition: utils.py:11
def runDataRef(self, patchRef, coordList, makeDataRefList=True, selectDataList=[])
Definition: utils.py:30
def makeDataRefList(self, namespace)
Definition: utils.py:40
def getDataRef(butler, dataId, datasetType="raw")
Definition: utils.py:16