19def BPHY28Kernel(flags):
20
21
22 augList = []
23 skimList = []
24 thinList = []
25 thinTrkVtxList = []
26
27
28 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import (
29 BPHY_V0ToolCfg, BPHY_InDetDetailedTrackSelectorToolCfg,
30 BPHY_VertexPointEstimatorCfg, BPHY_TrkVKalVrtFitterCfg,
31 AugOriginalCountsCfg)
32 from JpsiUpsilonTools.JpsiUpsilonToolsConfig import PrimaryVertexRefittingToolCfg
33 acc = ComponentAccumulator()
34 isSimulation = flags.Input.isMC
35 V0Tools = acc.popToolsAndMerge(BPHY_V0ToolCfg(flags, BPHYDerivationName))
36 vkalvrt = acc.popToolsAndMerge(BPHY_TrkVKalVrtFitterCfg(flags, BPHYDerivationName))
37 acc.addPublicTool(vkalvrt)
38 acc.addPublicTool(V0Tools)
39 trackselect = acc.popToolsAndMerge(BPHY_InDetDetailedTrackSelectorToolCfg(flags, BPHYDerivationName))
40 acc.addPublicTool(trackselect)
41 vpest = acc.popToolsAndMerge(BPHY_VertexPointEstimatorCfg(flags, BPHYDerivationName))
42 acc.addPublicTool(vpest)
43 PVrefit = acc.popToolsAndMerge(PrimaryVertexRefittingToolCfg(flags))
44 acc.addPublicTool(PVrefit)
45
46
47 doLRT = flags.Tracking.doLargeD0
48 if not doLRT :
print(
"BPHY28: LRT tracks disabled")
49 mainMuonInput = "StdWithLRTMuons" if doLRT else "Muons"
50 mainIDInput = "InDetWithLRTTrackParticles" if doLRT else "InDetTrackParticles"
51 if doLRT:
52 from DerivationFrameworkLLP.LLPToolsConfig import LRTMuonMergerAlg
53 from AthenaConfiguration.Enums import LHCPeriod
54 acc.merge(LRTMuonMergerAlg( flags,
55 PromptMuonLocation = "Muons",
56 LRTMuonLocation = "MuonsLRT",
57 OutputMuonLocation = mainMuonInput,
58 CreateViewCollection = True,
59 UseRun3WP = flags.GeoModel.Run == LHCPeriod.Run3))
60 from DerivationFrameworkInDet.InDetToolsConfig import InDetLRTMergeCfg
61 acc.merge(InDetLRTMergeCfg(flags))
62 toRelink = ["InDetTrackParticles", "InDetLargeD0TrackParticles"] if doLRT else []
63 MuonReLink = [ "Muons", "MuonsLRT" ] if doLRT else []
64
65 BPHY28_AugOriginalCounts = acc.popToolsAndMerge(
66 AugOriginalCountsCfg(flags, name = "BPHY28_AugOriginalCounts"))
67 augList += [ BPHY28_AugOriginalCounts ]
68
69 BPHY28MuMuFinder = CompFactory.Analysis.JpsiFinder(
70 name = "BPHY28MuMuFinder",
71 muAndMu = True,
72 muAndTrack = False,
73 TrackAndTrack = False,
74 assumeDiMuons = True,
75 invMassUpper = 100000.0,
76 invMassLower = 0.0,
77 Chi2Cut = 100.,
78 oppChargesOnly = True,
79 combOnly = True,
80 atLeastOneComb = False,
81 useCombinedMeasurement = False,
82 muonCollectionKey = mainMuonInput,
83 TrackParticleCollection = mainIDInput,
84 TrkVertexFitterTool = vkalvrt,
85 TrackSelectorTool = trackselect,
86 VertexPointEstimator = vpest,
87 useMCPCuts = False )
88
89 BPHY28MuMuSelectAndWrite = CompFactory.DerivationFramework.Reco_Vertex(name = "BPHY28MuMuSelectAndWrite",
90 VertexSearchTool = BPHY28MuMuFinder,
91 OutputVtxContainerName = MuMuContainerName,
92 PVContainerName = "PrimaryVertices",
93 V0Tools = V0Tools,
94 PVRefitter = PVrefit,
95 RefPVContainerName = "SHOULDNOTBEUSED",
96 RelinkTracks = toRelink,
97 RelinkMuons = MuonReLink,
98 DoVertexType = 7)
99 augList += [ BPHY28MuMuSelectAndWrite ]
100 thinTrkVtxList += [ MuMuContainerName ]
101
102
103 BPHY28_Select_Jpsi2mumu = CompFactory.DerivationFramework.Select_onia2mumu(
104 name = "BPHY28_Select_Jpsi2mumu",
105 HypothesisName = "Jpsi",
106 InputVtxContainerName = MuMuContainerName,
107 V0Tools = V0Tools,
108 VtxMassHypo = 3096.916,
109 MassMin = 2000.0,
110 MassMax = 3600.0,
111 Chi2Max = 100, Do3d = False,
112 DoVertexType = 7)
113 augList += [ BPHY28_Select_Jpsi2mumu ]
114
115
116 BPHY28BsKKMuMu = CompFactory.Analysis.JpsiPlus2Tracks(name = "BPHY28BsKKMuMu",
117 kaonkaonHypothesis = True,
118 pionpionHypothesis = False,
119 kaonpionHypothesis = False,
120 trkThresholdPt = 500.0,
121 trkMaxEta = 3.0,
122 BMassUpper = 5900.0,
123 BMassLower = 4900.0,
124 DiTrackMassUpper = 1220,
125 DiTrackMassLower = 820,
126 Chi2Cut = 100.0,
127 TrkQuadrupletMassUpper = 6000.0,
128 TrkQuadrupletMassLower = 4800.0,
129 JpsiContainerKey = MuMuContainerName,
130 TrackParticleCollection = mainIDInput,
131 MuonsUsedInJpsi = mainMuonInput,
132 TrkVertexFitterTool = vkalvrt,
133 TrackSelectorTool = trackselect,
134 UseMassConstraint = False)
135
136
137 BPHY28BsKKSelectAndWrite = CompFactory.DerivationFramework.Reco_Vertex(name = "BPHY28BsKKSelectAndWrite",
138 VertexSearchTool = BPHY28BsKKMuMu,
139 OutputVtxContainerName = BsPhiMuMuContainerName,
140 PVContainerName = "PrimaryVertices",
141 V0Tools = V0Tools,
142 PVRefitter = PVrefit,
143 RefPVContainerName = "BPHY28RefittedPrimaryVertices",
144 RefitPV = True, Do3d = False,
145 RelinkTracks = toRelink,
146 MaxPVrefit = 10000, DoVertexType = 7)
147 augList += [ BPHY28BsKKSelectAndWrite ]
148 thinTrkVtxList += [ BsPhiMuMuContainerName ]
149
150
151 BPHY28_Select_Bs2KKMuMu = CompFactory.DerivationFramework.Select_onia2mumu(
152 name = "BPHY28_Select_Bs2KKMuMu",
153 HypothesisName = "Bs",
154 InputVtxContainerName = BsPhiMuMuContainerName,
155 V0Tools = V0Tools,
156 TrkMasses = [105.658, 105.658, 493.677, 493.677],
157 VtxMassHypo = 5366.3,
158 MassMin = 4900.0,
159 MassMax = 5900.0, Do3d = False,
160 Chi2Max = 100)
161 augList += [ BPHY28_Select_Bs2KKMuMu ]
162
163
164 if not isSimulation:
165 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import (
166 xAODStringSkimmingToolCfg)
167 BPHY28_SelectBsKKMuMuEvent = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
168 flags, name = "BPHY28_SelectBsKKMuMuEvent",
169 expression = "count(BPHY28BsKKMuMuCandidates.passed_Bs) > 0"))
170 skimList += [ BPHY28_SelectBsKKMuMuEvent ]
171
172
173
175 BPHY28_Thin_VtxTracks = CompFactory.DerivationFramework.Thin_vtxTrk( name = "BPHY28_Thin_VtxTracks",
176 StreamName = streamName,
177 TrackParticleContainerName = "InDetTrackParticles",
178 VertexContainerNames = thinTrkVtxList,
179 IgnoreFlags = True )
180 thinList += [ BPHY28_Thin_VtxTracks ]
181
182
183 if doLRT:
184 BPHY28_Thin_VtxTracks_LRT = CompFactory.DerivationFramework.Thin_vtxTrk( name = "BPHY28_Thin_VtxTracks_LRT",
185 StreamName = streamName,
186 TrackParticleContainerName = "InDetLargeD0TrackParticles",
187 VertexContainerNames = thinTrkVtxList,
188 IgnoreFlags = True )
189 thinList += [ BPHY28_Thin_VtxTracks_LRT ]
190
191
192 for t in augList + skimList + thinList : acc.addPublicTool(t)
193 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel("BPHY28Kernel",
194 AugmentationTools = augList,
195
196 SkimmingTools = skimList,
197 ThinningTools = thinList))
198
199 return acc
200
201
void print(char *figname, TCanvas *c1)