Skip to content

Work through marine-review issues (#21-#28) - #29

Open
mdenolle wants to merge 13 commits into
masterfrom
docs/marine-review-followups
Open

Work through marine-review issues (#21-#28)#29
mdenolle wants to merge 13 commits into
masterfrom
docs/marine-review-followups

Conversation

@mdenolle

@mdenolle mdenolle commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Resolves the full marine-review backlog (#21-#28), one issue per commit.

Closed

Also fixed along the way

  • All (REF) placeholders resolved to verified, peer-reviewed citations
    already in the bibliography (or Kidiwela2026, newly added -- a real
    co-authored Science Advances paper).
  • Two dangling citation keys (@Okubo24, @hobiger14) renamed to their
    real bib keys.
  • Filed Dangling citation keys @lobkis01 and @poupinet84 have no matching bib entry #30 for two more dangling keys (@lobkis01, @poupinet84) found
    during a full-build QA pass -- no verified bib entry exists for
    either, left unresolved rather than guessed.

Verification

  • pixi run -e test test tests/test_synthetic_demo.py -- 21 passed.
  • python paper/build.py -- builds cleanly to PDF; visually checked the
    new/changed pages (synthesis table, new figure, parameter panels).
  • Regenerated manuscript_marine.tex is included so the Overleaf sync
    stays consistent.

Test plan

  • All tests pass
  • Manuscript builds to PDF without new errors
  • Visually inspected changed pages in the rendered PDF
  • Human review of the quantitative claims/numbers before submission

mdenolle added 3 commits July 23, 2026 19:53
…tracked issues

All (REF) citations now point to verified, peer-reviewed sources already
in references.bib/survey.bib (or newly added: Kidiwela2026, a co-authored
Science Advances paper on causal/acausal dv/v averaging). Every
MARINE REVIEW annotation is replaced with a comment linking to the
GitHub issue that now tracks it (#21-#28), so review notes survive
without cluttering the manuscript.
Replaced the "X, Y, and Z phenomena" placeholder with the actual
components of volcano_truth() (seasonal oscillation, pre-eruptive
inflation ramp, co-eruptive drop with partial recovery), read directly
from synthetic_demo.py rather than guessed.

Also verified the "one order of magnitude in standard deviation" claim
by running deviations.multiverse(): per-day std across the 108 pipelines
actually varies by a factor of ~4-5 (0.4% to 1.7%), not a full order of
magnitude -- corrected the text. Separately, RMS-vs-truth across
pipelines does span over two orders of magnitude (0.02% to 2.8%), which
is now stated explicitly since it's the more striking, and correct,
number.
… sensor network (closes #27)

Added a paragraph at the top of sec:multiverse stating what the synthetic
scenario actually represents, read from deviations.py/synthetic_demo.py
rather than invented: a single station pair (not yet a network -- that's
covered separately in sec:aggregation/sec:uncertainty), a coda band and
window matched to shallow volcanic depths, an SNR=7 per-day correlation
sampled every 3 days over 2.5 years, and a synthetic ground truth combining
a seasonal cycle, pre-eruptive inflation, and a co-eruptive drop with
partial recovery -- in the style of the Piton de la Fournaise deployment
already cited in the introduction.
…uantified paragraph (closes #24)

Each of the four sec:params choices now has its own paragraph stating
the RMS error against the known synthetic ground truth, computed by
re-running the actual measurement code behind Fig. fig:params (not
estimated/guessed):

- frequency band: matched-band RMS ~0.003-0.03%, mismatched ~0.10% (4-30x)
- coda window: window adapted to band ~0.01%, mismatched fixed window
  ~3.8% -- ~400x, since the window then samples pure noise
- reference: fixed-stack ~0.03%, Brenguier inversion ~0.04% (both keep
  the trend), 60-day moving reference ~0.16% (erases it)
- stacking: 1-day ~0.044%, 10-day ~0.018% (best), 45-day ~0.031% (worse
  than 10-day despite more averaging, because it smears the step)
…ee (closes #22)

Ran a clean, noiseless sweep of true dv/v (0-5%) through all seven
NoisePy estimators (reusing fig_methods' measurement code) to pin down
where each family's error crosses meaningful thresholds:

- MWCS cycle-skips discontinuously between ~1.2% and ~1.4% true dv/v
  (error jumps from <0.1% to >0.5%)
- stretching family (TS, WTS) stays below 0.01% error out to 5%; WCC
  stays below 0.1%
- DTW/WTDTW develop intermittent large errors from ~3% onward
- WCS degrades smoothly, crossing 1% error only beyond ~4%
closes #26)

Re-ran fig_aggregation's six-component synthetic (three good, three poor
SNR) to compute RMS error against the known truth for each aggregation
recipe: unweighted Approach A ~0.31%, coherence-weighted Approach A
~0.08% (~4x better), Approach B (average images, then peak-pick) ~0.03%
(~11x better than unweighted, ~3x better than weighted A). Added this
where Approach A/B are actually defined (sec:aggregation) rather than
at the stray forward-reference in sec:artifacts, which is removed.

Drive-by fix: @hobiger14/@deplaen16 were dangling citation keys (no
matching bib entry); renamed to the actual existing keys Hobiger2012 and
DePlaen2016. Note these are topically imperfect matches for
"coherence-based weighting" specifically -- worth a literature check
before submission, flagging here rather than silently leaving broken.
…/early/moving-stack reference comparison (closes #25)

- Points explicitly to the existing 103-study survey table (Appendix
  survey) as the literature-grounded range catalogue for frequency
  band, coda window, estimator, and uncertainty treatment, rather than
  duplicating it -- it already exists and is the empirical basis for
  the paper's central claim.
- Connects the fixed-vs-adapted coda window result (already quantified
  in the frequency-band/window paragraphs) explicitly to this
  literature tension, since it's the fixed-vs-moving-window comparison
  this issue asked for. Did not add a "Takano et al." citation for this
  specific claim -- the earlier literature check could not confirm any
  existing bib entry actually makes this argument, and per the "only
  peer-reviewed, verified" constraint, an unverified citation was left
  out rather than guessed.
- Added a new quantified comparison of reference *construction*: whole-
  period stack (~0.03%), early-period stack (~0.04%, ~1.5x worse from
  fewer averaged days), 60-day moving stack (~0.16%, erases the trend),
  and Brenguier-style joint inversion (~0.04%, preserves the trend) --
  extending the fixed/moving/inversion comparison already in sec:params
  with the early-stack case.
mdenolle added 2 commits July 24, 2026 07:32
…loses #23)

network_dvv() now also returns the individual per-pair dv/v(t) curves
and per-pair SNR (previously discarded after aggregation). New
fig_network_pairs() plots those nine pair curves directly, styled
after a basin-scale urban deployment like the San Gabriel Valley
groundwater network (Clements2018) -- explicitly flagged as an
illustrative geometry, not a literal reproduction of that network's
station spacing, since the paper's full-text station distances weren't
independently verifiable.

Quantified the gap this fills: median per-day pair-to-pair range
(~0.053%) is ~10x the coherence-weighted network SE (~0.005%) and
~3x the between-pair SD (~0.017%) -- the network aggregate's error bar
describes the precision of the mean, not the dispersion of what
individual pairs report, which Fig. fig:uncertainty alone doesn't show.

New figure saved to literature/figs/demo_14_network_pairs.png and
registered in FIGURES for regeneration via build_all().
#21)

Added Table tab:results-synthesis right after the section intro,
collecting the RMS-against-truth numbers already established and
verified in this session's per-axis fixes (issues #22, #23, #24, #25,
#26) into one at-a-glance table: estimator family, cross-component
aggregation, network aggregation, frequency band, coda window,
reference scheme, and stack length, each cross-referenced to the
subsection where the number is derived from its own dedicated
synthetic scenario.

Distinguished explicitly from Table tab:bp-measure (sec:multiverse),
which is a qualitative best-practice/deviation table driven by a
different, single shared one-at-a-time sweep -- this new table is a
quantitative synthesis specific to sec:results's own per-section
numbers, not a duplicate.
@Okubo24 -> @Okubo2024 and @hobiger14 -> @Hobiger2012 (the same
key-mismatch bug already fixed once in sec:aggregation, evidently not
caught there for this second occurrence in the introduction). Confirmed
via a real quarto/latexmk build: citation count of undefined references
dropped from 4 to 2.

Two pre-existing dangling keys remain unresolved and out of scope for
this PR: @lobkis01 and @poupinet84 (methods intro, sec:methods-appendix)
-- no matching bib entry exists for either, and I did not want to guess
real citations for the stretching/WCC method-origin claims under time
pressure. Flagging for a follow-up.
Rebuilt via paper/build.py after resolving the marine-review backlog
(#21-#28) and the associated citation fixes, so the tracked .tex
(synced to codameter-paper/Overleaf) matches the source .qmd. Verified
the PDF builds cleanly and visually checked the new/changed pages
(Table 2 synthesis table, Figure 4 per-pair network plot, Figure 5
parameter panels).
@mdenolle
mdenolle marked this pull request as ready for review July 24, 2026 06:28
Copilot AI review requested due to automatic review settings July 24, 2026 06:28

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the manuscript and supporting synthetic-demo figure generation to address the marine-review backlog (#21#28) by adding quantified bias/variance statements, a synthesis table, and a new per-station-pair variability figure, along with bibliography/citation cleanups.

Changes:

  • Adds a new “network pairs” figure (demo_14_network_pairs) and exposes per-pair outputs from the network synthetic so per-pair dv/v spread can be shown alongside network aggregates.
  • Expands §results/§multiverse prose with quantified RMS/bias/variance statements and adds a synthesis table summarizing best/worst-case error across processing axes.
  • Adds several literature references and updates citation keys used in the manuscript.

Reviewed changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated 3 comments.

File Description
src/codameter/synthetic_demo.py Returns per-pair network dv/v/SNR and adds fig_network_pairs() plus figure registry entry.
paper/references.bib Adds new bib entries (ambient noise / scattering / paper-specific) to support new citations.
paper/manuscript_marine.qmd Main source updates: synthesis table, quantified parameter impacts, new figure inclusion, multiverse scenario details, citation key updates.
paper/manuscript_marine.tex Regenerated TeX output to keep Overleaf sync consistent with manuscript changes.
Comments suppressed due to low confidence (7)

paper/manuscript_marine.qmd:296

  • Several verb forms are incorrect here (e.g., "cycle-skips", "can alters"), which reads like typos in the manuscript.
coda and remain accurate for high SNR coda waves; the phase methods (MWCS) read a wrapped phase and may
cycle-skips, while the *same* cross-wavelet phase (WCS), once unwrapped in 2-D,
recovers the change. The warping methods (DTW, WTDTW) track but under-shoot the largest
strains. No estimator is simply "right" and choices in the estimators
can alters the \dvv\ measurements for larger strain changes.

paper/manuscript_marine.qmd:326

  • This paragraph has multiple typos/grammar issues (e.g., "cross-componet", "a inter-station", "Each carry", "there scattering") that should be corrected to avoid them propagating into the PDF.
Each three-component seismic station (e.g., Z, N, E) carries 6 cross-componet correlations
(ZZ, NN, EE, ZE, ZN, NE), whether they are calculated at the single station or
a inter-station pair. Each carry a signature of the changes in velocity, components
may be dominated by Love or Rayleigh waves [@Lin2008; @Stehly2006], but there scattering and non-straight
ray path induce cross-component leakage between modes [@Hennino2001; @Margerin2019], and thus it is often

paper/manuscript_marine.qmd:331

  • This continuation contains typos ("characteristixcs") and citation formatting that may not be parsed as intended by Pandoc (bare @Key outside brackets).
assumed in practice that coda waves of cross-components with multi-scattering characteristixcs
(e.g., no clearly separated phases) are composed of "surface waves" with strong S-wave sensitivity.
Combining them together requires parameter choices, such as averaging them directly [@Liu2014],
or weighted (e.g., using coherence-based weighting @Hobiger2012, @DePlaen2016). Combining is another workflow
choice that can change both the value and the uncertainty

paper/manuscript_marine.qmd:517

  • "an researchers' judgement" is ungrammatical and looks like a typo in the manuscript.
(Fig.~\ref{fig:branches}a); here preferring the branch of greatest change is
an researchers' judgement.
When instead both branches share the *same* change,

paper/manuscript_marine.qmd:522

  • "both side exhibit" should be "both sides exhibit" (and there is an extra space before "different").
SNR falls (Fig.~\ref{fig:branches}b). When both side exhibit the same change
(sign, coherence) but with  different magnitude, it is reasonable to use the
\dvv\ of greatest change given the already low sensitivity in coda waves [@Obermann2013].

paper/manuscript_marine.qmd:562

  • "parametic" is a typo and should be "parametric".
The previous sections only identified single choices, but the overall research workflow
involves them all. We now estimate the combined effects of these parametic choices.
 Starting from a single **best-practice baseline** (trace stretching, a

paper/manuscript_marine.qmd:622

  • There is a sentence boundary/punctuation error here ("...]). are implemented ..."), which will render as a broken sentence in the manuscript. After fixing, regenerate manuscript_marine.tex so the Overleaf sync copy matches.
makes concrete. The baseline and deviation sets are the ones our survey extracts
from the literature (the cross-cutting rules of @Snieder2002 [@Clarke2011;
@Weaver2011; @Brenguier2014; @Wang2017; @Obermann2019]). are implemented in
`codameter.deviations`.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1398 to +1400
sm = plt.cm.ScalarMappable(
cmap=cmap, norm=plt.Normalize(vmin=pair_snr.min(), vmax=pair_snr.max())
)
Comment on lines +243 to +246
Each of the parametric component is implemented in a single comprehensive package ``codameter``
that borrows from ``msnoise`` [@Lecocq2014] and ``noisepy`` (@Jiang2020) to extract the
measurement of \dvv\ from the ambient noise monitoring workflow and generalize it
to any coda wave from repeated source-receiver paths.
Comment on lines +565 to +567
of @Brenguier2014 [@Weaver2011; @Clarke2011] as distilled in our survey), we change
every parameter at a time to a deviation from best practice documented in the literature
and measure the resulting error against the known truth (Fig.~\ref{fig:deviations}). The ranking is unambiguous: relative
mdenolle added 2 commits July 24, 2026 08:53
Figure 1 (fig_methods): added a new middle panel (b), a clean +/-5%
true-dv/v sweep showing exactly where each estimator family breaks
from the 1:1 line (MWCS cycle-skips near +/-1.5%, DTW/WTDTW past
+/-3-4%, WCS degrades smoothly). Renumbered the old large-dv/v
landslide panel to (c). Wired the existing quantified estimator-
threshold paragraph (from #22) to reference this new panel directly.

Figure 2 (fig_aggregation), all five reported issues:
- unified y-limits between (a) and (b) so they're directly comparable
  and Approach A's real excursions (+/-1.24%) are no longer clipped/
  saturated at the old +/-0.4% window
- (b): added a real colorbar, reversed to magma_r so dark = high CC
  (matching the paper's convention), and changed the truth line from
  cyan to black to match panel (a)
- simplified (a)'s title, dropping "3 defensible recipes"
- fixed the B-uncertainty (peak-width) calculation: it was a second
  moment over the *entire* epsilon search range, which is dominated by
  the search window's width rather than the peak's actual sharpness --
  nearly constant (~0.65-0.89%) regardless of day-to-day coherence.
  Replaced with a local half-max (FWHM-style) width around the peak,
  which now visibly varies over time in the shaded band.

Updated both figure captions accordingly. Verified: 21/21 tests pass,
PDF builds cleanly, both regenerated PNGs visually checked.
Splits the coda-window discussion out of Sec. Frequency band, reference
and stacking into its own Sec. Coda window and its covariation with
frequency band, per author review: the two parameters covary strongly
(high frequency needs a much shorter window) and deserved a dedicated
treatment and test, not a shared paragraph.

Adds coda_window_from_envelope(): picks the coda window automatically
by tracking a reference stack's envelope and stopping where it flattens
onto the noise floor for a sustained interval, mirroring the group's
practice of visually tracking the envelope rather than hand-tuning a
window per band. New figure fig_window_envelope (demo_15) shows the
detector applied blind to three bands: it correctly shrinks the window
at high frequency (window ~14s vs ~29-37s at low/mid), and recovering
dv/v with each band's own detected window beats one universal fixed
window everywhere -- comparably at low frequency, ~93x better at high
frequency, where the fixed window samples almost pure noise.

Verified: 219/219 tests pass (1 unrelated skip), PDF builds cleanly,
new section confirmed present in the rendered PDF.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants