diff --git a/Control/AthenaConfiguration/python/UnifyProperties.py b/Control/AthenaConfiguration/python/UnifyProperties.py index 5f0a28ba5bd89c852e669e24e5ee68541f1cfe69..10bc9541d32ad78904d926351bcee9cfb8c391f1 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 f4d055d83b0ff801242898b4f773ff74d15917ef..5caffd92d0d12ca7d7b580c948ec10ed28a41f69 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 dc61338496f81ee45ca607a57944faa4885303d3..ecf033ea09316635751d20c4c64d990c08a588b2 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 88681f9927a401ddcff4d990b79d37f5e24ebd88..9d71e5e273e20def4f8cca80720453f472305402 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 ceb7857a91b6c978ee2081a567aa96b484e65d24..5bfc2e455947cdaa4901098a9e8c28ce08bced32 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 e991ecd637961adaa2e340cf8844257aae3c8ae6..59844f867979a2aed85366ce52e0a56a14106ffa 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 0000000000000000000000000000000000000000..3b499d428ba60ad197d09c2cbea0c214d57d53ba --- /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 0000000000000000000000000000000000000000..e65aa301c9c236b63a6b7a4254442f13d93abeb9 --- /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 e06644279e5fb58c0e5adc0f8d1802ff2cef41ee..be971c6d2dbbd03a084683119ab651ce7e30f61d 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 e92a911f3ad95f8f1ffd16338ee03656310e467b..de5fb89110167ac206b10c5a3b59f4502c82b2ba 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 8cdc595d414327c1f72104bb00e226fd8e3746d7..9c1f93474c26e2a9f8c5dfabdbbc31ecd7a0ff77 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 a349cad473bb0c5baa43f8d7c1e8f01dea1f0851..437f126367069c8fe3021f8dd1d4cc26144ecb76 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 82c6d01c96261314f7414cce491de090d7787663..242bf9cda2a7c42568f6c3f25ac7183c077e1c41 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 49140fb887f62d07108da36913097eb374ff423a..2bf339e22b494daaf023c7c14002b14fdd6a65b6 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 ef146b95f822d7f3b0fd7aa7b09284ec11448a94..2bce9f4d49f43a70ce5a58425c9d7d04e0546cd9 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 475ce807e51f59f45e326655a30d9321fd9104f7..7dddb2e0c23ea4a9a3d6148b723df481a62c626b 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 af4aefb284fb323baa20cd33119918ebf911ecac..470a27593dc3d72608e2705a38ebcf3cc6b43a75 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 8cf3d66bce7861d070cd28780cd0f45c55e30c81..981389ea38f75b573e204e3527e37349e6dc386c 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 a9b71236c635f58163c96345f6d6459991dc6199..7f4997c3b43b6ce5e066aa7c59d5bfb3776c37ae 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 a1914a863a670ce587141e53c0ec5b0818055157..d1369ce38fb80888d0b7bbad5f867f1725dd116f 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; @@ -231,12 +228,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 @@ -518,12 +513,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 "); @@ -539,26 +532,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) { @@ -569,23 +545,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(); } @@ -1380,6 +1343,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) { @@ -1391,7 +1357,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