Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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