From 7a58162403656c6cc3088f342d67a1a2113b8eff Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Tue, 11 Apr 2017 13:40:15 +0200
Subject: [PATCH] Creating new StandardInTimeOnlyGeantinoTruth configuration
 for digitization

A new digiSteeringConf is required to configure digitization to write out SDOs
linked to Geantinos when in-time Geantino pile-up truth is saved. Fixes ATLASSIM-3193


Former-commit-id: 38915bd5ea8678d9d361db09c0c35b4bdc07ed79
---
 .../python/PixelDigitizationConfig.py         |  4 ++
 .../python/PixelDigitizationConfigDb.py       |  1 +
 .../python/SCT_DigitizationConfig.py          |  6 +++
 .../python/SCT_DigitizationConfigDb.py        |  1 +
 .../python/TRT_DigitizationConfig.py          |  4 ++
 .../python/TRT_DigitizationConfigDb.py        |  1 +
 .../Digitization/python/DigiAlgConfig.py      | 37 +++++++++++++++++++
 .../python/DigitizationConfigDb.py            |  1 +
 .../python/DigitizationWriteMetaData.py       |  2 +-
 9 files changed, 56 insertions(+), 1 deletion(-)

diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
index 7dca8ed764f..b4ffda3505e 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
@@ -205,6 +205,10 @@ def PixelDigitizationTool(name="PixelDigitizationTool", **kwargs):
       conddb.addFolder('PIXEL_OFL','/PIXEL/PixReco')
     return BasicPixelDigitizationTool(name, **kwargs)
 
+def PixelGeantinoTruthDigitizationTool(name="PixelGeantinoTruthDigitizationTool", **kwargs):
+    kwargs.setdefault("ParticleBarcodeVeto", 0)
+    return PixelDigitizationTool(name, **kwargs)
+
 def PixelDigitizationToolHS(name="PixelDigitizationToolHS", **kwargs):
     kwargs.setdefault("HardScatterSplittingMode", 1)
     return BasicPixelDigitizationTool(name, **kwargs)
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigDb.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigDb.py
index ea47b1caa44..0855d849d2d 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigDb.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigDb.py
@@ -3,6 +3,7 @@
 from AthenaCommon.CfgGetter import addTool,addService,addAlgorithm
 
 addTool("PixelDigitization.PixelDigitizationConfig.PixelDigitizationTool", "PixelDigitizationTool")
+addTool("PixelDigitization.PixelDigitizationConfig.PixelGeantinoTruthDigitizationTool", "PixelGeantinoTruthDigitizationTool")
 addTool("PixelDigitization.PixelDigitizationConfig.PixelDigitizationToolHS", "PixelDigitizationToolHS")
 addTool("PixelDigitization.PixelDigitizationConfig.PixelDigitizationToolPU", "PixelDigitizationToolPU")
 addTool("PixelDigitization.PixelDigitizationConfig.PixelDigitizationToolSplitNoMergePU", "PixelDigitizationToolSplitNoMergePU")
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py
index 565f012d896..5ccf108e8cf 100644
--- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py
@@ -243,6 +243,12 @@ def SCT_DigitizationTool(name="SCT_DigitizationTool", **kwargs):
 
 ######################################################################################
 
+def SCT_GeantinoTruthDigitizationTool(name="SCT_GeantinoTruthDigitizationTool", **kwargs):
+    kwargs.setdefault("ParticleBarcodeVeto", 0)
+    return SCT_DigitizationTool(name,**kwargs)
+
+######################################################################################
+
 def SCT_DigitizationToolHS(name="SCT_DigitizationToolHS",**kwargs):
     kwargs.setdefault("OutputObjectName", "SCT_RDOs")
     kwargs.setdefault("OutputSDOName", "SCT_SDO_Map")
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigDb.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigDb.py
index 5f12118948a..72c8ba01ac6 100644
--- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigDb.py
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigDb.py
@@ -2,6 +2,7 @@
 
 from AthenaCommon.CfgGetter import addTool,addService,addAlgorithm
 addTool("SCT_Digitization.SCT_DigitizationConfig.SCT_DigitizationTool"          , "SCT_DigitizationTool")
