70 ) :
71
72 largeRJets = True
73
74 if autoconfigFromFlags is not None:
75 if geometry is None:
76 geometry = autoconfigFromFlags.GeoModel.Run
77
78 configSeq = ConfigSequence ()
79
80 outputContainers = {'mu_' : 'OutMuons',
81 'el_' : 'OutElectrons',
82 'ph_' : 'OutPhotons',
83 'tau_': 'OutTauJets',
84 'jet_': 'OutJets',
85 'met_': 'AnaMET',
86 '' : 'EventInfo'}
87 outputContainersForMC = {'truth_mu_' : 'OutTruthMuons',
88 'truth_el_' : 'OutTruthElectrons',
89 'truth_ph_' : 'OutTruthPhotons',
90 'truth_tau_': 'OutTruthTaus',
91 'truth_jet_': 'OutTruthJets',
92 'truth_met_': 'TruthMET'}
93
94
95 from AnalysisAlgorithmsConfig.ConfigFactory import ConfigFactory
96 config = ConfigFactory()
97
98 configSeq += config.makeConfig('CommonServices')
99 configSeq.setOptionValue('.systematicsHistogram', 'systematicsList')
100 configSeq.setOptionValue('.enableExpertMode', True)
101
102 configSeq += config.makeConfig('PileupReweighting')
103
104
105
106 configSeq += config.makeConfig ('EventCleaning')
107 configSeq.setOptionValue ('.runEventCleaning', True)
108
109
110
111 if geometry is LHCPeriod.Run2:
112
113 configSeq += config.makeConfig( 'Trigger' )
114 configSeq.setOptionValue ('.triggerChainsPerYear', triggerChainsPerYear )
115 configSeq.setOptionValue ('.noFilter', True )
116 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose' )
117 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight' )
118 configSeq.setOptionValue ('.muons', 'AnaMuons.medium' )
119 configSeq.setOptionValue ('.taus', 'AnaTauJets.tight' )
120 configSeq.setOptionValue ('.electronID', 'Tight' )
121 configSeq.setOptionValue ('.electronIsol', 'Tight_VarRad')
122 configSeq.setOptionValue ('.photonIsol', 'TightCaloOnly')
123 configSeq.setOptionValue ('.muonID', 'Tight')
124 configSeq.setOptionValue ('.triggerMatchingChainsPerYear', triggerMatchingChainsPerYear)
125
126
127 configSeq += config.makeConfig( 'Jets',
128 containerName='AnaJets',
129 jetCollection='AntiKt4EMPFlowJets')
130 configSeq.setOptionValue ('.runJvtUpdate', False )
131 configSeq.setOptionValue ('.runNNJvtUpdate', True )
132 configSeq.setOptionValue ('.recalibratePhyslite', False)
133
134 configSeq += config.makeConfig( 'Jets.JVT' )
135 configSeq.setOptionValue ('.containerName', 'AnaJets')
136
137 configSeq += config.makeConfig( 'Jets.FTagTriggerMatching' )
138 configSeq.setOptionValue('.containerName', 'AnaJets')
139 configSeq.setOptionValue('.triggerChainsPerYear', bjetTriggerChainsPerYear)
140
141
142
143 if geometry is not LHCPeriod.Run4:
144
145 btagger = "GN2v01"
146 btagWP = "FixedCutBEff_65"
147 configSeq += config.makeConfig( 'Jets.FlavourTagging' )
148 configSeq.setOptionValue ('.containerName', 'AnaJets')
149 configSeq.setOptionValue ('.selectionName', 'ftag')
150 configSeq.setOptionValue ('.btagger', btagger)
151 configSeq.setOptionValue ('.btagWP', btagWP)
152 configSeq.setOptionValue ('.saveScores', 'All')
153
154 configSeq += config.makeConfig( 'Jets.FlavourTaggingEventSF' )
155 configSeq.setOptionValue ('.containerName', 'AnaJets.baselineJvt')
156 configSeq.setOptionValue ('.btagger', btagger)
157 configSeq.setOptionValue('.triggerChainsPerYear',
158 bjetTriggerChainsPerYear)
159
160 if largeRJets :
161 configSeq += config.makeConfig( 'Jets',
162 containerName='AnaLargeRJets',
163 jetCollection='AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets' )
164 outputContainers['larger_jet_'] = 'OutLargeRJets'
165 configSeq.setOptionValue ('.recalibratePhyslite', False)
166
167
168
169 likelihood = True
170 configSeq += config.makeConfig ('Electrons')
171 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
172 configSeq.setOptionValue ('.decorateTruth', True)
173 configSeq.setOptionValue ('.decorateCaloClusterEta', True)
174 configSeq.setOptionValue ('.writeTrackD0Z0', True)
175 configSeq.setOptionValue ('.forceFullSimConfigForIso', forceEGammaFullSimConfig)
176 configSeq.setOptionValue ('.recalibratePhyslite', False)
177 configSeq.setOptionValue ('.minPt', electronMinPt)
178 configSeq += config.makeConfig ('Electrons.WorkingPoint')
179 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
180 configSeq.setOptionValue ('.selectionName', 'loose')
181 configSeq.setOptionValue ('.forceFullSimConfig', forceEGammaFullSimConfig)
182 if likelihood:
183 configSeq.setOptionValue ('.identificationWP', 'LooseBLayerLH')
184 else:
185 configSeq.setOptionValue ('.identificationWP', 'LooseDNN')
186 configSeq.setOptionValue ('.isolationWP', 'Tight_VarRad')
187 configSeq.setOptionValue ('.chargeIDSelectionRun2', True)
188 configSeq.setOptionValue ('.addChargeMisIDSF', geometry is LHCPeriod.Run2)
189 configSeq += config.makeConfig('Electrons.TriggerSF')
190 configSeq.setOptionValue('.containerName', 'AnaElectrons')
191 configSeq.setOptionValue('.electronID', 'LooseBLayerLH')
192 configSeq.setOptionValue('.electronIsol', 'Tight_VarRad')
193 configSeq.setOptionValue('.triggerChainsPerYear', triggerChainsPerYear)
194
195 configSeq += config.makeConfig ('Electrons.IFFClassification')
196 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
197 configSeq += config.makeConfig ('Electrons.MCTCClassification')
198 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
199 configSeq.setOptionValue ('.prefix', 'truth_')
200
201 configSeq += config.makeConfig ('Electrons.PtEtaSelection')
202 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
203 configSeq.setOptionValue ('.minPt', electronMinPt)
204
205
206
207 configSeq += config.makeConfig ('Photons')
208 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
209 configSeq.setOptionValue ('.decorateTruth', True)
210 configSeq.setOptionValue ('.forceFullSimConfigForIso', forceEGammaFullSimConfig)
211 configSeq.setOptionValue ('.recomputeIsEM', False)
212 configSeq.setOptionValue ('.recalibratePhyslite', False)
213 configSeq += config.makeConfig ('Photons.WorkingPoint')
214 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
215 configSeq.setOptionValue ('.selectionName', 'tight')
216 configSeq.setOptionValue ('.forceFullSimConfigForID', forceEGammaFullSimConfig)
217 configSeq.setOptionValue ('.forceFullSimConfigForIso', forceEGammaFullSimConfig)
218 configSeq.setOptionValue ('.qualityWP', 'Tight')
219 configSeq.setOptionValue ('.isolationWP', 'FixedCutTight')
220 configSeq.setOptionValue ('.recomputeIsEM', False)
221
222 configSeq += config.makeConfig ('Photons.PtEtaSelection')
223 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
224 configSeq.setOptionValue ('.minPt', photonMinPt)
225
226
227
228 configSeq += config.makeConfig ('Muons')
229 configSeq.setOptionValue ('.containerName', 'AnaMuons')
230 configSeq.setOptionValue ('.decorateTruth', True)
231 configSeq.setOptionValue ('.writeTrackD0Z0', True)
232 configSeq.setOptionValue ('.recalibratePhyslite', False)
233
234 configSeq += config.makeConfig ('Muons.WorkingPoint')
235 configSeq.setOptionValue ('.containerName', 'AnaMuons')
236 configSeq.setOptionValue ('.selectionName', 'medium')
237 configSeq.setOptionValue ('.quality', 'Medium')
238 configSeq.setOptionValue ('.isolation', 'Loose_VarRad')
239
240 configSeq += config.makeConfig ('Muons.IFFClassification')
241 configSeq.setOptionValue ('.containerName', 'AnaMuons')
242 configSeq += config.makeConfig ('Muons.MCTCClassification')
243 configSeq.setOptionValue ('.containerName', 'AnaMuons')
244 configSeq.setOptionValue ('.prefix', 'truth_')
245
246
247
248
249
250
251
252
253 configSeq += config.makeConfig ('TauJets')
254 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
255 configSeq.setOptionValue ('.decorateTruth', True)
256 configSeq += config.makeConfig ('TauJets.WorkingPoint')
257 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
258 configSeq.setOptionValue ('.selectionName', 'tight')
259 configSeq.setOptionValue ('.quality', 'Tight')
260
261 configSeq += config.makeConfig('TauJets.TriggerSF')
262 configSeq.setOptionValue('.containerName', 'AnaTauJets')
263 configSeq.setOptionValue('.tauID', 'Tight')
264 configSeq.setOptionValue('.triggerChainsPerYear', tauTriggerChainsSF)
265
266 configSeq += config.makeConfig ('TauJets.MCTCClassification')
267 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
268 configSeq.setOptionValue ('.prefix', 'truth_')
269
270
271
272 configSeq += config.makeConfig('SystObjectLink')
273 configSeq.setOptionValue ('.containerName', 'AnaJets')
274 if largeRJets:
275 configSeq += config.makeConfig('SystObjectLink')
276 configSeq.setOptionValue ('.containerName', 'AnaLargeRJets')
277 configSeq += config.makeConfig('SystObjectLink')
278 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
279 configSeq += config.makeConfig('SystObjectLink')
280 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
281 configSeq += config.makeConfig('SystObjectLink')
282 configSeq.setOptionValue ('.containerName', 'AnaMuons')
283 configSeq += config.makeConfig('SystObjectLink')
284 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
285
286
287
288 configSeq += config.makeConfig ('PL_Electrons')
289 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
290 configSeq += config.makeConfig ('PL_Electrons.MCTCClassification')
291 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
292 configSeq.setOptionValue ('.prefix', '')
293 configSeq += config.makeConfig ('PL_Electrons.PtEtaSelection')
294 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
295 configSeq.setOptionValue ('.skipOnData', True)
296 configSeq.setOptionValue ('.useDressedProperties', True)
297 configSeq.setOptionValue ('.minPt', 20e3)
298
299 configSeq += config.makeConfig ('PL_Muons')
300 configSeq.setOptionValue ('.containerName', 'TruthMuons')
301 configSeq += config.makeConfig ('PL_Muons.MCTCClassification')
302 configSeq.setOptionValue ('.containerName', 'TruthMuons')
303 configSeq.setOptionValue ('.prefix', '')
304 configSeq += config.makeConfig ('PL_Muons.PtEtaSelection')
305 configSeq.setOptionValue ('.containerName', 'TruthMuons')
306 configSeq.setOptionValue ('.skipOnData', True)
307 configSeq.setOptionValue ('.useDressedProperties', True)
308 configSeq.setOptionValue ('.minPt', 20e3)
309
310 configSeq += config.makeConfig ('PL_Neutrinos')
311 configSeq.setOptionValue ('.skipOnData', True)
312
313 configSeq += config.makeConfig ('PL_Jets')
314 configSeq.setOptionValue ('.containerName', 'AntiKt4TruthDressedWZJets')
315 configSeq += config.makeConfig ('PL_Jets.PtEtaSelection')
316 configSeq.setOptionValue ('.containerName', 'AntiKt4TruthDressedWZJets')
317 configSeq.setOptionValue ('.skipOnData', True)
318 configSeq.setOptionValue ('.minPt', 20e3)
319
320 configSeq += config.makeConfig ('PL_Taus')
321 configSeq.setOptionValue ('.containerName', 'TruthTaus')
322 configSeq += config.makeConfig ('PL_Taus.MCTCClassification')
323 configSeq.setOptionValue ('.containerName', 'TruthTaus')
324 configSeq.setOptionValue ('.prefix', '')
325 configSeq += config.makeConfig ('PL_Taus.PtEtaSelection')
326 configSeq.setOptionValue ('.containerName', 'TruthTaus')
327 configSeq.setOptionValue ('.skipOnData', True)
328 configSeq.setOptionValue ('.minPt', 20e3)
329
330 configSeq += config.makeConfig ('PL_Photons')
331 configSeq.setOptionValue ('.containerName', 'TruthPhotons')
332 configSeq += config.makeConfig ('PL_Photons.PtEtaSelection')
333 configSeq.setOptionValue ('.containerName', 'TruthPhotons')
334 configSeq.setOptionValue ('.skipOnData', True)
335 configSeq.setOptionValue ('.minPt', 20e3)
336
337 configSeq += config.makeConfig ('PL_MissingET')
338 configSeq.setOptionValue ('.skipOnData', True)
339
340 configSeq += config.makeConfig ('PL_OverlapRemoval')
341 configSeq.setOptionValue ('.skipOnData', True)
342 configSeq.setOptionValue ('.electrons', 'TruthElectrons')
343 configSeq.setOptionValue ('.muons', 'TruthMuons')
344 configSeq.setOptionValue ('.photons', 'TruthPhotons')
345 configSeq.setOptionValue ('.jets', 'AntiKt4TruthDressedWZJets')
346 configSeq.setOptionValue ('.useRapidityForDeltaR', False)
347
348
349 if dataType is not DataType.Data :
350
351 configSeq += config.makeConfig( 'GeneratorLevelAnalysis')
352
353
354
355 configSeq += config.makeConfig ('MissingET')
356 configSeq.setOptionValue ('.containerName', 'AnaMET')
357 configSeq.setOptionValue ('.jets', 'AnaJets')
358 configSeq.setOptionValue ('.taus', 'AnaTauJets.tight')
359 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
360 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
361
362
363
364
365
366
367
368
369 configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
370
371
372
373 configSeq += config.makeConfig( 'OverlapRemoval' )
374 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
375 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
376
377
378 configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
379 configSeq.setOptionValue ('.jets', 'AnaJets.baselineJvt')
380 configSeq.setOptionValue ('.taus', 'AnaTauJets.tight')
381 configSeq.setOptionValue ('.inputLabel', 'preselectOR')
382 configSeq.setOptionValue ('.outputLabel', 'passesOR' )
383 configSeq.setOptionValue ('.nominalOnly', onlyNominalOR )
384
385
386
387 configSeq += config.makeConfig ('ObjectCutFlow')
388 configSeq.setOptionValue ('.containerName', 'AnaJets')
389 configSeq.setOptionValue ('.selectionName', 'jvt')
390 configSeq += config.makeConfig ('ObjectCutFlow')
391 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
392 configSeq.setOptionValue ('.selectionName', 'loose')
393 configSeq += config.makeConfig ('ObjectCutFlow')
394 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
395 configSeq.setOptionValue ('.selectionName', 'tight')
396 configSeq += config.makeConfig ('ObjectCutFlow')
397 configSeq.setOptionValue ('.containerName', 'AnaMuons')
398 configSeq.setOptionValue ('.selectionName', 'medium')
399 configSeq += config.makeConfig ('ObjectCutFlow')
400 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
401 configSeq.setOptionValue ('.selectionName', 'tight')
402
403
404 if geometry is not LHCPeriod.Run4:
405
406
407
408
409
410
411 from EventSelectionAlgorithms.EventSelectionConfig import makeMultipleEventSelectionConfigs
412 makeMultipleEventSelectionConfigs(configSeq, electrons = 'AnaElectrons.loose', muons = 'AnaMuons.medium', jets = 'AnaJets.baselineJvt',
413 met = 'AnaMET', btagDecoration = 'ftag_select_ftag',
414 selectionCutsDict = exampleSelectionCuts, noFilter = True,
415 cutFlowHistograms = True)
416
417 configSeq += config.makeConfig ('Bootstraps')
418 configSeq.setOptionValue ('.nReplicas', 2000 )
419 configSeq.setOptionValue ('.skipOnMC', False)
420
421
422 configSeq += config.makeConfig ('LeptonSF')
423 if geometry is not LHCPeriod.Run2:
424 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
425 configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
426 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
427 configSeq.setOptionValue ('.lepton_postfix', 'nominal')
428
429
430 configSeq += config.makeConfig ('Thinning')
431 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
432 configSeq.setOptionValue ('.selectionName', 'loose')
433 configSeq.setOptionValue ('.outputName', 'OutElectrons')
434 configSeq += config.makeConfig ('Thinning')
435 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
436 configSeq.setOptionValue ('.selectionName', 'tight')
437 configSeq.setOptionValue ('.outputName', 'OutPhotons')
438 configSeq += config.makeConfig ('Thinning')
439 configSeq.setOptionValue ('.containerName', 'AnaMuons')
440 configSeq.setOptionValue ('.selectionName', 'medium')
441 configSeq.setOptionValue ('.outputName', 'OutMuons')
442 configSeq += config.makeConfig ('Thinning')
443 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
444 configSeq.setOptionValue ('.selectionName', 'tight')
445 configSeq.setOptionValue ('.outputName', 'OutTauJets')
446 configSeq += config.makeConfig ('Thinning')
447 configSeq.setOptionValue ('.containerName', 'AnaJets')
448 configSeq.setOptionValue ('.outputName', 'OutJets')
449 if largeRJets :
450 configSeq += config.makeConfig ('Thinning')
451 configSeq.setOptionValue ('.containerName', 'AnaLargeRJets')
452 configSeq.setOptionValue ('.outputName', 'OutLargeRJets')
453
454 configSeq += config.makeConfig ('Thinning')
455 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
456 configSeq.setOptionValue ('.skipOnData', True)
457 configSeq.setOptionValue ('.outputName', 'OutTruthElectrons')
458 configSeq += config.makeConfig ('Thinning')
459 configSeq.setOptionValue ('.containerName', 'TruthPhotons')
460 configSeq.setOptionValue ('.skipOnData', True)
461 configSeq.setOptionValue ('.outputName', 'OutTruthPhotons')
462 configSeq += config.makeConfig ('Thinning')
463 configSeq.setOptionValue ('.containerName', 'TruthMuons')
464 configSeq.setOptionValue ('.skipOnData', True)
465 configSeq.setOptionValue ('.outputName', 'OutTruthMuons')
466 configSeq += config.makeConfig ('Thinning')
467 configSeq.setOptionValue ('.containerName', 'TruthTaus')
468 configSeq.setOptionValue ('.skipOnData', True)
469 configSeq.setOptionValue ('.outputName', 'OutTruthTaus')
470 configSeq += config.makeConfig ('Thinning')
471 configSeq.setOptionValue ('.containerName', 'AntiKt4TruthDressedWZJets')
472 configSeq.setOptionValue ('.outputName', 'OutTruthJets')
473 configSeq.setOptionValue ('.skipOnData', True)
474
475 configSeq += config.makeConfig ('Output')
476 configSeq.setOptionValue ('.treeName', 'analysis')
477 configSeq.setOptionValue ('.vars', [
478 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
479 'OutMuons_NOSYS.muonType -> mu_muonType type=uint16'
480 ])
481 configSeq.setOptionValue ('.metVars', [
482 'AnaMET_%SYS%.met -> met_%SYS%',
483 ])
484 configSeq.setOptionValue ('.truthMetVars', [
485 'TruthMET_NOSYS.met -> truth_met',
486 ])
487 configSeq.setOptionValue ('.containers', outputContainers)
488 configSeq.setOptionValue ('.containersOnlyForMC', outputContainersForMC)
489 configSeq.setOptionValue ('.commands', [
490 'disable actualInteractionsPerCrossing',
491 ])
492
493
494 configSeq += config.makeConfig ('PrintConfiguration')
495
496
497 if returnConfigSeq:
498 return configSeq
499
500 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
501 configSeq.fullConfigure (configAccumulator)
502
503
504 configSeq.printOptions()
505
506 return configAccumulator.CA if isAthena else None
507
508