lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
python
lsst
afw
geom
ellipses
__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
42
class
EllipseMatplotlibInterface
:
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
= weakref.proxy(ellipse)
54
self.
scale
= float(scale)
55
core =
Axes
(self.
__ellipse
.getCore())
56
core.scale(2.0 * scale)
57
self.
patch
= matplotlib.patches.Ellipse(
58
(self.
__ellipse
.getCenter().getX(), self.
__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.
patch
, 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
.getCore())
72
core.scale(2.0 * scale)
73
new_patch = matplotlib.patches.Ellipse(
74
(self.
__ellipse
.getCenter().getX(), self.
__ellipse
.getCenter().getY()),
75
core.a, core.b, core.theta * 180.0 / np.pi
76
)
77
new_patch.update_from(self.
patch
)
78
axes = self.
patch
.get_axes()
79
if
axes
is
not
None
:
80
self.
patch
.remove()
81
axes.add_patch(new_patch)
82
self.
patch
= 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
lsst::afw::geom::ellipses::Axes
An ellipse core for the semimajor/semiminor axis and position angle parametrization (a,...
Definition
Axes.h:47
lsst::afw::geom::ellipses.EllipseMatplotlibInterface
Definition
__init__.py:42
lsst::afw::geom::ellipses.EllipseMatplotlibInterface.patch
patch
Definition
__init__.py:57
lsst::afw::geom::ellipses.EllipseMatplotlibInterface.__getattr__
__getattr__(self, name)
Definition
__init__.py:63
lsst::afw::geom::ellipses.EllipseMatplotlibInterface.scale
scale
Definition
__init__.py:54
lsst::afw::geom::ellipses.EllipseMatplotlibInterface.update
update(self, show=True, rescale=True)
Definition
__init__.py:66
lsst::afw::geom::ellipses.EllipseMatplotlibInterface.__ellipse
__ellipse
Definition
__init__.py:53
lsst::afw::geom::ellipses.EllipseMatplotlibInterface.__init__
__init__(self, ellipse, scale=1.0, **kwds)
Definition
__init__.py:49
lsst::afw::geom::ellipses.Ellipse_plot
Ellipse_plot(self, axes=None, scale=1.0, show=True, rescale=True, **kwds)
Definition
__init__.py:90
Generated on
for lsst.afw by
1.17.0