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 (recalibratePhyslite=
False)
77 config.addBlock(
'Jets.FlavourTagging')
78 config.setOptions (containerName=
'AnaJets')
79 config.setOptions (selectionName=
'ftag')
80 config.setOptions (btagger=
'GN2v01')
81 config.setOptions (btagWP=
'FixedCutBEff_65')
82 config.setOptions (saveScores=
'All')
84 config.addBlock(
'Jets.JVT', containerName=
'AnaJets')
86 bjetTriggerChainsPerYear = {
87 2022: [
'HLT_2j45_0eta290_020jvt_bdl1d60_2j45_pf_ftf_presel2j25XX2j25b85_L14J15p0ETA25'],
88 2023: [
'HLT_2j45_0eta290_020jvt_bgn160_2j45_pf_ftf_presel2j25XX2j25b85_L14J15p0ETA25'],
89 2024: [
'HLT_2j45_0eta290_020jvt_bgn260_2j45_pf_ftf_presel2j25XX2j25bgtwo85_L14jJ40p0ETA25'],
91 config.addBlock(
'Jets.FTagTriggerMatching' )
92 config.setOptions (containerName=
'AnaJets')
93 config.setOptions (triggerChainsPerYear=bjetTriggerChainsPerYear)
95 config.addBlock(
'Jets.FlavourTaggingEventSF')
96 config.setOptions (containerName=
'AnaJets.baselineJvt')
97 config.setOptions (btagger=
'GN2v01')
100 config.addBlock(
'Jets')
101 config.setOptions (containerName=
'AnaLargeRJets')
102 config.setOptions (jetCollection=
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets')
103 config.setOptions (recalibratePhyslite=
False)
106 config.addBlock (
'Electrons')
107 config.setOptions (containerName=
'AnaElectrons')
108 config.setOptions (forceFullSimConfigForIso=
True)
109 config.setOptions (recalibratePhyslite=
False)
110 config.setOptions (decorateTruth=
True)
111 config.setOptions (decorateCaloClusterEta=
True)
112 config.setOptions (writeTrackD0Z0=
True)
113 config.setOptions (minPt=10000.0)
115 config.addBlock (
'Electrons.WorkingPoint')
116 config.setOptions (containerName=
'AnaElectrons')
117 config.setOptions (selectionName=
'loose')
118 config.setOptions (forceFullSimConfig=
True)
119 config.setOptions (identificationWP=
'LooseBLayerLH')
120 config.setOptions (isolationWP=
'Tight_VarRad')
121 config.setOptions (chargeIDSelectionRun2=
True)
122 config.setOptions (addChargeMisIDSF=
True)
124 config.addBlock (
'Electrons.PtEtaSelection')
125 config.setOptions (containerName=
'AnaElectrons')
126 config.setOptions (minPt=10000.0)
128 config.addBlock (
'Electrons.IFFClassification')
129 config.setOptions (containerName=
'AnaElectrons')
131 config.addBlock (
'Electrons.MCTCClassification')
132 config.setOptions (containerName=
'AnaElectrons')
133 config.setOptions (prefix=
'truth_')
136 config.addBlock (
'Photons', containerName=
'AnaPhotons')
137 config.setOptions (forceFullSimConfigForIso=
True)
138 config.setOptions (recomputeIsEM=
False)
139 config.setOptions (recalibratePhyslite=
False)
140 config.setOptions (decorateTruth=
True)
142 config.addBlock (
'Photons.WorkingPoint')
143 config.setOptions (containerName=
'AnaPhotons')
144 config.setOptions (selectionName=
'tight')
145 config.setOptions (forceFullSimConfigForID=
True)
146 config.setOptions (forceFullSimConfigForIso=
True)
147 config.setOptions (qualityWP=
'Tight')
148 config.setOptions (isolationWP=
'FixedCutTight')
149 config.setOptions (recomputeIsEM=
False)
151 config.addBlock (
'Photons.PtEtaSelection')
152 config.setOptions (containerName=
'AnaPhotons')
153 config.setOptions (minPt=10000.0)
156 config.addBlock (
'Muons', containerName=
'AnaMuons')
157 config.setOptions (recalibratePhyslite=
False)
158 config.setOptions (decorateTruth=
True)
159 config.setOptions (writeTrackD0Z0=
True)
161 config.addBlock (
'Muons.WorkingPoint')
162 config.setOptions (containerName=
'AnaMuons')
163 config.setOptions (selectionName=
'medium')
164 config.setOptions (quality=
'Medium')
165 config.setOptions (isolation=
'Loose_VarRad')
167 config.addBlock (
'Muons.IFFClassification')
168 config.setOptions (containerName=
'AnaMuons')
170 config.addBlock (
'Muons.MCTCClassification')
171 config.setOptions (containerName=
'AnaMuons')
172 config.setOptions (prefix=
'truth_')
175 config.addBlock (
'TauJets', containerName=
'AnaTauJets')
176 config.setOptions (decorateTruth=
True)
178 config.addBlock (
'TauJets.WorkingPoint')
179 config.setOptions (containerName=
'AnaTauJets')
180 config.setOptions (selectionName=
'tight')
181 config.setOptions (quality=
'Tight')
183 tauTriggerChainsSF = {
184 2015: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
185 2016: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
186 2017: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
187 2018: [
'HLT_tau25_medium1_tracktwoEF',
'HLT_tau35_medium1_tracktwoEF'],
188 2022: [
'HLT_tau25_mediumRNN_tracktwoMVA',
'HLT_tau35_mediumRNN_tracktwoMVA'],
189 2023: [
'HLT_tau25_mediumRNN_tracktwoMVA',
'HLT_tau35_mediumRNN_tracktwoMVA'],
191 config.addBlock (
'TauJets.TriggerSF')
192 config.setOptions (containerName=
'AnaTauJets')
193 config.setOptions (tauID=
'Tight')
194 config.setOptions (triggerChainsPerYear=tauTriggerChainsSF)
196 config.addBlock (
'TauJets.MCTCClassification')
197 config.setOptions (containerName=
'AnaTauJets')
198 config.setOptions (prefix=
'truth_')
200 config.addBlock (
'SystObjectLink')
201 config.setOptions (containerName=
'AnaJets')
202 config.addBlock (
'SystObjectLink')
203 config.setOptions (containerName=
'AnaLargeRJets')
204 config.addBlock (
'SystObjectLink')
205 config.setOptions (containerName=
'AnaElectrons')
206 config.addBlock (
'SystObjectLink')
207 config.setOptions (containerName=
'AnaPhotons')
208 config.addBlock (
'SystObjectLink')
209 config.setOptions (containerName=
'AnaMuons')
210 config.addBlock (
'SystObjectLink')
211 config.setOptions (containerName=
'AnaTauJets')
213 config.addBlock (
'ObjectCutFlow')
214 config.setOptions (containerName=
'AnaJets')
215 config.setOptions (selectionName=
'jvt')
216 config.addBlock (
'ObjectCutFlow')
217 config.setOptions (containerName=
'AnaElectrons')
218 config.setOptions (selectionName=
'loose')
219 config.addBlock (
'ObjectCutFlow')
220 config.setOptions (containerName=
'AnaPhotons')
221 config.setOptions (selectionName=
'tight')
222 config.addBlock (
'ObjectCutFlow')
223 config.setOptions (containerName=
'AnaMuons')
224 config.setOptions (selectionName=
'medium')
225 config.addBlock (
'ObjectCutFlow')
226 config.setOptions (containerName=
'AnaTauJets')
227 config.setOptions (selectionName=
'tight')
230 config.addBlock(
'GeneratorLevelAnalysis')
233 config.addBlock (
'MissingET')
234 config.setOptions (containerName=
'AnaMET')
235 config.setOptions (jets=
'AnaJets')
236 config.setOptions (taus=
'AnaTauJets.tight')
237 config.setOptions (electrons=
'AnaElectrons.loose')
238 config.setOptions (photons=
'AnaPhotons.tight')
239 config.setOptions (muons=
'AnaMuons.medium')
242 config.addBlock(
'OverlapRemoval' )
243 config.setOptions (inputLabel=
'preselectOR')
244 config.setOptions (outputLabel=
'passesOR' )
245 config.setOptions (jets=
'AnaJets.baselineJvt')
246 config.setOptions (taus=
'AnaTauJets.tight')
247 config.setOptions (electrons=
'AnaElectrons.loose')
248 config.setOptions (photons=
'AnaPhotons.tight')
249 config.setOptions (muons=
'AnaMuons.medium')
252 config.addBlock (
'PL_Electrons')
253 config.setOptions (containerName=
'TruthElectrons')
254 config.addBlock (
'PL_Electrons.PtEtaSelection')
255 config.setOptions (containerName=
'TruthElectrons')
256 config.setOptions (skipOnData=
True)
257 config.setOptions (useDressedProperties=
True)
258 config.setOptions (minPt=20e3)
259 config.addBlock (
'PL_Electrons.MCTCClassification')
260 config.setOptions (containerName=
'TruthElectrons')
261 config.setOptions (prefix=
'')
263 config.addBlock (
'PL_Photons')
264 config.setOptions (containerName=
'TruthPhotons')
265 config.addBlock (
'PL_Photons.PtEtaSelection')
266 config.setOptions (containerName=
'TruthPhotons')
267 config.setOptions (skipOnData=
True)
268 config.setOptions (minPt=20e3)
270 config.addBlock (
'PL_Muons')
271 config.setOptions (containerName=
'TruthMuons')
272 config.addBlock (
'PL_Muons.PtEtaSelection')
273 config.setOptions (containerName=
'TruthMuons')
274 config.setOptions (skipOnData=
True)
275 config.setOptions (useDressedProperties=
True)
276 config.setOptions (minPt=20e3)
277 config.addBlock (
'PL_Muons.MCTCClassification')
278 config.setOptions (containerName=
'TruthMuons')
279 config.setOptions (prefix=
'')
281 config.addBlock (
'PL_Taus')
282 config.setOptions (containerName=
'TruthTaus')
283 config.addBlock (
'PL_Taus.PtEtaSelection')
284 config.setOptions (containerName=
'TruthTaus')
285 config.setOptions (skipOnData=
True)
286 config.setOptions (minPt=20e3)
287 config.addBlock (
'PL_Taus.MCTCClassification')
288 config.setOptions (containerName=
'TruthTaus')
289 config.setOptions (prefix=
'')
291 config.addBlock (
'PL_Jets')
292 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
293 config.addBlock (
'PL_Jets.PtEtaSelection')
294 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
295 config.setOptions (skipOnData=
True)
296 config.setOptions (minPt=20e3)
298 config.addBlock (
'PL_Neutrinos')
299 config.setOptions (skipOnData=
True)
300 config.addBlock (
'PL_MissingET')
301 config.setOptions (skipOnData=
True)
303 config.addBlock (
'PL_OverlapRemoval')
304 config.setOptions (skipOnData=
True)
305 config.setOptions (electrons=
'TruthElectrons')
306 config.setOptions (muons=
'TruthMuons')
307 config.setOptions (photons=
'TruthPhotons')
308 config.setOptions (jets=
'AntiKt4TruthDressedWZJets')
309 config.setOptions (useRapidityForDeltaR=
False)
312 config.addBlock (
'Thinning')
313 config.setOptions (containerName=
'AnaElectrons')
314 config.setOptions (selectionName=
'loose')
315 config.setOptions (outputName=
'OutElectrons')
316 config.addBlock (
'Thinning')
317 config.setOptions (containerName=
'AnaPhotons')
318 config.setOptions (selectionName=
'tight')
319 config.setOptions (outputName=
'OutPhotons')
320 config.addBlock (
'Thinning')
321 config.setOptions (containerName=
'AnaMuons')
322 config.setOptions (selectionName=
'medium')
323 config.setOptions (outputName=
'OutMuons')
324 config.addBlock (
'Thinning')
325 config.setOptions (containerName=
'AnaTauJets')
326 config.setOptions (selectionName=
'tight')
327 config.setOptions (outputName=
'OutTauJets')
328 config.addBlock (
'Thinning')
329 config.setOptions (containerName=
'AnaJets')
330 config.setOptions (outputName=
'OutJets')
331 config.addBlock (
'Thinning')
332 config.setOptions (containerName=
'AnaLargeRJets')
333 config.setOptions (outputName=
'OutLargeRJets')
334 config.addBlock (
'Thinning')
335 config.setOptions (containerName=
'TruthElectrons')
336 config.setOptions (skipOnData=
True)
337 config.setOptions (outputName=
'OutTruthElectrons')
338 config.addBlock (
'Thinning')
339 config.setOptions (containerName=
'TruthPhotons')
340 config.setOptions (skipOnData=
True)
341 config.setOptions (outputName=
'OutTruthPhotons')
342 config.addBlock (
'Thinning')
343 config.setOptions (containerName=
'TruthMuons')
344 config.setOptions (skipOnData=
True)
345 config.setOptions (outputName=
'OutTruthMuons')
346 config.addBlock (
'Thinning')
347 config.setOptions (containerName=
'TruthTaus')
348 config.setOptions (skipOnData=
True)
349 config.setOptions (outputName=
'OutTruthTaus')
350 config.addBlock (
'Thinning')
351 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
352 config.setOptions (outputName=
'OutTruthJets')
353 config.setOptions (skipOnData=
True)
356 triggerChainsPerYear = {
357 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40',
'HLT_2g20_tight'],
358 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50',
'HLT_g35_loose_g25_loose'],
359 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_2g22_tight_L12EM15VHI',
'HLT_mu50'],
360 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'],
362 triggerMatchingChainsPerYear = {
363 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40'],
364 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50'],
365 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu50'],
366 2018: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium'],
368 config.addBlock (
'Trigger')
369 config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
370 config.setOptions (noFilter=
True)
371 config.setOptions (electrons=
'AnaElectrons.loose')
372 config.setOptions (photons=
'AnaPhotons.tight')
373 config.setOptions (muons=
'AnaMuons.medium')
374 config.setOptions (taus=
'AnaTauJets.tight')
375 config.setOptions (electronID=
'Tight')
376 config.setOptions (electronIsol=
'Tight_VarRad')
377 config.setOptions (photonIsol=
'TightCaloOnly')
378 config.setOptions (muonID=
'Tight')
379 config.setOptions (triggerMatchingChainsPerYear=triggerMatchingChainsPerYear)
383 exampleSelectionCuts = {
384 'SUBcommon':
"""JET_N_BTAG >= 2
389 'ejets':
"""IMPORT SUBcommon
396 'mujets':
"""IMPORT SUBcommon
398 MU_N medium 25000 > 0
402 config.addBlock (
'EventSelection')
403 config.setOptions (electrons=
'AnaElectrons.loose')
404 config.setOptions (muons=
'AnaMuons.medium')
405 config.setOptions (jets=
'AnaJets.baselineJvt')
406 config.setOptions (met=
'AnaMET')
407 config.setOptions (btagDecoration=
'ftag_select_ftag')
408 config.setOptions (noFilter=
True)
409 config.setOptions (cutFlowHistograms=
True)
410 config.setOptions (selectionCutsDict=exampleSelectionCuts)
413 config.addBlock (
'Bootstraps')
414 config.setOptions (nReplicas=2000)
415 config.setOptions (skipOnMC=
False)
418 config.addBlock (
'LeptonSF')
419 config.setOptions (muons=
'AnaMuons.medium')
420 config.setOptions (photons=
'AnaPhotons.tight')
421 config.setOptions (lepton_postfix=
'nominal')
426 'el_':
'OutElectrons',
427 'ph_' :
'OutPhotons',
428 'tau_':
'OutTauJets',
430 'larger_jet_':
'OutLargeRJets',
433 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
434 'truth_el_' :
'OutTruthElectrons',
435 'truth_ph_' :
'OutTruthPhotons',
436 'truth_tau_':
'OutTruthTaus',
437 'truth_jet_':
'OutTruthJets',
438 'truth_met_':
'TruthMET'}
439 config.addBlock (
'Output')
440 config.setOptions (treeName=
'analysis')
441 config.setOptions (vars=[
442 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
444 config.setOptions (metVars=[
445 'AnaMET_%SYS%.met -> met_%SYS%',
447 config.setOptions (truthMetVars=[
448 'TruthMET_NOSYS.met -> truth_met',
450 config.setOptions (containers=outputContainers)
451 config.setOptions (containersOnlyForMC=outputContainersForMC)
452 config.setOptions (commands=[
453 "disable actualInteractionsPerCrossing",
457 config.addBlock (
'PrintConfiguration')
460 configSeq = config.configure()
463 textConfig = TextConfig(yamlPath)
464 textConfigSeq = textConfig.configure()