From 19a030b561385989e3d0007597ca03d62a990cad Mon Sep 17 00:00:00 2001
From: Rupert Tombs <rt500@cam.ac.uk>
Date: Mon, 21 Sep 2020 10:34:01 +0100
Subject: [PATCH] Progress towards PU digi test running.

Expand minbias files wildcard. Move them ot TestDefaults.

Correct dSFMT use and implementation for PU config.

Add other digitization modules.

Add comparison test for PileUp digi
---
 .../python/TestDefaults.py                    |  10 ++
 Control/RngComps/python/RandomServices.py     |   4 +-
 .../Digitization/python/PileUpConfigNew.py    |  44 +++--
 .../test/DigitizationPUConfigNew_test.py      | 151 ++++++++++++++----
 .../DigitizationPUConfigNew_test_setup.py     |   8 +-
 .../test/test_PileUpDigiComparison.sh         |  75 +++++++++
 6 files changed, 236 insertions(+), 56 deletions(-)
 create mode 100755 Simulation/Tests/DigitizationTests/test/test_PileUpDigiComparison.sh

diff --git a/Control/AthenaConfiguration/python/TestDefaults.py b/Control/AthenaConfiguration/python/TestDefaults.py
index b1a35018220..efc9307840e 100644
--- a/Control/AthenaConfiguration/python/TestDefaults.py
+++ b/Control/AthenaConfiguration/python/TestDefaults.py
@@ -11,6 +11,16 @@ class defaultTestFiles(object):
     HITS= [d + "/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1"]
     HITS_SPECIAL = [d + "/DigitizationTests/mc16_13TeV.HITS.16965029._000024.pool.root.1"]
     HITS_DATA_OVERLAY = [d + "/OverlayMonitoringRTT/mc16_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.OverlaySim/HITS.pool.root"]
+    HITS_MINBIAS_HIGH = [
+        d + "/Tier0ChainTests/mc16_13TeV.361239.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_high.merge.HITS.e4981_s3087_s3089/HITS.10501933._000005.pool.root.1",
+        d + "/Tier0ChainTests/mc16_13TeV.361239.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_high.merge.HITS.e4981_s3087_s3089/HITS.10501933._000013.pool.root.1",
+        d + "/Tier0ChainTests/mc16_13TeV.361239.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_high.merge.HITS.e4981_s3087_s3089/HITS.10501933._000018.pool.root.1",
+    ]
+    HITS_MINBIAS_LOW = [
+        d + "/Tier0ChainTests/mc16_13TeV.361238.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_low.merge.HITS.e4981_s3087_s3089/HITS.10501925._000003.pool.root.1",
+        d + "/Tier0ChainTests/mc16_13TeV.361238.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_low.merge.HITS.e4981_s3087_s3089/HITS.10501925._000024.pool.root.1",
+        d + "/Tier0ChainTests/mc16_13TeV.361238.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_low.merge.HITS.e4981_s3087_s3089/HITS.10501925._000044.pool.root.1",
+    ]
     RAW = [d + "/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1"]
     RAW_BKG = [d + "/OverlayMonitoringRTT/mc15_valid.00200010.overlay_streamsAll_2016_pp_1.skim.DRAW.r8381/DRAW.09331084._000146.pool.root.1"]
     RDO = [d + "/Tier0ChainTests/q221/21.0/v1/myRDO.pool.root"]
