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