|
Download REPRODUCE.md from cangyeone/robust_bayes_location: direct link, hf CLI and curl.
- Browser
- Download file 12.3 kB
-
https://huggingface.co/cangyeone/robust_bayes_location/resolve/main/REPRODUCE.md
- Command line
-
hf download hf://cangyeone/robust_bayes_location/REPRODUCE.md
-
curl -L -o REPRODUCE.md https://huggingface.co/cangyeone/robust_bayes_location/resolve/main/REPRODUCE.md
12.3 kB
| # Reproduce the final controlled comparison | |
| The latest additive four-method synthetic QC postprocessing is documented in | |
| `RELEASE_SYNC_20260911.md`; its portable command does not rerun inference. | |
| Commands run from the repository root unless stated otherwise. They describe | |
| the already completed experiments; downloading the archive does not launch | |
| training or location. Retain run-specific outputs instead of overwriting | |
| frozen evidence. Paths below are relative and contain no private host details. | |
| ## 1. Environment and integrity | |
| ```bash | |
| git xet install | |
| git clone https://huggingface.co/cangyeone/robust_bayes_location | |
| cd robust_bayes_location | |
| shasum -a 256 -c MANIFEST.sha256 | |
| python tools/privacy_audit.py --repository . --check-history | |
| ./setup_public.sh | |
| python -m venv .venv-locator | |
| source .venv-locator/bin/activate | |
| python -m pip install -r environment/locator-requirements.txt | |
| ``` | |
| Use environment/eikonet-requirements.txt in a separate environment for | |
| EikoNet/HypoSVI. Recorded proposed science runs used MPS; final run-46 HypoSVI | |
| synthetic and both real runs used CUDA. Location supports the documented | |
| backends, but identical seeds across CPU/MPS/CUDA do not guarantee identical | |
| floating-point trajectories. Source-only checks: | |
| ```bash | |
| cd revision_experiments | |
| python -m unittest -v test_sampler_integrity test_hyposvi_baseline \ | |
| test_eikonet_phase_adapter test_hyposvi_eikonet_initializer test_qc_rank_stability | |
| cd .. | |
| ``` | |
| Do not count skipped optional upstream-equation tests as passes. | |
| ## 2. Supervised travel-time network | |
| The retained checkpoint is models/proposed/time.v1.0.pt. This is supervised | |
| regression on labeled source–receiver P/S travel times, not a PINN. | |
| Velocity arrays generate labels offline; the training algorithm does not read | |
| velocity values or impose an eikonal equation. | |
| ```bash | |
| python source/original_workflow/travel_time_train.py \ | |
| --real_txt data/synthetic/train.synth_arrivals_skfmm_noise.new.txt \ | |
| --meta_json data/velocity/xyz_vp_vs_meta.json \ | |
| --device auto --seed 20260831 \ | |
| --hidden_dim 256 --batch_size 128 --epochs 10 --lr 1e-4 \ | |
| --save_ckpt work/time.retrained.pt | |
| ``` | |
| The legacy --real_txt argument names a synthetic training file here. | |
| The released checkpoint is the frozen experiment model; a fresh retraining | |
| is not asserted to reproduce its weights bit for bit. | |
| ## 3. Common synthetic input and proposed locator | |
| All primary methods use data/synthetic/loc.synth_arrivals_skfmm_noise.new.txt: | |
| 3,206 event groups and 86,827 observations, including round(0.15*n_phase) | |
| 8 s Gaussian gross-error perturbations per event. The common numerical set | |
| is 2,998 events / 86,411 rows; 208 single-station P+S inputs count as failures. | |
| ```bash | |
| cd revision_experiments | |
| python synthetic15_corrected.py \ | |
| --out_dir ../work/proposed_synthetic \ | |
| --min_stations 4 --initialization multistart \ | |
| --init_candidate_strategy hybrid --init_pool_size 32 \ | |
| --init_refine_top_k 4 --init_steps 100 --chain_init_policy best \ | |
| --chain_seeds 95001,95002,95003 \ | |
| --n_samples 6000 --burn 3000 --thin 2 | |
| cd .. | |
| ``` | |
| The existing joint-model/indicator-ablation outputs and saved diagnostic | |
| draws are under revision_experiments/run_24_synthetic15_best_basin/. | |
| The writers use one event ordering for sample axes and catalog rows. | |
| The main result tables use frozen full-sample catalog estimates. | |
| Old exploratory held-out threshold/maximum-coordinate-width diagnostics | |
| are not controlling evidence for the paper's QC claim. | |
| ## 4. Fresh NLLoc EDT | |
| Compile the pinned 7.1.04 source: | |
| ```bash | |
| mkdir -p external/NonLinLoc/src/bin | |
| cmake -S external/NonLinLoc/src -B work/nonlinloc-build | |
| cmake --build work/nonlinloc-build --parallel | |
| ``` | |
| If necessary copy the built NLLoc and Grid2Time executables to | |
| external/NonLinLoc/src/bin/. The same 3-D slowness arrays, input stations, | |
| arrivals, and P/S reported uncertainties 0.3/0.4 s are used. Ordinary | |
| synthetic noise of 0.2/0.3 s is a different quantity. | |
| ```bash | |
| cd revision_experiments | |
| python nlloc_multicore_rerun.py grid2time \ | |
| --dataset synthetic --out-dir ../work/nlloc_synthetic --workers 16 | |
| python nlloc_multicore_rerun.py locate \ | |
| --dataset synthetic --out-dir ../work/nlloc_synthetic --workers 32 | |
| python nlloc_multicore_rerun.py summarize --out-dir ../work/nlloc_synthetic | |
| cd .. | |
| ``` | |
| data/nlloc/synthetic/ contains the fresh controls, synthetic real.obs | |
| (legacy filename), synthetic sc.stations, catalog, covariance, phase export, | |
| and run accounting. No real observations are stored in that directory. | |
| The reported point estimate is the EDT maximum-likelihood location. | |
| ## 5. Independent EikoNet and HypoSVI run 46 | |
| Official EikoNet model/source is pinned under external/EikoNet/. | |
| Training/checkpoint-selection code is eikonet_chuandian.py and | |
| eikonet_checkpoint_selection.py, with recorded training histories and | |
| candidate checkpoints in revision_experiments/run_34_eikonet_chuandian_formal/. | |
| The frozen selected models are P/eikonet_p_epoch0040.pt and | |
| S/eikonet_s_epoch0050.pt. Both use the common 3-D velocity arrays. | |
| The final validation input and output are under | |
| revision_experiments/run_46_hyposvi_eikonet_independent_3206/. | |
| The validation_input directory contains 60 base events with no overlap with | |
| any of the 3,206 formal input IDs. Rebuild observations without loading the | |
| proposed surrogate or creating its refined centers: | |
| ```bash | |
| python revision_experiments/build_hyposvi_validation_dataset.py \ | |
| --clean-arrivals data/synthetic/synth_arrivals_skfmm.txt \ | |
| --formal-event-table data/nlloc/synthetic/all.locfiles.posterior.csv \ | |
| --data-only --out-dir work/hyposvi46/validation_input | |
| ``` | |
| Create independent EikoNet validation and test starting centers: | |
| ```bash | |
| python revision_experiments/hyposvi_eikonet_initializer.py \ | |
| --dataset-role validation --project-root . --device cuda \ | |
| --checkpoint-p revision_experiments/run_34_eikonet_chuandian_formal/P/eikonet_p_epoch0040.pt \ | |
| --checkpoint-s revision_experiments/run_34_eikonet_chuandian_formal/S/eikonet_s_epoch0050.pt \ | |
| --validation-dir work/hyposvi46/validation_input \ | |
| --out-dir work/hyposvi46/initializers/validation | |
| python revision_experiments/hyposvi_eikonet_initializer.py \ | |
| --dataset-role synthetic-test --project-root . --device cuda \ | |
| --checkpoint-p revision_experiments/run_34_eikonet_chuandian_formal/P/eikonet_p_epoch0040.pt \ | |
| --checkpoint-s revision_experiments/run_34_eikonet_chuandian_formal/S/eikonet_s_epoch0050.pt \ | |
| --synthetic-input data/synthetic/loc.synth_arrivals_skfmm_noise.new.txt \ | |
| --out-dir work/hyposvi46/initializers/test | |
| ``` | |
| Candidate generation is blind and uses the same raw opportunity as the | |
| proposed locator, but ranking/refinement uses EikoNet independently. | |
| Initializer seeds default to 94017 (validation) and 93017 (synthetic test). | |
| For cross-platform bitwise raw-candidate reproducibility, the initializer | |
| also supports --write-raw-candidate-npz and --raw-candidate-npz; the saved | |
| synthetic initializer bundles retain their attestations. | |
| ```bash | |
| python revision_experiments/hyposvi_eikonet_comparison.py validate \ | |
| --project-root . --device cuda \ | |
| --checkpoint-p revision_experiments/run_34_eikonet_chuandian_formal/P/eikonet_p_epoch0040.pt \ | |
| --checkpoint-s revision_experiments/run_34_eikonet_chuandian_formal/S/eikonet_s_epoch0050.pt \ | |
| --out-dir work/hyposvi46 \ | |
| --validation-dir work/hyposvi46/validation_input \ | |
| --validation-initializer-dir work/hyposvi46/initializers/validation \ | |
| --particles 150,300 --epochs 175,350 --step-sizes 0.5,1.0 \ | |
| --validation-seeds 83001,83002 --batch-events 32 \ | |
| --max-padded-pairs-per-batch 6720 --sigma-p 0.3 --sigma-s 0.4 | |
| python revision_experiments/hyposvi_eikonet_comparison.py test \ | |
| --project-root . --device cuda \ | |
| --checkpoint-p revision_experiments/run_34_eikonet_chuandian_formal/P/eikonet_p_epoch0040.pt \ | |
| --checkpoint-s revision_experiments/run_34_eikonet_chuandian_formal/S/eikonet_s_epoch0050.pt \ | |
| --out-dir work/hyposvi46 \ | |
| --selected-configuration work/hyposvi46/selected_configuration.json \ | |
| --synthetic-input data/synthetic/loc.synth_arrivals_skfmm_noise.new.txt \ | |
| --initializer-csv work/hyposvi46/initializers/test/multistart_initialization.csv \ | |
| --initializer-info work/hyposvi46/initializers/test/shared_initializer_info.json \ | |
| --test-seeds 82001 --workers 1 --batch-events 32 \ | |
| --max-padded-pairs-per-batch 6720 --sigma-p 0.3 --sigma-s 0.4 | |
| ``` | |
| The archived grid selects 300/350/0.5. The frozen completed formal run has | |
| 2,998 finite solutions and mean H/Z/T errors 5.884 km / 5.406 km / 0.419 s. | |
| Its audit summary passes 503/503 checks. Earlier run-35 shared-initializer | |
| or pilot-overlap outputs cannot be relabeled as this independent result. | |
| ## 6. Frozen-result plots and diagnostic checks | |
| Regenerate the unfiltered synthetic map without inference: | |
| ```bash | |
| python revision_experiments/plot_synthetic15_locations.py \ | |
| --input-data repro_outputs/synthetic/synthetic15_location_comparison.csv \ | |
| --output-stem work/fig_synthetic15_locations_grayscale | |
| ``` | |
| Recompute residual fits and coverage from saved arrays: | |
| ```bash | |
| python revision_experiments/synthetic_residual_coverage.py \ | |
| --synthetic-input data/synthetic/loc.synth_arrivals_skfmm_noise.new.txt \ | |
| --checkpoint models/proposed/time.v1.0.pt \ | |
| --proposed-npz \ | |
| revision_experiments/run_24_synthetic15_best_basin/diagnostic_seed95001_student_t_z.npz \ | |
| revision_experiments/run_24_synthetic15_best_basin/diagnostic_seed95002_student_t_z.npz \ | |
| revision_experiments/run_24_synthetic15_best_basin/diagnostic_seed95003_student_t_z.npz \ | |
| --hyposvi-npz revision_experiments/run_46_hyposvi_eikonet_independent_3206/test/particles_test_p300_e350_s0p5_seed82001.npz \ | |
| --nlloc data/nlloc/synthetic/all.locfiles.posterior.csv \ | |
| --out-dir work/residual_coverage --device cpu | |
| python revision_experiments/qc_rank_stability.py \ | |
| --synthetic revision_experiments/run_24_synthetic15_best_basin \ | |
| --output-dir work/qc_stability \ | |
| --private-manifest work/private/qc_source_manifest.json | |
| ``` | |
| QC stability uses the exact horizontal/depth percentile score. Diagnostic | |
| draws are additionally thinned (150 per synthetic chain, 75 per real chain); | |
| frozen operational catalog widths use all 1,500 retained draws per chain. | |
| Residual-fit means and full coverage curves use the saved diagnostic draws. | |
| The new check neither replaces catalog point estimates nor calibrates intervals. | |
| The public synthetic-only invocation produces 10 comparisons. Authorized | |
| users may add --direct and --associated directories for the 30-comparison | |
| analysis reported in SI; raw real inputs and chain arrays are not released. | |
| ## 7. Restricted real-data reproduction and SI timing | |
| Real inputs exist but are intentionally excluded, including every .pha file. | |
| Obtain and cite the permitted Luding comparison data through Liu et al. (2023), | |
| https://doi.org/10.6038/cjg2023Q0841. CENC inputs have separate restrictions. | |
| Keep all permitted inputs and event-level outputs in work/private_real_data/. | |
| Do not attempt to reconstruct restricted locations from aggregate tables. | |
| hyposvi_eikonet_initializer.py supports real-direct and real-associated roles; | |
| supply --observations and --stations privately and use its independent | |
| EikoNet outputs with hyposvi_eikonet_real.py. Use published defaults: | |
| 150 particles, 175 epochs, step size 1.0, seed 84001; no catalog-based tuning. | |
| Three methods share the same 10,487/224,644 direct and 10,950/176,243 | |
| associated event/phase counts. NLLoc's one associated solver failure stays | |
| a failed output and is not deleted from another method's input. | |
| Real three-method recall curves (180 aggregate points), paired intervals, | |
| conditional-difference summaries, GAU/EDT checks and timing are in | |
| repro_outputs/real_aggregate/. Real maps, particles, matched-event tuples, | |
| station tables and restricted source fingerprints are not part of this release. | |
| Forward validation at actual receivers is therefore reproducible only by | |
| authorized users with those receiver definitions; public tables provide | |
| aggregate evidence, not substitute inputs. | |
| The native real-catalog timing comparison is SI-only (Table S7). | |
| It excludes training/table construction, initialization, checkpoint compression | |
| and downstream analysis, and is not a common-latency or equal-posterior-quality | |
| benchmark. NLLoc is fastest in the recorded native configuration. | |