Exemple #1
0
    def setup_function(self):
        """Load the fit results from the file and make some check compatibility"""
        # load hypersurfaces
        if self.interpolated:
            self.hypersurfaces = hs.load_interpolated_hypersurfaces(
                self.fit_results_file, self.calc_specs)
        else:
            self.hypersurfaces = hs.load_hypersurfaces(self.fit_results_file,
                                                       self.calc_specs)
        self.data.data_specs = self.calc_specs

        if self.links is not None:
            for key, val in self.links.items():
                self.data.link_containers(key, val)

        # create containers for scale factors
        for container in self.data:
            container["hs_scales"] = np.empty(container.size, dtype=FTYPE)
            if self.propagate_uncertainty:
                container["hs_scales_uncertainty"] = np.empty(container.size,
                                                              dtype=FTYPE)

        # Check map names match between data container and hypersurfaces
        for container in self.data:
            assert container.name in self.hypersurfaces, f"No match for map {container.name} found in the hypersurfaces"

        self.data.unlink_containers()
Exemple #2
0
    def __init__(
        self,
        fit_results_file,
        propagate_uncertainty=False,
        interpolated=False,
        links=None,
        **std_kwargs,
    ):

        # -- Load hypersurfaces -- #

        # Store args
        self.fit_results_file = fit_results_file
        self.propagate_uncertainty = propagate_uncertainty
        self.interpolated = interpolated
        # expected parameter names depend on the hypersurface and, if applicable,
        # on the parameters in which the hypersurfaces are interpolated
        if self.interpolated:
            hs_params, inter_params = hs.extract_interpolated_hypersurface_params(
                self.fit_results_file)
            self.hypersurface_param_names = hs_params
            self.inter_params = inter_params
            expected_params = hs_params + inter_params
        else:
            hypersurfaces = hs.load_hypersurfaces(self.fit_results_file,
                                                  std_kwargs['calc_mode'])
            self.hypersurface_param_names = list(
                hypersurfaces.values())[0].param_names
            expected_params = self.hypersurface_param_names

        # -- Initialize base class -- #
        super().__init__(
            expected_params=expected_params,
            **std_kwargs,
        )

        # -- Only allowed/implemented modes -- #

        assert isinstance(self.calc_mode, MultiDimBinning)

        self.links = ast.literal_eval(links)
        self.warning_issued = False  # don't warn more than once about empty bins
        self.hypersurfaces = None
Exemple #3
0
    def __init__(
        self,
        fit_results_file,
        propagate_uncertainty=False,
        interpolated=False,
        data=None,
        params=None,
        input_names=None,
        output_names=None,
        debug_mode=None,
        error_method=None,
        input_specs=None,
        calc_specs=None,
        output_specs=None,
        links=None,
    ):
        # pylint: disable=line-too-long
        # -- Expected input / output names -- #
        input_names = ()
        output_names = ()

        # -- Which keys are added or altered for the outputs during `apply` -- #

        input_calc_keys = ()
        if propagate_uncertainty:
            output_calc_keys = ("hs_scales", "hs_scales_uncertainty")
        else:
            output_calc_keys = ("hs_scales", )

        if error_method == "sumw2":
            output_apply_keys = ("weights", "errors")
            input_apply_keys = output_apply_keys
        else:
            output_apply_keys = ("weights", )
            input_apply_keys = output_apply_keys

        # -- Load hypersurfaces -- #

        # Store args
        self.fit_results_file = fit_results_file
        self.propagate_uncertainty = propagate_uncertainty
        self.interpolated = interpolated
        # expected parameter names depend on the hypersurface and, if applicable,
        # on the parameters in which the hypersurfaces are interpolated
        if self.interpolated:
            hs_params, inter_params = hs.extract_interpolated_hypersurface_params(
                self.fit_results_file)
            self.hypersurface_param_names = hs_params
            self.inter_params = inter_params
            expected_params = hs_params + inter_params
        else:
            hypersurfaces = hs.load_hypersurfaces(self.fit_results_file,
                                                  calc_specs)
            self.hypersurface_param_names = list(
                hypersurfaces.values())[0].param_names
            expected_params = self.hypersurface_param_names

        # -- Initialize base class -- #
        super(pi_hypersurfaces, self).__init__(
            data=data,
            params=params,
            expected_params=expected_params,
            input_names=input_names,
            output_names=output_names,
            debug_mode=debug_mode,
            error_method=error_method,
            input_specs=input_specs,
            calc_specs=calc_specs,
            output_specs=output_specs,
            input_calc_keys=input_calc_keys,
            output_calc_keys=output_calc_keys,
            input_apply_keys=input_apply_keys,
            output_apply_keys=output_apply_keys,
        )

        # -- Only allowed/implemented modes -- #

        assert self.input_mode is not None
        assert self.calc_mode == "binned"
        assert self.output_mode is not None

        self.links = ast.literal_eval(links)
        self.warning_issued = False  # don't warn more than once about empty bins
        self.hypersurfaces = None