コード例 #1
0
ファイル: generators.py プロジェクト: TillArndt/CmsToolsAC3b
def mc_stack_n_data_sum(wrps, merge_mc_key_func=None, use_all_data_lumi=False):
    """
    Stacks MC histos and merges data, input needs to be sorted and grouped.

    The output are tuples of MC stacks and data histograms.
    ATTENTION: This crashes, if the proper histograms are not present!

    :param wrps:                Iterables of HistoWrapper (grouped)
    :param merge_mc_key_func:   key function for python sorted(...), default
                                tries to sort after stack position
    :yields:                    (StackWrapper, HistoWrapper)
    """
    if not merge_mc_key_func:
        merge_mc_key_func = lambda w: settings.get_stack_position(w.sample)

    for grp in wrps:

        # split stream
        data, mc = split_data_mc(grp)

        # sum up data
        data_sum = None
        try:
            data_sum = op.sum(data)
        except op.TooFewWrpsError:
            print "WARNING generators.mc_stack_n_data_sum(..): "\
                  "No data histos present! I will yield only mc."
        if use_all_data_lumi:
            data_lumi = settings.data_lumi_sum_wrp()
        else:
            data_lumi = op.lumi(data_sum)

        # merge mc samples (merge also normalizes to lumi = 1.)
        mc_sorted = sorted(mc, key=merge_mc_key_func)
        mc_groupd = group(mc_sorted, merge_mc_key_func)
        mc_merged = (op.merge(g) for g in mc_groupd)
        mc_colord = apply_histo_fillcolor(mc_merged)

        # stack mc
        mc_norm = gen_prod(
            itertools.izip(mc_colord, itertools.repeat(data_lumi)))
        mc_stck = None
        try:
            mc_stck = op.stack(mc_norm)
        except op.TooFewWrpsError:
            print "WARNING generators.mc_stack_n_data_sum(..): " \
                  "No mc histos present! I will yield only data"
        if mc_stck and data_sum:
            yield mc_stck, data_sum
        elif mc_stck:
            yield (mc_stck, )
        elif data_sum:
            yield (data_sum, )
        else:
            raise op.TooFewWrpsError("Neither data nor mc histos present!")
コード例 #2
0
ファイル: generators.py プロジェクト: TillArndt/CmsToolsAC3b
def mc_stack_n_data_sum(wrps, merge_mc_key_func=None, use_all_data_lumi=False):
    """
    Stacks MC histos and merges data, input needs to be sorted and grouped.

    The output are tuples of MC stacks and data histograms.
    ATTENTION: This crashes, if the proper histograms are not present!

    :param wrps:                Iterables of HistoWrapper (grouped)
    :param merge_mc_key_func:   key function for python sorted(...), default
                                tries to sort after stack position
    :yields:                    (StackWrapper, HistoWrapper)
    """
    if not merge_mc_key_func:
        merge_mc_key_func = lambda w: settings.get_stack_position(w.sample)

    for grp in wrps:

        # split stream
        data, mc = split_data_mc(grp)

        # sum up data
        data_sum = None
        try:
            data_sum = op.sum(data)
        except op.TooFewWrpsError:
            print "WARNING generators.mc_stack_n_data_sum(..): "\
                  "No data histos present! I will yield only mc."
        if use_all_data_lumi:
            data_lumi = settings.data_lumi_sum_wrp()
        else:
            data_lumi = op.lumi(data_sum)

        # merge mc samples (merge also normalizes to lumi = 1.)
        mc_sorted = sorted(mc, key=merge_mc_key_func)
        mc_groupd = group(mc_sorted, merge_mc_key_func)
        mc_merged = (op.merge(g) for g in mc_groupd)
        mc_colord = apply_histo_fillcolor(mc_merged)

        # stack mc
        mc_norm = gen_prod(itertools.izip(mc_colord, itertools.repeat(data_lumi)))
        mc_stck = None
        try:
            mc_stck = op.stack(mc_norm)
        except op.TooFewWrpsError:
            print "WARNING generators.mc_stack_n_data_sum(..): " \
                  "No mc histos present! I will yield only data"
        if mc_stck and data_sum:
            yield mc_stck, data_sum
        elif mc_stck:
            yield (mc_stck, )
        elif data_sum:
            yield (data_sum, )
        else:
            raise op.TooFewWrpsError("Neither data nor mc histos present!")
