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')
62 config.addBlock(
'PileupReweighting')
65 config.addBlock(
'EventCleaning')
66 config.setOptions (runEventCleaning=
True)
69 config.addBlock(
'Jets')
70 config.setOptions (containerName=
'AnaJets')
71 config.setOptions (jetCollection=
'AntiKt4EMPFlowJets')
72 config.setOptions (runJvtUpdate=
False)
73 config.setOptions (runNNJvtUpdate=
True)
74 config.setOptions (recalibratePhyslite=
False)
76 config.addBlock(
'Jets.FlavourTagging')
77 config.setOptions (containerName=
'AnaJets')
78 config.setOptions (selectionName=
'ftag')
79 config.setOptions (btagger=
'GN2v01')
80 config.setOptions (btagWP=
'FixedCutBEff_65')
81 config.setOptions (saveScores=
'All')
83 config.addBlock(
'Jets.FlavourTaggingEventSF')
84 config.setOptions (containerName=
'AnaJets.baselineJvt')
85 config.setOptions (btagger=
'GN2v01')
87 config.addBlock(
'Jets.JVT', containerName=
'AnaJets')
90 config.addBlock(
'Jets')
91 config.setOptions (containerName=
'AnaLargeRJets')
92 config.setOptions (jetCollection=
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets')
93 config.setOptions (recalibratePhyslite=
False)
96 config.addBlock (
'Electrons')
97 config.setOptions (containerName=
'AnaElectrons')
98 config.setOptions (forceFullSimConfigForIso=
True)
99 config.setOptions (recalibratePhyslite=
False)
100 config.setOptions (decorateTruth=
True)
101 config.setOptions (decorateCaloClusterEta=
True)
102 config.setOptions (writeTrackD0Z0=
True)
104 config.addBlock (
'Electrons.WorkingPoint')
105 config.setOptions (containerName=
'AnaElectrons')
106 config.setOptions (selectionName=
'loose')
107 config.setOptions (forceFullSimConfig=
True)
108 config.setOptions (noEffSF=
True)
109 config.setOptions (identificationWP=
'LooseBLayerLH')
110 config.setOptions (isolationWP=
'Loose_VarRad')
112 config.addBlock (
'Electrons.PtEtaSelection')
113 config.setOptions (containerName=
'AnaElectrons')
114 config.setOptions (minPt=10000.0)
116 config.addBlock (
'Electrons.IFFClassification')
117 config.setOptions (containerName=
'AnaElectrons')
119 config.addBlock (
'Electrons.MCTCClassification')
120 config.setOptions (containerName=
'AnaElectrons')
121 config.setOptions (prefix=
'truth_')
124 config.addBlock (
'Photons', containerName=
'AnaPhotons')
125 config.setOptions (forceFullSimConfigForIso=
True)
126 config.setOptions (recomputeIsEM=
False)
127 config.setOptions (recalibratePhyslite=
False)
128 config.setOptions (decorateTruth=
True)
130 config.addBlock (
'Photons.WorkingPoint')
131 config.setOptions (containerName=
'AnaPhotons')
132 config.setOptions (selectionName=
'tight')
133 config.setOptions (forceFullSimConfigForID=
True)
134 config.setOptions (forceFullSimConfigForIso=
True)
135 config.setOptions (qualityWP=
'Tight')
136 config.setOptions (isolationWP=
'FixedCutTight')
137 config.setOptions (recomputeIsEM=
False)
139 config.addBlock (
'Photons.PtEtaSelection')
140 config.setOptions (containerName=
'AnaPhotons')
141 config.setOptions (minPt=10000.0)
144 config.addBlock (
'Muons', containerName=
'AnaMuons')
145 config.setOptions (recalibratePhyslite=
False)
146 config.setOptions (decorateTruth=
True)
147 config.setOptions (writeTrackD0Z0=
True)
149 config.addBlock (
'Muons.WorkingPoint')
150 config.setOptions (containerName=
'AnaMuons')
151 config.setOptions (selectionName=
'medium')
152 config.setOptions (quality=
'Medium')
153 config.setOptions (isolation=
'Loose_VarRad')
155 config.addBlock (
'Muons.IFFClassification')
156 config.setOptions (containerName=
'AnaMuons')
158 config.addBlock (
'Muons.MCTCClassification')
159 config.setOptions (containerName=
'AnaMuons')
160 config.setOptions (prefix=
'truth_')
163 config.addBlock (
'TauJets', containerName=
'AnaTauJets')
164 config.setOptions (decorateTruth=
True)
166 config.addBlock (
'TauJets.WorkingPoint')
167 config.setOptions (containerName=
'AnaTauJets')
168 config.setOptions (selectionName=
'tight')
169 config.setOptions (quality=
'Tight')
171 tauTriggerChainsSF = {
172 2015: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
173 2016: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
174 2017: [
'HLT_tau25_medium1_tracktwo',
'HLT_tau35_medium1_tracktwo'],
175 2018: [
'HLT_tau25_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA',
'HLT_tau35_medium1_tracktwoEF_OR_mediumRNN_tracktwoMVA'],
177 config.addBlock (
'TauJets.TriggerSF')
178 config.setOptions (containerName=
'AnaTauJets')
179 config.setOptions (tauID=
'Tight')
180 config.setOptions (triggerChainsPerYear=tauTriggerChainsSF)
182 config.addBlock (
'TauJets.MCTCClassification')
183 config.setOptions (containerName=
'AnaTauJets')
184 config.setOptions (prefix=
'truth_')
186 config.addBlock (
'SystObjectLink')
187 config.setOptions (containerName=
'AnaJets')
188 config.addBlock (
'SystObjectLink')
189 config.setOptions (containerName=
'AnaLargeRJets')
190 config.addBlock (
'SystObjectLink')
191 config.setOptions (containerName=
'AnaElectrons')
192 config.addBlock (
'SystObjectLink')
193 config.setOptions (containerName=
'AnaPhotons')
194 config.addBlock (
'SystObjectLink')
195 config.setOptions (containerName=
'AnaMuons')
196 config.addBlock (
'SystObjectLink')
197 config.setOptions (containerName=
'AnaTauJets')
199 config.addBlock (
'ObjectCutFlow')
200 config.setOptions (containerName=
'AnaJets')
201 config.setOptions (selectionName=
'jvt')
202 config.addBlock (
'ObjectCutFlow')
203 config.setOptions (containerName=
'AnaElectrons')
204 config.setOptions (selectionName=
'loose')
205 config.addBlock (
'ObjectCutFlow')
206 config.setOptions (containerName=
'AnaPhotons')
207 config.setOptions (selectionName=
'tight')
208 config.addBlock (
'ObjectCutFlow')
209 config.setOptions (containerName=
'AnaMuons')
210 config.setOptions (selectionName=
'medium')
211 config.addBlock (
'ObjectCutFlow')
212 config.setOptions (containerName=
'AnaTauJets')
213 config.setOptions (selectionName=
'tight')
216 config.addBlock(
'GeneratorLevelAnalysis')
219 config.addBlock (
'MissingET')
220 config.setOptions (containerName=
'AnaMET')
221 config.setOptions (jets=
'AnaJets')
222 config.setOptions (taus=
'AnaTauJets.tight')
223 config.setOptions (electrons=
'AnaElectrons.loose')
224 config.setOptions (photons=
'AnaPhotons.tight')
225 config.setOptions (muons=
'AnaMuons.medium')
228 config.addBlock(
'OverlapRemoval' )
229 config.setOptions (inputLabel=
'preselectOR')
230 config.setOptions (outputLabel=
'passesOR' )
231 config.setOptions (jets=
'AnaJets.baselineJvt')
232 config.setOptions (taus=
'AnaTauJets.tight')
233 config.setOptions (electrons=
'AnaElectrons.loose')
234 config.setOptions (photons=
'AnaPhotons.tight')
235 config.setOptions (muons=
'AnaMuons.medium')
238 config.addBlock (
'PL_Electrons')
239 config.setOptions (containerName=
'TruthElectrons')
240 config.addBlock (
'PL_Electrons.PtEtaSelection')
241 config.setOptions (containerName=
'TruthElectrons')
242 config.setOptions (skipOnData=
True)
243 config.setOptions (useDressedProperties=
True)
244 config.setOptions (minPt=20e3)
245 config.addBlock (
'PL_Electrons.MCTCClassification')
246 config.setOptions (containerName=
'TruthElectrons')
247 config.setOptions (prefix=
'')
249 config.addBlock (
'PL_Photons')
250 config.setOptions (containerName=
'TruthPhotons')
251 config.addBlock (
'PL_Photons.PtEtaSelection')
252 config.setOptions (containerName=
'TruthPhotons')
253 config.setOptions (skipOnData=
True)
254 config.setOptions (minPt=20e3)
256 config.addBlock (
'PL_Muons')
257 config.setOptions (containerName=
'TruthMuons')
258 config.addBlock (
'PL_Muons.PtEtaSelection')
259 config.setOptions (containerName=
'TruthMuons')
260 config.setOptions (skipOnData=
True)
261 config.setOptions (useDressedProperties=
True)
262 config.setOptions (minPt=20e3)
263 config.addBlock (
'PL_Muons.MCTCClassification')
264 config.setOptions (containerName=
'TruthMuons')
265 config.setOptions (prefix=
'')
267 config.addBlock (
'PL_Taus')
268 config.setOptions (containerName=
'TruthTaus')
269 config.addBlock (
'PL_Taus.PtEtaSelection')
270 config.setOptions (containerName=
'TruthTaus')
271 config.setOptions (skipOnData=
True)
272 config.setOptions (minPt=20e3)
273 config.addBlock (
'PL_Taus.MCTCClassification')
274 config.setOptions (containerName=
'TruthTaus')
275 config.setOptions (prefix=
'')
277 config.addBlock (
'PL_Jets')
278 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
279 config.addBlock (
'PL_Jets.PtEtaSelection')
280 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
281 config.setOptions (skipOnData=
True)
282 config.setOptions (minPt=20e3)
284 config.addBlock (
'PL_Neutrinos')
285 config.setOptions (skipOnData=
True)
286 config.addBlock (
'PL_MissingET')
287 config.setOptions (skipOnData=
True)
289 config.addBlock (
'PL_OverlapRemoval')
290 config.setOptions (skipOnData=
True)
291 config.setOptions (electrons=
'TruthElectrons')
292 config.setOptions (muons=
'TruthMuons')
293 config.setOptions (photons=
'TruthPhotons')
294 config.setOptions (jets=
'AntiKt4TruthDressedWZJets')
295 config.setOptions (useRapidityForDeltaR=
False)
298 config.addBlock (
'Thinning')
299 config.setOptions (containerName=
'AnaElectrons')
300 config.setOptions (selectionName=
'loose')
301 config.setOptions (outputName=
'OutElectrons')
302 config.addBlock (
'Thinning')
303 config.setOptions (containerName=
'AnaPhotons')
304 config.setOptions (selectionName=
'tight')
305 config.setOptions (outputName=
'OutPhotons')
306 config.addBlock (
'Thinning')
307 config.setOptions (containerName=
'AnaMuons')
308 config.setOptions (selectionName=
'medium')
309 config.setOptions (outputName=
'OutMuons')
310 config.addBlock (
'Thinning')
311 config.setOptions (containerName=
'AnaTauJets')
312 config.setOptions (selectionName=
'tight')
313 config.setOptions (outputName=
'OutTauJets')
314 config.addBlock (
'Thinning')
315 config.setOptions (containerName=
'AnaJets')
316 config.setOptions (outputName=
'OutJets')
317 config.addBlock (
'Thinning')
318 config.setOptions (containerName=
'AnaLargeRJets')
319 config.setOptions (outputName=
'OutLargeRJets')
320 config.addBlock (
'Thinning')
321 config.setOptions (containerName=
'TruthElectrons')
322 config.setOptions (skipOnData=
True)
323 config.setOptions (outputName=
'OutTruthElectrons')
324 config.addBlock (
'Thinning')
325 config.setOptions (containerName=
'TruthPhotons')
326 config.setOptions (skipOnData=
True)
327 config.setOptions (outputName=
'OutTruthPhotons')
328 config.addBlock (
'Thinning')
329 config.setOptions (containerName=
'TruthMuons')
330 config.setOptions (skipOnData=
True)
331 config.setOptions (outputName=
'OutTruthMuons')
332 config.addBlock (
'Thinning')
333 config.setOptions (containerName=
'TruthTaus')
334 config.setOptions (skipOnData=
True)
335 config.setOptions (outputName=
'OutTruthTaus')
336 config.addBlock (
'Thinning')
337 config.setOptions (containerName=
'AntiKt4TruthDressedWZJets')
338 config.setOptions (outputName=
'OutTruthJets')
339 config.setOptions (skipOnData=
True)
342 triggerChainsPerYear = {
343 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40',
'HLT_2g20_tight'],
344 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50',
'HLT_g35_loose_g25_loose'],
345 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_2g22_tight_L12EM15VHI',
'HLT_mu50'],
346 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'],
348 triggerMatchingChainsPerYear = {
349 2015: [
'HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose',
'HLT_mu20_iloose_L1MU15 || HLT_mu40'],
350 2016: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium || HLT_mu50'],
351 2017: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu50'],
352 2018: [
'HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0',
'HLT_mu26_ivarmedium'],
354 config.addBlock (
'Trigger')
355 config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
356 config.setOptions (noFilter=
True)
357 config.setOptions (electrons=
'AnaElectrons.loose')
358 config.setOptions (photons=
'AnaPhotons.tight')
359 config.setOptions (muons=
'AnaMuons.medium')
360 config.setOptions (taus=
'AnaTauJets.tight')
361 config.setOptions (electronID=
'Tight')
362 config.setOptions (electronIsol=
'Tight_VarRad')
363 config.setOptions (photonIsol=
'TightCaloOnly')
364 config.setOptions (muonID=
'Tight')
365 config.setOptions (triggerMatchingChainsPerYear=triggerMatchingChainsPerYear)
369 exampleSelectionCuts = {
370 'SUBcommon':
"""JET_N_BTAG >= 2
375 'ejets':
"""IMPORT SUBcommon
382 'mujets':
"""IMPORT SUBcommon
384 MU_N medium 25000 > 0
388 config.addBlock (
'EventSelection')
389 config.setOptions (electrons=
'AnaElectrons.loose')
390 config.setOptions (muons=
'AnaMuons.medium')
391 config.setOptions (jets=
'AnaJets.baselineJvt')
392 config.setOptions (met=
'AnaMET')
393 config.setOptions (btagDecoration=
'ftag_select_ftag')
394 config.setOptions (noFilter=
True)
395 config.setOptions (cutFlowHistograms=
True)
396 config.setOptions (selectionCutsDict=exampleSelectionCuts)
399 config.addBlock (
'Bootstraps')
400 config.setOptions (nReplicas=2000)
401 config.setOptions (skipOnMC=
False)
404 config.addBlock (
'LeptonSF')
405 config.setOptions (muons=
'AnaMuons.medium')
406 config.setOptions (photons=
'AnaPhotons.tight')
407 config.setOptions (lepton_postfix=
'nominal')
412 'el_':
'OutElectrons',
413 'ph_' :
'OutPhotons',
414 'tau_':
'OutTauJets',
416 'larger_jet_':
'OutLargeRJets',
419 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
420 'truth_el_' :
'OutTruthElectrons',
421 'truth_ph_' :
'OutTruthPhotons',
422 'truth_tau_':
'OutTruthTaus',
423 'truth_jet_':
'OutTruthJets',
424 'truth_met_':
'TruthMET'}
425 config.addBlock (
'Output')
426 config.setOptions (treeName=
'analysis')
427 config.setOptions (vars=[
428 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
430 config.setOptions (metVars=[
431 'AnaMET_%SYS%.met -> met_%SYS%',
433 config.setOptions (truthMetVars=[
434 'TruthMET_NOSYS.met -> truth_met',
436 config.setOptions (containers=outputContainers)
437 config.setOptions (containersOnlyForMC=outputContainersForMC)
438 config.setOptions (commands=[
439 "disable actualInteractionsPerCrossing",
443 config.addBlock (
'PrintConfiguration')
446 configSeq = config.configure()
449 textConfig = TextConfig(yamlPath)
450 textConfigSeq = textConfig.configure()