Пример #1
0
def test_retrieval_runs():
    """
    """
    mwi = ICI(stokes_dimension = 1)
    mwi.name = "mwi"
    mwi.f_grid = np.array([19e9, 35e9, 89e9, 118e9])
    mwi.sensor_line_of_sight = np.array([[135.0]])
    mwi.sensor_position = np.array([[600e3]])

    simulation = setup_retrieval_simulation(retrieval_type = "passive",
                                            scattering = False)
    simulation._sensors += [mwi]

    def get_o2(self):
        return 0.2091 * np.ones(21)

    data_provider = DataProvider()

    simulation.data_provider = data_provider
    simulation.setup()
    simulation.run()

    data_provider.get_O2 = get_o2.__get__(data_provider)
    # H2O a priori
    h2o_a_priori         = FixedAPriori("H2O", 0.5, Diagonal(0.01))
    data_provider.add(h2o_a_priori)

    # O2 a priori
    o2_a_priori         = FixedAPriori("O2", 1.0, Diagonal(0.001))
    data_provider.add(o2_a_priori)

    # observation error a priori
    n = 0
    for s in simulation.sensors:
        n += s.f_grid.size * s.stokes_dimension
    measurement_a_priori = IndependentMeasurementErrors(n, 1.0)
    data_provider.add(measurement_a_priori)

    h2o = simulation.atmosphere.absorbers[-1]
    simulation.retrieval.add(h2o)
    h2o.retrieval.unit = RelativeHumidity()

    o2  = simulation.atmosphere.absorbers[0]
    simulation.retrieval.add(o2)
    o2.retrieval.unit = Relative(0.2091 * np.ones((21, 1, 1)))


    y = np.copy(simulation.workspace.y)
    simulation.retrieval.y = y

    def remove_mwi_o2(retrieval_run):
        retrieval_run.sensors = retrieval_run.sensors[:1]
        retrieval_run.retrieval_quantities = retrieval_run.retrieval_quantities[:1]

    simulation.retrieval.callbacks = [remove_mwi_o2, None]

    simulation.setup()
    simulation.run()

    return simulation.workspace.x.value
Пример #2
0
def test_simulation_telsem():
    atmosphere = Atmosphere1D(absorbers=[O2(), N2(), H2O()],
                              surface=Telsem("/home/simon/Downloads"))
    mwi = MWI()
    mwi.sensor_line_of_sight = np.array([[135.0]])
    mwi.sensor_position = np.array([[600e3]])

    data_provider = DataProvider()
    data_provider.surface_temperature = 280.0 * np.ones((1, 1))
    data_provider.latitude = 58.0
    data_provider.longitude = 12.0
    simulation = ArtsSimulation(atmosphere=atmosphere,
                                data_provider=data_provider,
                                sensors=[mwi])
    simulation.setup()
    simulation.run()
Пример #3
0
def test_simulation_scattering_combined(scattering_solver):

    ice = ScatteringSpecies("ice", D14(-1.0, 2.0),
                            scattering_data = scattering_data,
                            scattering_meta_data = scattering_meta)
    ice.psd.t_min = 0.0
    ice.psd.t_max = 275.0

    ici = ICI(channel_indices = [0, -1], stokes_dimension = 1)
    ici.sensor_line_of_sight = np.array([[135.0]])
    ici.sensor_position = np.array([[600e3]])

    cs = CloudSat(stokes_dimension = 1)
    cs.range_bins = np.linspace(0, 30e3, 31)
    cs.sensor_line_of_sight = np.array([[135.0]])
    cs.sensor_position = np.array([[600e3]])

    atmosphere = Atmosphere1D(absorbers = [O2(), N2(), H2O()],
                              scatterers = [ice],
                              surface = Tessem())
    simulation = ArtsSimulation(atmosphere = atmosphere,
                                data_provider = DataProvider(),
                                sensors = [ici, cs])

    simulation.scattering_solver = scattering_solver()
    simulation.setup()
    simulation.run()
    y = np.copy(simulation.workspace.y)
    return y
