Source code for swot_simulator.error.karin

# Copyright (c) 2020 CNES/JPL
#
# All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
"""
Karin noise
-----------
"""
from typing import Dict
import numpy as np

from . import utils
from .. import settings


[docs]class Karin: """Karin instrumental error computed from random realization Args: parameters (settings.Parameters): Simulation settings """
[docs] def __init__(self, parameters: settings.Parameters) -> None: assert parameters.karin_noise is not None # Store the generation parameters of the random signal. self.hsdt, self.x_ac, self.swh = utils.read_file_karin( parameters.karin_noise) self.delta_ac = parameters.delta_ac self.delta_al = parameters.delta_al self.nrand_karin = parameters.nrand_karin self.nseed = parameters.nseed
[docs] def generate(self, x_al: np.array, x_ac: np.array, swh: np.array) -> Dict[str, np.ndarray]: """Generate the karin noise Args: x_al (numpy.ndarray): Along track distance x_ac (numpy.ndarray): Across track distance swh (numpy.ndarray): Significant wave height. Used to modulate instrumental noise as a function of sea state. Returns: dict: variable name and errors simulated. """ num_pixels = x_ac.shape[0] # Generate random noise for left and right part of the mast np.random.seed(self.nseed + 1) a_karin = np.random.normal(0, 1, (self.nrand_karin, num_pixels)) # Formula of karin noise as a function of x_ac (smile shape) sigma_karin = utils.interpolate_file_karin(swh, x_ac, self.hsdt, self.x_ac, self.swh) size_grid = np.sqrt(self.delta_al * self.delta_ac) sigma_karin = sigma_karin / size_grid # Compute random karin error ai = ((x_al / self.delta_al) % self.nrand_karin).astype(np.uint64) return {"simulated_error_karin": sigma_karin * a_karin[ai, :]}