Source code for wield.control.fitting.SISO.plots.overlays
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: © 2021 Massachusetts Institute of Technology.
# SPDX-FileCopyrightText: © 2021 Lee McCuller <mcculler@caltech.edu>
# NOTICE: authors should document their contributions in concisely in NOTICE
# with details inline in source files, comments, and docstrings.
"""
"""
import numpy as np
import matplotlib.collections as mplcollect
# import matplotlib as mpl
# from matplotlib import patches
import matplotlib.transforms as mpltrans
from . import utilities
[docs]
def plot_ZP_grab(
self,
fitter,
duals,
color="black",
axB=None,
):
def rlog_F(r):
F_Hz = r.imag
BW = abs(r.real)
# select = abs(r) < 1
return BW, F_Hz
ax = axB.mag2
x_z = []
y_z = []
x_p = []
y_p = []
for b in duals:
# coding_z = fitter.num_codings[b.idx_z]
# z_rl, z_F = rlog_F(coding_z.roots_c(fitter)[0])
z_rl, z_F = rlog_F(b.z)
# coding_p = fitter.den_codings[b.idx_p]
# p_rl, p_F = rlog_F(coding_p.roots_c(fitter)[0])
p_rl, p_F = rlog_F(b.p)
trans = mpltrans.composite_transform_factory(
ax.transData,
ax.transAxes.inverted(),
)
locs_z = trans.transform((z_F, z_rl))
locs_p = trans.transform((p_F, p_rl))
x_z.append(locs_z[0])
y_z.append(locs_z[1])
x_p.append(locs_p[0])
y_p.append(locs_p[1])
x_z = np.asarray(x_z)
y_z = np.asarray(y_z)
x_p = np.asarray(x_p)
y_p = np.asarray(y_p)
aspect = utilities.get_aspect(ax)
r = (0.01 + ((x_z - x_p) ** 2 + (y_z - y_p) ** 2 / aspect ** 1) ** 0.5,)
angles = np.angle((x_z - x_p) + 1j * (y_z - y_p) / aspect, deg=True)
col = mplcollect.EllipseCollection(
widths=r,
heights=0.012,
angles=angles,
units="width",
facecolors="none",
edgecolors=color,
offsets=np.vstack([(x_z + x_p) / 2, (y_z + y_p) / 2]).T,
transOffset=ax.transAxes,
)
ax.add_collection(col)
return axB