Skip to content

[gui] Add arrival Set active/inactive by distance/azimuth/residual#204

Open
comoglu wants to merge 1 commit into
SeisComP:mainfrom
comoglu:feature/arrival-distance-filter
Open

[gui] Add arrival Set active/inactive by distance/azimuth/residual#204
comoglu wants to merge 1 commit into
SeisComP:mainfrom
comoglu:feature/arrival-distance-filter

Conversation

@comoglu

@comoglu comoglu commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds Set active by... / Set inactive by... submenus (Distance range, Residual threshold, Azimuth range) to scolv's arrival table right-click menu, and to the right-click menu on every plot tab (Distance, Azimuth, Travel time, Move-out, Polar).
  • Set active by X: resets state — arrivals matching the criterion are activated, everything else deactivated. Same mechanism as the existing plot drag-select (residualsSelected()), just typed/precise and available regardless of which tab happens to be open.
  • Set inactive by X: surgical — only deactivates matches, leaves everything else untouched. Useful for e.g. excluding a known-bad distance band or knocking out residual outliers without disturbing other manual choices.
  • Distance respects SCScheme.unit.distanceInKM, same as the DISTANCE column.

Background

Started from a simple "deactivate picks beyond a distance" request. @gempa-jabe suggested reusing the existing Select + Activate/Deactivate submenu pattern; I tried that and found it cost an extra manual step for the common case (select, then separately trigger Deactivate → All), so this does select+apply in one action instead — matching how dragging a rectangle on the plot tabs already works today, just typed and criterion-agnostic instead of tied to whichever axis the current tab happens to plot.

Notes for review

  • Azimuth range is the most debatable of the three — distance and residual map to well-established QC practices (triplication zones / near-field geometry, outlier rejection), azimuth is more situational (regional path anomalies, deliberate coverage balancing) and isn't a standard locator parameter the way distance/residual cutoffs are. Open to dropping it if it doesn't seem worth carrying.
  • Azimuth range doesn't handle wraparound through north (e.g. 350°–10° isn't expressible as a single range) — minor known limitation.
  • The plot-tab actions operate on all arrivals in the origin, not just what's currently zoomed/visible in that plot.

Test plan

  • Built and installed locally (Framework 8.0.0 Development / API 18.0.0); exercised arrival table and all five plot tabs interactively
  • Verified no regressions to existing Select/Activate/Deactivate/Rename/Delete actions
  • Live-ran with --debug and confirmed no QObject::connect warnings for the new signal/slot wiring (OriginLocatorPlotOriginLocatorView)
  • Checked for upstream conflicts against main: only one commit since base (gempa-jabe's own felt-report change) touches this file, in a disjoint region

Adds two submenus, reachable both from the arrival table and from every
plot tab (Distance, Azimuth, Travel time, Move-out, Polar):

"Set active by..." -> Distance range..., Residual threshold...,
Azimuth range... -- prompts for a range/threshold and resets state:
arrivals matching the criterion are activated, everything else is
deactivated. Same mechanism as dragging a rectangle on the Distance plot
tab (residualsSelected()), just precise/typed and available for azimuth
and residual too, and not tied to which tab happens to be open.

"Set inactive by..." -> same three criteria, but surgical: only
deactivates arrivals matching the criterion, leaves everything else
untouched. Useful for e.g. excluding a known-bad distance band or
knocking out residual outliers without disturbing other manual choices.

Distance respects SCScheme.unit.distanceInKM like the DISTANCE column.
Residual threshold is a single |time residual| cutoff in seconds (not a
range), matching how outlier-killing is normally framed.

The plot tabs reach the same six OriginLocatorView actions via six new
signals on OriginLocatorPlot (setActiveByDistanceRequested() etc.),
emitted by PlotWidget's context menu and connected in the constructor --
same pattern already used for focalMechanismCommitted()/
autoInversionRequested(). The six actions themselves moved from a plain
private: section to private slots: to make them connectable.
@cla-bot cla-bot Bot added the cla-signed The CLA has been signed by all contributors label Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The CLA has been signed by all contributors

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant