Skip to content
Snippets Groups Projects
CalcConfig.java 4.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • Powers, Peter M.'s avatar
    Powers, Peter M. committed
    package org.opensha.calc;
    
    import static java.nio.charset.StandardCharsets.UTF_8;
    import static org.opensha.util.TextUtils.NEWLINE;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.io.Writer;
    import java.nio.file.Files;
    import java.nio.file.Path;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import java.nio.file.Paths;
    import java.util.Arrays;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import java.util.EnumSet;
    
    import java.util.List;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import java.util.Map;
    import java.util.Map.Entry;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import java.util.Set;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import org.opensha.gmm.Imt;
    
    import com.google.common.base.Strings;
    
    import com.google.common.collect.Lists;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import com.google.common.collect.Maps;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    
    /**
     * Calculation configuration.
     * @author Peter Powers
     */
    
    public final class CalcConfig {
    
    	public final SigmaModel sigmaModel;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final double truncationLevel;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final Set<Imt> imts;
    	
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final double[] defaultImls;
    	public final Map<Imt, double[]> customImls;
    
    
    	public final Deagg deagg;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final SiteSet sites;
    
    	private static final Gson GSON = new GsonBuilder()
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		.setPrettyPrinting()
    		.registerTypeAdapter(Site.class, new Site.Deserializer())
    		.registerTypeAdapter(Site.class, new Site.Serializer())
    		.registerTypeAdapter(SiteSet.class, new SiteSet.Deserializer())
    		.create();
    
    	private CalcConfig() {
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    
    		/*
    		 * Default values. These are initialized here because gson will not
    		 * deserialize field initialized final primitives and Strings.
    		 */
    
    
    		sigmaModel = SigmaModel.TRUNCATION_UPPER_ONLY;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		truncationLevel = 3.0;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		imts = EnumSet.of(Imt.PGA, Imt.SA0P2, Imt.SA1P0);
    		
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		/* Slightly modified version of NSHM 5Hz curve, size = 20 */
    		defaultImls = new double[] { 0.0025, 0.0045, 0.0075, 0.0113, 0.0169, 0.0253, 0.0380, 0.0570, 0.0854, 0.128, 0.192, 0.288, 0.432, 0.649, 0.973, 1.46, 2.19, 3.28, 4.92, 7.38 };
    		customImls = Maps.newHashMap();
    
    
    		deagg = new Deagg();
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		sites = new SiteSet(Lists.newArrayList(Site.builder().build()));
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	}
    
    	@Override public String toString() {
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		String customImlStr = "";
    		if (!customImls.isEmpty()) {
    			StringBuilder sb = new StringBuilder();
    			for (Entry<Imt, double[]> entry : customImls.entrySet()) {
    				String imtStr = "(IMT override) " + entry.getKey() + ": ";
    				sb.append(Strings.padStart(imtStr, 24, ' '))
    					.append(Arrays.toString(entry.getValue()))
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    					.append(NEWLINE);
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			}
    			customImlStr = sb.toString();
    		}
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    
    
    		StringBuilder sb = new StringBuilder("Calculation config:").append(NEWLINE)
    			.append("       Sigma model: ")
    			.append("type=").append(sigmaModel).append(", ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("level=").append(truncationLevel)
    			.append(NEWLINE)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("              IMTs: ").append(imts)
    			.append(NEWLINE)
    
    			.append("      Default IMLs: ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(Arrays.toString(defaultImls))
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(NEWLINE)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(customImlStr)
    
    			.append("   Deaggregation R: ")
    			.append("min=").append(deagg.rMin).append(", ")
    			.append("max=").append(deagg.rMax).append(", ")
    			.append("Δ=").append(deagg.Δr)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(NEWLINE)
    
    			.append("   Deaggregation M: ")
    			.append("min=").append(deagg.mMin).append(", ")
    			.append("max=").append(deagg.mMax).append(", ")
    			.append("Δ=").append(deagg.Δm)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(NEWLINE)
    
    			.append("   Deaggregation ε: ")
    			.append("min=").append(deagg.εMin).append(", ")
    			.append("max=").append(deagg.εMax).append(", ")
    			.append("Δ=").append(deagg.Δε)
    			.append(NEWLINE);
    
    		for (Site site : sites) {
    			sb.append("              ").append(site.toString()).append(NEWLINE);
    		}
    
    		return sb.toString();
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	double[] imlsForImt(Imt imt) {
    		return customImls.containsKey(imt) ? customImls.get(imt) : defaultImls;
    	}
    
    
    	static CalcConfig load(Path path) throws IOException {
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		Reader reader = Files.newBufferedReader(path, UTF_8);
    
    		CalcConfig config = GSON.fromJson(reader, CalcConfig.class);
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		reader.close();
    		return config;
    	}
    
    	static void exportDefaults(Path path) throws IOException {
    		Writer writer = Files.newBufferedWriter(path, UTF_8);
    
    		GSON.toJson(new CalcConfig(), writer);
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		writer.close();
    	}
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	// TODO clean
    	public static void main(String[] args) throws IOException {
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    //		 Path path = Paths.get("..","nshmp-model-dev", "tmp", "config_calc3.json");
    		// exportDefaults(path);
    
    		// Path path = Paths.get("tmp", "config", "config_nshm_imls.json");
    		// Path path = Paths.get("..","nshmp-model-dev", "models", "PEER",
    		// "Set2-Case2a1", "config.json");
    		Path path = Paths.get("..", "nshmp-model-dev", "models", "PEER", "Set1-Case1",
    			"config.json");
    
    		CalcConfig c = load(path);
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		System.out.println(c);
    
    	}
    
    	public static class Deagg {
    
    		public final double rMin;
    		public final double rMax;
    		public final double Δr;
    
    		public final double mMin;
    		public final double mMax;
    		public final double Δm;
    
    		public final double εMin;
    		public final double εMax;
    		public final double Δε;
    
    		Deagg() {
    			rMin = 0.0;
    			rMax = 100.0;
    			Δr = 10.0;
    
    			mMin = 5.0;
    			mMax = 7.0;
    			Δm = 0.1;
    
    			εMin = -3;
    			εMax = 3.0;
    			Δε = 0.5;
    		}
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    }