Пример #4
0
def test_masks():
    data_provider = DataProvider()
    temperature = data_provider.get_temperature()

    temperature_mask = TemperatureMask(lower_limit=230.0, upper_limit=280.0)
    mask = temperature_mask(data_provider)
    assert (np.all(temperature[mask] >= 230))
    assert (np.all(temperature[mask] < 280))

    tropopause_mask = TropopauseMask()
    mask = tropopause_mask(data_provider)
    assert (np.all(temperature[mask]) <= 225)

    mask = And(temperature_mask, tropopause_mask)(data_provider)
    assert (np.all(temperature[mask] >= 230))
    assert (np.all(temperature[mask] < 280))
    assert (np.all(temperature[mask]) <= 225)
Пример #5
0
def test_covariances():
    data_provider = DataProvider()
    z = data_provider.get_altitude()
    diagonal = Diagonal(2)
    diag = diagonal.get_covariance(data_provider)
    assert (np.all(np.isclose(diag.diagonal(), 2.0 * np.ones(z.size))))

    gauss = SpatialCorrelation(diagonal, 1000.0)
    covmat = gauss.get_covariance(data_provider)
    assert (np.all(np.isclose(covmat.diagonal(), 2.0 * np.ones(z.size))))

    temperature_mask = TemperatureMask(lower_limit=230.0, upper_limit=280.0)
    thik = Thikhonov(scaling=1.0, z_scaling=False, mask=temperature_mask)
    precmat = thik.get_precision(data_provider)

    mask = np.logical_not(temperature_mask(data_provider))
    assert (np.all(precmat.diagonal()[mask] >= 1e12))
    mask2 = np.logical_not(mask)[2:-2]
    assert (np.all(precmat.diagonal()[2:-2][mask2] == 6))
Пример #6
0
def test_scattering_retrieval_active():
    simulation = setup_retrieval_simulation(retrieval_type = "active",
                                            scattering = True)
    data_provider = DataProvider()
    simulation.data_provider = data_provider
    simulation.setup()
    simulation.run()
    y = np.copy(simulation.workspace.y)

    ice = simulation.atmosphere.scatterers[0]
    simulation.retrieval.add(ice.mass_density)
    ice.mass_density.limit_low = 1e-6
    simulation.retrieval.settings["max_iter"] = 5
    ice.mass_density.transformation = Log10()

    # Ice a priori
    ice_a_priori         = FixedAPriori("ice_mass_density", -6, Diagonal(2.0))
    data_provider.add(ice_a_priori)

    # Observation error a priori
    n = simulation.sensors[0].range_bins.size - 1
    measurement_a_priori = IndependentMeasurementErrors(n, 1.0)
    data_provider.add(measurement_a_priori)

    simulation.retrieval.y = y
    simulation.setup()
    simulation.run()
    return simulation.workspace
Пример #7
0
def test_simulation_absorption_retrieval():
    """
    This test runs a passive clearsky water vapor retrieval retrieving
    relative humidity.
    """
    simulation = setup_retrieval_simulation(retrieval_type = "passive",
                                            scattering = False)
    data_provider = DataProvider()
    simulation.data_provider = data_provider
    simulation.setup()
    simulation.run()

    # H2O a priori
    h2o_a_priori         = FixedAPriori("H2O", 0.5, Diagonal(0.01))
    data_provider.add(h2o_a_priori)

    n = simulation.sensors[0].f_grid.size * simulation.sensors[0].stokes_dimension
    measurement_a_priori = IndependentMeasurementErrors(n, 1.0)
    data_provider.add(measurement_a_priori)

    h2o = simulation.atmosphere.absorbers[-1]
    y = np.copy(simulation.workspace.y)
    simulation.retrieval.add(h2o)
    h2o.retrieval.unit = RelativeHumidity()
    simulation.retrieval.y = y

    simulation.setup()
    simulation.run()

    return simulation.workspace.x.value