+addTool("SCT_Digitization.SCT_DigitizationConfig.SCT_GeantinoTruthDigitizationTool"          , "SCT_GeantinoTruthDigitizationTool")
 addTool("SCT_Digitization.SCT_DigitizationConfig.SCT_DigitizationToolHS"        , "SCT_DigitizationToolHS")
 addTool("SCT_Digitization.SCT_DigitizationConfig.SCT_DigitizationToolPU"        , "SCT_DigitizationToolPU")
 addTool("SCT_Digitization.SCT_DigitizationConfig.SCT_DigitizationToolSplitNoMergePU", "SCT_DigitizationToolSplitNoMergePU")
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py
index af1410e7061..4ae69e455bb 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py
@@ -93,6 +93,10 @@ def TRTDigitizationTool(name="TRTDigitizationTool",**kwargs):
     kwargs.setdefault("HardScatterSplittingMode", 0)
     return BasicTRTDigitizationTool(name,**kwargs)
 
+def TRTGeantinoTruthDigitizationTool(name="TRTGeantinoTruthDigitizationTool",**kwargs):
+    kwargs.setdefault("ParticleBarcodeVeto", 0)
+    return TRTDigitizationTool(name,**kwargs)
+
 def TRTDigitizationToolHS(name="TRTDigitizationToolHS",**kwargs):
     kwargs.setdefault("OutputObjectName", "TRT_RDOs")
     kwargs.setdefault("OutputSDOName", "TRT_SDO_Map")
diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigDb.py b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigDb.py
index 3667cd72f06..a1300473ef9 100644
--- a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigDb.py
+++ b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfigDb.py
@@ -3,6 +3,7 @@
 from AthenaCommon.CfgGetter import addTool, addAlgorithm
 addTool("TRT_Digitization.TRT_DigitizationConfig.getTRTRange"            , "TRTRange")
 addTool("TRT_Digitization.TRT_DigitizationConfig.TRTDigitizationTool"    , "TRTDigitizationTool")
+addTool("TRT_Digitization.TRT_DigitizationConfig.TRTGeantinoTruthDigitizationTool"    , "TRTGeantinoTruthDigitizationTool")
 addTool("TRT_Digitization.TRT_DigitizationConfig.TRTDigitizationToolHS"  , "TRTDigitizationToolHS")
 addTool("TRT_Digitization.TRT_DigitizationConfig.TRTDigitizationToolPU"  , "TRTDigitizationToolPU")
 addTool("TRT_Digitization.TRT_DigitizationConfig.TRTDigitizationToolSplitNoMergePU", "TRTDigitizationToolSplitNoMergePU")
diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py
index 71c978f8787..80b16aff41d 100644
--- a/Simulation/Digitization/python/DigiAlgConfig.py
+++ b/Simulation/Digitization/python/DigiAlgConfig.py
@@ -99,6 +99,23 @@ def getStandardInDetPileUpTools():
             PileUpToolsList += [ "TRTDigitizationTool" ]
     return PileUpToolsList
 
+def getGeantinoTruthInDetPileUpTools():
+    from AthenaCommon.DetFlags import DetFlags
+    from Digitization.DigitizationFlags import digitizationFlags
+    PileUpToolsList = []
+    unsupportedKeys = ['doFastPixelDigi', 'doLightPixelDigi', 'doSmearedPixelDigi', 'doFastSCT_Digi', 'doFastTRT_Digi']
+    if not set(unsupportedKeys).isdisjoint(set(digitizationFlags.experimentalDigi())):
+        print "DigiAlgConfig.py ERROR The following digitizationFlags.experimentalDigi settings are not supported when digiSteeringConf is set to", digitizationFlags.digitSteeringConf.get_Value(), ": ", str(unsupportedKeys), " and will be ignored."
+    if DetFlags.digitize.BCM_on():
+        PileUpToolsList += [ "BCM_DigitizationTool" ]
+    if DetFlags.digitize.pixel_on():
+        PileUpToolsList += [ "PixelGeantinoTruthDigitizationTool" ]
+    if DetFlags.digitize.SCT_on():
+        PileUpToolsList += [ "SCT_GeantinoTruthDigitizationTool" ]
+    if DetFlags.digitize.TRT_on():
+        PileUpToolsList += [ "TRTGeantinoTruthDigitizationTool" ]
+    return PileUpToolsList
+
 def getFastInDetPileUpTools():
     from AthenaCommon.DetFlags import DetFlags
     PileUpToolsList = []
@@ -280,6 +297,22 @@ def getStandardInTimeOnlyTruthPileUpToolsList():
     PileUpToolsList += [ "MergeRecoTimingObjTool" ]
     return PileUpToolsList
 
