Skip to content

reassociate

Science

Re-run an associator on a referenced phase set and see whether the picks still group as one event. The menu is gamma (GaMMA, a Bayesian Gaussian mixture over space, time and pick times) or pyocto (PyOcto, a high-throughput oct-tree associator). Production parameter blocks are frozen; the caller chooses which engine, not the velocity model or the cut-offs.

Each group has a group_id, the picks that belong to it, a station count, and a preliminary origin. Groups are referenceable as { "kind": "solution", "tool_call_id": "…", "group_id": n } for a later relocate. unassociated are the leftovers.

A split is a finding to test, not a grouping to pick by pick count. If the associator makes two groups, relocate each group and read residuals and silence; do not adopt the larger group because it is larger.

References

  • Zhu, W., McBrearty, I. W., Mousavi, S. M., Ellsworth, W. L. and Beroza, G. C. (2022). Earthquake phase association using a Bayesian Gaussian mixture model. Journal of Geophysical Research: Solid Earth. doi:10.1029/2021JB023249
  • Münchmeyer, J. (2024). PyOcto: A high-throughput seismic phase associator. Seismological Research Letters. doi:10.1785/0220230322

Contract

Generated from the live registry (ToolSpec). Field names, types and defaults come from the input and payload models; they are not hand-typed.

Group solution
Class 3
Tool version 1.0.0
Highest declared tier E
Timeout 30 s
Budget key reassociate
readOnlyHint true
idempotentHint false

Input

Field Type Required Notes
picks object yes The phase set a solution tool works on.
picks.base object (kind catalog | none | solution) yes discriminated on kind
picks.phase_set string ∈ {all, p_only} yes
picks.exclude_pick_ids array[integer] no
picks.add_picks array[object] no
picks.add_picks[].tool_call_id string yes
picks.add_picks[].pick_index integer yes
associator string ∈ {gamma, pyocto} no default "pyocto"
hypothesis string | null no default null

Payload

Field Type Required Notes
groups array[object] yes
groups[].group_id integer yes
groups[].picks array[object (kind catalog | repick)] yes
groups[].num_stations integer yes
groups[].preliminary_origin object yes
groups[].preliminary_origin.origin_time_utc string yes
groups[].preliminary_origin.latitude_deg number yes
groups[].preliminary_origin.longitude_deg number yes
groups[].preliminary_origin.depth_km number yes
unassociated array[object (kind catalog | repick)] yes
config object yes
config.associator string yes
config.config_digest string yes

Example request

{
  "picks": {
    "base": {
      "kind": "catalog",
      "event_id": 1001
    },
    "phase_set": "all"
  },
  "associator": "pyocto",
  "hypothesis": "bimodal residuals suggest two merged events"
}

Example payload

{
  "groups": [
    {
      "group_id": 1,
      "picks": [
        {
          "kind": "catalog",
          "pick_id": 20001
        }
      ],
      "num_stations": 5,
      "preliminary_origin": {
        "origin_time_utc": "2024-06-15T08:12:03.400Z",
        "latitude_deg": 47.15,
        "longitude_deg": 24.5,
        "depth_km": 10.0
      }
    }
  ],
  "unassociated": [],
  "config": {
    "associator": "pyocto",
    "config_digest": "sha256:89abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567"
  }
}

What this tool does not tell you

What this tool does not tell you: which grouping is right. If it splits the event in two, that is a finding to test with relocate on each group, not a grouping to pick by pick count.