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.
130 return pipeBase.ArgumentParser(name=cls._DefaultName)
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 run
Make a skymap, persist it (optionally) and log some information about it.
def logSkyMapInfo
Log information about a sky map.
Make a sky map in a repository.