97def MUON1KernelCfg(flags, name='MUON1Kernel', **kwargs):
98 """Configure the derivation framework driving algorithm (kernel) for MUON1"""
99 acc = ComponentAccumulator()
100 stream_name= 'StreamDAOD_MUON1'
101
102 kwargs.setdefault("MuonContainer", "Muons")
103 kwargs.setdefault("IdTrkContainer", "InDetTrackParticles")
104 kwargs.setdefault("MsTrkContainer", "ExtrapolatedMuonTrackParticles")
105 kwargs.setdefault("scheduleThinning", True)
106
107
108
109
110
111 from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
112 acc.merge(PhysCommonAugmentationsCfg(flags, TriggerListsHelper = kwargs['TriggerListsHelper']))
113
114
115 diMuonSelAcc = Muon1SelectionCfg(flags,
116 MuonContainer= kwargs["MuonContainer"],
117 IdTrackContainer=kwargs["IdTrkContainer"])
118
119
120
121
122 muonThinFlags = ["pass{flag}".format(flag = algo.BranchPrefix) for algo in diMuonSelAcc.getEventAlgos()]
123 skimmingORs = [f"DIMU_{flag} > 0" for flag in muonThinFlags]
124 trkThinFlags = [muonThinFlags[i] for i, algo in enumerate(diMuonSelAcc.getEventAlgos()) if algo.UseTrackProbe ]
125 acc.merge(diMuonSelAcc)
126
127
128
129 if flags.Input.isMC:
130 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import MuonTruthClassifierFallbackCfg
131 MUON1MuonTruthClassifierFallback = acc.getPrimaryAndMerge(MuonTruthClassifierFallbackCfg(flags,
132 name = "MUON1MuonTruthClassifierFallback",
133 ContainerKey = kwargs["MuonContainer"]))
134 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel("MuonTruthClassifierFallBack",
135 AugmentationTools=[MUON1MuonTruthClassifierFallback]))
136 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import MuonTruthIsolationDecorAlgCfg
137 acc.merge(MuonTruthIsolationDecorAlgCfg(flags,
138 name = "MUON1MuonTruthIsolationAlg",
139 ContainerKey = kwargs["MuonContainer"]))
140
141
142
143 from DerivationFrameworkMuons.JPsiVertexFitSetupCfg import AddMCPJPsiVertexFitCfg
144 acc.merge(AddMCPJPsiVertexFitCfg(flags,
145 prefix='Muon1',
146 IdTrkContainer = kwargs["IdTrkContainer"],
147 MuonContainer = kwargs["MuonContainer"]))
148
149 from DerivationFrameworkMuons.TrackIsolationDecoratorConfig import TrackIsolationCfg
150 acc.merge(TrackIsolationCfg(flags,
151 TrackCollection=kwargs["IdTrkContainer"]))
152 acc.merge(TrackIsolationCfg(flags,
153 TrackCollection=kwargs["MsTrkContainer"]))
154
155
156 from DerivationFrameworkMuons.MuonsToolsConfig import MuonCaloDepositAlgCfg
157 acc.merge(MuonCaloDepositAlgCfg(flags,
158 name = "MuonCaloDepositAlg",
159 ContainerKey= kwargs["MuonContainer"]))
160 acc.merge(MuonCaloDepositAlgCfg(flags,
161 name = "IdTrkCaloDepositDecorator",
162 ContainerKey= kwargs["IdTrkContainer"]))
163
164
165 from DerivationFrameworkMuons.MuonsToolsConfig import MuonTPExtrapolationAlgCfg
166 acc.merge(MuonTPExtrapolationAlgCfg(flags,
167 name = "MuonTPExtrapolationAlgMUON1",
168 ContainerKey= kwargs["MuonContainer"],
169 TrackSelections = ["passMuon1JPsi"]))
170
171 acc.merge(MuonTPExtrapolationAlgCfg(flags,
172 name = "MuonTPTrigExtrapolationMUON1",
173 ContainerKey= kwargs["IdTrkContainer"],
174 TrackSelections = ["passMuon1JPsi"]))
175
176
177
178
179
180 MUON1SkimmingTools = []
181 skimming_expression = '||'.join(skimmingORs)
182 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import xAODStringSkimmingToolCfg
183 MUON1SkimmingTool1 = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(flags,
184 name = "MUON1SkimmingTool1",
185 expression = skimming_expression))
186 MUON1SkimmingTools.append(MUON1SkimmingTool1)
187
188
189
190
191
192
193 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import CaloClusterThinningCfg
194 from DerivationFrameworkMuons.MuonsToolsConfig import AnalysisMuonThinningAlgCfg
195 MUON1ThinningTools = []
196 if kwargs["scheduleThinning"]:
197 fwdTracks = "InDetForwardTrackParticles"
198 if fwdTracks not in flags.Input.Collections:
199 fwdTracks = ""
200 acc.merge(AnalysisMuonThinningAlgCfg(flags,
201 name = "AnalysisMuonThinningAlgMUON1",
202 MuonPassFlags = ["{cont}.{passDecor}".format(cont = kwargs["MuonContainer"],
203 passDecor = passDecor) for passDecor in muonThinFlags],
204 TrkPassFlags =["{cont}.{passDecor}".format(cont = kwargs["IdTrkContainer"],
205 passDecor = passDecor) for passDecor in trkThinFlags],
206 IdTrkFwdThinning=fwdTracks,
207 StreamName = stream_name))
208
209
210
211 MUON1ThinningTool1 = acc.getPrimaryAndMerge(CaloClusterThinningCfg(flags,
212 name = "MUON1ThinningTool4",
213 StreamName = stream_name,
214 SGKey = "Muons",
215 SelectionString = "Muons.pt>4*GeV",
216 TopoClCollectionSGKey = "CaloCalTopoClusters",
217 ConeSize = 0.5))
218 MUON1ThinningTools.append(MUON1ThinningTool1)
219
220
221 muon1CellThinAlg = CompFactory.CaloThinCellsByClusterAlg(
222 'MUON1_CaloThinCellsByClusterAlg_MuonClusterCollection',
223 StreamName = stream_name,
224 Clusters = 'MuonClusterCollection',
225 Cells = 'AllCalo')
226 acc.addEventAlgo(muon1CellThinAlg)
227
228
229
230 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import Thin_vtxTrkCfg
231 MUON1Thin_vtxTrk = acc.getPrimaryAndMerge(Thin_vtxTrkCfg(flags,
232 name = "MUON1Thin_vtxTrk",
233 StreamName = stream_name,
234 TrackParticleContainerName = "InDetTrackParticles",
235 VertexContainerNames = ["Muon1JpsiCandidates"],
236 PassFlags = ["passed_Jpsi"] ))
237 MUON1ThinningTools.append(MUON1Thin_vtxTrk)
238
239
240 if flags.Input.isMC:
241 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import MenuTruthThinningCfg
242 MUON1TruthThinningTool = acc.getPrimaryAndMerge(MenuTruthThinningCfg(flags,
243 name = "MUON1TruthThinningTool",
244 StreamName = stream_name,
245 WritePartons = False,
246 WriteHadrons = False,
247 WriteCHadrons = False,
248 WriteBHadrons = True,
249 WriteGeant = False,
250 WriteTauHad = False,
251 PartonPtThresh = -1.0,
252 WriteBSM = True,
253 WriteBosons = True,
254 WriteBosonProducts = False,
255 WriteBSMProducts = True,
256 WriteTopAndDecays = False,
257 WriteEverything = False,
258 WriteAllLeptons = True,
259 WriteLeptonsNotFromHadrons = False,
260 WriteNotPhysical = False,
261 WriteFirstN = -1,
262 PreserveAncestors = False,
263 PreserveParentsSiblingsChildren = True,
264 PreserveGeneratorDescendants = False))
265
266
267 MUON1ThinningTools.append(MUON1TruthThinningTool)
268
269
270
271
272
273
274 from IsolationSelection.IsolationSelectionConfig import IsoCloseByAlgsCfg
275 acc.merge(IsoCloseByAlgsCfg(flags, isPhysLite = True))
276
277
278 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(name,
279 SkimmingTools = MUON1SkimmingTools,
280 ThinningTools = MUON1ThinningTools))
281 return acc
282
283