Skip to content

The Pass Schedule ​

A gauge is compared against SWOT only on the passes whose swath covers it, and the satellite's 21-day orbit flies the same ground tracks in every cycle, so the passes covering a gauge return on a fixed schedule. That schedule sets how often a gauge can be compared, from how many distances across the swath, and which anchors can check the passes over it. Together these decide how well the passes set the elevation of the gauge's sensor, the number a field survey establishes today under a protocol designed to hold it within 5 cm⁠1⁠. This page sets out how Tidemark finds the schedule in the passes the fetch kept, the looks due at each gauge and those the fetched passes hold, and the gauges it flags.

Distance Across the Swath ​

Every Expert pass The Satellite Passes keeps carries its nadir track, the point directly beneath the satellite on each line across its swaths. For every pass and every gauge in the station catalog, the schedule takes the line running across the gauge and measures how far along it the gauge sits from that nadir track, on the same sphere the fetch measures its 50 km reach on, keeping that line's instant, which every sample at the gauge carries. The distance is positive to the right of the way the satellite flies and negative to its left, as JPL D-56407 counts a cross-track distance.

The mission's Science Data Products User Handbook gives each of the two swaths the span from 10 to 60 km off the track, so a pass stands to a gauge in one of three ways:

  • The pass covers the gauge, where the gauge sits from 10 to 60 km off the track, in the left or the right half swath
  • The gauge sits in the gap, where it lies within 10 km of the track, beneath the satellite, between the two swaths
  • The gauge lies beyond the swath, where it sits more than 60 km off the track, or where the lines the fetch kept stop short of it, so that no line runs across it

The schedule keeps the first two and leaves out the third, reading where a gauge itself sits rather than where the nearest height lies. The product the fetch reads carries no height from the altimeter looking straight down along the track, as its product description notes, so a gauge in the gap is measured only where the heights at the inner edge of a swath fall within the 5 km the comparison reads around it. A pass retraces its ground track to within about a kilometer, so the schedule gives each gauge one distance from each pass near it, the median over the cycles the fetch kept, and no pass the fetch kept covers a gauge in one cycle and leaves it in the gap in another.

The Coverage Map ​

mise run data:schedule runs tidemark schedule, which rebuilds the schedule the map and the table below are drawn from out of the passes mise run data:fetch:swot fetched. The map opens on every gauge, each marked as an anchor or a target and Wells as retired, with the half swaths of each pass that covers one drawn over the water around them, the water a step deeper for each pass over it, and the gauges gathered beside the map by how many passes cover each. Pointing at a gauge on the map or in that gathering gives its passes per cycle. Picking a gauge from either, or from the menu, zooms the map in on it, rings it at 10 and 60 km, and lights the track of every pass near it, and pointing at a pass in the list beside the map marks the point where its track runs nearest the gauge and names the distance between them.

Anchor
Target
Retired
Half swath14passes

Every gauge the catalog carries on the Maine coast, beneath the half swaths of each pass that covers one

