示例#1
0
    def observables(self, _prediction, parameters):
        """Creates a list of eos.Observable objects for the named set of predictions."""
        if _prediction not in self.predictions:
            raise RuntimeError(
                'Cannot create observables for unknown set of predictions: \'{}\''
                .format(_prediction))

        prediction = self.predictions[_prediction]
        options = eos.Options(**prediction['global_options'])
        observables = [
            eos.Observable.make(
                o['name'], parameters,
                eos.Kinematics(
                    **(o['kinematics'] if 'kinematics' in o else {})), options)
            for o in prediction['observables']
        ]

        if None in observables:
            unknown_observables = set()
            for p, o in zip(prediction['observables'], observables):
                if o is None:
                    unknown_observables.add(p['name'])
            raise RuntimeError(
                'Prediction \'{}\' contains unknown observable names: {}'.
                format(_prediction, unknown_observables))

        return observables
示例#2
0
文件: plotter.py 项目: gechuan/eos-1
    def plot_observable(self, item):
        oname = item['observable']
        info('   plotting EOS observable "{}"'.format(oname))

        # create parameters
        parameters = eos.Parameters.Defaults()
        if 'parameters' in item and 'parameters-from-file' in item:
            warn(
                '    overriding values read from \'parameters-from-file\' with explicit values in \'parameters\''
            )

        if 'parameters-from-file' in item and type(
                item['parameters-from-file']) is str:
            parameters.override_from_file(item['parameters-from-file'])

        if 'parameters' in item and type(item['parameters']) is dict:
            for key, value in item['parameters'].items():
                parameters.set(key, value)

        # create kinematics
        kinematics = eos.Kinematics()
        if not 'kinematic' in item:
            raise KeyError(
                'kinematic not found; do not know how to map x to a kinematic variable'
            )
        kvar = kinematics.declare(item['kinematic'], np.nan)

        # create (empty) options
        options = eos.Options()

        # create observable
        observable = eos.Observable.make(oname, parameters, kinematics,
                                         options)

        xlo, xhi = self.xrange
        if 'range' in item:
            xlo, xhi = item['range']

        samples = 100
        if 'samples' in item:
            samples = item['samples']

        xvalues = np.linspace(xlo, xhi, samples + 1)
        ovalues = np.array([])
        for xvalue in xvalues:
            kvar.set(xvalue)
            ovalues = np.append(ovalues, observable.evaluate())

        color = 'black'
        if 'color' in item:
            color = item['color']

        plt.plot(xvalues, ovalues, color=color)
示例#3
0
    def test_log_000(self):
        "Computation of specific observable should log error"
        import eos

        with self.assertLogs('EOS', level='ERROR') as cm:
            eos.Observable.make(
                "B->pilnu::BR", eos.Parameters.Defaults(),
                eos.Kinematics(q2_min=1, q2_max=6),
                eos.Options(**{'U': 'c'}))  # will  be overwritten by the
            # implementation of the observable
            self.assertEqual(cm.output, [
                r"""ERROR:EOS:[ConcreteObservableEntry.make] Observable 'B->pilnu::BR' forces option key 'U' to value 'u', overriding user-provided value 'c'"""
            ])
示例#4
0
        def plot(self):
            item = self.item
            oname = item['observable']
            info('   plotting EOS observable "{}"'.format(oname))

            # create parameters
            parameters = eos.Parameters.Defaults()
            if 'parameters' in item and 'parameters-from-file' in item:
                warn('    overriding values read from \'parameters-from-file\' with explicit values in \'parameters\'')

            if 'parameters-from-file' in item and type(item['parameters-from-file']) is str:
                warn('    overriding parameters from file')
                parameters.override_from_file(item['parameters-from-file'])

            if 'parameters' in item and type(item['parameters']) is dict:
                for key, value in item['parameters'].items():
                    parameters.set(key, value)

            # create kinematics
            kinematics = eos.Kinematics()
            if not ('kinematic' in item or 'variable' in item) and not 'parameter' in item:
                raise KeyError('neither kinematic variable nor parameter found; do not know how to map x to a variable')
            if ('kinematic' in item or 'variable' in item) and 'parameter' in item:
                raise KeyError('both kinematic variable and parameter found; do not know how to map x to a variable')
            if 'kinematic' in item:
                var = kinematics.declare(item['kinematic'], np.nan)
            elif 'variable' in item:
                var = kinematics.declare(item['variable'], np.nan)
            else:
                var = parameters.declare(item['parameter'], np.nan)

            if 'kinematics' in item:
                for k, v in item['kinematics'].items():
                    kinematics.declare(k, v)

            # create (empty) options
            options = eos.Options()

            # create observable
            observable = eos.Observable.make(oname, parameters, kinematics, options)

            xvalues = np.linspace(self.xlo, self.xhi, self.xsamples + 1)
            ovalues = np.array([])
            for xvalue in xvalues:
                var.set(xvalue)
                ovalues = np.append(ovalues, observable.evaluate())

            plt.plot(xvalues, ovalues, alpha=self.alpha, color=self.color, label=self.label, ls=self.style)