8 """Compares two ConfigSequences"""
10 blocks2 = seq2._blocks
11 print(
"Block order for each config sequence")
12 print(
"\033[4m{0:<30} {1:<30}\033[0m".
format(
"Sequence1",
"Sequence2"))
13 for i
in range(
max(len(blocks1), len(blocks2))):
16 name1 = blocks1[i].__class__.__name__
18 name2 = blocks2[i].__class__.__name__
19 print(f
"{name1:<30} {name2}")
21 print(
"Sorting blocks by name (will not sort blocks with same name)")
22 blocks1.sort(key=
lambda x: x.__class__.__name__)
23 blocks2.sort(key=
lambda x: x.__class__.__name__)
24 if len(blocks1) != len(blocks2):
25 raise Exception(
"Number of blocks are different")
26 for i
in range(len(blocks1)):
29 name1 = block1.__class__.__name__
30 name2 = block2.__class__.__name__
32 raise Exception(f
"In position {i} "
33 f
"the first sequence results in {name1} "
34 f
"and the second sequence results in {name2}")
35 for name
in block1.getOptions():
36 if name ==
'groupName':
38 value1 = block1.getOptionValue(name)
39 value2 = block2.getOptionValue(name)
41 raise Exception(f
"For block {name1}, the block "
42 f
"option {name} the first sequence results in {value1} "
43 f
"and the second sequence results in {value2}")
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(filterSystematics=
"^(?:(?!PseudoData).)*$")
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)
76 config.addBlock(
'Jets.FlavourTagging')
77 config.setOptions (containerName=
'AnaJets')
78 config.setOptions (selectionName=
'ftag')
79 config.setOptions (noEffSF=
True)
80 config.setOptions (btagger=
'DL1dv01')
81 config.setOptions (btagWP=
'FixedCutBEff_60')
83 config.addBlock(
'Jets.JVT', containerName=
'AnaJets')
85 config.addBlock (
'Jets.PtEtaSelection')
86 config.setOptions (containerName=
'AnaJets')
87 config.setOptions (selectionDecoration=
'selectPtEta')
90 config.addBlock (
'Electrons')
91 config.setOptions (containerName=
'AnaElectrons')
92 config.setOptions (forceFullSimConfig=
True)
94 config.addBlock (
'Electrons.WorkingPoint')
95 config.setOptions (containerName=
'AnaElectrons')
96 config.setOptions (selectionName=
'loose')
97 config.setOptions (forceFullSimConfig=
True)
98 config.setOptions (noEffSF=
True)
99 config.setOptions (likelihoodWP=
'LooseBLayerLH')
100 config.setOptions (isolationWP=
'Loose_VarRad')
101 config.setOptions (recomputeLikelihood=
False)
102 config.setOptions (writeTrackD0Z0=
True)
104 config.addBlock (
'Electrons.PtEtaSelection')
105 config.setOptions (containerName=
'AnaElectrons')
106 config.setOptions (selectionDecoration=
'selectPtEta')
107 config.setOptions (minPt=10000.0)
110 config.addBlock (
'Photons', containerName=
'AnaPhotons')
111 config.setOptions (forceFullSimConfig=
True)
112 config.setOptions (recomputeIsEM=
False)
114 config.addBlock (
'Photons.WorkingPoint')
115 config.setOptions (containerName=
'AnaPhotons')
116 config.setOptions (selectionName=
'tight')
117 config.setOptions (forceFullSimConfig=
True)
118 config.setOptions (noEffSF=
True)
119 config.setOptions (qualityWP=
'Tight')
120 config.setOptions (isolationWP=
'FixedCutTight')
121 config.setOptions (recomputeIsEM=
False)
123 config.addBlock (
'Photons.PtEtaSelection')
124 config.setOptions (containerName=
'AnaPhotons')
125 config.setOptions (selectionDecoration=
'selectPtEta')
126 config.setOptions (minPt=10000.0)
129 config.addBlock (
'Muons', containerName=
'AnaMuons')
131 config.addBlock (
'Muons.WorkingPoint')
132 config.setOptions (containerName=
'AnaMuons')
133 config.setOptions (selectionName=
'medium')
134 config.setOptions (quality=
'Medium')
135 config.setOptions (isolation=
'Loose_VarRad')
136 config.setOptions (onlyRecoEffSF=
True)
137 config.setOptions (writeTrackD0Z0=
True)
139 config.addBlock (
'Muons.PtEtaSelection')
140 config.setOptions (containerName=
'AnaMuons')
141 config.setOptions (selectionDecoration=
'selectPtEta')
144 config.addBlock (
'TauJets', containerName=
'AnaTauJets')
146 config.addBlock (
'TauJets.WorkingPoint')
147 config.setOptions (containerName=
'AnaTauJets')
148 config.setOptions (selectionName=
'tight')
149 config.setOptions (quality=
'Tight')
151 config.addBlock (
'TauJets.PtEtaSelection')
152 config.setOptions (containerName=
'AnaTauJets')
153 config.setOptions (selectionDecoration=
'selectPtEta')
155 config.addBlock (
'SystObjectLink')
156 config.setOptions (containerName=
'AnaJets')
157 config.addBlock (
'SystObjectLink')
158 config.setOptions (containerName=
'AnaElectrons')
159 config.addBlock (
'SystObjectLink')
160 config.setOptions (containerName=
'AnaPhotons')
161 config.addBlock (
'SystObjectLink')
162 config.setOptions (containerName=
'AnaMuons')
163 config.addBlock (
'SystObjectLink')
164 config.setOptions (containerName=
'AnaTauJets')
166 config.addBlock (
'ObjectCutFlow')
167 config.setOptions (containerName=
'AnaJets')
168 config.setOptions (selectionName=
'jvt')
169 config.addBlock (
'ObjectCutFlow')
170 config.setOptions (containerName=
'AnaElectrons')
171 config.setOptions (selectionName=
'loose')
172 config.addBlock (
'ObjectCutFlow')
173 config.setOptions (containerName=
'AnaPhotons')
174 config.setOptions (selectionName=
'tight')
175 config.addBlock (
'ObjectCutFlow')
176 config.setOptions (containerName=
'AnaMuons')
177 config.setOptions (selectionName=
'medium')
178 config.addBlock (
'ObjectCutFlow')
179 config.setOptions (containerName=
'AnaTauJets')
180 config.setOptions (selectionName=
'tight')
183 config.addBlock(
'GeneratorLevelAnalysis')
184 config.setOptions (saveCutBookkeepers=
True)
185 config.setOptions (runNumber=284500)
186 config.setOptions (cutBookkeepersSystematics=
True)
189 config.addBlock (
'MissingET')
190 config.setOptions (containerName=
'AnaMET')
191 config.setOptions (jets=
'AnaJets')
192 config.setOptions (taus=
'AnaTauJets.tight')
193 config.setOptions (electrons=
'AnaElectrons.loose')
194 config.setOptions (photons=
'AnaPhotons.tight')
195 config.setOptions (muons=
'AnaMuons.medium')
198 config.addBlock(
'OverlapRemoval' )
199 config.setOptions (inputLabel=
'preselectOR')
200 config.setOptions (outputLabel=
'passesOR' )
201 config.setOptions (jets=
'AnaJets')
202 config.setOptions (taus=
'AnaTauJets.tight')
203 config.setOptions (electrons=
'AnaElectrons.loose')
204 config.setOptions (photons=
'AnaPhotons.tight')
205 config.setOptions (muons=
'AnaMuons.medium')
208 config.addBlock (
'Thinning')
209 config.setOptions (containerName=
'AnaElectrons')
210 config.setOptions (selectionName=
'loose')
211 config.setOptions (outputName=
'OutElectrons')
212 config.addBlock (
'Thinning')
213 config.setOptions (containerName=
'AnaPhotons')
214 config.setOptions (selectionName=
'tight')
215 config.setOptions (outputName=
'OutPhotons')
216 config.addBlock (
'Thinning')
217 config.setOptions (containerName=
'AnaMuons')
218 config.setOptions (selectionName=
'medium')
219 config.setOptions (outputName=
'OutMuons')
220 config.addBlock (
'Thinning')
221 config.setOptions (containerName=
'AnaTauJets')
222 config.setOptions (selectionName=
'tight')
223 config.setOptions (outputName=
'OutTauJets')
224 config.addBlock (
'Thinning')
225 config.setOptions (containerName=
'AnaJets')
226 config.setOptions (outputName=
'OutJets')
228 config.addBlock (
'Output')
229 config.setOptions (treeName=
'analysis')
230 config.setOptions (vars=[])
231 config.setOptions (metVars=[])
234 'el_':
'OutElectrons',
235 'ph_' :
'OutPhotons',
236 'tau_':
'OutTauJets',
240 config.setOptions (containers=outputContainers)
242 'disable jet_select_baselineJvt.*',
243 'disable mu_select_medium.*',
244 'disable ph_select_tight.*',
245 'disable tau_select_tight.*',
246 'disable el_select_loose.*',
248 config.setOptions (commands=disable_commands)
251 configSeq = config.configure()
254 textConfig = TextConfig(yamlPath)
255 textConfigSeq = textConfig.configure()
263 Create a configSequence using provided YAML file and a
264 configSequence using the block configuration and compare.
266 Will raise an exception if configSequences differ
269 from AnalysisAlgorithmsConfig.FullCPAlgorithmsTest
import makeSequenceBlocks
271 forCompare=
True, isPhyslite=
False, forceEGammaFullSimConfig=
True,
272 returnConfigSeq=
True)
275 from AnalysisAlgorithmsConfig.ConfigText
import TextConfig
276 textConfig = TextConfig(yamlPath)
277 textConfigSeq = textConfig.configure()
283 if __name__ ==
'__main__':
286 parser = optparse.OptionParser()
287 parser.add_option(
'--text-config', dest=
'text_config',
288 default=
'', action=
'store',
289 help=
'YAML file used in unit test')
290 parser.add_option(
'--compare-block', dest=
'compare_block',
291 default=
False, action=
'store_true',
292 help=
'Compare config sequence from YAML and block configuration')
293 parser.add_option(
'--compare-builder', dest=
'compare_builder',
294 default=
False, action=
'store_true',
295 help=
'Compare config sequence from YAML and python configuration')
296 parser.add_option(
'--check-order', dest=
'check_order',
297 default=
False, action=
'store_true',
298 help=
'Require blocks to be in the same order')
299 (options, args) = parser.parse_args()
300 textConfig = options.text_config
301 compareBlock = options.compare_block
302 compareBuilder = options.compare_builder
303 checkOrder = options.check_order
305 if not os.path.isfile(textConfig):
306 raise FileNotFoundError(f
"{textConfig} is not a file")
310 print(
"Comparing config sequences from the block and text"
311 "configuration methods")
315 print(
"Comparing config sequences from the block and block"
316 "configuration methods")