15import modularAnalysis
as ma
16from ROOT
import TFile, Belle2
20 """The unit test for ParticleExtractorFromROE module """
23 """ Test the extractParticlesFromROE function in roe_path """
25 testFile = tempfile.NamedTemporaryFile()
27 main = basf2.create_path()
30 ma.inputMdst(inputfile, path=main)
32 ma.fillParticleList(
'pi+:sig',
'pionID > 0.5', path=main)
34 ma.fillParticleList(
'gamma:all',
'', path=main)
35 ma.reconstructDecay(
'pi0:sig -> gamma:all gamma:all',
'0.125 < InvM < 0.145', path=main)
37 ma.reconstructDecay(
'B0:sig -> pi-:sig pi+:sig pi0:sig',
'', path=main)
39 ma.matchMCTruth(
'B0:sig', path=main)
40 ma.applyCuts(
'B0:sig',
'isSignal==1', path=main)
42 ma.buildRestOfEvent(
'B0:sig', fillWithMostLikely=
True, path=main)
44 roe_path = basf2.create_path()
45 deadEndPath = basf2.create_path()
46 ma.signalSideParticleFilter(
'B0:sig',
'', roe_path, deadEndPath)
48 plists = [f
'{ptype}:in_roe' for ptype
in [
'pi+',
'gamma',
'K_L0',
'K+',
'p+',
'e+',
'mu+']]
49 ma.extractParticlesFromROE(plists, maskName=
'all', path=roe_path)
51 charged_inROE = [f
'nParticlesInList({ptype}:in_roe)' for ptype
in [
'pi+',
'K+',
'p+',
'e+',
'mu+']]
52 neutral_inROE = [f
'nParticlesInList({ptype}:in_roe)' for ptype
in [
'gamma',
'K_L0']]
54 default = [
'nParticlesInList(pi+:all)',
'nParticlesInList(gamma:all)',
'nParticlesInList(K_L0:roe_default)']
55 mostLikely = [f
'nParticlesInList({ptype}:mostlikely_roe)' for ptype
in [
'K+',
'p+',
'e+',
'mu+']]
57 ma.variablesToNtuple(
'', charged_inROE + neutral_inROE + default + mostLikely,
58 filename=testFile.name,
61 main.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
65 ntuplefile = TFile(testFile.name)
66 ntuple = ntuplefile.Get(
'variables')
68 self.assertFalse(ntuple.GetEntries() == 0,
"Ntuple is empty.")
70 nEntries = ntuple.GetEntries()
75 nPass_chargedCheck = ntuple.GetEntries(cut)
76 self.assertFalse(nPass_chargedCheck < nEntries,
"Charged particles are not correctly extracted")
81 nPass_electronCheck = ntuple.GetEntries(cut)
82 self.assertFalse(nPass_electronCheck < nEntries,
"MostLikely option seems broken")
85 """ Test the extractParticlesFromROE function in main path """
87 testFile = tempfile.NamedTemporaryFile()
89 main = basf2.create_path()
92 ma.inputMdst(inputfile, path=main)
94 ma.fillParticleList(
'pi+:sig',
'pionID > 0.5', path=main)
96 ma.fillParticleList(
'gamma:all',
'', path=main)
97 ma.reconstructDecay(
'pi0:sig -> gamma:all gamma:all',
'0.125 < InvM < 0.145', path=main)
99 ma.reconstructDecay(
'B0:sig -> pi-:sig pi+:sig pi0:sig',
'', path=main)
101 ma.matchMCTruth(
'B0:sig', path=main)
102 ma.applyCuts(
'B0:sig',
'isSignal==1', path=main)
104 ma.buildRestOfEvent(
'B0:sig', fillWithMostLikely=
True, path=main)
106 plists = [f
'{ptype}:in_roe' for ptype
in [
'pi+',
'gamma',
'K_L0',
'K+',
'p+',
'e+',
'mu+']]
107 ma.extractParticlesFromROE(plists, maskName=
'all', path=main, signalSideParticleList=
'B0:sig')
109 charged_inROE = [f
'nParticlesInList({ptype}:in_roe)' for ptype
in [
'pi+',
'K+',
'p+',
'e+',
'mu+']]
110 neutral_inROE = [f
'nParticlesInList({ptype}:in_roe)' for ptype
in [
'gamma',
'K_L0']]
112 default = [
'nParticlesInList(pi+:all)',
'nParticlesInList(gamma:all)',
'nParticlesInList(K_L0:roe_default)']
113 mostLikely = [f
'nParticlesInList({ptype}:mostlikely_roe)' for ptype
in [
'K+',
'p+',
'e+',
'mu+']]
115 ma.variablesToNtuple(
'B0:sig', charged_inROE + neutral_inROE + default + mostLikely,
116 filename=testFile.name,
121 ntuplefile = TFile(testFile.name)
122 ntuple = ntuplefile.Get(
'variables')
124 self.assertFalse(ntuple.GetEntries() == 0,
"Ntuple is empty.")
126 nEntries = ntuple.GetEntries()
131 nPass_chargedCheck = ntuple.GetEntries(cut)
132 self.assertFalse(nPass_chargedCheck < nEntries,
"Charged particles are not correctly extracted")
137 nPass_electronCheck = ntuple.GetEntries(cut)
138 self.assertFalse(nPass_electronCheck < nEntries,
"MostLikely option seems broken")
141if __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()