diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java index 08e5f230a438c9520543c208c917b40bb2c1f2bc..14415cb4c149f9b1d57c6001e148bfff1a62af76 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java @@ -5,6 +5,7 @@ import static gov.usgs.earthquake.nshmp.gmm.Gmm.ASK_14; import static gov.usgs.earthquake.nshmp.gmm.Gmm.ASK_14_BASIN; import static gov.usgs.earthquake.nshmp.gmm.Gmm.ATKINSON_08_PRIME; import static gov.usgs.earthquake.nshmp.gmm.Gmm.ATKINSON_10; +import static gov.usgs.earthquake.nshmp.gmm.Gmm.BCHYDRO_12_SLAB; import static gov.usgs.earthquake.nshmp.gmm.Gmm.BSSA_14; import static gov.usgs.earthquake.nshmp.gmm.Gmm.BSSA_14_BASIN; import static gov.usgs.earthquake.nshmp.gmm.Gmm.CAMPBELL_03; @@ -23,12 +24,12 @@ import static gov.usgs.earthquake.nshmp.gmm.Gmm.SILVA_02; import static gov.usgs.earthquake.nshmp.gmm.Gmm.SOMERVILLE_01; import static gov.usgs.earthquake.nshmp.gmm.Gmm.TORO_97_MW; import static gov.usgs.earthquake.nshmp.gmm.Gmm.TP_05; +import static gov.usgs.earthquake.nshmp.gmm.Gmm.WONG_15; import java.util.Map; +import java.util.Map.Entry; import java.util.stream.Collectors; -import com.google.common.collect.ImmutableMap; - import gov.usgs.earthquake.nshmp.gmm.GmmInput.Constraints; import gov.usgs.earthquake.nshmp.tree.LogicTree; @@ -41,44 +42,34 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; class CombinedGmm implements GroundMotionModel { private static final String NAME = "Combined: "; - private final Map<GroundMotionModel, Double> gmms; + private final Map<Gmm, Double> gmms; + private final Imt imt; /* Supply map of ground motion models initialized to the required IMT. */ private CombinedGmm(Imt imt, Map<Gmm, Double> gmms) { - this.gmms = instancesForImt(imt, gmms); + this.gmms = gmms; + this.imt = imt; } @Override public LogicTree<GroundMotion> calc(GmmInput in) { - Map<GroundMotion, Double> sgms = gmms.entrySet().stream() - .collect(Collectors.toMap( - entry -> GroundMotions.combine(entry.getKey().calc(in)), - Map.Entry::getValue)); - - /* - * Mean values are converted to linear space for combining and returned to - * natural log space upon return. - */ - double μ = sgms.entrySet().stream() - .collect(Collectors.summingDouble( - entry -> Math.exp(entry.getKey().mean()) * entry.getValue())); - - double σ = sgms.entrySet().stream() - .collect(Collectors.summingDouble( - entry -> entry.getKey().sigma() * entry.getValue())); - - return GroundMotions.createTree(Math.log(μ), σ); + LogicTree.Builder<GroundMotion> builder = LogicTree.builder(NAME); + gmms.keySet().forEach(key -> builder.addBranch( + key.name(), + GroundMotions.combine(key.instance(imt).calc(in)), + gmms.get(key))); + return builder.build(); } - static Map<GroundMotionModel, Double> instancesForImt( + static Map<Gmm, GroundMotionModel> instancesForImt( Imt imt, Map<Gmm, Double> gmms) { return gmms.entrySet().stream() .collect(Collectors.toMap( - entry -> entry.getKey().instance(imt), - Map.Entry::getValue)); + Entry::getKey, + entry -> entry.getKey().instance(imt))); } /* @@ -87,11 +78,10 @@ class CombinedGmm implements GroundMotionModel { * intersection of all support IMTs. */ - private static final Map<Gmm, Double> HI_DEEP_2021 = ImmutableMap.<Gmm, Double> builder() - .put(ATKINSON_10, 0.4) - .put(Gmm.BCHYDRO_12_SLAB, 0.4) - .put(Gmm.WONG_15, 0.2) - .build(); + private static final Map<Gmm, Double> HI_DEEP_2021 = Map.of( + ATKINSON_10, 0.4, + BCHYDRO_12_SLAB, 0.4, + WONG_15, 0.2); static final class HawaiiDeep2021 extends CombinedGmm { @@ -104,13 +94,12 @@ class CombinedGmm implements GroundMotionModel { } } - private static final Map<Gmm, Double> HI_SHALLOW_2021 = ImmutableMap.<Gmm, Double> builder() - .put(ATKINSON_10, 0.2) - .put(ASK_14, 0.2) - .put(BSSA_14, 0.2) - .put(CB_14, 0.2) - .put(CY_14, 0.2) - .build(); + private static final Map<Gmm, Double> HI_SHALLOW_2021 = Map.of( + ATKINSON_10, 0.2, + ASK_14, 0.2, + BSSA_14, 0.2, + CB_14, 0.2, + CY_14, 0.2); static final class HawaiiShallow2021 extends CombinedGmm { @@ -123,17 +112,16 @@ class CombinedGmm implements GroundMotionModel { } } - static final Map<Gmm, Double> CEUS_2014_FAULT = ImmutableMap.<Gmm, Double> builder() - .put(AB_06_PRIME, 0.22) - .put(ATKINSON_08_PRIME, 0.08) - .put(CAMPBELL_03, 0.11) - .put(FRANKEL_96, 0.06) - .put(PEZESHK_11, 0.15) - .put(SILVA_02, 0.06) - .put(SOMERVILLE_01, 0.1) - .put(TP_05, 0.11) - .put(TORO_97_MW, 0.11) - .build(); + static final Map<Gmm, Double> CEUS_2014_FAULT = Map.of( + AB_06_PRIME, 0.22, + ATKINSON_08_PRIME, 0.08, + CAMPBELL_03, 0.11, + FRANKEL_96, 0.06, + PEZESHK_11, 0.15, + SILVA_02, 0.06, + SOMERVILLE_01, 0.1, + TP_05, 0.11, + TORO_97_MW, 0.11); /* Need to allow Vs30=3000 through for comparison plots. */ private static final Constraints CEUS_2014_CONSTRAINTS = Constraints.builder() @@ -160,10 +148,9 @@ class CombinedGmm implements GroundMotionModel { } /* 5.0 */ - private static final Map<Gmm, Double> CEUS_2018 = ImmutableMap.<Gmm, Double> builder() - .put(NGA_EAST_USGS, 0.667) - .put(NGA_EAST_USGS_SEEDS, 0.333) - .build(); + private static final Map<Gmm, Double> CEUS_2018 = Map.of( + NGA_EAST_USGS, 0.667, + NGA_EAST_USGS_SEEDS, 0.333); static final class Ceus2018 extends CombinedGmm { @@ -177,10 +164,9 @@ class CombinedGmm implements GroundMotionModel { } /* 5.0 Gulf Coast */ - private static final Map<Gmm, Double> CEUS_2018_CPA = ImmutableMap.<Gmm, Double> builder() - .put(NGA_EAST_USGS_CPA, 0.667) - .put(NGA_EAST_USGS_SEEDS_CPA, 0.333) - .build(); + private static final Map<Gmm, Double> CEUS_2018_CPA = Map.of( + NGA_EAST_USGS_CPA, 0.667, + NGA_EAST_USGS_SEEDS_CPA, 0.333); static final class Ceus2018Cpa extends CombinedGmm { @@ -193,13 +179,12 @@ class CombinedGmm implements GroundMotionModel { } } - private static final Map<Gmm, Double> WUS_2014_4P1 = ImmutableMap.<Gmm, Double> builder() - .put(ASK_14, 0.22) - .put(BSSA_14, 0.22) - .put(CB_14, 0.22) - .put(CY_14, 0.22) - .put(IDRISS_14, 0.12) - .build(); + private static final Map<Gmm, Double> WUS_2014_4P1 = Map.of( + ASK_14, 0.22, + BSSA_14, 0.22, + CB_14, 0.22, + CY_14, 0.22, + IDRISS_14, 0.12); /* 4.1 */ static final class Wus2014_4p1 extends CombinedGmm { @@ -213,12 +198,11 @@ class CombinedGmm implements GroundMotionModel { } } - private static final Map<Gmm, Double> WUS_2014_4P2 = ImmutableMap.<Gmm, Double> builder() - .put(ASK_14, 0.25) - .put(BSSA_14, 0.25) - .put(CB_14, 0.25) - .put(CY_14, 0.25) - .build(); + private static final Map<Gmm, Double> WUS_2014_4P2 = Map.of( + ASK_14, 0.25, + BSSA_14, 0.25, + CB_14, 0.25, + CY_14, 0.25); /* 4.2 */ static final class Wus2014_4p2 extends CombinedGmm { @@ -232,12 +216,11 @@ class CombinedGmm implements GroundMotionModel { } } - private static final Map<Gmm, Double> WUS_2018 = ImmutableMap.<Gmm, Double> builder() - .put(ASK_14_BASIN, 0.25) - .put(BSSA_14_BASIN, 0.25) - .put(CB_14_BASIN, 0.25) - .put(CY_14_BASIN, 0.25) - .build(); + private static final Map<Gmm, Double> WUS_2018 = Map.of( + ASK_14_BASIN, 0.25, + BSSA_14_BASIN, 0.25, + CB_14_BASIN, 0.25, + CY_14_BASIN, 0.25); /* No Idriss. */ static final class Wus2018 extends CombinedGmm { diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/GroundMotions.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/GroundMotions.java index f8c984b1cd16c6c2a6012d53a6bec665e6583d19..d3c9336fc2a6b50b4e40dff453f0d60012ccbad7 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/GroundMotions.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/GroundMotions.java @@ -49,7 +49,6 @@ class GroundMotions { .mapToDouble(Branch::weight) .toArray(); double mean = DoubleData.weightedSumLn(means, weights); - // double sigma = DoubleData.weightedSum(sigmas, weights); double sigma = Maths.srssWeighted(sigmas, weights); return GroundMotion.create(mean, sigma); }