From ccc8ffda6e8ff861ed6a13c7b4b162cf46a3bcef Mon Sep 17 00:00:00 2001 From: Tadej Novak <tadej.novak@cern.ch> Date: Sat, 29 Feb 2020 14:57:18 +0100 Subject: [PATCH] Tile overlay new-style config and updates --- .../python/UnifyProperties.py | 1 + Control/AthenaConfiguration/share/confTool.py | 5 ++ .../share/CaloOverlay_jobOptions.py | 7 +- .../LArROD/python/LArDigitThinnerConfig.py | 2 +- .../python/OverlaySteering.py | 3 + .../python/OverlayTestHelpers.py | 3 + .../test_DataOverlay_ConfigTest_Zmumu_Tile.sh | 80 +++++++++++++++++++ .../test_MCOverlay_ConfigTest_ttbar_Tile.sh | 62 ++++++++++++++ .../python/TileInfoLoaderConfig.py | 2 +- .../python/TileConfigFlags.py | 5 +- .../TileRecUtils/python/TileDQstatusConfig.py | 5 ++ .../TileSimAlgs/TileSimAlgs/TileDigitsMaker.h | 16 +--- .../python/TileDigitizationConfig.py | 7 +- .../python/TileDigitsMakerConfig.py | 25 +++--- .../TileSimAlgs/python/TileHitToTTL1Config.py | 5 +- .../python/TileHitVecToCntConfig.py | 10 ++- .../python/TileMuonReceiverConfig.py | 5 +- .../python/TileMuonReceiverDecisionConfig.py | 5 +- .../share/TileDigiCommon_jobOptions.py | 24 +++++- .../TileSimAlgs/src/TileDigitsMaker.cxx | 54 +++---------- 20 files changed, 238 insertions(+), 88 deletions(-) create mode 100755 Simulation/Tests/OverlayTests/test/test_DataOverlay_ConfigTest_Zmumu_Tile.sh create mode 100755 Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh diff --git a/Control/AthenaConfiguration/python/UnifyProperties.py b/Control/AthenaConfiguration/python/UnifyProperties.py index 5f0a28ba5bd..10bc9541d32 100644 --- a/Control/AthenaConfiguration/python/UnifyProperties.py +++ b/Control/AthenaConfiguration/python/UnifyProperties.py @@ -80,6 +80,7 @@ _propsToUnify={"GeoModelSvc.DetectorTools":unifySet, "AddressRemappingSvc.TypeKeyRenameMaps": unifySet, "AuditorSvc.Auditors": unifySet, "MetaDataSvc.MetaDataTools": unifySet, + "ByteStreamAddressProviderSvc.TypeNames": unifySet, } def setUnificationFunction(key, function): diff --git a/Control/AthenaConfiguration/share/confTool.py b/Control/AthenaConfiguration/share/confTool.py index f4d055d83b0..5caffd92d0d 100755 --- a/Control/AthenaConfiguration/share/confTool.py +++ b/Control/AthenaConfiguration/share/confTool.py @@ -304,6 +304,11 @@ def __parseIOVDbFolder(definition): if db_match: result['db'] = db_match.group(1) definition = definition.replace(db_match.group(0), '') + # key + key_match = re.search(r'<key>(.*)</key>', definition) + if key_match: + result['key'] = key_match.group(1) + definition = definition.replace(key_match.group(0), '') # tag tag_match = re.search(r'<tag>(.*)</tag>', definition) if tag_match: diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/CaloOverlay_jobOptions.py b/Event/EventOverlay/EventOverlayJobTransforms/share/CaloOverlay_jobOptions.py index dc61338496f..ecf033ea093 100644 --- a/Event/EventOverlay/EventOverlayJobTransforms/share/CaloOverlay_jobOptions.py +++ b/Event/EventOverlay/EventOverlayJobTransforms/share/CaloOverlay_jobOptions.py @@ -78,18 +78,15 @@ if DetFlags.overlay.Tile_on(): job.TileHitVecToCnt.DigitizationTool.RndmEvtOverlay = True job.TileHitVecToCnt.DigitizationTool.OnlyUseContainerName = not overlayFlags.isOverlayMT() theTileDigitsMaker.RndmEvtOverlay = True - theTileDigitsMaker.OverlayTileDigitContainerName = "TileDigitsCnt" + theTileDigitsMaker.InputTileDigitContainer = "TileDigitsCnt" if overlayFlags.isOverlayMT(): - theTileDigitsMaker.OverlayTileDigitContainerName = overlayFlags.bkgPrefix() + "TileDigitsCnt" - theTileDigitsMaker.OverlayTileRawChannelContainerName = overlayFlags.bkgPrefix() + "TileRawChannelCnt" + theTileDigitsMaker.InputTileDigitContainer = overlayFlags.bkgPrefix() + "TileDigitsCnt" theTileDigitsMaker.OnlyUseContainerName = False if overlayFlags.isDataOverlay(): theApp.Dlls += [ "TileByteStream"] - ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileBeamElemContainer/TileBeamElemCnt"] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileRawChannelContainer/TileRawChannelCnt"] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileDigitsContainer/TileDigitsCnt"] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileL2Container/TileL2Cnt"] - ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileLaserObject/TileLaserObj"] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileRawChannelContainer/MuRcvRawChCnt"] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TileDigitsContainer/MuRcvDigitsCnt"] diff --git a/LArCalorimeter/LArROD/python/LArDigitThinnerConfig.py b/LArCalorimeter/LArROD/python/LArDigitThinnerConfig.py index 88681f9927a..9d71e5e273e 100644 --- a/LArCalorimeter/LArROD/python/LArDigitThinnerConfig.py +++ b/LArCalorimeter/LArROD/python/LArDigitThinnerConfig.py @@ -13,7 +13,7 @@ def LArDigitThinnerCfg(flags, **kwargs): # based on DefaultLArDigitThinner acc = ComponentAccumulator() - if (not flags.Input.isMC) and (not flags.Overlay.DataOverlay) and flags.Input.Format == "bytestream": + if (not flags.Input.isMC) and (not flags.Overlay.DataOverlay) and flags.Input.Format == "BS": acc.merge(LArRawDataReadingAlg(InputContainerName="FREE")) acc.merge(LArOnOffIdMappingCfg(flags)) diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py b/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py index ceb7857a91b..5bfc2e45594 100644 --- a/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlaySteering.py @@ -20,6 +20,7 @@ from MuonConfig.TgcOverlayConfig import TgcOverlayCfg from OverlayCopyAlgs.OverlayCopyAlgsConfig import \ CopyCaloCalibrationHitContainersCfg, CopyJetTruthInfoCfg, CopyMcEventCollectionCfg, \ CopyTimingsCfg, CopyTrackRecordCollectionsCfg +from TileSimAlgs.TileDigitizationConfig import TileDigitizationCfg from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoOverlayCfg @@ -67,6 +68,8 @@ def OverlayMainCfg(configFlags): # Calorimeters if configFlags.Detector.OverlayLAr: acc.merge(LArOverlayCfg(configFlags)) + if configFlags.Detector.OverlayTile: + acc.merge(TileDigitizationCfg(configFlags)) # Muon system if configFlags.Detector.OverlayCSC: diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py b/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py index e991ecd6379..59844f86797 100644 --- a/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py @@ -87,6 +87,9 @@ def defaultTestFlags(configFlags, args): configFlags.LAr.ROD.nSamples = 4 configFlags.LAr.ROD.NumberOfCollisions = 20 configFlags.LAr.ROD.UseHighestGainAutoCorr = True + configFlags.Tile.BestPhaseFromCOOL = False + configFlags.Tile.correctTime = False + configFlags.Tile.zeroAmplitudeWithoutDigits = False from AthenaConfiguration.TestDefaults import defaultTestFiles if args.data: diff --git a/Simulation/Tests/OverlayTests/test/test_DataOverlay_ConfigTest_Zmumu_Tile.sh b/Simulation/Tests/OverlayTests/test/test_DataOverlay_ConfigTest_Zmumu_Tile.sh new file mode 100755 index 00000000000..3b499d428ba --- /dev/null +++ b/Simulation/Tests/OverlayTests/test/test_DataOverlay_ConfigTest_Zmumu_Tile.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +# art-description: MC+data Overlay with MT support, config test +# art-type: grid +# art-include: master/Athena + +# art-output: legacyDataOverlayRDO.pool.root +# art-output: dataOverlayRDO.pool.root +# art-output: log.* +# art-output: mem.summary.* +# art-output: mem.full.* +# art-output: runargs.* +# art-output: *.pkl +# art-output: *Config.txt + +set -o pipefail + +events=2 + +OverlayBS_tf.py \ +--inputBS_SKIMFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc15_valid.00200010.overlay_streamsAll_2016_pp_1.skim.DRAW.r8381/DRAW.09331084._000146.pool.root.1 \ +--inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc16_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.OverlaySim/HITS.pool.root \ +--outputRDOFile legacyDataOverlayRDO.pool.root \ +--maxEvents $events \ +--conditionsTag CONDBR2-BLKPA-2016-12 \ +--samplingFractionDbTag FTFP_BERT_BIRK \ +--fSampltag LARElecCalibMCfSampl-G496-19213- \ +--preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.nSamples.set_Value_and_Lock(4);from LArConditionsCommon.LArCondFlags import larCondFlags; larCondFlags.OFCShapeFolder.set_Value_and_Lock("4samples1phase")' \ +--postExec 'outStream.ItemList.remove("xAOD::EventInfoContainer#*"); outStream.ItemList.remove("xAOD::EventInfoAuxContainer#*");' \ +--preInclude 'SimulationJobOptions/preInclude.TileOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ +--postInclude 'EventOverlayJobTransforms/Rt_override_CONDBR2-BLKPA-2015-12.py' \ +--ignorePatterns "L1TopoMenuLoader.+ERROR." \ +--imf False \ +--athenaopts '"--config-only=ConfigLegacy.pkl"' + +OverlayBS_tf.py \ +--inputBS_SKIMFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc15_valid.00200010.overlay_streamsAll_2016_pp_1.skim.DRAW.r8381/DRAW.09331084._000146.pool.root.1 \ +--inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/mc16_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.OverlaySim/HITS.pool.root \ +--outputRDOFile legacyDataOverlayRDO.pool.root \ +--maxEvents $events \ +--conditionsTag CONDBR2-BLKPA-2016-12 \ +--samplingFractionDbTag FTFP_BERT_BIRK \ +--fSampltag LARElecCalibMCfSampl-G496-19213- \ +--preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.nSamples.set_Value_and_Lock(4);from LArConditionsCommon.LArCondFlags import larCondFlags; larCondFlags.OFCShapeFolder.set_Value_and_Lock("4samples1phase")' \ +--postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt"); outStream.ItemList.remove("xAOD::EventInfoContainer#*"); outStream.ItemList.remove("xAOD::EventInfoAuxContainer#*");' \ +--preInclude 'SimulationJobOptions/preInclude.TileOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ +--postInclude 'EventOverlayJobTransforms/Rt_override_CONDBR2-BLKPA-2015-12.py' \ +--ignorePatterns "L1TopoMenuLoader.+ERROR." \ +--imf False + +rc=$? +echo "art-result: $rc configLegacy" +mv log.OverlayBS log.OverlayLegacy + +rc2=-9999 +if [ $rc -eq 0 ] +then + OverlayTest.py Tile -d -t 1 -n $events 2>&1 | tee log.OverlayTest + rc2=$? +fi +echo "art-result: $rc2 configNew" + +rc3=-9999 +if [ $rc2 -eq 0 ] +then + acmd.py diff-root legacyDataOverlayRDO.pool.root dataOverlayRDO.pool.root \ + --error-mode resilient --mode=semi-detailed \ + --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings RecoTimingObj_p1_HITStoRDO_timings index_ref \ + xAOD::EventAuxInfo_v1_EventInfoAuxDyn.subEventIndex \ + xAOD::EventAuxInfo_v1_EventInfoAuxDyn.subEventTime \ + xAOD::EventAuxInfo_v1_EventInfoAuxDyn.subEventType \ + xAOD::EventAuxInfo_v1_EventInfoAux.detectorMask0 \ + xAOD::EventAuxInfo_v1_EventInfoAux.detectorMask1 \ + xAOD::EventAuxInfo_v1_EventInfoAux.detectorMask2 \ + xAOD::EventAuxInfo_v1_EventInfoAux.detectorMask3 \ + xAOD::EventAuxInfo_v1_EventInfoAux.actualInteractionsPerCrossing \ + xAOD::EventAuxInfo_v1_EventInfoAux.averageInteractionsPerCrossing + rc3=$? +fi +echo "art-result: $rc3 comparison" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh new file mode 100755 index 00000000000..e65aa301c9c --- /dev/null +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +# art-description: MC+MC Overlay with MT support, config test +# art-type: grid +# art-include: master/Athena + +# art-output: legacyMcOverlayRDO.pool.root +# art-output: mcOverlayRDO.pool.root +# art-output: log.* +# art-output: mem.summary.* +# art-output: mem.full.* +# art-output: runargs.* +# art-output: *.pkl +# art-output: *Config.txt + +set -o pipefail + +events=2 + +Overlay_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 \ +--inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ +--outputRDOFile legacyMcOverlayRDO.pool.root \ +--maxEvents $events \ +--conditionsTag OFLCOND-MC16-SDR-20 \ +--geometryVersion ATLAS-R2-2016-01-00-01 \ +--preExec '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 'Overlay:SimulationJobOptions/preInclude.TileOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ +--imf False \ +--athenaopts '"--config-only=ConfigLegacy.pkl"' + +Overlay_tf.py \ +--inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ +--inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ +--outputRDOFile legacyMcOverlayRDO.pool.root \ +--maxEvents $events \ +--conditionsTag OFLCOND-MC16-SDR-20 \ +--geometryVersion ATLAS-R2-2016-01-00-01 \ +--preExec '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);' \ +--postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ +--preInclude 'Overlay:SimulationJobOptions/preInclude.TileOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ +--imf False + +rc=$? +echo "art-result: $rc configLegacy" +mv log.Overlay log.OverlayLegacy + +rc2=-9999 +if [ $rc -eq 0 ] +then + OverlayTest.py Tile -t 1 -n $events 2>&1 | tee log.OverlayTest + rc2=$? +fi +echo "art-result: $rc2 configNew" + +rc3=-9999 +if [ $rc2 -eq 0 ] +then + acmd.py diff-root legacyMcOverlayRDO.pool.root mcOverlayRDO.pool.root --error-mode resilient --mode=semi-detailed --ignore-leaves RecoTimingObj_p1_EVNTtoHITS_timings RecoTimingObj_p1_HITStoRDO_timings index_ref + rc3=$? +fi +echo "art-result: $rc3 comparison" diff --git a/TileCalorimeter/TileConditions/python/TileInfoLoaderConfig.py b/TileCalorimeter/TileConditions/python/TileInfoLoaderConfig.py index e06644279e5..be971c6d2db 100644 --- a/TileCalorimeter/TileConditions/python/TileInfoLoaderConfig.py +++ b/TileCalorimeter/TileConditions/python/TileInfoLoaderConfig.py @@ -31,7 +31,7 @@ def TileInfoLoaderCfg(flags, **kwargs): kwargs['NoiseScaleIndex'] = 1 # Noise for Optimal Filter without iterations - if flags.Input.isMC and 'TileHitVec' in flags.Input.Collections: + if (flags.Input.isMC or flags.Detector.OverlayTile) and ('TileHitVec' in flags.Input.Collections or 'TileHitVec' in flags.Input.SecondaryCollections): G4Version = flags.Sim.G4Version G4VersionMajor, G4VersionMinor = G4Version.split(".")[1:3] diff --git a/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py b/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py index e92a911f3ad..de5fb891101 100644 --- a/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py +++ b/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py @@ -144,7 +144,10 @@ def _getRawChannelContainer(prevFlags): if prevFlags.Tile.doOpt2: rawChannelContainer = 'TileRawChannelOpt2' if prevFlags.Tile.doOptATLAS: - rawChannelContainer = 'TileRawChannelCnt' if prevFlags.Input.isMC else 'TileRawChannelFixed' + if not (prevFlags.Input.isMC or prevFlags.Overlay.DataOverlay) and prevFlags.Input.Format == 'BS': + rawChannelContainer = 'TileRawChannelFixed' + else: + rawChannelContainer = 'TileRawChannelCnt' return rawChannelContainer diff --git a/TileCalorimeter/TileRecUtils/python/TileDQstatusConfig.py b/TileCalorimeter/TileRecUtils/python/TileDQstatusConfig.py index 8cdc595d414..9c1f93474c2 100644 --- a/TileCalorimeter/TileRecUtils/python/TileDQstatusConfig.py +++ b/TileCalorimeter/TileRecUtils/python/TileDQstatusConfig.py @@ -62,6 +62,11 @@ def TileDQstatusAlgCfg(flags, **kwargs): rawChannelContainer = 'TileRawChannelCnt' + elif flags.Overlay.DataOverlay and flags.Detector.OverlayTile: + beamElemContainer = '' + digitsContainer = flags.Overlay.BkgPrefix + 'TileDigitsCnt' + rawChannelContainer = flags.Overlay.BkgPrefix + 'TileRawChannelCnt' + else: beamElemContainer = "" digitsContainer = "" diff --git a/TileCalorimeter/TileSimAlgs/TileSimAlgs/TileDigitsMaker.h b/TileCalorimeter/TileSimAlgs/TileSimAlgs/TileDigitsMaker.h index a349cad473b..437f1263670 100644 --- a/TileCalorimeter/TileSimAlgs/TileSimAlgs/TileDigitsMaker.h +++ b/TileCalorimeter/TileSimAlgs/TileSimAlgs/TileDigitsMaker.h @@ -36,7 +36,6 @@ #include "TileConditions/TileCondToolNoiseSample.h" #include "TileConditions/ITileBadChanTool.h" #include "TileConditions/TileCablingSvc.h" -#include "TileRecUtils/ITileDQstatusTool.h" // Atlas includes #include "AthenaBaseComps/AthAlgorithm.h" @@ -96,11 +95,8 @@ class TileDigitsMaker: public AthAlgorithm { "input Tile hit container key"}; Gaudi::Property<bool> m_onlyUseContainerName{this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}; - SG::ReadHandleKey<TileDigitsContainer> m_overlayDigitContainerKey{this, "OverlayTileDigitContainerName","",""}; - std::string m_overlayDigitContainerName{""}; - - SG::ReadHandleKey<TileRawChannelContainer> m_overlayRawChannelContainerKey{this, "OverlayTileRawChannelContainerName","TileRawChannelCnt",""}; - std::string m_overlayRawChannelContainerName{""}; + SG::ReadHandleKey<TileDigitsContainer> m_inputDigitContainerKey{this, "InputTileDigitContainer","",""}; + std::string m_inputDigitContainerName{""}; SG::WriteHandleKey<TileDigitsContainer> m_digitsContainerKey{this,"TileDigitsContainer", "TileDigitsCnt", @@ -131,7 +127,6 @@ class TileDigitsMaker: public AthAlgorithm { const TileHWID* m_tileHWID; const TileInfo* m_tileInfo; const TileCablingService* m_cabling; //!< TileCabling instance - const TileDQstatus* m_DQstatus; std::vector<HWIdentifier *> m_all_ids; std::vector<double *> m_drawerBufferHi; //!< Vector used to store pointers to digits for a single drawer (high gain) @@ -187,11 +182,8 @@ class TileDigitsMaker: public AthAlgorithm { ToolHandle<ITileBadChanTool> m_tileBadChanTool{this, "TileBadChanTool", "TileBadChanTool", "Tile bad channel tool"}; - ToolHandle<ITileDQstatusTool> m_DQstatusTool { this, - "TileDQstatusTool", "TileDQstatusTool", "Tool to create TileDQstatus" }; - - SG::WriteHandleKey<TileDQstatus> m_DQstatusKey {this, - "TileDQstatus", "TileDQstatus", "Output TileDQstatus key" }; + SG::ReadHandleKey<TileDQstatus> m_DQstatusKey {this, + "TileDQstatus", "", "Input TileDQstatus key" }; }; diff --git a/TileCalorimeter/TileSimAlgs/python/TileDigitizationConfig.py b/TileCalorimeter/TileSimAlgs/python/TileDigitizationConfig.py index 82c6d01c962..242bf9cda2a 100644 --- a/TileCalorimeter/TileSimAlgs/python/TileDigitizationConfig.py +++ b/TileCalorimeter/TileSimAlgs/python/TileDigitizationConfig.py @@ -16,8 +16,9 @@ def TileTriggerDigitizationCfg(flags): from TileSimAlgs.TileMuonReceiverDecisionConfig import TileMuonReceiverDecisionOutputCfg acc.merge( TileMuonReceiverDecisionOutputCfg(flags) ) - from TileL2Algs.TileL2Config import TileRawChannelToL2OutputCfg - acc.merge( TileRawChannelToL2OutputCfg(flags, streamName = 'RDO') ) + if flags.Output.doWriteRDO: + from TileL2Algs.TileL2Config import TileRawChannelToL2OutputCfg + acc.merge( TileRawChannelToL2OutputCfg(flags, streamName = 'RDO') ) return acc @@ -27,7 +28,7 @@ def TileDigitizationCfg(flags): from TileSimAlgs.TileDigitsMakerConfig import TileDigitsMakerOutputCfg acc = TileDigitsMakerOutputCfg(flags) - if not flags.Digitization.PileUpPremixing: + if not flags.Digitization.PileUpPremixing and flags.Output.doWriteRDO: from TileRecUtils.TileRawChannelMakerConfig import TileRawChannelMakerOutputCfg acc.merge( TileRawChannelMakerOutputCfg(flags, streamName = 'RDO') ) diff --git a/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py b/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py index 49140fb887f..2bf339e22b4 100644 --- a/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py +++ b/TileCalorimeter/TileSimAlgs/python/TileDigitsMakerConfig.py @@ -22,6 +22,7 @@ def TileDigitsMakerCfg(flags, **kwargs): kwargs.setdefault('UseCoolPulseShapes', True) kwargs.setdefault('MaskBadChannels', False) kwargs.setdefault('RndmEvtOverlay', flags.Detector.OverlayTile) + kwargs.setdefault('OnlyUseContainerName', not flags.Detector.OverlayTile) acc = TileHitVecToCntCfg(flags) @@ -54,18 +55,21 @@ def TileDigitsMakerCfg(flags, **kwargs): kwargs['TileCondToolEmscale'] = acc.popToolsAndMerge(TileCondToolEmscaleCfg(flags)) if kwargs['RndmEvtOverlay']: - tileNoise = False tileCoherNoise = False - PileUpMergeSvc=CompFactory.PileUpMergeSvc - acc.addService( PileUpMergeSvc() ) + if flags.Overlay.DataOverlay: + from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg + acc.merge(ByteStreamReadCfg(flags, typeNames=[ + 'TileDigitsContainer/' + flags.Overlay.BkgPrefix + 'TileDigitsCnt', + 'TileRawChannelContainer/' + flags.Overlay.BkgPrefix + 'TileRawChannelCnt'] + )) - from TileRecUtils.TileDQstatusConfig import TileDQstatusToolCfg - kwargs['TileDQstatusTool'] = acc.popToolsAndMerge(TileDQstatusToolCfg(flags)) - else: - kwargs['TileDQstatusTool'] = None - kwargs['TileDQstatus'] = '' + from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg + acc.merge(TileDQstatusAlgCfg(flags)) + + kwargs['InputTileDigitContainer'] = flags.Overlay.BkgPrefix + 'TileDigitsCnt' + kwargs['TileDQstatus'] = 'TileDQstatus' if tileNoise or tileCoherNoise or kwargs['RndmEvtOverlay']: if 'RndmSvc' not in kwargs: @@ -146,8 +150,9 @@ def TileDigitsMakerOutputCfg(flags, **kwargs): tileDigitsContainer = tileDigitsContainer.split('+').pop() outputItemList = ['TileDigitsContainer#' + tileDigitsContainer] - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) ) + if flags.Output.doWriteRDO: + from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg + acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) ) return acc diff --git a/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py b/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py index ef146b95f82..2bce9f4d49f 100644 --- a/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py +++ b/TileCalorimeter/TileSimAlgs/python/TileHitToTTL1Config.py @@ -81,8 +81,9 @@ def TileTTL1OutputCfg(flags, TileHitToTTL1): mbtsTTL1Container = mbtsTTL1Container.split('+').pop() outputItemList += ['TileTTL1Container#' + mbtsTTL1Container] - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - acc = OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) + if flags.Output.doWriteRDO: + from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg + acc = OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) return acc diff --git a/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py b/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py index 475ce807e51..7dddb2e0c23 100644 --- a/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py +++ b/TileCalorimeter/TileSimAlgs/python/TileHitVecToCntConfig.py @@ -35,6 +35,7 @@ def TileHitVecToCntToolCfg(flags, **kwargs): kwargs.setdefault('name', 'TileHitVecToCntTool') kwargs.setdefault('RndmEvtOverlay', flags.Detector.OverlayTile) + kwargs.setdefault('OnlyUseContainerName', not flags.Detector.OverlayTile) acc = ComponentAccumulator() @@ -63,7 +64,7 @@ def TileHitVecToCntToolCfg(flags, **kwargs): else: kwargs.setdefault('PileUp', flags.Digitization.Pileup) - if kwargs['RndmEvtOverlay'] or kwargs['PileUp']: + if kwargs['PileUp']: PileUpMergeSvc=CompFactory.PileUpMergeSvc acc.addService( PileUpMergeSvc() ) @@ -98,7 +99,7 @@ def TileHitVecToCntCfg(flags, **kwargs): kwargs.setdefault('DigitizationTool', tool) # choose which alg to attach to, following PileUpToolsCfg - if flags.Digitization.DoXingByXingPileUp: + if flags.Digitization.DoXingByXingPileUp or flags.Detector.OverlayTile: Alg = CompFactory.TileHitVecToCnt else: Alg = CompFactory.DigitizationAlg @@ -117,7 +118,10 @@ def TileHitOutputCfg(flags, **kwargs): flags -- Athena configuration flags (ConfigFlags) """ - acc = OutputStreamCfg(flags, 'RDO', ['TileHitContainer#*']) + if flags.Output.doWriteRDO: + acc = OutputStreamCfg(flags, 'RDO', ['TileHitContainer#*']) + else: + acc = ComponentAccumulator() return acc diff --git a/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py b/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py index af4aefb284f..470a27593dc 100644 --- a/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py +++ b/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverConfig.py @@ -115,8 +115,9 @@ def TilePulseForTileMuonReceiverOutputCfg(flags, **kwargs): muRcvRawChCnt = muRcvRawChCnt.split('+').pop() outputItemList += ['TileRawChannelContainer#' + muRcvRawChCnt] - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) ) + if flags.Output.doWriteRDO: + from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg + acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) ) return acc diff --git a/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverDecisionConfig.py b/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverDecisionConfig.py index 8cf3d66bce7..981389ea38f 100644 --- a/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverDecisionConfig.py +++ b/TileCalorimeter/TileSimAlgs/python/TileMuonReceiverDecisionConfig.py @@ -61,8 +61,9 @@ def TileMuonReceiverDecisionOutputCfg(flags, **kwargs): muRcvContainer = muRcvContainer.split('+').pop() outputItemList = ['TileMuonReceiverContainer#' + muRcvContainer] - from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg - acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) ) + if flags.Output.doWriteRDO: + from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg + acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) ) return acc diff --git a/TileCalorimeter/TileSimAlgs/share/TileDigiCommon_jobOptions.py b/TileCalorimeter/TileSimAlgs/share/TileDigiCommon_jobOptions.py index a9b71236c63..7f4997c3b43 100644 --- a/TileCalorimeter/TileSimAlgs/share/TileDigiCommon_jobOptions.py +++ b/TileCalorimeter/TileSimAlgs/share/TileDigiCommon_jobOptions.py @@ -42,7 +42,25 @@ if doTileHitToRawChannelDirect: if doTileHitToDigit: - + # Change default parameters for TileDQstatusAlg. + from AthenaCommon.GlobalFlags import globalflags + if globalflags.isOverlay(): + from TileRecUtils.TileDQstatusAlgDefault import TileDQstatusAlgDefault + dqstatus = TileDQstatusAlgDefault() + dqstatus.TileBeamElemContainer=""; # disable reading of trigger type from BeamElem container + + from OverlayCommonAlgs.OverlayFlags import overlayFlags + if overlayFlags.isDataOverlay(): + if overlayFlags.isOverlayMT(): + dqstatus.TileDigitsContainer = overlayFlags.bkgPrefix() + "TileDigitsCnt" + dqstatus.TileRawChannelContainer = overlayFlags.bkgPrefix() + "TileRawChannelCnt" + else: + dqstatus.TileDigitsContainer = overlayFlags.dataStore() + "+TileDigitsCnt" + dqstatus.TileRawChannelContainer = overlayFlags.dataStore() + "+TileRawChannelCnt" + else: + dqstatus.TileDigitsContainer=""; # disable checking of Digits container size for bi-gain mode + dqstatus.TileRawChannelContainer=""; # disable checking of DQstatus for simulated data + from TileSimAlgs.TileDigitsGetter import * theTileDigitsGetter=TileDigitsGetter() @@ -53,7 +71,9 @@ if doTileHitToDigit: theTileDigitsMaker.RndmEvtOverlay=False from Digitization.DigitizationFlags import digitizationFlags theTileDigitsMaker.DoHSTruthReconstruction = digitizationFlags.doDigiTruth() - + if globalflags.isOverlay(): + theTileDigitsMaker.TileDQstatus = 'TileDQstatus' + if doTileDigitsFromPulse: import traceback diff --git a/TileCalorimeter/TileSimAlgs/src/TileDigitsMaker.cxx b/TileCalorimeter/TileSimAlgs/src/TileDigitsMaker.cxx index ba1d0867ee5..68258f8f436 100644 --- a/TileCalorimeter/TileSimAlgs/src/TileDigitsMaker.cxx +++ b/TileCalorimeter/TileSimAlgs/src/TileDigitsMaker.cxx @@ -72,7 +72,6 @@ TileDigitsMaker::TileDigitsMaker(std::string name, ISvcLocator* pSvcLocator) m_tileHWID(nullptr), m_tileInfo(nullptr), m_cabling(nullptr), - m_DQstatus(nullptr), m_nSamples(0), m_iTrig(0), m_tileNoise(false), @@ -210,10 +209,8 @@ StatusCode TileDigitsMaker::initialize() { m_binTime0Lo = m_tileInfo->digitsTime0BinLo(); m_timeStepLo = 25.0 / m_nBinsPerXLo; - m_overlayDigitContainerName = m_overlayDigitContainerKey.key(); - ATH_CHECK( m_overlayDigitContainerKey.initialize(!m_onlyUseContainerName && m_rndmEvtOverlay) ); - m_overlayRawChannelContainerName = m_overlayRawChannelContainerKey.key(); - ATH_CHECK( m_overlayRawChannelContainerKey.initialize(!m_onlyUseContainerName && m_rndmEvtOverlay) ); + m_inputDigitContainerName = m_inputDigitContainerKey.key(); + ATH_CHECK( m_inputDigitContainerKey.initialize(!m_onlyUseContainerName && m_rndmEvtOverlay) ); if (m_rndmEvtOverlay) { m_tileNoise = false; @@ -229,12 +226,10 @@ StatusCode TileDigitsMaker::initialize() { ATH_MSG_INFO( "PileUpMergeSvc successfully initialized"); - ATH_CHECK( m_DQstatusTool.retrieve() ); ATH_CHECK( m_DQstatusKey.initialize() ); } else { - m_DQstatusTool.disable(); - m_DQstatusKey = ""; + ATH_CHECK( m_DQstatusKey.initialize(!m_DQstatusKey.empty()) ); if (m_allChannels<0) m_allChannels = 0; // do not create all channels by default if (m_tileNoise || m_tileCoherNoise) m_allChannels = 2; // unless noise is set to True @@ -516,12 +511,10 @@ StatusCode TileDigitsMaker::execute() { TileRawChannelUnit::ADCcounts); ATH_CHECK( backgroundDigitContainer->status() ); - const TileRawChannelContainer* rndm_rawchan_container{}; - auto dqStatus = std::make_unique<TileDQstatus>(); if (m_onlyUseContainerName) { typedef PileUpMergeSvc::TimedList<TileDigitsContainer>::type TimedDigitContList; TimedDigitContList digitContList; - ATH_CHECK( m_mergeSvc->retrieveSubEvtsData(m_overlayDigitContainerName, digitContList)); + ATH_CHECK( m_mergeSvc->retrieveSubEvtsData(m_inputDigitContainerName, digitContList)); ATH_MSG_DEBUG( "TileDigitsCnt successfully retrieved "); @@ -537,26 +530,9 @@ StatusCode TileDigitsMaker::execute() { ATH_CHECK(backgroundDigitContainer->push_back(std::move(pDigits))); } } - typedef PileUpMergeSvc::TimedList<TileRawChannelContainer>::type TimedRawChanContList; - TimedRawChanContList rawchanContList; - if (!(m_mergeSvc->retrieveSubEvtsData(m_overlayRawChannelContainerName, rawchanContList).isSuccess())) { - ATH_MSG_ERROR( "Cannot retrieve TileRawChannelContainer for DQ check"); - } else { - ATH_MSG_DEBUG( "TileRawChannelContainer for DQ check retrieved"); - } - - if (!rawchanContList.empty()) { - TimedRawChanContList::iterator iTzeroRawChanCont(rawchanContList.begin()); - rndm_rawchan_container = iTzeroRawChanCont->second; - } - ATH_CHECK( m_DQstatusTool->makeStatus (ctx, - rndm_rawchan_container, - backgroundDigitContainer.get(), - nullptr, // TileBeamElemContainer - *dqStatus) ); } else { - SG::ReadHandle<TileDigitsContainer> tileDigitsContainerHandle(m_overlayDigitContainerKey); + SG::ReadHandle<TileDigitsContainer> tileDigitsContainerHandle(m_inputDigitContainerKey); if (tileDigitsContainerHandle.isValid()) { for (const auto* digitCollection : *tileDigitsContainerHandle) { for (const auto* digit : *digitCollection) { @@ -567,23 +543,10 @@ StatusCode TileDigitsMaker::execute() { } else { ATH_MSG_ERROR("ReadHandle to Background Digits is invalid."); + return StatusCode::FAILURE; } - SG::ReadHandle<TileRawChannelContainer> tileRawChannelContainerHandle(m_overlayRawChannelContainerKey); - if (tileRawChannelContainerHandle.isValid()) { - rndm_rawchan_container = &*tileRawChannelContainerHandle; - } - else { - ATH_MSG_WARNING("ReadHandle to Background Raw Channels is invalid."); - } - ATH_CHECK( m_DQstatusTool->makeStatus (ctx, - rndm_rawchan_container, - backgroundDigitContainer.get(), - nullptr, // TileBeamElemContainer - *dqStatus) ); } - m_DQstatus = dqStatus.get(); - ATH_CHECK( SG::makeHandle (m_DQstatusKey, ctx).record (std::move (dqStatus)) ); collItrRndm = backgroundDigitContainer->begin(); lastCollRndm = backgroundDigitContainer->end(); } @@ -1378,6 +1341,9 @@ StatusCode TileDigitsMaker::overlayBackgroundDigits( const TileDigitsCollection return StatusCode::FAILURE; } + SG::ReadHandle<TileDQstatus> DQstatus(m_DQstatusKey); + ATH_CHECK( DQstatus.isValid() ); + // iterate over all digits in a collection for (const auto* bkgDigit : *bkgDigitCollection) { @@ -1389,7 +1355,7 @@ StatusCode TileDigitsMaker::overlayBackgroundDigits( const TileDigitsCollection igain[channel] = gain; // get channel status - bool good_dq = m_DQstatus->isAdcDQgood(ros, drawer, channel, gain); + bool good_dq = DQstatus->isAdcDQgood(ros, drawer, channel, gain); bool good_ch = (!m_tileBadChanTool->getAdcStatus(drawerIdx, channel, gain).isBad()); // get digits -- GitLab