From 8ef3e7abcf6fa4afd24a46a01fe4931e2377c3e2 Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej.novak@cern.ch>
Date: Fri, 12 Apr 2024 08:30:56 +0200
Subject: [PATCH] CP algs: Use flags and data type consistently in tests

---
 AtlasTest/CITest/Athena.cmake                 |  8 +-
 .../AnalysisAlgorithmsConfig/CMakeLists.txt   | 85 +++++++++----------
 .../python/FullCPAlgorithmsTest.py            | 16 ++--
 .../scripts/FullCPAlgorithmsTest_CA.py        | 42 ++++-----
 .../scripts/FullCPAlgorithmsTest_eljob.py     | 63 ++++++--------
 .../python/PileupAnalysisSequence.py          | 22 +++--
 6 files changed, 115 insertions(+), 121 deletions(-)

diff --git a/AtlasTest/CITest/Athena.cmake b/AtlasTest/CITest/Athena.cmake
index 11fcabe7f0a4..5bb128e03381 100644
--- a/AtlasTest/CITest/Athena.cmake
+++ b/AtlasTest/CITest/Athena.cmake
@@ -160,11 +160,11 @@ atlas_add_citest( RecoRun4MC_DAODPHYS
 #################################################################################
 
 atlas_add_citest( CPAlgorithmsRun2MC_PHYS
-   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type mc --input-file ../DerivationRun2MC_PHYS/run_mc_PHYS_Run2/DAOD_PHYS.myOutput.pool.root
+   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type fullsim --input-file ../DerivationRun2MC_PHYS/run_mc_PHYS_Run2/DAOD_PHYS.myOutput.pool.root
    DEPENDS_SUCCESS DerivationRun2MC_PHYS )
 
 atlas_add_citest( CPAlgorithmsRun2MC_PHYSLITE
-   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type mc --physlite --input-file ../DerivationRun2MC_PHYSLITE/run_mc_PHYSLITE_Run2/DAOD_PHYSLITE.myOutput.pool.root
+   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type fullsim --physlite --input-file ../DerivationRun2MC_PHYSLITE/run_mc_PHYSLITE_Run2/DAOD_PHYSLITE.myOutput.pool.root
    DEPENDS_SUCCESS DerivationRun2MC_PHYSLITE )
 
 atlas_add_citest( CPAlgorithmsRun2Data_PHYS
@@ -176,11 +176,11 @@ atlas_add_citest( CPAlgorithmsRun2Data_PHYSLITE
    DEPENDS_SUCCESS DerivationRun2Data_PHYSLITE )
 
 atlas_add_citest( CPAlgorithmsRun3MC_PHYS
-   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type mc --input-file ../DerivationRun3MC_PHYS/run_mc_PHYS_Run3/DAOD_PHYS.myOutput.pool.root
+   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type fullsim --input-file ../DerivationRun3MC_PHYS/run_mc_PHYS_Run3/DAOD_PHYS.myOutput.pool.root
    DEPENDS_SUCCESS DerivationRun3MC_PHYS )
 
 atlas_add_citest( CPAlgorithmsRun3MC_PHYSLITE
-   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type mc --physlite --input-file ../DerivationRun3MC_PHYSLITE/run_mc_PHYSLITE_Run3/DAOD_PHYSLITE.myOutput.pool.root
+   SCRIPT FullCPAlgorithmsTest_CA.py --block-config --data-type fullsim --physlite --input-file ../DerivationRun3MC_PHYSLITE/run_mc_PHYSLITE_Run3/DAOD_PHYSLITE.myOutput.pool.root
    DEPENDS_SUCCESS DerivationRun3MC_PHYSLITE )
 
 atlas_add_citest( CPAlgorithmsRun3Data_PHYS
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/CMakeLists.txt b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/CMakeLists.txt
index b3d94937fd03..54df8b66bc45 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/CMakeLists.txt
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/CMakeLists.txt
@@ -15,7 +15,7 @@ if( XAOD_STANDALONE )
    function( add_test_job NAME DATA_TYPE )
 
       atlas_add_test( ${NAME}
-         SCRIPT FullCPAlgorithmsTest_eljob.py --data-type ${DATA_TYPE} --direct-driver --submission-dir submitDir-${NAME} --use-flags ${ARGN}
+         SCRIPT FullCPAlgorithmsTest_eljob.py --data-type ${DATA_TYPE} --direct-driver --submission-dir submitDir-${NAME} ${ARGN}
          POST_EXEC_SCRIPT nopost.sh
          PROPERTIES TIMEOUT 900 )
 
@@ -59,69 +59,62 @@ endif()
 
 
 add_test_job( TestJobDataSequence data --for-compare --no-systematics )
-add_test_job( TestJobDataConfig   data ${USE_FLAGS} --for-compare --block-config --no-systematics )
-add_test_job( TestJobDataTextConfig data ${USE_FLAGS} --for-compare --text-config ${CONFIG_PATH} --no-systematics )
-add_test_job( TestJobDataFull     data ${USE_FLAGS} --block-config --no-systematics )
-add_test_job( TestJobDataNominalOR   data ${USE_FLAGS} --block-config --no-systematics --only-nominal-or )
+add_test_job( TestJobDataConfig data --for-compare --block-config --no-systematics )
+add_test_job( TestJobDataTextConfig data --for-compare --text-config ${CONFIG_PATH} --no-systematics )
+add_test_job( TestJobDataFull data --block-config --no-systematics )
+add_test_job( TestJobDataNominalOR data --block-config --no-systematics --only-nominal-or )
 add_test_compare( TestJobDataCompare data TestJobDataSequence TestJobDataConfig )
 add_test_compare( TestJobDataCompareConfig data TestJobDataConfig TestJobDataTextConfig )
 
-add_test_job( TestJobFullSimSequence mc --for-compare )
-add_test_job( TestJobFullSimConfig   mc --for-compare --block-config )
-add_test_job( TestJobFullSimTextConfig  mc --for-compare --text-config ${CONFIG_PATH} )
-add_test_job( TestJobFullSimFull     mc --block-config )
-add_test_job( TestJobFullSimNominalOR   mc --block-config --only-nominal-or )
-add_test_compare( TestJobFullSimCompare mc TestJobFullSimSequence TestJobFullSimConfig )
-add_test_compare( TestJobFullSimCompareConfig mc TestJobFullSimConfig TestJobFullSimTextConfig )
-
-add_test_job( TestJobFastSimSequence afii --for-compare )
-add_test_job( TestJobFastSimConfig   afii --for-compare --block-config )
-add_test_job( TestJobFastSimTextConfig   afii --for-compare --text-config ${CONFIG_PATH} )
-add_test_job( TestJobFastSimFull     afii --block-config )
-add_test_job( TestJobFastSimNominalOR   afii --block-config --only-nominal-or )
-add_test_compare( TestJobFastSimCompare afii TestJobFastSimSequence TestJobFastSimConfig )
-
-# FIX ME: the text configuration currently does not create weight_pileup_%SYS%
-# for FastSim.  Not quite sure why, but the practical solution for now is to
-# disable this comparison.
-#add_test_compare( TestJobFastSimCompareConfig afii TestJobFastSimConfig TestJobFastSimTextConfig )
-
-
-
+add_test_job( TestJobFullSimSequence fullsim --for-compare )
+add_test_job( TestJobFullSimConfig fullsim --for-compare --block-config )
+add_test_job( TestJobFullSimTextConfig fullsim --for-compare --text-config ${CONFIG_PATH} )
+add_test_job( TestJobFullSimFull fullsim --block-config )
+add_test_job( TestJobFullSimNominalOR fullsim --block-config --only-nominal-or )
+add_test_compare( TestJobFullSimCompare fullsim TestJobFullSimSequence TestJobFullSimConfig )
+add_test_compare( TestJobFullSimCompareConfig fullsim TestJobFullSimConfig TestJobFullSimTextConfig )
+
+add_test_job( TestJobFastSimSequence fastsim --for-compare )
+add_test_job( TestJobFastSimConfig fastsim --for-compare --block-config )
+add_test_job( TestJobFastSimTextConfig fastsim --for-compare --text-config ${CONFIG_PATH} )
+add_test_job( TestJobFastSimFull fastsim --block-config )
+add_test_job( TestJobFastSimNominalOR fastsim --block-config --only-nominal-or )
+add_test_compare( TestJobFastSimCompare fastsim TestJobFastSimSequence TestJobFastSimConfig )
+# add_test_compare( TestJobFastSimCompareConfig fastsim TestJobFastSimConfig TestJobFastSimTextConfig )
 
 # FIX ME: There are some issues with the PHYSLITE tests that need to
 # be investigated, but until that happens I run some tests only in
 # AnalysisBase, and disable comparisons alltogether.
 
 add_test_job( TestJobDataSequenceLite data --for-compare --physlite --no-systematics )
-add_test_job( TestJobDataConfigLite   data ${USE_FLAGS} --for-compare --block-config --physlite --no-systematics )
-add_test_job( TestJobDataTextConfigLite data ${USE_FLAGS} --for-compare --text-config ${CONFIG_PATH} --physlite --no-systematics )
-add_test_job( TestJobDataFullLite     data ${USE_FLAGS} --block-config --physlite --no-systematics )
-add_test_job( TestJobDataNominalORLite    data ${USE_FLAGS} --block-config --only-nominal-or --physlite )
-#add_test_compare( TestJobDataCompareLite data TestJobDataSequenceLite TestJobDataConfigLite )
-#add_test_compare( TestJobDataCompareConfigLite data TestJobDataConfigLite TestJobDataTextConfigLite )
+add_test_job( TestJobDataConfigLite data --for-compare --block-config --physlite --no-systematics )
+add_test_job( TestJobDataTextConfigLite data --for-compare --text-config ${CONFIG_PATH} --physlite --no-systematics )
+add_test_job( TestJobDataFullLite data --block-config --physlite --no-systematics )
+add_test_job( TestJobDataNominalORLite data --block-config --only-nominal-or --physlite )
+# add_test_compare( TestJobDataCompareLite data TestJobDataSequenceLite TestJobDataConfigLite )
+# add_test_compare( TestJobDataCompareConfigLite data TestJobDataConfigLite TestJobDataTextConfigLite )
 
 
 if( XAOD_STANDALONE )
 
-   add_test_job( TestJobFullSimSequenceLite mc --for-compare --physlite )
-   add_test_job( TestJobFullSimConfigLite   mc --for-compare --block-config --physlite )
-   add_test_job( TestJobFullSimTextConfigLite mc --for-compare --text-config ${CONFIG_PATH} --physlite )
-   add_test_job( TestJobFullSimFullLite     mc --block-config --physlite )
-   add_test_job( TestJobFullSimNominalORLite    mc --block-config --only-nominal-or --physlite )
-   add_test_compare( TestJobFullSimCompareLite mc TestJobFullSimSequenceLite TestJobFullSimConfigLite )
+   add_test_job( TestJobFullSimSequenceLite fullsim --for-compare --physlite )
+   add_test_job( TestJobFullSimConfigLite fullsim --for-compare --block-config --physlite )
+   add_test_job( TestJobFullSimTextConfigLite fullsim --for-compare --text-config ${CONFIG_PATH} --physlite )
+   add_test_job( TestJobFullSimFullLite fullsim --block-config --physlite )
+   add_test_job( TestJobFullSimNominalORLite fullsim --block-config --only-nominal-or --physlite )
+   add_test_compare( TestJobFullSimCompareLite fullsim TestJobFullSimSequenceLite TestJobFullSimConfigLite )
 
-   add_test_job( TestJobFastSimSequenceLite afii --for-compare --physlite )
-   add_test_job( TestJobFastSimConfigLite   afii --for-compare --block-config --physlite )
-   add_test_job( TestJobFastSimTextConfigLite afii --for-compare --text-config ${CONFIG_PATH} --physlite )
-   add_test_job( TestJobFastSimFullLite     afii --block-config --physlite )
-   add_test_job( TestJobFastSimNominalORLite    afii --block-config --only-nominal-or --physlite )
-   add_test_compare( TestJobFastSimCompareLite afii TestJobFastSimSequenceLite TestJobFastSimConfigLite )
+   add_test_job( TestJobFastSimSequenceLite fastsim --for-compare --physlite )
+   add_test_job( TestJobFastSimConfigLite fastsim --for-compare --block-config --physlite )
+   add_test_job( TestJobFastSimTextConfigLite fastsim --for-compare --text-config ${CONFIG_PATH} --physlite )
+   add_test_job( TestJobFastSimFullLite fastsim --block-config --physlite )
+   add_test_job( TestJobFastSimNominalORLite fastsim --block-config --only-nominal-or --physlite )
+   add_test_compare( TestJobFastSimCompareLite fastsim TestJobFastSimSequenceLite TestJobFastSimConfigLite )
 
    # this test is for testing that the algorithm monitors defined in EventLoop
    # don't break a job of reasonable complexity.  they are tested here instead of
    # in the EventLoop package, because we have a much more complex payload here.
-   add_test_job( TestJobDataConfigMonitors   data ${USE_FLAGS} --for-compare --block-config --no-systematics --algorithm-timer --algorithm-memory )
+   add_test_job( TestJobDataConfigMonitors data --for-compare --block-config --no-systematics --algorithm-timer --algorithm-memory )
    add_test_compare( TestJobDataCompareMonitor data TestJobDataConfig TestJobDataConfigMonitors )
 
 endif()
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
index bc36fc8d4a53..1c3b4fc7aaee 100644
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/python/FullCPAlgorithmsTest.py
@@ -91,6 +91,13 @@ def addOutputCopyAlgorithms (algSeq, ca, postfix, inputContainer, outputContaine
 
 def makeSequenceOld (dataType, algSeq, forCompare, isPhyslite, noSystematics, forceEGammaFullSimConfig=False) :
 
+    if isinstance(dataType, DataType):
+        dataType = {
+            DataType.Data: 'data',
+            DataType.FullSim: 'mc',
+            DataType.FastSim: 'afii',
+        }.get(dataType)
+
     vars = []
     metVars = []
 
@@ -667,14 +674,13 @@ def makeSequenceBlocks (dataType, algSeq, forCompare, isPhyslite,
                         'jet_': 'OutJets',
                         'met_': 'AnaMET',
                         ''    : 'EventInfo'}
-    if not(forceEGammaFullSimConfig and dataType=='afii' and forCompare):
+    if not(forceEGammaFullSimConfig and dataType is DataType.FastSim and forCompare):
         outputContainers['el_'] = 'OutElectrons'
 
     # create factory object to build block configurations
     from AnalysisAlgorithmsConfig.ConfigFactory import ConfigFactory
     config = ConfigFactory()
 
-    # noSystematics is passed in block from config accumulator
     configSeq += config.makeConfig('CommonServices')
     configSeq.setOptionValue('.systematicsHistogram', 'systematicsList')
     if forCompare:
@@ -684,8 +690,8 @@ def makeSequenceBlocks (dataType, algSeq, forCompare, isPhyslite,
     #   overran integrated luminosity for RunNumber=363262 (0.000000 vs 0.000000)
     if not isPhyslite:
         configSeq += config.makeConfig('PileupReweighting')
-        if dataType == 'afii' and forCompare:
-            prwfiles, lumicalcfiles = pileupConfigFiles( {'data': DataType.Data, 'mc': DataType.FullSim, 'afii': DataType.FastSim}.get(dataType, None) )
+        if dataType is DataType.FastSim and forCompare:
+            prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
             configSeq.setOptionValue('.userPileupConfigs', prwfiles)
             configSeq.setOptionValue('.userLumicalcFiles', lumicalcfiles)
             configSeq.setOptionValue('.useDefaultConfig', False)
@@ -1005,7 +1011,7 @@ def makeSequenceBlocks (dataType, algSeq, forCompare, isPhyslite,
             'disable ph_select_tight.*',
             'disable tau_select_tight.*',
             ]
-        if not (dataType == 'afii' and forceEGammaFullSimConfig):
+        if not (dataType is DataType.FastSim and forceEGammaFullSimConfig):
             disable_commands.append('disable el_select_loose.*')
     configSeq.setOptionValue ('.commands', disable_commands)
 
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_CA.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_CA.py
index 18b7dee9031a..bb2b3a00406b 100755
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_CA.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_CA.py
@@ -4,7 +4,9 @@
 # @author Tadej Novak
 # @author Teng Jian Khoo
 
+import sys
 import os
+from AnalysisAlgorithmsConfig.ConfigAccumulator import DataType
 from AnalysisAlgorithmsConfig.FullCPAlgorithmsTest import makeSequence
 from AthenaConfiguration.AllConfigFlags import initConfigFlags
 from AthenaConfiguration.ComponentFactory import CompFactory
@@ -25,7 +27,7 @@ athArgsParser.add_argument("--dump-config", action="store", dest="dump_config",
                            help="Dump the config in a pickle file")
 athArgsParser.add_argument("--data-type", action="store", dest="data_type",
                            default="data",
-                           help="Type of input to run over. Valid options are 'data', 'mc', 'afii'")
+                           help="Type of input to run over. Valid options are 'data', 'fullsim', 'fastsim'")
 athArgsParser.add_argument('--block-config', dest='block_config',
                            action='store_true', default=False,
                            help='Configure the job with block configuration')
@@ -40,31 +42,27 @@ athArgsParser.add_argument('--no-systematics', dest='no_systematics',
                            help='Configure the job to with no systematics')
 athArgsParser.add_argument('--physlite', dest='physlite',
                            action='store_true', default=False,
-                           help='Configure the job for physlite')
+                           help='Run the job on physlite')
 athArgsParser.add_argument('--only-nominal-or', dest='onlyNominalOR',
                            action='store_true', default=False,
                            help='Only run overlap removal for nominal (skip systematics)')
 athArgs = flags.fillFromArgs(parser=athArgsParser)
 
-dataType = athArgs.data_type
+dataType = DataType(athArgs.data_type)
 blockConfig = athArgs.block_config
 textConfig = athArgs.text_config
 forCompare = athArgs.for_compare
-isPhyslite = athArgs.physlite
-
-if dataType not in ["data", "mc", "afii"]:
-    raise Exception("invalid data type: " + dataType)
 
-print("Running on data type: " + dataType)
+print(f"Running on data type: {dataType.value}")
 
-if isPhyslite:
-    inputfile = {"data": 'ASG_TEST_FILE_LITE_DATA',
-                 "mc":   'ASG_TEST_FILE_LITE_MC',
-                 "afii": 'ASG_TEST_FILE_LITE_MC_AFII'}
+if athArgs.physlite:
+    inputfile = {DataType.Data:    'ASG_TEST_FILE_LITE_DATA',
+                 DataType.FullSim: 'ASG_TEST_FILE_LITE_MC',
+                 DataType.FastSim: 'ASG_TEST_FILE_LITE_MC_AFII'}
 else:
-    inputfile = {"data": 'ASG_TEST_FILE_DATA',
-                 "mc":   'ASG_TEST_FILE_MC',
-                 "afii": 'ASG_TEST_FILE_MC_AFII'}
+    inputfile = {DataType.Data:    'ASG_TEST_FILE_DATA',
+                 DataType.FullSim: 'ASG_TEST_FILE_MC',
+                 DataType.FastSim: 'ASG_TEST_FILE_MC_AFII'}
 
 # Set up the reading of the input file:
 if athArgs.input_file:
@@ -86,7 +84,7 @@ cfg.merge(CutFlowSvcCfg(flags))
 # Setup the configuration
 cp_cfg = makeSequence(dataType, blockConfig, textConfig, forCompare=forCompare,
                       noSystematics=athArgs.no_systematics,
-                      isPhyslite=isPhyslite,
+                      isPhyslite=athArgs.physlite,
                       autoconfigFromFlags=flags, onlyNominalOR=athArgs.onlyNominalOR,
                       forceEGammaFullSimConfig=True)
 # Add all algorithms from the sequence to the job.
@@ -94,16 +92,13 @@ cfg.merge(cp_cfg)
 
 # Set up a histogram output file for the job:
 if blockConfig:
-    outputFile = "ANALYSIS DATAFILE='FullCPAlgorithmsConfigTest." + \
-        dataType + ".hist.root' OPT='RECREATE'"
+    outputFile = f"ANALYSIS DATAFILE='FullCPAlgorithmsConfigTest.{dataType.value}.hist.root' OPT='RECREATE'"
 elif textConfig:
-    outputFile = "ANALYSIS DATAFILE='FullCPAlgorithmsTextConfigTest." + \
-        dataType + ".hist.root' OPT='RECREATE'"
+    outputFile = f"ANALYSIS DATAFILE='FullCPAlgorithmsTextConfigTest.{dataType.value}.hist.root' OPT='RECREATE'"
 else:
-    outputFile = "ANALYSIS DATAFILE='FullCPAlgorithmsTest." + \
-        dataType + ".hist.root' OPT='RECREATE'"
+    outputFile = f"ANALYSIS DATAFILE='FullCPAlgorithmsTest.{dataType.value}.hist.root' OPT='RECREATE'"
 if athArgs.output_file:
-    outputFile = "ANALYSIS DATAFILE='" + athArgs.output_file + "' OPT='RECREATE'"
+    outputFile = f"ANALYSIS DATAFILE='{athArgs.output_file}' OPT='RECREATE'"
 cfg.addService(CompFactory.THistSvc(Output=[outputFile]))
 
 # Set EventPrintoutInterval to 100 events
@@ -117,5 +112,4 @@ if athArgs.dump_config:
         cfg.store(f)
 
 sc = cfg.run(500)
-import sys
 sys.exit(sc.isFailure())
diff --git a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_eljob.py
index 8f410490e4d4..f2622399d9ae 100755
--- a/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_eljob.py
+++ b/PhysicsAnalysis/Algorithms/AnalysisAlgorithmsConfig/scripts/FullCPAlgorithmsTest_eljob.py
@@ -6,17 +6,19 @@
 
 # Read the submission directory as a command line argument. You can
 # extend the list of arguments with your private ones later on.
+from AnalysisAlgorithmsConfig.ConfigAccumulator import DataType
+
 import optparse
 parser = optparse.OptionParser()
 parser.add_option( '-d', '--data-type', dest = 'data_type',
                    action = 'store', type = 'string', default = 'data',
-                   help = 'Type of data to run over. Valid options are data, mc, afii' )
+                   help="Type of input to run over. Valid options are 'data', 'fullsim', 'fastsim'")
 parser.add_option( '-s', '--submission-dir', dest = 'submission_dir',
                    action = 'store', type = 'string', default = 'submitDir',
                    help = 'Submission directory for EventLoop' )
-parser.add_option("--input-file", action = "append", dest = "input_file",
-                  default = None,
-                  help = "Specify the input file")
+parser.add_option( "--input-file", action = "append", dest = "input_file",
+                   default = None,
+                   help = "Specify the input file")
 parser.add_option( '-u', '--unit-test', dest='unit_test',
                    action = 'store_true', default = False,
                    help = 'Run the job in "unit test mode"' )
@@ -56,12 +58,6 @@ parser.add_option( '--for-compare', dest='for_compare',
 parser.add_option( '--physlite', dest='physlite',
                    action = 'store_true', default = False,
                    help = 'Configure the job for physlite' )
-parser.add_option( '--geometry', dest='geometry',
-                   action = 'store', type = 'string', default = 'RUN2',
-                   help = 'LHC Run period to run over. Valid options are RUN2, RUN3' )
-parser.add_option( '--use-flags', dest='use_flags',
-                   action = 'store_true', default = False,
-                   help = 'Use Athena-style configuration flags to set up the config blocks')
 parser.add_option( '--only-nominal-or', dest='onlyNominalOR',
                    action = 'store_true', default = False,
                    help = 'Only run overlap removal for nominal (skip systematics)')
@@ -77,33 +73,31 @@ ROOT.xAOD.TauJetContainer()
 # ideally we'd run over all of them, but we don't have a mechanism to
 # configure per-sample right now
 
-dataType = options.data_type
+dataType = DataType(options.data_type)
 blockConfig = options.block_config
 textConfig = options.text_config
 forCompare = options.for_compare
-isPhyslite = options.physlite
-geometry = options.geometry
+
+print(f"Running on data type: {dataType.value}")
+
+if options.physlite:
+    inputfile = {DataType.Data:    'ASG_TEST_FILE_LITE_DATA',
+                 DataType.FullSim: 'ASG_TEST_FILE_LITE_MC',
+                 DataType.FastSim: 'ASG_TEST_FILE_LITE_MC_AFII'}
+else:
+    inputfile = {DataType.Data:    'ASG_TEST_FILE_DATA',
+                 DataType.FullSim: 'ASG_TEST_FILE_MC',
+                 DataType.FastSim: 'ASG_TEST_FILE_MC_AFII'}
 
 # No R24 FastSim recommendations for EGamma yet
 forceEGammaFullSimConfig = True
 
-if dataType not in ["data", "mc", "afii"] :
-    raise Exception ("invalid data type: " + dataType)
-
 # Set up the sample handler object. See comments from the C++ macro
 # for the details about these lines.
 import os
 sh = ROOT.SH.SampleHandler()
 sh.setMetaString( 'nc_tree', 'CollectionTree' )
-sample = ROOT.SH.SampleLocal (dataType)
-if isPhyslite :
-    inputfile = {"data": 'ASG_TEST_FILE_LITE_DATA',
-                 "mc":   'ASG_TEST_FILE_LITE_MC',
-                 "afii": 'ASG_TEST_FILE_LITE_MC_AFII'}
-else :
-    inputfile = {"data": 'ASG_TEST_FILE_DATA',
-                 "mc":   'ASG_TEST_FILE_MC',
-                 "afii": 'ASG_TEST_FILE_MC_AFII'}
+sample = ROOT.SH.SampleLocal (dataType.value)
 if options.input_file:
     for file_idx in range(len(options.input_file)):
         testFile = options.input_file[file_idx]
@@ -114,15 +108,13 @@ else:
 sh.add (sample)
 sh.printContent()
 
-flags = None
-if options.use_flags:
-    from AthenaConfiguration.AllConfigFlags import initConfigFlags
-    flags = initConfigFlags()
-    if options.input_file:
-        flags.Input.Files = options.input_file[:]
-    else:
-        flags.Input.Files = [testFile]
-    flags.lock()
+from AthenaConfiguration.AllConfigFlags import initConfigFlags
+flags = initConfigFlags()
+if options.input_file:
+    flags.Input.Files = options.input_file[:]
+else:
+    flags.Input.Files = [testFile]
+flags.lock()
 
 # Create an EventLoop job.
 job = ROOT.EL.Job()
@@ -140,8 +132,7 @@ if options.factory_preload != '' :
 from AnalysisAlgorithmsConfig.FullCPAlgorithmsTest import makeSequence, printSequenceAlgs
 algSeq = makeSequence (dataType, blockConfig, textConfig, forCompare=forCompare,
                        noSystematics = options.no_systematics,
-                       hardCuts = options.hard_cuts, isPhyslite=isPhyslite,
-                       geometry=geometry,
+                       hardCuts = options.hard_cuts, isPhyslite=options.physlite,
                        autoconfigFromFlags=flags, onlyNominalOR=options.onlyNominalOR,
                        forceEGammaFullSimConfig=forceEGammaFullSimConfig)
 printSequenceAlgs( algSeq ) # For debugging
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
index cd26dc43aba3..20b1c60c66d6 100755
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
@@ -1,8 +1,9 @@
-# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 
 # AnaAlgorithm import(s):
 from AnaAlgorithm.AnaAlgSequence import AnaAlgSequence
 from AnaAlgorithm.DualUseConfig import createAlgorithm, addPrivateTool
+from AnalysisAlgorithmsConfig.ConfigAccumulator import DataType
 from Campaigns.Utils import Campaign
 
 import logging
@@ -12,11 +13,20 @@ def makePileupAnalysisSequence( dataType, campaign=None, files=None, useDefaultC
     """Create a PRW analysis algorithm sequence
 
     Keyword arguments:
-      dataType -- The data type to run on ("data", "mc" or "afii")
+      dataType -- The data type enum
     """
 
-    if dataType not in ["data", "mc", "afii"] :
-        raise ValueError ("invalid data type: " + dataType)
+    if isinstance(dataType, str):
+        dataType = {
+            "data": DataType.Data,
+            "fullsim": DataType.FullSim,
+            "fastsim": DataType.FastSim,
+            "mc": DataType.FullSim,
+            "afii": DataType.FastSim,
+        }.get(dataType)
+
+        if not dataType:
+            raise ValueError ("invalid data type")
 
     # Create the analysis algorithm sequence object:
     seq = AnaAlgSequence( "PileupAnalysisSequence" )
@@ -36,7 +46,7 @@ def makePileupAnalysisSequence( dataType, campaign=None, files=None, useDefaultC
 
         if campaign:
             if userPileupConfigs is None:
-                if dataType == 'data':
+                if dataType is DataType.Data:
                     log.info('Data needs no configuration files')
                 else:
                     from PileupReweighting.AutoconfigurePRW import getConfigurationFiles
@@ -63,7 +73,7 @@ def makePileupAnalysisSequence( dataType, campaign=None, files=None, useDefaultC
     alg = createAlgorithm( 'CP::PileupReweightingAlg', 'PileupReweightingAlg' )
     addPrivateTool( alg, 'pileupReweightingTool', 'CP::PileupReweightingTool' )
     alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
-    if not toolConfigFiles and dataType != "data":
+    if not toolConfigFiles and dataType is not DataType.Data:
         log.info("No PRW config files provided. Disabling reweighting")
         # Setting the weight decoration to the empty string disables the reweighting
         alg.pileupWeightDecoration = ""
-- 
GitLab