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
158 if largeRJets :
159 configSeq += config.makeConfig( 'Jets',
160 containerName='AnaLargeRJets',
161 jetCollection='AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets' )
162 outputContainers['larger_jet_'] = 'OutLargeRJets'
163 configSeq.setOptionValue ('.recalibratePhyslite', False)
164
165
166
167 likelihood = True
168 configSeq += config.makeConfig ('Electrons')
169 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
170 configSeq.setOptionValue ('.decorateTruth', True)
171 configSeq.setOptionValue ('.decorateCaloClusterEta', True)
172 configSeq.setOptionValue ('.writeTrackD0Z0', True)
173 configSeq.setOptionValue ('.forceFullSimConfigForIso', forceEGammaFullSimConfig)
174 configSeq.setOptionValue ('.recalibratePhyslite', False)
175 configSeq.setOptionValue ('.minPt', electronMinPt)
176 configSeq += config.makeConfig ('Electrons.WorkingPoint')
177 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
178 configSeq.setOptionValue ('.selectionName', 'loose')
179 configSeq.setOptionValue ('.forceFullSimConfig', forceEGammaFullSimConfig)
180 if likelihood:
181 configSeq.setOptionValue ('.identificationWP', 'LooseBLayerLH')
182 else:
183 configSeq.setOptionValue ('.identificationWP', 'LooseDNN')
184 configSeq.setOptionValue ('.isolationWP', 'Tight_VarRad')
185 configSeq.setOptionValue ('.chargeIDSelectionRun2', True)
186 configSeq.setOptionValue ('.addChargeMisIDSF', geometry is LHCPeriod.Run2)
187 configSeq += config.makeConfig('Electrons.TriggerSF')
188 configSeq.setOptionValue('.containerName', 'AnaElectrons')
189 configSeq.setOptionValue('.electronID', 'LooseBLayerLH')
190 configSeq.setOptionValue('.electronIsol', 'Tight_VarRad')
191 configSeq.setOptionValue('.triggerChainsPerYear', triggerChainsPerYear)
192
193 configSeq += config.makeConfig ('Electrons.IFFClassification')
194 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
195 configSeq += config.makeConfig ('Electrons.MCTCClassification')
196 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
197 configSeq.setOptionValue ('.prefix', 'truth_')
198
199 configSeq += config.makeConfig ('Electrons.PtEtaSelection')
200 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
201 configSeq.setOptionValue ('.minPt', electronMinPt)
202
203
204
205 configSeq += config.makeConfig ('Photons')
206 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
207 configSeq.setOptionValue ('.decorateTruth', True)
208 configSeq.setOptionValue ('.forceFullSimConfigForIso', forceEGammaFullSimConfig)
209 configSeq.setOptionValue ('.recomputeIsEM', False)
210 configSeq.setOptionValue ('.recalibratePhyslite', False)
211 configSeq += config.makeConfig ('Photons.WorkingPoint')
212 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
213 configSeq.setOptionValue ('.selectionName', 'tight')
214 configSeq.setOptionValue ('.forceFullSimConfigForID', forceEGammaFullSimConfig)
215 configSeq.setOptionValue ('.forceFullSimConfigForIso', forceEGammaFullSimConfig)
216 configSeq.setOptionValue ('.qualityWP', 'Tight')
217 configSeq.setOptionValue ('.isolationWP', 'FixedCutTight')
218 configSeq.setOptionValue ('.recomputeIsEM', False)
219
220 configSeq += config.makeConfig ('Photons.PtEtaSelection')
221 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
222 configSeq.setOptionValue ('.minPt', photonMinPt)
223
224
225
226 configSeq += config.makeConfig ('Muons')
227 configSeq.setOptionValue ('.containerName', 'AnaMuons')
228 configSeq.setOptionValue ('.decorateTruth', True)
229 configSeq.setOptionValue ('.writeTrackD0Z0', True)
230 configSeq.setOptionValue ('.recalibratePhyslite', False)
231
232 configSeq += config.makeConfig ('Muons.WorkingPoint')
233 configSeq.setOptionValue ('.containerName', 'AnaMuons')
234 configSeq.setOptionValue ('.selectionName', 'medium')
235 configSeq.setOptionValue ('.quality', 'Medium')
236 configSeq.setOptionValue ('.isolation', 'Loose_VarRad')
237
238 configSeq += config.makeConfig ('Muons.IFFClassification')
239 configSeq.setOptionValue ('.containerName', 'AnaMuons')
240 configSeq += config.makeConfig ('Muons.MCTCClassification')
241 configSeq.setOptionValue ('.containerName', 'AnaMuons')
242 configSeq.setOptionValue ('.prefix', 'truth_')
243
244
245
246
247
248
249
250
251 configSeq += config.makeConfig ('TauJets')
252 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
253 configSeq.setOptionValue ('.decorateTruth', True)
254 configSeq += config.makeConfig ('TauJets.WorkingPoint')
255 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
256 configSeq.setOptionValue ('.selectionName', 'tight')
257 configSeq.setOptionValue ('.quality', 'Tight')
258
259 configSeq += config.makeConfig('TauJets.TriggerSF')
260 configSeq.setOptionValue('.containerName', 'AnaTauJets')
261 configSeq.setOptionValue('.tauID', 'Tight')
262 configSeq.setOptionValue('.triggerChainsPerYear', tauTriggerChainsSF)
263
264 configSeq += config.makeConfig ('TauJets.MCTCClassification')
265 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
266 configSeq.setOptionValue ('.prefix', 'truth_')
267
268
269
270 configSeq += config.makeConfig('SystObjectLink')
271 configSeq.setOptionValue ('.containerName', 'AnaJets')
272 if largeRJets:
273 configSeq += config.makeConfig('SystObjectLink')
274 configSeq.setOptionValue ('.containerName', 'AnaLargeRJets')
275 configSeq += config.makeConfig('SystObjectLink')
276 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
277 configSeq += config.makeConfig('SystObjectLink')
278 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
279 configSeq += config.makeConfig('SystObjectLink')
280 configSeq.setOptionValue ('.containerName', 'AnaMuons')
281 configSeq += config.makeConfig('SystObjectLink')
282 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
283
284
285
286 configSeq += config.makeConfig ('PL_Electrons')
287 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
288 configSeq += config.makeConfig ('PL_Electrons.MCTCClassification')
289 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
290 configSeq.setOptionValue ('.prefix', '')
291 configSeq += config.makeConfig ('PL_Electrons.PtEtaSelection')
292 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
293 configSeq.setOptionValue ('.skipOnData', True)
294 configSeq.setOptionValue ('.useDressedProperties', True)
295 configSeq.setOptionValue ('.minPt', 20e3)
296
297 configSeq += config.makeConfig ('PL_Muons')
298 configSeq.setOptionValue ('.containerName', 'TruthMuons')
299 configSeq += config.makeConfig ('PL_Muons.MCTCClassification')
300 configSeq.setOptionValue ('.containerName', 'TruthMuons')
301 configSeq.setOptionValue ('.prefix', '')
302 configSeq += config.makeConfig ('PL_Muons.PtEtaSelection')
303 configSeq.setOptionValue ('.containerName', 'TruthMuons')
304 configSeq.setOptionValue ('.skipOnData', True)
305 configSeq.setOptionValue ('.useDressedProperties', True)
306 configSeq.setOptionValue ('.minPt', 20e3)
307
308 configSeq += config.makeConfig ('PL_Neutrinos')
309 configSeq.setOptionValue ('.skipOnData', True)
310
311 configSeq += config.makeConfig ('PL_Jets')
312 configSeq.setOptionValue ('.containerName', 'AntiKt4TruthDressedWZJets')
313 configSeq += config.makeConfig ('PL_Jets.PtEtaSelection')
314 configSeq.setOptionValue ('.containerName', 'AntiKt4TruthDressedWZJets')
315 configSeq.setOptionValue ('.skipOnData', True)
316 configSeq.setOptionValue ('.minPt', 20e3)
317
318 configSeq += config.makeConfig ('PL_Taus')
319 configSeq.setOptionValue ('.containerName', 'TruthTaus')
320 configSeq += config.makeConfig ('PL_Taus.MCTCClassification')
321 configSeq.setOptionValue ('.containerName', 'TruthTaus')
322 configSeq.setOptionValue ('.prefix', '')
323 configSeq += config.makeConfig ('PL_Taus.PtEtaSelection')
324 configSeq.setOptionValue ('.containerName', 'TruthTaus')
325 configSeq.setOptionValue ('.skipOnData', True)
326 configSeq.setOptionValue ('.minPt', 20e3)
327
328 configSeq += config.makeConfig ('PL_Photons')
329 configSeq.setOptionValue ('.containerName', 'TruthPhotons')
330 configSeq += config.makeConfig ('PL_Photons.PtEtaSelection')
331 configSeq.setOptionValue ('.containerName', 'TruthPhotons')
332 configSeq.setOptionValue ('.skipOnData', True)
333 configSeq.setOptionValue ('.minPt', 20e3)
334
335 configSeq += config.makeConfig ('PL_MissingET')
336 configSeq.setOptionValue ('.skipOnData', True)
337
338 configSeq += config.makeConfig ('PL_OverlapRemoval')
339 configSeq.setOptionValue ('.skipOnData', True)
340 configSeq.setOptionValue ('.electrons', 'TruthElectrons')
341 configSeq.setOptionValue ('.muons', 'TruthMuons')
342 configSeq.setOptionValue ('.photons', 'TruthPhotons')
343 configSeq.setOptionValue ('.jets', 'AntiKt4TruthDressedWZJets')
344 configSeq.setOptionValue ('.useRapidityForDeltaR', False)
345
346
347 if dataType is not DataType.Data :
348
349 configSeq += config.makeConfig( 'GeneratorLevelAnalysis')
350
351
352
353 configSeq += config.makeConfig ('MissingET')
354 configSeq.setOptionValue ('.containerName', 'AnaMET')
355 configSeq.setOptionValue ('.jets', 'AnaJets')
356 configSeq.setOptionValue ('.taus', 'AnaTauJets.tight')
357 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
358 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
359
360
361
362
363
364
365
366
367 configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
368
369
370
371 configSeq += config.makeConfig( 'OverlapRemoval' )
372 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
373 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
374
375
376 configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
377 configSeq.setOptionValue ('.jets', 'AnaJets.baselineJvt')
378 configSeq.setOptionValue ('.taus', 'AnaTauJets.tight')
379 configSeq.setOptionValue ('.inputLabel', 'preselectOR')
380 configSeq.setOptionValue ('.outputLabel', 'passesOR' )
381 configSeq.setOptionValue ('.nominalOnly', onlyNominalOR )
382
383
384
385 configSeq += config.makeConfig ('ObjectCutFlow')
386 configSeq.setOptionValue ('.containerName', 'AnaJets')
387 configSeq.setOptionValue ('.selectionName', 'jvt')
388 configSeq += config.makeConfig ('ObjectCutFlow')
389 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
390 configSeq.setOptionValue ('.selectionName', 'loose')
391 configSeq += config.makeConfig ('ObjectCutFlow')
392 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
393 configSeq.setOptionValue ('.selectionName', 'tight')
394 configSeq += config.makeConfig ('ObjectCutFlow')
395 configSeq.setOptionValue ('.containerName', 'AnaMuons')
396 configSeq.setOptionValue ('.selectionName', 'medium')
397 configSeq += config.makeConfig ('ObjectCutFlow')
398 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
399 configSeq.setOptionValue ('.selectionName', 'tight')
400
401
402 if geometry is not LHCPeriod.Run4:
403
404
405
406
407
408
409 from EventSelectionAlgorithms.EventSelectionConfig import makeMultipleEventSelectionConfigs
410 makeMultipleEventSelectionConfigs(configSeq, electrons = 'AnaElectrons.loose', muons = 'AnaMuons.medium', jets = 'AnaJets.baselineJvt',
411 met = 'AnaMET', btagDecoration = 'ftag_select_ftag',
412 selectionCutsDict = exampleSelectionCuts, noFilter = True,
413 cutFlowHistograms = True)
414
415 configSeq += config.makeConfig ('Bootstraps')
416 configSeq.setOptionValue ('.nReplicas', 2000 )
417 configSeq.setOptionValue ('.skipOnMC', False)
418
419
420 configSeq += config.makeConfig ('LeptonSF')
421 if geometry is not LHCPeriod.Run2:
422 configSeq.setOptionValue ('.electrons', 'AnaElectrons.loose')
423 configSeq.setOptionValue ('.muons', 'AnaMuons.medium')
424 configSeq.setOptionValue ('.photons', 'AnaPhotons.tight')
425 configSeq.setOptionValue ('.lepton_postfix', 'nominal')
426
427
428 configSeq += config.makeConfig ('Thinning')
429 configSeq.setOptionValue ('.containerName', 'AnaElectrons')
430 configSeq.setOptionValue ('.selectionName', 'loose')
431 configSeq.setOptionValue ('.outputName', 'OutElectrons')
432 configSeq += config.makeConfig ('Thinning')
433 configSeq.setOptionValue ('.containerName', 'AnaPhotons')
434 configSeq.setOptionValue ('.selectionName', 'tight')
435 configSeq.setOptionValue ('.outputName', 'OutPhotons')
436 configSeq += config.makeConfig ('Thinning')
437 configSeq.setOptionValue ('.containerName', 'AnaMuons')
438 configSeq.setOptionValue ('.selectionName', 'medium')
439 configSeq.setOptionValue ('.outputName', 'OutMuons')
440 configSeq += config.makeConfig ('Thinning')
441 configSeq.setOptionValue ('.containerName', 'AnaTauJets')
442 configSeq.setOptionValue ('.selectionName', 'tight')
443 configSeq.setOptionValue ('.outputName', 'OutTauJets')
444 configSeq += config.makeConfig ('Thinning')
445 configSeq.setOptionValue ('.containerName', 'AnaJets')
446 configSeq.setOptionValue ('.outputName', 'OutJets')
447 if largeRJets :
448 configSeq += config.makeConfig ('Thinning')
449 configSeq.setOptionValue ('.containerName', 'AnaLargeRJets')
450 configSeq.setOptionValue ('.outputName', 'OutLargeRJets')
451
452 configSeq += config.makeConfig ('Thinning')
453 configSeq.setOptionValue ('.containerName', 'TruthElectrons')
454 configSeq.setOptionValue ('.skipOnData', True)
455 configSeq.setOptionValue ('.outputName', 'OutTruthElectrons')
456 configSeq += config.makeConfig ('Thinning')
457 configSeq.setOptionValue ('.containerName', 'TruthPhotons')
458 configSeq.setOptionValue ('.skipOnData', True)
459 configSeq.setOptionValue ('.outputName', 'OutTruthPhotons')
460 configSeq += config.makeConfig ('Thinning')
461 configSeq.setOptionValue ('.containerName', 'TruthMuons')
462 configSeq.setOptionValue ('.skipOnData', True)
463 configSeq.setOptionValue ('.outputName', 'OutTruthMuons')
464 configSeq += config.makeConfig ('Thinning')
465 configSeq.setOptionValue ('.containerName', 'TruthTaus')
466 configSeq.setOptionValue ('.skipOnData', True)
467 configSeq.setOptionValue ('.outputName', 'OutTruthTaus')
468 configSeq += config.makeConfig ('Thinning')
469 configSeq.setOptionValue ('.containerName', 'AntiKt4TruthDressedWZJets')
470 configSeq.setOptionValue ('.outputName', 'OutTruthJets')
471 configSeq.setOptionValue ('.skipOnData', True)
472
473 configSeq += config.makeConfig ('Output')
474 configSeq.setOptionValue ('.treeName', 'analysis')
475 configSeq.setOptionValue ('.vars', [
476 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
477 ])
478 configSeq.setOptionValue ('.metVars', [
479 'AnaMET_%SYS%.met -> met_%SYS%',
480 ])
481 configSeq.setOptionValue ('.truthMetVars', [
482 'TruthMET_NOSYS.met -> truth_met',
483 ])
484 configSeq.setOptionValue ('.containers', outputContainers)
485 configSeq.setOptionValue ('.containersOnlyForMC', outputContainersForMC)
486 configSeq.setOptionValue ('.commands', [
487 'disable actualInteractionsPerCrossing',
488 ])
489
490
491 configSeq += config.makeConfig ('PrintConfiguration')
492
493
494 if returnConfigSeq:
495 return configSeq
496
497 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
498 configSeq.fullConfigure (configAccumulator)
499
500
501 configSeq.printOptions()
502
503 from AnaAlgorithm.DualUseConfig import isAthena, useComponentAccumulator
504 if isAthena and useComponentAccumulator:
505 return configAccumulator.CA
506 else:
507 return None
508
509
510