Пример #8
0
def test_scattering_retrieval_passive():
    simulation = setup_retrieval_simulation(retrieval_type = "passive",
                                            scattering = True)
    data_provider            = DataProvider()
    simulation.data_provider = data_provider
    simulation.setup()
    simulation.run()
    y = np.copy(simulation.workspace.y)

    ice = simulation.atmosphere.scatterers[0]
    simulation.retrieval.add(ice.mass_density)
    ice.mass_density.transformation = Log10()
    ice.mass_density.limit_low = -10
    simulation.retrieval.settings["max_iter"] = 1

    ice_a_priori         = FixedAPriori("ice_mass_density", -6, Diagonal(2.0))
    data_provider.add(ice_a_priori)

    n = simulation.sensors[0].f_grid.size * simulation.sensors[0].stokes_dimension
    measurement_a_priori = IndependentMeasurementErrors(n, 1.0)
    data_provider.add(measurement_a_priori)

    simulation.retrieval.y = y
    simulation.setup()
    simulation.run()
    return simulation.workspace
Пример #9
0
def test_scattering_combined_retrieval():

    simulation = setup_retrieval_simulation(retrieval_type = "combined",
                                            scattering = True)
    data_provider = DataProvider()
    simulation.data_provider = data_provider
    simulation.sensors[1].stokes_dimension = 1
    simulation.setup()

    # Forward simulation
    simulation.run()
    y = np.copy(simulation.workspace.y)

    ice = simulation.atmosphere.scatterers[0]
    simulation.retrieval.add(ice.mass_density)
    simulation.retrieval.add(ice.mass_weighted_diameter)

    ice.mass_density.retrieval.limit_low = -10
    ice.mass_density.transformation = Log10()

    ice.mass_weighted_diameter.retrieval.limit_low = -6
    ice.mass_weighted_diameter.transformation = Log10()


    # Ice a prioris

    ice_a_priori         = FixedAPriori("ice_mass_density", -6, Diagonal(2.0))
    data_provider.add(ice_a_priori)
    ice_a_priori         = FixedAPriori("ice_mass_weighted_diameter", -3, Diagonal(2.0))
    data_provider.add(ice_a_priori)

    # Observation errors

    n  = simulation.sensors[0].range_bins.size - 1
    n += simulation.sensors[1].f_grid.size * simulation.sensors[1].stokes_dimension
    measurement_a_priori = IndependentMeasurementErrors(n, 1.0)
    data_provider.add(measurement_a_priori)

    print(ice.mass_density.transformation)
    simulation.retrieval.settings["max_iter"] = 1
    simulation.retrieval.y = y

    # Retrieval
    simulation.workspace.x = []
    simulation.run()
    y_f = np.copy(simulation.workspace.yf.value)
    x   = np.copy(simulation.workspace.x.value)
    return simulation
Пример #10
0
def test_data_provider_a_priori():
    temperature_mask = TemperatureMask(lower_limit=230.0, upper_limit=280.0)
    tropopause_mask = TropopauseMask()
    covariance = Diagonal(2.0, And(temperature_mask, tropopause_mask))
    data_provider = DataProvider()
    data_provider.add(DataProviderAPriori("temperature", covariance))

    t = data_provider.get_temperature()
    assert (np.all(data_provider.get_temperature_xa() == t))
