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
__init__.py
Go to the documentation of this file.
1 #
2 # LSST Data Management System
3 # Copyright 2008, 2009, 2010 LSST Corporation.
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 <http://www.lsstcorp.org/LegalNotices/>.
21 #
22 
23 """lsst.afw.geom.ellipses
24 """
25 from ._ellipses import *
26 from ._ellipse import *
27 from ._axes import *
28 from ._quadrupole import *
29 
30 Separable = {
31  (Distortion, DeterminantRadius): SeparableDistortionDeterminantRadius,
32  (Distortion, TraceRadius): SeparableDistortionTraceRadius,
33  (Distortion, LogDeterminantRadius): SeparableDistortionLogDeterminantRadius,
34  (Distortion, LogTraceRadius): SeparableDistortionLogTraceRadius,
35  (ConformalShear, DeterminantRadius): SeparableConformalShearDeterminantRadius,
36  (ConformalShear, TraceRadius): SeparableConformalShearTraceRadius,
37  (ConformalShear, LogDeterminantRadius): SeparableConformalShearLogDeterminantRadius,
38  (ConformalShear, LogTraceRadius): SeparableConformalShearLogTraceRadius
39 }
40 
41 
43  """An interface for drawing the ellipse using matplotlib.
44 
45  This is typically initiated by calling Ellipse.plot(), which
46  returns an instance of this class.
47  """
48 
49  def __init__(self, ellipse, scale=1.0, **kwds):
50  import matplotlib.patches
51  import weakref
52  import numpy as np
53  self.__ellipse__ellipse = weakref.proxy(ellipse)
54  self.scalescale = float(scale)
55  core = Axes(self.__ellipse__ellipse.getCore())
56  core.scale(2.0 * scale)
57  self.patchpatch = matplotlib.patches.Ellipse(
58  (self.__ellipse__ellipse.getCenter().getX(), self.__ellipse__ellipse.getCenter().getY()),
59  core.getA(), core.getB(), core.getTheta() * 180.0 / np.pi,
60  **kwds
61  )
62 
63  def __getattr__(self, name):
64  return getattr(self.patchpatch, name)
65 
66  def update(self, show=True, rescale=True):
67  """Update the matplotlib representation to the current ellipse parameters.
68  """
69  import matplotlib.patches
70  import numpy as np
71  core = _agl.Axes(self.__ellipse__ellipse.getCore())
72  core.scale(2.0 * scale)
73  new_patch = matplotlib.patches.Ellipse(
74  (self.__ellipse__ellipse.getCenter().getX(), self.__ellipse__ellipse.getCenter().getY()),
75  core.a, core.b, core.theta * 180.0 / np.pi
76  )
77  new_patch.update_from(self.patchpatch)
78  axes = self.patchpatch.get_axes()
79  if axes is not None:
80  self.patchpatch.remove()
81  axes.add_patch(new_patch)
82  self.patchpatch = new_patch
83  if axes is not None:
84  if rescale:
85  axes.autoscale_view()
86  if show:
87  axes.figure.canvas.draw()
88 
89 
90 def Ellipse_plot(self, axes=None, scale=1.0, show=True, rescale=True, **kwds):
91  """Plot the ellipse in matplotlib, adding a MatplotlibInterface
92  object as the 'matplotlib' attribute of the ellipse.
93 
94  Aside from those below, keyword arguments for the
95  matplotlib.patches.Patch constructor are also accepted
96  ('facecolor', 'linestyle', etc.)
97 
98  Parameters
99  ----------
100  axes : `matplotlib.axes.Axes`, optional
101  Axes to plot on. Defaults to matplotlib.pyplot.gca().
102  scale : `float`, optional
103  Scale the displayed ellipse by this factor.
104  show : `bool`, optional
105  If True, update the figure automatically. Set to False for batch
106  processing.
107  rescale : `bool`, optional
108  If True, rescale the axes.
109 
110  Returns
111  -------
112  interface : `EllipseMatplotlibInterface`
113  An object that allows the matplotlib patch to be updated when the
114  ellipse modified.
115  """
116  import matplotlib.pyplot
117  interface = self.MatplotlibInterface(self, scale, **kwds)
118  if axes is None:
119  axes = matplotlib.pyplot.gca()
120  axes.add_patch(interface.patch)
121  if rescale:
122  axes.autoscale_view()
123  if show:
124  axes.figure.canvas.draw()
125  return interface
126 
127 
128 Ellipse.MatplotlibInterface = EllipseMatplotlibInterface
129 Ellipse.plot = Ellipse_plot
An ellipse core for the semimajor/semiminor axis and position angle parametrization (a,...
Definition: Axes.h:47
def __init__(self, ellipse, scale=1.0, **kwds)
Definition: __init__.py:49
def update(self, show=True, rescale=True)
Definition: __init__.py:66
def Ellipse_plot(self, axes=None, scale=1.0, show=True, rescale=True, **kwds)
Definition: __init__.py:90