From b21aa2e40fc44cf36da78d2076bd63155989d2a1 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Fri, 28 Jan 2022 16:43:55 -0700
Subject: [PATCH] fixed disagg source weight application

---
 .../usgs/earthquake/nshmp/calc/Disaggregation.java  |  2 +-
 .../usgs/earthquake/nshmp/calc/Disaggregator.java   | 13 ++++---------
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java
index 940515dd..cef4d828 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java
@@ -342,7 +342,7 @@ public final class Disaggregation {
         double ruptureSetRate = RATE_INTERPOLATER.findY(ruptureSetCurve, config.iml);
         if (Double.isNaN(ruptureSetRate) || ruptureSetRate == 0.0) {
           // Consider logging statement below
-          // System.out.println("Skipping: " + curveSet.ruptureSet.name());
+          System.err.println("Skipping: " + curveSet.ruptures.name());
           continue;
         }
         Map<Gmm, DisaggDataset> ruptureSetDatasets = Disaggregator.disaggregate(
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java
index 6fa3be47..e40bf69a 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java
@@ -209,6 +209,7 @@ final class Disaggregator {
      * are [rate, residual, rScaled, mScaled, εScaled].
      */
     Map<Gmm, double[]> gmmData = createDataMap(gmmKeys);
+    double srcWeight = ruptures.weight();
 
     /* Add rupture data to builders */
     for (int i = 0; i < inputs.size(); i++) {
@@ -233,11 +234,7 @@ final class Disaggregator {
           double ε = Maths.epsilon(μ, σ, iml);
 
           double probAtIml = probModel.exceedance(μ, σ, trunc, imt, iml);
-
-          // TODO need ruptures.weight
-          // double rate = probAtIml * in.rate * sources.weight() * gmmWeight *
-          // branch.weight();
-          double rate = probAtIml * in.rate * 1.0 * gmmWeight * branch.weight();
+          double rate = probAtIml * in.rate * srcWeight * gmmWeight * branch.weight();
 
           double rScaled = rRup * rate;
           double mScaled = Mw * rate;
@@ -314,6 +311,7 @@ final class Disaggregator {
 
     /* Safe covariant cast assuming switch handles variants. */
     SystemRuptureSet systemRuptures = (SystemRuptureSet) ruptures;
+    double srcWeight = ruptures.weight();
 
     Map<Gmm, DisaggDataset.Builder> builders = createBuilders(gmmSet.gmms(), model);
     for (DisaggDataset.Builder builder : builders.values()) {
@@ -411,10 +409,7 @@ final class Disaggregator {
               double ε = Maths.epsilon(μ, σ, iml);
 
               double probAtIml = probModel.exceedance(μ, σ, trunc, imt, iml);
-              // TODO need ruptures.weight
-              // double rate = probAtIml * in.rate * sources.weight() *
-              // gmmWeight * branch.weight();
-              double rate = probAtIml * in.rate * 1.0 * gmmWeight * branch.weight();
+              double rate = probAtIml * in.rate * srcWeight * gmmWeight * branch.weight();
 
               SystemContributor.Builder contributor = contributors.get(gmm);
 
-- 
GitLab