16 import modularAnalysis
as ma
17 from ROOT
import TFile, Belle2
21 """The unit test for ParticleExtractorFromROE module """
24 """ Test the extractParticlesFromROE function in roe_path """
26 testFile = tempfile.NamedTemporaryFile()
28 main = basf2.create_path()
31 ma.inputMdst(inputfile, path=main)
33 ma.fillParticleList(
'pi+:sig',
'pionID > 0.5', path=main)
35 ma.fillParticleList(
'gamma:all',
'', path=main)
36 ma.reconstructDecay(
'pi0:sig -> gamma:all gamma:all',
'0.125 < InvM < 0.145', path=main)
38 ma.reconstructDecay(
'B0:sig -> pi-:sig pi+:sig pi0:sig',
'', path=main)
40 ma.matchMCTruth(
'B0:sig', path=main)
41 ma.applyCuts(
'B0:sig',
'isSignal==1', path=main)
43 ma.buildRestOfEvent(
'B0:sig', fillWithMostLikely=
True, path=main)
45 roe_path = basf2.create_path()
46 deadEndPath = basf2.create_path()
47 ma.signalSideParticleFilter(
'B0:sig',
'', roe_path, deadEndPath)
49 plists = [
'%s:in_roe' % ptype
for ptype
in [
'pi+',
'gamma',
'K_L0',
'K+',
'p+',
'e+',
'mu+']]
50 ma.extractParticlesFromROE(plists, maskName=
'all', path=roe_path)
52 charged_inROE = [
'nParticlesInList(%s:in_roe)' % ptype
for ptype
in [
'pi+',
'K+',
'p+',
'e+',
'mu+']]
53 neutral_inROE = [
'nParticlesInList(%s:in_roe)' % ptype
for ptype
in [
'gamma',
'K_L0']]
55 default = [
'nParticlesInList(pi+:all)',
'nParticlesInList(gamma:all)',
'nParticlesInList(K_L0:roe_default)']
56 mostLikely = [
'nParticlesInList(%s:mostlikely_roe)' % ptype
for ptype
in [
'K+',
'p+',
'e+',
'mu+']]
58 ma.variablesToNtuple(
'', charged_inROE + neutral_inROE + default + mostLikely,
59 filename=testFile.name,
62 main.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
66 ntuplefile = TFile(testFile.name)
67 ntuple = ntuplefile.Get(
'variables')
69 self.assertFalse(ntuple.GetEntries() == 0,
"Ntuple is empty.")
71 nEntries = ntuple.GetEntries()
76 nPass_chargedCheck = ntuple.GetEntries(cut)
77 self.assertFalse(nPass_chargedCheck < nEntries,
"Charged particles are not correctly extracted")
82 nPass_electronCheck = ntuple.GetEntries(cut)
83 self.assertFalse(nPass_electronCheck < nEntries,
"MostLikely option seems broken")
86 """ Test the extractParticlesFromROE function in main path """
88 testFile = tempfile.NamedTemporaryFile()
90 main = basf2.create_path()
93 ma.inputMdst(inputfile, path=main)
95 ma.fillParticleList(
'pi+:sig',
'pionID > 0.5', path=main)
97 ma.fillParticleList(
'gamma:all',
'', path=main)
98 ma.reconstructDecay(
'pi0:sig -> gamma:all gamma:all',
'0.125 < InvM < 0.145', path=main)
100 ma.reconstructDecay(
'B0:sig -> pi-:sig pi+:sig pi0:sig',
'', path=main)
102 ma.matchMCTruth(
'B0:sig', path=main)
103 ma.applyCuts(
'B0:sig',
'isSignal==1', path=main)
105 ma.buildRestOfEvent(
'B0:sig', fillWithMostLikely=
True, path=main)
107 plists = [
'%s:in_roe' % ptype
for ptype
in [
'pi+',
'gamma',
'K_L0',
'K+',
'p+',
'e+',
'mu+']]
108 ma.extractParticlesFromROE(plists, maskName=
'all', path=main, signalSideParticleList=
'B0:sig')
110 charged_inROE = [
'nParticlesInList(%s:in_roe)' % ptype
for ptype
in [
'pi+',
'K+',
'p+',
'e+',
'mu+']]
111 neutral_inROE = [
'nParticlesInList(%s:in_roe)' % ptype
for ptype
in [
'gamma',
'K_L0']]
113 default = [
'nParticlesInList(pi+:all)',
'nParticlesInList(gamma:all)',
'nParticlesInList(K_L0:roe_default)']
114 mostLikely = [
'nParticlesInList(%s:mostlikely_roe)' % ptype
for ptype
in [
'K+',
'p+',
'e+',
'mu+']]
116 ma.variablesToNtuple(
'B0:sig', charged_inROE + neutral_inROE + default + mostLikely,
117 filename=testFile.name,
122 ntuplefile = TFile(testFile.name)
123 ntuple = ntuplefile.Get(
'variables')
125 self.assertFalse(ntuple.GetEntries() == 0,
"Ntuple is empty.")
127 nEntries = ntuple.GetEntries()
132 nPass_chargedCheck = ntuple.GetEntries(cut)
133 self.assertFalse(nPass_chargedCheck < nEntries,
"Charged particles are not correctly extracted")
138 nPass_electronCheck = ntuple.GetEntries(cut)
139 self.assertFalse(nPass_electronCheck < nEntries,
"MostLikely option seems broken")
142 if __name__ ==
'__main__':
static std::string makeROOTCompatible(std::string str)
Remove special characters that ROOT dislikes in branch names, e.g.
def require_file(filename, data_type="", py_case=None)
def clean_working_directory()