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))
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))