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 (forceFullSimConfigForIso=
True)
113 config.setOptions (recalibratePhyslite=
False)
114 config.setOptions (decorateTruth=
True)
115 config.setOptions (decorateCaloClusterEta=
True)
116 config.setOptions (writeTrackD0Z0=
True)
117 config.setOptions (minPt=10000.0)
119 config.addBlock (
'Electrons.WorkingPoint')
120 config.setOptions (containerName=
'AnaElectrons')
121 config.setOptions (selectionName=
'loose')
122 config.setOptions (forceFullSimConfig=
True)
123 config.setOptions (identificationWP=
'LooseBLayerLH')
124 config.setOptions (isolationWP=
'Tight_VarRad')
125 config.setOptions (chargeIDSelectionRun2=
True)
126 config.setOptions (addChargeMisIDSF=
True)
128 config.addBlock (
'Electrons.TriggerSF')
129 config.setOptions (containerName=
'AnaElectrons')
130 config.setOptions (electronID=
'LooseBLayerLH')
131 config.setOptions (electronIsol=
'Tight_VarRad')
132 triggerChainsPerYear = {
133 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40',
'HLT_2g20_tight'],
134 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50',
'HLT_g35_loose_g25_loose'],
135 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_2g22_tight_L12EM15VHI',
'HLT_mu50'],
136 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'],
138 config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
140 config.addBlock (
'Electrons.PtEtaSelection')
141 config.setOptions (containerName=
'AnaElectrons')
142 config.setOptions (minPt=10000.0)
144 config.addBlock (
'Electrons.IFFClassification')
145 config.setOptions (containerName=
'AnaElectrons')
147 config.addBlock (
'Electrons.MCTCClassification')
148 config.setOptions (containerName=
'AnaElectrons')
149 config.setOptions (prefix=
'truth_')
153 config.addBlock (
'Photons', containerName=
'AnaPhotons')
154 config.setOptions (forceFullSimConfigForIso=
True)
155 config.setOptions (recomputeIsEM=
False)
156 config.setOptions (recalibratePhyslite=
False)
157 config.setOptions (decorateTruth=
True)
159 config.addBlock (
'Photons.WorkingPoint')
160 config.setOptions (containerName=
'AnaPhotons')
161 config.setOptions (selectionName=
'tight')
162 config.setOptions (forceFullSimConfigForID=
True)
163 config.setOptions (forceFullSimConfigForIso=
True)
164 config.setOptions (qualityWP=
'Tight')
165 config.setOptions (isolationWP=
'FixedCutTight')
166 config.setOptions (recomputeIsEM=
False)
168 config.addBlock (
'Photons.PtEtaSelection')
169 config.setOptions (containerName=
'AnaPhotons')
170 config.setOptions (minPt=10000.0)
173 config.addBlock (
'Muons', containerName=
'AnaMuons')
174 config.setOptions (recalibratePhyslite=
False)
175 config.setOptions (decorateTruth=
True)
176 config.setOptions (writeTrackD0Z0=
True)
178 config.addBlock (
'Muons.WorkingPoint')
179 config.setOptions (containerName=
'AnaMuons')
180 config.setOptions (selectionName=
'medium')
181 config.setOptions (quality=
'Medium')
182 config.setOptions (isolation=
'Loose_VarRad')
184 config.addBlock (
'Muons.IFFClassification')
185 config.setOptions (containerName=
'AnaMuons')
187 config.addBlock (
'Muons.MCTCClassification')
188 config.setOptions (containerName=
'AnaMuons')
189 config.setOptions (prefix=
'truth_')
192 config.addBlock (
'TauJets', containerName=
'AnaTauJets')
193 config.setOptions (decorateTruth=
True)
195 config.addBlock (
'TauJets.WorkingPoint')
196 config.setOptions (containerName=
'AnaTauJets')
197 config.setOptions (selectionName=
'tight')
198 config.setOptions (quality=
'Tight')
200 tauTriggerChainsSF = {
201 2015: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
202 2016: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
203 2017: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
204 2018: [
'HLT_tau25_medium1_tracktwoEF',
'HLT_tau35_medium1_tracktwoEF'],
205 2022: [
'HLT_tau25_mediumRNN_tracktwoMVA',
'HLT_tau35_mediumRNN_tracktwoMVA'],
206 2023: [
'HLT_tau25_mediumRNN_tracktwoMVA',
'HLT_tau35_mediumRNN_tracktwoMVA'],
208 config.addBlock (
'TauJets.TriggerSF')
209 config.setOptions (containerName=
'AnaTauJets')
210 config.setOptions (tauID=
'Tight')
211 config.setOptions (triggerChainsPerYear=tauTriggerChainsSF)
213 config.addBlock (
'TauJets.MCTCClassification')
214 config.setOptions (containerName=
'AnaTauJets')
215 config.setOptions (prefix=
'truth_')
218 config.addBlock (
'InDetTracks')
219 config.setOptions (containerName=
'AnaTracks')
220 config.setOptions (minPt=500)
221 config.setOptions (maxEta=2.5)
222 config.setOptions (outputTrackSummaryInfo=
True)
224 config.addBlock (
'InDetTracks.WorkingPoint')
225 config.setOptions (containerName=
'AnaTracks')
226 config.setOptions (selectionName=
'tight')
227 config.setOptions (cutLevel=
'TightPrimary')
229 config.addBlock (
'SystObjectLink')
230 config.setOptions (containerName=
'AnaJets')
231 config.addBlock (
'SystObjectLink')
232 config.setOptions (containerName=
'AnaLargeRJets')
233 config.addBlock (
'SystObjectLink')
234 config.setOptions (containerName=
'AnaElectrons')
235 config.addBlock (
'SystObjectLink')
236 config.setOptions (containerName=
'AnaPhotons')
237 config.addBlock (
'SystObjectLink')
238 config.setOptions (containerName=
'AnaMuons')
239 config.addBlock (
'SystObjectLink')
240 config.setOptions (containerName=
'AnaTauJets')
242 config.addBlock (
'ObjectCutFlow')
243 config.setOptions (containerName=
'AnaJets')
244 config.setOptions (selectionName=
'jvt')
245 config.addBlock (
'ObjectCutFlow')
246 config.setOptions (containerName=
'AnaElectrons')
247 config.setOptions (selectionName=
'loose')
248 config.addBlock (
'ObjectCutFlow')
249 config.setOptions (containerName=
'AnaPhotons')
250 config.setOptions (selectionName=
'tight')
251 config.addBlock (
'ObjectCutFlow')
252 config.setOptions (containerName=
'AnaMuons')
253 config.setOptions (selectionName=
'medium')
254 config.addBlock (
'ObjectCutFlow')
255 config.setOptions (containerName=
'AnaTauJets')
256 config.setOptions (selectionName=
'tight')
257 config.addBlock (
'ObjectCutFlow')
258 config.setOptions (containerName=
'AnaTracks')
259 config.setOptions (selectionName=
'tight')
262 config.addBlock(
'GeneratorLevelAnalysis')
265 config.addBlock (
'MissingET')
266 config.setOptions (containerName=
'AnaMET')
267 config.setOptions (jets=
'AnaJets')
268 config.setOptions (taus=
'AnaTauJets.tight')
269 config.setOptions (electrons=
'AnaElectrons.loose')
270 config.setOptions (photons=
'AnaPhotons.tight')
271 config.setOptions (muons=
'AnaMuons.medium')
274 config.addBlock(
'OverlapRemoval' )
275 config.setOptions (inputLabel=
'preselectOR')
276 config.setOptions (outputLabel=
'passesOR' )
277 config.setOptions (jets=
'AnaJets.baselineJvt')
278 config.setOptions (taus=
'AnaTauJets.tight')
279 config.setOptions (electrons=
'AnaElectrons.loose')
280 config.setOptions (photons=
'AnaPhotons.tight')
281 config.setOptions (muons=
'AnaMuons.medium')
284 config.addBlock (
'PL_Electrons')
285 config.setOptions (containerName=
'TruthElectrons')
286 config.addBlock (
'PL_Electrons.PtEtaSelection')
287 config.setOptions (containerName=
'TruthElectrons')
288 config.setOptions (skipOnData=
True)
289 config.setOptions (useDressedProperties=
True)
290 config.setOptions (minPt=20e3)
291 config.addBlock (
'PL_Electrons.MCTCClassification')
292 config.setOptions (containerName=
'TruthElectrons')
293 config.setOptions (prefix=
'')
295 config.addBlock (
'PL_Photons')
296 config.setOptions (containerName=
'TruthPhotons')
297 config.addBlock (
'PL_Photons.PtEtaSelection')
298 config.setOptions (containerName=
'TruthPhotons')
299 config.setOptions (skipOnData=
True)
300 config.setOptions (minPt=20e3)
302 config.addBlock (
'PL_Muons')
303 config.setOptions (containerName=
'TruthMuons')
304 config.addBlock (
'PL_Muons.PtEtaSelection')
305 config.setOptions (containerName=
'TruthMuons')
306 config.setOptions (skipOnData=
True)
307 config.setOptions (useDressedProperties=
True)
308 config.setOptions (minPt=20e3)
309 config.addBlock (
'PL_Muons.MCTCClassification')
310 config.setOptions (containerName=
'TruthMuons')
311 config.setOptions (prefix=
'')
313 config.addBlock (
'PL_Taus')
314 config.setOptions (containerName=
'TruthTaus')
315 config.addBlock (
'PL_Taus.PtEtaSelection')
316 config.setOptions (containerName=
'TruthTaus')
317 config.setOptions (skipOnData=
True)
318 config.setOptions (minPt=20e3)
319 config.addBlock (
'PL_Taus.MCTCClassification')
320 config.setOptions (containerName=
'TruthTaus')
321 config.setOptions (prefix=
'')
323 config.addBlock (
'PL_Jets')
324 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
325 config.addBlock (
'PL_Jets.PtEtaSelection')
326 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
327 config.setOptions (skipOnData=
True)
328 config.setOptions (minPt=20e3)
330 config.addBlock (
'PL_Neutrinos')
331 config.setOptions (skipOnData=
True)
332 config.addBlock (
'PL_MissingET')
333 config.setOptions (skipOnData=
True)
335 config.addBlock (
'PL_OverlapRemoval')
336 config.setOptions (skipOnData=
True)
337 config.setOptions (electrons=
'TruthElectrons')
338 config.setOptions (muons=
'TruthMuons')
339 config.setOptions (photons=
'TruthPhotons')
340 config.setOptions (jets=
'AntiKt4TruthDressedWZJets')
341 config.setOptions (useRapidityForDeltaR=
False)
344 config.addBlock (
'PartonHistory')
345 config.setOptions (history=
'Ttbar')
348 config.addBlock (
'Thinning')
349 config.setOptions (containerName=
'AnaElectrons')
350 config.setOptions (selectionName=
'loose')
351 config.setOptions (outputName=
'OutElectrons')
352 config.addBlock (
'Thinning')
353 config.setOptions (containerName=
'AnaPhotons')
354 config.setOptions (selectionName=
'tight')
355 config.setOptions (outputName=
'OutPhotons')
356 config.addBlock (
'Thinning')
357 config.setOptions (containerName=
'AnaMuons')
358 config.setOptions (selectionName=
'medium')
359 config.setOptions (outputName=
'OutMuons')
360 config.addBlock (
'Thinning')
361 config.setOptions (containerName=
'AnaTauJets')
362 config.setOptions (selectionName=
'tight')
363 config.setOptions (outputName=
'OutTauJets')
364 config.addBlock (
'Thinning')
365 config.setOptions (containerName=
'AnaJets')
366 config.setOptions (outputName=
'OutJets')
367 config.addBlock (
'Thinning')
368 config.setOptions (containerName=
'AnaLargeRJets')
369 config.setOptions (outputName=
'OutLargeRJets')
370 config.addBlock (
'Thinning')
371 config.setOptions (containerName=
'AnaTracks')
372 config.setOptions (selectionName=
'tight')
373 config.setOptions (outputName=
'OutTracks')
374 config.addBlock (
'Thinning')
375 config.setOptions (containerName=
'TruthElectrons')
376 config.setOptions (skipOnData=
True)
377 config.setOptions (outputName=
'OutTruthElectrons')
378 config.addBlock (
'Thinning')
379 config.setOptions (containerName=
'TruthPhotons')
380 config.setOptions (skipOnData=
True)
381 config.setOptions (outputName=
'OutTruthPhotons')
382 config.addBlock (
'Thinning')
383 config.setOptions (containerName=
'TruthMuons')
384 config.setOptions (skipOnData=
True)
385 config.setOptions (outputName=
'OutTruthMuons')
386 config.addBlock (
'Thinning')
387 config.setOptions (containerName=
'TruthTaus')
388 config.setOptions (skipOnData=
True)
389 config.setOptions (outputName=
'OutTruthTaus')
390 config.addBlock (
'Thinning')
391 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
392 config.setOptions (outputName=
'OutTruthJets')
393 config.setOptions (skipOnData=
True)
396 triggerMatchingChainsPerYear = {
397 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40'],
398 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50'],
399 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu50'],
400 2018: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium'],
402 config.addBlock (
'Trigger')
403 config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
404 config.setOptions (noFilter=
True)
405 config.setOptions (electrons=
'AnaElectrons.loose')
406 config.setOptions (photons=
'AnaPhotons.tight')
407 config.setOptions (muons=
'AnaMuons.medium')
408 config.setOptions (taus=
'AnaTauJets.tight')
409 config.setOptions (electronID=
'Tight')
410 config.setOptions (electronIsol=
'Tight_VarRad')
411 config.setOptions (photonIsol=
'TightCaloOnly')
412 config.setOptions (muonID=
'Tight')
413 config.setOptions (triggerMatchingChainsPerYear=triggerMatchingChainsPerYear)
417 exampleSelectionCuts = {
418 'SUBcommon':
"""JET_N_BTAG >= 2
423 'ejets':
"""IMPORT SUBcommon
430 'mujets':
"""IMPORT SUBcommon
436 for sel_name,sel_cuts
in exampleSelectionCuts.items():
437 config.addBlock (
'EventSelection')
438 config.setOptions (electrons=
'AnaElectrons.loose')
439 config.setOptions (muons=
'AnaMuons.medium')
440 config.setOptions (jets=
'AnaJets.baselineJvt')
441 config.setOptions (met=
'AnaMET')
442 config.setOptions (btagDecoration=
'ftag_select_ftag')
443 config.setOptions (noFilter=
True)
444 config.setOptions (cutFlowHistograms=
True)
445 config.setOptions (selectionName=sel_name)
446 config.setOptions (selectionCuts=sel_cuts)
449 config.addBlock (
'Bootstraps')
450 config.setOptions (nReplicas=2000)
451 config.setOptions (skipOnMC=
False)
454 config.addBlock (
'LeptonSF')
455 config.setOptions (muons=
'AnaMuons.medium')
456 config.setOptions (photons=
'AnaPhotons.tight')
457 config.setOptions (lepton_postfix=
'nominal')
462 'el_':
'OutElectrons',
463 'ph_' :
'OutPhotons',
464 'tau_':
'OutTauJets',
466 'larger_jet_':
'OutLargeRJets',
470 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
471 'truth_el_' :
'OutTruthElectrons',
472 'truth_ph_' :
'OutTruthPhotons',
473 'truth_tau_':
'OutTruthTaus',
474 'truth_jet_':
'OutTruthJets',
475 'truth_met_':
'TruthMET'}
476 config.addBlock (
'Output')
477 config.setOptions (treeName=
'analysis')
478 config.setOptions (vars=[
479 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
480 'OutMuons_NOSYS.muonType -> mu_muonType type=uint16'
482 config.setOptions (metVars=[
483 'AnaMET_%SYS%.met -> met_%SYS%',
485 config.setOptions (truthMetVars=[
486 'TruthMET_NOSYS.met -> truth_met',
488 config.setOptions (containers=outputContainers)
489 config.setOptions (containersOnlyForMC=outputContainersForMC)
490 config.setOptions (commands=[
491 "disable actualInteractionsPerCrossing",
495 config.addBlock (
'PrintConfiguration')
498 configSeq = config.configure()
501 textConfig = TextConfig(yamlPath)
502 textConfigSeq = textConfig.configure()