Esempio n. 1
0
def test_modify_initial_tree(NEXP=10):
    """Add pseudoexepriments into TTree/TChain
    """

    files = prepare_data(1, 100000)

    logger.info('Add %s pseudoexepriments into TTree/TChain' % NEXP)

    logger.info('#files:    %s' % len(files))
    data = Data('S', files)
    logger.info('Initial Tree/Chain:\n%s' % data.chain.table(prefix='# '))

    ## pseudo experiments
    for e in progress_bar(range(NEXP)):
        h2_new = h2.sample()
        func = Ostap.Functions.FuncTH2(h2_new, 'pt', 'eta')
        data.chain.add_new_branch('w%d' % e, func)

    data = Data('S', files)
    logger.info('Tree/Chain after:\n%s' % data.chain.table(prefix='# '))

    counter = SE()
    for e in range(NEXP):
        weight = 'w%d' % e
        accepted = data.chain.sumVar('1', weight * cut)
        rejected = data.chain.sumVar('1', weight * ~cut)
        efficiency = 1 / (1 + rejected / accepted)
        logger.info("Experiment %3d, accepted/rejected %s/%s , eff = %s " %
                    (e, accepted, rejected, efficiency))
        counter += efficiency
    logger.info('Statistics of pseudoexperiments %s' % counter)
    logger.info('Mean/rms: %s[%%]/%.4f]%%]' %
                (counter.mean() * 100, counter.rms() * 100))
Esempio n. 2
0
def test_add_to_dataset(NEXP=10):
    """Add pseudoexepriments into RooDataSet
    """

    logger.info('Add %s pseudoexepriments into RooDataSet' % NEXP)

    files = prepare_data(1, 100000)

    logger.info('#files:    %s' % len(files))
    data = Data('S', files)
    logger.info('Initial Tree/Chain:\n%s' % data.chain.table(prefix='# '))

    import ostap.fitting.pyselectors
    dataset, _ = data.chain.fill_dataset(['mass', 'pt', 'eta'])

    logger.info('Initial dataset:\n%s' % dataset.table(prefix='# '))

    ## pseudo experiments
    for e in progress_bar(range(NEXP)):
        h2_new = h2.sample()
        func = Ostap.Functions.FuncRooTH2(h2_new, 'pt', 'eta')
        dataset.add_new_var('w%d' % e, func)

    logger.info('Dataset after:\n%s' % dataset.table(prefix='# '))

    counter = SE()
    for e in range(NEXP):
        weight = 'w%d' % e
        accepted = dataset.sumVar('1', weight * cut)
        rejected = dataset.sumVar('1', weight * ~cut)
        efficiency = 1 / (1 + rejected / accepted)
        logger.info("Experiment %3d, accepted/rejected %s/%s , eff = %s " %
                    (e, accepted, rejected, efficiency))

        counter += efficiency
    logger.info('Statistics of pseudoexperiments %s' % counter)
    logger.info('Mean/rms: %s[%%]/%.4f[%%]' %
                (counter.mean() * 100, counter.rms() * 100))