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