#!/usr/bin/env python3 from copy import deepcopy from warnings import filterwarnings from gettext import install from logging import basicConfig, getLogger from pathlib import Path from rich.logging import RichHandler from matplotlib.pyplot import figure, show from backscattering_analyzer import Experiment, AcquisitionType, Sneb, Sweb, Sdb1, Sdb2 # pyright: ignore[reportMissingTypeStubs] from backscattering_analyzer.bench import Bench # pyright: ignore[reportMissingTypeStubs] from backscattering_analyzer.utils import fit_projection from science_signal.signal import Signal # pyright: ignore[reportMissingTypeStubs] install(__name__) filterwarnings("error") basicConfig( level="INFO", format="%(message)s", datefmt="[%X]", handlers=[RichHandler()], ) logger = getLogger(__name__) sneb: Bench = Sneb() excited: Experiment = Experiment( "2024_10_31", set([sneb]), Path("/home/demagny/data"), AcquisitionType.EXCITED ) nb_point = 60000 cut_excited = Signal( excited.sensitivity.data.x[:-nb_point], excited.sensitivity.data.y[:-nb_point], ) cut_movement = Signal( excited.get_bench("SNEB").movement.x[:-nb_point], excited.get_bench("SNEB").movement.y[:-nb_point], ) excited.sensitivity.data = cut_excited excited.get_bench("SNEB").movement = cut_movement show_sensitivity = excited.sensitivity.data.psd().sqrt() reference = Experiment( "2024_10_31", set([deepcopy(sneb)]), Path("/home/demagny/data"), AcquisitionType.REFERENCE, ) if reference.sensitivity.data is None: raise Exception(_("reference experiment does not have any sensitivity data")) factors, diff = fit_projection( excited, reference, ) excited.projection.scatter_factor = factors excited.projection.compute() projection = reference.sensitivity.data.psd().sqrt() + excited.projection.data fig = figure(figsize=(20, 10)) fig.gca().loglog(show_sensitivity.x, show_sensitivity.y, label=_("excited sensitivity")) fig.gca().loglog( projection.x, projection.y, label=_("projection + reference sensitivity") ) fig.gca().legend() fig.gca().grid(True, "both") fig.gca().set_xlim(5, 100) fig.gca().set_ylim(10e-28, 10e-18) fig.gca().set_title(_("SNEB")) fig.gca().set_xlabel(_("frequencies (Hz)")) fig.gca().set_ylabel(_("sensitivity ($\\frac{1} {\\sqrt {Hz}}$)")) fig.savefig("SNEB.png") with open("SNEB.csv", "w") as f: f.write( """ # bench value SNEB {} """.format(factors["SNEB"]) )