diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py index 8e2d20d8e646a25290ed983de769ff19a3ce6e83..36e9a2bee5920dc127b2e2c64f6aba53c6773867 100644 --- a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py +++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/SCT_ReadCalibChipDataConfig.py @@ -1,6 +1,6 @@ """Define methods to configure ReadCalibChipDataTool -Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -21,9 +21,21 @@ def SCT_ReadCalibChipDataCfg(flags, name="SCT_ReadCalibChip", **kwargs): acc = ComponentAccumulator() # folders noiseFolder = kwargs.get("noiseFolder", "/SCT/DAQ/Calibration/ChipNoise") - acc.merge(addFoldersSplitOnline(flags, "SCT", noiseFolder, noiseFolder, "CondAttrListCollection")) gainFolder = kwargs.get("gainFolder", "/SCT/DAQ/Calibration/ChipGain") - acc.merge(addFoldersSplitOnline(flags, "SCT", gainFolder, gainFolder, "CondAttrListCollection")) + if flags.Overlay.DataOverlay: + forceDb="OFLP200" + noiseTag="SctDaqCalibrationChipNoise-Apr10-01" + gainTag="SctDaqCalibrationChipGain-Apr10-01" + else: + forceDb=None + noiseTag=None + gainTag=None + + acc.merge(addFoldersSplitOnline(flags, "SCT", noiseFolder, noiseFolder, "CondAttrListCollection", + forceDb=forceDb, tag=noiseTag)) + acc.merge(addFoldersSplitOnline(flags, "SCT", gainFolder, gainFolder, "CondAttrListCollection", + forceDb=forceDb, tag=gainTag)) + # Algorithms noiseAlg = SCT_ReadCalibChipNoiseCondAlg(name=name + "NoiseCondAlg", ReadKey=noiseFolder) acc.addCondAlgo(noiseAlg) @@ -32,4 +44,3 @@ def SCT_ReadCalibChipDataCfg(flags, name="SCT_ReadCalibChip", **kwargs): tool = kwargs.get("ReadCalibChipDataTool", SCT_ReadCalibChipDataToolCfg(flags)) acc.setPrivateTools(tool) return acc - diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py index 3c07578f44e4bf0fe2242b9fd0629ff4747c57d0..9fca89128a01d8b699d669a36c46df925711ee99 100644 --- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py +++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfigNew.py @@ -92,8 +92,8 @@ def SCT_OverlayDigitizationToolCfg(flags, name="SCT_OverlayDigitizationTool",**k """Return ComponentAccumulator with overlay configured SCT digitization tool""" acc = ComponentAccumulator() kwargs.setdefault("OnlyUseContainerName", False) - kwargs.setdefault("OutputObjectName", "StoreGateSvc+" + flags.Overlay.SigPrefix + "SCT_RDOs") - kwargs.setdefault("OutputSDOName", "StoreGateSvc+" + flags.Overlay.SigPrefix + "SCT_SDO_Map") + kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "SCT_RDOs") + kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "SCT_SDO_Map") kwargs.setdefault("HardScatterSplittingMode", 0) tool = acc.popToolsAndMerge(SCT_DigitizationCommonCfg(flags, name, **kwargs)) acc.setPrivateTools(tool) @@ -186,10 +186,10 @@ def SCT_FrontEndCfg(flags, name="SCT_FrontEnd", **kwargs): else: kwargs.setdefault("NoiseOn", True) kwargs.setdefault("AnalogueNoiseOn", True) - # In overlay MC, only analogue noise is on. Noise hits are not added. - if flags.Detector.Overlay and flags.Input.isMC: + # In overlay MC, only analogue noise is on (off for data). Noise hits are not added. + if flags.Detector.Overlay: kwargs["NoiseOn"] = False - kwargs["AnalogueNoiseOn"] = True + kwargs["AnalogueNoiseOn"] = flags.Input.isMC # Use Calibration data from Conditions DB, still for testing purposes only kwargs.setdefault("UseCalibData", True) # Setup the ReadCalibChip folders and Svc @@ -266,7 +266,11 @@ def SCT_OverlayDigitizationBasicCfg(flags, **kwargs): if "DigitizationTool" not in kwargs: tool = acc.popToolsAndMerge(SCT_OverlayDigitizationToolCfg(flags)) kwargs["DigitizationTool"] = tool - acc.addEventAlgo(SCT_Digitization(**kwargs)) + + if flags.Concurrency.NumThreads > 0: + kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads) + + acc.addEventAlgo(SCT_Digitization(name="SCT_OverlayDigitization", **kwargs)) return acc diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/python/SCTOverlayConfig.py b/InnerDetector/InDetRawAlgs/InDetOverlay/python/SCTOverlayConfig.py index f0d7df6226a2aab6c73deccd977f1eb9b84bd8b5..abcafb562a09605b77aeb2c218c77fef00f81e31 100644 --- a/InnerDetector/InDetRawAlgs/InDetOverlay/python/SCTOverlayConfig.py +++ b/InnerDetector/InDetRawAlgs/InDetOverlay/python/SCTOverlayConfig.py @@ -1,13 +1,61 @@ """Define methods to construct configured SCT overlay algorithms -Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory -def SCTOverlayAlgCfg(flags, name = "SCTOverlay", **kwargs): +def SCTRawDataProviderAlgCfg(flags, name="SCTRawDataProvider", **kwargs): + """Return a ComponentAccumulator for SCT raw data provider""" + # Temporary until available in the central location + acc = ComponentAccumulator() + + kwargs.setdefault("RDOKey", flags.Overlay.BkgPrefix + "SCT_RDOs") + kwargs.setdefault("LVL1IDKey", flags.Overlay.BkgPrefix + "SCT_LVL1ID") + kwargs.setdefault("BCIDKey", flags.Overlay.BkgPrefix + "SCT_BCID") + + SCTRawDataProvider = CompFactory.SCTRawDataProvider + alg = SCTRawDataProvider(name, **kwargs) + acc.addEventAlgo(alg) + + # load the SCTEventFlagWriter + SCT_ConfigurationConditionsTool = CompFactory.SCT_ConfigurationConditionsTool + acc.addPublicTool(SCT_ConfigurationConditionsTool()) + + channelFolder = "/SCT/DAQ/Config/Chip" + moduleFolder = "/SCT/DAQ/Config/Module" + murFolder = "/SCT/DAQ/Config/MUR" + SCT_ConfigurationCondAlg = CompFactory.SCT_ConfigurationCondAlg + acc.addCondAlgo(SCT_ConfigurationCondAlg(ReadKeyChannel = channelFolder, + ReadKeyModule = moduleFolder, + ReadKeyMur = murFolder)) + from IOVDbSvc.IOVDbSvcConfig import addFolders + acc.merge(addFolders(flags, [channelFolder, moduleFolder, murFolder], "SCT", className="CondAttrListVec")) + + SCTEventFlagWriter = CompFactory.SCTEventFlagWriter + alg = SCTEventFlagWriter() + acc.addEventAlgo(alg) + + return acc + + +def SCTDataOverlayExtraCfg(flags, **kwargs): + """Return a ComponentAccumulator with SCT data overlay specifics""" + acc = ComponentAccumulator() + + # We need to convert BS to RDO for data overlay + acc.merge(SCTRawDataProviderAlgCfg(flags)) + + # Add SCT cabling conditions + from SCT_Cabling.SCT_CablingConfig import SCT_CablingCondAlgCfg + acc.merge(SCT_CablingCondAlgCfg(flags)) + + return acc + + +def SCTOverlayAlgCfg(flags, name="SCTOverlay", **kwargs): """Return a ComponentAccumulator for SCTOverlay algorithm""" acc = ComponentAccumulator() @@ -16,37 +64,38 @@ def SCTOverlayAlgCfg(flags, name = "SCTOverlay", **kwargs): kwargs.setdefault("OutputKey", "SCT_RDOs") # Do SCT overlay - SCTOverlay=CompFactory.SCTOverlay + SCTOverlay = CompFactory.SCTOverlay alg = SCTOverlay(name, **kwargs) acc.addEventAlgo(alg) # Setup output from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - acc.merge(OutputStreamCfg(flags, "RDO", ItemList = [ + acc.merge(OutputStreamCfg(flags, "RDO", ItemList=[ "SCT_RDO_Container#SCT_RDOs" ])) return acc -def SCTTruthOverlayCfg(flags, name = "SCTSDOOverlay", **kwargs): +def SCTTruthOverlayCfg(flags, name="SCTSDOOverlay", **kwargs): """Return a ComponentAccumulator for the SCT SDO overlay algorithm""" acc = ComponentAccumulator() # We do not need background SCT SDOs kwargs.setdefault("BkgInputKey", "") - kwargs.setdefault("SignalInputKey", flags.Overlay.BkgPrefix + "SCT_SDO_Map") + kwargs.setdefault("SignalInputKey", + flags.Overlay.SigPrefix + "SCT_SDO_Map") kwargs.setdefault("OutputKey", "SCT_SDO_Map") # Do SCT truth overlay - InDetSDOOverlay=CompFactory.InDetSDOOverlay + InDetSDOOverlay = CompFactory.InDetSDOOverlay alg = InDetSDOOverlay(name, **kwargs) acc.addEventAlgo(alg) # Setup output from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - acc.merge(OutputStreamCfg(flags, "RDO", ItemList = [ + acc.merge(OutputStreamCfg(flags, "RDO", ItemList=[ "InDetSimDataCollection#SCT_SDO_Map" ])) @@ -57,9 +106,13 @@ def SCTOverlayCfg(flags): """Configure and return a ComponentAccumulator for SCT overlay""" acc = ComponentAccumulator() + # Add data overlay specifics + if flags.Overlay.DataOverlay: + acc.merge(SCTDataOverlayExtraCfg(flags)) + # Add SCT overlay digitization algorithm - from SCT_Digitization.SCT_DigitizationConfigNew import SCT_OverlayDigitizationCfg - acc.merge(SCT_OverlayDigitizationCfg(flags)) + from SCT_Digitization.SCT_DigitizationConfigNew import SCT_OverlayDigitizationBasicCfg + acc.merge(SCT_OverlayDigitizationBasicCfg(flags)) # Add SCT overlay algorithm acc.merge(SCTOverlayAlgCfg(flags)) # Add SCT truth overlay diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/test/SCTOverlayConfig_test.py b/InnerDetector/InDetRawAlgs/InDetOverlay/test/SCTOverlayConfig_test.py index f176a02dc17d6c3f486caea43225f3d60e60c6bc..7d00aa2871d344b4b4efbebe98212ce5e1fb9b2e 100755 --- a/InnerDetector/InDetRawAlgs/InDetOverlay/test/SCTOverlayConfig_test.py +++ b/InnerDetector/InDetRawAlgs/InDetOverlay/test/SCTOverlayConfig_test.py @@ -8,12 +8,12 @@ import sys from AthenaCommon.Configurable import Configurable from AthenaConfiguration.AllConfigFlags import ConfigFlags from AthenaConfiguration.MainServicesConfig import MainServicesThreadedCfg -from AthenaConfiguration.TestDefaults import defaultTestFiles from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg from InDetOverlay.SCTOverlayConfig import SCTOverlayCfg from OverlayConfiguration.OverlayTestHelpers import \ - CommonTestArgumentParser, postprocessAndLockFlags, printAndRun + CommonTestArgumentParser, defaultTestFlags, postprocessAndLockFlags, printAndRun from OverlayCopyAlgs.OverlayCopyAlgsConfig import CopyMcEventCollectionCfg +from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoOverlayCfg # Configure Configurable.configurableRun3Behavior = True @@ -23,20 +23,15 @@ parser = CommonTestArgumentParser("SCTOverlayConfig_test.py") args = parser.parse_args() # Configure -ConfigFlags.Input.Files = defaultTestFiles.RDO_BKG -ConfigFlags.Input.SecondaryFiles = defaultTestFiles.HITS -ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16" -ConfigFlags.Overlay.DataOverlay = False -ConfigFlags.Output.RDOFileName = "myRDO.pool.root" -ConfigFlags.Output.RDO_SGNLFileName = "myRDO_SGNL.pool.root" - +defaultTestFlags(ConfigFlags, args) postprocessAndLockFlags(ConfigFlags, args) # Construct our accumulator to run acc = MainServicesThreadedCfg(ConfigFlags) acc.merge(PoolReadCfg(ConfigFlags)) -# Add truth overlay (needed downstream) +# Add event and truth overlay (needed downstream) +acc.merge(EventInfoOverlayCfg(ConfigFlags)) acc.merge(CopyMcEventCollectionCfg(ConfigFlags)) # Add SCT overlay diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py b/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py index e015bc0ae68dbd1195aedf88712e3ac22bcaeac7..2fc9e28852cca5f612248543211e753a1292105c 100644 --- a/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py @@ -9,6 +9,7 @@ from AthenaConfiguration.MainServicesConfig import MainServicesThreadedCfg from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg +from InDetOverlay.SCTOverlayConfig import SCTOverlayCfg from OverlayCopyAlgs.OverlayCopyAlgsConfig import \ CopyCaloCalibrationHitContainersCfg, CopyJetTruthInfoCfg, CopyMcEventCollectionCfg, \ CopyTimingsCfg, CopyTrackRecordCollectionsCfg @@ -48,4 +49,8 @@ def OverlayMainCfg(configFlags): acc.merge(CopyCaloCalibrationHitContainersCfg(configFlags)) acc.merge(CopyTrackRecordCollectionsCfg(configFlags)) + # Inner detector + if configFlags.Detector.OverlaySCT: + acc.merge(SCTOverlayCfg(configFlags)) + return acc