diff --git a/Control/RngComps/python/RandomServices.py b/Control/RngComps/python/RandomServices.py
index aa4f9555958..16f7018c8ac 100755
--- a/Control/RngComps/python/RandomServices.py
+++ b/Control/RngComps/python/RandomServices.py
@@ -18,8 +18,8 @@ AthEngines = {
 
 def dSFMT(seed, name="AtDSFMTGenSvc"):
     """Return a ComponentAccumulator containing an AtDSFMTGenSvc with seed"""
-    acc = ComponentAccumulator(name)
-    service = AtDSFMTGenSvc()
+    acc = ComponentAccumulator()
+    service = AtDSFMTGenSvc(name)
     service.Seeds.append(seed)
     acc.addService(service)
     return acc
diff --git a/Simulation/Digitization/python/PileUpConfigNew.py b/Simulation/Digitization/python/PileUpConfigNew.py
index 3e820245dd0..9f4a8c8fd00 100644
--- a/Simulation/Digitization/python/PileUpConfigNew.py
+++ b/Simulation/Digitization/python/PileUpConfigNew.py
@@ -5,14 +5,19 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
-from RngComps.RandomServices import RNG
+from RngComps.RandomServices import dSFMT
 from Digitization import PileUpEventType
 from Digitization.RunDependentConfigNew import (
-    MaxNevtsPerXing,
+    maxNevtsPerXing,
     LumiProfileSvcCfg, NoProfileSvcCfg,
 )
 
 
+def PileUpConfigdSFMT(name):
+    """Local wrapper for dSFMT RNG service"""
+    return dSFMT(name + " OFFSET 340 123 345")
+
+
 def StepArrayBMCfg(flags, name="StepArrayBM", **kwargs):
     acc = ComponentAccumulator()
     kwargs.setdefault("IntensityPattern", flags.Digitization.PU.BeamIntensityPattern)
@@ -32,8 +37,8 @@ def FixedArrayBMCfg(flags, name="FixedArrayBM", **kwargs):
 def ArrayBMCfg(flags, name="ArrayBM", **kwargs):
     acc = ComponentAccumulator()
     kwargs.setdefault("IntensityPattern", flags.Digitization.PU.BeamIntensityPattern)
-    acc.merge(RNG())
-    kwargs.setdefault("RandomSvc", acc.getService("AthRNGSvc"))
+    acc.merge(PileUpConfigdSFMT("PileUpCollXingStream"))
+    kwargs.setdefault("RandomSvc", acc.getService("AtDSFMTGenSvc"))
     acc.addService(CompFactory.ArrayBM(name, **kwargs))
     return acc
 
@@ -81,6 +86,7 @@ def BeamHaloEventSelectorCfg(flags, name="BeamHaloEventSelector", **kwargs):
     return acc
 
 
+
 def MinBiasCacheCfg(flags, name="MinBiasCache", **kwargs):
     acc = ComponentAccumulator()
     kwargs.setdefault("CollPerXing", flags.Digitization.PU.NumberOfLowPtMinBias + flags.Digitization.PU.NumberOfHighPtMinBias)
@@ -98,9 +104,10 @@ def MinBiasCacheCfg(flags, name="MinBiasCache", **kwargs):
 
     kwargs.setdefault("OccupationFraction", (float(flags.Digitization.PU.BunchSpacing)/
                                              float(flags.Beam.BunchSpacing)))
+    
     RndmStreamName = "PileUpCollXingStream"
-    acc.merge(RNG(name=RndmStreamName))
-    kwargs.setdefault("RndmGenSvc", acc.getService(RndmStreamName))
+    acc.merge(PileUpConfigdSFMT(RndmStreamName))
+    kwargs.setdefault("RndmGenSvc", acc.getService("AtDSFMTGenSvc"))
     kwargs.setdefault("RndmStreamName", RndmStreamName)
 
     # FIXME migrated, but SplitBkgStreamsCache does not exist
@@ -120,9 +127,10 @@ def LowPtMinBiasCacheCfg(flags, name="LowPtMinBiasCache", **kwargs):
 
     kwargs.setdefault("OccupationFraction", (float(flags.Digitization.PU.BunchSpacing)/
                                              float(flags.Beam.BunchSpacing)))
+    
     RndmStreamName = "PileUpCollXingStream"
-    acc.merge(RNG(name=RndmStreamName))
-    kwargs.setdefault("RndmGenSvc", acc.getService(RndmStreamName))
+    acc.merge(PileUpConfigdSFMT(RndmStreamName))
+    kwargs.setdefault("RndmGenSvc", acc.getService("AtDSFMTGenSvc"))
     kwargs.setdefault("RndmStreamName", RndmStreamName)
 
     # Use BkgStreamsStepCaches when using the StepArrayBM and BkgStreamsCache otherwise
@@ -146,9 +154,10 @@ def HighPtMinBiasCacheCfg(flags, name="HighPtMinBiasCache", **kwargs):
     kwargs.setdefault("EventSelector", acc.getService("HighPtMinBiasEventSelector"))
     kwargs.setdefault("OccupationFraction", (float(flags.Digitization.PU.BunchSpacing)/
                                              float(flags.Beam.BunchSpacing)))
+    
     RndmStreamName = "PileUpCollXingStream"
-    acc.merge(RNG(name=RndmStreamName))
-    kwargs.setdefault("RndmGenSvc", acc.getService(RndmStreamName))
+    acc.merge(PileUpConfigdSFMT(RndmStreamName))
+    kwargs.setdefault("RndmGenSvc", acc.getService("AtDSFMTGenSvc"))
     kwargs.setdefault("RndmStreamName", RndmStreamName)
 
     # Use BkgStreamsStepCaches when using the StepArrayBM and BkgStreamsCache otherwise
@@ -179,9 +188,10 @@ def CavernCacheCfg(flags, name="CavernCache", **kwargs):
     kwargs.setdefault("OccupationFraction", OccupationFraction)
     acc.merge(CavernEventSelectorCfg(flags))
     kwargs.setdefault("EventSelector", acc.getService("cavernEventSelector"))
+    
     RndmStreamName = "PileUpCollXingStream"
-    acc.merge(RNG(name=RndmStreamName))
-    kwargs.setdefault("RndmGenSvc", acc.getService(RndmStreamName))
+    acc.merge(PileUpConfigdSFMT(RndmStreamName))
+    kwargs.setdefault("RndmGenSvc", acc.getService("AtDSFMTGenSvc"))
     kwargs.setdefault("RndmStreamName", RndmStreamName)
 
     # Use BkgStreamsStepCaches when using the StepArrayBM and BkgStreamsCache otherwise
@@ -206,8 +216,8 @@ def BeamGasCacheCfg(flags, name="BeamGasCache", **kwargs):
     kwargs.setdefault("EventSelector", acc.getService("BeamGasEventSelector"))
 
     RndmStreamName = "PileUpCollXingStream"
-    acc.merge(RNG(name=RndmStreamName))
-    kwargs.setdefault("RndmGenSvc", acc.getService(RndmStreamName))
+    acc.merge(PileUpConfigdSFMT(RndmStreamName))
+    kwargs.setdefault("RndmGenSvc", acc.getService("AtDSFMTGenSvc"))
     kwargs.setdefault("RndmStreamName", RndmStreamName)
 
     # Use BkgStreamsStepCaches when using the StepArrayBM and BkgStreamsCache otherwise
@@ -233,8 +243,8 @@ def BeamHaloCacheCfg(flags, name="BeamHaloCache", **kwargs):
     kwargs.setdefault("EventSelector", acc.getService("BeamHaloEventSelector"))
 
     RndmStreamName = "PileUpCollXingStream"
-    acc.merge(RNG(name=RndmStreamName))
-    kwargs.setdefault("RndmGenSvc", acc.getService(RndmStreamName))
+    acc.merge(PileUpConfigdSFMT(RndmStreamName))
+    kwargs.setdefault("RndmGenSvc", acc.getService("AtDSFMTGenSvc"))
     kwargs.setdefault("RndmStreamName", RndmStreamName)
 
     #Use BkgStreamsStepCaches when using the StepArrayBM and BkgStreamsCache otherwise
@@ -295,7 +305,7 @@ def PileUpEventLoopMgrCfg(flags, name="PileUpEventLoopMgr", **kwargs):
     kwargs.setdefault("lastXing", flags.Digitization.PU.FinalBunchCrossing)
 
     if flags.Digitization.PU.RunAndLumiOverrideList:
-        kwargs.setdefault("MaxMinBiasCollPerXing", MaxNevtsPerXing(flags))
+        kwargs.setdefault("MaxMinBiasCollPerXing", maxNevtsPerXing(flags))
         acc.merge(LumiProfileSvcCfg(flags))
         kwargs.setdefault("BeamLuminosity", acc.getService("LumiProfileSvc"))
     else:
diff --git a/Simulation/Digitization/test/DigitizationPUConfigNew_test.py b/Simulation/Digitization/test/DigitizationPUConfigNew_test.py
index c224fe37e8f..74545bff073 100755
--- a/Simulation/Digitization/test/DigitizationPUConfigNew_test.py
+++ b/Simulation/Digitization/test/DigitizationPUConfigNew_test.py
@@ -17,43 +17,91 @@ from Digitization.DigitizationParametersConfig import writeDigitizationMetadata
 from MCTruthSimAlgs.RecoTimingConfig import MergeRecoTimingObjCfg
 from AthenaConfiguration.JobOptsDumper import JobOptsDumperCfg
 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
+from Digitization.PileUpConfigNew import PileUpEventLoopMgrCfg
 from DigitizationPUConfigNew_test_setup import (
-    test_HighPtMinbiasHitsFile,
-    test_LowPtMinbiasHitsFile,
     test_BeamIntensityPattern,
     test_fragment,
     pileUpCalc,
     makeBkgInputCol,
 )
+from BCM_Digitization.BCM_DigitizationConfigNew import BCM_DigitizationCfg
+from SCT_Digitization.SCT_DigitizationConfigNew import SCT_DigitizationCfg
+from TRT_Digitization.TRT_DigitizationConfigNew import TRT_DigitizationCfg
+from PixelDigitization.PixelDigitizationConfigNew import PixelDigitizationCfg
+from LArDigitization.LArDigitizationConfigNew import LArTriggerDigitizationCfg
+from TileSimAlgs.TileDigitizationConfig import TileDigitizationCfg, TileTriggerDigitizationCfg
+from MuonConfig.MDT_DigitizationConfig import MDT_DigitizationDigitToRDOCfg
+from MuonConfig.TGC_DigitizationConfig import TGC_DigitizationDigitToRDOCfg
+from MuonConfig.RPC_DigitizationConfig import RPC_DigitizationDigitToRDOCfg
+from MuonConfig.CSC_DigitizationConfig import CSC_DigitizationDigitToRDOCfg
+
+def EvtIdModifierSvc_add_modifier(svc, 
+        run_nbr=None, evt_nbr=None, time_stamp=None, lbk_nbr=None, 
+        nevts=1):
+    if run_nbr is None:
+        modify_run_nbr = 0
+        run_nbr = 0
+    else:
+        modify_run_nbr = 1
+        
+    if evt_nbr is None:
+        modify_evt_nbr = 0
+        evt_nbr = 0
+    else:
+        modify_evt_nbr = 1
+        
+    if time_stamp is None:
+        modify_time_stamp = 0
+        time_stamp = 0
+    else:
+        modify_time_stamp = 1
+
+    if lbk_nbr is None:
+        modify_lbk_nbr = 0
+        lbk_nbr = 0
+    else:
+        modify_lbk_nbr = 1
+
+    mod_bit = int(0b0000
+                | (modify_run_nbr << 0)
+                | (modify_evt_nbr << 1)
+                | (modify_time_stamp << 2)
+                | (modify_lbk_nbr << 3))
+
+    svc.Modifiers += [run_nbr, evt_nbr, time_stamp, lbk_nbr,
+                    nevts, mod_bit]
+
 
 # Set up logging and new style config
 log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
 
-evtMax = 4
+ConfigFlags.Exec.MaxEvents = 4
 
-# Configure
 ConfigFlags.Input.Files = defaultTestFiles.HITS
-ConfigFlags.Output.RDOFileName = "myRDO.pool.root"
-ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-20"
+ConfigFlags.Output.RDOFileName = "mc16d_ttbar.CA.RDO.pool.root"
+ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16"
+
 ConfigFlags.GeoModel.Align.Dynamic = False
-ConfigFlags.Concurrency.NumThreads = 1
-ConfigFlags.Concurrency.NumConcurrentEvents = 1
+ConfigFlags.GeoModel.AtlasVersion = "ATLAS-R2-2016-01-00-01"
 
 ConfigFlags.Beam.BunchSpacing = 25
-# TODO deduplicate NumberOfCollisions?
 ConfigFlags.Beam.NumberOfCollisions = 20.
 
-ConfigFlags.Exec.MaxEvents = evtMax
-
 ConfigFlags.LAr.ROD.NumberOfCollisions = 20
 ConfigFlags.LAr.ROD.nSamples = 4
 ConfigFlags.LAr.ROD.DoOFCPileupOptimization = True
 ConfigFlags.LAr.ROD.FirstSample = 0
 ConfigFlags.LAr.ROD.UseHighestGainAutoCorr = True
 
-ConfigFlags.Digitization.DoXingByXingPileUp = True
+ConfigFlags.Digitization.Pileup = False
+ConfigFlags.Digitization.DoDigiTruth = True
+ConfigFlags.Digitization.TruthOutput = True
+ConfigFlags.Digitization.RandomSeedOffset = 170
+
+ConfigFlags.Digitization.DoXingByXingPileUp = True # TODO get success with this flag enabled
 ConfigFlags.Digitization.HighGainEMECIW = False
+
 ConfigFlags.Digitization.PU.BunchSpacing = 25
 ConfigFlags.Digitization.PU.CavernIgnoresBeamInt = True
 ConfigFlags.Digitization.PU.NumberOfCavern = 0.0
@@ -62,14 +110,18 @@ ConfigFlags.Digitization.PU.NumberOfLowPtMinBias = 80.290021063135
 ConfigFlags.Digitization.PU.BeamIntensityPattern = test_BeamIntensityPattern
 ConfigFlags.Digitization.PU.RunAndLumiOverrideList = test_fragment
 
-cols = makeBkgInputCol(ConfigFlags, [test_HighPtMinbiasHitsFile],
+cols = makeBkgInputCol(ConfigFlags, defaultTestFiles.HITS_MINBIAS_HIGH,
                        ConfigFlags.Digitization.PU.NumberOfHighPtMinBias, True)
 ConfigFlags.Digitization.PU.HighPtMinBiasInputCols = cols
 
-cols = makeBkgInputCol(ConfigFlags, [test_LowPtMinbiasHitsFile],
+cols = makeBkgInputCol(ConfigFlags, defaultTestFiles.HITS_MINBIAS_LOW,
                        ConfigFlags.Digitization.PU.NumberOfLowPtMinBias, True)
 ConfigFlags.Digitization.PU.LowPtMinBiasInputCols = cols
 
+ConfigFlags.Concurrency.NumThreads = 1
+ConfigFlags.Concurrency.NumConcurrentEvents = 1
+ConfigFlags.Tile.BestPhaseFromCOOL = False
+ConfigFlags.Tile.correctTime = False
 
 ConfigFlags.lock()
 
@@ -80,17 +132,10 @@ ConfigFlags.Sim.RunToTimestampDict
 acc = MainServicesCfg(ConfigFlags)
 acc.merge(PoolReadCfg(ConfigFlags))
 acc.merge(PoolWriteCfg(ConfigFlags))
-acc.merge(writeDigitizationMetadata(ConfigFlags))
-
-# Old EventInfo conversion
-if "EventInfo" not in ConfigFlags.Input.Collections:
-    acc.merge(EventInfoCnvAlgCfg(ConfigFlags,
-                                 inputKey="McEventInfo",
-                                 outputKey="EventInfo"))
 
-from Digitization.RunDependentConfigNew import EvtIdModifierSvcCfg
-acc.merge(EvtIdModifierSvcCfg(ConfigFlags))
+acc.merge(writeDigitizationMetadata(ConfigFlags))
 
+# Signal-only truth information
 from Digitization.PileUpToolsConfig import PileUpToolsCfg
 from MCTruthSimAlgs.MCTruthSimAlgsConfigNew import (
     SignalOnlyMcEventCollCfg,
@@ -99,27 +144,69 @@ from MCTruthSimAlgs.MCTruthSimAlgsConfigNew import (
     MergeCalibHitsCfg,
 )
 
+acc.merge(PileUpEventLoopMgrCfg(ConfigFlags))
+
 acc.merge(SignalOnlyMcEventCollCfg(ConfigFlags))
 acc.merge(MergeTruthJetsCfg(ConfigFlags))
 acc.merge(MergeMuonEntryLayerCfg(ConfigFlags))
 acc.merge(MergeCalibHitsCfg(ConfigFlags))
 
-
-# Migration of --digiSteeringConf
-# TODO configure output
-#acc.getEventAlgo("OutputStreamRDO").AcceptAlgs = ["StandardPileUpToolsAlg"]
+# Inner Detector
+acc.merge(BCM_DigitizationCfg(ConfigFlags))
+acc.merge(PixelDigitizationCfg(ConfigFlags))
+acc.merge(SCT_DigitizationCfg(ConfigFlags))
+acc.merge(TRT_DigitizationCfg(ConfigFlags))
+
+# Calorimeter
+acc.merge(LArTriggerDigitizationCfg(ConfigFlags))
+acc.merge(TileDigitizationCfg(ConfigFlags))
+acc.merge(TileTriggerDigitizationCfg(ConfigFlags))
+
+# Muon Spectrometer
+acc.merge(MDT_DigitizationDigitToRDOCfg(ConfigFlags))
+acc.merge(TGC_DigitizationDigitToRDOCfg(ConfigFlags))
+acc.merge(RPC_DigitizationDigitToRDOCfg(ConfigFlags))
+acc.merge(CSC_DigitizationDigitToRDOCfg(ConfigFlags))
+
+# Timing
+acc.merge(MergeRecoTimingObjCfg(ConfigFlags))
+
+# FIXME hack to match to buggy behaviour in old style configuration
+OutputStreamRDO = acc.getEventAlgo("OutputStreamRDO")
+OutputStreamRDO.ItemList += ["EventInfo#*"]
+OutputStreamRDO.ItemList.remove("xAOD::EventInfo#EventInfo")
+OutputStreamRDO.ItemList.remove("xAOD::EventAuxInfo#EventInfoAux.")
+# FIXME this is marked "# Temporary for debugging MBTSHits" in DigiOutput.py
+OutputStreamRDO.ItemList += ["TileHitVector#MBTSHits"]
+# for Tile
+# new style configures these, but they are left default in old config
+TilePulseForTileMuonReceiver = acc.getEventAlgo("TilePulseForTileMuonReceiver")
+TilePulseForTileMuonReceiver.TileRawChannelBuilderMF.TimeMaxForAmpCorrection = 25.
+TilePulseForTileMuonReceiver.TileRawChannelBuilderMF.TimeMinForAmpCorrection = -25.
+TileRChMaker = acc.getEventAlgo("TileRChMaker")
+TileRChMaker.TileRawChannelBuilderFitOverflow.TimeMaxForAmpCorrection = 25.
+TileRChMaker.TileRawChannelBuilderFitOverflow.TimeMinForAmpCorrection = -25.
 
 # Dump config
-acc.merge(JobOptsDumperCfg(ConfigFlags, FileName="DigiPUConfig.txt"))
+acc.merge(JobOptsDumperCfg(ConfigFlags, FileName="DigiPUConfigCA.txt"))
 acc.getService("StoreGateSvc").Dump = True
 acc.getService("ConditionStore").Dump = True
-acc.printConfig(withDetails=True)
+acc.printConfig(withDetails=True, summariseProps=True)
 ConfigFlags.dump()
+# print services
+from AthenaConfiguration.ComponentAccumulator import filterComponents
+for s, _ in filterComponents(acc._services):
+    acc._msg.info(s)
+# print conditions
+for s in acc._conditionsAlgs:
+    acc._msg.info(s)
+
+# dump pickle
+with open("DigiPUConfigCA.pkl", "wb") as f:
+    acc.store(f)
 
-# Was not merged; this prevents errors
-acc.wasMerged()
 # TODO uncomment running in the test once successful
 # Execute and finish
-#sc = acc.run(maxEvents=evtMax)
+#sc = acc.run(maxEvents=ConfigFlags.Exec.MaxEvents)
 # Success should be 0
 #sys.exit(not sc.isSuccess())
diff --git a/Simulation/Digitization/test/DigitizationPUConfigNew_test_setup.py b/Simulation/Digitization/test/DigitizationPUConfigNew_test_setup.py
index 7b91471cc89..87f5c3ed5ba 100644
--- a/Simulation/Digitization/test/DigitizationPUConfigNew_test_setup.py
+++ b/Simulation/Digitization/test/DigitizationPUConfigNew_test_setup.py
@@ -3,10 +3,6 @@
 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 """
 
-test_HighPtMinbiasHitsFile = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/mc16_13TeV.361239.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_high.merge.HITS.e4981_s3087_s3089/*"
-test_LowPtMinbiasHitsFile = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/mc16_13TeV.361238.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_low.merge.HITS.e4981_s3087_s3089/*"
-
-
 # lifted from preInlcude.PileUpBunchTrainsMC16c_2017_Config1.py
 test_BeamIntensityPattern = [0.0, # bunch crossing zero is always empty
 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
@@ -342,8 +338,9 @@ JobMaker=[
 ]
 
 import math
+# TODO this should be integrated into the test (ConfigFlags.Exec.MaxEvents?)
 trfJobNumber = 1
-trfMaxEvents = 25
+trfMaxEvents = 4
 corrMaxEvents = float(trfMaxEvents)
 
 #We may need to repeat this run for long production jobs.
@@ -406,6 +403,7 @@ def makeBkgInputCol(flags, initialList, nBkgEvtsPerCrossing, correctForEmptyBunc
     nBkgEventsPerFile = 5000
     try:
         from PyUtils.MetaReader import read_metadata
+        # TODO fix traceback messages generated here
         metadata = read_metadata(initialList[0])
         metadata = metadata[initialList[0]]  # promote all keys one level up
         nBkgEventsPerFile = int(metadata["nentries"])
diff --git a/Simulation/Tests/DigitizationTests/test/test_PileUpDigiComparison.sh b/Simulation/Tests/DigitizationTests/test/test_PileUpDigiComparison.sh
new file mode 100755
index 00000000000..e97e3189f89
--- /dev/null
+++ b/Simulation/Tests/DigitizationTests/test/test_PileUpDigiComparison.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+#
+# art-description: Run a digitization example to compare configuration between ConfGetter and the new ComponentAccumulator approch.
+# art-type: grid
+# art-include: master/Athena
+# art-output: mc16a_ttbar.CG.RDO.pool.root
+# art-output: mc16a_ttbar.CA.RDO.pool.root
+# art-output: log.*
+
+DigitizationPUConfigNew_test.py
+rc=$?
+echo  "art-result: $rc CAdigi"
+
+DigiOutFileName="mc16d_ttbar.CG.RDO.pool.root"
+HighPtMinbiasHitsFiles="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/mc16_13TeV.361239.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_high.merge.HITS.e4981_s3087_s3089/*"
+LowPtMinbiasHitsFiles="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/mc16_13TeV.361238.Pythia8EvtGen_A3NNPDF23LO_minbias_inelastic_low.merge.HITS.e4981_s3087_s3089/*"
+
+rc2=-9999
+if [ $rc -eq 0 ]
+then
+    # config only
+    Digi_tf.py \
+    --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \
+    --conditionsTag default:OFLCOND-MC16-SDR-20 \
+    --digiSeedOffset1 170 --digiSeedOffset2 170 \
+    --geometryVersion default:ATLAS-R2-2016-01-00-01 \
+    --inputHighPtMinbiasHitsFile ${HighPtMinbiasHitsFiles} \
+    --inputLowPtMinbiasHitsFile ${LowPtMinbiasHitsFiles} \
+    --jobNumber 1 \
+    --maxEvents 4 \
+    --numberOfCavernBkg 0 \
+    --numberOfHighPtMinBias 0.2099789464 \
+    --numberOfLowPtMinBias 80.290021063135 \
+    --outputRDOFile ${DigiOutFileName} \
+    --digiSteeringConf "StandardSignalOnlyTruth" \
+    --postExec 'all:CfgMgr.MessageSvc().setError+=["HepMcParticleLink"]' 'condSeq.LArAutoCorrTotalCondAlg.deltaBunch=1' 'job+=CfgMgr.JobOptsDumperAlg(FileName="DigiPUConfigCG.txt")' \
+    --postInclude 'default:PyJobTransforms/UseFrontier.py' \
+    --pileupFinalBunch 6 \
+    --preExec 'all:from AthenaCommon.BeamFlags import jobproperties;jobproperties.Beam.numberOfCollisions.set_Value_and_Lock(20.0);from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False)' \
+    --preInclude 'HITtoRDO:Digitization/ForceUseOfPileUpTools.py,SimulationJobOptions/preInlcude.PileUpBunchTrainsMC16c_2017_Config1.py,RunDependentSimData/configLumi_run300000_mc16d.py' \
+    --skipEvents 0 \
+    --athenaopts '"--config-only=DigiPUConfigCG.pkl"'
+    # full run
+    Digi_tf.py \
+    --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \
+    --conditionsTag default:OFLCOND-MC16-SDR-20 \
+    --digiSeedOffset1 170 --digiSeedOffset2 170 \
+    --geometryVersion default:ATLAS-R2-2016-01-00-01 \
+    --inputHighPtMinbiasHitsFile ${HighPtMinbiasHitsFiles} \
+    --inputLowPtMinbiasHitsFile ${LowPtMinbiasHitsFiles} \
+    --jobNumber 1 \
+    --maxEvents 4 \
+    --numberOfCavernBkg 0 \
+    --numberOfHighPtMinBias 0.2099789464 \
+    --numberOfLowPtMinBias 80.290021063135 \
+    --outputRDOFile ${DigiOutFileName} \
+    --digiSteeringConf "StandardSignalOnlyTruth" \
+    --postExec 'all:CfgMgr.MessageSvc().setError+=["HepMcParticleLink"]' 'condSeq.LArAutoCorrTotalCondAlg.deltaBunch=1' 'job+=CfgMgr.JobOptsDumperAlg(FileName="DigiPUConfigCG.txt")' \
+    --postInclude 'default:PyJobTransforms/UseFrontier.py' \
+    --pileupFinalBunch 6 \
+    --preExec 'all:from AthenaCommon.BeamFlags import jobproperties;jobproperties.Beam.numberOfCollisions.set_Value_and_Lock(20.0);from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False)' \
+    --preInclude 'HITtoRDO:Digitization/ForceUseOfPileUpTools.py,SimulationJobOptions/preInlcude.PileUpBunchTrainsMC16c_2017_Config1.py,RunDependentSimData/configLumi_run300000_mc16d.py' \
+    --skipEvents 0
+fi
+
+echo  "art-result: $rc2 STdigi"
+
+rc3=-9999
+if [ $rc2 -eq 0 ]
+then
+    acmd.py diff-root mc16d_ttbar.CG.RDO.pool.root mc16d_ttbar.CA.RDO.pool.root --mode=semi-detailed --order-trees --ignore-leaves RecoTimingObj_p1_HITStoRDO_timings index_ref --error-mode resilient
+    rc3=$?
+fi
+
+echo  "art-result: $rc3 comparison"
-- 
GitLab