22 from __future__
import absolute_import, division, print_function
26 import lsst.afw.geom
as afwGeom
27 import lsst.pex.config
as pexConfig
28 import lsst.pipe.base
as pipeBase
29 from lsst.skymap
import skyMapRegistry
33 """Config for MakeSkyMapTask 35 coaddName = pexConfig.Field(
36 doc=
"coadd name, e.g. deep, goodSeeing, chiSquared",
40 skyMap = skyMapRegistry.makeField(
44 doWrite = pexConfig.Field(
45 doc=
"persist the skyMap? If False then run generates the sky map and returns it, " 46 +
"but does not save it to the data repository",
53 """Only need a single butler instance to run on.""" 56 return [parsedCmd.butler]
59 task = self.TaskClass(config=self.config, log=self.log)
61 results = task.run(butler)
64 results = task.run(butler)
65 except Exception
as e:
66 task.log.fatal(
"Failed: %s" % e)
67 if not isinstance(e, pipeBase.TaskError):
68 traceback.print_exc(file=sys.stderr)
69 task.writeMetadata(butler)
70 if self.doReturnResults:
75 """!Make a sky map in a repository 77 Making a sky map in a repository is a prerequisite for making a coadd, 78 since the sky map is used as the pixelization for the coadd. 80 ConfigClass = MakeSkyMapConfig
81 _DefaultName =
"makeSkyMap" 82 RunnerClass = MakeSkyMapRunner
85 pipeBase.CmdLineTask.__init__(self, **kwargs)
88 def run(self, butler):
89 """!Make a skymap, persist it (optionally) and log some information about it 91 @param[in] butler data butler 92 @return a pipeBase Struct containing: 93 - skyMap: the constructed SkyMap 95 skyMap = self.config.skyMap.apply()
97 if self.config.doWrite:
98 butler.put(skyMap, self.config.coaddName +
"Coadd_skyMap")
99 return pipeBase.Struct(
104 """!Log information about a sky map 106 @param[in] skyMap sky map (an lsst.skyMap.SkyMap) 108 self.log.info(
"sky map has %s tracts" % (len(skyMap),))
109 for tractInfo
in skyMap:
110 wcs = tractInfo.getWcs()
111 posBox = afwGeom.Box2D(tractInfo.getBBox())
114 afwGeom.Point2D(posBox.getMaxX(), posBox.getMinY()),
116 afwGeom.Point2D(posBox.getMinX(), posBox.getMaxY()),
118 skyPosList = [wcs.pixelToSky(pos).getPosition(afwGeom.degrees)
for pos
in pixelPosList]
119 posStrList = [
"(%0.3f, %0.3f)" % tuple(skyPos)
for skyPos
in skyPosList]
120 self.log.info(
"tract %s has corners %s (RA, Dec deg) and %s x %s patches" %
121 (tractInfo.getId(),
", ".join(posStrList),
122 tractInfo.getNumPatches()[0], tractInfo.getNumPatches()[1]))
125 def _makeArgumentParser(cls):
126 """Create an argument parser 128 No identifiers are added because none are used. 132 def _getConfigName(self):
133 """Disable persistence of config 135 There's only one SkyMap per rerun anyway, so the config is redundant, 136 and checking it means we can't overwrite or append to one once we've 141 def _getMetadataName(self):
142 """Disable persistence of metadata 144 There's nothing worth persisting.
def logSkyMapInfo(self, skyMap)
Log information about a sky map.
def __init__(self, kwargs)
def getTargetList(parsedCmd)
def __call__(self, butler)
def run(self, butler)
Make a skymap, persist it (optionally) and log some information about it.
Make a sky map in a repository.