コード例 #3
0
ファイル: generators.py プロジェクト: TillArndt/CmsToolsAC3b
def mc_stack(wrps, merge_mc_key_func=None):
    """
    Delivers only MC stacks, feed only with MC.

    :param wrps:                Iterables of HistoWrapper (grouped)
    :param merge_mc_key_func:   key function for python sorted(...), default
                                tries to sort after stack position
    :yields:                    StackWrapper
    """
    if not merge_mc_key_func:
        merge_mc_key_func = lambda w: settings.get_stack_position(w.sample)
    for grp in wrps:

        # merge mc samples (merge also normalizes to lumi = 1.)
        mc_sorted = sorted(grp, key=merge_mc_key_func)
        mc_groupd = group(mc_sorted, merge_mc_key_func)
        mc_merged = (op.merge(g) for g in mc_groupd)
        mc_colord = apply_histo_fillcolor(mc_merged)

        # stack mc
        stack = op.stack(mc_colord)
        yield stack
コード例 #4
0
ファイル: generators.py プロジェクト: TillArndt/CmsToolsAC3b
def mc_stack(wrps, merge_mc_key_func=None):
    """
    Delivers only MC stacks, feed only with MC.

    :param wrps:                Iterables of HistoWrapper (grouped)
    :param merge_mc_key_func:   key function for python sorted(...), default
                                tries to sort after stack position
    :yields:                    StackWrapper
    """
    if not merge_mc_key_func:
        merge_mc_key_func = lambda w: settings.get_stack_position(w.sample)
    for grp in wrps:

        # merge mc samples (merge also normalizes to lumi = 1.)
        mc_sorted = sorted(grp, key=merge_mc_key_func)
        mc_groupd = group(mc_sorted, merge_mc_key_func)
        mc_merged = (op.merge(g) for g in mc_groupd)
        mc_colord = apply_histo_fillcolor(mc_merged)

        # stack mc
        stack = op.stack(mc_colord)
        yield stack
コード例 #5
0
ファイル: generators.py プロジェクト: xiaohu-cern/Varial
def mc_stack_n_data_sum(wrps, merge_mc_key_func=None, use_all_data_lumi=True):
    """
    Stacks MC histos and merges data, input needs to be sorted and grouped.

    Yields tuples of an MC stack, signal histograms, and a data histogram, if
    all kinds of data are present. Raises an exception if no histograms are
    given at all.

    :param wrps:                Iterables of HistoWrapper (grouped)
    :param merge_mc_key_func:   key function for python sorted(...), default
                                tries to sort after stack position
    :yields:                    WrapperWrapper of wrappers for plotting
    """
    if not merge_mc_key_func:
        merge_mc_key_func = analysis.get_stack_position

    for grp in wrps:

        # split stream
        dat, bkg, sig = split_data_bkg_sig(grp)

        # data
        dat_sum = None
        try:
            dat_sum = op.sum(dat)
        except op.TooFewWrpsError:
            monitor.message('generators.mc_stack_n_data_sum',
                            'DEBUG No data histograms present!')
        if dat_sum and not use_all_data_lumi:
            data_lumi = op.lumi(dat_sum)
        else:
            data_lumi = analysis.data_lumi_sum_wrp()

        # background (op.merge normalizes to lumi = 1.)
        bkg = sorted(bkg, key=merge_mc_key_func)
        is_2d = bkg and 'TH2' in bkg[0].type
        bkg = group(bkg, merge_mc_key_func)
        bkg = (op.merge(g) for g in bkg)
        bkg = apply_fillcolor(bkg)
        if settings.stack_line_color:
            bkg = apply_linecolor(bkg, settings.stack_line_color)
        if data_lumi.float != 1.:
            bkg = gen_prod(itertools.izip(bkg, itertools.repeat(data_lumi)))
        try:
            if is_2d:
                bkg_stk = gen_squash_sys_acc(bkg, op.sum)
            else:
                bkg_stk = gen_squash_sys_acc(bkg, op.stack)
        except op.TooFewWrpsError:
            bkg_stk = None
            monitor.message('generators.mc_stack_n_data_sum',
                            'DEBUG No background histograms present!')

        # signal
        sig = sorted(sig, key=merge_mc_key_func)
        sig = group(sig, merge_mc_key_func)
        sig = list(op.merge(g) for g in sig)
        if any(s.sys_info for s in sig):
            sig = sorted(sig, key=lambda s: s.sample)
            sig = group(sig, lambda s: s.sample)
            sig = (gen_squash_sys(s) for s in sig)
        sig = apply_linecolor(sig)
        sig = apply_linewidth(sig)
        sig = list(sig)
        if not sig:
            monitor.message('generators.mc_stack_n_data_sum',
                            'DEBUG No signal histograms present!')

        # return in order for plotting: bkg, signals, data
        res = [bkg_stk] + sig + [dat_sum]
        res = list(r for r in res if r)
        if res:
            yield wrappers.WrapperWrapper(res, name=grp.name)
        else:
            raise op.TooFewWrpsError('No histograms present!')