SWATGenXSWATGenX

SWAT+ calibration QA

Matching USGS gages to SWAT+ channels

Calibrating SWAT+ against USGS streamflow only works when each gage sits on the channel that represents the same place in the model — here is how SWATGenX makes that match NHD-first, classifies every gage, and vets which ones are truly ready for hands-off calibration.

QA step 2 of 3 (delineation → this assignment → drainage-area audit). Peace River HUC-8 is the transparent full-inventory reference; the same screens run on the Myakka, Hillsborough, and Tampa Bay models below.

  • 76-gage full inventory · nothing dropped
  • 54 auto-cal eligible · 22 flagged for review
  • NHD-first reach pick, SWAT-second mapping
  • Obs coverage vetted: 16 hands-off cal-ready
All 76 Peace gages — class, then the calibration funnelnothing dropped
Assignment class (54 auto-cal eligible · 22 flagged for review)361613936 · tributary (clean)16 · mainstem (known NHD offset)2 · mainstem (clean)13 · lake outlet — review9 · canal / artificial — reviewCalibration funnel — assignment alone is not enoughFull gage inventory76Auto-cal assignment class54Usable obs (2000–2024)20Hands-off cal-ready16
Computed live from the committed v3 inventory — NHD-first reach choice, SWAT-second mapping, then class, observation-coverage, and area gates before any calibration runs.

This is the second step of the SWATGenX streamflow-QA pipeline: after the river network is delineated from NHDPlus HR (see the delineation comparison), each USGS gage has to be tied to the SWAT+ channel that represents the same hydrologic location. Get this wrong and a perfectly good model will appear to fail calibration for the wrong reason.

We use the Peace River HUC-8 (Florida) as a transparent, fully public reference: how the NHD-first assignment works, how every gage is classified (tributary, mainstem, lake outlet, canal), and how many gages clear the quality gates for hands-off calibration. Per-gage area fidelity — whether the assigned channel carries the right drainage area — is then checked on the drainage-area audit page.

Assignment is necessary but not sufficient. The same v3 screens now run across the neighboring Florida-fleet models (Myakka, Hillsborough, and the Tampa Bay catalog outlet), and applying them there taught us a lesson worth its own section below: observation coverage has to be vetted independently of assignment, because a station file can be 100% missing-data sentinel while looking perfectly assigned on every map.

1

Motivation

Why gage assignment comes first

A SWAT+ model can only be calibrated against a USGS gage if that gage is tied to the channel representing the same place in the model. SWATGenX makes that match on the Peace River HUC-8 (Florida) reference model and records it transparently — extraction, the assignment class of every gage, and which ones clear the gates for automatic calibration, reported over the full 76-gage inventory rather than a hand-picked subset.

  • Aim: Show how we assign gages (NHD-first, SWAT-second) and how many pass each quality gate before calibration.
  • What we conclude: 54 gages are auto-cal eligible by class; 22 are flagged for manual review (still mapped). Only 16 meet class + obs + SWAT/NHD checks for hands-off calibration.
  • Next: Per-gage area diagnostics and outlier investigation on the drainage-area audit page.
2

Methods

Peace River HUC-8 — reference watershed

Tier L Florida benchmark (03100101): whole-HUC-8 SWAT+ with 76 USGS gages after v3 assignment to chandeg.con.

Basin area
5,983 km²
USGS gages
76
HRUs
94,303
Routed channels
8,181

How we assign USGS gages to SWAT+ rivers

NHD-first: pick the NHDPlus HR reference reach using coordinates, USGS NWIS site drainage area (when available), GNIS/name context, stream order, LevelPath, FType, and lake/canal flags—without using SWAT+ AreaC or chandeg.con area. SWAT-second: map that reach to executable chandeg.con via crosswalk or controlled downstream replacement. Drainage-area comparison runs only after assignment, on calibration-ready stations.

  1. NHD-first reference reach (no SWAT area for reach choice)
  2. SWAT-second map to chandeg.con GIS channel
  3. Assignment class and calibration eligibility
  4. SWAT+ vs NHDPlus HR TotDASqKm ratio (drainage-area fidelity)

