42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import itertools
|
|
import scgenerator as sc
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
plt.rcParams["font.family"] = "serif"
|
|
|
|
|
|
def main():
|
|
t = np.linspace(-100, 100, 512) * 1e-15
|
|
w = sc.wspace(t) + sc.units.nm_rads(1056)
|
|
|
|
fig, (tops, bots) = plt.subplots(2, 4, constrained_layout=True, figsize=(11, 5))
|
|
|
|
spec_kw = dict(cmap="Blues_r", marker=".")
|
|
time_kw = dict(cmap="Greens_r", marker=".")
|
|
|
|
for (const, phase), top, bot in zip(
|
|
itertools.product((True, False), (True, False)), tops, bots
|
|
):
|
|
sn = sc.pulse.shot_noise(w, const, phase)
|
|
sn_t = np.fft.ifft(sn)
|
|
top.scatter(sn.real, sn.imag, c=np.abs(w), **spec_kw)
|
|
bot.scatter(sn_t.real, sn_t.imag, c=t[::-1], **time_kw)
|
|
top.set_aspect(1, adjustable="datalim")
|
|
bot.set_aspect(1, adjustable="datalim")
|
|
top.axis("off")
|
|
bot.axis("off")
|
|
top.set_title(
|
|
f"variance~$\\omega{'_0' if const else ''}$\n{'phase only' if phase else 'Re + Im'}"
|
|
)
|
|
|
|
sc.plotting.corner_annotation("↑Im\n→Re", tops[0])
|
|
sc.plotting.corner_annotation(r"$\tilde{A}(\omega)$", tops[0], "bl")
|
|
sc.plotting.corner_annotation("$A(t)$", bots[0], "bl")
|
|
fig.suptitle("Different shot noise implementations, shading according to $|\\omega|$, $t$")
|
|
plt.show()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|