7 import modularAnalysis
as ma
8 from vertex
import treeFit
10 from ROOT
import Belle2
11 from ROOT
import TFile
12 from ROOT
import TNtuple
16 """The unit test case for TreeFitter"""
19 """Run the test fit"""
21 testFile = tempfile.NamedTemporaryFile()
25 basf2.conditions.disable_globaltag_replay()
27 main = basf2.create_path()
31 ma.fillParticleList(
'pi+:a',
'pionID > 0.5', path=main)
33 ma.fillParticleList(
'gamma:a',
'', path=main)
34 ma.reconstructDecay(
'pi0:a -> gamma:a gamma:a',
'0.125 < InvM < 0.145', 0, path=main)
36 ma.reconstructDecay(
'B0:rec -> pi-:a pi+:a pi0:a',
'', 0, path=main)
37 ma.matchMCTruth(
'B0:rec', path=main)
39 treeFit(
'B0:rec', conf_level=-1, ipConstraint=
False, updateAllDaughters=
True, path=main)
41 ntupler = basf2.register_module(
'VariablesToNtuple')
42 ntupler.param(
'fileName', testFile.name)
43 ntupler.param(
'variables', [
'chiProb',
'M',
'isSignal'])
44 ntupler.param(
'particleList',
'B0:rec')
45 main.add_module(ntupler)
49 ntuplefile = TFile(testFile.name)
50 ntuple = ntuplefile.Get(
'ntuple')
52 self.assertFalse(ntuple.GetEntries() == 0,
"Ntuple is empty.")
54 allBkg = ntuple.GetEntries(
"isSignal == 0")
55 allSig = ntuple.GetEntries(
"isSignal > 0")
57 truePositives = ntuple.GetEntries(
"(chiProb > 0) && (isSignal > 0)")
58 falsePositives = ntuple.GetEntries(
"(chiProb > 0) && (isSignal == 0)")
60 print(
"True fit survivors: {0} out of {1} true candidates".format(truePositives, allSig))
61 print(
"False fit survivors: {0} out of {1} false candidates".format(falsePositives, allBkg))
63 self.assertTrue(truePositives > 32, f
"Signal rejection too high. True positives: {truePositives}")
65 self.assertTrue(falsePositives < 2129, f
"Background rejection got worse. False positives: {falsePositives}")
67 print(
"Test passed, cleaning up.")
70 if __name__ ==
'__main__':