NHD-first reference reach (hydrography + NWIS site context, no SWAT area), then SWAT-second map to chandeg.con via NHD→GIS crosswalk or controlled downstream replacement. SWAT+ area is not used to pick the reach—only to audit fidelity afterward.

3

Results and discussion

Full accounting — all 76 Peace gages

Every gage receives an assignment class. Counts below are from the production Peace inventory and must sum to 76. We do not drop gages from this table—manual-review and area-bias flags are shown explicitly.

Reconciliation (must equal 76)
  • 76 in-basin USGS gages with v3 channel assignment
  • = 54 auto-cal assignment class + 22 manual-review class (13 lake outlet · 9 canal)
  • Of auto-cal class: 52 with SWAT/NHD in 0.5–2.0× SWAT/NHD; 2 with SWAT/NHD outside band (2 also lack usable obs → process audit on drainage-area page)
  • 20 have usable 2000–2024 obs (any class); 4 of those are manual-review only (usable obs but not auto-cal)
  • 16 cal-ready for automatic calibration (auto-cal class + usable obs + 0.5–2.0× SWAT/NHD SWAT/NHD)

Counts by assignment class

Auto-cal columns apply only to the three calibration-ready classes. Review gages remain in the model but are excluded from automatic calibration until reviewed.

Assignment classGagesUsable obsSWAT/NHD OKSWAT/NHD biasCal-readyMeaning
Clean tributary
tributary_clean
361234212Tributary reach; channel choice and SWAT/NHD look consistent
Mainstem — known NHD offset
mainstem_known_nhd_offset
1641604Mainstem reach; ~10–17% SWAT+ vs NHD offset documented on Peace
Clean mainstem
mainstem_clean
20200Mainstem reach; SWAT/NHD within tight tolerance
Lake outlet — review
lake_outlet_review
1330Lake outlet or lake-linked routing — human review before auto-calibration
Canal / artificial — review
canal_or_artificial_review
910Canal, ditch, or artificial path — human review before auto-calibration
Total762072216All Peace gages
Process audit
2
Auto-cal class, no usable obs, SWAT/NHD outside band
NWIS metadata note
3 of 16 cal-ready
|NHD−USGS|>25%; does not remove from calibration
Missing USGS site DA in NWIS
19
Still assigned; NHD–USGS scatter needs catalog area

Drainage-area snapshot — all Peace gages

USGS NWIS site drainage, NHDPlus HR cumulative area on the assigned reach, and SWAT+ chandeg.con area for every Peace gage. Scatter plots use gages where both compared areas exist; the inventory table lists all 76 with flags for large gaps and cal-ready status.

Large NHD–USGS gaps on canals and lake outlets are expected and visible here—they are why those classes are marked for manual review, not hidden from the inventory.

How to read this section
  1. USGS site drainage — area published for the gage in the USGS station catalog (independent check).
  2. NHD reference area — cumulative drainage on the NHDPlus HR stream reach we assign to the gage (national hydrography).
  3. SWAT+ channel area — drainage area of the executable model channel after routing assignment (compare to both USGS and NHD below).
76 Peace gages in this inventory. 19 lack USGS drain_area_va in NWIS (NHD–USGS scatter and gap bands use the remaining 57). SWAT+ vs NHD scatter uses 76 gages with both areas. NHD vs USGS (57 paired): 15 within 10%; 6 over 50% (0 over 100%). SWAT+ vs USGS: 33 within 10%; 12 over 50% (4 over 100%). On 38 of 57 paired gages, SWAT+ is closer to the USGS catalog than NHD was.

NHD vs USGS — gap bands

07142128Close (≤10%)Moderate (10–25%)Elevated (25–50%)Large (>50%)

SWAT+ vs USGS — gap bands

