static void data_ranking_init(data_ranking_type * ranking , enkf_fs_type * fs , enkf_config_node_type * config_node, const char * key_index , int step , state_enum state ) { enkf_node_type * enkf_node = enkf_node_alloc( config_node ); int iens; for (iens = 0; iens < ranking->ens_size; iens++) { double value; node_id_type node_id = {.report_step = step , .iens = iens , .state = state }; if (enkf_node_user_get( enkf_node , fs , key_index , node_id , &value)) { double_vector_iset( ranking->data_ensemble , iens , value ); bool_vector_iset( ranking->valid , iens , true ); } } if (ranking->sort_increasing) ranking->sort_permutation = double_vector_alloc_sort_perm( ranking->data_ensemble ); else ranking->sort_permutation = double_vector_alloc_rsort_perm( ranking->data_ensemble ); enkf_node_free( enkf_node ); }
misfit_ranking_type * misfit_ranking_alloc(const misfit_ensemble_type * misfit_ensemble , const stringlist_type * sort_keys , const int_vector_type * steps, const char * ranking_key) { const int ens_size = misfit_ensemble_get_ens_size( misfit_ensemble ); int iens; misfit_ranking_type * ranking = misfit_ranking_alloc_empty(ens_size); for (iens = 0; iens < ens_size; iens++) { const misfit_member_type * misfit_member = misfit_ensemble_iget_member( misfit_ensemble , iens ); /* Lookup in the master ensemble. */ { double iens_valid = true; double total = 0; hash_type * obs_hash = hash_alloc(); for (int ikey = 0; ikey < stringlist_get_size( sort_keys ); ikey++) { const char * obs_key = stringlist_iget( sort_keys , ikey ); if (misfit_member_has_ts( misfit_member , obs_key )) { misfit_ts_type * ts = misfit_member_get_ts( misfit_member , obs_key ); double value = misfit_ts_eval( ts , steps ); /* Sum up the misfit for this key - and these timesteps. */ hash_insert_double( obs_hash , obs_key , value); total += value; } else iens_valid = true; } if (iens_valid) misfit_ranking_iset( ranking , iens , obs_hash , total ); else misfit_ranking_iset_invalid( ranking , iens ); } } ranking->sort_permutation = double_vector_alloc_sort_perm( ranking->total ); return ranking; }