Exemple #1
0
        def __init__(self, plotter, item):
            import yaml

            super().__init__(plotter, item)

            if 'constraints' not in item:
                raise KeyError('no constraints specified')

            # extract information
            self.names            = item['constraints']
            self.rotation         = 'vertical' if 'rotation' not in item else item['rotation']
            self.constraints      = []

            if type(self.names) == str:
                self.names = [self.names]

            constraints = eos.Constraints()

            for name in self.names:
                entry = constraints[name]
                if not entry:
                    raise ValueError('unknown constraint {}'.format(name))

                constraint = yaml.load(entry.serialize(), Loader=yaml.SafeLoader)
                self.constraints.append(constraint)
Exemple #2
0
    def plot_constraint(self, item):
        import yaml

        constraints = eos.Constraints()

        if 'constraints' not in item:
            raise KeyError('no constraints specified')

        names = item['constraints']
        if type(names) == str:
            names = [names]

        for name in names:
            entry = constraints[name]
            if not entry:
                raise ValueError('unknown constraint {}'.format(name))

            constraint = yaml.load(entry.serialize())

            xvalues = None
            xerrors = None
            yvalues = None
            yerrors = None

            if constraint['type'] == 'Gaussian':
                kinematics = constraint['kinematics']
                width = 1
                if item['variable'] in kinematics:
                    xvalues = [kinematics[item['variable']]]
                    xerrors = None
                elif (item['variable'] + '_min'
                      in kinematics) and (item['variable'] + '_max'
                                          in kinematics):
                    xvalues = [(kinematics[item['variable'] + '_max'] +
                                kinematics[item['variable'] + '_min']) / 2]
                    xerrors = [(kinematics[item['variable'] + '_max'] -
                                kinematics[item['variable'] + '_min']) / 2]
                    if item['rescale-by-width']:
                        width = (kinematics[item['variable'] + '_max'] -
                                 kinematics[item['variable'] + '_min'])

                yvalues = [constraint['mean'] / width]
                sigma_hi = np.sqrt(
                    float(constraint['sigma-stat']['hi'])**2 +
                    float(constraint['sigma-sys']['hi'])**2) / width
                sigma_lo = np.sqrt(
                    float(constraint['sigma-stat']['lo'])**2 +
                    float(constraint['sigma-sys']['lo'])**2) / width
                yerrors = [[sigma_hi, sigma_lo]]
            elif constraint['type'] == 'MultivariateGaussian(Covariance)':
                if 'observable' not in item:
                    raise KeyError(
                        'observable needs to be specified for MultivariateGaussian(Covariance) constraints'
                    )
                dim = constraint['dim']
                covariance = np.array(constraint['covariance'])
                observables = constraint['observables']
                means = constraint['means']
                kinematics = constraint['kinematics']

                xvalues = []
                xerrors = []
                yvalues = []
                yerrors = []
                for i in range(0, dim):
                    width = 1

                    if not observables[i] == item['observable']:
                        continue
                    _kinematics = kinematics[i]
                    if item['variable'] in _kinematics:
                        xvalues.append(_kinematics[item['variable']])
                        xerrors.append(0)
                    elif (item['variable'] + '_min'
                          in _kinematics) and (item['variable'] + '_max'
                                               in _kinematics):
                        xvalues.append(
                            (_kinematics[item['variable'] + '_max'] +
                             _kinematics[item['variable'] + '_min']) / 2)
                        xerrors.append(
                            (_kinematics[item['variable'] + '_max'] -
                             _kinematics[item['variable'] + '_min']) / 2)
                        if item['rescale-by-width']:
                            width = (_kinematics[item['variable'] + '_max'] -
                                     _kinematics[item['variable'] + '_min'])

                    yvalues.append(means[i] / width)
                    yerrors.append(np.sqrt(covariance[i, i]) / width)
            elif constraint['type'] == 'MultivariateGaussian':
                if 'observable' not in item:
                    raise KeyError(
                        'observable needs to be specified for MultivariateGaussian constraints'
                    )
                dim = constraint['dim']
                sigma_stat_hi = np.array(constraint['sigma-stat-hi'])
                sigma_stat_lo = np.array(constraint['sigma-stat-lo'])
                sigma_sys = np.array(constraint['sigma-sys'])
                sigma = np.sqrt(
                    np.power(sigma_sys, 2) +
                    0.25 * np.power(sigma_stat_hi + sigma_stat_lo, 2))
                observables = constraint['observables']
                means = constraint['means']
                kinematics = constraint['kinematics']

                xvalues = []
                xerrors = []
                yvalues = []
                yerrors = []
                for i in range(0, dim):
                    width = 1

                    if not observables[i] == item['observable']:
                        continue
                    _kinematics = kinematics[i]
                    if item['variable'] in _kinematics:
                        xvalues.append(_kinematics[item['variable']])
                        xerrors.append(0)
                    elif (item['variable'] + '_min'
                          in _kinematics) and (item['variable'] + '_max'
                                               in _kinematics):
                        xvalues.append(
                            (_kinematics[item['variable'] + '_max'] +
                             _kinematics[item['variable'] + '_min']) / 2)
                        xerrors.append(
                            (_kinematics[item['variable'] + '_max'] -
                             _kinematics[item['variable'] + '_min']) / 2)
                        if item['rescale-by-width']:
                            width = (_kinematics[item['variable'] + '_max'] -
                                     _kinematics[item['variable'] + '_min'])

                    yvalues.append(means[i] / width)
                    yerrors.append(sigma[i] / width)
            else:
                raise ValueError('type of constraint presently not supported')

            xvalues = np.array(xvalues)
            if xerrors:
                xerrors = np.array(xerrors)
            yvalues = np.array(yvalues)
            yerrors = np.array(yerrors)

            color = item['color'] if 'color' in item else 'black'
            label = item['label'] if 'label' in item else None

            plt.errorbar(x=xvalues,
                         y=yvalues,
                         xerr=xerrors,
                         yerr=yerrors.T,
                         color=color,
                         elinewidth=1.0,
                         fmt='_',
                         linestyle='none',
                         label=label)