09182736Close (≤10%)Moderate (10–25%)Elevated (25–50%)Large (>50%)Extreme (>100%)

Large gaps vs who must be reviewed by hand

07142128Close (≤10%)Moderate (10–25%)Elevated (25–50%)Large (>50%)
OK for automatic calibrationNeeds manual reviewExcluded

Drainage-area scatter plots

Chart A — NHD vs USGS (map vs catalog)

Chart B — SWAT+ vs NHD (model vs map)

Chart C — SWAT+ vs USGS (model vs catalog)

Chart legend
Chart A — NHD vs USGS (map vs catalog)
x: USGS catalog, y: NHD map. Dot color = |NHD − USGS| / USGS.
Chart B — SWAT+ vs NHD (model vs map)
x: NHD map, y: SWAT+ model. Dot color = |NHD − USGS| / USGS (map–catalog gap at this gage).
Chart C — SWAT+ vs USGS (model vs catalog)
x: USGS catalog, y: SWAT+ model. Dot color = |SWAT+ − USGS| / USGS.
Dot colors
Green / blue / amber = percent gap band (see each chart above).
Close (≤10%)
Moderate (10–25%)
Elevated (25–50%)
Large (>50%)
Extreme (>100%)
Axes & 1:1 line
All three charts use the same km² range and matching tick marks on x and y (square plot). The dashed diagonal is perfect agreement for that chart's pair. Log scale when areas span more than one order of magnitude.
How to compare A vs C
If Chart C is tighter to the 1:1 line than Chart A, simulation drainage is closer to the USGS catalog than NHD was. Chart B then shows whether SWAT+ tracked the map.

Full Peace inventory (76 gages)

Every in-basin USGS station after v3 assignment. Amber rows: |NHD−USGS| or |SWAT+−USGS| >50%. Cal-ready = auto-cal class + usable 2000–2024 obs + SWAT/NHD in 0.5–2.0×.

