3
3
import pcmdi_metrics
4
4
5
5
6
- def compute_metrics (Var , dm , do , debug = False ):
6
+ def compute_metrics (Var , dm , do , debug = False , time_dim_sync = False ):
7
7
# Var is sometimes sent with level associated
8
8
var = Var .split ("_" )[0 ]
9
9
# Did we send data? Or do we just want the info?
@@ -35,44 +35,43 @@ def compute_metrics(Var, dm, do, debug=False):
35
35
36
36
# unify time and time bounds between observation and model
37
37
if debug :
38
- print ("before time and time bounds unifying" )
39
38
print ("dm.time: " , dm ["time" ])
40
39
print ("do.time: " , do ["time" ])
41
40
42
- # Below is temporary...
43
- dm ["time" ] = do ["time" ]
44
- dm [dm .time .attrs ["bounds" ]] = do [do .time .attrs ["bounds" ]]
41
+ if time_dim_sync :
42
+ # Below is temporary...
43
+ dm ["time" ] = do ["time" ]
44
+ dm [dm .time .encoding ["bounds" ]] = do [do .time .attrs ["bounds" ]]
45
45
46
- if debug :
47
- print ("after time and time bounds unifying " )
48
- print ("dm.time: " , dm ["time" ])
49
- print ("do.time: " , do ["time" ])
46
+ if debug :
47
+ print ("time and time bounds synced " )
48
+ print ("dm.time: " , dm ["time" ])
49
+ print ("do.time: " , do ["time" ])
50
50
51
- # if debug:
52
- # dm.to_netcdf('dm.nc')
53
- # do.to_netcdf('do.nc')
51
+ dm .to_netcdf ("dm.nc" )
52
+ do .to_netcdf ("do.nc" )
54
53
55
54
metrics_dictionary = OrderedDict ()
56
55
57
- # SET CONDITIONAL ON INPUT VARIABLE
58
- if var == "pr" :
59
- conv = 86400.0
60
- else :
61
- conv = 1.0
62
-
63
56
if var in ["hus" ]:
64
57
sig_digits = ".5f"
65
58
else :
66
59
sig_digits = ".3f"
67
60
68
61
# CALCULATE ANNUAL CYCLE SPACE-TIME RMS, CORRELATIONS and STD
69
62
print ("compute_metrics-CALCULATE ANNUAL CYCLE SPACE-TIME RMS, CORRELATIONS and STD" )
63
+
70
64
print ("compute_metrics, rms_xyt" )
71
65
rms_xyt = pcmdi_metrics .mean_climate .lib .rms_xyt (dm , do , var )
66
+ print ("compute_metrics, rms_xyt:" , rms_xyt )
67
+
72
68
print ("compute_metrics, stdObs_xyt" )
73
69
stdObs_xyt = pcmdi_metrics .mean_climate .lib .std_xyt (do , var )
70
+ print ("compute_metrics, stdObs_xyt:" , stdObs_xyt )
71
+
74
72
print ("compute_metrics, std_xyt" )
75
73
std_xyt = pcmdi_metrics .mean_climate .lib .std_xyt (dm , var )
74
+ print ("compute_metrics, std_xyt:" , std_xyt )
76
75
77
76
# CALCULATE ANNUAL MEANS
78
77
print ("compute_metrics-CALCULATE ANNUAL MEANS" )
@@ -81,19 +80,23 @@ def compute_metrics(Var, dm, do, debug=False):
81
80
# CALCULATE ANNUAL MEAN BIAS
82
81
print ("compute_metrics-CALCULATE ANNUAL MEAN BIAS" )
83
82
bias_xy = pcmdi_metrics .mean_climate .lib .bias_xy (dm_am , do_am , var )
83
+ print ("compute_metrics-CALCULATE ANNUAL MEAN BIAS, bias_xy:" , bias_xy )
84
84
85
85
# CALCULATE MEAN ABSOLUTE ERROR
86
86
print ("compute_metrics-CALCULATE MSE" )
87
87
mae_xy = pcmdi_metrics .mean_climate .lib .meanabs_xy (dm_am , do_am , var )
88
+ print ("compute_metrics-CALCULATE MSE, mae_xy:" , mae_xy )
88
89
89
90
# CALCULATE ANNUAL MEAN RMS (centered and uncentered)
90
91
print ("compute_metrics-CALCULATE MEAN RMS" )
91
92
rms_xy = pcmdi_metrics .mean_climate .lib .rms_xy (dm_am , do_am , var )
92
93
rmsc_xy = pcmdi_metrics .mean_climate .lib .rmsc_xy (dm_am , do_am , var )
94
+ print ("compute_metrics-CALCULATE MEAN RMS: rms_xy, rmsc_xy: " , rms_xy , rmsc_xy )
93
95
94
96
# CALCULATE ANNUAL MEAN CORRELATION
95
97
print ("compute_metrics-CALCULATE MEAN CORR" )
96
98
cor_xy = pcmdi_metrics .mean_climate .lib .cor_xy (dm_am , do_am , var )
99
+ print ("compute_metrics-CALCULATE MEAN CORR: cor_xy:" , cor_xy )
97
100
98
101
# CALCULATE ANNUAL OBS and MOD STD
99
102
print ("compute_metrics-CALCULATE ANNUAL OBS AND MOD STD" )
@@ -155,25 +158,23 @@ def compute_metrics(Var, dm, do, debug=False):
155
158
):
156
159
metrics_dictionary [stat ] = OrderedDict ()
157
160
158
- metrics_dictionary ["mean-obs_xy" ]["ann" ] = format (meanObs_xy * conv , sig_digits )
159
- metrics_dictionary ["mean_xy" ]["ann" ] = format (mean_xy * conv , sig_digits )
160
- metrics_dictionary ["std-obs_xy" ]["ann" ] = format (stdObs_xy * conv , sig_digits )
161
- metrics_dictionary ["std_xy" ]["ann" ] = format (std_xy * conv , sig_digits )
162
- metrics_dictionary ["std-obs_xyt" ]["ann" ] = format (stdObs_xyt * conv , sig_digits )
163
- metrics_dictionary ["std_xyt" ]["ann" ] = format (std_xyt * conv , sig_digits )
164
- metrics_dictionary ["std-obs_xy_devzm" ]["ann" ] = format (
165
- stdObs_xy_devzm * conv , sig_digits
166
- )
167
- metrics_dictionary ["std_xy_devzm" ]["ann" ] = format (std_xy_devzm * conv , sig_digits )
168
- metrics_dictionary ["rms_xyt" ]["ann" ] = format (rms_xyt * conv , sig_digits )
169
- metrics_dictionary ["rms_xy" ]["ann" ] = format (rms_xy * conv , sig_digits )
170
- metrics_dictionary ["rmsc_xy" ]["ann" ] = format (rmsc_xy * conv , sig_digits )
161
+ metrics_dictionary ["mean-obs_xy" ]["ann" ] = format (meanObs_xy , sig_digits )
162
+ metrics_dictionary ["mean_xy" ]["ann" ] = format (mean_xy , sig_digits )
163
+ metrics_dictionary ["std-obs_xy" ]["ann" ] = format (stdObs_xy , sig_digits )
164
+ metrics_dictionary ["std_xy" ]["ann" ] = format (std_xy , sig_digits )
165
+ metrics_dictionary ["std-obs_xyt" ]["ann" ] = format (stdObs_xyt , sig_digits )
166
+ metrics_dictionary ["std_xyt" ]["ann" ] = format (std_xyt , sig_digits )
167
+ metrics_dictionary ["std-obs_xy_devzm" ]["ann" ] = format (stdObs_xy_devzm , sig_digits )
168
+ metrics_dictionary ["std_xy_devzm" ]["ann" ] = format (std_xy_devzm , sig_digits )
169
+ metrics_dictionary ["rms_xyt" ]["ann" ] = format (rms_xyt , sig_digits )
170
+ metrics_dictionary ["rms_xy" ]["ann" ] = format (rms_xy , sig_digits )
171
+ metrics_dictionary ["rmsc_xy" ]["ann" ] = format (rmsc_xy , sig_digits )
171
172
metrics_dictionary ["cor_xy" ]["ann" ] = format (cor_xy , sig_digits )
172
- metrics_dictionary ["bias_xy" ]["ann" ] = format (bias_xy * conv , sig_digits )
173
- metrics_dictionary ["mae_xy" ]["ann" ] = format (mae_xy * conv , sig_digits )
173
+ metrics_dictionary ["bias_xy" ]["ann" ] = format (bias_xy , sig_digits )
174
+ metrics_dictionary ["mae_xy" ]["ann" ] = format (mae_xy , sig_digits )
174
175
# ZONAL MEAN CONTRIBUTIONS
175
- metrics_dictionary ["rms_y" ]["ann" ] = format (rms_y * conv , sig_digits )
176
- metrics_dictionary ["rms_devzm" ]["ann" ] = format (rms_xy_devzm * conv , sig_digits )
176
+ metrics_dictionary ["rms_y" ]["ann" ] = format (rms_y , sig_digits )
177
+ metrics_dictionary ["rms_devzm" ]["ann" ] = format (rms_xy_devzm , sig_digits )
177
178
178
179
# CALCULATE SEASONAL MEANS
179
180
for sea in ["djf" , "mam" , "jja" , "son" ]:
@@ -195,17 +196,15 @@ def compute_metrics(Var, dm, do, debug=False):
195
196
meanObs_xy_sea = pcmdi_metrics .mean_climate .lib .mean_xy (do_sea , var )
196
197
mean_xy_sea = pcmdi_metrics .mean_climate .lib .mean_xy (dm_sea , var )
197
198
198
- metrics_dictionary ["bias_xy" ][sea ] = format (bias_sea * conv , sig_digits )
199
- metrics_dictionary ["rms_xy" ][sea ] = format (rms_sea * conv , sig_digits )
200
- metrics_dictionary ["rmsc_xy" ][sea ] = format (rmsc_sea * conv , sig_digits )
199
+ metrics_dictionary ["bias_xy" ][sea ] = format (bias_sea , sig_digits )
200
+ metrics_dictionary ["rms_xy" ][sea ] = format (rms_sea , sig_digits )
201
+ metrics_dictionary ["rmsc_xy" ][sea ] = format (rmsc_sea , sig_digits )
201
202
metrics_dictionary ["cor_xy" ][sea ] = format (cor_sea , ".2f" )
202
- metrics_dictionary ["mae_xy" ][sea ] = format (mae_sea * conv , sig_digits )
203
- metrics_dictionary ["std-obs_xy" ][sea ] = format (stdObs_xy_sea * conv , sig_digits )
204
- metrics_dictionary ["std_xy" ][sea ] = format (std_xy_sea * conv , sig_digits )
205
- metrics_dictionary ["mean-obs_xy" ][sea ] = format (
206
- meanObs_xy_sea * conv , sig_digits
207
- )
208
- metrics_dictionary ["mean_xy" ][sea ] = format (mean_xy_sea * conv , sig_digits )
203
+ metrics_dictionary ["mae_xy" ][sea ] = format (mae_sea , sig_digits )
204
+ metrics_dictionary ["std-obs_xy" ][sea ] = format (stdObs_xy_sea , sig_digits )
205
+ metrics_dictionary ["std_xy" ][sea ] = format (std_xy_sea , sig_digits )
206
+ metrics_dictionary ["mean-obs_xy" ][sea ] = format (meanObs_xy_sea , sig_digits )
207
+ metrics_dictionary ["mean_xy" ][sea ] = format (mean_xy_sea , sig_digits )
209
208
210
209
rms_mo_l = []
211
210
rmsc_mo_l = []
@@ -251,15 +250,15 @@ def compute_metrics(Var, dm, do, debug=False):
251
250
meanObs_xy_mo = pcmdi_metrics .mean_climate .lib .mean_xy (do_mo , var )
252
251
mean_xy_mo = pcmdi_metrics .mean_climate .lib .mean_xy (dm_mo , var )
253
252
254
- rms_mo_l .append (format (rms_mo * conv , sig_digits ))
255
- rmsc_mo_l .append (format (rmsc_mo * conv , sig_digits ))
253
+ rms_mo_l .append (format (rms_mo , sig_digits ))
254
+ rmsc_mo_l .append (format (rmsc_mo , sig_digits ))
256
255
cor_mo_l .append (format (cor_mo , ".2f" ))
257
- mae_mo_l .append (format (mae_mo * conv , sig_digits ))
258
- bias_mo_l .append (format (bias_mo * conv , sig_digits ))
259
- stdObs_xy_mo_l .append (format (stdObs_xy_mo * conv , sig_digits ))
260
- std_xy_mo_l .append (format (std_xy_mo * conv , sig_digits ))
261
- meanObs_xy_mo_l .append (format (meanObs_xy_mo * conv , sig_digits ))
262
- mean_xy_mo_l .append (format (mean_xy_mo * conv , sig_digits ))
256
+ mae_mo_l .append (format (mae_mo , sig_digits ))
257
+ bias_mo_l .append (format (bias_mo , sig_digits ))
258
+ stdObs_xy_mo_l .append (format (stdObs_xy_mo , sig_digits ))
259
+ std_xy_mo_l .append (format (std_xy_mo , sig_digits ))
260
+ meanObs_xy_mo_l .append (format (meanObs_xy_mo , sig_digits ))
261
+ mean_xy_mo_l .append (format (mean_xy_mo , sig_digits ))
263
262
264
263
metrics_dictionary ["bias_xy" ]["CalendarMonths" ] = bias_mo_l
265
264
metrics_dictionary ["rms_xy" ]["CalendarMonths" ] = rms_mo_l
@@ -276,8 +275,8 @@ def compute_metrics(Var, dm, do, debug=False):
276
275
277
276
# ZONAL AND SEASONAL MEAN CONTRIBUTIONS
278
277
# metrics_dictionary['rms_y'][sea] = format(
279
- # rms_y * conv ,
278
+ # rms_y,
280
279
# sig_digits)
281
280
# metrics_dictionary['rms_devzm'][sea] = format(
282
- # rms_xy_devzm * conv ,
281
+ # rms_xy_devzm,
283
282
# sig_digits)
0 commit comments