attoworld.personal.nick

This file contains functions primarily used by Nick Karpowicz.

1"""
2This file contains functions primarily used by Nick Karpowicz.
3"""
4
5from .nick import dark_plot
6from .impulse_response import get_effective_response
7
8__all__ = ["dark_plot", "get_effective_response"]
def dark_plot():
 6def dark_plot():
 7    """
 8    Use a dark style for matplotlib plots.
 9    """
10    rcParams["font.family"] = "sans-serif"
11    rcParams["font.sans-serif"] = [
12        "Helvetica",
13        "Arial",
14        "Verdana",
15        "DejaVu Sans",
16        "Liberation Sans",
17        "Bitstream Vera Sans",
18        "sans-serif",
19    ]
20    rcParams["axes.prop_cycle"] = cycler(
21        color=["cyan", "magenta", "orange", "blueviolet", "lime"]
22    )
23    rcParams["figure.facecolor"] = "#171717"
24    rcParams["figure.edgecolor"] = rcParams["figure.facecolor"]
25    rcParams["savefig.facecolor"] = rcParams["figure.facecolor"]
26    rcParams["savefig.edgecolor"] = rcParams["figure.facecolor"]
27    rcParams["axes.facecolor"] = "black"
28    rcParams["text.color"] = "white"
29    rcParams["axes.edgecolor"] = "white"
30    rcParams["axes.labelcolor"] = "white"
31    rcParams["xtick.color"] = "white"
32    rcParams["ytick.color"] = "white"
33    rcParams["grid.color"] = "white"
34    rcParams["lines.color"] = "white"

Use a dark style for matplotlib plots.

def get_effective_response( E_signal, E_reference, dt: float, filter_f0: float, filter_sigma: float, filter_order: int):
122def get_effective_response(
123    E_signal,
124    E_reference,
125    dt: float,
126    filter_f0: float,
127    filter_sigma: float,
128    filter_order: int,
129):
130    """
131    Calculate the effective impulse response with the reactive response removed
132
133    Args:
134        E_signal: the signal waveform array
135        E_reference: the reference waveform
136        dt (float): the time step
137        filter_f0 (float): central frequency of the bandpass
138        filter_sigma (float): width of the bandpass
139        filter_order (int): order of the bandpass
140
141    Returns:
142        np.ndarray: the impuse response
143    """
144
145    analytic_signal = sig.hilbert(np.real(E_signal))
146    analytic_reference = sig.hilbert(np.real(E_reference))
147
148    response = filtered_impulse_response(
149        analytic_signal, analytic_reference, dt, filter_f0, filter_sigma, filter_order
150    )
151    window_response = filtered_impulse_response(
152        analytic_reference,
153        analytic_reference,
154        dt,
155        filter_f0,
156        filter_sigma,
157        filter_order,
158    )
159    matched_window_response = minimize_response_difference(response, window_response)
160    return np.real(response - matched_window_response)

Calculate the effective impulse response with the reactive response removed

Arguments:
  • E_signal: the signal waveform array
  • E_reference: the reference waveform
  • dt (float): the time step
  • filter_f0 (float): central frequency of the bandpass
  • filter_sigma (float): width of the bandpass
  • filter_order (int): order of the bandpass
Returns:

np.ndarray: the impuse response