Every value as a table
GaugeCovered ByIn the Gap Of
Apprenticeshop, Rockland, ME242 at 40.8 km right, 7 at 45.3 km left, 313 at 50.0 km right, 548 at 54.6 km leftNone
Back River Bridge, Arrowsic, MENone548 at 3.8 km right, 313 at 5.8 km right
Bar Harbor7 at 16.6 km right, 242 at 36.8 km left, 520 at 57.9 km rightNone
Bowdoinham, MENone313 at 8.1 km left, 548 at 9.1 km right
Cape Neddick River at Shore Road, York, ME313 at 41.5 km left, 35 at 55.5 km right270 at 9.3 km left
Chebeague Island, ME313 at 18.1 km left, 548 at 35.2 km rightNone
Cutler Farris Wharf520 at 25.8 km left285 at 9.2 km left
Damariscotta River, East Boothbay, ME548 at 11.1 km left, 313 at 20.0 km rightNone
Department of Marine Resources, Boothbay Harbor, ME313 at 16.2 km right548 at 6.1 km left
Eastport214 at 44.0 km right, 520 at 50.0 km left285 at 1.2 km right
Fore River, Portland, ME313 at 31.0 km left, 270 at 45.1 km left, 548 at 51.0 km rightNone
Fort Popham, Phippsburg, MENone313 at 7.4 km right, 548 at 7.5 km right
GMRI Pier, Portland, ME313 at 26.4 km left, 548 at 47.0 km right, 270 at 49.2 km leftNone
Jordan's Pier, Milbridge, ME520 at 27.7 km right, 7 at 39.9 km right, 285 at 54.8 km leftNone
Kennebec River at Calumet Bridge at Augusta, MENone313 at 7.2 km left, 548 at 9.1 km left
Kennebec River at Gardiner, MENone313 at 4.5 km left, 548 at 6.8 km left
Kennebec River at Hallowell, MENone548 at 6.9 km left, 313 at 7.6 km left
Kennebunkport, ME270 at 24.0 km left, 313 at 35.4 km leftNone
Lindsey Brook, Rockland, Maine242 at 41.0 km right, 7 at 45.4 km left, 313 at 49.9 km right, 548 at 54.4 km leftNone
Machias, ME285 at 29.3 km left520 at 9.2 km left
Maine Maritime Museum, Bath, MaineNone313 at 1.2 km right, 548 at 6.0 km right
Port Clyde, St. George, ME548 at 38.0 km left, 313 at 43.3 km right, 7 at 52.3 km left, 242 at 57.7 km rightNone
Portland313 at 25.7 km left, 548 at 46.0 km right, 270 at 50.2 km leftNone
Rockland Public Landing, Rockland, ME242 at 40.9 km right, 7 at 45.1 km left, 313 at 50.2 km right, 548 at 54.5 km leftNone
Saco River at Camp Ellis near Saco, ME313 at 31.2 km left, 270 at 34.2 km leftNone
Scarborough River, ME313 at 29.7 km left, 270 at 40.1 km left, 548 at 56.2 km rightNone
Seavey Island35 at 47.8 km right, 313 at 49.3 km left270 at 4.3 km right
Stonington Harbor, ME7 at 12.1 km left242 at 5.1 km right
Town Pier, Jonesport, ME285 at 35.2 km left, 7 at 59.3 km right520 at 7.2 km right
Verona Bridge, Bucksport, ME7 at 33.2 km left242 at 3.1 km right
Wells270 at 16.1 km left, 313 at 41.7 km left, 35 at 55.1 km rightNone
Commit47945eaDataschedule.jsonUnreleased1.2.0

Data from

  • 2Statistics Canada
  • 3U.S. Census Bureau
  • 4GMRI, NERACOOS
  • 5USGS
  • 6NOAA CO-OPS
  • 7SWOT, PO.DAAC

Passes per Cycle ​

SWOT numbers the 584 passes of each 21-day cycle, and a pass keeps its number from one cycle to the next, so the pass numbers covering a gauge fix how many times a cycle it can be compared. For every gauge, the schedule counts the passes whose swath covered it, lists their pass numbers, and divides the passes by the cycles the fetched passes span, where a cycle counts once any of its passes covers a gauge. It counts the passes over where a gauge sits, whether or not the gauge was recording, so Wells, which NOAA removed before SWOT launched, still counts its passes.

The daily orbit SWOT flew in its first months numbers its passes and cycles on a scheme of its own, so the schedule counts the 21-day orbit alone. None of the earlier orbit's passes covers a gauge, since the one track it flew across the box around the gauges ran about 80 km from the nearest gauge, well past the 60 km edge of its swath.

Looks Held and Missing ​

