48 Create a configSequence using provided YAML file and a
49 configSequence using ConfigText python commands and compare.
51 Will raise an exception if configSequences differ
54 from AnalysisAlgorithmsConfig.ConfigText
import TextConfig
58 config.addBlock(
'CommonServices')
59 config.setOptions(systematicsHistogram=
'systematicsList')
60 config.setOptions(enableExpertMode=
True)
63 config.addBlock(
'PileupReweighting')
66 config.addBlock(
'EventCleaning')
67 config.setOptions (runEventCleaning=
True)
70 config.addBlock(
'Jets')
71 config.setOptions (containerName=
'AnaJets')
72 config.setOptions (jetCollection=
'AntiKt4EMPFlowJets')
73 config.setOptions (runJvtUpdate=
False)
74 config.setOptions (runNNJvtUpdate=
True)
75 config.setOptions (runJvtSelection=
False)
76 config.setOptions (recalibratePhyslite=
False)
78 config.addBlock(
'Jets.JVTWorkingPoint')
79 config.setOptions (containerName=
'AnaJets')
80 config.setOptions (selectionName=
'baselineJvt')
81 config.setOptions (jvtWP=
'FixedEffPt')
83 config.addBlock(
'Jets.FlavourTagging')
84 config.setOptions (containerName=
'AnaJets')
85 config.setOptions (selectionName=
'ftag')
86 config.setOptions (btagger=
'GN2v01')
87 config.setOptions (btagWP=
'FixedCutBEff_65')
88 config.setOptions (saveScores=
'All')
90 bjetTriggerChainsPerYear = {
91 2022: [
'HLT_2j45_0eta290_020jvt_bdl1d60_2j45_pf_ftf_presel2j25XX2j25b85_L14J15p0ETA25'],
92 2023: [
'HLT_2j45_0eta290_020jvt_bgn160_2j45_pf_ftf_presel2j25XX2j25b85_L14J15p0ETA25'],
94 config.addBlock(
'Jets.FTagTriggerMatching' )
95 config.setOptions (containerName=
'AnaJets')
96 config.setOptions (triggerChainsPerYear=bjetTriggerChainsPerYear)
98 config.addBlock(
'Jets.FlavourTaggingEventSF')
99 config.setOptions (containerName=
'AnaJets.baselineJvt')
100 config.setOptions (btagger=
'GN2v01')
101 config.setOptions (triggerChainsPerYear=bjetTriggerChainsPerYear)
104 config.addBlock(
'Jets')
105 config.setOptions (containerName=
'AnaLargeRJets')
106 config.setOptions (jetCollection=
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets')
107 config.setOptions (recalibratePhyslite=
False)
110 config.addBlock (
'Electrons')
111 config.setOptions (containerName=
'AnaElectrons')
112 config.setOptions (recalibratePhyslite=
False)
113 config.setOptions (decorateTruth=
True)
114 config.setOptions (decorateCaloClusterEta=
True)
115 config.setOptions (writeTrackD0Z0=
True)
116 config.setOptions (minPt=10000.0)
118 config.addBlock (
'Electrons.WorkingPoint')
119 config.setOptions (containerName=
'AnaElectrons')
120 config.setOptions (selectionName=
'loose')
121 config.setOptions (identificationWP=
'LooseBLayerLH')
122 config.setOptions (isolationWP=
'Tight_VarRad')
123 config.setOptions (chargeIDSelectionRun2=
True)
124 config.setOptions (addChargeMisIDSF=
True)
126 config.addBlock (
'Electrons.TriggerSF')
127 config.setOptions (containerName=
'AnaElectrons')
128 config.setOptions (electronID=
'LooseBLayerLH')
129 config.setOptions (electronIsol=
'Tight_VarRad')
130 triggerChainsPerYear = {
131 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40',
'HLT_2g20_tight'],
132 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50',
'HLT_g35_loose_g25_loose'],
133 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_2g22_tight_L12EM15VHI',
'HLT_mu50'],
134 2018: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_g35_medium_g25_medium_L12EM20VH',
'HLT_mu26_ivarmedium',
'HLT_2mu14'],
136 config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
138 config.addBlock (
'Electrons.PtEtaSelection')
139 config.setOptions (containerName=
'AnaElectrons')
140 config.setOptions (minPt=10000.0)
142 config.addBlock (
'Electrons.IFFClassification')
143 config.setOptions (containerName=
'AnaElectrons')
145 config.addBlock (
'Electrons.MCTCClassification')
146 config.setOptions (containerName=
'AnaElectrons')
147 config.setOptions (prefix=
'truth_')
151 config.addBlock (
'Photons', containerName=
'AnaPhotons')
152 config.setOptions (recomputeIsEM=
False)
153 config.setOptions (recalibratePhyslite=
False)
154 config.setOptions (decorateTruth=
True)
156 config.addBlock (
'Photons.WorkingPoint')
157 config.setOptions (containerName=
'AnaPhotons')
158 config.setOptions (selectionName=
'tight')
159 config.setOptions (qualityWP=
'Tight')
160 config.setOptions (isolationWP=
'FixedCutTight')
161 config.setOptions (recomputeIsEM=
False)
163 config.addBlock (
'Photons.PtEtaSelection')
164 config.setOptions (containerName=
'AnaPhotons')
165 config.setOptions (minPt=10000.0)
168 config.addBlock (
'Muons', containerName=
'AnaMuons')
169 config.setOptions (recalibratePhyslite=
False)
170 config.setOptions (decorateTruth=
True)
171 config.setOptions (writeTrackD0Z0=
True)
173 config.addBlock (
'Muons.WorkingPoint')
174 config.setOptions (containerName=
'AnaMuons')
175 config.setOptions (selectionName=
'medium')
176 config.setOptions (quality=
'Medium')
177 config.setOptions (isolation=
'Loose_VarRad')
179 config.addBlock (
'Muons.IFFClassification')
180 config.setOptions (containerName=
'AnaMuons')
182 config.addBlock (
'Muons.MCTCClassification')
183 config.setOptions (containerName=
'AnaMuons')
184 config.setOptions (prefix=
'truth_')
187 config.addBlock (
'TauJets', containerName=
'AnaTauJets')
188 config.setOptions (decorateTruth=
True)
190 config.addBlock (
'TauJets.WorkingPoint')
191 config.setOptions (containerName=
'AnaTauJets')
192 config.setOptions (selectionName=
'tight')
193 config.setOptions (quality=
'Tight')
195 tauTriggerChainsSF = {
196 2015: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
197 2016: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
198 2017: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
199 2018: [
'HLT_tau25_medium1_tracktwoEF',
'HLT_tau35_medium1_tracktwoEF'],
200 2022: [
'HLT_tau25_mediumRNN_tracktwoMVA',
'HLT_tau35_mediumRNN_tracktwoMVA'],
201 2023: [
'HLT_tau25_mediumRNN_tracktwoMVA',
'HLT_tau35_mediumRNN_tracktwoMVA'],
203 config.addBlock (
'TauJets.TriggerSF')
204 config.setOptions (containerName=
'AnaTauJets')
205 config.setOptions (tauID=
'Tight')
206 config.setOptions (triggerChainsPerYear=tauTriggerChainsSF)
208 config.addBlock (
'TauJets.MCTCClassification')
209 config.setOptions (containerName=
'AnaTauJets')
210 config.setOptions (prefix=
'truth_')
213 config.addBlock (
'InDetTracks')
214 config.setOptions (containerName=
'AnaTracks')
215 config.setOptions (minPt=500)
216 config.setOptions (maxEta=2.5)
217 config.setOptions (outputTrackSummaryInfo=
True)
219 config.addBlock (
'InDetTracks.WorkingPoint')
220 config.setOptions (containerName=
'AnaTracks')
221 config.setOptions (selectionName=
'tight')
222 config.setOptions (cutLevel=
'TightPrimary')
224 config.addBlock (
'SystObjectLink')
225 config.setOptions (containerName=
'AnaJets')
226 config.addBlock (
'SystObjectLink')
227 config.setOptions (containerName=
'AnaLargeRJets')
228 config.addBlock (
'SystObjectLink')
229 config.setOptions (containerName=
'AnaElectrons')
230 config.addBlock (
'SystObjectLink')
231 config.setOptions (containerName=
'AnaPhotons')
232 config.addBlock (
'SystObjectLink')
233 config.setOptions (containerName=
'AnaMuons')
234 config.addBlock (
'SystObjectLink')
235 config.setOptions (containerName=
'AnaTauJets')
237 config.addBlock (
'ObjectCutFlow')
238 config.setOptions (containerName=
'AnaJets')
239 config.setOptions (selectionName=
'jvt')
240 config.addBlock (
'ObjectCutFlow')
241 config.setOptions (containerName=
'AnaElectrons')
242 config.setOptions (selectionName=
'loose')
243 config.addBlock (
'ObjectCutFlow')
244 config.setOptions (containerName=
'AnaPhotons')
245 config.setOptions (selectionName=
'tight')
246 config.addBlock (
'ObjectCutFlow')
247 config.setOptions (containerName=
'AnaMuons')
248 config.setOptions (selectionName=
'medium')
249 config.addBlock (
'ObjectCutFlow')
250 config.setOptions (containerName=
'AnaTauJets')
251 config.setOptions (selectionName=
'tight')
252 config.addBlock (
'ObjectCutFlow')
253 config.setOptions (containerName=
'AnaTracks')
254 config.setOptions (selectionName=
'tight')
257 config.addBlock(
'GeneratorLevelAnalysis')
260 config.addBlock (
'MissingET')
261 config.setOptions (containerName=
'AnaMET')
262 config.setOptions (jets=
'AnaJets')
263 config.setOptions (taus=
'AnaTauJets.tight')
264 config.setOptions (electrons=
'AnaElectrons.loose')
265 config.setOptions (photons=
'AnaPhotons.tight')
266 config.setOptions (muons=
'AnaMuons.medium')
269 config.addBlock(
'OverlapRemoval' )
270 config.setOptions (inputLabel=
'preselectOR')
271 config.setOptions (outputLabel=
'passesOR' )
272 config.setOptions (jets=
'AnaJets.baselineJvt')
273 config.setOptions (taus=
'AnaTauJets.tight')
274 config.setOptions (electrons=
'AnaElectrons.loose')
275 config.setOptions (photons=
'AnaPhotons.tight')
276 config.setOptions (muons=
'AnaMuons.medium')
279 config.addBlock (
'PL_Electrons')
280 config.setOptions (containerName=
'TruthElectrons')
281 config.addBlock (
'PL_Electrons.PtEtaSelection')
282 config.setOptions (containerName=
'TruthElectrons')
283 config.setOptions (skipOnData=
True)
284 config.setOptions (useDressedProperties=
True)
285 config.setOptions (minPt=20e3)
286 config.addBlock (
'PL_Electrons.MCTCClassification')
287 config.setOptions (containerName=
'TruthElectrons')
288 config.setOptions (prefix=
'')
290 config.addBlock (
'PL_Photons')
291 config.setOptions (containerName=
'TruthPhotons')
292 config.addBlock (
'PL_Photons.PtEtaSelection')
293 config.setOptions (containerName=
'TruthPhotons')
294 config.setOptions (skipOnData=
True)
295 config.setOptions (minPt=20e3)
297 config.addBlock (
'PL_Muons')
298 config.setOptions (containerName=
'TruthMuons')
299 config.addBlock (
'PL_Muons.PtEtaSelection')
300 config.setOptions (containerName=
'TruthMuons')
301 config.setOptions (skipOnData=
True)
302 config.setOptions (useDressedProperties=
True)
303 config.setOptions (minPt=20e3)
304 config.addBlock (
'PL_Muons.MCTCClassification')
305 config.setOptions (containerName=
'TruthMuons')
306 config.setOptions (prefix=
'')
308 config.addBlock (
'PL_Taus')
309 config.setOptions (containerName=
'TruthTaus')
310 config.addBlock (
'PL_Taus.PtEtaSelection')
311 config.setOptions (containerName=
'TruthTaus')
312 config.setOptions (skipOnData=
True)
313 config.setOptions (minPt=20e3)
314 config.addBlock (
'PL_Taus.MCTCClassification')
315 config.setOptions (containerName=
'TruthTaus')
316 config.setOptions (prefix=
'')
318 config.addBlock (
'PL_Jets')
319 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
320 config.addBlock (
'PL_Jets.PtEtaSelection')
321 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
322 config.setOptions (skipOnData=
True)
323 config.setOptions (minPt=20e3)
325 config.addBlock (
'PL_Neutrinos')
326 config.setOptions (skipOnData=
True)
327 config.addBlock (
'PL_MissingET')
328 config.setOptions (skipOnData=
True)
330 config.addBlock (
'PL_OverlapRemoval')
331 config.setOptions (skipOnData=
True)
332 config.setOptions (electrons=
'TruthElectrons')
333 config.setOptions (muons=
'TruthMuons')
334 config.setOptions (photons=
'TruthPhotons')
335 config.setOptions (jets=
'AntiKt4TruthDressedWZJets')
336 config.setOptions (useRapidityForDeltaR=
False)
339 config.addBlock (
'PartonHistory')
340 config.setOptions (history=
'Ttbar')
343 config.addBlock (
'Thinning')
344 config.setOptions (containerName=
'AnaElectrons')
345 config.setOptions (selectionName=
'loose')
346 config.setOptions (outputName=
'OutElectrons')
347 config.addBlock (
'Thinning')
348 config.setOptions (containerName=
'AnaPhotons')
349 config.setOptions (selectionName=
'tight')
350 config.setOptions (outputName=
'OutPhotons')
351 config.addBlock (
'Thinning')
352 config.setOptions (containerName=
'AnaMuons')
353 config.setOptions (selectionName=
'medium')
354 config.setOptions (outputName=
'OutMuons')
355 config.addBlock (
'Thinning')
356 config.setOptions (containerName=
'AnaTauJets')
357 config.setOptions (selectionName=
'tight')
358 config.setOptions (outputName=
'OutTauJets')
359 config.addBlock (
'Thinning')
360 config.setOptions (containerName=
'AnaJets')
361 config.setOptions (outputName=
'OutJets')
362 config.addBlock (
'Thinning')
363 config.setOptions (containerName=
'AnaLargeRJets')
364 config.setOptions (outputName=
'OutLargeRJets')
365 config.addBlock (
'Thinning')
366 config.setOptions (containerName=
'AnaTracks')
367 config.setOptions (selectionName=
'tight')
368 config.setOptions (outputName=
'OutTracks')
369 config.addBlock (
'Thinning')
370 config.setOptions (containerName=
'TruthElectrons')
371 config.setOptions (skipOnData=
True)
372 config.setOptions (outputName=
'OutTruthElectrons')
373 config.addBlock (
'Thinning')
374 config.setOptions (containerName=
'TruthPhotons')
375 config.setOptions (skipOnData=
True)
376 config.setOptions (outputName=
'OutTruthPhotons')
377 config.addBlock (
'Thinning')
378 config.setOptions (containerName=
'TruthMuons')
379 config.setOptions (skipOnData=
True)
380 config.setOptions (outputName=
'OutTruthMuons')
381 config.addBlock (
'Thinning')
382 config.setOptions (containerName=
'TruthTaus')
383 config.setOptions (skipOnData=
True)
384 config.setOptions (outputName=
'OutTruthTaus')
385 config.addBlock (
'Thinning')
386 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
387 config.setOptions (outputName=
'OutTruthJets')
388 config.setOptions (skipOnData=
True)
391 triggerMatchingChainsPerYear = {
392 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40'],
393 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50'],
394 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu50'],
395 2018: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium'],
397 config.addBlock (
'Trigger')
398 config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
399 config.setOptions (noFilter=
True)
400 config.setOptions (electrons=
'AnaElectrons.loose')
401 config.setOptions (photons=
'AnaPhotons.tight')
402 config.setOptions (muons=
'AnaMuons.medium')
403 config.setOptions (taus=
'AnaTauJets.tight')
404 config.setOptions (electronID=
'Tight')
405 config.setOptions (electronIsol=
'Tight_VarRad')
406 config.setOptions (photonIsol=
'TightCaloOnly')
407 config.setOptions (muonID=
'Tight')
408 config.setOptions (triggerMatchingChainsPerYear=triggerMatchingChainsPerYear)
412 exampleSelectionCuts = {
413 'SUBcommon':
"""JET_N_BTAG >= 2
418 'ejets':
"""IMPORT SUBcommon
425 'mujets':
"""IMPORT SUBcommon
431 for sel_name,sel_cuts
in exampleSelectionCuts.items():
432 config.addBlock (
'EventSelection')
433 config.setOptions (electrons=
'AnaElectrons.loose')
434 config.setOptions (muons=
'AnaMuons.medium')
435 config.setOptions (jets=
'AnaJets.baselineJvt')
436 config.setOptions (met=
'AnaMET')
437 config.setOptions (btagDecoration=
'ftag_select_ftag')
438 config.setOptions (noFilter=
True)
439 config.setOptions (cutFlowHistograms=
True)
440 config.setOptions (selectionName=sel_name)
441 config.setOptions (selectionCuts=sel_cuts)
444 config.addBlock (
'Bootstraps')
445 config.setOptions (nReplicas=2000)
446 config.setOptions (skipOnMC=
False)
449 config.addBlock (
'LeptonSF')
450 config.setOptions (muons=
'AnaMuons.medium')
451 config.setOptions (photons=
'AnaPhotons.tight')
452 config.setOptions (lepton_postfix=
'nominal')
457 'el_':
'OutElectrons',
458 'ph_' :
'OutPhotons',
459 'tau_':
'OutTauJets',
461 'larger_jet_':
'OutLargeRJets',
465 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
466 'truth_el_' :
'OutTruthElectrons',
467 'truth_ph_' :
'OutTruthPhotons',
468 'truth_tau_':
'OutTruthTaus',
469 'truth_jet_':
'OutTruthJets',
470 'truth_met_':
'TruthMET'}
471 config.addBlock (
'Output')
472 config.setOptions (treeName=
'analysis')
473 config.setOptions (vars=[
474 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
475 'OutMuons_NOSYS.muonType -> mu_muonType type=uint16'
477 config.setOptions (metVars=[
478 'AnaMET_%SYS%.met -> met_%SYS%',
480 config.setOptions (truthMetVars=[
481 'TruthMET_NOSYS.met -> truth_met',
483 config.setOptions (containers=outputContainers)
484 config.setOptions (containersOnlyForMC=outputContainersForMC)
485 config.setOptions (commands=[
486 "disable actualInteractionsPerCrossing",
490 config.addBlock (
'PrintConfiguration')
493 configSeq = config.configure()
496 textConfig = TextConfig(yamlPath)
497 textConfigSeq = textConfig.configure()