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.