+def getStandardInTimeOnlyGeantinoTruthPileUpToolsList():
+    PileUpToolsList = []
+    ## Truth information
+    PileUpToolsList += getStandardInTimeOnlyTruthPileUpTools()
+    ## Forward Detector Digitization
+    PileUpToolsList += getStandardForwardPileUpTools()
+    ## Inner Detector Digitization
+    PileUpToolsList += getGeantinoTruthInDetPileUpTools()
+    ## Calo Digitization
+    PileUpToolsList += getStandardCaloPileUpTools()
+    ## Muon System Digitization
+    PileUpToolsList += getStandardMuonPileUpTools()
+    ## RecoTimingObj
+    PileUpToolsList += [ "MergeRecoTimingObjTool" ]
+    return PileUpToolsList
+
 def getFastPileUpToolsList():
     PileUpToolsList = []
     ## Truth information
@@ -400,6 +433,10 @@ def getStandardInTimeOnlyTruthPileUpToolsAlg(name="StandardInTimeOnlyTruthPileUp
     kwargs.setdefault('PileUpTools', getStandardInTimeOnlyTruthPileUpToolsList() )
     return getStandardPileUpToolsAlg(name, **kwargs)
 
+def getStandardInTimeOnlyGeantinoTruthPileUpToolsAlg(name="StandardInTimeOnlyGeantinoTruthPileUpToolsAlg", **kwargs):
+    kwargs.setdefault('PileUpTools', getStandardInTimeOnlyGeantinoTruthPileUpToolsList() )
+    return getStandardPileUpToolsAlg(name, **kwargs)
+
 def getSplitNoMergePileUpToolsAlg(name="SplitNoMergePileUpToolsAlg", **kwargs):
     kwargs.setdefault('PileUpTools', getSplitNoMergePileUpToolsList() )
     return getStandardPileUpToolsAlg(name, **kwargs)
diff --git a/Simulation/Digitization/python/DigitizationConfigDb.py b/Simulation/Digitization/python/DigitizationConfigDb.py
index 0ebd5274a81..a791db8ec48 100644
--- a/Simulation/Digitization/python/DigitizationConfigDb.py
+++ b/Simulation/Digitization/python/DigitizationConfigDb.py
@@ -32,6 +32,7 @@ addAlgorithm("Digitization.DigiAlgConfig.getFastPileUpToolsAlg"      , "FastPile
 addAlgorithm("Digitization.DigiAlgConfig.getSplitPileUpToolsAlg"     , "SplitPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getStandardSignalOnlyTruthPileUpToolsAlg"  , "StandardSignalOnlyTruthPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getStandardInTimeOnlyTruthPileUpToolsAlg"  , "StandardInTimeOnlyTruthPileUpToolsAlg")
+addAlgorithm("Digitization.DigiAlgConfig.getStandardInTimeOnlyGeantinoTruthPileUpToolsAlg"  , "StandardInTimeOnlyGeantinoTruthPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergePileUpToolsAlg"  , "SplitNoMergePileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergeSFPileUpToolsAlg"  , "SplitNoMergeSFPileUpToolsAlg")
 addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergeFSPileUpToolsAlg"  , "SplitNoMergeFSPileUpToolsAlg")
diff --git a/Simulation/Digitization/python/DigitizationWriteMetaData.py b/Simulation/Digitization/python/DigitizationWriteMetaData.py
index 7a398acc7ae..513b038d87d 100644
--- a/Simulation/Digitization/python/DigitizationWriteMetaData.py
+++ b/Simulation/Digitization/python/DigitizationWriteMetaData.py
@@ -76,7 +76,7 @@ def writeDigitizationMetadata():
                          "initialBunchCrossing", "finalBunchCrossing", "FixedT0BunchCrossing",
                          "doLowPtMinimumBias", "doHighPtMinimumBias",
                          "doCavern", "doBeamGas", "doBeamHalo",
-                         "rndmSvc", "physicsList", "overrideMetadata","pileupDSID"]
+                         "rndmSvc", "physicsList", "overrideMetadata","pileupDSID","digiSteeringConf"]
                          #"readSeedsFromFile", "rndmSeedInputFile",
     from Digitization.DigitizationFlags import digitizationFlags
     if (not ModifyingEventIdBySvc()):
-- 
GitLab