Concepts¶
Granules and frames¶
A DISP granule is one NetCDF file holding the displacement between two dates, a reference date and a secondary date, on a fixed grid called a frame. A DISP-S1 frame is about 7,000 x 9,000 pixels at 30 m in a UTM zone. A frame's history is a few hundred granules.
Ministacks and reference dates¶
The processor (dolphin) works on ministacks: blocks of about 15 acquisitions that share one reference date. Every granule in a ministack measures displacement from that ministack's reference date, so the raw series restarts at zero at each new ministack.
The next ministack's reference date is the last secondary date of the
previous one. That shared epoch, the crossover, links them:
chain adds to each ministack the
displacement accumulated at its crossover, so the whole series becomes
relative to the first reference date. A missing crossover granule breaks the
chain, and chain raises MissingCrossoverError. A NaN at a crossover
makes later epochs of that pixel NaN (nan_policy="propagate", the default).
open_disp returns the series as stored, relative to each ministack
reference; reference_time says which one. chain returns it chained,
with attrs["reference_date"] set and a zero epoch prepended at the first
reference date.
Spatial reference¶
DISP displacement is relative to a reference point chosen by the processor.
rereference subtracts, at every epoch,
the value of a pixel you choose or the median of an area, so the series is
relative to ground you trust.
Units and sign¶
Products store meters, positive toward the satellite (uplift or motion along
the look direction toward it). to_units
converts length layers to cm or mm; plots use mm by default.
Quality layers¶
Each granule carries quality layers alongside displacement:
| Layer | Meaning |
|---|---|
recommended_mask |
1 where the processor recommends the pixel |
temporal_coherence, phase_similarity |
0 to 1; higher is better |
connected_component_labels |
unwrapping regions; 0 is unreliable |
water_mask |
0 over water |
persistent_scatterer_mask |
1 for persistent scatterers |
shp_counts, estimated_phase_quality, timeseries_inversion_residuals |
diagnostics |
mask sets displacement to NaN where pixels
fail: the "recommended" preset uses recommended_mask, "strict" adds
connected components, water and a temporal-coherence threshold.
quality_summary maps how often
each pixel passes.
Corrections¶
The /corrections group holds the ionospheric delay and solid-earth tide that
the processor estimated but did not subtract.
correct subtracts them once, before
chaining, and records what it applied; it refuses a correction the product
already applied (DISP-NISAR ionosphere).
Chunks¶
Data is opened lazily in the layout of the files: one epoch and one block per
dask chunk (chunks="native"). Each operation then reads what it needs:
| Question | Reads |
|---|---|
| a map of one epoch | that epoch, plus one crossover epoch per earlier ministack |
| a pixel's time series | one block from every granule |
| a per-pixel fit | rechunks to whole time series itself |
rechunk switches layouts when one kind of
access repeats. Stores written with to_zarr choose their layout with
preset=: "timeseries" for per-pixel work, "maps" for maps.