Source code for microcalorimetry.analysis._misc

import microcalorimetry.configs as configs
import microcalorimetry.math.rfpower as rfpower
from rmellipse.uobjects import RMEMeas
from rmellipse.propagators import RMEProp
import matplotlib.pyplot as plt
import numpy as np

__all__ = ['compression_check']


[docs] def compression_check( power: configs.RFSweep, power_minus_1dB: configs.RFSweep, k: int = 2 ) -> tuple[configs.RFSweep, plt.Figure]: """ Check the compression ratio of of a measurement. Requires a parsed rfsweep at desired power, and another at the same frequency list backed off on the source by 1 dBm. Parameters ---------- power : configs.RFSweep Power of sensor at desired output. power_minus_1dB : configs.RFSweep Power measured by sensor backed off by 1dB at source from desired output. k : int, optional Expansion factor to plot. The default is 2. Returns ------- compression_ratio : RMEMeas Compression ratio. fig : plt.Figure Figure object. """ prop = RMEProp(sensitivity=True) get_compression = prop.propagate(rfpower.compression_ratio) pwr = configs.RFSweep(power).load() pwr_m1 = configs.RFSweep(power_minus_1dB).load() ratio = get_compression(pwr, pwr_m1) # do uncertanties in linear lande fig, ax = plt.subplots(1, 1) unc = ratio.stdunc(k=k).cov ax.axhline(0.4, color='r', ls='--', label='Acceptable Limit') ax.errorbar( ratio.nom.frequency, ratio.nom, yerr=unc, ls='', capsize=5, label='Measured' ) ax.set_xlabel('Frequency (GHz)') ax.set_ylabel('Compression Ratio (dB)') ax.set_title('Compression Check') ax.legend(loc='best') return ratio, fig