12 Commits

2 changed files with 30 additions and 7 deletions

View File

@@ -70,6 +70,8 @@ def main(catalog_file, mc_file, pdf_file, m_file, m_select, mag_label, mc, m_max
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator from matplotlib.ticker import MultipleLocator
from matplotlib.contour import ContourSet from matplotlib.contour import ContourSet
import xml.etree.ElementTree as ET
import json
logger = getDefaultLogger('igfash') logger = getDefaultLogger('igfash')
@@ -239,6 +241,9 @@ verbose: {verbose}")
grid_y_max = int(ceil(y_max / grid_dim) * grid_dim) grid_y_max = int(ceil(y_max / grid_dim) * grid_dim)
grid_y_min = int(floor(y_min / grid_dim) * grid_dim) grid_y_min = int(floor(y_min / grid_dim) * grid_dim)
grid_lat_max, grid_lon_max = utm.to_latlon(grid_x_max, grid_y_max, utm_zone_number, utm_zone_letter)
grid_lat_min, grid_lon_min = utm.to_latlon(grid_x_min, grid_y_min, utm_zone_number, utm_zone_letter)
# rectangular grid # rectangular grid
nx = int((grid_x_max - grid_x_min) / grid_dim) + 1 nx = int((grid_x_max - grid_x_min) / grid_dim) + 1
ny = int((grid_y_max - grid_y_min) / grid_dim) + 1 ny = int((grid_y_max - grid_y_min) / grid_dim) + 1
@@ -495,9 +500,18 @@ verbose: {verbose}")
# Save the figure # Save the figure
fig.canvas.draw() fig.canvas.draw()
plt.savefig("overlay_" + str(j) + ".svg", bbox_inches="tight", pad_inches=0, transparent=True) overlay_filename = f"overlay_{j}.svg"
plt.savefig(overlay_filename, bbox_inches="tight", pad_inches=0, transparent=True)
plt.close(fig) plt.close(fig)
# Embed geographic bounding box into the SVG
map_bounds = dict(zip(("south", "west", "north", "east"),
map(float, (grid_lat_min, grid_lon_min, grid_lat_max, grid_lon_max))))
tree = ET.parse(overlay_filename)
tree.getroot().set("data-map-bounds", json.dumps(map_bounds))
tree.write(overlay_filename, encoding="utf-8", xml_declaration=True)
logger.info(f"Saved geographic bounds to SVG metadata (data-map-bounds): {overlay_filename} → {map_bounds}")
# Make the color bar # Make the color bar
cmap_name = 'viridis' cmap_name = 'viridis'
width = 50 width = 50

View File

@@ -23,6 +23,15 @@ from seismic_hazard_forecasting import main as shf
def main(argv): def main(argv):
def str2bool(v):
if v.lower() in ("True", "TRUE", "yes", "true", "t", "y", "1"):
return True
elif v.lower() in ("False", "FALSE", "no", "false", "f", "n", "0"):
return False
else:
raise argparse.ArgumentTypeError("Boolean value expected.")
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("catalog_file", help="Path to input file of type 'catalog'") parser.add_argument("catalog_file", help="Path to input file of type 'catalog'")
@@ -30,23 +39,23 @@ def main(argv):
parser.add_argument("--pdf_file", help="Path to input file of type 'PDF'", type=str, default=None, required=False) parser.add_argument("--pdf_file", help="Path to input file of type 'PDF'", type=str, default=None, required=False)
parser.add_argument("--m_file", help="Path to input file of type 'm'", type=str, default=None, required=False) parser.add_argument("--m_file", help="Path to input file of type 'm'", type=str, default=None, required=False)
parser.add_argument("--m_select", type=bool) parser.add_argument("--m_select", type=str2bool)
parser.add_argument("--mag_label", type=str, default=None, required=False) parser.add_argument("--mag_label", type=str, default=None, required=False)
parser.add_argument("--mc", type=float, default=None, required=False) parser.add_argument("--mc", type=float, default=None, required=False)
parser.add_argument("--m_max", type=float, default=None, required=False) parser.add_argument("--m_max", type=float, default=None, required=False)
parser.add_argument("--m_kde_method", type=str) parser.add_argument("--m_kde_method", type=str)
parser.add_argument("--xy_select", type=bool) parser.add_argument("--xy_select", type=str2bool)
parser.add_argument("--grid_dim", type=int) parser.add_argument("--grid_dim", type=int)
parser.add_argument("--xy_win_method", type=bool) parser.add_argument("--xy_win_method", type=str2bool)
parser.add_argument("--rate_select", type=bool) parser.add_argument("--rate_select", type=str2bool)
parser.add_argument("--time_win_duration", type=float) parser.add_argument("--time_win_duration", type=float)
parser.add_argument("--forecast_select", type=bool) parser.add_argument("--forecast_select", type=str2bool)
parser.add_argument("--custom_rate", type=float, default=None, required=False) parser.add_argument("--custom_rate", type=float, default=None, required=False)
parser.add_argument("--forecast_len", type=float) parser.add_argument("--forecast_len", type=float)
parser.add_argument("--time_unit", type=str) parser.add_argument("--time_unit", type=str)
parser.add_argument("--model", type=str) parser.add_argument("--model", type=str)
parser.add_argument("--products_string", type=str) parser.add_argument("--products_string", type=str)
parser.add_argument("--verbose", type=bool) parser.add_argument("--verbose", type=str2bool)
args = parser.parse_args() args = parser.parse_args()
shf(**vars(args)) shf(**vars(args))