Exemple #3
0
#!/usr/bin/python3
# vim: set sw=4 sts=4 et tw=120 :

import eos
import re
import yaml

constraints = eos.Constraints()


def latex_to_rst(s):
    return (re.sub(r'\$([^\$]*)\$', r':math:`\1`', s))


page_title = 'List of Constraints'
print('#' * len(page_title))
print(page_title)
print('#' * len(page_title))
print('\n')
print(
    'The following is the full list of likelihood constraints (both experimental and theoretical) included in EOS v{}.\n\n'
    .format(eos.__version__))
print('\n')
print('.. list-table::')
print('   :widths: 50,50')
print('   :header-rows: 1')
print('')
print('   * - Qualified Name')
print('     - Observables')
for qn, entry in constraints:
    print('   * - ``{qn}``'.format(qn=qn))
Exemple #4
0
        def plot(self):
            import yaml

            constraints = eos.Constraints()

            for name in self.names:
                entry = constraints[name]
                if not entry:
                    raise ValueError('unknown constraint {}'.format(name))

                constraint = yaml.load(entry.serialize(), Loader=yaml.SafeLoader)

                xvalues = None
                xerrors = None
                yvalues = None
                yerrors = None

                if constraint['type'] == 'Gaussian':
                    kinematics = constraint['kinematics']
                    width = 1
                    if self.variable in kinematics:
                        xvalues = [kinematics[self.variable]]
                        xerrors = None
                    elif (self.variable + '_min' in kinematics) and (self.variable + '_max' in kinematics):
                        xvalues = [(kinematics[self.variable + '_max'] + kinematics[self.variable + '_min']) / 2]
                        xerrors = [(kinematics[self.variable + '_max'] - kinematics[self.variable + '_min']) / 2]
                        if self.rescale_by_width:
                            width = (kinematics[self.variable + '_max'] - kinematics[self.variable + '_min'])

                    yvalues = [float(constraint['mean']) / width]
                    sigma_hi = np.sqrt(float(constraint['sigma-stat']['hi'])**2 + float(constraint['sigma-sys']['hi'])**2) / width
                    sigma_lo = np.sqrt(float(constraint['sigma-stat']['lo'])**2 + float(constraint['sigma-sys']['lo'])**2) / width
                    yerrors = [[sigma_hi, sigma_lo]]
                elif constraint['type'] == 'MultivariateGaussian(Covariance)':
                    if not self.observable:
                        raise KeyError('observable needs to be specified for MultivariateGaussian(Covariance) constraints')
                    dim = constraint['dim']
                    covariance = np.array(constraint['covariance'])
                    observables = constraint['observables']
                    means = constraint['means']
                    kinematics = constraint['kinematics']

                    xvalues = []
                    xerrors = []
                    yvalues = []
                    yerrors = []
                    for i in range(0, dim):
                        width = 1

                        if not observables[i] == self.observable:
                            continue
                        _kinematics = kinematics[i]
                        if self.variable in _kinematics:
                            xvalues.append(_kinematics[self.variable])
                            xerrors = None
                        elif (self.variable + '_min' in _kinematics) and (self.variable + '_max' in _kinematics):
                            xvalues.append((_kinematics[self.variable + '_max'] + _kinematics[self.variable + '_min']) / 2)
                            xerrors.append((_kinematics[self.variable + '_max'] - _kinematics[self.variable + '_min']) / 2)
                            if self.rescale_by_width:
                                width = (_kinematics[self.variable + '_max'] - _kinematics[self.variable + '_min'])

                        yvalues.append(means[i] / width)
                        yerrors.append(np.sqrt(covariance[i, i]) / width)
                elif constraint['type'] == 'MultivariateGaussian':
                    if not self.observable:
                        raise KeyError('observable needs to be specified for MultivariateGaussian constraints')
                    dim = constraint['dim']
                    sigma_stat_hi = np.array(constraint['sigma-stat-hi'])
                    sigma_stat_lo = np.array(constraint['sigma-stat-lo'])
                    sigma_sys = np.array(constraint['sigma-sys'])
                    sigma = np.sqrt(np.power(sigma_sys, 2) + 0.25 * np.power(sigma_stat_hi + sigma_stat_lo, 2))
                    observables = constraint['observables']
                    means = constraint['means']
                    kinematics = constraint['kinematics']

                    xvalues = []
                    xerrors = []
                    yvalues = []
                    yerrors = []
                    for i in range(0, dim):
                        width = 1

                        if not observables[i] == self.observable:
                            continue
                        _kinematics = kinematics[i]
                        if self.variable in _kinematics:
                            xvalues.append(_kinematics[self.variable])
                            xerrors = None
                        elif (self.variable + '_min' in _kinematics) and (self.variable + '_max' in _kinematics):
                            xvalues.append((_kinematics[self.variable + '_max'] + _kinematics[self.variable + '_min']) / 2)
                            xerrors.append((_kinematics[self.variable + '_max'] - _kinematics[self.variable + '_min']) / 2)
                            if self.rescale_by_width:
                                width = (_kinematics[self.variable + '_max'] - _kinematics[self.variable + '_min'])

                        yvalues.append(means[i] / width)
                        yerrors.append(sigma[i] / width)
                else:
                    raise ValueError('type of constraint presently not supported')

                xvalues = np.array(xvalues)
                if xerrors:
                    xerrors = np.array(xerrors)
                yvalues = np.array(yvalues)
                yerrors = np.array(yerrors)

                plt.errorbar(x=xvalues, y=yvalues, xerr=xerrors, yerr=yerrors.T,
                    color=self.color, elinewidth=1.0, fmt='_', linestyle='none', label=self.label)
                # disable the label for subsequent plots
                self.label = None