USGSAssignmentUSGS (km²)NHD (km²)SWAT+ (km²)NHD−USGSSWAT+−USGSSWAT/NHDObsCal-ready
02293681lake_outlet_reviewreview53.0978.53126.94+47.91%+139.09%×1.03no
02293694canal_or_artificial_reviewreview150.2278.539.8-47.72%-93.48%×0.12no
02293986canal_or_artificial_reviewreview414.40.140.14-99.97%-99.97%×0.99no
02293987canal_or_artificial_reviewreview419.58386.91404.85-7.79%-3.51%×1.05yes
02294068lake_outlet_reviewreview59.5737.8129.98-36.52%-49.67%×0.79no
02294161lake_outlet_reviewreview530.43503.9590.62-5%+11.35%×1.17partial
02294260lake_outlet_reviewreview50.0461.04×1.22partial
02294261lake_outlet_reviewreview52.1761.04×1.17partial
02294290lake_outlet_reviewreview157.99135.27335.26-14.38%+112.2%×2.48partial
02294330lake_outlet_reviewreview55.4348.7463.59-12.06%+14.72%×1.3partial
02294405canal_or_artificial_reviewreview48.6932.9648.53-32.31%-0.33%×1.47partial
02294655lake_outlet_reviewreview1,023.05865.341,046.57-15.42%+2.3%×1.21yes
02294705lake_outlet_reviewreview865.341,046.57×1.21no
02294775lake_outlet_reviewreview1,025.64865.341,046.57-15.63%+2.04%×1.21yes
02295163lake_outlet_reviewreview111.37114.31126.51+2.64%+13.6%×1.11partial
02296750lake_outlet_reviewreview3,540.513,036.013,415.87-14.25%-3.52%×1.13yes
02297105lake_outlet_reviewreview4,325.283,071.183,754.94-28.99%-13.19%×1.22partial
280242081531600canal_or_artificial_reviewreview7.887.88×1no
280441081520200canal_or_artificial_reviewreview8.9413.74×1.54no
280531081520500canal_or_artificial_reviewreview4.625.56×1.2no
280531081520501canal_or_artificial_reviewreview4.625.56×1.2no
280557081512300canal_or_artificial_reviewreview2.042.04×1no
02294217tributary_cleanauto-cal137.27106.14120.73-22.67%-12.05%×1.14yesyes
02294491tributary_cleanauto-cal349.65281.84335.26-19.39%-4.12%×1.19partial
02294650mainstem_known_nhd_offsetauto-cal1,010.1842.37987.62-16.61%-2.22%×1.17yesyes
02294747tributary_cleanauto-cal891.561,046.57×1.17yesyes
02294760tributary_cleanauto-cal4.064.87×1.2yesyes
02294781mainstem_known_nhd_offsetauto-cal1,064.49910.651,066.47-14.45%+0.19%×1.17yesyes
02294898mainstem_known_nhd_offsetauto-cal1,243.19995.391,162.67-19.93%-6.48%×1.17yesyes
02295013tributary_cleanauto-cal122.25133.14123.18+8.91%+0.77%×0.93yesyes
02295194mainstem_known_nhd_offsetauto-cal1,587.661,342.31,537.73-15.45%-3.14%×1.15partial
02295203mainstem_known_nhd_offsetauto-cal1,590.251,352.061,548.04-14.98%-2.65%×1.14no
02295420tributary_cleanauto-cal313.39181.28231.22-42.15%-26.22%×1.28yesyes
02295435tributary_cleanauto-cal13.7513.1513.73-4.41%-0.18%×1.04no
02295440mainstem_known_nhd_offsetauto-cal1,952.851,572.441,818.91-19.48%-6.86%×1.16no
02295520tributary_cleanauto-cal49.2857.28×1.16partial
02295521tributary_cleanauto-cal49.289.47×1.01no
02295580tributary_cleanauto-cal92.5110.72×1.2partial
02295607mainstem_known_nhd_offsetauto-cal2,092.711,683.971,949.98-19.53%-6.82%×1.16no
02295637mainstem_known_nhd_offsetauto-cal2,139.331,731.622,001.16-19.06%-6.46%×1.16yesyes
02295755tributary_cleanauto-cal9.717.637.62-21.47%-21.52%×1no
02295798mainstem_known_nhd_offsetauto-cal1,897.452,167.13×1.14no
02295850tributary_cleanauto-cal38.8558.9860.19+51.82%+54.92%×1.02no
02296057tributary_cleanauto-cal45.3244.0141.42-2.9%-8.61%×0.94partial
02296180tributary_cleanauto-cal54.9137.9446.28-30.91%-15.7%×1.22no
02296191mainstem_known_nhd_offsetauto-cal79.2580.9989.29+2.2%+12.67%×1.1no
02296207tributary_cleanauto-cal98.6886.5794.87-12.27%-3.86%×1.1no
02296222mainstem_known_nhd_offsetauto-cal108.5295.58103.86-11.93%-4.29%×1.09partial
02296223tributary_cleanauto-cal108.5295.58103.86-11.93%-4.29%×1.09no
02296260tributary_cleanauto-cal497.28468.69492.29-5.75%-1%×1.05yesyes
02296389tributary_cleanauto-cal168.61140.64732.11-16.59%+334.21%×5.21partial
02296500tributary_cleanauto-cal854.7805.46870.02-5.76%+1.79%×1.08yesyes
02296525mainstem_known_nhd_offsetauto-cal2,873.33,228.51×1.12no
02297000tributary_cleanauto-cal172.95183.19×1.06no
02297100tributary_cleanauto-cal341.88289.74312.12-15.25%-8.7%×1.08yesyes
02297153tributary_cleanauto-cal34.9623.8487.72-31.82%+150.88%×1.48no
02297155tributary_cleanauto-cal108.7889.11125.58-18.08%+15.45%×1.41yesyes
02297220tributary_cleanauto-cal123.897.08101.44-21.59%-18.07%×1.04no
02297251tributary_cleanauto-cal336.7287.28327.86-14.68%-2.62%×1.14partial
02297272tributary_cleanauto-cal39.1137.6341.39-3.77%+5.82%×482.92no
02297290tributary_cleanauto-cal74.3372.5374.07-2.43%-0.36%×1.02no
02297310tributary_cleanauto-cal564.62516.2423.72-8.57%-95.8%×1.02yesyes
02297345mainstem_known_nhd_offsetauto-cal4,007.54,463.27×1.11no
02297350mainstem_known_nhd_offsetauto-cal4,610.184,013.34,468.19-12.95%-3.08%×1.11no
02297460mainstem_known_nhd_offsetauto-cal4,843.284,130.564,595.75-14.72%-5.11%×1.11no
02297600tributary_cleanauto-cal153.72165.61×1.08partial
02297635tributary_cleanauto-cal233.36202.59221.57-13.19%-5.05%×1.09partial
02297733mainstem_cleanauto-cal17.20.310.3-98.19%-98.25%×0.97no
02297875mainstem_cleanauto-cal37.366.7767.04+79.03%+79.75%×1no
02298110tributary_cleanauto-cal409.66161.13×1.06partial
02298123tributary_cleanauto-cal603.475.8206.18-99.04%-65.83%×1.04yesyes
02298124tributary_cleanauto-cal631.96626.39651.37-0.88%+3.07%×1.04no
02298170tributary_cleanauto-cal673.4692.46720.84+2.83%+7.05%×1.04partial
02298202tributary_cleanauto-cal966.07929.9977.24-3.74%+1.16%×1.05yesyes
02298300mainstem_known_nhd_offsetauto-cal5,956.975,229.55,755.82-12.21%-3.38%×1.1no
274319081452000tributary_cleanauto-cal0.310.10.1-69.24%-68.83%×1.01no

