plotting improvements
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import colorcet as cc
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from plotapp import PlotApp
|
from plotapp import PlotApp
|
||||||
@@ -104,16 +105,6 @@ def compute_manual():
|
|||||||
prop.append(spec)
|
prop.append(spec)
|
||||||
z.append(stat["z"])
|
z.append(stat["z"])
|
||||||
|
|
||||||
# with PlotApp(i=range(len(z))) as app:
|
|
||||||
# o = np.argsort(p.l)
|
|
||||||
# sax = app["spectrum"]
|
|
||||||
# tax = app["field"]
|
|
||||||
|
|
||||||
# @app.update
|
|
||||||
# def draw(i):
|
|
||||||
# sax.set_line_data("spectrum", p.l[o], sc.abs2(prop[i][o]))
|
|
||||||
# tax.set_line_data("field", p.t, sc.abs2(np.fft.ifft(prop[i])))
|
|
||||||
|
|
||||||
|
|
||||||
def compute_auto():
|
def compute_auto():
|
||||||
sc.compute(params, True, "examples/dudley2006")
|
sc.compute(params, True, "examples/dudley2006")
|
||||||
@@ -122,11 +113,10 @@ def compute_auto():
|
|||||||
def plot():
|
def plot():
|
||||||
prop = sc.propagation("examples/dudley_manual.zip")
|
prop = sc.propagation("examples/dudley_manual.zip")
|
||||||
newprop = sc.propagation("examples/dudley2006.zip")
|
newprop = sc.propagation("examples/dudley2006.zip")
|
||||||
wl_r = sc.PlotRange(450, 2500, "nm")
|
|
||||||
fig, (top, bot) = plt.subplots(2, 2)
|
fig, (top, bot) = plt.subplots(2, 2)
|
||||||
z = np.linspace(0, prop.parameters.length, len(prop))
|
z = np.linspace(0, prop.parameters.length, len(prop))
|
||||||
sc.plotting.summary_plot(prop[:], z, axes=top, wl_range=wl_r)
|
sc.plotting.summary_plot(prop[:], z, axes=top)
|
||||||
sc.plotting.summary_plot(newprop[:], newprop.parameters.z_targets, axes=bot, wl_range=wl_r)
|
sc.plotting.summary_plot(newprop[:], newprop.parameters.z_targets, axes=bot)
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "scgenerator"
|
name = "scgenerator"
|
||||||
version = "0.3.13"
|
version = "0.3.14"
|
||||||
description = "Simulate nonlinear pulse propagation in optical fibers"
|
description = "Simulate nonlinear pulse propagation in optical fibers"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }]
|
authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }]
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from numpy.polynomial.chebyshev import Chebyshev, cheb2poly
|
|||||||
|
|
||||||
from scgenerator import io
|
from scgenerator import io
|
||||||
from scgenerator.io import DataFile
|
from scgenerator.io import DataFile
|
||||||
from scgenerator.math import argclosest, u_nm
|
from scgenerator.math import all_zeros, argclosest, u_nm
|
||||||
from scgenerator.physics import materials as mat
|
from scgenerator.physics import materials as mat
|
||||||
from scgenerator.physics import units
|
from scgenerator.physics import units
|
||||||
from scgenerator.physics.units import c, pi
|
from scgenerator.physics.units import c, pi
|
||||||
@@ -56,6 +56,10 @@ def D_to_beta2(D, l):
|
|||||||
return -(l**2) / (pipi * c) * D
|
return -(l**2) / (pipi * c) * D
|
||||||
|
|
||||||
|
|
||||||
|
def find_zdw(l: np.ndarray, beta2_arr: np.ndarray) -> list[float]:
|
||||||
|
return [el for el in all_zeros(l, beta2_arr) if el > 0]
|
||||||
|
|
||||||
|
|
||||||
def plasma_dispersion(l, number_density, simple=False):
|
def plasma_dispersion(l, number_density, simple=False):
|
||||||
"""
|
"""
|
||||||
computes dispersion (beta2) for constant plasma
|
computes dispersion (beta2) for constant plasma
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import os
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Callable, Literal, Optional, Sequence, Union
|
from typing import Any, Callable, Literal, Optional, Sequence, Union
|
||||||
|
|
||||||
|
import matplotlib.colors
|
||||||
import matplotlib.gridspec as gs
|
import matplotlib.gridspec as gs
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@@ -1004,11 +1005,13 @@ def apply_log(values: np.ndarray, log: Union[str, bool, float, int]) -> np.ndarr
|
|||||||
elif log == "2D":
|
elif log == "2D":
|
||||||
values = math.to_dB(values, ref=values.max())
|
values = math.to_dB(values, ref=values.max())
|
||||||
elif log == "1D" or log is True:
|
elif log == "1D" or log is True:
|
||||||
values = math.to_dB(values)
|
values = math.to_dB(values, axis=1)
|
||||||
elif log == "smooth 1D":
|
elif log == "smooth 1D":
|
||||||
ref = np.max(values, axis=1)
|
ref = np.max(values, axis=1)
|
||||||
ind = np.argmax((ref[:-1] - ref[1:]) < 0)
|
ind = np.argmax((ref[:-1] - ref[1:]) < 0)
|
||||||
values = math.to_dB(values, ref=np.max(ref[ind:]))
|
values = math.to_dB(values, ref=np.max(ref[ind:]))
|
||||||
|
elif log == "linear 1D":
|
||||||
|
values = (values.T / values.max(axis=1)).T
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Log argument {log} not recognized")
|
raise ValueError(f"Log argument {log} not recognized")
|
||||||
return values
|
return values
|
||||||
@@ -1158,9 +1161,11 @@ def summary_plot(
|
|||||||
wl_range: PlotRange | None = None,
|
wl_range: PlotRange | None = None,
|
||||||
time_range: PlotRange | None = None,
|
time_range: PlotRange | None = None,
|
||||||
db_min: float = -50.0,
|
db_min: float = -50.0,
|
||||||
|
lin_min: float = 1e-3,
|
||||||
axes: tuple[Axes, Axes] | None = None,
|
axes: tuple[Axes, Axes] | None = None,
|
||||||
wl_db="1D",
|
wl_db="1D",
|
||||||
time_db=False,
|
time_db=False,
|
||||||
|
cmap: str | matplotlib.colors.LinearSegmentedColormap = "viridis",
|
||||||
):
|
):
|
||||||
wl_int = specs.wl_int
|
wl_int = specs.wl_int
|
||||||
time_int = specs.time_int
|
time_int = specs.time_int
|
||||||
@@ -1171,12 +1176,18 @@ def summary_plot(
|
|||||||
z = z[: specs.shape[0]]
|
z = z[: specs.shape[0]]
|
||||||
z = np.asarray(z)
|
z = np.asarray(z)
|
||||||
|
|
||||||
|
calc_limit, wl_disp_limit = (
|
||||||
|
(10 ** (0.1 * db_min - 1), db_min) if wl_db and wl_db != "linear 1D" else (lin_min, 0)
|
||||||
|
)
|
||||||
if wl_range is None:
|
if wl_range is None:
|
||||||
imin, imax = math.span_above(wl_int, wl_int.max() * 1e-6)
|
imin, imax = math.span_above(wl_int, wl_int.max() * calc_limit)
|
||||||
wl_range = PlotRange(specs.wl_disp[imin] * 1e9, specs.wl_disp[imax] * 1e9, "nm")
|
wl_range = PlotRange(specs.wl_disp[imin] * 1e9, specs.wl_disp[imax] * 1e9, "nm")
|
||||||
|
|
||||||
|
calc_limit, time_disp_limit = (
|
||||||
|
(10 ** (0.1 * db_min - 1), db_min) if time_db and time_db != "linear 1D" else (lin_min, 0)
|
||||||
|
)
|
||||||
if time_range is None:
|
if time_range is None:
|
||||||
imin, imax = math.span_above(time_int, time_int.max() * 1e-6)
|
imin, imax = math.span_above(time_int, time_int.max() * calc_limit)
|
||||||
time_range = PlotRange(specs.t[imin] * 1e15, specs.t[imax] * 1e15, "fs")
|
time_range = PlotRange(specs.t[imin] * 1e15, specs.t[imax] * 1e15, "fs")
|
||||||
|
|
||||||
if axes is None:
|
if axes is None:
|
||||||
@@ -1185,7 +1196,21 @@ def summary_plot(
|
|||||||
left, right = axes
|
left, right = axes
|
||||||
|
|
||||||
x, y, values = transform_2D_propagation(wl_int, wl_range, specs.wl_disp, z, log=wl_db)
|
x, y, values = transform_2D_propagation(wl_int, wl_range, specs.wl_disp, z, log=wl_db)
|
||||||
left.imshow(values, extent=get_extent(x, y), origin="lower", aspect="auto", vmin=db_min)
|
left.imshow(
|
||||||
|
values,
|
||||||
|
extent=get_extent(x, y),
|
||||||
|
origin="lower",
|
||||||
|
aspect="auto",
|
||||||
|
vmin=wl_disp_limit,
|
||||||
|
cmap=cmap,
|
||||||
|
)
|
||||||
|
|
||||||
x, y, values = transform_2D_propagation(time_int, time_range, specs.t, z, log=time_db)
|
x, y, values = transform_2D_propagation(time_int, time_range, specs.t, z, log=time_db)
|
||||||
right.imshow(values, extent=get_extent(x, y), origin="lower", aspect="auto", vmin=db_min)
|
right.imshow(
|
||||||
|
values,
|
||||||
|
extent=get_extent(x, y),
|
||||||
|
origin="lower",
|
||||||
|
aspect="auto",
|
||||||
|
vmin=time_disp_limit,
|
||||||
|
cmap=cmap,
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user