Пример #11
0
def test_simulation_combined():
    surface_1 = Tessem()
    surface_2 = Telsem("/home/simon/Downloads")
    surface = CombinedSurface(surface_1, surface_2)
    atmosphere = Atmosphere1D(absorbers=[O2(), N2(), H2O()], surface=surface)
    mwi = MWI()
    mwi.sensor_line_of_sight = np.array([[135.0]])
    mwi.sensor_position = np.array([[600e3]])

    data_provider = DataProvider()
    data_provider.surface_temperature = 280.0 * np.ones((1, 1))
    data_provider.surface_latitude = 58.0
    data_provider.surface_longitude = 12.0
    data_provider.surface_type = 0.0

    simulation = ArtsSimulation(atmosphere=atmosphere,
                                data_provider=data_provider,
                                sensors=[mwi])

    simulation.setup()
    simulation.run()
    y = np.copy(mwi.y)

    atmosphere_r = Atmosphere1D(absorbers=[O2(), N2(), H2O()],
                                surface=surface_1)
    simulation_r = ArtsSimulation(atmosphere=atmosphere_r,
                                  data_provider=data_provider,
                                  sensors=[mwi])
    simulation_r.setup()
    simulation_r.run()
    y_r = np.copy(mwi.y)

    assert (np.allclose(y, y_r))

    data_provider.surface_type = 1.0
    simulation.setup()
    simulation.run()
    y = np.copy(mwi.y)

    atmosphere_r = Atmosphere1D(absorbers=[O2(), N2(), H2O()],
                                surface=surface_2)
    simulation_r = ArtsSimulation(atmosphere=atmosphere_r,
                                  data_provider=data_provider,
                                  sensors=[mwi])
    simulation_r.setup()
    simulation_r.run()
    y_r = np.copy(mwi.y)

    assert (np.allclose(y, y_r))
Пример #12
0
def test_functional_a_priori():
    temperature_mask = TemperatureMask(lower_limit=230.0, upper_limit=280.0)
    tropopause_mask = TropopauseMask()
    covariance = Diagonal(2.0, And(temperature_mask, tropopause_mask))
    covariance_new = Diagonal(2.0 * np.ones(10))

    data_provider = DataProvider()
    t = data_provider.get_temperature()
    f = lambda x: x**2
    a_priori = FunctionalAPriori("temperature", "temperature", f, covariance)
    data_provider.add(a_priori)
    assert (np.all(np.isclose(t**2, data_provider.get_temperature_xa())))
Пример #13
0
def test_simulation_tessem():
    atmosphere = Atmosphere1D(absorbers=[O2(), N2(), H2O()], surface=Tessem())
    mwi = MWI()
    mwi.sensor_line_of_sight = np.array([[135.0]])
    mwi.sensor_position = np.array([[600e3]])

    simulation = ArtsSimulation(atmosphere=atmosphere,
                                data_provider=DataProvider(),
                                sensors=[mwi])
    simulation.setup()
    simulation.run()

    y1 = np.copy(mwi.y)

    simulation.run()
    y2 = np.copy(mwi.y)

    assert (np.all(np.isclose(y1, y2)))
Пример #14
0
def test_simulation_absorption_jacobian():
    atmosphere = Atmosphere1D(absorbers = [O2(), N2(), H2O()],
                              surface = Tessem())
    o2, n2, h2o = atmosphere.absorbers

    ici = ICI(channel_indices = [0, -1])
    ici.sensor_line_of_sight = np.array([[135.0]])
    ici.sensor_position = np.array([[600e3]])

    simulation = ArtsSimulation(atmosphere = atmosphere,
                                data_provider = DataProvider(),
                                sensors = [ici])
    simulation.jacobian.add(o2)
    simulation.jacobian.add(n2)
    simulation.jacobian.add(h2o)
    simulation.setup()
    simulation.run()
    return np.copy(simulation.workspace.jacobian.value)
Пример #15
0
def test_simulation_multiview():
    atmosphere = Atmosphere1D(absorbers = [O2(), N2(), H2O()],
                              surface = Tessem())
    lines_of_sight = np.array([[135.0],
                               [180.0]])
    positions = np.array([[600e3],
                          [600e3]])

    ici = ICI(lines_of_sight=lines_of_sight,
              positions=positions)

    simulation = ArtsSimulation(atmosphere = atmosphere,
                                data_provider = DataProvider(),
                                sensors = [ici])
    simulation.setup()
    simulation.run()

    y = np.copy(ici.y)
    assert(y.shape[0] == 2)
