Beispiel #1
0
 def print_meta(self, target_key_):
     something_done = False
     for key in self._distributions_1D:
         if key != target_key_: continue
         self._distributions_1D[key].print_meta()
         something_done = True
     for key in self._distributions_2D:
         if key != target_key_: continue
         self._distributions_2D[key].print_meta()
         something_done = True
     if something_done == False:
         msg.warning(
             "Distribution_store.print_meta",
             "distribution {0} has no key called {1}".format(
                 self._name, target_key_))
Beispiel #2
0
 def rename(self, old_key_, new_key_):
     something_done = False
     old_key_ = old_key_.replace("\text", "\\text")
     for key in self._distributions_1D:
         if old_key_ != key: continue
         self._distributions_1D[new_key_] = self._distributions_1D.pop(
             old_key_)
         msg.info(
             "Distribution_store.rename",
             "Store \"{0}\" renaming 1D distribution key {1} to {2}".format(
                 self._name, old_key_, new_key_),
             _verbose_level=0)
         something_done = True
     for key in self._distributions_2D:
         dist_key = key
         if old_key_ == key:
             self._distributions_2D[new_key_] = self._distributions_2D.pop(
                 old_key_)
             msg.info(
                 "Distribution_store.rename",
                 "Store \"{0}\" renaming 2D distribution key {1} to {2}".
                 format(self._name, old_key_, new_key_),
                 _verbose_level=0)
             dist_key = new_key_
             something_done = True
         indices = [
             idx for idx, k2 in enumerate(
                 self._distributions_2D[dist_key]._local_keys)
             if k2 == old_key_
         ]
         if old_key_ not in indices: continue
         for idx in indices:
             self._distributions_2D[dist_key]._local_keys[idx] = new_key_
             msg.info(
                 "Distribution_store.rename",
                 "Store \"{0}\" using 2D distribution key {1}... renaming subkey {2} to {3}"
                 .format(self._name, dist_key, old_key_, new_key_),
                 _verbose_level=0)
             something_done = True
     if not something_done:
         msg.warning(
             "Distribution_store.rename",
             "Store \"{0}\" with nothing done for old_key_={1}, new_key_={2}"
             .format(self._name, old_key_, new_key_),
             _verbose_level=0)
Beispiel #3
0
def load_distributions_from_yaml(dataset_, dep_vars_, indep_vars_, path_,
                                 **argv):
    n_dim_ = argv.get("n_dim_", 1)
    extra_info_global = argv.get("metadata_global_", {})
    extra_info_local = argv.get("metadata_global_", {})
    for var_idx in range(0, len(dep_vars_)):
        dep_var = dep_vars_[var_idx]
        distribution = Distribution()
        dist_key = "|"
        if extra_info_global.get("table_doi", None) != None:
            dist_key = dist_key + str(extra_info_global["table_doi"]) + "|"
        if extra_info_global.get("data_file", None) != None:
            dist_key = dist_key + str(extra_info_global["data_file"]) + "|"
        else:
            dist_key = dist_key + path_ + "|"
        if n_dim_ == 1: distribution = Distribution_1D()
        if n_dim_ == 2: distribution = Distribution_2D()
        distribution._description = dep_var["header"].get("name", "unknown")
        distribution._name = distribution._description
        distribution._dep_var = dep_var["header"].get("name", "unknown")
        distribution._indep_var = indep_vars_[0]["header"].get(
            "name", "unknown")
        distribution._units = dep_var["header"].get("units", "unknown")
        for key in extra_info_local:
            if key == "dependent_variables" or key == "independent_variables":
                continue
            distribution._meta["LOCAL::" + key] = extra_info_local[key]
        for key in extra_info_global:
            distribution._meta["GLOBAL::" + key] = extra_info_global[key]
        for key in dep_var:
            if key == "values": continue
            if key == "errors": continue
            distribution._meta["LOCAL::DEP_VARS::" + key] = dep_var[key]
        pt_idx = 0
        for entry in dep_var["values"]:
            try:
                distribution._values = np.append(distribution._values,
                                                 entry["value"])
            except KeyError as exc:
                msg.error(
                    "HEP_data_utils.helpers.load_distributions_from_yaml",
                    "KeyError: {0}".format(exc),
                    _verbose_level=-1)
                msg.fatal(
                    "HEP_data_utils.helpers.load_distributions_from_yaml",
                    "Entry with no \"value\" when trying to create distribution {0} in file {1}"
                    .format(distribution._description, path_))
        for entry in dep_var["values"]:
            try:
                errors = entry["errors"]
            except KeyError as exc:
                msg.error(
                    "HEP_data_utils.helpers.load_distributions_from_yaml",
                    "KeyError: {0}".format(exc),
                    _verbose_level=1)
                msg.warning(
                    "HEP_data_utils.helpers.load_distributions_from_yaml",
                    "Entry with no \"errors\" when trying to create distribution {0} in file {1}... Assuming there are none"
                    .format(distribution._description, path_),
                    _verbose_level=1)
                errors = []
            err_idx = 0
            for error in errors:
                get_error_from_yaml_map(distribution, error, pt_idx, err_idx)
                err_idx = err_idx + 1
            pt_idx = pt_idx + 1
        for var_idx in range(0, len(indep_vars_)):
            indep_var = indep_vars_[var_idx]
            for key in indep_var:
                if key == "values": continue
                distribution._meta["LOCAL::INDEP_VARS::" +
                                   key] = indep_var[key]
        expected_size = len(distribution._values)
        if n_dim_ == 1: set_1D_bins(distribution, indep_vars_)
        elif n_dim_ == 2:
            set_2D_bins(distribution, indep_vars_)
            regularise_bins(distribution)
        else:
            msg.fatal(
                "HEP_data_utils.helpers.load_distributions_from_yaml",
                "number of bin dimensions is {0} but I can only handle 1 or 2".
                format(n_dim_))
        for error in [
                distribution._symm_errors, distribution._asymm_errors_up,
                distribution._asymm_errors_down
        ]:
            for key in error:
                this_err_size = len(error[key])
                if this_err_size == expected_size: continue
                msg.fatal(
                    "HEP_data_utils.helpers.load_distributions_from_yaml",
                    "error source {0} has length {1} for distribution [{2}] where {3} was expected"
                    .format(key, this_err_size, distribution._description,
                            expected_size))
        msg.info("HEP_data_utils.helpers.load_distributions_from_yaml",
                 "yaml file loaded with the following entries",
                 _verbose_level=0)
        dist_key = dist_key + str(distribution._name) + "|"
        if msg.VERBOSE_LEVEL >= 0: print(distribution)
        if n_dim_ == 1:
            if dataset_._distributions_1D.get(dist_key, None) != None:
                dist_key = dist_key + "-duplicated-auto-key;1"
                while dataset_._distributions_1D.get(dist_key, None) != None:
                    dist_key = dist_key[:-1] + str(1 + int(dist_key[-1:]))
            dataset_._distributions_1D[dist_key] = distribution
        if n_dim_ == 2:
            if dataset_._distributions_2D.get(dist_key, None) != None:
                dist_key = dist_key + "-duplicated-auto-key;1"
                while dataset_._distributions_2D.get(dist_key, None) != None:
                    dist_key = dist_key[:-1] + str(1 + int(dist_key[-1:]))
            dataset_._distributions_2D[dist_key] = distribution