Observation coverage is vetted independently of assignment

A gage can be perfectly assigned and still have nothing to calibrate against. Daily-streamflow archives use a −99 sentinel for missing values, and a station file can be entirely sentinel: On the Myakka model, 20 of 34 station observation files were 100% −99 sentinel — no real observations at all — while looking perfectly assigned on every map and carrying a misleading 0% gap in the inventory metadata.

Assignment-only or drainage-area-only vetting cannot catch this, so observation coverage is its own gate in the v3 inventory: A gage counts as cal-ready only if ≥80% of calendar days in the observation window carry a real (non-sentinel) value; the check counts days that are non-NaN and ≠ −99. That is the usable obs column in the tables above — and on Peace it is the decisive cut: On Peace this gate, not assignment, is the big cut: 54 class-eligible gages → 16 hands-off cal-ready.

Implementation: SWATGenX/streamflow_obs_coverage.py (usableObsForCal), consumed by the v3 inventory exporter and the calibration roster builders.

The same screens across the Florida fleet

The v3 NHD-first assignment and its readiness screens are not a Peace-only demo. The same gates run on the neighboring west-central Florida models; counts below are computed from the on-disk assignment inventories (v3 basins) and the Tampa Bay catalog drainage-area screen.

Basin / modelScreenStationsPassFlaggedFlag breakdown
Peace River HUC-8
03100101
v3 assignment class76542213 lake outlet · 9 canal/artificial
Myakka River HUC-8
03100102
v3 assignment class3423117 lake outlet · 3 canal/artificial · 1 review
Hillsborough River HUC-8
03100205
v3 assignment class50292112 lake outlet · 5 canal/artificial · 2 ambiguous · 2 excluded
Tampa Bay catalog outlet
031002060700
drainage-area ratio flag (500 m catalog assignment)584018all 18 flags outside ~0.5–1.8 model/USGS drainage ratio (0.0013–0.47 and 2.0–12.3)

Tampa Bay uses a different screen: every gauge there has daily observations, and the flag is a model-vs-USGS drainage-area ratio band on the 500 m catalog assignment (58 gauges: median ratio 0.85; 40 in-band, 18 flagged). It answers the same question — is this gauge on the channel that drains what USGS says it drains — on a catalog model rather than a v3 workspace.