A look is due at a gauge in each cycle of each pass covering it, from the first crossing the fetch kept to the last, and a gauge's rate falls short of its count of pass numbers only where the fetched passes lack one of those looks. A look is lacking where the fetch kept no line of that cycle's pass across the gauge, whether the archive holds no part of the pass or the part it holds stops short of the gauge. The schedule dates each look it lacks from the looks it holds:

  1. It dates the start of every cycle from the instant each pass the fetch kept began, which each file names, since a pass begins its share of the cycle after the pass numbered before it, each of the 584 lasting the same share. The median time between two cycles of one pass number sets the repeat period, and each cycle starts one period after the one before.
  2. It measures how far into its cycle each pass crossed each gauge, over every look the fetched passes hold, and takes the median, since a pass crosses a gauge the same time into every cycle.
  3. It dates each look the fetched passes lack that far into its own cycle.

Across the fetched passes, the repeat period comes to 20.86 days, and every look they hold falls within 3 seconds of the time into its cycle its pass keeps, so a look they lack is dated to the minute. mise run data:schedule rebuilds the looks, the calendar, and the table below. The calendar shows nine weeks of one gauge at a time, a filled circle on each day a pass came over it and a dashed one on each day a look was due that the fetched passes lack, and a ring on the strip beneath it takes the calendar to the look it stands for.

3 looks every 21 days
2026SMTWTFS
May 10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29Cycle 51
30
31
Jun 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Cycle 52
20
21
22
23
24
25
26
27
28
29
30
Jul 1
2
3
4
5
6
7
8
9
10Cycle 53
11
202420252026
The fetched passes hold 161 of the 168 looks due, 2.82 a cycle. Tap or click a dashed ring on the strip to find one of the 7 missing.
Across the swath
Every value as a table
GaugePass NumbersDueHeldPer Cycle
Apprenticeshop, Rockland, ME7, 242, 313, 5482252163.79
Bar Harbor7, 242, 5201691632.86
Cape Neddick River at Shore Road, York, ME35, 3131121091.91
Chebeague Island, ME313, 5481121071.88
Cutler Farris Wharf52056540.95
Damariscotta River, East Boothbay, ME313, 5481121071.88
Department of Marine Resources, Boothbay Harbor, ME31356540.95
Eastport214, 5201131101.93
Fore River, Portland, ME270, 313, 5481681612.82
GMRI Pier, Portland, ME270, 313, 5481681612.82
Jordan's Pier, Milbridge, ME7, 285, 5201681592.79
Kennebunkport, ME270, 3131121081.89
Lindsey Brook, Rockland, Maine7, 242, 313, 5482252163.79
Machias, ME28556510.89
Port Clyde, St. George, ME7, 242, 313, 5482242153.79
Portland270, 313, 5481681612.82
Rockland Public Landing, Rockland, ME7, 242, 313, 5482252163.79
Saco River at Camp Ellis near Saco, ME270, 3131121081.89
Scarborough River, ME270, 313, 5481681612.82
Seavey Island35, 3131121091.91
Stonington Harbor, ME756540.95
Town Pier, Jonesport, ME7, 2851121051.84
Verona Bridge, Bucksport, ME756540.95
Wells35, 270, 3131681632.86
Commit47945eaDataschedule.jsonUnreleased1.2.0

One Pass Number Alone ​

The error the gauges on one pass share takes a shape across the swath, an offset for each half, a tilt, and a curve, as The Satellite’s Reading sets out, so its size at a gauge changes with the gauge's distance across the swath⁠89⁠. Each pass carries a share of that error of its own, since the tilt alone changes over the 120-day cycle of the Sun's angle to the orbit and over each orbit⁠9⁠, so a gauge's own passes never tell their shares apart from the elevation of its sensor, however many pass numbers cover it. Each pass's share rests instead on the anchors that pass covers, or on the gauges it shares with passes that cover one, and the pass numbers a gauge shares with each anchor name the passes that anchor can check it on. A gauge that one pass number alone covers sits at the same distance in every cycle, so any part of the error that recurs at that distance and escapes those ties stays in its estimate, and the schedule flags it. The flag carries weight for a target alone, since an anchor's elevation is already established.

735214242270285313520548AnchorsTargetsSeavey IslandSaco RiverPortlandBar HarborCutler Farris WharfEastportWellsCape Neddick River at Shore RoadKennebunkportScarborough RiverFore RiverGMRI PierChebeague IslandDepartment of Marine ResourcesDamariscotta RiverPort ClydeLindsey BrookApprenticeshopRockland Public LandingVerona BridgeStonington HarborJordan's PierTown PierMachias
Machias, one pass number alone

