name: adloc-fastapi description: AdLoc is a method for accurate earthquake location i.e. determining the origin time and location of seismic events using phase arrival times. It is a SOTA method published in 2025, notable for its robustness against outlier picks. This skill demonstrates how to use a fastapi to run AdLoc by querying a service deployed and maintained by the authors of the AdLoc paper.
AdLoc FastAPI for Robust Earthquake Location
What is AdLoc?
AdLoc is a method for determining the origin time and location of seismic events using phase arrival times. It uses random sample consensus (RANSAC) to enhance its robustness against outlier picks, which is useful when automated deep-learning-based picking models can produce false or inaccurate picks. The method was originally published in Zhu, Weiqiang, Bo Rong, Yaqi Jie, and S. Shawn Wei. "Robust Earthquake Location using Random Sample Consensus (RANSAC)." arXiv preprint arXiv:2502.10933 (2025).
AdLoc FastAPI
The authors of the AdLoc paper deployed a fastapi endpoint on HuggingFace space.
Base URL:
https://ai4eps-adloc.hf.space
Endpoints
GET /
Health check endpoint.
Response: {"Hello": "ADLoc!"}
POST /predict/
Performs earthquake location using the ADLoc algorithm based on seismic phase picks and station data.
Request body has the main structure of
{
"picks": {
"data": picks_data
},
"stations": {
"data": stations_data
},
"config": {}
}
picks_data object fields
| Field | Type | Description |
|---|---|---|
station_id |
string | Station identifier |
phase_time |
string | ISO 8601 timestamp of the phase arrival (T separator, as much precision as possible) |
phase_score |
float | Probability score of this pick |
phase_type |
string | Phase type: "P" or "S" |
phase_amplitude |
float | (Optional) Amplitude in m/s |
event_index |
int | (Optional) Event identifier |
stations_data object fields
| Field | Type | Description |
|---|---|---|
station_id |
string | Station identifier (must match picks) |
longitude |
float | Station longitude in degrees |
latitude |
float | Station latitude in degrees |
elevation_m |
float | Station elevation in meters |
config object fields
xlim_degree, ylim_degree and z(km) are required. You should derive them based on your picks and station data. All other fields are optional.
| Field | Type | Default | Description |
|---|---|---|---|
xlim_degree |
array | N/A | an array of two floats indicating the upper and lower limit of longitude |
ylim_degree |
array | N/A | an array of two floats indicating the upper and lower limit of latitude |
z(km) |
array | N/A | an array of two floats indicating the upper and lower limit of depth (positive means downward into the ground) |
min_picks |
int | 8 | Minimum number of picks required |
min_picks_ratio |
float | 0.2 | Minimum ratio of picks to use |
max_residual_time |
float | 1.0 | Maximum time residual (seconds) |
max_residual_amplitude |
float | 1.0 | Maximum amplitude residual |
min_score |
float | 0.6 | Minimum location score |
min_s_picks |
int | 2 | Minimum S-phase picks |
min_p_picks |
int | 2 | Minimum P-phase picks |
use_amplitude |
bool | false | Whether to use amplitude in location |
Response:
The response contains two arrays: events and picks.
events record fields
| Field | Type | Description |
|---|---|---|
event_index |
int | Event identifier matching input picks |
time |
string | ISO 8601 origin time of the earthquake |
longitude |
float | Event longitude in degrees |
latitude |
float | Event latitude in degrees |
depth_km |
float | Event depth in kilometers |
picks record fields (augmented with location results)
| Field | Type | Description |
|---|---|---|
station_id |
string | Station identifier |
phase_time |
string | ISO 8601 timestamp of the phase arrival |
phase_type |
string | Phase type: "P" or "S" |
adloc_mask |
int | 1 if pick was used in final location, 0 if rejected as outlier |
adloc_residual_time |
float | Time residual in seconds (observed - predicted) |
Returns {"events": null, "picks": null} if location fails.
Notes
- The default region is Ridgecrest, CA with a predefined 1D velocity model
- Coordinates are projected using an azimuthal equidistant projection centered on the region
- The algorithm uses an Eikonal solver for travel time computation