From 795fc43dcdc5b5129755ceee2b9135a8fdeebbab Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Mon, 9 Dec 2024 14:24:02 -0700
Subject: [PATCH] removed fixed data adjustments

---
 .../nshmp/gmm/UsgsPrviBackbone2025.java       | 92 ++++++++-----------
 .../coeffs/prvi-25-backbone-adjustments.csv   | 24 -----
 2 files changed, 39 insertions(+), 77 deletions(-)
 delete mode 100644 src/main/resources/gmm/coeffs/prvi-25-backbone-adjustments.csv

diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/UsgsPrviBackbone2025.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/UsgsPrviBackbone2025.java
index 5adb0489..a2ac1f92 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/UsgsPrviBackbone2025.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/UsgsPrviBackbone2025.java
@@ -44,31 +44,20 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
 
   private static final String NAME = "USGS PRVI Backbone (2025)";
 
-  static final CoefficientContainer COEFFS_PHIS2S_ACTIVE_CRUST =
-      new CoefficientContainer("prvi-25-backbone-phiS2S_crustal.csv");
-  static final CoefficientContainer COEFFS_PHISS_ACTIVE_CRUST =
-      new CoefficientContainer("prvi-25-backbone-phiSS_crustal.csv");
-  static final CoefficientContainer COEFFS_SIGMA_SUBDUCTION =
-      new CoefficientContainer("prvi-25-backbone-sigma_subduction.csv");
-  static final CoefficientContainer COEFFS_TAU_ACTIVE_CRUST =
-      new CoefficientContainer("prvi-25-backbone-tau_crustal.csv");
+  static final CoefficientContainer COEFFS_PHIS2S_ACTIVE_CRUST;
+  static final CoefficientContainer COEFFS_PHISS_ACTIVE_CRUST;
+  static final CoefficientContainer COEFFS_SIGMA_SUBDUCTION;
+  static final CoefficientContainer COEFFS_TAU_ACTIVE_CRUST;
+
+  static {
+    COEFFS_PHIS2S_ACTIVE_CRUST = new CoefficientContainer("prvi-25-backbone-phiS2S_crustal.csv");
+    COEFFS_PHISS_ACTIVE_CRUST = new CoefficientContainer("prvi-25-backbone-phiSS_crustal.csv");
+    COEFFS_SIGMA_SUBDUCTION = new CoefficientContainer("prvi-25-backbone-sigma_subduction.csv");
+    COEFFS_TAU_ACTIVE_CRUST = new CoefficientContainer("prvi-25-backbone-tau_crustal.csv");
+  }
 
   // TODO consider separating calc method in NGA models so that we can get the
-  // mean directly instead of unwrapping from singleton ground motion logic
-  // tree
-
-  /*
-   * Bias adjustment coefficients from https://github.com/gem/oq-engine/blob/
-   * 576bf0c6853ca896aae84e68ad848d39de09a396/openquake/hazardlib/gsim/usgs_prvi
-   * .py last updated Jun 25, 2024
-   */
-  // COEFFS_DATA_ADJUSTMENT is currently used to get the IMT set for USGS_PRVI_*
-  // models
-  static final CoefficientContainer COEFFS_DATA_ADJUSTMENT =
-      new CoefficientContainer("prvi-25-backbone-adjustments.csv");
-
-  public static final double DATA_ADJUST_CRUSTAL = -0.3;
-  public static final double DATA_ADJUST_SUBDUCTION = -0.4;
+  // mean directly instead of unwrapping from singleton ground motion logic tree
 
   public static final String MODEL_BASE_ID = "base";
   public static final String MODEL_ADJUST_ID = "adjust";
@@ -111,7 +100,6 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
       φSub = coeffsSubSigma.get("phi_mean");
       φSubSS = coeffsSubSigma.get("PhiSS_PRVI");
       φSubS2S = coeffsSubSigma.get("phiS2S_PRVI_smooth");
-
     }
   }
 
@@ -120,18 +108,15 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
   private final LogicTree<GroundMotionModel> tree;
   private final Imt imt;
   private final GroundMotionTable[] epiTables; // 0=lower, 1=upper
