ATLAS Offline Software
ConfigText_unitTest.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 #
5 # @author Joseph Lambert
6 
7 def compareConfigSeq(seq1, seq2, *, checkOrder=False):
8  """Compares two ConfigSequences"""
9  blocks1 = seq1._blocks
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))):
14  name1, name2 = '', ''
15  if i < len(blocks1):
16  name1 = blocks1[i].__class__.__name__
17  if i < len(blocks2):
18  name2 = blocks2[i].__class__.__name__
19  print(f"{name1:<30} {name2}")
20  if not checkOrder:
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)):
27  block1 = blocks1[i]
28  block2 = blocks2[i]
29  name1 = block1.__class__.__name__
30  name2 = block2.__class__.__name__
31  if name1 != name2:
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':
37  continue
38  value1 = block1.getOptionValue(name)
39  value2 = block2.getOptionValue(name)
40  if value1 != value2:
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}")
44 
45 
46 def compareTextBuilder(yamlPath='', *, checkOrder=False) :
47  """
48  Create a configSequence using provided YAML file and a
49  configSequence using ConfigText python commands and compare.
50 
51  Will raise an exception if configSequences differ
52  """
53  # create text config object to build text configurations
54  from AnalysisAlgorithmsConfig.ConfigText import TextConfig
55  config = TextConfig()
56 
57  # CommonServices
58  config.addBlock('CommonServices')
59  config.setOptions(systematicsHistogram='systematicsList')
60 
61  # PileupReweighting
62  config.addBlock('PileupReweighting')
63 
64  # EventCleaning
65  config.addBlock('EventCleaning')
66  config.setOptions (runEventCleaning=True)
67 
68  # Jets
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)
75  # Jets.FlavourTagging
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')
82  # Jets.JVT
83  config.addBlock('Jets.JVT', containerName='AnaJets')
84  # FTagJetTriggerMatching
85  bjetTriggerChainsPerYear = {
86  2022: ['HLT_2j45_0eta290_020jvt_bdl1d60_2j45_pf_ftf_presel2j25XX2j25b85_L14J15p0ETA25'],
87  2023: ['HLT_2j45_0eta290_020jvt_bgn160_2j45_pf_ftf_presel2j25XX2j25b85_L14J15p0ETA25'],
88  2024: ['HLT_2j45_0eta290_020jvt_bgn260_2j45_pf_ftf_presel2j25XX2j25bgtwo85_L14jJ40p0ETA25'],
89  }
90  config.addBlock( 'Jets.FTagTriggerMatching' )
91  config.setOptions (containerName='AnaJets')
92  config.setOptions (triggerChainsPerYear=bjetTriggerChainsPerYear)
93  # Jets.FlavourTaggingEventSF
94  config.addBlock( 'Jets.FlavourTaggingEventSF')
95  config.setOptions (containerName='AnaJets.baselineJvt')
96  config.setOptions (btagger='GN2v01')
97 
98  # Large-R jets
99  config.addBlock('Jets')
100  config.setOptions (containerName='AnaLargeRJets')
101  config.setOptions (jetCollection='AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets')
102  config.setOptions (recalibratePhyslite=False)
103 
104  # Electrons
105  config.addBlock ('Electrons')
106  config.setOptions (containerName='AnaElectrons')
107  config.setOptions (forceFullSimConfigForIso=True)
108  config.setOptions (recalibratePhyslite=False)
109  config.setOptions (decorateTruth=True)
110  config.setOptions (decorateCaloClusterEta=True)
111  config.setOptions (writeTrackD0Z0=True)
112  config.setOptions (minPt=10000.0)
113  # Electrons.WorkingPoint
114  config.addBlock ('Electrons.WorkingPoint')
115  config.setOptions (containerName='AnaElectrons')
116  config.setOptions (selectionName='loose')
117  config.setOptions (forceFullSimConfig=True)
118  config.setOptions (identificationWP='LooseBLayerLH')
119  config.setOptions (isolationWP='Tight_VarRad')
120  config.setOptions (chargeIDSelectionRun2=True)
121  config.setOptions (addChargeMisIDSF=True)
122  # Electrons.PtEtaSelection
123  config.addBlock ('Electrons.PtEtaSelection')
124  config.setOptions (containerName='AnaElectrons')
125  config.setOptions (minPt=10000.0)
126  # Electrons.IFFClassification
127  config.addBlock ('Electrons.IFFClassification')
128  config.setOptions (containerName='AnaElectrons')
129  # Electrons.MCTCClassification
130  config.addBlock ('Electrons.MCTCClassification')
131  config.setOptions (containerName='AnaElectrons')
132  config.setOptions (prefix='truth_')
133 
134  # Photons
135  config.addBlock ('Photons', containerName='AnaPhotons')
136  config.setOptions (forceFullSimConfigForIso=True)
137  config.setOptions (recomputeIsEM=False)
138  config.setOptions (recalibratePhyslite=False)
139  config.setOptions (decorateTruth=True)
140  # Photons.WorkingPoint
141  config.addBlock ('Photons.WorkingPoint')
142  config.setOptions (containerName='AnaPhotons')
143  config.setOptions (selectionName='tight')
144  config.setOptions (forceFullSimConfigForID=True)
145  config.setOptions (forceFullSimConfigForIso=True)
146  config.setOptions (qualityWP='Tight')
147  config.setOptions (isolationWP='FixedCutTight')
148  config.setOptions (recomputeIsEM=False)
149  # Photons.PtEtaSelection
150  config.addBlock ('Photons.PtEtaSelection')
151  config.setOptions (containerName='AnaPhotons')
152  config.setOptions (minPt=10000.0)
153 
154  # Muons
155  config.addBlock ('Muons', containerName='AnaMuons')
156  config.setOptions (recalibratePhyslite=False)
157  config.setOptions (decorateTruth=True)
158  config.setOptions (writeTrackD0Z0=True)
159  # Muons.WorkingPoint
160  config.addBlock ('Muons.WorkingPoint')
161  config.setOptions (containerName='AnaMuons')
162  config.setOptions (selectionName='medium')
163  config.setOptions (quality='Medium')
164  config.setOptions (isolation='Loose_VarRad')
165  # Muons.IFFClassification
166  config.addBlock ('Muons.IFFClassification')
167  config.setOptions (containerName='AnaMuons')
168  # Muons.MCTCClassification
169  config.addBlock ('Muons.MCTCClassification')
170  config.setOptions (containerName='AnaMuons')
171  config.setOptions (prefix='truth_')
172 
173  # TauJets
174  config.addBlock ('TauJets', containerName='AnaTauJets')
175  config.setOptions (decorateTruth=True)
176  # TauJets.WorkingPoint
177  config.addBlock ('TauJets.WorkingPoint')
178  config.setOptions (containerName='AnaTauJets')
179  config.setOptions (selectionName='tight')
180  config.setOptions (quality='Tight')
181  # TauJets.TriggerSF
182  tauTriggerChainsSF = {
183  2015: ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
184  2016: ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
185  2017: ['HLT_tau25_medium1_tracktwo', 'HLT_tau35_medium1_tracktwo'],
186  2018: ['HLT_tau25_medium1_tracktwoEF', 'HLT_tau35_medium1_tracktwoEF'],
187  2022: ['HLT_tau25_mediumRNN_tracktwoMVA', 'HLT_tau35_mediumRNN_tracktwoMVA'],
188  2023: ['HLT_tau25_mediumRNN_tracktwoMVA', 'HLT_tau35_mediumRNN_tracktwoMVA'],
189  }
190  config.addBlock ('TauJets.TriggerSF')
191  config.setOptions (containerName='AnaTauJets')
192  config.setOptions (tauID='Tight')
193  config.setOptions (triggerChainsPerYear=tauTriggerChainsSF)
194  # TauJets.MCTCClassification
195  config.addBlock ('TauJets.MCTCClassification')
196  config.setOptions (containerName='AnaTauJets')
197  config.setOptions (prefix='truth_')
198 
199  config.addBlock ('SystObjectLink')
200  config.setOptions (containerName='AnaJets')
201  config.addBlock ('SystObjectLink')
202  config.setOptions (containerName='AnaLargeRJets')
203  config.addBlock ('SystObjectLink')
204  config.setOptions (containerName='AnaElectrons')
205  config.addBlock ('SystObjectLink')
206  config.setOptions (containerName='AnaPhotons')
207  config.addBlock ('SystObjectLink')
208  config.setOptions (containerName='AnaMuons')
209  config.addBlock ('SystObjectLink')
210  config.setOptions (containerName='AnaTauJets')
211 
212  config.addBlock ('ObjectCutFlow')
213  config.setOptions (containerName='AnaJets')
214  config.setOptions (selectionName='jvt')
215  config.addBlock ('ObjectCutFlow')
216  config.setOptions (containerName='AnaElectrons')
217  config.setOptions (selectionName='loose')
218  config.addBlock ('ObjectCutFlow')
219  config.setOptions (containerName='AnaPhotons')
220  config.setOptions (selectionName='tight')
221  config.addBlock ('ObjectCutFlow')
222  config.setOptions (containerName='AnaMuons')
223  config.setOptions (selectionName='medium')
224  config.addBlock ('ObjectCutFlow')
225  config.setOptions (containerName='AnaTauJets')
226  config.setOptions (selectionName='tight')
227 
228  # GeneratorLevelAnalysis
229  config.addBlock( 'GeneratorLevelAnalysis')
230 
231  # MissingET
232  config.addBlock ('MissingET')
233  config.setOptions (containerName='AnaMET')
234  config.setOptions (jets='AnaJets')
235  config.setOptions (taus='AnaTauJets.tight')
236  config.setOptions (electrons='AnaElectrons.loose')
237  config.setOptions (photons='AnaPhotons.tight')
238  config.setOptions (muons='AnaMuons.medium')
239 
240  # OverlapRemoval
241  config.addBlock( 'OverlapRemoval' )
242  config.setOptions (inputLabel='preselectOR')
243  config.setOptions (outputLabel='passesOR' )
244  config.setOptions (jets='AnaJets.baselineJvt')
245  config.setOptions (taus='AnaTauJets.tight')
246  config.setOptions (electrons='AnaElectrons.loose')
247  config.setOptions (photons='AnaPhotons.tight')
248  config.setOptions (muons='AnaMuons.medium')
249 
250  # Particle-level objects
251  config.addBlock ('PL_Electrons')
252  config.setOptions (containerName='TruthElectrons')
253  config.addBlock ('PL_Electrons.PtEtaSelection')
254  config.setOptions (containerName='TruthElectrons')
255  config.setOptions (skipOnData=True)
256  config.setOptions (useDressedProperties=True)
257  config.setOptions (minPt=20e3)
258  config.addBlock ('PL_Electrons.MCTCClassification')
259  config.setOptions (containerName='TruthElectrons')
260  config.setOptions (prefix='')
261 
262  config.addBlock ('PL_Photons')
263  config.setOptions (containerName='TruthPhotons')
264  config.addBlock ('PL_Photons.PtEtaSelection')
265  config.setOptions (containerName='TruthPhotons')
266  config.setOptions (skipOnData=True)
267  config.setOptions (minPt=20e3)
268 
269  config.addBlock ('PL_Muons')
270  config.setOptions (containerName='TruthMuons')
271  config.addBlock ('PL_Muons.PtEtaSelection')
272  config.setOptions (containerName='TruthMuons')
273  config.setOptions (skipOnData=True)
274  config.setOptions (useDressedProperties=True)
275  config.setOptions (minPt=20e3)
276  config.addBlock ('PL_Muons.MCTCClassification')
277  config.setOptions (containerName='TruthMuons')
278  config.setOptions (prefix='')
279 
280  config.addBlock ('PL_Taus')
281  config.setOptions (containerName='TruthTaus')
282  config.addBlock ('PL_Taus.PtEtaSelection')
283  config.setOptions (containerName='TruthTaus')
284  config.setOptions (skipOnData=True)
285  config.setOptions (minPt=20e3)
286  config.addBlock ('PL_Taus.MCTCClassification')
287  config.setOptions (containerName='TruthTaus')
288  config.setOptions (prefix='')
289 
290  config.addBlock ('PL_Jets')
291  config.setOptions (containerName='AntiKt4TruthDressedWZJets')
292  config.addBlock ('PL_Jets.PtEtaSelection')
293  config.setOptions (containerName='AntiKt4TruthDressedWZJets')
294  config.setOptions (skipOnData=True)
295  config.setOptions (minPt=20e3)
296 
297  config.addBlock ('PL_Neutrinos')
298  config.setOptions (skipOnData=True)
299  config.addBlock ('PL_MissingET')
300  config.setOptions (skipOnData=True)
301 
302  config.addBlock ('PL_OverlapRemoval')
303  config.setOptions (skipOnData=True)
304  config.setOptions (electrons='TruthElectrons')
305  config.setOptions (muons='TruthMuons')
306  config.setOptions (photons='TruthPhotons')
307  config.setOptions (jets='AntiKt4TruthDressedWZJets')
308  config.setOptions (useRapidityForDeltaR=False)
309 
310  # Thinning
311  config.addBlock ('Thinning')
312  config.setOptions (containerName='AnaElectrons')
313  config.setOptions (selectionName='loose')
314  config.setOptions (outputName='OutElectrons')
315  config.addBlock ('Thinning')
316  config.setOptions (containerName='AnaPhotons')
317  config.setOptions (selectionName='tight')
318  config.setOptions (outputName='OutPhotons')
319  config.addBlock ('Thinning')
320  config.setOptions (containerName='AnaMuons')
321  config.setOptions (selectionName='medium')
322  config.setOptions (outputName='OutMuons')
323  config.addBlock ('Thinning')
324  config.setOptions (containerName='AnaTauJets')
325  config.setOptions (selectionName='tight')
326  config.setOptions (outputName='OutTauJets')
327  config.addBlock ('Thinning')
328  config.setOptions (containerName='AnaJets')
329  config.setOptions (outputName='OutJets')
330  config.addBlock ('Thinning')
331  config.setOptions (containerName='AnaLargeRJets')
332  config.setOptions (outputName='OutLargeRJets')
333  config.addBlock ('Thinning')
334  config.setOptions (containerName='TruthElectrons')
335  config.setOptions (skipOnData=True)
336  config.setOptions (outputName='OutTruthElectrons')
337  config.addBlock ('Thinning')
338  config.setOptions (containerName='TruthPhotons')
339  config.setOptions (skipOnData=True)
340  config.setOptions (outputName='OutTruthPhotons')
341  config.addBlock ('Thinning')
342  config.setOptions (containerName='TruthMuons')
343  config.setOptions (skipOnData=True)
344  config.setOptions (outputName='OutTruthMuons')
345  config.addBlock ('Thinning')
346  config.setOptions (containerName='TruthTaus')
347  config.setOptions (skipOnData=True)
348  config.setOptions (outputName='OutTruthTaus')
349  config.addBlock ('Thinning')
350  config.setOptions (containerName='AntiKt4TruthDressedWZJets')
351  config.setOptions (outputName='OutTruthJets')
352  config.setOptions (skipOnData=True)
353 
354  # Trigger
355  triggerChainsPerYear = {
356  2015: ['HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose', 'HLT_mu20_iloose_L1MU15 || HLT_mu40', 'HLT_2g20_tight'],
357  2016: ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_mu26_ivarmedium || HLT_mu50', 'HLT_g35_loose_g25_loose'],
358  2017: ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_2g22_tight_L12EM15VHI', 'HLT_mu50'],
359  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'],
360  }
361  triggerMatchingChainsPerYear = {
362  2015: ['HLT_e24_lhmedium_L1EM20VH || HLT_e60_lhmedium || HLT_e120_lhloose', 'HLT_mu20_iloose_L1MU15 || HLT_mu40'],
363  2016: ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_mu26_ivarmedium || HLT_mu50'],
364  2017: ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_mu50'],
365  2018: ['HLT_e26_lhtight_nod0_ivarloose || HLT_e60_lhmedium_nod0 || HLT_e140_lhloose_nod0', 'HLT_mu26_ivarmedium'],
366  }
367  config.addBlock ('Trigger')
368  config.setOptions (triggerChainsPerYear=triggerChainsPerYear)
369  config.setOptions (noFilter=True)
370  config.setOptions (electrons='AnaElectrons.loose')
371  config.setOptions (photons='AnaPhotons.tight')
372  config.setOptions (muons='AnaMuons.medium')
373  config.setOptions (taus='AnaTauJets.tight')
374  config.setOptions (electronID='Tight')
375  config.setOptions (electronIsol='Tight_VarRad')
376  config.setOptions (photonIsol='TightCaloOnly')
377  config.setOptions (muonID='Tight')
378  config.setOptions (triggerMatchingChainsPerYear=triggerMatchingChainsPerYear)
379 
380  # EventSelection
381  # Example cuts used for event selection algorithm test
382  exampleSelectionCuts = {
383  'SUBcommon': """JET_N_BTAG >= 2
384 JET_N 25000 >= 4
385 MET >= 20000
386 SAVE
387 """,
388  'ejets': """IMPORT SUBcommon
389 EL_N 5000 == 1
390 MU_N 3000 == 0
391 MWT < 170000
392 MET+MWT > 40000
393 SAVE
394 """,
395  'mujets': """IMPORT SUBcommon
396 EL_N 5000 == 0
397 MU_N medium 25000 > 0
398 SAVE
399 """
400  }
401  config.addBlock ('EventSelection')
402  config.setOptions (electrons='AnaElectrons.loose')
403  config.setOptions (muons='AnaMuons.medium')
404  config.setOptions (jets='AnaJets.baselineJvt')
405  config.setOptions (met='AnaMET')
406  config.setOptions (btagDecoration='ftag_select_ftag')
407  config.setOptions (noFilter=True)
408  config.setOptions (cutFlowHistograms=True)
409  config.setOptions (selectionCutsDict=exampleSelectionCuts)
410 
411  # Bootstraps
412  config.addBlock ('Bootstraps')
413  config.setOptions (nReplicas=2000)
414  config.setOptions (skipOnMC=False)
415 
416  # LeptonSF
417  config.addBlock ('LeptonSF')
418  config.setOptions (muons='AnaMuons.medium')
419  config.setOptions (photons='AnaPhotons.tight')
420  config.setOptions (lepton_postfix='nominal')
421 
422  # Output
423  outputContainers = {
424  'mu_': 'OutMuons',
425  'el_': 'OutElectrons',
426  'ph_' : 'OutPhotons',
427  'tau_': 'OutTauJets',
428  'jet_': 'OutJets',
429  'larger_jet_': 'OutLargeRJets',
430  'met_': 'AnaMET',
431  '': 'EventInfo'}
432  outputContainersForMC = {'truth_mu_' : 'OutTruthMuons',
433  'truth_el_' : 'OutTruthElectrons',
434  'truth_ph_' : 'OutTruthPhotons',
435  'truth_tau_': 'OutTruthTaus',
436  'truth_jet_': 'OutTruthJets',
437  'truth_met_': 'TruthMET'}
438  config.addBlock ('Output')
439  config.setOptions (treeName='analysis')
440  config.setOptions (vars=[
441  'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
442  ])
443  config.setOptions (metVars=[
444  'AnaMET_%SYS%.met -> met_%SYS%',
445  ])
446  config.setOptions (truthMetVars=[
447  'TruthMET_NOSYS.met -> truth_met',
448  ])
449  config.setOptions (containers=outputContainers)
450  config.setOptions (containersOnlyForMC=outputContainersForMC)
451  config.setOptions (commands=[
452  "disable actualInteractionsPerCrossing",
453  ])
454 
455  # save the tool configuration to a txt file
456  config.addBlock ('PrintConfiguration')
457 
458  # configure ConfigSequence
459  configSeq = config.configure()
460 
461  # create text config object to build text configurations
462  textConfig = TextConfig(yamlPath)
463  textConfigSeq = textConfig.configure()
464 
465  # compare - will raise error if False
466  compareConfigSeq(configSeq, textConfigSeq, checkOrder=checkOrder)
467 
468 
469 def compareBlockConfig(yamlPath='', *, checkOrder=False) :
470  """
471  Create a configSequence using provided YAML file and a
472  configSequence using the block configuration and compare.
473 
474  Will raise an exception if configSequences differ
475  """
476  from AthenaConfiguration.Enums import LHCPeriod
477  # create configSeq for block configuration
478  from AnalysisAlgorithmsConfig.FullCPAlgorithmsTest import makeTestSequenceBlocks
479  configSeq = makeTestSequenceBlocks(dataType='fullsim', algSeq=None,
480  geometry=LHCPeriod.Run2,
481  isPhyslite=False, forceEGammaFullSimConfig=True,
482  returnConfigSeq=True)
483 
484  # create text config object to build text configurations
485  from AnalysisAlgorithmsConfig.ConfigText import TextConfig
486  textConfig = TextConfig(yamlPath)
487  textConfigSeq = textConfig.configure()
488 
489  # compare - will raise error if False
490  compareConfigSeq(configSeq, textConfigSeq, checkOrder=checkOrder)
491 
492 
493 if __name__ == '__main__':
494  import os
495  import optparse
496  parser = optparse.OptionParser()
497  parser.add_option('--text-config', dest='text_config',
498  default='', action='store',
499  help='YAML file used in unit test')
500  parser.add_option('--compare-block', dest='compare_block',
501  default=False, action='store_true',
502  help='Compare config sequence from YAML and block configuration')
503  parser.add_option('--compare-builder', dest='compare_builder',
504  default=False, action='store_true',
505  help='Compare config sequence from YAML and python configuration')
506  parser.add_option('--check-order', dest='check_order',
507  default=False, action='store_true',
508  help='Require blocks to be in the same order')
509  (options, args) = parser.parse_args()
510  textConfig = options.text_config
511  compareBlock = options.compare_block
512  compareBuilder = options.compare_builder
513  checkOrder = options.check_order
514 
515  from PathResolver import PathResolver
516  textConfig = PathResolver.FindCalibFile(textConfig)
517 
518  if not os.path.isfile(textConfig):
519  raise FileNotFoundError(f"{textConfig} is not a file")
520 
521  # compare YAML and builder
522  if compareBuilder:
523  print("Comparing config sequences from the block and text"
524  "configuration methods")
525  compareTextBuilder(textConfig, checkOrder=checkOrder)
526  # compare YAML and block config
527  if compareBlock:
528  print("Comparing config sequences from the block and block"
529  "configuration methods")
530  compareBlockConfig(textConfig, checkOrder=checkOrder)
python.ConfigText_unitTest.compareConfigSeq
def compareConfigSeq(seq1, seq2, *checkOrder=False)
Definition: ConfigText_unitTest.py:7
PathResolver::FindCalibFile
static std::string FindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.h:63
python.ConfigText_unitTest.compareTextBuilder
def compareTextBuilder(yamlPath='', *checkOrder=False)
Definition: ConfigText_unitTest.py:46
vtune_athena.format
format
Definition: vtune_athena.py:14
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
python.FullCPAlgorithmsTest.makeTestSequenceBlocks
def makeTestSequenceBlocks(dataType, algSeq, isPhyslite, geometry=None, autoconfigFromFlags=None, noSystematics=None, onlyNominalOR=False, forceEGammaFullSimConfig=False, returnConfigSeq=False, bleedingEdge=False # Enabled for CI tests running on new derivations from derivation CI output)
Definition: FullCPAlgorithmsTest.py:65
python.ConfigText_unitTest.compareBlockConfig
def compareBlockConfig(yamlPath='', *checkOrder=False)
Definition: ConfigText_unitTest.py:469
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26