Technical Information
Methods, data sources, and technical specifications used by Intensity Lab.
Geographic Coverage
Supported region: latitude 28–50°N, longitude 125–113°W (Western US and northern Mexico), covering California, Nevada, Oregon, and the Mexican states of Baja California and Sonora. Custom location queries outside this region will be rejected.
Data Source: USGS ShakeMap
All automated event reports are derived from USGS ShakeMap data. ShakeMap produces a spatial grid of estimated instrumental intensity (PGA, PGV, MMI) by interpolating from seismometer recordings and applying regional ground-motion models.
Intensity Lab downloads the ShakeMap grid for each event and uses
scipy.interpolate.RegularGridInterpolator to
estimate MMI at each gazetteer site. ShakeMap data improve over time as more seismic station
records and Did You Feel It?
reports are incorporated.
In addition to interpolated city estimates, Intensity Lab also ingests the ShakeMap station list
(stationlist.json) to obtain
observed MMI values directly at seismic stations. Unlike gazetteer city values,
station MMI is not interpolated — it is calculated directly from the ground motion recorded at
each instrument using the Worden et al. (2012) GMICE (PGA or PGV to MMI conversion), or
from the intensity value reported by ShakeMap if available. Station observations are
identified on maps with a diamond marker (♦) to distinguish them from the circle markers
used for gazetteer cities.
stationlist.json for
the event. This file is typically present for M3.5+ events in California and other well-instrumented
networks. For smaller events, events in sparsely instrumented regions, or events where ShakeMap
was generated without a station list, the Stations view will indicate that no observed data are
available. In those cases, the Cities view (ShakeMap interpolated) remains the best available
estimate of shaking at named locations. Intensity Lab does not synthesize or model station MMI
— if no observed recordings are available, none are shown.
GMICE: PGA to MMI Conversion
When converting GMPE output (PGA) to MMI, Intensity Lab uses the Worden et al. (2012) Ground-Motion–to–Intensity Conversion Equation (GMICE). PGA is expressed in %g (percent of gravitational acceleration).
The conversion uses a two-branch piecewise linear formula in log space:
MMI values are clamped to the range [1, 10]. This conversion is consistent with the approach used by USGS ShakeMap for instrumental intensity.
ShakeMap Interpolation Method
USGS ShakeMap provides MMI values on a regular geographic grid. To estimate MMI at a specific named location (gazetteer site), Intensity Lab uses bilinear interpolation:
- Download the ShakeMap grid file (XML format) for the event.
- Extract the MMI field and its latitude/longitude axes.
- Construct a
RegularGridInterpolatorover the grid. - Query the interpolator at each gazetteer site coordinate.
Sites outside the ShakeMap grid boundary receive a default MMI of 1.0 (not felt). Grid resolution varies by network and event — typically 0.01° for California events.
Site Selection for Intensity Reports
After ShakeMap interpolation, Intensity Lab applies display rules to determine which gazetteer sites appear in event reports and on the homepage featured event card.
Primary rule: All sites with interpolated MMI ≥ 4.0 (Light shaking or stronger) are included, ranked by MMI descending. This threshold is why the displayed cities are not simply the nearest ones to the epicenter — a distant city on soft soil may appear while a closer city on hard rock does not.
Minimum sites rule: If fewer than 3 sites exceed the MMI 4.0 threshold (common for small or deep events), the list is padded with the nearest gazetteer sites by epicentral distance until at least 3 sites are shown. These padding sites may have MMI below 4.0.
Coverage boundary: Only sites within the ShakeMap grid extent are evaluated. Sites outside the grid boundary receive a default MMI of 1.0 and are excluded from the ranked list.
Seismic station display: The same MMI ≥ 4.0 and minimum 3-site rules apply to seismic stations when the Stations view is selected. If fewer than 3 stations exceed the threshold, the nearest recorded stations are shown as padding, regardless of their MMI level.
stationlist.json.
Intensity Lab does not estimate or infer station values.
Vs30: Site-Specific Soil Conditions
Vs30 is the time-averaged shear-wave velocity in the upper 30 meters of the Earth's surface, measured in m/s. It is the primary proxy for local site amplification in GMPE calculations: softer soils (low Vs30) amplify shaking; hard rock (high Vs30) attenuates it.
Data source priority for each site:
- CGS Geology — California Geological Survey geology-based Vs30 map accessed via SCEC UCVM (California sites only)
- Wald & Allen / UCVM — Topographic slope proxy (Wald & Allen 2007) computed from UCVM's statewide DEM, which covers California and extends into western Nevada, Oregon, and northern Mexico via a rotated 1,800 × 900 km grid centered on California
- Wald & Allen / USGS — Topographic slope proxy (Wald & Allen 2007) from the USGS ShakeMap global Vs30 raster, used for locations outside the UCVM grid coverage (e.g., eastern Nevada, Idaho)
- Default (760 m/s) — Rock-site reference value used when neither source returns a valid result
The API exposes site-specific Vs30 for any location in the supported region:
GET /api/v1/vs30?lat={lat}&lon={lon}
Ground Motion Prediction Equations (GMPEs)
GMPEs are empirical equations fit to large databases of recorded ground motions. They predict PGA (and other parameters) as a function of earthquake magnitude, source-to-site distance, and site conditions. Intensity Lab uses four NGA-West2 models:
| Key | Authors | OpenQuake Class |
|---|---|---|
| ask14 | Abrahamson, Silva & Kamai (2014) | AbrahamsonEtAl2014 |
| bssa14 | Boore, Stewart, Seyhan & Atkinson (2014) | BooreEtAl2014 |
| cb14 | Campbell & Bozorgnia (2014) | CampbellBozorgnia2014 |
| cy14 | Chiou & Youngs (2014) | ChiouYoungs2014 |
GMPE calculations are implemented via GEM OpenQuake
(openquake.hazardlib). PGA output is converted to
MMI using the Worden et al. (2012) GMICE.
Required Input Parameters
Each GMPE requires earthquake source parameters, distance metrics, and site characterization. Many of these are not directly reported by USGS for smaller events; the table below documents every parameter, the value used, and the source or justification.
| Parameter | Symbol | Value Used | Source / Rationale |
|---|---|---|---|
| Moment magnitude | M | Event magnitude | USGS ComCat |
| Fault rake | λ | 0° (strike-slip) | Default for uncharacterized Western US faults |
| Fault dip | δ | 90° (vertical) | Conservative for uncharacterized faults |
| Hypocentral depth | h | Event depth, or 10 km | USGS ComCat; 10 km default if unknown |
| Rupture width | W | 10(0.32M − 1.01) | Wells & Coppersmith (1994) all-mechanism scaling |
| Top of rupture depth | Ztor | max(0, h − W/2) | Estimated from depth and rupture half-width |
| Joyner-Boore distance | Rjb | Epicentral distance | Point-source approximation (haversine) |
| Rupture distance | Rrup | √(Rjb2 + h2) | Hypocentral distance (3-D Pythagorean) |
| Horizontal distances | Rx, Ry0 | 0.0 | Not applicable; no rupture-plane geometry available |
| Shear-wave velocity | Vs30 | Site-specific | CGS Geology, Wald & Allen / UCVM, Wald & Allen / USGS, or 760 m/s default (see Vs30 section above) |
| Vs30 measured flag | — | False | All values are model estimates, not field measurements |
| Depth to Vs = 1000 m/s | Z1.0 | ASK14 regression from Vs30 | Abrahamson et al. (2014), Eq. 31 |
| Depth to Vs = 2500 m/s | Z2.5 | CB14 regression from Vs30 | Campbell & Bozorgnia (2014), Eq. 33 |
Fault Geometry: Rake and Dip
Distance Metrics: Rjb and Rrup
Rupture Width and Ztor
Basin Depth Parameters: Z1.0 and Z2.5
Earthquake Animations
For significant events (maximum MMI ≥ 5.0), Intensity Lab automatically generates physics-based MP4 animations showing how shaking affects everyday objects on a table. Two animations are produced per qualifying event: one using simulated ground motion at the nearest significantly-affected city, and — when waveform data are accessible — one using real observed seismograms from the nearest seismic station with MMI ≥ 5.0. View all animations →
Simulated Ground Motion Animations
Each simulated animation begins with a synthetic accelerogram generated from the site's ShakeMap-interpolated Peak Ground Acceleration (PGA). The signal is constructed at 100 Hz using a Saragoni-Hart time-modulating envelope applied to filtered white noise:
- Envelope shape: e(t) = t² · exp(−5t/duration) — builds up then decays naturally
- Kanai-Tajimi filter (ωg = 15.7 rad/s, ζ = 0.6) applied via IIR to reproduce soil frequency content typical of firm California sites
- Filtered signal scaled so peak absolute acceleration matches the target PGA in m/s²
- Two independent horizontal components: X-axis at 100% PGA, Y-axis at 70% PGA with a different random seed
- Double-integrated to displacement (acceleration → velocity → displacement) using trapezoidal integration with linear detrending to prevent drift
The displacement time series drives the scene: the floor and table are passive kinematic rigid bodies that receive location keyframes directly from the computed displacements at each animation frame. A one-second gravity settle precedes the shaking; a one-second smooth return follows.
Observed Ground Motion Animations
For each significant event, Intensity Lab also attempts to retrieve real recorded seismograms via the FDSN federated seismological data infrastructure (data centers: IRIS, NCEDC, SCEDC). The system identifies candidate stations from the ShakeMap station list — those reporting observed MMI ≥ 5.0 — and selects the closest station for which waveform data are available. Instrument channels are tried in the following 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.
Retrieved waveforms are processed to ground displacement using the following steps:
- Linear detrend and 5% cosine taper applied to the raw count time series
- Instrument response removed to physical units (acceleration m/s² for accelerometers; velocity m/s for broadband sensors)
- Bandpass filter: 0.1–25 Hz for accelerometers; 0.05–20 Hz for broadband
- Double-integration to displacement with linear detrending after each integration step to suppress drift
- 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, consistent with the wave-propagation timing used in both animation types. The resulting displacement time series is passed directly to the Blender scene, which applies the same keyframe-driven physics simulation as the simulated path. The scene is held at rest until the P-wave arrival, then responds to the full 3-component observed displacement record.
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. When waveform retrieval fails for all candidate stations, only the simulated animation is produced. Each animation in the gallery is labeled Simulated or Observed data accordingly.
Physics Simulation
Object dynamics are simulated using Blender's rigid body physics engine (20 substeps/frame, 20 solver iterations). Active objects respond freely to the moving floor and table:
| Object | Mass | Friction | Restitution | Collision |
|---|---|---|---|---|
| Bowling pin (×3) | 1.587 kg | 0.45 | 0.35 | Convex hull |
| Wine glass | 0.18 kg | 0.38 | 0.05 | Convex hull |
| Soccer ball | 0.430 kg | 0.45 | 0.82 | Sphere |
| Apples (×5) | 0.182 kg | 0.28 | 0.28 | Convex hull |
| Chess pieces | 0.055–0.075 kg | 0.60 | 0.10 | Convex hull |
| Table (passive) | — | 0.70 | 0.05 | Convex hull |
| Floor (passive) | — | 0.80 | 0.65 | Convex hull |
Object geometry is stored as OBJ mesh files baked into the worker Docker image at build time. All meshes are re-centered and scaled to real-world dimensions before physics is applied. Regulation bowling pin dimensions (381 mm tall, 127 mm COM height) and USBC mass (1.587 kg) are used. The wine glass uses a Fresnel glass material with IOR = 1.52.
Rendering and Encoding
Scenes are rendered with Blender's EEVEE rasterizer at 854×480, 24 fps, with 16 temporal anti-aliasing samples, screen-space reflections, and ambient occlusion. PNG frames are encoded to H.264 MP4 (CRF 20) via ffmpeg. A text overlay (city name, distance from epicenter, local event time, and an IntensityLab.com copyright watermark) is stamped onto frames via Pillow before encoding.
Email Notifications
Registered users can opt into two types of automated email notifications. All intensity estimates are computed and stored for every qualifying event regardless of notification delivery — data is always viewable on the website after logging in.
Site-Specific MMI Report
Regional Event Summary
Notification Thresholds
Each notification type has an independent MMI threshold:
- Site-specific reports: sent when the ShakeMap-interpolated MMI at your registered location is ≥ IV (Light — generally felt indoors).
- Regional summaries: sent when the highest estimated MMI across all monitored communities is ≥ V (Moderate — felt by everyone, minor damage possible).
Events below these thresholds are still fully processed and all intensity data remains accessible on the website and via the API. No email is generated for events that do not reach the threshold.
API Access
The Intensity Lab API is available at /api/v1/. Public endpoints (earthquake list, event detail, site intensities, Vs30 lookup) require no authentication. Explore public endpoints →
On-Demand Ground Motion: POST /api/v1/ground-motion/
Registered users can request an MMI estimate at any arbitrary lat/lon within the supported region for any published earthquake. The request body specifies the USGS event ID, estimation method, and coordinates. Site-specific Vs30 is looked up automatically — the caller does not supply it.
Five estimation methods are available:
- shakemap_interpolated (default) — Downloads the USGS ShakeMap grid for the event and bilinearly interpolates MMI at the requested coordinates. Works for any point within the ShakeMap grid extent. Does not use Vs30 or GMPEs; the interpolated value reflects USGS observed shaking.
- ask14, bssa14, cy14, cb14 — The four NGA-West2 GMPEs described above. Each computes PGA from earthquake parameters and site-specific Vs30, then converts to MMI via the Worden et al. (2012) GMICE. Useful for comparing model predictions or for locations with no ShakeMap coverage.
The response includes: the MMI value, method used, vs30_used (GMPE methods only), from_cache (true when the result was pre-computed for a gazetteer site), and in_shakemap_coverage (whether the point fell within the ShakeMap grid boundary).
Create a free account to get started. Try it interactively →
About Intensity Lab
Questions or feedback? Submit feedback. For more about the project, see the About page.