ps_plotter/pySmithPlot/testbenches/smith_full_test.py
Luke 190ca4ded5 Inital comit.
Basic transfer function and tank impedance plotting
2018-07-17 18:33:39 -07:00

265 lines
8.2 KiB
Python
Executable file

#!/usr/bin/env python3
import os
import shutil
import sys
import time
from multiprocessing.pool import Pool
from types import FunctionType
import numpy as np
from matplotlib import rcParams, pyplot as pp
sys.path.append("..")
from smithplot.smithaxes import SmithAxes
from smithplot import smithhelper
rcParams.update({"legend.numpoints": 3,
"axes.axisbelow": True})
# sample data
steps = 40
data = np.loadtxt("data/s11.csv", delimiter=",", skiprows=1)[::steps]
sp_data = data[:, 1] + data[:, 2] * 1j
data = np.loadtxt("data/s22.csv", delimiter=",", skiprows=1)[::steps]
z_data = 50 * (data[:, 1] + data[:, 2] * 1j)
# default params
SmithAxes.update_scParams({"plot.marker.hack": False,
"plot.marker.rotate": False,
"grid.minor.enable": False,
"grid.minor.fancy": False})
FT = [False, True]
figsize = 6
ExportFormats = ["pdf", "png"]
def plot_example(testbench, title, scale=50, **kwargs):
print("Testbench '%s' : %s" % (testbench, title.replace("\n", "")))
kwargs.setdefault("markevery", 1)
pp.plot(smithhelper.moebius_inv_z(sp_data, norm=50), datatype="Z", **kwargs)
pp.plot(z_data, datatype="Z", **kwargs)
pp.plot(100, datatype="Z", **kwargs)
pp.plot(25 + 25j, datatype="Z", **kwargs)
pp.title(title)
def savefig(testbench):
for ext in ExportFormats:
pp.savefig("%s/sample_%s.%s" % (build_path, testbench.lower().replace(" ", "_"), ext), format=ext)
def tb_grid_styles():
tb = "Grid Styles"
fig = pp.figure(figsize=(3 * figsize, 2 * figsize))
fig.set_tight_layout(True)
i = 0
for major_fancy in FT:
for minor in FT:
for minor_fancy in FT:
if minor or not minor_fancy:
i += 1
pp.subplot(2, 3, i, projection="smith",
grid_major_fancy=major_fancy,
grid_minor_enable=minor,
grid_minor_fancy=minor_fancy)
major_str = "fancy" if major_fancy else "standard"
minor_str = "off" if not minor else "fancy" if minor_fancy else "standard"
plot_example(tb, "Major: %s - Minor: %s" % (major_str, minor_str))
savefig(tb)
def tb_fancy_grids():
tb = "Fancy Grid"
fig = pp.figure(figsize=(3 * figsize, 2 * figsize))
fig.set_tight_layout(True)
i = 0
for threshold in [(50, 50), (100, 50), (125, 100)]:
i += 1
pp.subplot(2, 3, i, projection="smith",
grid_major_fancy_threshold=threshold)
plot_example(tb, "Major Threshold=(%d, %d)" % threshold)
for threshold in [15, 30, 60]:
i += 1
pp.subplot(2, 3, i, projection="smith",
grid_minor_fancy=True,
grid_minor_enable=True,
grid_minor_fancy_threshold=threshold)
plot_example(tb, "Minor Threshold=%d" % threshold)
savefig(tb)
def tb_grid_locators():
tb = "Grid Locators"
fig = pp.figure(figsize=(4 * figsize, 2 * figsize))
fig.set_tight_layout(True)
i = 0
for num in [5, 8, 14, 20]:
i += 1
pp.subplot(2, 4, i, projection="smith",
grid_major_xmaxn=num)
plot_example(tb, "Max real steps: %d" % num)
for num in [6, 14, 25, 50]:
i += 1
pp.subplot(2, 4, i, projection="smith",
grid_major_ymaxn=num)
plot_example(tb, "Max imaginary steps: %d" % num)
savefig(tb)
def tb_normalize():
tb = "Normalize"
fig = pp.figure(figsize=(3 * figsize, 2 * figsize))
fig.set_tight_layout(True)
i = 0
for normalize in FT:
for impedance in [10, 50, 200]:
i += 1
pp.subplot(2, 3, i, projection="smith",
axes_impedance=impedance,
axes_normalize=normalize)
plot_example(tb, "Impedance: %d Ω — Normalize: %s" % (impedance, normalize))
savefig(tb)
def tb_markers():
tb = "Markers"
VStartMarker = np.array([[0, 0], [0.5, 0.5], [0, -0.5], [-0.5, 0.5], [0, 0]])
XEndMarker = np.array([[0, 0], [0.5, 0.5], [0.25, 0], [0.5, -0.5], [0, 0], [-0.5, -0.5], [-0.25, 0], [-0.5, 0.5], [0, 0]])
fig = pp.figure(figsize=(4 * figsize, 2 * figsize))
fig.set_tight_layout(True)
i = 0
for hackline, startmarker, endmarker, rotate_marker in [[False, None, None, False],
[True, "s", "^", False],
[True, "s", None, False],
[True, VStartMarker, XEndMarker, False],
[True, "s", "^", True],
[True, None, "^", False]]:
i += 1
ax = pp.subplot(2, 3, i, projection="smith",
plot_marker_hack=hackline,
plot_marker_rotate=rotate_marker)
SmithAxes.update_scParams(instance=ax, plot_marker_start=startmarker,
plot_marker_end=endmarker)
def ptype(x):
if isinstance(x, np.ndarray):
return "custom"
elif x is True:
return "on"
elif x is False:
return "off"
elif x is None:
return None
else:
return "'%s'" % x
plot_example(tb, "HackLines: %s - StartMarker: %s\nEndMarker: %s - Rotate: %s" % tuple(map(ptype, [hackline, startmarker, endmarker, rotate_marker])), markersize=10)
savefig(tb)
def tb_interpolation():
tb = "Interpolation"
fig = pp.figure(figsize=(3 * figsize, 2 * figsize))
fig.set_tight_layout(True)
i = 0
for interpolation, equipoints in [[False, False],
[10, False],
[False, 10],
[False, 50]]:
i += 1
pp.subplot(2, 2, i, projection="smith")
plot_example(tb, "Interpolation: %s — Equipoints: %s" % ("False" if interpolation is False else interpolation,
"False" if equipoints is False else equipoints), interpolate=interpolation, equipoints=equipoints)
savefig(tb)
def tb_misc():
tb = "Miscellaneous"
fig = pp.figure(figsize=(3 * figsize, 2 * figsize))
fig.set_tight_layout(True)
pp.subplot(2, 3, 1, projection="smith",
plot_marker_hack=True)
plot_example(tb, "Legend")
pp.legend(["S11", "S22", "Polyline", "Z \u2192 0.125l/\u03BB"])
divs = [1, 3, 7]
pp.subplot(2, 3, 2, projection="smith",
grid_minor_enable=True,
grid_minor_fancy=True,
grid_minor_fancy_dividers=divs)
plot_example(tb, "Minor fancy dividers=%s" % divs)
pp.subplot(2, 3, 3, projection="smith",
axes_radius=0.3)
plot_example(tb, "Axes radius: 0.25")
pp.subplot(2, 3, 4, projection="smith",
symbol_infinity="Inf",
symbol_infinity_correction=0,
symbol_ohm="Ohm")
plot_example(tb, "Infinity symbol: 'Inf' — Ohm symbol: Ohm")
pp.subplot(2, 3, 5, projection="smith",
grid_locator_precision=4)
plot_example(tb, "Grid Locator Precision: 4")
pp.subplot(2, 3, 6, projection="smith",
axes_xlabel_rotation=0)
plot_example(tb, "Axes X Label Rotation: 0")
savefig(tb)
build_all = True
build_path = "./build"
if __name__ == '__main__':
# clear and create path
if os.path.exists(build_path):
shutil.rmtree(build_path)
time.sleep(0.5)
os.makedirs(build_path)
if build_all:
print("Start parallel testbenches...")
p = Pool()
r = []
for key, func in locals().copy().items():
if isinstance(func, FunctionType) and "tb_" in key:
r += [p.apply_async(func, {})]
for proc in r:
proc.get()
else:
pass
# tb_grid_styles()
# tb_fancy_grids()
# tb_grid_locators()
# tb_normalize()
tb_markers()
# tb_interpolation()
# tb_misc()
pp.show()
print("build finished")