LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
makeSkyMap.py
Go to the documentation of this file.
1 #
2 # LSST Data Management System
3 # Copyright 2008-2015 AURA/LSST.
4 #
5 # This product includes software developed by the
6 # LSST Project (http://www.lsst.org/).
7 #
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the LSST License Statement and
19 # the GNU General Public License along with this program. If not,
20 # see <https://www.lsstcorp.org/LegalNotices/>.
21 #
22 import sys
23 import traceback
24 
25 import lsst.geom as geom
26 import lsst.pex.config as pexConfig
27 import lsst.pipe.base as pipeBase
28 from lsst.skymap import skyMapRegistry
29 from lsst.utils.timer import timeMethod
30 
31 
32 class MakeSkyMapConfig(pexConfig.Config):
33  """Config for MakeSkyMapTask
34  """
35  coaddName = pexConfig.Field(
36  doc="coadd name, e.g. deep, goodSeeing, chiSquared",
37  dtype=str,
38  default="deep",
39  )
40  skyMap = skyMapRegistry.makeField(
41  doc="type of skyMap",
42  default="dodeca",
43  )
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",
47  dtype=bool,
48  default=True,
49  )
50 
51 
52 class MakeSkyMapRunner(pipeBase.TaskRunner):
53  """Only need a single butler instance to run on."""
54  @staticmethod
55  def getTargetList(parsedCmd):
56  return [parsedCmd.butler]
57 
58  def __call__(self, butler):
59  task = self.TaskClass(config=self.config, log=self.log)
60  results = None # in case the task fails
61  exitStatus = 0 # exit status for shell
62  if self.doRaise:
63  results = task.runDataRef(butler)
64  else:
65  try:
66  results = task.runDataRef(butler)
67  except Exception as e:
68  task.log.fatal("Failed: %s", e)
69  exitStatus = 1
70  if not isinstance(e, pipeBase.TaskError):
71  traceback.print_exc(file=sys.stderr)
72  task.writeMetadata(butler)
73  if self.doReturnResults:
74  return pipeBase.Struct(
75  exitStatus=exitStatus,
76  result=results,
77  )
78  else:
79  return pipeBase.Struct(
80  exitStatus=exitStatus,
81  )
82 
83 
84 class MakeSkyMapTask(pipeBase.CmdLineTask):
85  """!Make a sky map in a repository
86 
87  Making a sky map in a repository is a prerequisite for making a coadd,
88  since the sky map is used as the pixelization for the coadd.
89  """
90  ConfigClass = MakeSkyMapConfig
91  _DefaultName = "makeSkyMap"
92  RunnerClass = MakeSkyMapRunner
93 
94  def __init__(self, **kwargs):
95  pipeBase.CmdLineTask.__init__(self, **kwargs)
96 
97  @timeMethod
98  def runDataRef(self, butler):
99  """!Make a skymap, persist it (optionally) and log some information about it
100 
101  @param[in] butler data butler
102  @return a pipeBase Struct containing:
103  - skyMap: the constructed SkyMap
104  """
105  skyMap = self.config.skyMap.apply()
106  self.logSkyMapInfologSkyMapInfo(skyMap)
107  if self.config.doWrite:
108  butler.put(skyMap, self.config.coaddName + "Coadd_skyMap")
109  return pipeBase.Struct(
110  skyMap=skyMap
111  )
112 
113  def logSkyMapInfo(self, skyMap):
114  """!Log information about a sky map
115 
116  @param[in] skyMap sky map (an lsst.skyMap.SkyMap)
117  """
118  self.log.info("sky map has %s tracts", len(skyMap))
119  for tractInfo in skyMap:
120  wcs = tractInfo.getWcs()
121  posBox = geom.Box2D(tractInfo.getBBox())
122  pixelPosList = (
123  posBox.getMin(),
124  geom.Point2D(posBox.getMaxX(), posBox.getMinY()),
125  posBox.getMax(),
126  geom.Point2D(posBox.getMinX(), posBox.getMaxY()),
127  )
128  skyPosList = [wcs.pixelToSky(pos).getPosition(geom.degrees) for pos in pixelPosList]
129  posStrList = ["(%0.3f, %0.3f)" % tuple(skyPos) for skyPos in skyPosList]
130  self.log.info("tract %s has corners %s (RA, Dec deg) and %s x %s patches",
131  tractInfo.getId(), ", ".join(posStrList),
132  tractInfo.getNumPatches()[0], tractInfo.getNumPatches()[1])
133 
134  @classmethod
135  def _makeArgumentParser(cls):
136  """Create an argument parser
137 
138  No identifiers are added because none are used.
139  """
140  return pipeBase.ArgumentParser(name=cls._DefaultName_DefaultName)
141 
142  def _getConfigName(self):
143  """Disable persistence of config
144 
145  There's only one SkyMap per rerun anyway, so the config is redundant,
146  and checking it means we can't overwrite or append to one once we've
147  written it.
148  """
149  return None
150 
151  def _getMetadataName(self):
152  """Disable persistence of metadata
153 
154  There's nothing worth persisting.
155  """
156  return None
A floating-point coordinate rectangle geometry.
Definition: Box.h:413
Make a sky map in a repository.
Definition: makeSkyMap.py:84
def runDataRef(self, butler)
Make a skymap, persist it (optionally) and log some information about it.
Definition: makeSkyMap.py:98
def logSkyMapInfo(self, skyMap)
Log information about a sky map.
Definition: makeSkyMap.py:113