From 0bb1ffbcda038d1dd45c0a5b0fdb9f96641de65f Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Sat, 5 Feb 2022 12:57:03 -0700 Subject: [PATCH 1/5] data type arguments --- .../gov/usgs/earthquake/nshmp/DisaggCalc.java | 26 ++++-------------- .../nshmp/www/hazard/DisaggController.java | 23 ++++++++++++---- .../nshmp/www/hazard/DisaggService.java | 27 +++++++++++++------ .../nshmp/www/hazard/HazardService.java | 17 ++++++++---- 4 files changed, 54 insertions(+), 39 deletions(-) diff --git a/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java b/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java index dd59717af..ae5129376 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java @@ -166,16 +166,11 @@ public class DisaggCalc { */ Path out; if (siteColumns.size() == allColumns.size()) { + checkArgument( modelImts.containsAll(config.hazard.imts), "Config specifies IMTs not supported by model"); - - // List<Imt> imts = config.imts; - - // Path out = calc(model, config, sites, imtImlMaps, log); - double returnPeriod = config.disagg.returnPeriod; - out = calcRp(model, config, sites, returnPeriod, log); } else { @@ -189,19 +184,9 @@ public class DisaggCalc { sites.size() == imls.size(), "Sites and spectra lists different sizes"); log.info("Spectra: " + imls.size()); // 1:1 with sites - out = calcIml(model, config, sites, imls, log); - } - - // List<Map<Imt, Double>> imtImlMaps = readSpectra(siteFile, imts, - // colsToSkip); - // log.info("Spectra: " + imtImlMaps.size()); - // checkArgument(sites.size() == imtImlMaps.size(), "Sites and spectra - // lists different sizes"); - // Spectra should be checked against IMTs supported by model GMMs - - // Path out = calc(model, config, sites, imls, log); + } log.info(PROGRAM + ": finished"); @@ -346,13 +331,13 @@ public class DisaggCalc { } /* Hazard curves are already in log-x space. */ - static final Interpolator IML_INTERPOLATER = Interpolator.builder() + private static final Interpolator IML_INTERPOLATER = Interpolator.builder() .logy() .decreasingY() .build(); - // this should be in a factory - private static Map<Imt, Double> imlsForReturnPeriod( + /** Compute the return period intercepts from a hazard result. */ + public static Map<Imt, Double> imlsForReturnPeriod( Hazard hazard, double returnPeriod) { @@ -360,7 +345,6 @@ public class DisaggCalc { Map<Imt, Double> imls = new EnumMap<>(Imt.class); for (Entry<Imt, XySequence> entry : hazard.curves().entrySet()) { double iml = IML_INTERPOLATER.findX(entry.getValue(), rate); - // remove exp below by transforming disagg-epsilon to log earlier imls.put(entry.getKey(), Math.exp(iml)); } return imls; diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java index 27ab4200b..0642f7b0c 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java @@ -5,10 +5,10 @@ import static com.google.common.base.Preconditions.checkArgument; import java.util.Map; import java.util.Set; +import gov.usgs.earthquake.nshmp.calc.DataType; import gov.usgs.earthquake.nshmp.gmm.Imt; import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; import gov.usgs.earthquake.nshmp.www.ServletUtil; - import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -92,14 +92,20 @@ public class DisaggController { @Schema( minimum = "150", maximum = "3000") @PathVariable double returnPeriod, - @Schema() @QueryValue @Nullable Set<Imt> imt) { + @QueryValue @Nullable Set<Imt> imt, + @Schema(allowableValues = { + "DISAGG_DATA", + "GMM", + "SOURCE" }) @QueryValue @Nullable Set<DataType> out) { try { Set<Imt> imts = HazardService.readImts(http); + Set<DataType> dataTypes = HazardService.readDataTypes(http); DisaggService.RequestRp request = new DisaggService.RequestRp( http, longitude, latitude, vs30, returnPeriod, - imts); + imts, + dataTypes); return DisaggService.getDisaggRp(request); } catch (Exception e) { return ServletUtil.error( @@ -113,6 +119,7 @@ public class DisaggController { * @param longitude Longitude in the range [-360..360]°. * @param latitude Latitude in decimal degrees [-90..90]°. * @param vs30 Site Vs30 value in the range [150..3000] m/s. + * @param out The data types to output */ @Operation( summary = "Disaggregate hazard at specified IMLs", @@ -133,7 +140,11 @@ public class DisaggController { maximum = "90") @PathVariable double latitude, @Schema( minimum = "150", - maximum = "3000") @PathVariable double vs30) { + maximum = "3000") @PathVariable double vs30, + @Schema(allowableValues = { + "DISAGG_DATA", + "GMM", + "SOURCE" }) @QueryValue @Nullable Set<DataType> out) { /* * Developer notes: @@ -146,10 +157,12 @@ public class DisaggController { try { Map<Imt, Double> imtImlMap = http.getParameters().asMap(Imt.class, Double.class); checkArgument(!imtImlMap.isEmpty(), "No IMLs supplied"); + Set<DataType> dataTypes = HazardService.readDataTypes(http); DisaggService.RequestIml request = new DisaggService.RequestIml( http, longitude, latitude, vs30, - imtImlMap); + imtImlMap, + dataTypes); return DisaggService.getDisaggIml(request); } catch (Exception e) { return ServletUtil.error( diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java index 842194aaa..d39349088 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java @@ -16,6 +16,7 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.Range; import gov.usgs.earthquake.nshmp.calc.CalcConfig; +import gov.usgs.earthquake.nshmp.calc.DataType; import gov.usgs.earthquake.nshmp.calc.Disaggregation; import gov.usgs.earthquake.nshmp.calc.Hazard; import gov.usgs.earthquake.nshmp.calc.HazardCalcs; @@ -27,7 +28,6 @@ import gov.usgs.earthquake.nshmp.www.ResponseBody; import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.hazard.HazardService.Metadata; import gov.usgs.earthquake.nshmp.www.meta.Parameter; - import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import jakarta.inject.Singleton; @@ -55,7 +55,7 @@ public final class DisaggService { private static Range<Double> imlRange = Range.closed(0.0001, 8.0); /** HazardController.doGetMetadata() handler. */ - public static HttpResponse<String> getMetadata(HttpRequest<?> request) { + static HttpResponse<String> getMetadata(HttpRequest<?> request) { var url = request.getUri().toString(); var usage = new Metadata(ServletUtil.model()); var response = ResponseBody.usage() @@ -69,7 +69,7 @@ public final class DisaggService { } /** HazardController.doGetDisaggIml() handler. */ - public static HttpResponse<String> getDisaggIml(RequestIml request) + static HttpResponse<String> getDisaggIml(RequestIml request) throws InterruptedException, ExecutionException { var stopwatch = Stopwatch.createStarted(); var disagg = calcDisaggIml(request); @@ -89,7 +89,7 @@ public final class DisaggService { } /** HazardController.doGetDisaggRp() handler. */ - public static HttpResponse<String> getDisaggRp(RequestRp request) + static HttpResponse<String> getDisaggRp(RequestRp request) throws InterruptedException, ExecutionException { var stopwatch = Stopwatch.createStarted(); var disagg = calcDisaggRp(request); @@ -116,7 +116,7 @@ public final class DisaggService { * */ - static Disaggregation calcDisaggIml(RequestIml request) + private static Disaggregation calcDisaggIml(RequestIml request) throws InterruptedException, ExecutionException { HazardModel model = ServletUtil.model(); @@ -124,6 +124,7 @@ public final class DisaggService { // modify config to include service endpoint arguments CalcConfig config = CalcConfig.copyOf(model.config()) .imts(request.imls.keySet()) + // .dataTypes(request.dataTypes) .build(); // TODO this needs to pick up SiteData, centralize @@ -152,7 +153,7 @@ public final class DisaggService { return disagg; } - static Disaggregation calcDisaggRp(RequestRp request) + private static Disaggregation calcDisaggRp(RequestRp request) throws InterruptedException, ExecutionException { HazardModel model = ServletUtil.model(); @@ -160,6 +161,7 @@ public final class DisaggService { // modify config to include service endpoint arguments CalcConfig config = CalcConfig.copyOf(model.config()) .imts(request.imts) + // .dataTypes(request.dataTypes) .build(); // TODO this needs to pick up SiteData, centralize @@ -176,6 +178,9 @@ public final class DisaggService { ServletUtil.TASK_EXECUTOR); Hazard hazard = hazFuture.get(); + // Map<Imt, Double> imls = DisaggCalc.imlsForReturnPeriod( + // hazard, + // request.returnPeriod); CompletableFuture<Disaggregation> disaggfuture = CompletableFuture.supplyAsync( () -> Disaggregation.atReturnPeriod( @@ -195,19 +200,22 @@ public final class DisaggService { final double latitude; final double vs30; final Map<Imt, Double> imls; + final Set<DataType> dataTypes; RequestIml( HttpRequest<?> http, double longitude, double latitude, double vs30, - Map<Imt, Double> imls) { + Map<Imt, Double> imls, + Set<DataType> dataTypes) { this.http = http; this.longitude = longitude; this.latitude = latitude; this.vs30 = vs30; this.imls = imls; + this.dataTypes = dataTypes; } } @@ -219,6 +227,7 @@ public final class DisaggService { final double vs30; final double returnPeriod; final Set<Imt> imts; + final Set<DataType> dataTypes; RequestRp( HttpRequest<?> http, @@ -226,7 +235,8 @@ public final class DisaggService { double latitude, double vs30, double returnPeriod, - Set<Imt> imts) { + Set<Imt> imts, + Set<DataType> dataTypes) { this.http = http; this.longitude = longitude; @@ -236,6 +246,7 @@ public final class DisaggService { this.imts = imts.isEmpty() ? ServletUtil.model().config().hazard.imts : imts; + this.dataTypes = dataTypes; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java index f668b016e..5b41bbe78 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java @@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Stopwatch; import gov.usgs.earthquake.nshmp.calc.CalcConfig; +import gov.usgs.earthquake.nshmp.calc.DataType; import gov.usgs.earthquake.nshmp.calc.Hazard; import gov.usgs.earthquake.nshmp.calc.HazardCalcs; import gov.usgs.earthquake.nshmp.calc.Site; @@ -38,7 +39,6 @@ import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.meta.DoubleParameter; import gov.usgs.earthquake.nshmp.www.meta.Parameter; import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel; - import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import jakarta.inject.Singleton; @@ -155,7 +155,7 @@ public final class HazardService { } } - public static final class Request { + static final class Request { final transient HttpRequest<?> http; final double longitude; @@ -347,12 +347,19 @@ public final class HazardService { /* Read the 'imt' query values; can be comma-delimited. */ static Set<Imt> readImts(HttpRequest<?> http) { - return http.getParameters() - .getAll("imt")// TODO where are key strings? - .stream() + return http.getParameters().getAll("imt").stream() .map(s -> s.split(",")) .flatMap(Arrays::stream) .map(Imt::valueOf) .collect(toCollection(() -> EnumSet.noneOf(Imt.class))); } + + /* Read the 'imt' query values; can be comma-delimited. */ + static Set<DataType> readDataTypes(HttpRequest<?> http) { + return http.getParameters().getAll("out").stream() + .map(s -> s.split(",")) + .flatMap(Arrays::stream) + .map(DataType::valueOf) + .collect(toCollection(() -> EnumSet.noneOf(DataType.class))); + } } -- GitLab From 2df9162bef5a1d8e67de65854bb14a5343195923 Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Sat, 5 Feb 2022 12:57:59 -0700 Subject: [PATCH 2/5] increment lib --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index cb06f8f26..48b978fd7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ micronautRxVersion = 2.1.1 micronautPluginVersion = 3.1.1 nodePluginVersion = 3.0.1 nodeVersion = 16.3.0 -nshmpLibVersion = 0.9.1 +nshmpLibVersion = 0.9.2 nshmpWsUtilsVersion = 0.1.7 shadowVersion = 7.1.2 spotbugsVersion = 4.7.0 -- GitLab From 3b0eb2b8323e14bf3b0c98ea84d3f2a453553fd4 Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Sun, 6 Feb 2022 13:38:21 -0700 Subject: [PATCH 3/5] updates for lib --- .../gov/usgs/earthquake/nshmp/DisaggCalc.java | 26 +++++++++++---- .../nshmp/www/hazard/DisaggController.java | 24 ++++++-------- .../nshmp/www/hazard/DisaggService.java | 32 +++++++++++++++---- .../nshmp/www/hazard/HazardController.java | 11 +++---- .../nshmp/www/hazard/HazardService.java | 27 ++++++++++++++++ 5 files changed, 85 insertions(+), 35 deletions(-) diff --git a/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java b/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java index ae5129376..de59f18b2 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/DisaggCalc.java @@ -3,6 +3,9 @@ package gov.usgs.earthquake.nshmp; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static gov.usgs.earthquake.nshmp.Text.NEWLINE; +import static gov.usgs.earthquake.nshmp.calc.DataType.DISAGG_DATA; +import static gov.usgs.earthquake.nshmp.calc.DataType.GMM; +import static gov.usgs.earthquake.nshmp.calc.DataType.SOURCE; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; @@ -292,16 +295,13 @@ public class DisaggCalc { Site site = sites.get(i); Hazard hazard = HazardCalcs.hazard(model, config, site, exec); + handler.write(hazard); Map<Imt, Double> imls = imlsForReturnPeriod(hazard, returnPeriod); - Disaggregation disagg = Disaggregation.atImls(hazard, imls, exec); - // needs to handle disagg same way as iml - // handler.write(hazard, Optional.of(disagg)); - handler.write(hazard, Optional.empty()); - Response response = new Response.Builder() + .config(config) .site(site) .returnPeriod(returnPeriod) .imls(imls) @@ -392,6 +392,7 @@ public class DisaggCalc { Disaggregation disagg = Disaggregation.atImls(hazard, siteImls, exec); Response response = new Response.Builder() + .config(config) .site(site) .imls(siteImls) .disagg(disagg) @@ -454,10 +455,11 @@ public class DisaggCalc { static final class Builder { - Disaggregation disagg; Site site; + Disaggregation disagg; Double returnPeriod; // optional Map<Imt, Double> imls; + CalcConfig config; Builder imls(Map<Imt, Double> imls) { this.imls = imls; @@ -479,10 +481,20 @@ public class DisaggCalc { return this; } + Builder config(CalcConfig config) { + this.config = config; + return this; + } + Response build() { + // default toJson(imt, false, false, false) List<ImtDisagg> disaggs = imls.keySet().stream() - .map(imt -> new ImtDisagg(imt, disagg.toJson(imt))) + .map(imt -> new ImtDisagg(imt, disagg.toJson( + imt, + config.output.dataTypes.contains(GMM), + config.output.dataTypes.contains(SOURCE), + config.output.dataTypes.contains(DISAGG_DATA)))) .collect(toList()); return new Response( diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java index 0642f7b0c..e2057cf1c 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java @@ -9,6 +9,8 @@ import gov.usgs.earthquake.nshmp.calc.DataType; import gov.usgs.earthquake.nshmp.gmm.Imt; import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; import gov.usgs.earthquake.nshmp.www.ServletUtil; +import gov.usgs.earthquake.nshmp.www.hazard.DisaggService.DisaggDataType; +import gov.usgs.earthquake.nshmp.www.hazard.HazardService.HazardImt; import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -63,11 +65,9 @@ public class DisaggController { * @param returnPeriod The return period of the target ground motion, or * intensity measure level (IML), in the range [1..20000] years. * @param imt Optional IMTs at which to compute hazard. If none are supplied, - * then the supported set for the installed model is used. Note that a - * model may not support all the values listed below (see - * disagreggation metadata). Responses for numerous IMT's are quite - * large, on the order of MB. Multiple IMTs may be comma delimited, - * e.g. ?imt=PGA,SA0p2,SA1P0. + * then the supported set for the installed model is used. Responses + * for numerous IMT's are quite large, on the order of MB. + * @param out The data types to output */ @Operation( summary = "Disaggregate hazard at a specified return period", @@ -92,11 +92,8 @@ public class DisaggController { @Schema( minimum = "150", maximum = "3000") @PathVariable double returnPeriod, - @QueryValue @Nullable Set<Imt> imt, - @Schema(allowableValues = { - "DISAGG_DATA", - "GMM", - "SOURCE" }) @QueryValue @Nullable Set<DataType> out) { + @QueryValue @Nullable Set<HazardImt> imt, + @QueryValue @Nullable Set<DisaggDataType> out) { try { Set<Imt> imts = HazardService.readImts(http); Set<DataType> dataTypes = HazardService.readDataTypes(http); @@ -141,17 +138,14 @@ public class DisaggController { @Schema( minimum = "150", maximum = "3000") @PathVariable double vs30, - @Schema(allowableValues = { - "DISAGG_DATA", - "GMM", - "SOURCE" }) @QueryValue @Nullable Set<DataType> out) { + @QueryValue @Nullable Set<DisaggDataType> out) { /* * Developer notes: * * It is awkward to support IMT=#; numerous unique keys that may or may not * be present yields a clunky swagger interface. The disagg-iml endpoint - * requires one or more IMT=# query arguments. Documented in example. + * requires one or more IMT=# query arguments. Document in example. */ try { diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java index d39349088..bb5dc96bb 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java @@ -1,5 +1,8 @@ package gov.usgs.earthquake.nshmp.www.hazard; +import static gov.usgs.earthquake.nshmp.calc.DataType.DISAGG_DATA; +import static gov.usgs.earthquake.nshmp.calc.DataType.GMM; +import static gov.usgs.earthquake.nshmp.calc.DataType.SOURCE; import static java.util.stream.Collectors.toList; import java.util.List; @@ -15,6 +18,7 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Stopwatch; import com.google.common.collect.Range; +import gov.usgs.earthquake.nshmp.DisaggCalc; import gov.usgs.earthquake.nshmp.calc.CalcConfig; import gov.usgs.earthquake.nshmp.calc.DataType; import gov.usgs.earthquake.nshmp.calc.Disaggregation; @@ -54,6 +58,13 @@ public final class DisaggService { private static Range<Double> rpRange = Range.closed(1.0, 20000.0); private static Range<Double> imlRange = Range.closed(0.0001, 8.0); + /* For Swagger selctions */ + enum DisaggDataType { + GMM, + SOURCE, + DISAGG_DATA; + } + /** HazardController.doGetMetadata() handler. */ static HttpResponse<String> getMetadata(HttpRequest<?> request) { var url = request.getUri().toString(); @@ -178,13 +189,13 @@ public final class DisaggService { ServletUtil.TASK_EXECUTOR); Hazard hazard = hazFuture.get(); - // Map<Imt, Double> imls = DisaggCalc.imlsForReturnPeriod( - // hazard, - // request.returnPeriod); + Map<Imt, Double> imls = DisaggCalc.imlsForReturnPeriod( + hazard, + request.returnPeriod); CompletableFuture<Disaggregation> disaggfuture = CompletableFuture.supplyAsync( - () -> Disaggregation.atReturnPeriod( - hazard, request.returnPeriod, + () -> Disaggregation.atImls( + hazard, imls, ServletUtil.CALC_EXECUTOR), ServletUtil.TASK_EXECUTOR); @@ -278,6 +289,7 @@ public final class DisaggService { Optional<RequestRp> requestRp = Optional.empty(); Optional<RequestIml> requestIml = Optional.empty(); Disaggregation disagg; + CalcConfig config; Builder timer(Stopwatch timer) { this.timer = timer; @@ -304,8 +316,16 @@ public final class DisaggService { ? requestRp.orElseThrow().imts : requestIml.orElseThrow().imls.keySet(); + Set<DataType> dataTypes = requestRp.isPresent() + ? requestRp.orElseThrow().dataTypes + : requestIml.orElseThrow().dataTypes; + List<ImtDisagg> disaggs = imts.stream() - .map(imt -> new ImtDisagg(imt, disagg.toJson(imt))) + .map(imt -> new ImtDisagg(imt, disagg.toJson( + imt, + dataTypes.contains(GMM), + dataTypes.contains(SOURCE), + dataTypes.contains(DISAGG_DATA)))) .collect(toList()); Object server = ServletUtil.serverData(ServletUtil.THREAD_COUNT, timer); diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java index 1646f6ae2..68450a14f 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java @@ -5,7 +5,7 @@ import java.util.Set; import gov.usgs.earthquake.nshmp.gmm.Imt; import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; import gov.usgs.earthquake.nshmp.www.ServletUtil; - +import gov.usgs.earthquake.nshmp.www.hazard.HazardService.HazardImt; import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -60,11 +60,8 @@ public class HazardController { * @param truncate Truncate curves at return periods below ~10,000 years * @param maxdir Apply max-direction scaling * @param imt Optional IMTs at which to compute hazard. If none are supplied, - * then the supported set for the installed model is used. Note that a - * model may not support all the values listed below (see - * disagreggation metadata). Responses for numerous IMT's are quite - * large, on the order of MB. Multiple IMTs may be comma delimited, - * e.g. ?imt=PGA,SA0p2,SA1P0. + * then the supported set for the installed model is used. Responses + * for numerous IMT's are quite large, on the order of MB. * */ @Operation( @@ -91,7 +88,7 @@ public class HazardController { defaultValue = "false") @Nullable Boolean truncate, @QueryValue( defaultValue = "false") @Nullable Boolean maxdir, - @QueryValue @Nullable Set<Imt> imt) { + @QueryValue @Nullable Set<HazardImt> imt) { try { Set<Imt> imts = HazardService.readImts(http); HazardService.Request request = new HazardService.Request( diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java index 5b41bbe78..f3f98aeac 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java @@ -57,6 +57,33 @@ public final class HazardService { private static final String TOTAL_KEY = "Total"; + /* For Swagger selections; mprs + pgv */ + enum HazardImt { + PGA, + PGV, + SA0P01, + SA0P02, + SA0P03, + SA0P05, + SA0P075, + SA0P1, + SA0P15, + SA0P2, + SA0P25, + SA0P3, + SA0P4, + SA0P5, + SA0P75, + SA1P0, + SA1P5, + SA2P0, + SA3P0, + SA4P0, + SA5P0, + SA7P5, + SA10P0; + } + /** HazardController.doGetUsage() handler. */ public static HttpResponse<String> getMetadata(HttpRequest<?> request) { var url = request.getUri().toString(); -- GitLab From 5b3547193ffd16390a0de7ae09a7891ff20fd1b4 Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Sun, 6 Feb 2022 13:39:32 -0700 Subject: [PATCH 4/5] increment lib --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 48b978fd7..59ab9e79e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ micronautRxVersion = 2.1.1 micronautPluginVersion = 3.1.1 nodePluginVersion = 3.0.1 nodeVersion = 16.3.0 -nshmpLibVersion = 0.9.2 +nshmpLibVersion = 0.9.3 nshmpWsUtilsVersion = 0.1.7 shadowVersion = 7.1.2 spotbugsVersion = 4.7.0 -- GitLab From 7165c20b3cd40bed97cc87e3dc74ed9a0e2fc3ee Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Sun, 6 Feb 2022 13:53:06 -0700 Subject: [PATCH 5/5] spotless cleanup --- .../gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java | 1 + .../java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java | 1 + .../gov/usgs/earthquake/nshmp/www/hazard/HazardController.java | 1 + .../java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java | 1 + 4 files changed, 4 insertions(+) diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java index e2057cf1c..a525b1b8c 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java @@ -11,6 +11,7 @@ import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.hazard.DisaggService.DisaggDataType; import gov.usgs.earthquake.nshmp.www.hazard.HazardService.HazardImt; + import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java index bb5dc96bb..04c4b44af 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java @@ -32,6 +32,7 @@ import gov.usgs.earthquake.nshmp.www.ResponseBody; import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.hazard.HazardService.Metadata; import gov.usgs.earthquake.nshmp.www.meta.Parameter; + import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import jakarta.inject.Singleton; diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java index 68450a14f..03bc22142 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java @@ -6,6 +6,7 @@ import gov.usgs.earthquake.nshmp.gmm.Imt; import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.hazard.HazardService.HazardImt; + import io.micronaut.core.annotation.Nullable; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java index f3f98aeac..c5c278ee2 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java @@ -39,6 +39,7 @@ import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.meta.DoubleParameter; import gov.usgs.earthquake.nshmp.www.meta.Parameter; import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel; + import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; import jakarta.inject.Singleton; -- GitLab