Pass 285 crosses no anchor. One shared pass away: Bar Harbor, Cutler Farris and Eastport.

Commit47945eaDataschedule.jsonUnreleased1.2.0

Across the Network ​

We found the gauges below that one pass number alone covers, in the schedule mise run data:schedule computes, each place on a line of its own, so two sensors at one place share a line:

  • Stonington Harbor, ME, on pass 7
  • Verona Bridge, Bucksport, ME, on pass 7
  • Machias, ME, on pass 285
  • Department of Marine Resources, Boothbay Harbor, ME, on pass 313
  • Cutler Farris Wharf, an anchor, on pass 520

Every other gauge a pass covers is seen by two or more pass numbers, and each gauge below by 4, the most of any:

  • Apprenticeshop, Rockland, ME
  • Lindsey Brook, Rockland, Maine
  • Port Clyde, St. George, ME
  • Rockland Public Landing, Rockland, ME

Of the 3,309 looks due at the gauges, which count two sensors at one place apart, the fetched passes hold 3,173.

No pass covers the gauges below, all of them on the Kennebec, listed from its mouth up the river:

  • Fort Popham, Phippsburg, ME
  • Back River Bridge, Arrowsic, ME
  • Maine Maritime Museum, Bath, Maine
  • Bowdoinham, ME
  • Kennebec River at Gardiner, ME, an anchor
  • Kennebec River at Hallowell, ME, an anchor
  • Kennebec River at Calumet Bridge at Augusta, ME, an anchor

The nadir tracks of passes 313 and 548 both run within 10 km of every one of them, so each gauge falls in the gap beneath the satellite on both passes, while every other pass leaves them more than 80 km away. The inner edge of pass 548's swath still leaves heights within 5 km of Fort Popham and a few within 5 km of Back River Bridge, whereas the gauges further up the river have none.

The Tables It Ships ​

The package ships the pass schedule under src/tidemark/swot/, one Parquet file for each table, and mise run docs:render writes each table's section below from the schema the schedule checks it against, the sentence beneath its heading from the schema's docstring. Beside the tables, parts.json records each SWOT part a rebuild read the nadir tracks of, by its name and its SHA-256, and mise run data:schedule -- --check rebuilds the tables from exactly those parts, naming any part the store lacks before it computes anything, so a store holding later passes still checks the schedule the package ships.

counts.parquet ​

One row per

gauge the station catalog holds

station

Shares station with 4 other tables.

5columns

Commit47945eaDatastations.jsonUnreleased1.2.0

The counts table, one row for each gauge the station catalog holds, counting the passes of the 21-day orbit whose swath covers it.

ColumnHolds
stationA shared key the tables join on
pass_numbersEach pass number whose swath covers the gauge, in order
passesThe passes whose swath covered the gauge
passes_per_cycleThe passes whose swath covered the gauge in an average cycle, empty where no pass of the 21-day orbit covers any gauge
single_pass_numberWhether one pass number alone covers the gauge, which holds it at one distance across the swath in every cycle

cycles.parquet ​

One row per

cycle of the 21-day orbit

cycle_number

Shares cycle_number with 3 other tables.

2columns

Commit47945eaDatastations.jsonUnreleased1.2.0

The cycles table, one row for each cycle of the 21-day orbit, from the first the fetch kept a pass from to the last, naming the instant the cycle began.

ColumnHolds
cycle_numberA shared key the tables join on
startThe instant the first pass of the cycle began, in UTC

distances.parquet ​

One row per

gauge and each pass of the 21-day orbit whose nadir track runs within 60 km of it

stationpass_number

Shares station with 4 and pass_number with 4 other tables.

4columns

Commit47945eaDatastations.jsonUnreleased1.2.0

The distances table, one row for each gauge and each pass of the 21-day orbit whose nadir track runs within 60 km of it, naming how far across the swath the gauge sits and which half swath holds it.

