From 1b930b0436701be947f752960d22553ff26e9964 Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Tue, 1 Mar 2022 09:58:39 -0700 Subject: [PATCH] zSed in site data now passed to chapman --- .../gov/usgs/earthquake/nshmp/calc/Sites.java | 8 +-- .../nshmp/gmm/NgaEastUsgs_2017.java | 8 +-- .../usgs/earthquake/nshmp/model/SiteData.java | 53 +++++++++---------- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/Sites.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/Sites.java index a8ebc50d..33c7c541 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/calc/Sites.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/Sites.java @@ -118,10 +118,10 @@ public final class Sites { SiteData siteData) { Site.Builder builder = Site.builder().location(loc); - SiteData.Values sdValues = siteData.get(loc); - sdValues.z1p0.ifPresent(builder::z1p0); - sdValues.z2p5.ifPresent(builder::z2p5); - + SiteData.Values values = siteData.get(loc); + values.z1p0.ifPresent(builder::z1p0); + values.z2p5.ifPresent(builder::z2p5); + values.zSed.ifPresent(builder::zSed); return builder; } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/NgaEastUsgs_2017.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/NgaEastUsgs_2017.java index b5796f43..48005c04 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/NgaEastUsgs_2017.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/NgaEastUsgs_2017.java @@ -409,9 +409,9 @@ public abstract class NgaEastUsgs_2017 implements GroundMotionModel { @Override public LogicTree<GroundMotion> calc(GmmInput in) { - double cpa = Double.isNaN(in.z2p5) + double cpa = Double.isNaN(in.zSed) ? 0.0 - : log(ChapmanGuo_2021.cpaPsaRatio(imt, in.z2p5, in.Mw, in.rJB)); + : log(ChapmanGuo_2021.cpaPsaRatio(imt, in.zSed, in.Mw, in.rJB)); Position p = tables[0].position(in.rRup, in.Mw); double[] μs = new double[MODEL_COUNT]; for (int i = 0; i < MODEL_COUNT; i++) { @@ -542,9 +542,9 @@ public abstract class NgaEastUsgs_2017 implements GroundMotionModel { @Override public LogicTree<GroundMotion> calc(GmmInput in) { GmmInput inRock = GmmInput.builder().fromCopy(in).vs30(3000).build(); - double cpa = Double.isNaN(in.z2p5) + double cpa = Double.isNaN(in.zSed) ? 0.0 - : log(ChapmanGuo_2021.cpaPsaRatio(imt, in.z2p5, in.Mw, in.rJB)); + : log(ChapmanGuo_2021.cpaPsaRatio(imt, in.zSed, in.Mw, in.rJB)); Position p = tables.values().iterator().next().position(in.rRup, in.Mw); double[] μs = new double[GMMS.size()]; for (int i = 0; i < GMMS.size(); i++) { diff --git a/src/main/java/gov/usgs/earthquake/nshmp/model/SiteData.java b/src/main/java/gov/usgs/earthquake/nshmp/model/SiteData.java index 83f72e77..54356f75 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/model/SiteData.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/model/SiteData.java @@ -71,27 +71,37 @@ public class SiteData { } /** - * Return the site data values for the specified location. + * Return the site data values for the specified location. Once a polygon + * 'hit' ocurs, method breaks out of search loops. * * @param location of interest */ public Values get(Location location) { Values.Builder builder = new Values.Builder(); for (Basin basin : basins) { - if (basin.contains(location)) { - builder.basinValues(basin.get(location)); + Location snapped = snapToGrid(location, basin.spacing, basin.scale); + if (basin.contains(snapped)) { + builder.basinValues(basin.data.get(snapped)); break; } } for (Margin margin : margins) { - if (margin.contains(location)) { - builder.marginValues(margin.get(location)); + Location snapped = snapToGrid(location, margin.spacing, margin.scale); + if (margin.contains(snapped)) { + builder.marginValues(margin.data.get(snapped)); break; } } return builder.build(); } + /* Snap location to closest multiple of spacing. */ + private static Location snapToGrid(Location loc, double spacing, int scale) { + return Location.create( + snapToGrid(loc.longitude, spacing, scale), + snapToGrid(loc.latitude, spacing, scale)); + } + /* * Snap value to closest multiple of spacing. * @@ -184,10 +194,11 @@ public class SiteData { final String name; final String id; final String model; + final double spacing; final int scale; final Feature feature; final Area area; - final Map<Location, Values> dataMap; + final Map<Location, Values> data; private Basin(Path geojson) { Feature feature = GeoJson.from(geojson).toFeature(); @@ -195,12 +206,12 @@ public class SiteData { this.name = properties.getString(NAME).orElseThrow(); this.id = properties.getString(ID).orElseThrow(); this.model = properties.getString(MODEL).orElseThrow(); - double spacing = properties.getDouble(SPACING).orElseThrow(); + this.spacing = properties.getDouble(SPACING).orElseThrow(); this.scale = BigDecimal.valueOf(spacing).scale(); this.feature = feature; this.area = new Area(Locations.toPath(feature.asPolygonBorder())); - Path dataFile = geojson.resolveSibling(id + ".csv"); - this.dataMap = loadData(dataFile); + Path csvpath = geojson.resolveSibling(id + ".csv"); + this.data = loadData(csvpath); } /* Return whether the basin contains the supplied location. */ @@ -208,14 +219,6 @@ public class SiteData { return area.contains(loc.longitude, loc.latitude); } - Values get(Location loc) { - - Location roundedLoc = Location.create( - Maths.round(loc.longitude, scale), - Maths.round(loc.latitude, scale)); - return dataMap.get(roundedLoc); - } - private Map<Location, Values> loadData(Path file) { DelimitedData csv = DelimitedData.comma(file); try (Stream<Record> stream = csv.records()) { @@ -253,7 +256,7 @@ public class SiteData { final int scale; final Feature feature; final Area area; - final Map<Location, Values> dataMap; + final Map<Location, Values> data; private Margin(Path geojson) { Feature feature = GeoJson.from(geojson).toFeature(); @@ -265,8 +268,8 @@ public class SiteData { this.scale = BigDecimal.valueOf(spacing).scale(); this.feature = feature; this.area = new Area(Locations.toPath(feature.asPolygonBorder())); - Path dataFile = geojson.resolveSibling(id + ".csv"); - this.dataMap = loadData(dataFile); + Path csvpath = geojson.resolveSibling(id + ".csv"); + this.data = loadData(csvpath); } /* Return whether the basin contains the supplied location. */ @@ -274,13 +277,6 @@ public class SiteData { return area.contains(loc.longitude, loc.latitude); } - Values get(Location loc) { - Location snappedLoc = Location.create( - snapToGrid(loc.longitude, spacing, scale), - snapToGrid(loc.latitude, spacing, scale)); - return dataMap.get(snappedLoc); - } - private Map<Location, Values> loadData(Path file) { DelimitedData csv = DelimitedData.comma(file); try (Stream<Record> stream = csv.records()) { @@ -291,7 +287,8 @@ public class SiteData { } private static Values toValues(Record record) { - return new Values(record.getDouble("zsed")); + double value = Maths.round(record.getDouble("zsed") / 1000.0, 3); + return new Values(value); } static final class Values { -- GitLab