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