@@ -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+
196202def 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