Skip to content

Commit ac47952

Browse files
committed
fix issues when seg_var != "seg_adm"
1 parent 821802e commit ac47952

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

pyCIAM/utils.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def spherical_nearest_neighbor(df1, df2, x1="lon", y1="lat", x2="lon", y2="lat")
116116
return pd.Series(df2.index[ixs[:, 0]], index=df1.index)
117117

118118

119-
def add_attrs_to_result(ds):
119+
def add_attrs_to_result(ds, seg_var):
120120
attr_dict = {
121121
"case": {
122122
"long_name": "Adaptation Strategy",
@@ -184,7 +184,7 @@ def add_attrs_to_result(ds):
184184
extra_vars = [
185185
v
186186
for v in ds.variables
187-
if v not in ["year", "seg_adm", "npv"] + list(attr_dict.keys())
187+
if v not in ["year", seg_var, "npv"] + list(attr_dict.keys())
188188
]
189189
assert not len(extra_vars), f"Unexpected variables: {extra_vars}"
190190
for v in ds.variables:
@@ -193,6 +193,12 @@ def add_attrs_to_result(ds):
193193
return ds
194194

195195

196+
def _get_exp_year(da):
197+
exp_year = [v for v in da.data_vars if v.startswith("pop_") and "scale" not in v]
198+
assert len(exp_year) == 1, exp_year
199+
return int(exp_year[0].split("_")[1])
200+
201+
196202
def collapse_econ_inputs_to_seg(
197203
econ_input_path,
198204
output_path,
@@ -222,10 +228,15 @@ def collapse_econ_inputs_to_seg(
222228
sliiders.ypcc.sel(country="USA", drop=True).load().reset_coords(drop=True)
223229
)
224230

231+
# allow for different base years in K and pop spatial variables
232+
exp_year = _get_exp_year(sliiders)
233+
pop_var = f"pop_{exp_year}"
234+
k_var = f"K_{exp_year}"
235+
225236
out = (
226-
sliiders[["K_2019", "pop_2019", "landarea", "length", "wetland"]]
237+
sliiders[[k_var, pop_var, "landarea", "length", "wetland"]]
227238
.groupby(grouper)
228-
.sum("seg_adm")
239+
.sum(seg_var)
229240
)
230241

231242
out[["surge_height", "gumbel_params", "seg_lon", "seg_lat"]] = (
@@ -246,13 +257,13 @@ def weighted_avg(varname, wts_in):
246257
for v, w in [
247258
(
248259
"mobcapfrac",
249-
sliiders.K_2019.sum("elev"),
260+
sliiders[k_var].sum("elev"),
250261
),
251-
("pop_scale", sliiders.pop_2019.sum("elev")),
252-
("K_scale", sliiders.K_2019.sum("elev")),
262+
("pop_scale", sliiders[pop_var].sum("elev")),
263+
("K_scale", sliiders[k_var].sum("elev")),
253264
("interior", sliiders.landarea.sum("elev")),
254265
("pc", sliiders.length),
255-
("ypcc", sliiders.pop_2019.sum("elev")),
266+
("ypcc", sliiders[pop_var].sum("elev")),
256267
("wetlandservice", sliiders.wetland.sum("elev")),
257268
]:
258269
weighted_avg(v, w)

0 commit comments

Comments
 (0)