-  private final double dataAdjust;
 
   /* Supply map of ground motion models initialized to the required IMT. */
   UsgsPrviBackbone2025(
       Imt imt,
       String name,
       Map<Gmm, Double> gmms,
-      GroundMotionTable[] epiTables,
-      double dataAdjust) {
+      GroundMotionTable[] epiTables) {
     this.imt = imt;
     this.epiTables = epiTables;
-    this.dataAdjust = dataAdjust;
     LogicTree.Builder<GroundMotionModel> b = LogicTree.builder(name);
     gmms.entrySet().stream().forEach(e -> b.addBranch(
         e.getKey().name(),
@@ -160,7 +145,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
   LogicTree<GroundMotion> calc(GmmInput in, boolean epi, SigmaType σType) {
 
     GroundMotion bgm = calcBackboneGroundMotion(in);
-    double μ = bgm.mean() + dataAdjust;
+    double μ = bgm.mean();
     double[] σs = calcSigmas(in); // NGA=0, PRVI=1
 
     if (epi) {
@@ -188,6 +173,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     for (Branch<GroundMotionModel> b : tree) {
       // NGA GMMs currently returning mix of singleton trees and epi branches
       // TODO would be preferable to get the mean directly w/o epi branches
+      // consider 'base' No_EPI models for NGA-sub ??
       LogicTree<GroundMotion> gmTree = b.value().calc(in);
       GroundMotion gm = (gmTree.size() == 1)
           ? gmTree.get(0).value()
@@ -232,11 +218,11 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
         CY_14_BASE, 0.25);
 
     ActiveCrust(Imt imt) {
-      this(imt, NAME, 0.0);
+      this(imt, NAME);
     }
 
-    ActiveCrust(Imt imt, String name, double dataAdjust) {
-      super(imt, name, GMM_MAP, getPrviEpi(ACTIVE_CRUST, imt), dataAdjust);
+    ActiveCrust(Imt imt, String name) {
+      super(imt, name, GMM_MAP, getPrviEpi(ACTIVE_CRUST, imt));
     }
 
     @Override
@@ -277,7 +263,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = ActiveCrust.NAME + " (NGA sigma)";
 
     ActiveCrustSigmaNga(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -292,7 +278,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = ActiveCrust.NAME + " (adjusted)";
 
     ActiveCrustAdjusted(Imt imt) {
-      super(imt, NAME, DATA_ADJUST_CRUSTAL);
+      super(imt, NAME);
     }
 
     @Override
@@ -308,7 +294,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = ActiveCrust.NAME + " (adjusted, no epi, NGA sigma)";
 
     ActiveCrustAdjustedNoEpiSigmaNga(Imt imt) {
-      super(imt, NAME, DATA_ADJUST_CRUSTAL);
+      super(imt, NAME);
     }
 
     @Override
@@ -324,7 +310,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = ActiveCrust.NAME + " (no epi, NGA sigma)";
 
     ActiveCrustNoEpiSigmaNga(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -340,7 +326,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = ActiveCrust.NAME + " (no epi, PRVI sigma)";
 
     ActiveCrustNoEpiSigmaPrvi(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -389,11 +375,11 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
         PSBAH_20_GLOBAL_INTERFACE, 0.3334);
 
     Interface(Imt imt) {
-      this(imt, NAME, 0.0);
+      this(imt, NAME);
     }
 
-    Interface(Imt imt, String name, double dataAdjust) {
-      super(imt, name, GMM_MAP, getPrviEpi(SUBDUCTION_INTERFACE, imt), dataAdjust);
+    Interface(Imt imt, String name) {
+      super(imt, name, GMM_MAP, getPrviEpi(SUBDUCTION_INTERFACE, imt));
 
     }
 
@@ -413,7 +399,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Interface.NAME + " (NGA sigma)";
 
     InterfaceSigmaNga(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -428,7 +414,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Interface.NAME + " (adjusted)";
 
     InterfaceAdjusted(Imt imt) {
-      super(imt, NAME, DATA_ADJUST_SUBDUCTION);
+      super(imt, NAME);
     }
 
     @Override
@@ -444,7 +430,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Interface.NAME + " (adjusted, no epi, NGA sigma)";
 
     InterfaceAdjustedNoEpiSigmaNga(Imt imt) {
-      super(imt, NAME, DATA_ADJUST_SUBDUCTION);
+      super(imt, NAME);
     }
 
     @Override
@@ -460,7 +446,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Interface.NAME + " (no epi, NGA sigma)";
 
     InterfaceNoEpiSigmaNga(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -476,7 +462,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Interface.NAME + " (no epi, PRVI sigma)";
 
     InterfaceNoEpiSigmaPrvi(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -525,11 +511,11 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
         PSBAH_20_GLOBAL_SLAB, 0.3334);
 
     Slab(Imt imt) {
-      this(imt, NAME, 0.0);
+      this(imt, NAME);
     }
 
-    Slab(Imt imt, String name, double dataAdjust) {
-      super(imt, name, GMM_MAP, getPrviEpi(SUBDUCTION_SLAB, imt), dataAdjust);
+    Slab(Imt imt, String name) {
+      super(imt, name, GMM_MAP, getPrviEpi(SUBDUCTION_SLAB, imt));
     }
 
     @Override
@@ -548,7 +534,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Slab.NAME + " (NGA sigma)";
 
     SlabSigmaNga(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -563,7 +549,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Slab.NAME + " (adjusted)";
 
     SlabAdjusted(Imt imt) {
-      super(imt, NAME, DATA_ADJUST_SUBDUCTION);
+      super(imt, NAME);
     }
 
     @Override
@@ -579,7 +565,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Slab.NAME + " (adjusted, no epi, NGA sigma)";
 
     SlabAdjustedNoEpiSigmaNga(Imt imt) {
-      super(imt, NAME, DATA_ADJUST_SUBDUCTION);
+      super(imt, NAME);
     }
 
     @Override
@@ -595,7 +581,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Slab.NAME + " (no epi, NGA sigma)";
 
     SlabNoEpiSigmaNga(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
@@ -611,7 +597,7 @@ public abstract class UsgsPrviBackbone2025 implements GroundMotionModel {
     static final String NAME = Slab.NAME + " (no epi, PRVI sigma)";
 
     SlabNoEpiSigmaPrvi(Imt imt) {
-      super(imt, NAME, 0.0);
+      super(imt, NAME);
     }
 
     @Override
diff --git a/src/main/resources/gmm/coeffs/prvi-25-backbone-adjustments.csv b/src/main/resources/gmm/coeffs/prvi-25-backbone-adjustments.csv
deleted file mode 100644
index f2e3de59..00000000
--- a/src/main/resources/gmm/coeffs/prvi-25-backbone-adjustments.csv
+++ /dev/null
@@ -1,24 +0,0 @@
-imt,   active_crust, interface, intraslab
-# PGV,         -0.452,    -1.189,    -0.476
-PGA,         -0.329,    -0.888,    -0.376
-0.010,       -0.329,    -0.888,    -0.376
-0.020,       -0.301,    -0.804,    -0.239
-0.030,       -0.274,    -0.720,    -0.103
-0.050,       -0.246,    -0.637,     0.034
-0.075,       -0.155,    -0.621,    -0.044
-0.100,       -0.188,    -0.601,    -0.234
-0.150,       -0.142,    -0.575,    -0.016
-0.200,       -0.132,    -0.839,    -0.241
-0.250,       -0.195,    -0.852,    -0.234
-0.300,       -0.289,    -0.971,    -0.302
-0.400,       -0.470,    -1.250,    -0.428
-0.500,       -0.598,    -1.424,    -0.570
-0.750,       -0.679,    -1.636,    -0.757
-1.000,       -0.661,    -1.692,    -0.837
-1.500,       -0.588,    -1.658,    -0.849
-2.000,       -0.483,    -1.512,    -0.780
-3.000,       -0.319,    -1.256,    -0.466
-4.000,       -0.171,    -1.123,    -0.282
-5.000,        0.001,    -0.985,    -0.056
-7.500,        0.258,    -0.776,     0.289
-10.000,       0.426,    -0.639,     0.640
-- 
GitLab