コード例 #1
0
ファイル: hist_io.py プロジェクト: gondiaz/Olivia
def get_histograms_from_file(file_input, group_name='HIST'):
    histo_manager = HistoManager()

    def name_selection(x):
        selection = (('bins' not in x) and ('labels' not in x)
                     and ('errors' not in x) and ('outRange' not in x)
                     and ('scales' not in x))
        return selection

    with tb.open_file(file_input, "r") as h5in:
        histogram_list = []
        group = getattr(h5in.root, group_name)
        for histoname in filter(name_selection, group._v_children):
            entries = np.array(getattr(group, histoname)[:])
            bins = getattr(group, histoname + '_bins')[:]
            out_range = getattr(group, histoname + '_outRange')[:]
            errors = np.array(getattr(group, histoname + '_errors')[:])
            labels = getattr(group, histoname + '_labels')[:]
            labels = [str(lab)[2:-1].replace('\\\\', '\\') for lab in labels]
            try:
                scale = getattr(group, histoname + '_scales')[:]
                scale = [str(scl)[2:-1].replace('\\\\', '\\') for scl in scale]
            except tb.NoSuchNodeError:
                scale = ["linear"]

            histogram = Histogram(histoname, bins, labels, scale)
            histogram.data = entries
            histogram.out_range = out_range
            histogram.errors = errors
            histogram.scale = scale

            histogram_list.append(histogram)

    return HistoManager(histogram_list)
コード例 #2
0
def test_join_histo_managers(histogram_list):
    args, list_of_histograms = histogram_list
    histogram_manager = HistoManager(list_of_histograms)
    joined_histogram_manager = histf.join_histo_managers(
        histogram_manager, histogram_manager)

    assert len(list_of_histograms) == len(joined_histogram_manager.histos)
    for histoname, histogram in joined_histogram_manager.histos.items():
        histo1 = histogram_manager[histoname]
        true_histogram = Histogram(histoname, histo1.bins, histo1.labels,
                                   histo1.scale)
        true_histogram.data = 2 * histo1.data
        true_histogram.errors = np.sqrt(2) * histo1.errors
        true_histogram.out_range = 2 * histo1.out_range
        assert_histogram_equality(histogram, true_histogram)
コード例 #3
0
def test_join_histo_managers_with_different_histograms(histogram_list1,
                                                       histogram_list2):
    _, list_of_histograms1 = histogram_list1
    _, list_of_histograms2 = histogram_list2
    histogram_manager1 = HistoManager(list_of_histograms1)
    histogram_manager2 = HistoManager(list_of_histograms2)
    joined_histogram_manager = histf.join_histo_managers(
        histogram_manager1, histogram_manager2)

    unique_histograms = set(histogram_manager1.histos) | set(
        histogram_manager2.histos)
    common_histograms = set(histogram_manager1.histos) & set(
        histogram_manager2.histos)

    remove_names = []
    for name in unique_histograms:
        if name in common_histograms:
            if not np.all(a == b
                          for a, b in zip(histogram_manager1[name].bins,
                                          histogram_manager2[name].bins)):
                remove_names.append(name)
    list_of_names = unique_histograms - set(remove_names)

    for histoname, histogram in joined_histogram_manager.histos.items():
        assert histoname in list_of_names
        if (histoname in histogram_manager1.histos) and (
                histoname in histogram_manager2.histos):
            histo1 = histogram_manager1[histoname]
            histo2 = histogram_manager2[histoname]

            true_histogram = Histogram(histoname, histo1.bins, histo1.labels,
                                       histo1.scale)
            true_histogram.data = histo1.data + histo2.data
            true_histogram.errors = np.sqrt(histo1.errors**2 +
                                            histo2.errors**2)
            true_histogram.out_range = histo1.out_range + histo2.out_range

            assert_histogram_equality(histogram, true_histogram)

        elif histoname in histogram_manager1.histos:
            histo1 = histogram_manager1[histoname]
            assert_histogram_equality(histogram, histo1)

        elif histoname in histogram_manager2.histos:
            histo2 = histogram_manager2[histoname]
            assert_histogram_equality(histogram, histo2)