ColumnHolds
stationA shared key the tables join on
cross_track_distanceThe median distance in meters of the gauge from the pass's nadir track over the cycles the fetch kept, negative on its left side
half_swathThe half swath the gauge falls in, left or right of the track, empty where the gauge sits in the gap beneath the satellite
pass_numberA shared key the tables join on

ground_tracks.parquet ​

One row per

line of the nadir track of every pass whose track runs within 60 km of a gauge

pass_number

Shares pass_number with 4 other tables.

4columns

Commit47945eaDatastations.jsonUnreleased1.2.0

The ground tracks table, one row for each line of the nadir track of every pass whose track runs within 60 km of a gauge, in the order the satellite flew them, read from the cycle the fetch kept the most lines of that pass from.

ColumnHolds
latitudeWhere the point beneath the satellite sat in degrees north
longitudeWhere the point beneath the satellite sat in degrees east, from -180 to 180
pass_numberA shared key the tables join on
velocity_headingThe direction the satellite flew over the ground, in degrees clockwise from true north

looks.parquet ​

One row per

cycle of each pass whose swath covers a gauge

stationcycle_numberpass_number

Shares station with 4, cycle_number with 3, and pass_number with 4 other tables.

5columns

Commit47945eaDatastations.jsonUnreleased1.2.0

The looks table, one row for each cycle of each pass whose swath covers a gauge, from the first crossing the fetch kept to the last, naming when the pass crossed the gauge or was due to and whether the fetched passes hold the look.

ColumnHolds
stationA shared key the tables join on
cycle_numberA shared key the tables join on
pass_numberA shared key the tables join on
seenWhether the fetched passes hold the look, meaning a crossing of that cycle whose swath covers the gauge
timeThe instant the pass crossed the gauge wherever the fetched passes hold that crossing, or the instant it was due to otherwise, in UTC
Commit47945eaDatastations.jsonUnreleased1.2.0
  1. 1Baranes et al. 2026. "Supporting Coastal Flood Forecasting and Community-Led Adaptation With Tide Gauges, Community Science and Youth Engagement." Frontiers in Climate 8: 1757212. https://doi.org/10.3389/fclim.2026.1757212↩︎

  2. 2Statistics Canada 2021. "Provinces/Territories, Cartographic Boundary File, 2021 Census." https://www12.statcan.gc.ca/census-recensement/2021/geo/sip-pis/boundary-limites/files-fichiers/lpr_000b21a_e.zip.↩︎

  3. 3U.S. Census Bureau 2024. "2024 Cartographic Boundary File (SHP), State and Equivalent Entities for United States, 1:500,000." https://www2.census.gov/geo/tiger/GENZ2024/shp/cb_2024_us_state_500k.zip.↩︎

  4. 4Gulf of Maine Research Institute & Brown University 2026. "NERACOOS ERDDAP." Northeastern Regional Association of Coastal Ocean Observing Systems. https://data.neracoos.org/erddap/.↩︎

  5. 5United States Geological Survey 1994. "USGS Water Data for the Nation." https://doi.org/10.5066/F7P55KJN.↩︎

  6. 6NOAA CO-OPS 2026. "CO-OPS Data Retrieval API and Metadata API." https://tidesandcurrents.noaa.gov/web_services_info.html.↩︎

  7. 7SWOT 2025. "SWOT Level 2 KaRIn Low Rate Sea Surface Height Data Product." Version D. NASA Physical Oceanography Distributed Active Archive Center. https://doi.org/10.5067/SWOT-SSH-D.↩︎

  8. 8Dibarboure et al. 2022. "Data-Driven Calibration Algorithm and Pre-Launch Performance Simulations for the SWOT Mission." Remote Sensing 14(23): 6070. https://doi.org/10.3390/rs14236070↩︎

  9. 9Ubelmann et al. 2024. "Data-Driven Calibration of SWOT's Systematic Errors: First In-Flight Assessment." Remote Sensing 16(19): 3558. https://doi.org/10.3390/rs16193558↩︎ ↩︎