def loadAllGenKwData(ert, case_name, keys=None): """ @type ert: EnKFMain @type case_name: str @type keys: list of str @rtype: DataFrame """ fs = ert.getEnkfFsManager().getFileSystem(case_name) realizations = GenKwCollector.createActiveList(ert, fs) gen_kw_keys = GenKwCollector.getAllGenKwKeys(ert) if keys is not None: gen_kw_keys = [key for key in keys if key in gen_kw_keys ] # ignore keys that doesn't exist gen_kw_array = numpy.empty(shape=(len(gen_kw_keys), len(realizations)), dtype=numpy.float64) gen_kw_array.fill(numpy.nan) for column_index, key in enumerate(gen_kw_keys): key, keyword = key.split(":") use_log_scale = False if key.startswith("LOG10_"): key = key[6:] use_log_scale = True ensemble_config_node = ert.ensembleConfig().getNode(key) ensemble_data = EnsemblePlotGenKW(ensemble_config_node, fs) keyword_index = ensemble_data.getIndexForKeyword(keyword) for realization_index, realization_number in enumerate( realizations): realization_vector = ensemble_data[realization_number] value = realization_vector[keyword_index] if use_log_scale: value = math.log10(value) gen_kw_array[column_index][realization_index] = value gen_kw_data = DataFrame(data=numpy.transpose(gen_kw_array), index=realizations, columns=gen_kw_keys) gen_kw_data.index.name = "Realization" return gen_kw_data
class EnsembleGenKWFetcher(DataFetcher): def __init__(self, ert): super(EnsembleGenKWFetcher, self).__init__(ert) def fetchSupportedKeys(self): gen_kw_keys = ( self.ert().ensembleConfig().getKeylistFromImplType(ErtImplType.GEN_KW) ) gen_kw_list = [] for key in gen_kw_keys: enkf_config_node = self.ert().ensembleConfig().getNode(key) model_config = enkf_config_node.getModelConfig() assert isinstance(model_config, GenKwConfig) model_keys = model_config.getKeyWords() for key_word in model_keys: gen_kw_list.append("%s:%s" % (key, key_word)) return gen_kw_list def getEnsembleConfigNode(self, key): """@rtype: EnsembleConfig""" ensemble_config = self.ert().ensembleConfig() assert key in ensemble_config return ensemble_config.getNode(key) def fetchData(self, key, case=None): key, keyword = key.split(":") ensemble_config_node = self.getEnsembleConfigNode(key) enkf_fs = self.ert().getEnkfFsManager().getFileSystem(case) ensemble_plot_gen_kw = EnsemblePlotGenKW(ensemble_config_node, enkf_fs) keyword_index = ensemble_plot_gen_kw.getIndexForKeyword(keyword) use_log_scale = ensemble_plot_gen_kw.shouldUseLogScale(keyword_index) data = { "x": [0], "y": [], "min_y": None, "max_y": None, "min_x": 0, "max_x": 0, "use_log_scale": use_log_scale, } for vector in ensemble_plot_gen_kw: y = [] data["y"].append(y) if len(vector) > keyword_index: value = vector.getValue(keyword_index) y.append(value) if data["min_y"] is None or data["min_y"] > value: data["min_y"] = value if data["max_y"] is None or data["max_y"] < value: data["max_y"] = value return data