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