Skip to content
Snippets Groups Projects
Config.java 4.23 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;
    import java.util.Map;
    import java.util.Map.Entry;
    
    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.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
     */
    final class Config {
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final GaussTruncation truncationType;
    	public final double truncationLevel;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final IntensityMeasureLimit maxIntensityModel;
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final double[] defaultImls;
    	public final Map<Imt, double[]> customImls;
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	public final double deagg_rMin;
    	public final double deagg_rMax;
    	public final double deagg_Δr;
    
    	public final double deagg_mMin;
    	public final double deagg_mMax;
    	public final double deagg_Δm;
    
    	public final double deagg_εMin;
    	public final double deagg_εMax;
    	public final double deagg_Δε;
    
    	private Config() {
    
    		/*
    		 * Default values. These are initialized here because gson will not
    		 * deserialize field initialized final primitives and Strings.
    		 */
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		truncationType = GaussTruncation.ONE_SIDED;
    		truncationLevel = 3.0;
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		maxIntensityModel = IntensityMeasureLimit.OFF;
    
    
    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();
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		deagg_rMin = 0.0;
    		deagg_rMax = 100.0;
    		deagg_Δr = 10.0;
    
    		deagg_mMin = 5.0;
    		deagg_mMax = 7.0;
    		deagg_Δm = 0.1;
    
    		deagg_εMin = -3;
    		deagg_εMax = 3.0;
    		deagg_Δε = 0.5;
    
    	}
    
    	@Override public String toString() {
    		// @formatter:off
    
    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()))
    					.append(NEWLINE);				
    			}
    			customImlStr = sb.toString();
    		}
    				
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    		return new StringBuilder("Calculation config:").append(NEWLINE)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("      Curve truncation: ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("type=").append(truncationType).append(", ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("level=").append(truncationLevel)
    			.append(NEWLINE)
    			.append("     Maximum IML model: ")
    			.append(maxIntensityModel)
    			.append(NEWLINE)
    			.append("          Default IMLs: ")
    			.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: ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("min=").append(deagg_rMin).append(", ")
    			.append("max=").append(deagg_rMax).append(", ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("Δ=").append(deagg_Δr)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(NEWLINE)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("       Deaggregation M: ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("min=").append(deagg_mMin).append(", ")
    			.append("max=").append(deagg_mMax).append(", ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("Δ=").append(deagg_Δm)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(NEWLINE)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("       Deaggregation ε: ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("min=").append(deagg_εMin).append(", ")
    			.append("max=").append(deagg_εMax).append(", ")
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append("Δ=").append(deagg_Δε)
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    			.append(NEWLINE)
    			.toString();
    		// @formatter:on
    	}
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	double[] imlsForImt(Imt imt) {
    		return customImls.containsKey(imt) ? customImls.get(imt) : defaultImls;
    	}
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	static Config load(Path path) throws IOException {
    		Gson gson = new GsonBuilder().setPrettyPrinting().create();
    		Reader reader = Files.newBufferedReader(path, UTF_8);
    		Config config = gson.fromJson(reader, Config.class);
    		reader.close();
    		return config;
    	}
    
    	static void exportDefaults(Path path) throws IOException {
    		Writer writer = Files.newBufferedWriter(path, UTF_8);
    		Gson gson = new GsonBuilder().setPrettyPrinting().create();
    		gson.toJson(new Config(), writer);
    		writer.close();
    	}
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    	// TODO clean
    	public static void main(String[] args) throws IOException {
    		// Path path = Paths.get("tmp", "config", "config_calc.json");
    		// exportDefaults(path);
    
    		Path path = Paths.get("tmp", "config", "config_nshm_imls.json");
    		Config c = load(path);
    		System.out.println(c);
    	}
    
    
    Powers, Peter M.'s avatar
    Powers, Peter M. committed
    }