ESS 412/512 – Introduction to Seismology
Course Description
📚 Interactive JupyterBook Available! All course materials are now available through an interactive JupyterBook with searchable content, embedded videos, and Google Colab links for every notebook—no installation required!
ESS 412/512 is a foundational seismology course that teaches the fundamental principles of wave propagation and their applications to Earth imaging and earthquake phenomenology. Students begin with data handling and signal processing, then progress through elastic wave theory, ray tracing, body waves, reflection seismology, surface waves, and ambient noise methods. The course combines theoretical derivations with hands-on Python exercises using real seismic data from global networks.
All computational exercises are available as Jupyter notebooks with Google Colab integration—students can run exercises directly in their browser without local Python installation. Topics include seismic data formats, Fourier analysis, stress-strain relationships, ray theory, travel time analysis, global seismic phases, reflection coefficients, surface wave dispersion, cross-correlation methods, and optional advanced topics in tomography and inversion.
Graduate students (ESS 512) complete additional exercises requiring deeper mathematical treatment, algorithm implementation, statistical analysis across multiple events, and present a research paper connecting course methods to published seismological research.

Learning Objectives
By the end of this course, students will be able to:
- Download, process, and analyze seismic waveforms using Python and ObsPy
- Apply Fourier analysis and signal processing to seismological data
- Apply elastic wave theory to explain seismic wave propagation
- Implement ray tracing and calculate travel times for body waves
- Compute reflection and transmission coefficients at seismic interfaces
- Differentiate between body waves (P, S) and surface waves (Love, Rayleigh)
- Measure and interpret surface wave dispersion from real data
- Extract empirical Green’s functions using ambient noise cross-correlation
- Integrate observation, theory, and inverse problems in seismology
- Connect computational methods to published seismological research (ESS 512)
Prerequisites
- Physics fundamentals (waves, mechanics)
- Linear algebra and calculus
- Basic programming experience (Python recommended but not required)
- ESS 512 students: Additional mathematical maturity and research experience expected
Resources
- Interactive JupyterBook: uw-geophysics-edu.github.io/ess-412-512-intro2seismology – Fully searchable course materials with Google Colab and Binder launch buttons for every notebook
- Textbook: Peter M. Shearer, Introduction to Seismology (Cambridge University Press)
- Lecture Notes: Embedded in JupyterBook (Stress/Strain, Ray Theory, Surface Waves)
- GitHub Repository: github.com/UW-geophysics-edu/ess-412-512-intro2seismology
- Canvas: Course materials, assignments, and discussion board
- Key Software: Python 3.9+, ObsPy, NumPy, Matplotlib, Pandas
Course Structure
The course is structured as a 10-week quarter with:
- Weekly lectures covering theoretical foundations (available as markdown lecture notes in JupyterBook)
- Computational labs using Jupyter notebooks with Google Colab integration
- Assignments (4-6 hours for ESS 412, 6-9 hours for ESS 512)
- Midterm integrated assignment combining ray theory, dispersion analysis, and tomography
- Final projects applying learned methods to real-world problems
All exercises use real seismic data from IRIS DMC and SCEDC, accessed via ObsPy’s FDSN client. Each notebook includes an “Open in Colab” button for instant browser-based execution.
Weekly Schedule
| Week | Topic | Notebook | Content |
|---|---|---|---|
| 1 | Data Foundations | 01_Data_Fourier_Practice | Seismic data formats (miniSEED, SAC), ObsPy fundamentals, instrument response, Fourier analysis, filtering. Google Colab available |
| 2 | Stress and Strain | 02_Stress_Strain_Practice | Elastic wave theory, stress-strain relationships, Lamé parameters, wave speeds. Lecture: Stress/Strain fundamentals |
| 3 | Body Waves I | 03a_Body_Waves_Theory 03b_Ray_Tracing_Cartesian |
Derivation of wave equation, Snell's law, ray parameter, Cartesian ray tracing. Lecture: Ray Theory |
| 4 | Body Waves II | 03c_Ray_Tracing_Global 03d_Global_Phases |
Spherical Earth ray tracing, travel time curves, TauP toolkit, identifying global phases (PKP, SKS, etc.) |
| 5 | Reflection Seismology & Midterm | 04a_Reflection_Coefficients 04b_Reflection_CMP Midterm Assignment |
SH and P-SV reflection/transmission coefficients, post-critical incidence, CMP gathers, NMO correction, migration. Midterm begins |
| 6 | Surface Waves I – Theory | 05a_Rayleigh_Waves_Theory 05b_Love_Waves_Theory |
Rayleigh wave derivation, Love wave derivation, dispersion curves, particle motion. Lecture: Surface Waves |
| 7 | Surface Waves II – Analysis | 05c_Surface_Waves_Practice 05d_Noise_CrossCorrelation |
Group/phase velocity measurement, dispersion analysis, ambient noise cross-correlation, virtual sources, Green's function extraction |
| 8 | Advanced Topics (Optional) | Tomography, SW Inversion | Travel-time tomography with PyKonal (straight/curved rays), surface wave inversion for 1D shear velocity, resolution tests |
| 9-10 | Final Projects | — | Project presentations and reports applying course methods to real seismological problems ESS 512: Paper presentations on research applications (see rubric) |
ESS 412 vs ESS 512 Differentiation
Undergraduate (ESS 412)
- Complete core exercises in each notebook (typically 3-4 questions)
- Use provided functions and code templates
- Focus on interpretation and physical understanding
- Single event/station analysis
- Estimated time: 4-6 hours per week on computational exercises
Graduate (ESS 512)
- Complete all ESS 412 exercises plus additional graduate questions (5-7 total)
- Implement algorithms from scratch where specified
- Statistical analysis across multiple events/stations
- Error propagation and uncertainty quantification
- Literature connection exercises
- Paper presentation: Present one research paper connecting computational methods to published work
- Optional: Computer Programs in Seismology (CPS) integration for surface waves
- Estimated time: 6-9 hours per week on computational exercises + paper preparation
Data Sources
All exercises use real seismic data from:
- IRIS DMC (Incorporated Research Institutions for Seismology Data Management Center)
- SCEDC (Southern California Earthquake Data Center)
Data is accessed programmatically via ObsPy’s FDSN client—no authentication required.
Assessment
- Weekly Computational Exercises: 50%
- Midterm Integrated Assignment (Week 5): 15% – Three-part assignment integrating ray theory, surface wave dispersion measurement from real data, and travel-time tomography using PyKonal (~8-10 hours)
- Final Project: 25%
- Participation & Quizzes: 10%
- ESS 512 Paper Presentation: Additional component (see presentation guidelines)
Getting Started
Quick Start (Recommended for Most Students)
No installation required! Visit the interactive JupyterBook and click the button on any notebook to run it directly in Google Colab. Dependencies install automatically in the first cell.
Local Installation (Optional)
Option 1: Conda (recommended for most users)
# Clone the repository
git clone https://github.com/UW-geophysics-edu/ess-412-512-intro2seismology.git
cd ess-412-512-intro2seismology
# Create conda environment
conda env create -f environment.yml
conda activate ess412
# Launch Jupyter Lab
jupyter lab
Option 2: Pixi (fast modern package manager)
# Install Pixi
curl -fsSL https://pixi.sh/install.sh | sh
# Clone and setup
git clone https://github.com/UW-geophysics-edu/ess-412-512-intro2seismology.git
cd ess-412-512-intro2seismology
pixi install
pixi run jupyter lab
See the JupyterBook installation guide for detailed setup instructions.
First Steps
- Start with 01_Data_Fourier_Practice to learn data handling fundamentals
- Follow notebooks in order: 01 (Data) → 02 (Stress/Strain) → 03a-d (Body Waves) → 04a-b (Reflection) → 05a-d (Surface Waves)
- Each notebook includes theory, demonstrations, and exercises with Google Colab badge at top
- ESS 512 students should complete additional graduate-level exercises marked in each notebook
Contact
Instructor: Marine Denolle
Course: ESS 412/512, University of Washington
Canvas: Course materials and discussion board
GitHub Issues: For repository-related questions
Last updated: February 2026