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()
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()
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()