@@ -49,6 +49,7 @@ def __init__(
49
49
t_enhance ,
50
50
temporal_coarsening_method ,
51
51
features = None ,
52
+ source_features = None ,
52
53
output_names = None ,
53
54
input_handler_name = None ,
54
55
input_handler_kwargs = None ,
@@ -85,6 +86,17 @@ def __init__(
85
86
Explicit list of features to validate. Can be a single feature str,
86
87
list of string feature names, or None for all features found in the
87
88
out_file_path.
89
+ source_features : str | list | None
90
+ Optional feature names to retrieve from the source dataset if the
91
+ source feature names are not the same as the sup3r output feature
92
+ names. These will be used to derive the features to be validated.
93
+ e.g. If model output is temperature_2m, and these were derived from
94
+ temperature_min_2m (and max), then source features should be
95
+ temperature_min_2m and temperature_max_2m while the model output
96
+ temperature_2m is aggregated using min/max in the
97
+ temporal_coarsening_method. Another example is features="ghi",
98
+ source_features="rsds", where this is a simple alternative name
99
+ lookup.
88
100
output_names : str | list
89
101
Optional output file dataset names corresponding to the features
90
102
list input
@@ -125,6 +137,11 @@ class for argument details.
125
137
self ._features = (
126
138
features if isinstance (features , (list , tuple )) else [features ]
127
139
)
140
+ self ._source_features = (
141
+ source_features
142
+ if isinstance (source_features , (list , tuple ))
143
+ else [source_features ]
144
+ )
128
145
self ._out_names = (
129
146
output_names
130
147
if isinstance (output_names , (list , tuple ))
@@ -198,6 +215,14 @@ def output_names(self):
198
215
return self .features
199
216
return self ._out_names
200
217
218
+ @property
219
+ def source_features (self ):
220
+ """Get a list of source dataset names corresponding to the input source
221
+ data """
222
+ if self ._source_features is None or self ._source_features == [None ]:
223
+ return self .features
224
+ return self ._source_features
225
+
201
226
@property
202
227
def output_type (self ):
203
228
"""Get output data type
@@ -451,16 +476,17 @@ def run(self):
451
476
"""
452
477
453
478
errors = {}
454
- ziter = zip (self .features , self .output_names )
455
- for idf , (feature , dset_out ) in enumerate (ziter ):
479
+ ziter = zip (self .features , self .source_features , self . output_names )
480
+ for idf , (feature , source_feature , dset_out ) in enumerate (ziter ):
456
481
logger .info (
457
- 'Running QA on dataset {} of {} for "{}"' .format (
458
- idf + 1 , len (self .features ), feature
482
+ 'Running QA on dataset {} of {} for feature "{}" '
483
+ 'with source feature name "{}"' .format (
484
+ idf + 1 , len (self .features ), feature , source_feature ,
459
485
)
460
486
)
461
487
data_syn = self .get_dset_out (feature )
462
488
data_syn = self .coarsen_data (idf , feature , data_syn )
463
- data_true = self .input_handler [feature ][...]
489
+ data_true = self .input_handler [source_feature ][...]
464
490
465
491
if data_syn .shape != data_true .shape :
466
492
msg = (
0 commit comments