Skip to content

Commit

Permalink
fix bug so that orbital correction is not re-done if previously applied
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Garthwaite authored and Matt Garthwaite committed Mar 23, 2017
1 parent 71394e6 commit b1c8922
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 16 deletions.
20 changes: 12 additions & 8 deletions pyrate/orbital.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,8 +400,6 @@ def remove_orbital_error(ifgs, params, preread_ifgs=None):
preread_ifgs: dict, optional
dict containing information regarding MPI jobs
"""
log.info('Calculating orbital error correction')

if not params[cf.ORBITAL_FIT]:
log.info('Orbital correction not required')
return
Expand All @@ -411,7 +409,8 @@ def remove_orbital_error(ifgs, params, preread_ifgs=None):
_ = [preread_ifgs.pop(k) for k in ['gt', 'epochlist', 'md', 'wkt']]
# perform some general error/sanity checks
if mpiops.rank == 0:
_check_orbital_ifgs(preread_ifgs)
if _check_orbital_ifgs(preread_ifgs):
return # return if True condition returned

ifg_paths = [i.data_path for i in ifgs] \
if isinstance(ifgs[0], Ifg) else ifgs
Expand Down Expand Up @@ -441,15 +440,18 @@ def remove_orbital_error(ifgs, params, preread_ifgs=None):


def _check_orbital_ifgs(preread_ifgs): # pragma: no cover

"""
Check if the correction has already been performed in a previous run
"""
log.info('Checking Orbital error status')
ifg_paths = sorted(preread_ifgs.keys())
# preread_ifgs[i].metadata contains ifg metadata
flags = [ifc.PYRATE_ORBITAL_ERROR in preread_ifgs[i].metadata
for i in ifg_paths]
if all(flags):
log.info('Skipped orbital correction, ifgs already corrected')
return
if (sum(flags) < len(flags)) and (sum(flags) > 0):
log.info('Skipped orbital corrections, ifgs already corrected')
return True
elif (sum(flags) < len(flags)) and (sum(flags) > 0):
log.debug('Detected mix of corrected and uncorrected '
'orbital error in ifgs')

Expand All @@ -460,4 +462,6 @@ def _check_orbital_ifgs(preread_ifgs): # pragma: no cover
msg = '{}: no orbital correction detected'.format(i)
log.debug(msg)
raise OrbitalError(msg)
log.info('Orbital error status checked')
else:
log.info('Calculating orbital corrections')
return False
16 changes: 8 additions & 8 deletions pyrate/scripts/run_pyrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ def save_ref_pixel_blocks(grid, half_patch_size, ifg_paths, params):

def orb_fit_calc(ifg_paths, params, preread_ifgs=None):
"""
Orbital fit correction
MPI wrapper for orbital fit correction
Parameters
----------
Expand All @@ -302,7 +302,7 @@ def orb_fit_calc(ifg_paths, params, preread_ifgs=None):
params: dict
parameters dict corresponding to config file
"""
log.info('Calculating orbfit correction')
#log.info('Calculating orbfit correction')
if params[cf.ORBITAL_FIT_METHOD] == 1:
prcs_ifgs = mpiops.array_split(ifg_paths)
orbital.remove_orbital_error(prcs_ifgs, params, preread_ifgs)
Expand All @@ -315,7 +315,7 @@ def orb_fit_calc(ifg_paths, params, preread_ifgs=None):
if mpiops.rank == MASTER_PROCESS:
orbital.remove_orbital_error(ifg_paths, params, preread_ifgs)
mpiops.comm.barrier()
log.info('Finished orbfit calculation in process {}'.format(mpiops.rank))
#log.info('Finished orbfit calculation in process {}'.format(mpiops.rank))


def ref_phase_estimation(ifg_paths, params, refpx, refpy):
Expand Down Expand Up @@ -484,7 +484,7 @@ def process_ifgs(ifg_paths, params, rows, cols):

# calculate maxvar and alpha values
maxvar = maxvar_alpha_calc(ifg_paths, params, preread_ifgs)

# assemble variance-covariance matrix
vcmt = vcm_calc(preread_ifgs, maxvar)
save_numpy_phase(ifg_paths, tiles, params)
Expand Down Expand Up @@ -568,16 +568,16 @@ def maxvar_alpha_calc(ifg_paths, params, preread_ifgs):
'to this process, out of a total {} ifgs'.format(
n+1, len(prcs_ifgs), len(ifg_paths)))
# TODO: cvd calculation is still pretty slow - revisit
process_maxvar.append(vcm_module.cvd(i, params, calc_alpha=False, write_values=True)[0])
process_maxvar.append(vcm_module.cvd(i, params, calc_alpha=True, write_values=True)[0])
if mpiops.rank == MASTER_PROCESS:
maxvar = np.empty(len(ifg_paths), dtype=np.float64)
maxvar[process_indices] = process_maxvar
for i in range(1, mpiops.size): # pragma: no cover
rank_indices = mpiops.array_split(range(len(ifg_paths)), i)
this_process_ref_phs = np.empty(len(rank_indices),
this_process_maxvar = np.empty(len(rank_indices),
dtype=np.float64)
mpiops.comm.Recv(this_process_ref_phs, source=i, tag=i)
maxvar[rank_indices] = this_process_ref_phs
mpiops.comm.Recv(this_process_maxvar, source=i, tag=i)
maxvar[rank_indices] = this_process_maxvar
else: # pragma: no cover
maxvar = np.empty(len(ifg_paths), dtype=np.float64)
mpiops.comm.Send(np.array(process_maxvar, dtype=np.float64),
Expand Down

0 comments on commit b1c8922

Please sign in to comment.