Пример #16
0
def test_simulation_scattering(scattering_solver):

    ice = ScatteringSpecies("ice", D14(-1.0, 2.0),
                            scattering_data = scattering_data,
                            scattering_meta_data = scattering_meta)
    ice.psd.t_min = 0.0
    ice.psd.t_max = 275.0

    atmosphere = Atmosphere1D(absorbers = [O2(), N2(), H2O()],
                              scatterers = [ice],
                              surface = Tessem())
    ici = ICI(stokes_dimension = 1, channel_indices = [1, -1])
    ici.sensor_line_of_sight = np.array([[135.0]])
    ici.sensor_position = np.array([[600e3]])

    simulation = ArtsSimulation(atmosphere = atmosphere,
                                data_provider = DataProvider(),
                                sensors = [ici])
    simulation.scattering_solver = scattering_solver()
    simulation.setup()
    simulation.run()
Пример #17
0
def test_simulation_scattering_jacobian():

    ice = ScatteringSpecies("ice", D14(-1.0, 2.0),
                            scattering_data = scattering_data,
                            scattering_meta_data = scattering_meta)
    ice.psd.t_min = 0.0
    ice.psd.t_max = 275.0

    atmosphere = Atmosphere1D(absorbers = [O2(), N2(), H2O()],
                              scatterers = [ice],
                              surface = Tessem())
    ici = ICI(channel_indices = [1, -1])
    ici.sensor_line_of_sight = np.array([[135.0]])
    ici.sensor_position = np.array([[600e3]])

    simulation = ArtsSimulation(atmosphere = atmosphere,
                                data_provider = DataProvider(),
                                sensors = [ici])
    simulation.jacobian.add(ice.mass_density)
    simulation.setup()
    simulation.run()
    print(simulation.workspace.particle_bulkprop_field.value)
    return np.copy(simulation.workspace.jacobian.value)
Пример #18
0
def test_reduced_grid_a_priori():
    tropopause_mask = TropopauseMask()
    temperature_mask = TemperatureMask(lower_limit=230.0, upper_limit=280.0)
    covariance = Diagonal(2.0, And(temperature_mask, tropopause_mask))
    covariance_new = Diagonal(2.0 * np.ones(10))

    data_provider = DataProvider()
    t = data_provider.get_temperature()
    a_priori = FixedAPriori("temperature", t, covariance)
    a_priori = ReducedVerticalGrid(a_priori, np.logspace(3, 5, 10)[::-1])
    data_provider.add(a_priori)

    t_xa = data_provider.get_temperature_xa()
    assert (t_xa.size == 10)

    covmat = data_provider.get_temperature_covariance()
    assert (covmat.shape == (10, 10))

    data_provider = DataProvider()
    a_priori = ReducedVerticalGrid(a_priori,
                                   np.logspace(3, 5, 10)[::-1],
                                   covariance=covariance_new)
    data_provider.add(a_priori)
    covmat = data_provider.get_temperature_covariance()
    assert (np.all(covmat.diagonal() == 2.0))
Пример #19
0
                                data_provider = DataProvider(),
                                sensors = [cs])
    simulation.setup()
    simulation.run()

    y = np.copy(cs.y)
    assert(y.shape[0] == 2)
    assert(y.shape[-1] == 2)


ice = ScatteringSpecies("ice", D14(-1.0, 2.0),
                        scattering_data = scattering_data,
                        scattering_meta_data = scattering_meta)
ice.psd.t_min = 0.0
ice.psd.t_max = 275.0

atmosphere = Atmosphere1D(absorbers = [O2(), N2(), H2O()],
                            scatterers = [],
                            surface = Tessem())
ici = ICI(stokes_dimension = 1, channel_indices = [1, -1])
ici.sensor_line_of_sight = np.array([[135.0]])
ici.sensor_position = np.array([[600e3]])

simulation = ArtsSimulation(atmosphere = atmosphere,
                            data_provider = DataProvider(),
                            sensors = [ici])
simulation.scattering_solver = RT4()
simulation.setup()
for i in range(100):
    simulation.run()