Why both references matter — SNOVER WATERWAY CANAL NEAR MURDOCK FL (02299360, Myakka River HUC-8): The SWAT/NHD ratio is a clean 1.02 — the gage really is on that tiny NHD canal reach — but the SWAT/NWIS ratio is 0.0025: NWIS credits the canal with a 62 km² engineered drainage the surveyed hydrography does not route there. Only carrying both references exposes it, which is why canals are a review class rather than auto-calibrated.

Sources: publication/analysis/qa/peace-station-assignment-v3-inventory.csv · model workspace 0310/huc8/03100102 · streamflow_data/stations_assignment_v3.csv · model workspace 0310/huc8/03100205 · streamflow_data/stations_assignment_v3.csv · publication/peace-multiscale-calibration/research/tampa_catalog_streamflow_stats.csv

4

Conclusion

Next step — does the assigned channel carry the right area?

Assignment (this page, QA step 2) ties each gage to a channel. The drainage-area audit (step 3) then verifies that the assigned channel actually carries the correct drainage area in the executable TxtInOut model — investigating outliers, process-audit gages, and the systematic SWAT+-vs-NHD offset, before calibration begins.

FAQ

  • How does SWATGenX assign USGS gages to SWAT+ channels?

    NHD-first, SWAT-second. The reference reach is picked on the NHDPlus HR hydrography using the gage coordinates and NWIS site context (drainage area where reported, stream name, lake/canal setting) — SWAT+ areas play no role in the pick. That reference reach is then crosswalked to the SWAT+ chandeg.con channel, every gage gets an assignment class (clean tributary, clean mainstem, mainstem with known NHD offset, lake outlet, canal/artificial), and only the three calibration-ready classes with vetted observation coverage and an in-band SWAT/NHD area ratio go to hands-off calibration. On the Peace River HUC-8 reference inventory that is 76 gages → 54 auto-cal eligible by class → 16 fully cal-ready.

  • Why is a correct channel assignment not enough for automatic calibration?

    Because a gage can be perfectly placed and still have nothing to calibrate against. Streamflow archives use a −99 sentinel for missing days, and a station file can be 100% sentinel — on the neighboring Myakka HUC-8 model, 20 of 34 station observation files contained no real observations at all, so a roster vetted on assignment and drainage area alone would have dispatched calibrations against empty records. SWATGenX therefore vets observation coverage as its own gate: a gage only counts as cal-ready if at least 80% of the calendar days in the calibration window carry real (non-sentinel) values. On Peace, that gate — not assignment — is the big cut: 54 class-eligible gages reduce to 16 hands-off cal-ready.

  • Why not assign stations using nearest channel or SWAT drainage area alone?

    Nearest-channel rules fail at tributary–mainstem confluences, lake outlets, and canals. Area-only matching can pick a mainstem reach with plausible TotDASqKm while the gage is on a tributary. SWATGenX therefore selects an NHDPlus HR reference reach first, then maps it to SWAT+ output.

  • Does SWAT+ drainage area choose the reference reach?

    Not in the improved method. QSWAT AreaC and chandeg.con areas are used only after assignment to audit agreement and classify calibration readiness. That keeps assignment errors separate from true SWAT+ vs NHDPlus HR area differences.

  • What stations are used on the drainage-area audit page?

    Drainage-area closure should be interpreted on stations classified as calibration-ready (mainstem_clean, tributary_clean, or mainstem_known_nhd_offset with documented offset). Lake, canal, ambiguous, and missing-output stations require review or exclusion first.

  • What is mainstem_known_nhd_offset?

    The station is on the correct mainstem channel, but SWAT+ chandeg area is systematically higher than NHD TotDASqKm (about 10–17% on Peace mainstem gages). That is treated as a delineation-definition offset, not fixed by moving the gage to a smaller side channel.

Related guides

Explore related

Last updated 2026-07-13.