예제 #1
0
파일: slr.py 프로젝트: mfkiwl/where
def estimate(stage, dset):
    """Filter residuals

    Args:
        prev_stage (String): Name of previous stage.
        stage (String):      Name of current stage.
    """

    partial_vectors = estimation.partial_vectors(dset, "estimate_method")
    max_iterations = config.tech.estimate_max_iterations.int

    for iter_num in itertools.count(start=1):
        log.info(f"Estimating parameters for iteration {iter_num}")
        estimation.call(
            "estimate_method",
            dset=dset,
            partial_vectors=partial_vectors,
            obs_noise=None  # TODO: Add something here
        )
        rms = dset.rms("residual")
        log.info(f"{dset.num_obs} observations, postfit residual = {rms:.4f}")
        dset.write_as(stage=stage,
                      label=iter_num - 1,
                      sat_name=dset.vars["sat_name"])

        # TODO:
        # Do some iteration with removal of outliers?
        break

        if iter_num >= max_iterations:
            break

    estimation.solve_neq(dset)
    dset.write()
예제 #2
0
파일: vlbi.py 프로젝트: kartverket/where
def estimate(stage, dset):
    """Filter residuals

    Args:
        rundate (Datetime):  The model run date.
        session (String):    Name of session.
        prev_stage (String): Name of previous stage.
        stage (String):      Name of current stage.
    """
    max_iterations = config.tech.estimate_max_iterations.int
    delay_unit = "meter"

    for iter_num in itertools.count(start=1):
        partial_vectors = estimation.partial_vectors(dset, "estimate_method")
        obs_noise = dset.observed_delay_ferr**2 + np.nan_to_num(
            dset.iono_delay_ferr)**2 + 0.01**2
        log.info(
            f"Estimating parameters for iteration {iter_num} using Kalman Filter and continuous piecewise linear functions"
        )
        estimation.call("estimate_method",
                        dset=dset,
                        partial_vectors=partial_vectors,
                        obs_noise=obs_noise)
        rms = dset.rms("residual")
        log.info(
            f"{dset.num_obs} observations, rms of postfit residuals = {rms:.4f} {delay_unit}"
        )

        dset.write_as(stage=stage, label=iter_num - 1)
        if iter_num >= max_iterations:
            break

        # Detect and remove outliers
        num_obs_before = dset.num_obs
        independent = config.tech.estimate_obs_rejectors_independent.bool
        dset = estimation.apply_observation_rejectors("estimate_obs_rejectors",
                                                      dset, independent)
        log.blank()
        if dset.num_obs == num_obs_before or dset.num_obs == 0:
            break

    log.blank()
    if dset.num_obs > 0:
        estimation.solve_neq(dset)

    dset.write()
예제 #3
0
def estimate(stage, dset):
    """Filter residuals

    Args:
        rundate (Datetime):  The model run date.
        session (String):    Name of session.
        prev_stage (String): Name of previous stage.
        stage (String):      Name of current stage.
    """
    max_iterations = config.tech.estimate_max_iterations.int

    for iter_num in itertools.count(start=1):
        partial_vectors = estimation.partial_vectors(dset, "estimate_method")
        log.info(f"Estimating parameters for iteration {iter_num}")
        estimation.call(
            "estimate_method",
            dset=dset,
            partial_vectors=partial_vectors,
            obs_noise=dset.observed_delay_ferr ** 2 + 0.01 ** 2,
        )
        rms = dset.rms("residual")
        log.info(f"{dset.num_obs} observations, postfit residual = {rms:.4f}")
        dset.write_as(stage=stage, label=iter_num - 1)
        if iter_num >= max_iterations:
            break

        # Detect and remove outliers
        num_obs_before = dset.num_obs
        independent = config.tech.estimate_obs_rejectors_independent.bool
        dset = estimation.apply_observation_rejectors("estimate_obs_rejectors", dset, independent)
        log.blank()
        if dset.num_obs == num_obs_before:
            break

    estimation.solve_neq(dset)
    dset.write()