← Technical Information

Observed Seismic Station Data

Finding which stations recorded an event, then fetching what they recorded.

Step 1: ShakeMap Identifies the Stations

Intensity Lab does not independently search for seismic stations near an epicenter. Instead it starts from the ShakeMap station list (stationlist.json), which USGS publishes with the network codes, station codes, coordinates, and observed intensity for every instrument ShakeMap actually used to build the event's grid. Station observations derived this way are not interpolated — they are computed directly from the ground motion recorded at that instrument, using the Worden et al. (2012) GMICE (see Intensity Information & Examples), or taken from the intensity value ShakeMap itself reports for that station.

On maps, station observations are marked with a diamond (♦) to distinguish them from the circle markers used for interpolated gazetteer cities.

Step 2: Retrieval via ObsPy

For significant events (max MMI ≥ 5.0), Intensity Lab goes a step further than ShakeMap's already-computed station intensity: it retrieves the station's actual waveform via the FDSN federated seismological data infrastructure (data centers tried in order: EarthScope/IRIS, NCEDC, SCEDC). Waveform retrieval and processing use ObsPy, the community Python toolbox for seismology — its FDSN client fetches the StationXML metadata and three-component records, and its response-removal and filtering routines convert raw instrument counts to physical ground motion.

Candidate stations are drawn from the ShakeMap station list — those reporting observed MMI ≥ 5.0 — starting with the closest to the epicenter, and pre-screened for FDSN accessibility (valid StationXML, a usable channel, and a waveform that isn't clipped) before being queued for animation. Instrument channels are tried in priority order:

  • HN* / EN* — strong-motion accelerometers at 100 sps or higher. Preferred because they do not clip at the ground-motion levels associated with MMI ≥ 5, and are available at most permanent seismographic network stations in the western US.
  • HH* — broadband velocity sensors at 100 sps. Used when strong-motion data are unavailable; may clip at short epicentral distances for large events.
  • BH* — broadband velocity sensors at 40 sps. Lower sample rate fallback for stations that do not report higher-rate channels.

Historical events caveat: Atlas ShakeMaps for pre-~2015 events often store stations with network code UNKNOWN — no valid FDSN network code, so waveform retrieval is skipped for those (FDSN cannot be queried without a network code). This is expected, not an error.

Processing to Displacement

Retrieved waveforms are processed to ground displacement using the following steps:

  1. Linear detrend and 5% cosine taper applied to the raw count time series
  2. Instrument response removed with ObsPy (Trace.remove_response) to physical units (acceleration m/s² for accelerometers; velocity m/s for broadband sensors)
  3. Bandpass filter: 0.1–25 Hz for accelerometers; 0.05–20 Hz for broadband
  4. Double-integration to displacement with linear detrending after each integration step to suppress drift
  5. Clipped to the strong-motion window: from P-wave arrival estimate − 5 s through peak horizontal displacement + 15 s

P-wave arrival is estimated from hypocentral distance using a crustal P-wave velocity of 6.0 km/s. This processed displacement record — not a model, not a simulation — is what drives the observed animation type; see Physics Animation (Blender). Observed animations are not guaranteed for every event — data availability depends on real-time FDSN archive access and the mix of network types in the ShakeMap station list.