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