def test_other_algebraic_operations(verbose=True, plot=False, *args, **kwargs): # An implement of Spectrum Algebra # Reload: s = load_spec(getTestFile("CO_Tgas1500K_mole_fraction0.01.spec")) s.update() # Test addition of Spectra s.plot(lw=2, nfig="Merge: s//s") (s // s).plot(nfig="same") # Test substraction of Spectra s_tr = Transmittance_noslit(s) assert (s_tr - 1.0 * s_tr).get_integral("transmittance_noslit") == 0 # TODO: add test # @EP: the test fails at the moment because multiply only works with radiance, # and MergeSlabs only works with non convoluted quantities # Do we want that? Up for discussion... # There should be an error if algebraic operations are used when # multiple quantities are defined: with pytest.raises(KeyError): 2 * s s.apply_slit(0.1, "nm") s_rad = Radiance(s) # Test multiplication with float s.plot(lw=2, nfig="Multiplication (by scalar): 2*s", wunit="nm") # (s*s).plot(nfig='same') (2 * s_rad).plot(nfig="same", wunit="nm") # Test algebraic addition (vs multiplication) assert (s_rad + s_rad).compare_with(2 * s_rad, spectra_only="radiance", plot=False) # Test algebraic addition with different waveunits s_rad_nm = s_rad.resample(s_rad.get_wavelength(), "nm", inplace=False) s_sum = 2 * s_rad_nm - s_rad_nm s_sum.compare_with(s_rad, spectra_only="radiance", plot=True) assert (s_rad_nm + s_rad_nm).compare_with(2 * s_rad, spectra_only="radiance", plot=True, rtol=1e-3)
def test_multiplyAndAddition(verbose=True, plot=False, *args, **kwargs): s = load_spec(getTestFile("CO_Tgas1500K_mole_fraction0.01.spec"), binary=True) s.update("radiance_noslit", verbose=False) s.apply_slit(0.1) s = Radiance(s) assert s.units["radiance"] == "mW/cm2/sr/nm" s_bis = add_constant(s, 1, "mW/cm2/sr/nm") w, Idiff = get_diff(s_bis, s, "radiance") test = Idiff[1] - 1 assert np.all(test < 1e-10) s_ter = multiply(multiply(s, 50), 1 / 50) # plot_diff(s_ter, s_5) diff = get_diff(s_ter, s, "radiance") ratio = abs(np.trapz(diff[1], x=diff[0]) / s.get_integral("radiance")) assert ratio < 1e-10
def test_dimensioned_operations(*args, **kwargs): import astropy.units as u import numpy as np from radis import Radiance, load_spec from radis.spectrum import sub_baseline from radis.test.utils import getTestFile # Generate the equivalent of an experimental spectrum s = load_spec(getTestFile(r"CO_Tgas1500K_mole_fraction0.01.spec"), binary=True) s.update() # add radiance, etc. s.apply_slit(0.5) # nm s = Radiance(s) # Test assert s.units["radiance"] == "mW/cm2/sr/nm" Imax = s.get("radiance")[1].max() # add a baseline s += 0.1 * u.Unit("W/cm2/sr/nm") assert np.isclose(s.get("radiance")[1].max(), Imax + 100) # remove a baseline (we could also have used s=-0.1, but we're testing another function here) s = sub_baseline(s, 0.1 * u.Unit("W/cm2/sr/nm"), 0.1 * u.Unit("W/cm2/sr/nm")) assert np.isclose(s.get("radiance")[1].max(), Imax) # Test division # Example : a manual normalization s /= s.max() * u.Unit("mW/cm2/sr/nm") assert s.units["radiance"] == "" # normalized assert s.max() == 1.0 # Test Multiplication # example : a manual Calibration s.units["radiance"] = "count" s *= 100 * u.Unit("mW/cm2/sr/nm/count") assert u.Unit(s.units["radiance"]) == u.Unit( "mW/cm2/sr/nm") # check units are valid assert s.units[ "radiance"] == "mW / (cm2 nm sr)" # check units have been simplified