diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java index d750ea5ba47d6582c1436aaf541269f8aedddece..83f5c2e3cfab7d21a6a56b1678b7b6667cc80cb1 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java @@ -101,9 +101,10 @@ public abstract class BoundingReader<T> { int longitudeIndex, int latitudeIndex) { this.location = location; - origin = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.LATITUDE, latitudeIndex), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, longitudeIndex)); + origin = netcdfShape.buildShape() + .add(IndexKey.LATITUDE, latitudeIndex) + .add(IndexKey.LONGITUDE, longitudeIndex) + .build(); } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java index fc4b2f3fb958f5cbc8e86d5d60a66b8030ff31b8..b509a99840caba1f7c7eba78acaac7833d026271 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java @@ -9,7 +9,6 @@ import gov.usgs.earthquake.nshmp.gmm.Imt; import gov.usgs.earthquake.nshmp.netcdf.Netcdf; import gov.usgs.earthquake.nshmp.netcdf.NetcdfGroundMotions; import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; @@ -65,29 +64,31 @@ public class BoundingReaderGroundMotions extends BoundingReader<XySequence> { var targetGroup = ncd.getRootGroup(); var netcdfShape = netcdf.netcdfShape(); - var targetOrigin = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.LATITUDE, idxLatLL), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, idxLonLL)); - var targetShape = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()), - new NetcdfShape.IndexMap(IndexKey.LATITUDE, 2), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, 2), - new NetcdfShape.IndexMap(IndexKey.IMT, netcdfData.imts().size())); - - /* - * Array aHazards now has shape [nVs,2,2,nImt] ...so origin will now be - * [0,0,0,0] for LL grid point ...and shape of requested array is - * [nVs,1,1,nImt] - */ + // Build origin array, e.g. [lon, lat, 0, 0] + var targetOrigin = netcdfShape.buildShape() + .add(IndexKey.LATITUDE, idxLatLL) + .add(IndexKey.LONGITUDE, idxLonLL) + .build(); + + // Build target shape array, e.g. [2, 2, nImt, nSiteClass] + var targetShape = netcdfShape.buildShape() + .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) + .add(IndexKey.LATITUDE, 2) + .add(IndexKey.LONGITUDE, 2) + .add(IndexKey.IMT, netcdfData.imts().size()) + .build(); + var groundMotionArray = targetGroup .findVariableLocal(Key.GROUND_MOTION) .read(targetOrigin, targetShape); - var shape = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()), - new NetcdfShape.IndexMap(IndexKey.LATITUDE, 1), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, 1), - new NetcdfShape.IndexMap(IndexKey.IMT, netcdfData.imts().size())); + // Main data shape, e.g. [1, 1, nImt, nSiteClass] + var shape = netcdfShape.buildShape() + .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) + .add(IndexKey.LATITUDE, 1) + .add(IndexKey.LONGITUDE, 1) + .add(IndexKey.IMT, netcdfData.imts().size()) + .build(); for (var boundingLocation : boundingLocations) { boundingData.put( @@ -134,8 +135,19 @@ public class BoundingReaderGroundMotions extends BoundingReader<XySequence> { }) .toArray(); - var origin = new int[] { iSiteClass, 0 }; - var shape = new int[] { 1, imts.size() }; + // Build origin array, e.g [0, siteClass] + var origin = netcdf.netcdfShape().buildShape() + .add(IndexKey.SITE_CLASS, iSiteClass) + .add(IndexKey.IML, 0) + .reduce() + .build(); + + // Build shape array, e.g. [nImts, 1] + var shape = netcdf.netcdfShape().buildShape() + .add(IndexKey.SITE_CLASS, 1) + .add(IndexKey.IMT, imts.size()) + .reduce() + .build(); try { var xySequence = XySequence.create( diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java index f48287c2a954d1eedb06e966c29720b487bedbc4..488375c3b484403e16e56918c4fa8d12900f1fd8 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java @@ -2,13 +2,13 @@ package gov.usgs.earthquake.nshmp.netcdf.reader; import java.io.IOException; import java.util.List; +import java.util.logging.Logger; import gov.usgs.earthquake.nshmp.data.XySequence; import gov.usgs.earthquake.nshmp.geo.Location; import gov.usgs.earthquake.nshmp.netcdf.Netcdf; import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves; import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; import gov.usgs.earthquake.nshmp.netcdf.data.StaticDataHazardCurves; @@ -62,29 +62,30 @@ public class BoundingReaderHazardCurves extends BoundingReader<StaticDataHazardC var targetGroup = ncd.getRootGroup(); var netcdfShape = netcdf.netcdfShape(); - var targetOrigin = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.LATITUDE, idxLatLL), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, idxLonLL)); - var targetShape = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()), - new NetcdfShape.IndexMap(IndexKey.LATITUDE, 2), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, 2), - new NetcdfShape.IndexMap(IndexKey.IMT, netcdfData.imts().size()), - new NetcdfShape.IndexMap(IndexKey.IML, netcdfData.nIml())); - - /* - * Array aHazards now has shape [nVs,nImt,2,2,nIml] ...so origin will now - * be [0,0,0,0,0] for LL grid point ...and shape of requested array is - * [nVs,nImt,1,1,nIml] - */ + // Build origin array, e.g. [lon, lat, 0, 0, 0] + var targetOrigin = netcdfShape.buildShape() + .add(IndexKey.LATITUDE, idxLatLL) + .add(IndexKey.LONGITUDE, idxLonLL) + .build(); + + // Build target shape array, e.g. [2, 2, nIML, nIMT, nSiteClass] + var targetShape = netcdfShape.buildShape() + .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) + .add(IndexKey.LATITUDE, 2) + .add(IndexKey.LONGITUDE, 2) + .add(IndexKey.IMT, netcdfData.imts().size()) + .add(IndexKey.IML, netcdfData.nIml()) + .build(); + var aHazards = targetGroup.findVariableLocal(Key.HAZARD).read(targetOrigin, targetShape); - var shape = netcdfShape.buildShape( - new NetcdfShape.IndexMap(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()), - new NetcdfShape.IndexMap(IndexKey.LATITUDE, 1), - new NetcdfShape.IndexMap(IndexKey.LONGITUDE, 1), - new NetcdfShape.IndexMap(IndexKey.IMT, netcdfData.imts().size()), - new NetcdfShape.IndexMap(IndexKey.IML, netcdfData.nIml())); + var shape = netcdfShape.buildShape() + .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) + .add(IndexKey.LATITUDE, 1) + .add(IndexKey.LONGITUDE, 1) + .add(IndexKey.IMT, netcdfData.imts().size()) + .add(IndexKey.IML, netcdfData.nIml()) + .build(); for (var boundingLocation : boundingLocations) { boundingData.put( @@ -114,15 +115,30 @@ public class BoundingReaderHazardCurves extends BoundingReader<StaticDataHazardC Array hazards) { var netcdfData = ((NetcdfHazardCurves) netcdf).netcdfData(); var vsImtHazardMap = StaticData.<StaticDataHazardCurves> builder(); + var logger = Logger.getAnonymousLogger(); for (int iSiteClass = 0; iSiteClass < netcdfData.siteClasses().size(); iSiteClass++) { var siteClass = netcdfData.siteClasses().get(iSiteClass); - var imtHazardMap = StaticDataHazardCurves.builder(); + for (int iImt = 0; iImt < netcdfData.imts().size(); iImt++) { var imt = netcdfData.imts().get(iImt); - var origin = new int[] { iSiteClass, iImt, 0 }; - var shape = new int[] { 1, 1, netcdfData.nIml() }; + + // Build origin array, e.g [0, imt, siteClass] + var origin = netcdf.netcdfShape().buildShape() + .add(IndexKey.SITE_CLASS, iSiteClass) + .add(IndexKey.IMT, iImt) + .add(IndexKey.IML, 0) + .reduce() + .build(); + + // Build shape array, e.g. [nIML, 1, 1] + var shape = netcdf.netcdfShape().buildShape() + .add(IndexKey.SITE_CLASS, 1) + .add(IndexKey.IMT, 1) + .add(IndexKey.IML, netcdfData.nIml()) + .reduce() + .build(); try { var xySequence = XySequence.create( diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java index d2ec1f1f67482bc94dab1954adc0b491fa1674f6..6b1fb49d20e11b5607f9655d130ccb1cb2ee2d1f 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Logger; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; @@ -38,6 +39,9 @@ public abstract class Reader { this.targetGroup = targetGroup; netcdfData = readData(targetGroup); netcdfShape = buildNetcdfShape(targetGroup); + + var logger = Logger.getAnonymousLogger(); + logger.info("" + GSON.toJson(netcdfShape)); } public NetcdfShape netcdfShape() {