Source code for oasislmf.pytools.indexconvert
import pandas as pd
import numpy as np
from oasislmf.lookup.builtin import normal_to_z_index
from oasislmf.utils.status import OASIS_UNKNOWN_ID
[docs]
def change_footprint_apid(path, size_lat):
"""Reads CSV, applies Z-index conversion, and writes back."""
change_footprint_apid_multi_peril(path, size_lat, None, 1)
[docs]
def change_footprint_apid_multi_peril(path, size_lat, size_lon, num_perils):
"""
Reads CSV, applies Z-index conversion for multiple perils and writes
back to file
"""
df = pd.read_csv(path)
areaperil_ids = df['areaperil_id'].values - 1
mask = df['areaperil_id'] != OASIS_UNKNOWN_ID
filtered_df = df[mask].copy()
areaperil_ids = filtered_df['areaperil_id'].values - 1
if size_lon is not None:
grid_size = size_lat * size_lon
peril_values = areaperil_ids // grid_size
index_values = areaperil_ids % grid_size + 1
else:
peril_values = areaperil_ids // 1
index_values = areaperil_ids + 1
z_indices = np.array(
[normal_to_z_index(id, size_lat) for id in index_values]
)
filtered_df['areaperil_id'] = z_indices * num_perils + peril_values
df.loc[mask, 'areaperil_id'] = filtered_df['areaperil_id']
df = df.sort_values(by=df.columns.tolist())
df.to_csv(path, index=False)