21 import modularAnalysis
as ma
24 path = b2.create_path()
27 ma.inputMdst(environmentType=
'default',
28 filename=b2.find_file(
'mdst14.root',
'validation',
False),
32 empty_path = b2.create_path()
33 skimfilter = b2.register_module(
'VariableToReturnValue')
34 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
35 skimfilter.if_value(
'>12', empty_path, b2.AfterConditionPath.END)
36 path.add_module(skimfilter)
39 ma.fillParticleList(
'mu+',
'muonID > 0.8 and dr < 2 and abs(dz) < 4', writeOut=
True, path=path)
40 ma.fillParticleList(
'e+',
'electronID > 0.8 and dr < 2 and abs(dz) < 4', writeOut=
True, path=path)
43 '[[clusterReg == 1 and E > 0.10] or [clusterReg == 2 and E > 0.09] or [clusterReg == 3 and E > 0.16]]',
47 'B+:sig_e -> gamma e+',
48 '1.000 < M < 6.000 and cos(useRestFrame(daughterAngle(0, 1))) < 0.6',
53 'B+:sig_mu -> gamma mu+',
54 '1.000 < M < 6.000 and cos(useRestFrame(daughterAngle(0, 1))) < 0.6',
58 ma.copyLists(
'B+:sig', [
'B+:sig_e',
'B+:sig_mu'], writeOut=
True, path=path)
59 ma.looseMCTruth(
'B+:sig', path=path)
60 ma.rankByHighest(
'B+:sig',
'daughter(0,E)', outputVariable=
'PhotonCandidateRank', path=path)
61 ma.buildRestOfEvent(
'B+:sig', path=path)
64 'dr < 2 and abs(dz) < 4',
65 'clusterE9E25 > 0.9 and clusterTiming < 50 and E > 0.09 and trackMatchType==0')
66 ma.appendROEMasks(
'B+:sig', [clean_roe_mask], path=path)
67 ma.applyCuts(
'B+:sig',
'roeDeltae(CleanROE) < 2.0 and roeMbc(CleanROE) > 4.8', path=path)
69 skimfilter = b2.register_module(
'SkimFilter')
70 skimfilter.param(
'particleLists', [
'B+:sig'])
71 empty_path = b2.create_path()
72 skimfilter.if_value(
'=0', empty_path, b2.AfterConditionPath.END)
73 path.add_module(skimfilter)
76 path.add_module(
'MCDecayFinder', decayString=
'B+ -> e+ nu_e gamma', listName=
'B+:FEIMC_e', writeOut=
True)
77 path.add_module(
'MCDecayFinder', decayString=
'B+ -> mu+ nu_mu gamma', listName=
'B+:FEIMC_mu', writeOut=
True)
78 ma.copyLists(
'B+:FEIMC', [
'B+:FEIMC_e',
'B+:FEIMC_mu'], writeOut=
True, path=path)
82 isSignal =
'isSignalAcceptMissingNeutrino'
83 signalMC =
'eventCached(countInList(B+:FEIMC))'
84 cut =
'[[{mc} > 0 and {sig} == 1] or [{mc} == 0 and {sig} != 1]]'.format(mc=signalMC, sig=isSignal)
85 ma.applyCuts(
'B+:sig', cut, path=path)
88 fei_tag =
'my_specFEI'
89 belle_particles = fei.get_default_channels(KLong=
False,
93 B_extra_cut=
'nRemainingTracksInEvent <= 3',
97 configuration = fei.config.FeiConfiguration(prefix=fei_tag, training=
True, monitor=
False, cache=-1)
101 feistate = fei.get_path(belle_particles, configuration)
104 if feistate.stage == 0:
107 rO = b2.register_module(
'RootOutput')
108 rO.set_name(
'ROE_RootOutput')
109 rO.param(
'additionalBranchNames', [
'RestOfEvent'])
110 feistate.path.add_module(rO)
111 roe_path = b2.create_path()
112 cond_module = b2.register_module(
'SignalSideParticleFilter')
113 cond_module.param(
'particleLists', [
'B+:sig'])
114 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
115 roe_path.add_module(cond_module)
116 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
119 path = b2.create_path()
120 ma.inputMdstList(
'default', [], path)
121 path.add_path(feistate.path)
122 r1 = b2.register_module(
'RootOutput')
123 r1.set_name(
'ROE_RootOutput')
124 r1.param(
'additionalBranchNames', [
'RestOfEvent'])
129 b2.process(path, max_event=100)