Пример #1
0
def _calc_halftime(times, values, half_value):
    for i, v in enumerate(values):
        if v > half_value:
            break

    left_time = times[i - 1]
    left_value = values[i - 1]

    right_time = times[i]
    right_value = values[i]

    if (left_value == right_value):
        log.warn('Matching values: left = %s, right = %s', left_value,
                 right_value)

    if (left_time == right_time):
        log.warn('Matching times: left = %s, right = %s', left_time,
                 right_time)

    y = _interpolation.linear_project(left_value, left_time, right_value,
                                      right_time, half_value)

    if y == float('nan'):
        log.error(
            'Halftime is not a number: i = %s, lt = %s, rt = %s, lv = %s, rv = %s',
            i, left_time, right_time, left_value, right_value)
    return y
Пример #2
0
    def perform(self, run, target):
        times, values, errors = run.analyses[self.analysis_name]
#        log.warn('times: %s', times)
#        log.warn('values: %s', values)
#        log.warn('errors: %s', errors)

        halftime = _calc_halftime(times, values, self.half_value)
#        log.warn('half_value = %s, calculated halftime = %s',
#                self.half_value, halftime)

        left_index = bisect.bisect_left(times, halftime)
        left_index = min(left_index, len(times) - 2)
#        log.warn('left_index = %s, times: %s', left_index,
#                times[left_index:left_index + 2])

        left_time, right_time = times[left_index:left_index + 2]
        left_value, right_value = values[left_index:left_index + 2]
        left_error, right_error = errors[left_index:left_index + 2]

        half_value_error = interpolation.linear_project(left_time, left_error,
                right_time, right_error, halftime)

        slope = (right_value - left_value) / (right_time - left_time)

        target.value = half_value_error / slope
Пример #3
0
    def perform(self, run, target):
        times, values, errors = run.analyses[self.analysis_name]
        #        log.warn('times: %s', times)
        #        log.warn('values: %s', values)
        #        log.warn('errors: %s', errors)

        halftime = _calc_halftime(times, values, self.half_value)
        #        log.warn('half_value = %s, calculated halftime = %s',
        #                self.half_value, halftime)

        left_index = bisect.bisect_left(times, halftime)
        left_index = min(left_index, len(times) - 2)
        #        log.warn('left_index = %s, times: %s', left_index,
        #                times[left_index:left_index + 2])

        left_time, right_time = times[left_index:left_index + 2]
        left_value, right_value = values[left_index:left_index + 2]
        left_error, right_error = errors[left_index:left_index + 2]

        half_value_error = interpolation.linear_project(
            left_time, left_error, right_time, right_error, halftime)

        slope = (right_value - left_value) / (right_time - left_time)

        target.value = half_value_error / slope
Пример #4
0
    def test_linear_project(self):
        test_data = [({
            'x1': 2,
            'x2': 3,
            'x3': 5,
            'y1': 6,
            'y2': 7
        }, 9), ({
            'x1': 2,
            'x2': 3,
            'x3': 1,
            'y1': 6,
            'y2': 7
        }, 5), ({
            'x1': 2,
            'x2': 3,
            'x3': 5,
            'y1': 1,
            'y2': 5
        }, 13), ({
            'x1': 2,
            'x2': 3,
            'x3': 1,
            'y1': 1,
            'y2': 5
        }, -3), ({
            'x1': 1,
            'x2': 3,
            'x3': 2,
            'y1': 1,
            'y2': 5
        }, 3)]

        for kwargs, result in test_data:
            self.assertEqual(result, interpolation.linear_project(**kwargs))
    def test_linear_project(self):
        test_data = [({'x1': 2, 'x2': 3, 'x3': 5,
                       'y1': 6, 'y2': 7},      9),
                     ({'x1': 2, 'x2': 3, 'x3': 1,
                       'y1': 6, 'y2': 7},      5),
                     ({'x1': 2, 'x2': 3, 'x3': 5,
                       'y1': 1, 'y2': 5},     13),
                     ({'x1': 2, 'x2': 3, 'x3': 1,
                       'y1': 1, 'y2': 5},     -3),
                     ({'x1': 1, 'x2': 3, 'x3': 2,
                       'y1': 1, 'y2': 5},      3)]

        for kwargs, result in test_data:
            self.assertEqual(result, interpolation.linear_project(**kwargs))
Пример #6
0
def _calc_halftime(times, values, half_value):
    for i, v in enumerate(values):
        if v > half_value:
            break;

    left_time = times[i-1]
    left_value = values[i-1]

    right_time = times[i]
    right_value = values[i]

    if (left_value == right_value):
        log.warn('Matching values: left = %s, right = %s', left_value, right_value)

    if (left_time == right_time):
        log.warn('Matching times: left = %s, right = %s', left_time, right_time)

    y = interpolation.linear_project(left_value, left_time,
            right_value, right_time, half_value)

    if y == float('nan'):
        log.error('Halftime is not a number: i = %s, lt = %s, rt = %s, lv = %s, rv = %s',
                i, left_time, right_time, left_value, right_value)
    return y