Skip to content
Snippets Groups Projects

Add www Package

Merged Clayton, Brandon Scott requested to merge ghsc/users/bclayton/nshmp/nshmp-lib:www into main
10 files
+ 446
218
Compare changes
  • Side-by-side
  • Inline
Files
10
package gov.usgs.earthquake.nshmp.calc;
import static com.google.common.base.Preconditions.checkNotNull;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.google.common.base.Charsets;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import gov.usgs.earthquake.nshmp.data.MutableXySequence;
import gov.usgs.earthquake.nshmp.data.XySequence;
import gov.usgs.earthquake.nshmp.gmm.Gmm;
import gov.usgs.earthquake.nshmp.gmm.GroundMotion;
import gov.usgs.earthquake.nshmp.gmm.Imt;
import gov.usgs.earthquake.nshmp.tree.LogicTree;
/**
* AWS Lambda function to perform ground motion to curve transformation.
*
* @see Transforms.GroundMotionsToCurves
*
* @author U.S. Geological Survey
*/
public class GroundMotionToCurveLambda implements RequestStreamHandler {
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
/**
* Lambda handler to convert GroundMotion to HazardCurve.
*
* @see Transforms.GroundMotionsToCurves#apply
*
* @param inputStream The Lambda input stream
* @param outputStream The Lambda output stream
* @param context The Lambda context
* @throws IOException
*/
@Override
public void handleRequest(
InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException {
var logger = context.getLogger();
var reader = new BufferedReader(new InputStreamReader(inputStream, Charsets.UTF_8));
var writer =
new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream, Charsets.UTF_8)));
var event = GSON.fromJson(reader, GmmCurve.class);
logger.log("Event: " + GSON.toJson(event));
event.exceedanceModel.treeExceedanceCombined(
event.logicTree,
event.truncationLevel,
event.σScale,
event.imt,
event.utilCurve);
event.utilCurve.multiply(event.rate);
var hazardCurve = new HazardCurve(event.imt, event.gmm, event.utilCurve);
logger.log("GMM Curve: " + GSON.toJson(hazardCurve));
writer.write(GSON.toJson(hazardCurve, HazardCurve.class));
reader.close();
writer.close();
}
/**
* Wrapper class for Lambda input.
*/
static class GmmCurve {
private final ExceedanceModel exceedanceModel;
private final Gmm gmm;
private final Imt imt;
private final LogicTree<GroundMotion> logicTree;
private final double rate;
private final double truncationLevel;
private final MutableXySequence utilCurve;
private final double σScale;
private GmmCurve(Builder builder) {
exceedanceModel = builder.exceedanceModel;
gmm = builder.gmm;
imt = builder.imt;
logicTree = builder.logicTree;
rate = builder.rate;
truncationLevel = builder.truncationLevel;
utilCurve = builder.utilCurve;
σScale = builder.σScale;
}
/**
* Returns a new GmmCurve builder.
*/
Builder builder() {
return new Builder();
}
/**
* Build a GmmCurve for Lambda handler.
*
* @see GroundMotionToCurveLambda#groundMotionsToCurvesHandler
*/
static class Builder {
private ExceedanceModel exceedanceModel;
private Gmm gmm;
private Imt imt;
private LogicTree<GroundMotion> logicTree;
private double rate;
private double truncationLevel;
private MutableXySequence utilCurve;
private double σScale;
private Builder() {}
Builder exceedanceModel(ExceedanceModel exceedanceModel) {
this.exceedanceModel = exceedanceModel;
return this;
}
Builder gmm(Gmm gmm) {
this.gmm = gmm;
return this;
}
Builder imt(Imt imt) {
this.imt = imt;
return this;
}
Builder logicTree(LogicTree<GroundMotion> logicTree) {
this.logicTree = logicTree;
return this;
}
Builder rate(double rate) {
this.rate = rate;
return this;
}
Builder truncationLevel(double truncationLevel) {
this.truncationLevel = truncationLevel;
return this;
}
Builder utilCurve(MutableXySequence utilCurve) {
this.utilCurve = utilCurve;
return this;
}
Builder σScale(double σScale) {
this.σScale = σScale;
return this;
}
GmmCurve build() {
checkNotNull(exceedanceModel);
checkNotNull(gmm);
checkNotNull(imt);
checkNotNull(logicTree);
checkNotNull(rate);
checkNotNull(truncationLevel);
checkNotNull(utilCurve);
checkNotNull(σScale);
return new GmmCurve(this);
}
}
}
/**
* Single hazard curve returned from the Lambda function.
*
* @see GroundMotionToCurveLambda#groundMotionsToCurvesHandler
*/
static class HazardCurve {
private final Imt imt;
private final Gmm gmm;
private final XySequence curve;
private HazardCurve(Imt imt, Gmm gmm, XySequence curve) {
this.imt = imt;
this.gmm = gmm;
this.curve = curve;
}
/**
* Returns the Imt associated with the hazard curve.
*/
Imt imt() {
return imt;
}
/**
* Returns the Gmm associated with the hazard curve.
*/
Gmm gmm() {
return gmm;
}
/**
* Returns the curve for a specific Imt and Gmm.
*/
XySequence curve() {
return curve;
}
}
}
Loading