From 89cbd614f54ca6f85eb44c592966bb3678b169cb Mon Sep 17 00:00:00 2001 From: James Beacham <j.beacham@cern.ch> Date: Sat, 14 Oct 2017 21:19:44 +0200 Subject: [PATCH] Revert "Merge branch 'FCS_StepInfoSDs_ATLASSIM-3443_21.0' into '21.0'" This reverts commit ae10fb168d7791e0e193676c57cfc2e636e9b4ca [formerly c946c5c2d7fa22229e1fc820834b5009ddf819f3], reversing changes made to 1000a1cfbad79703c734143c20e1375279e92a3c [formerly d57d58cd9ec70419f96e1a5459267738957d1b30]. Former-commit-id: 1acee8606e12a4a94717e5a701df3c1875435769 --- .../G4Atlas/G4AtlasApps/python/SimFlags.py | 8 - .../G4AtlasTools/python/G4AtlasToolsConfig.py | 3 - .../ISF/ISF_Example/python/ISF_Output.py | 2 +- ...stCaloSimParametrization_SimPostInclude.py | 20 -- ...loSimParametrization_SimPostInclude_1mm.py | 8 - ...astCaloSimParametrization_SimPreInclude.py | 20 +- ...aloSimParametrization_SimPreInclude_1mm.py | 6 + .../ISF_FastCaloSimSD/CMakeLists.txt | 41 --- .../python/ISF_FastCaloSimSDConfig.py | 31 -- .../python/ISF_FastCaloSimSDConfigDb.py | 5 - .../ISF_FastCaloSimSD/src/FCS_StepInfoSD.cxx | 227 -------------- .../ISF_FastCaloSimSD/src/FCS_StepInfoSD.h | 143 --------- .../src/FCS_StepInfoSDTool.cxx | 290 ------------------ .../src/FCS_StepInfoSDTool.h | 123 -------- .../src/LArFCS_StepInfoSD.cxx | 274 ----------------- .../ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.h | 51 --- .../ISF_FastCaloSimSD/src/SDWrapper.cxx | 101 ------ .../ISF_FastCaloSimSD/src/SDWrapper.h | 94 ------ .../src/TileFCS_StepInfoSD.cxx | 100 ------ .../src/TileFCS_StepInfoSD.h | 48 --- .../components/ISF_FastCaloSimSD_entries.cxx | 5 - 21 files changed, 26 insertions(+), 1574 deletions(-) delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude_1mm.py create mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude_1mm.py delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/CMakeLists.txt delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfig.py delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfigDb.py delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.cxx delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.h delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.cxx delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.h delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.cxx delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.h delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.cxx delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.h delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.cxx delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.h delete mode 100644 Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/components/ISF_FastCaloSimSD_entries.cxx diff --git a/Simulation/G4Atlas/G4AtlasApps/python/SimFlags.py b/Simulation/G4Atlas/G4AtlasApps/python/SimFlags.py index 46d7a160d2e..f5f64f01e04 100644 --- a/Simulation/G4Atlas/G4AtlasApps/python/SimFlags.py +++ b/Simulation/G4Atlas/G4AtlasApps/python/SimFlags.py @@ -639,14 +639,6 @@ class ParticleID(JobProperty): allowedTypes = ['bool'] StoredValue = False -class RecordStepInfo(JobProperty): - """ - Should FCS_StepInfoCollections be recorded - """ - statusOn = True - allowedTypes = ['bool'] - StoredValue = False - class RecordFlux(JobProperty): """ Record flux through the entirety of the detector diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py index 337d297ff19..5d5439468b7 100644 --- a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py +++ b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py @@ -112,9 +112,6 @@ def generateCaloSensitiveDetectorList(): SensitiveDetectorList += [ 'TileGeoG4CalibSD' ] # mode 1 : With CaloCalibrationHits else: SensitiveDetectorList += [ 'TileGeoG4SD' ] # mode 0 : No CaloCalibrationHits - from G4AtlasApps.SimFlags import simFlags - if simFlags.RecordStepInfo.get_Value(): - SensitiveDetectorList += [ 'FCS_StepInfoSensitiveDetector' ] return SensitiveDetectorList def generateMuonSensitiveDetectorList(): diff --git a/Simulation/ISF/ISF_Example/python/ISF_Output.py b/Simulation/ISF/ISF_Example/python/ISF_Output.py index 74c397b07b3..fcb2bc11861 100644 --- a/Simulation/ISF/ISF_Example/python/ISF_Output.py +++ b/Simulation/ISF/ISF_Example/python/ISF_Output.py @@ -70,7 +70,7 @@ def getHITSStreamItemList(): ## TimingAlg hitsItemList +=["RecoTimingObj#EVNTtoHITS_timings"] - if simFlags.RecordStepInfo.get_Value(): + if 'G4UA::FastCaloSimParamActionTool' in simFlags.OptionalUserActionList.get_Value()['Step']: hitsItemList +=["ISF_FCS_Parametrization::FCS_StepInfoCollection#MergedEventSteps"] ## add xAOD::TrackParticles output collection Parametric Simulation diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude.py index a59ee537a7a..67017a344bb 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude.py +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude.py @@ -1,23 +1,3 @@ from ISF_FastCaloSimParametrization.ISF_FastCaloSimParametrizationConf import FastCaloSimParamAlg topSeq += FastCaloSimParamAlg() ISF_HITSStream.stream1.ItemList += ["ISF_FCS_Parametrization::FCS_StepInfoCollection#MergedEventSteps"] -from AthenaCommon.CfgGetter import getPublicTool -stepInfoSDTool = getPublicTool("SensitiveDetectorMasterTool").SensitiveDetectors['FCS_StepInfoSensitiveDetector'] -stepInfoSDTool.shift_lar_subhit=True -stepInfoSDTool.shorten_lar_step=True - -stepInfoSDTool.maxEtaPS=1 -stepInfoSDTool.maxPhiPS=5 -stepInfoSDTool.maxrPS=0 - -stepInfoSDTool.maxEtaEM1=1 -stepInfoSDTool.maxPhiEM1=5 -stepInfoSDTool.maxrEM1=15 - -stepInfoSDTool.maxEtaEM2=1 -stepInfoSDTool.maxPhiEM2=5 -stepInfoSDTool.maxrEM2=60 - -stepInfoSDTool.maxEtaEM3=1 -stepInfoSDTool.maxPhiEM3=5 -stepInfoSDTool.maxrEM3=8 diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude_1mm.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude_1mm.py deleted file mode 100644 index b42cd82a47b..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPostInclude_1mm.py +++ /dev/null @@ -1,8 +0,0 @@ -from ISF_FastCaloSimParametrization.ISF_FastCaloSimParametrizationConf import FastCaloSimParamAlg -topSeq += FastCaloSimParamAlg() -ISF_HITSStream.stream1.ItemList += ["ISF_FCS_Parametrization::FCS_StepInfoCollection#MergedEventSteps"] -from AthenaCommon.CfgGetter import getPublicTool -stepInfoSDTool = getPublicTool("SensitiveDetectorMasterTool").SensitiveDetectors['FCS_StepInfoSensitiveDetector'] -stepInfoSDTool.shift_lar_subhit=True -stepInfoSDTool.shorten_lar_step=True -stepInfoSDTool.maxRadiusLAr=1 diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude.py index ed3a162c17b..b10f924dd25 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude.py +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude.py @@ -1,2 +1,20 @@ from G4AtlasApps.SimFlags import simFlags -simFlags.RecordStepInfo=True +simFlags.OptionalUserActionList.addAction('G4UA::FastCaloSimParamActionTool',['BeginOfEvent','EndOfEvent','BeginOfRun','EndOfRun','Step']) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"shift_lar_subhit",True) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"shorten_lar_step",True) +# optimised merging scheme parameters +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxEtaPS",1) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxPhiPS",5) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxrPS",0) + +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxEtaEM1",1) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxPhiEM1",5) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxrEM1",15) + +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxEtaEM2",1) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxPhiEM2",5) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxrEM2",60) + +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxEtaEM3",1) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxPhiEM3",5) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxrEM3",8) diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude_1mm.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude_1mm.py new file mode 100644 index 00000000000..d4c0a586f46 --- /dev/null +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/share/ISF_FastCaloSimParametrization_SimPreInclude_1mm.py @@ -0,0 +1,6 @@ +from G4AtlasApps.SimFlags import simFlags +simFlags.OptionalUserActionList.addAction('G4UA::FastCaloSimParamActionTool',['BeginOfEvent','EndOfEvent','BeginOfRun','EndOfRun','Step']) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"shift_lar_subhit",True) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"shorten_lar_step",True) +simFlags.UserActionConfig.addConfig('G4UA::FastCaloSimParamActionTool',"maxRadiusLAr",1) +# optimised merging scheme parameters are not required for 1mm merging diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/CMakeLists.txt b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/CMakeLists.txt deleted file mode 100644 index 4c03c106111..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -################################################################################ -# Package: ISF_FastCaloSimSD -################################################################################ - -# Declare the package name: -atlas_subdir( ISF_FastCaloSimSD ) - -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/StoreGate - GaudiKernel - Simulation/G4Atlas/G4AtlasInterfaces - Simulation/G4Atlas/G4AtlasTools - TileCalorimeter/TileG4/TileG4Interfaces - PRIVATE - Calorimeter/CaloDetDescr - Calorimeter/CaloIdentifier - Control/CxxUtils - Control/AthenaBaseComps - Generators/GeneratorObjects - LArCalorimeter/LArG4/LArG4Code - Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent - DetectorDescription/Identifier ) - -# External dependencies: -find_package( CLHEP ) -find_package( Geant4 ) -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) -find_package( XercesC ) - -# Component(s) in the package: -atlas_add_component( ISF_FastCaloSimSD - src/*.cxx - src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${XERCESC_INCLUDE_DIRS} ${GEANT4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${GEANT4_LIBRARIES} ${CLHEP_LIBRARIES} StoreGateLib SGtests GaudiKernel G4AtlasInterfaces G4AtlasToolsLib CaloDetDescrLib CaloIdentifier CxxUtils GeneratorObjects LArG4Code ISF_FastCaloSimEvent Identifier ) - -# Install files from the package: -atlas_install_headers( ISF_FastCaloSimSD ) -atlas_install_python_modules( python/*.py ) - diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfig.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfig.py deleted file mode 100644 index a8dc3f98ead..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfig.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -from AthenaCommon import CfgMgr - -def getFCS_StepInfoSensitiveDetector(name="FCS_StepInfoSensitiveDetector", **kwargs): - ## Main configuration - kwargs.setdefault("StacVolumes",["LArMgr::LAr::EMB::STAC"]) - kwargs.setdefault("PresamplerVolumes",["LArMgr::LAr::Barrel::Presampler::Module"]) - kwargs.setdefault("NegIWVolumes",["LArMgr::LAr::EMEC::Neg::InnerWheel"]) - kwargs.setdefault("NegOWVolumes",["LArMgr::LAr::EMEC::Neg::OuterWheel"]) - kwargs.setdefault("BOBarretteVolumes",["LArMgr::LAr::EMEC::BackOuterBarrette::Module::Phidiv"]) - kwargs.setdefault("MiniVolumes",["LArMgr::MiniFCAL::Wafer"]) - kwargs.setdefault("PosIWVolumes",["LArMgr::LAr::EMEC::Pos::InnerWheel"]) - kwargs.setdefault("PosOWVolumes",["LArMgr::LAr::EMEC::Pos::OuterWheel"]) - kwargs.setdefault("PresVolumes", ["LArMgr::LAr::Endcap::Presampler::LiquidArgon"]) - kwargs.setdefault("SliceVolumes",["LArMgr::LAr::HEC::Module::Depth::Slice"]) - kwargs.setdefault("FCAL1Volumes",["LArMgr::LAr::FCAL::Module1::Gap"]) - kwargs.setdefault("FCAL2Volumes",["LArMgr::LAr::FCAL::Module2::Gap"]) - kwargs.setdefault("FCAL3Volumes",["LArMgr::LAr::FCAL::Module3::Gap"]) - kwargs.setdefault("TileVolumes",["Tile::Scintillator"]) - kwargs.setdefault("OutputCollectionNames", ["EventSteps"]) - # TODO Add extra configuration here!! - return CfgMgr.FCS_Param__FCS_StepInfoSDTool(name, **kwargs) - -##def getFastCaloSimParamActionTool(name='G4UA::FastCaloSimParamActionTool', **kwargs): -## from G4AtlasApps.SimFlags import simFlags -## # example custom configuration -## if name in simFlags.UserActionConfig.get_Value().keys(): -## for prop,value in simFlags.UserActionConfig.get_Value()[name].iteritems(): -## kwargs.setdefault(prop,value) -## return CfgMgr.G4UA__FastCaloSimParamActionTool(name,**kwargs) diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfigDb.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfigDb.py deleted file mode 100644 index 4c205253ba0..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/python/ISF_FastCaloSimSDConfigDb.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -from AthenaCommon.CfgGetter import addTool - -addTool("ISF_FastCaloSimSD.ISF_FastCaloSimSDConfig.getFCS_StepInfoSensitiveDetector", "FCS_StepInfoSensitiveDetector") diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.cxx deleted file mode 100644 index 9e46bd508c0..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.cxx +++ /dev/null @@ -1,227 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "FCS_StepInfoSD.h" - -#include "CaloIdentifier/CaloIdManager.h" -#include "CaloIdentifier/LArID_Exception.h" -#include "CaloIdentifier/LArEM_ID.h" -#include "CaloIdentifier/LArFCAL_ID.h" -#include "CaloIdentifier/LArHEC_ID.h" -#include "CaloIdentifier/LArMiniFCAL_ID.h" -#include "CaloDetDescr/CaloDetDescrManager.h" -#include "CaloDetDescr/CaloDetDescrElement.h" - -#include "G4Step.hh" -#include "G4ThreeVector.hh" - -FCS_StepInfoSD::FCS_StepInfoSD(G4String a_name, const FCS_Param::Config& config) - : G4VSensitiveDetector(a_name) - , m_config(config) - , m_larEmID(nullptr) - , m_larFcalID(nullptr) - , m_larHecID(nullptr) - , m_larMiniFcalID(nullptr) - , m_calo_dd_man(nullptr) -{ - m_calo_dd_man = CaloDetDescrManager::instance(); //FIXME Move somewhere else!! -} - -FCS_StepInfoSD::~FCS_StepInfoSD() -{ -} - -G4bool FCS_StepInfoSD::ProcessHits(G4Step*,G4TouchableHistory*) -{ - G4ExceptionDescription description; - description << "ProcessHits: Base class method should not be called!!!"; - G4Exception("FCS_StepInfoSD", "FCSBadCall", FatalException, description); - abort(); - return false; -} - -inline double FCS_StepInfoSD::getMaxTime(const CaloCell_ID::CaloSample& layer) const -{ - /// NB The result of this function should actually be constant for each SD - if (layer >= CaloCell_ID::PreSamplerB && layer <= CaloCell_ID::EME3) { - return m_config.m_maxTimeLAr; - } - if (layer >= CaloCell_ID::HEC0 && layer <= CaloCell_ID::HEC3) { - return m_config.m_maxTimeHEC; - } - if (layer >=CaloCell_ID::FCAL0 && layer <= CaloCell_ID::FCAL2) { - return m_config.m_maxTimeFCAL; - } - return m_config.m_maxTime; -} - -inline double FCS_StepInfoSD::getMaxRadius(const CaloCell_ID::CaloSample& layer) const -{ - /// NB The result of this function should actually be constant for each SD - if (layer >= CaloCell_ID::PreSamplerB && layer <= CaloCell_ID::EME3) { - return m_config.m_maxRadiusLAr; - } - if (layer >= CaloCell_ID::HEC0 && layer <= CaloCell_ID::HEC3) { - return m_config.m_maxRadiusHEC; - } - if (layer >=CaloCell_ID::FCAL0 && layer <= CaloCell_ID::FCAL2) { - return m_config.m_maxRadiusFCAL; - } - return m_config.m_maxRadius; -} - -inline double FCS_StepInfoSD::getMaxDeltaR(const CaloCell_ID::CaloSample& layer) const -{ - /// NB The result of this function should actually be constant for each SD - if(m_config.m_maxRadiusLAr != 25) return 999.; - if (layer >= CaloCell_ID::PreSamplerB && layer <= CaloCell_ID::EME3) { - if (layer==CaloCell_ID::PreSamplerB || layer==CaloCell_ID::PreSamplerE) { - // PS default is 1mm in eta, 5mm in phi, no cut in r - return m_config.m_maxrPS; - } - else if (layer==CaloCell_ID::EMB1 || layer==CaloCell_ID::EME1) { - // EM1 default is 1mm in eta, 5mm in phi, 15mm in r - return m_config.m_maxrEM1; - } - else if (layer==CaloCell_ID::EMB2 || layer==CaloCell_ID::EME2) { - // EM2 default is 1mm in eta, 5mm in phi, 60mm in r - return m_config.m_maxrEM2; - } - else if (layer==CaloCell_ID::EMB3 || layer==CaloCell_ID::EME3) { - // EM3 default is 1mm in eta, 5mm in phi, 8mm in r - return m_config.m_maxrEM3; - } - } - return 999.; -} - -inline double FCS_StepInfoSD::getMaxDeltaEta(const CaloCell_ID::CaloSample& layer) const -{ - /// NB The result of this function should actually be constant for each SD - if(m_config.m_maxRadiusLAr != 25) return 999.; - if (layer >= CaloCell_ID::PreSamplerB && layer <= CaloCell_ID::EME3) { - if (layer==CaloCell_ID::PreSamplerB || layer==CaloCell_ID::PreSamplerE) { - // PS default is 1mm in eta, 5mm in phi, no cut in r - return m_config.m_maxEtaPS; - } - else if (layer==CaloCell_ID::EMB1 || layer==CaloCell_ID::EME1) { - // EM1 default is 1mm in eta, 5mm in phi, 15mm in r - return m_config.m_maxEtaEM1; - } - else if (layer==CaloCell_ID::EMB2 || layer==CaloCell_ID::EME2) { - // EM2 default is 1mm in eta, 5mm in phi, 60mm in r - return m_config.m_maxEtaEM2; - } - else if (layer==CaloCell_ID::EMB3 || layer==CaloCell_ID::EME3) { - // EM3 default is 1mm in eta, 5mm in phi, 8mm in r - return m_config.m_maxEtaEM3; - } - } - return 999.; -} - -inline double FCS_StepInfoSD::getMaxDeltaPhi(const CaloCell_ID::CaloSample& layer) const -{ - /// NB The result of this function should actually be constant for each SD - if(m_config.m_maxRadiusLAr != 25) return 999.; - if (layer >= CaloCell_ID::PreSamplerB && layer <= CaloCell_ID::EME3) { - if (layer==CaloCell_ID::PreSamplerB || layer==CaloCell_ID::PreSamplerE) { - // PS default is 1mm in eta, 5mm in phi, no cut in r - return m_config.m_maxPhiPS; - } - else if (layer==CaloCell_ID::EMB1 || layer==CaloCell_ID::EME1) { - // EM1 default is 1mm in eta, 5mm in phi, 15mm in r - return m_config.m_maxPhiEM1; - } - else if (layer==CaloCell_ID::EMB2 || layer==CaloCell_ID::EME2) { - // EM2 default is 1mm in eta, 5mm in phi, 60mm in r - return m_config.m_maxPhiEM2; - } - else if (layer==CaloCell_ID::EMB3 || layer==CaloCell_ID::EME3) { - // EM3 default is 1mm in eta, 5mm in phi, 8mm in r - return m_config.m_maxPhiEM3; - } - } - return 999.; -} - -void FCS_StepInfoSD::update_map(const CLHEP::Hep3Vector & l_vec, const Identifier & l_cell, double l_energy, double l_time, bool l_valid, int l_detector) -{ - // Drop any hits that don't have a good identifier attached - if (!m_calo_dd_man->get_element(l_cell)) { return; } - - auto map_item = m_hit_map.find( l_cell ); - if (map_item==m_hit_map.end()) { - m_hit_map[l_cell] = new std::vector< ISF_FCS_Parametrization::FCS_StepInfo* >; - m_hit_map[l_cell]->reserve(200); - m_hit_map[l_cell]->push_back( new ISF_FCS_Parametrization::FCS_StepInfo( l_vec , l_cell , l_energy , l_time , l_valid , l_detector ) ); - } - else { - - // Get the appropriate merging limits - const CaloCell_ID::CaloSample& layer = m_calo_dd_man->get_element(l_cell)->getSampling(); - const double tsame(this->getMaxTime(layer)); - const double maxRadius(this->getMaxRadius(layer)); - const double maxDeltaR(this->getMaxDeltaR(layer)); - const double maxDeltaEta(this->getMaxDeltaEta(layer)); - const double maxDeltaPhi(this->getMaxDeltaPhi(layer)); - bool match = false; - for (auto map_it : * map_item->second) { - // Time check is straightforward - const double delta_t = std::fabs(map_it->time()-l_time); - if ( delta_t >= tsame ) { continue; } - - // Distance check is less straightforward - const CLHEP::Hep3Vector & currentPosition = map_it->position(); - const double hit_diff2 = currentPosition.diff2( l_vec ); - - // Overall merging scheme - if (layer >= CaloCell_ID::PreSamplerB && layer <= CaloCell_ID::EME3) { - // Customized merging scheme for LAr barrel and endcap, use only if we're not changing maxRadiusLAr value - if(m_config.m_maxRadiusLAr == 25) { - const CLHEP::Hep3Vector a_diff = l_vec - currentPosition; - const double a_diffmag(a_diff.mag()); - const double a_inv_length = 1./a_diffmag; - const double delta_r = std::fabs(a_diff.dot( l_vec ) * a_inv_length); - if (delta_r >= maxDeltaR) { continue; } - const double delta_eta = std::fabs(std::sin(l_vec.theta()-currentPosition.theta())*a_diffmag); - if (delta_eta >= maxDeltaEta) { continue; } - const double delta_phi = std::fabs(std::sin(l_vec.phi()-currentPosition.phi())*a_diffmag); - if (delta_phi >= maxDeltaPhi) { continue; } - } - else { - if ( hit_diff2 >= maxRadius ) { continue; } - } - } - else if ( hit_diff2 >= maxRadius ) { continue; } - // Found a match. Make a temporary that will be deleted! - const ISF_FCS_Parametrization::FCS_StepInfo my_info( l_vec , l_cell , l_energy , l_time , l_valid , l_detector ); - *map_it += my_info; - match = true; - break; - } // End of search for match in time and space - if (!match) { - map_item->second->push_back( new ISF_FCS_Parametrization::FCS_StepInfo( l_vec , l_cell , l_energy , l_time , l_valid , l_detector ) ); - } // Didn't match - } // ID already in the map - return; -} // That's it for updating the map! - -void FCS_StepInfoSD::EndOfAthenaEvent( ISF_FCS_Parametrization::FCS_StepInfoCollection* hitContainer ) -{ - // Unpack map into vector - for (auto it : m_hit_map) { - for (auto a_s : * it.second) { - // Giving away ownership of the objects! - hitContainer->push_back( a_s ); - } - it.second->clear(); - delete it.second; - } // Vector of IDs in the map - m_hit_map.clear(); - if (m_config.verboseLevel > 4) { - G4cout <<this->GetName()<< " DEBUG EndOfAthenaEvent: After initial cleanup, N=" << hitContainer->size() << G4endl; - } - return; -} diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.h deleted file mode 100644 index 1a4c3410976..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSD.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef ISF_FASTCALOSIM_FCS_STEPINFOSD_H -#define ISF_FASTCALOSIM_FCS_STEPINFOSD_H - -#include "G4VSensitiveDetector.hh" - -#include "CaloIdentifier/CaloCell_ID.h" // For CaloCell_ID::CaloSample -#include "LArG4Code/LArG4Identifier.h" - -#include "LArSimEvent/LArHit.h" -#include "CLHEP/Units/SystemOfUnits.h" - -#include "ISF_FastCaloSimEvent/FCS_StepInfoCollection.h" - -#include <map> -#include <vector> - -// Forward declarations -class G4Step; -class G4TouchableHistory; - -class LArEM_ID; -class LArFCAL_ID; -class LArHEC_ID; -class LArMiniFCAL_ID; -class CaloDetDescrManager; - -class ILArCalculatorSvc; -class ITileCalculator; -class LArHitContainer; - -class StoreGateSvc; - -namespace FCS_Param { - - struct Config - { - /** Helper to keep the same verbosity everywhere */ - int verboseLevel=0; - bool shift_lar_subhit=true; - bool shorten_lar_step=false; - - // Merging properties - double m_maxRadius=25.; //!< property, see @link LArG4GenShowerLib::LArG4GenShowerLib @endlink - double m_maxRadiusLAr=25.; //!< property, see @link LArG4GenShowerLib::LArG4GenShowerLib @endlink - double m_maxRadiusHEC=100.; //!< property, see @link LArG4GenShowerLib::LArG4GenShowerLib @endlink - double m_maxRadiusFCAL=100.; //!< property, see @link LArG4GenShowerLib::LArG4GenShowerLib @endlink - double m_maxRadiusTile=100.; //!< property, see @link LArG4GenShowerLib::LArG4GenShowerLib @endlink - - double m_maxTime=25.; - double m_maxTimeLAr=25.; - double m_maxTimeHEC=25.; - double m_maxTimeFCAL=25.; - double m_maxTimeTile=25.; - - // Optimised merging scheme - double m_maxEtaPS=1.; - double m_maxPhiPS=5.; - double m_maxrPS=0.; - - double m_maxEtaEM1=1.; - double m_maxPhiEM1=5.; - double m_maxrEM1=15.; - - double m_maxEtaEM2=1.; - double m_maxPhiEM2=5.; - double m_maxrEM2=60.; - - double m_maxEtaEM3=1.; - double m_maxPhiEM3=5.; - double m_maxrEM3=8.; - - ILArCalculatorSvc *m_LArCalculator=nullptr; - ITileCalculator *m_TileCalculator=nullptr; - }; - -} - -/// @class FCS_StepInfoSD -/// @brief Common sensitive detector class for LAr systems. -/// -/// This SD implementation saves the standard LArHits. -/// See LArG4CalibSD for an SD that handles calibration hits. -/// -class FCS_StepInfoSD : public G4VSensitiveDetector -{ -public: - - /// Constructor - FCS_StepInfoSD(G4String a_name, const FCS_Param::Config& config); - - /// Destructor - virtual ~FCS_StepInfoSD(); - - /// Main processing method - G4bool ProcessHits(G4Step* a_step, G4TouchableHistory*) override; - - /// End of athena event processing - void EndOfAthenaEvent( ISF_FCS_Parametrization::FCS_StepInfoCollection* hitContnainer ); - - /// Sets the ID helper pointers - void setupHelpers( const LArEM_ID* EM , - const LArFCAL_ID* FCAL , - const LArHEC_ID* HEC , - const LArMiniFCAL_ID* mini ) { - m_larEmID = EM; - m_larFcalID = FCAL; - m_larHecID = HEC; - m_larMiniFcalID = mini; - } - -protected: - /// Keep a map instead of trying to keep the full vector. - /// At the end of the event we'll push the map back into the - /// FCS_StepInfoCollection in StoreGate. - virtual void update_map(const CLHEP::Hep3Vector & l_vec, const Identifier & l_cell, double l_energy, double l_time, bool l_valid, int l_detector); - FCS_Param::Config m_config; - /// Pointers to the identifier helpers - const LArEM_ID* m_larEmID; - const LArFCAL_ID* m_larFcalID; - const LArHEC_ID* m_larHecID; - const LArMiniFCAL_ID* m_larMiniFcalID; - const CaloDetDescrManager *m_calo_dd_man; - std::map< Identifier , std::vector< ISF_FCS_Parametrization::FCS_StepInfo* >* > m_hit_map; - -private: - /// - double getMaxTime(const CaloCell_ID::CaloSample& layer) const; - /// - double getMaxRadius(const CaloCell_ID::CaloSample& layer) const; - /// - double getMaxDeltaR(const CaloCell_ID::CaloSample& layer) const; - /// - double getMaxDeltaEta(const CaloCell_ID::CaloSample& layer) const; - /// - double getMaxDeltaPhi(const CaloCell_ID::CaloSample& layer) const; - -}; - -#endif // ISF_FASTCALOSIM_FCS_STEPINFOSD_H diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.cxx deleted file mode 100644 index a4e4660568e..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.cxx +++ /dev/null @@ -1,290 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "FCS_StepInfoSDTool.h" - -#include <memory> - -// External includes -#include "CLHEP/Units/SystemOfUnits.h" - -// Athena includes -#include "CaloIdentifier/CaloIdManager.h" -#include "CaloIdentifier/LArEM_ID.h" -#include "CaloIdentifier/LArFCAL_ID.h" -#include "CaloIdentifier/LArHEC_ID.h" -#include "CaloIdentifier/LArMiniFCAL_ID.h" -#include "LArG4Code/ILArCalculatorSvc.h" -#include "LArG4Code/VolumeUtils.h" -#include "TileG4Interfaces/ITileCalculator.h" - -// Local includes -#include "LArFCS_StepInfoSD.h" -#include "TileFCS_StepInfoSD.h" -#include "SDWrapper.h" - -/// Template instantiation for FCS_StepInfoSD -using FCS_StepInfoSDWrapper = FCS_Param::detail::SDWrapper<FCS_StepInfoSD, ISF_FCS_Parametrization::FCS_StepInfoCollection>; - -namespace FCS_Param -{ - - //--------------------------------------------------------------------------- - // Tool constructor - //--------------------------------------------------------------------------- - FCS_StepInfoSDTool::FCS_StepInfoSDTool(const std::string& type, const std::string& name, - const IInterface* parent) - : SensitiveDetectorBase(type, name, parent) - , m_hitCollName("EventSteps") - , m_bpsmodcalc("EMBPresamplerCalculator", name) - , m_embcalc("EMBCalculator", name) - , m_emepiwcalc("EMECPosInnerWheelCalculator", name) - , m_emeniwcalc("EMECNegInnerWheelCalculator", name) - , m_emepowcalc("EMECPosOuterWheelCalculator", name) - , m_emenowcalc("EMECNegOuterWheelCalculator", name) - , m_emepscalc("EMECPresamplerCalculator", name) - , m_emeobarcalc("EMECBackOuterBarretteCalculator", name) - , m_heccalc("HECWheelCalculator", name) - , m_fcal1calc("FCAL1Calculator", name) - , m_fcal2calc("FCAL2Calculator", name) - , m_fcal3calc("FCAL3Calculator", name) - , m_minfcalcalc("MiniFCALCalculator", name) - , m_tileCalculator("TileGeoG4SDCalc", name) - , m_larEmID(nullptr) - , m_larFcalID(nullptr) - , m_larHecID(nullptr) - , m_larMiniFcalID(nullptr) - , m_config() - { - declareProperty("HitCollectionName", m_hitCollName); - declareProperty("StacVolumes", m_stacVolumes); - declareProperty("PresamplerVolumes", m_presBarVolumes); - declareProperty("PosIWVolumes", m_posIWVolumes); - declareProperty("NegIWVolumes", m_negIWVolumes); - declareProperty("PosOWVolumes", m_posOWVolumes); - declareProperty("NegOWVolumes", m_negOWVolumes); - declareProperty("PresVolumes", m_presECVolumes); - declareProperty("BOBarretteVolumes", m_bobVolumes); - declareProperty("FCAL1Volumes", m_fcal1Volumes); - declareProperty("FCAL2Volumes", m_fcal2Volumes); - declareProperty("FCAL3Volumes", m_fcal3Volumes); - declareProperty("SliceVolumes", m_sliceVolumes); - declareProperty("MiniVolumes", m_miniVolumes); - declareProperty("TileVolumes", m_tileVolumes); - - declareProperty("EMBPSCalibrationCalculator",m_bpsmodcalc); - declareProperty("EMBCalibrationCalculator",m_embcalc); - declareProperty("EMECPosIWCalibrationCalculator",m_emepiwcalc); - declareProperty("EMECNegIWCalibrationCalculator",m_emeniwcalc); - declareProperty("EMECPosOWCalibrationCalculator",m_emepowcalc); - declareProperty("EMECNegOWCalibrationCalculator",m_emenowcalc); - declareProperty("EMECPSCalibrationCalculator",m_emepscalc); - declareProperty("EMECBOBCalibrationCalculator",m_emeobarcalc); - declareProperty("HECWActiveCalculator",m_heccalc); - declareProperty("FCAL1CalibCalculator",m_fcal1calc); - declareProperty("FCAL2CalibCalculator",m_fcal2calc); - declareProperty("FCAL3CalibCalculator",m_fcal3calc); - declareProperty("MiniFCALActiveCalibrationCalculator",m_minfcalcalc); - declareProperty("TileCalculator", m_tileCalculator); - - declareProperty("shift_lar_subhit",m_config.shift_lar_subhit, ""); - declareProperty("shorten_lar_step",m_config.shorten_lar_step, ""); - - declareProperty("maxRadius",m_config.m_maxRadius, ""); - declareProperty("maxRadiusLAr",m_config.m_maxRadiusLAr, ""); - declareProperty("maxRadiusHEC",m_config.m_maxRadiusHEC, ""); - declareProperty("maxRadiusFCAL",m_config.m_maxRadiusFCAL, ""); - declareProperty("maxRadiusTile",m_config.m_maxRadiusTile, ""); - - declareProperty("maxTime",m_config.m_maxTime, ""); - declareProperty("maxTimeLAr",m_config.m_maxTimeLAr, ""); - declareProperty("maxTimeHEC",m_config.m_maxTimeHEC, ""); - declareProperty("maxTimeFCAL",m_config.m_maxTimeFCAL, ""); - declareProperty("maxTimeTile",m_config.m_maxTimeTile, ""); - - declareProperty("maxEtaPS", m_config.m_maxEtaPS, ""); - declareProperty("maxPhiPS", m_config.m_maxPhiPS, ""); - declareProperty("maxrPS", m_config.m_maxrPS, ""); - - declareProperty("maxEtaEM1", m_config.m_maxEtaEM1, ""); - declareProperty("maxPhiEM1", m_config.m_maxPhiEM1, ""); - declareProperty("maxrEM1", m_config.m_maxrEM1, ""); - - declareProperty("maxEtaEM2", m_config.m_maxEtaEM2, ""); - declareProperty("maxPhiEM2", m_config.m_maxPhiEM2, ""); - declareProperty("maxrEM2", m_config.m_maxrEM2, ""); - - declareProperty("maxEtaEM3", m_config.m_maxEtaEM3, ""); - declareProperty("maxPhiEM3", m_config.m_maxPhiEM3, ""); - declareProperty("maxrEM3", m_config.m_maxrEM3, ""); - } - - //--------------------------------------------------------------------------- - // Initialize the tool - //--------------------------------------------------------------------------- - StatusCode FCS_StepInfoSDTool::initialize() - { - ATH_MSG_DEBUG( "Initializing " << name() ); - - const CaloIdManager* idMgr = nullptr; - CHECK( detStore()->retrieve(idMgr) ); - if( (m_larEmID = idMgr->getEM_ID()) == nullptr) { - ATH_MSG_ERROR("Invalid LAr EM ID helper"); - return StatusCode::FAILURE; - } - if( (m_larFcalID = idMgr->getFCAL_ID()) == nullptr) { - ATH_MSG_ERROR("Invalid LAr FCAL ID helper"); - return StatusCode::FAILURE; - } - if( (m_larHecID = idMgr->getHEC_ID()) == nullptr) { - ATH_MSG_ERROR("Invalid LAr HEC ID helper"); - return StatusCode::FAILURE; - } - if( (m_larMiniFcalID = idMgr->getMiniFCAL_ID()) == nullptr) { - ATH_MSG_ERROR("Invalid LAr Mini FCAL ID helper"); - return StatusCode::FAILURE; - } - - // No general volume list for SensitiveDetectorBase - m_noVolumes = true; - - ATH_CHECK(this->initializeCalculators()); - - return StatusCode::SUCCESS; - } - - //--------------------------------------------------------------------------- - // Initialization of Athena-components - //--------------------------------------------------------------------------- - StatusCode FCS_StepInfoSDTool::initializeCalculators() - { - // Lots of calculators !!! - ATH_CHECK(m_bpsmodcalc.retrieve()); - ATH_CHECK(m_embcalc.retrieve()); - ATH_CHECK(m_emepiwcalc.retrieve()); - ATH_CHECK(m_emeniwcalc.retrieve()); - ATH_CHECK(m_emepowcalc.retrieve()); - ATH_CHECK(m_emenowcalc.retrieve()); - ATH_CHECK(m_emepscalc.retrieve()); - ATH_CHECK(m_emeobarcalc.retrieve()); - ATH_CHECK(m_heccalc.retrieve()); - ATH_CHECK(m_fcal1calc.retrieve()); - ATH_CHECK(m_fcal2calc.retrieve()); - ATH_CHECK(m_fcal3calc.retrieve()); - ATH_CHECK(m_minfcalcalc.retrieve()); - ATH_CHECK(m_tileCalculator.retrieve()); - - return StatusCode::SUCCESS; - } - - //--------------------------------------------------------------------------- - // Collect hits for this event - //--------------------------------------------------------------------------- - StatusCode FCS_StepInfoSDTool::Gather() - { - ATH_MSG_DEBUG("Gathering hits to write out in " << name()); - auto sdWrapper = dynamic_cast<FCS_StepInfoSDWrapper*>( getSD() ); - if(!sdWrapper) { - ATH_MSG_ERROR("Failed to cast SD to FCS_StepInfoSDWrapper"); - return StatusCode::FAILURE; - } - sdWrapper->EndOfAthenaEvent(); - return StatusCode::SUCCESS; - } - - //--------------------------------------------------------------------------- - // Create SD wrapper for current thread - //--------------------------------------------------------------------------- - G4VSensitiveDetector* FCS_StepInfoSDTool::makeSD() - { - // Create the wrapper - auto sdWrapper = new FCS_StepInfoSDWrapper("FCS_StepInfoSDWrapper", m_hitCollName); - - // Create the SDs. - sdWrapper->addSD( makeOneLArSD( "Barrel::Presampler::Module::StepInfo", &*m_bpsmodcalc, m_presBarVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "EMB::STAC::StepInfo", &*m_embcalc, m_stacVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "EMEC::Pos::InnerWheel::StepInfo", &*m_emepiwcalc, m_posIWVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "EMEC::Neg::InnerWheel::StepInfo", &*m_emeniwcalc, m_negIWVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "EMEC::Pos::OuterWheel::StepInfo", &*m_emepowcalc, m_posOWVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "EMEC::Neg::OuterWheel::StepInfo", &*m_emenowcalc, m_negOWVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "Endcap::Presampler::LiquidArgon::StepInfo", &*m_emepscalc, m_presECVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "EMEC::BackOuterBarrette::StepInfo", &*m_emeobarcalc, m_bobVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "FCAL::Module1::Gap::StepInfo", &*m_fcal1calc, m_fcal1Volumes ) ); - sdWrapper->addSD( makeOneLArSD( "FCAL::Module2::Gap::StepInfo", &*m_fcal2calc, m_fcal2Volumes ) ); - sdWrapper->addSD( makeOneLArSD( "FCAL::Module3::Gap::StepInfo", &*m_fcal3calc, m_fcal3Volumes ) ); - sdWrapper->addSD( makeOneLArSD( "HEC::Module::Depth::Slice::Wheel::StepInfo", &*m_heccalc, m_sliceVolumes ) ); - sdWrapper->addSD( makeOneLArSD( "MiniFCAL::Wafer::StepInfo", &*m_minfcalcalc, m_miniVolumes ) ); - sdWrapper->addSD( makeOneTileSD( "Tile::Scintillator::StepInfo", &*m_tileCalculator, m_tileVolumes ) ); - - return sdWrapper; - } - - //--------------------------------------------------------------------------- - // Create one LAr SD - //--------------------------------------------------------------------------- - std::unique_ptr<FCS_StepInfoSD> - FCS_StepInfoSDTool::makeOneLArSD(const std::string& sdName, ILArCalculatorSvc* calc, - const std::vector<std::string>& volumes) const - { - ATH_MSG_VERBOSE( name() << " makeOneSD" ); - - // Parse the wildcard patterns for existing volume names - auto parsedVolumes = LArG4::findLogicalVolumes(volumes, msg()); // from LArG4Code/VolumeUtils.h - - // Inject the Calculator into m_config - FCS_Param::Config config(m_config); - config.m_LArCalculator = calc; - if(!calc) { - throw GaudiException("nullptr for ILArCalculatorSvc provided to constructor for: " + sdName, - name(), StatusCode::FAILURE); - } - if(msgLvl(MSG::VERBOSE)) { config.verboseLevel = 10; } - else if(msgLvl(MSG::DEBUG)) { config.verboseLevel = 5; } - // Create the simple SD - std::unique_ptr<FCS_StepInfoSD> sd = - std::make_unique<LArFCS_StepInfoSD>(sdName, config); - sd->setupHelpers(m_larEmID, m_larFcalID, m_larHecID, m_larMiniFcalID); - - // Assign the volumes to the SD - if( this->assignSD( sd.get(), parsedVolumes ).isFailure() ) { - // TODO: can I just return NULL here? - throw GaudiException("Failed to assign sd: " + sdName, - name(), StatusCode::FAILURE); - } - return std::move(sd); - } - - //--------------------------------------------------------------------------- - // Create one Tile SD - //--------------------------------------------------------------------------- - std::unique_ptr<FCS_StepInfoSD> - FCS_StepInfoSDTool::makeOneTileSD(const std::string& sdName, ITileCalculator* calc, - const std::vector<std::string>& volumes) const - { - ATH_MSG_VERBOSE( name() << " makeOneSD" ); - - // Inject the Calculator into m_config - FCS_Param::Config config(m_config); - config.m_TileCalculator = calc; - if(!calc) { - throw GaudiException("nullptr for ITileCalculator provided to constructor for: " + sdName, - name(), StatusCode::FAILURE); - } - if(msgLvl(MSG::VERBOSE)) { config.verboseLevel = 10; } - else if(msgLvl(MSG::DEBUG)) { config.verboseLevel = 5; } - // Create the simple SD - std::unique_ptr<FCS_StepInfoSD> sd = - std::make_unique<TileFCS_StepInfoSD>(sdName, config); - sd->setupHelpers(m_larEmID, m_larFcalID, m_larHecID, m_larMiniFcalID); - - // Assign the volumes to the SD - if( this->assignSD( sd.get(), volumes ).isFailure() ) { - // TODO: can I just return NULL here? - throw GaudiException("Failed to assign sd: " + sdName, - name(), StatusCode::FAILURE); - } - return std::move(sd); - } - -} // namespace FCS_Param diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.h deleted file mode 100644 index 1bd88ab1e4b..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/FCS_StepInfoSDTool.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef ISF_FASTCALOSIMSD_FCS_STEPINFOSDTOOL_H -#define ISF_FASTCALOSIMSD_FCS_STEPINFOSDTOOL_H - -/// @file FCS_StepInfoSDTool.h -/// @brief Defines the FCS_StepInfoSDTool class -/// @author Steve Farrell <Steven.Farrell@cern.ch> -/// @date 2016-03-26 - -// System includes -#include <string> -#include <vector> - -// G4Atlas includes -#include "G4AtlasTools/SensitiveDetectorBase.h" - -// Local includes -#include "FCS_StepInfoSD.h" - -// Forward declarations -class ILArCalculatorSvc; -class LArEM_ID; -class LArFCAL_ID; -class LArHEC_ID; -class LArMiniFCAL_ID; -class ITileCalculator; - -namespace FCS_Param -{ - - /// @class FCS_StepInfoSDTool - /// @brief A base class for tools that manage FCS_StepInfoSDs. - /// - /// @todo Add more details. - /// - /// @author Steve Farrell <Steven.Farrell@cern.ch> - /// - class FCS_StepInfoSDTool : public SensitiveDetectorBase - { - - public: - - /// Constructor - FCS_StepInfoSDTool(const std::string& type, const std::string& name, - const IInterface* parent); - - /// Initialize the tool - StatusCode initialize() override final; - - /// Calls down to all the SDs to pack their hits into one collection - StatusCode Gather() override final; - - private: - - /// Create the SD wrapper for current worker thread - G4VSensitiveDetector* makeSD() override final; - - /// Initialize Calculator Services - virtual StatusCode initializeCalculators(); - - /// Helper method to create one SD - std::unique_ptr<FCS_StepInfoSD> - makeOneLArSD(const std::string& name, ILArCalculatorSvc* calc, - const std::vector<std::string>& volumes) const; - - /// Helper method to create one SD - std::unique_ptr<FCS_StepInfoSD> - makeOneTileSD(const std::string& name, ITileCalculator* calc, - const std::vector<std::string>& volumes) const; - - /// Hit collection name - std::string m_hitCollName; - - /// @name SD volumes - /// @{ - std::vector<std::string> m_stacVolumes; - std::vector<std::string> m_presBarVolumes; - std::vector<std::string> m_posIWVolumes; - std::vector<std::string> m_negIWVolumes; - std::vector<std::string> m_posOWVolumes; - std::vector<std::string> m_negOWVolumes; - std::vector<std::string> m_presECVolumes; - std::vector<std::string> m_bobVolumes; - std::vector<std::string> m_fcal1Volumes; - std::vector<std::string> m_fcal2Volumes; - std::vector<std::string> m_fcal3Volumes; - std::vector<std::string> m_sliceVolumes; - std::vector<std::string> m_miniVolumes; - std::vector<std::string> m_tileVolumes; - /// @} - - ServiceHandle<ILArCalculatorSvc> m_bpsmodcalc; //LArG4::BarrelPresampler::CalibrationCalculator - ServiceHandle<ILArCalculatorSvc> m_embcalc; //LArG4::Barrel::CalibrationCalculator - ServiceHandle<ILArCalculatorSvc> m_emepiwcalc; //LArG4::EC::CalibrationCalculator(LArWheelCalculator::InnerAbsorberWheel, 1) - ServiceHandle<ILArCalculatorSvc> m_emeniwcalc; //LArG4::EC::CalibrationCalculator(LArWheelCalculator::InnerAbsorberWheel, -1) - ServiceHandle<ILArCalculatorSvc> m_emepowcalc; //LArG4::EC::CalibrationCalculator(LArWheelCalculator::OuterAbsorberWheel, 1) - ServiceHandle<ILArCalculatorSvc> m_emenowcalc; //LArG4::EC::CalibrationCalculator(LArWheelCalculator::OuterAbsorberWheel, -1) - ServiceHandle<ILArCalculatorSvc> m_emepscalc; //LArG4::EC::PresamplerCalibrationCalculator - ServiceHandle<ILArCalculatorSvc> m_emeobarcalc; //LArG4::EC::CalibrationCalculator(LArWheelCalculator::BackOuterBarretteWheelCalib, 1) - ServiceHandle<ILArCalculatorSvc> m_heccalc; //LArG4::HEC::LArHECCalibrationWheelCalculator(LArG4::HEC::kWheelActive) - ServiceHandle<ILArCalculatorSvc> m_fcal1calc; - ServiceHandle<ILArCalculatorSvc> m_fcal2calc; - ServiceHandle<ILArCalculatorSvc> m_fcal3calc; - ServiceHandle<ILArCalculatorSvc> m_minfcalcalc; //LArG4::MiniFCAL::MiniFCALCalibrationCalculator(LArG4::MiniFCAL::kActive) - ServiceHandle<ITileCalculator> m_tileCalculator; - - /// @name Calo identifier helpers - /// @{ - const LArEM_ID* m_larEmID; - const LArFCAL_ID* m_larFcalID; - const LArHEC_ID* m_larHecID; - const LArMiniFCAL_ID* m_larMiniFcalID; - /// @} - FCS_Param::Config m_config; - - }; // class FCS_StepInfoSDTool - -} // namespace FCS_Param - -#endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.cxx deleted file mode 100644 index db100722682..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.cxx +++ /dev/null @@ -1,274 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -// class header -#include "LArFCS_StepInfoSD.h" -/// Geant4 headers -#include "G4Step.hh" -#include "G4ThreeVector.hh" -#include "G4TouchableHistory.hh" - -/// Athena headers -#include "CaloDetDescr/CaloDetDescrManager.h" -#include "CaloDetDescr/CaloDetDescrElement.h" -#include "LArG4Code/ILArCalculatorSvc.h" - -LArFCS_StepInfoSD::LArFCS_StepInfoSD(G4String a_name, const FCS_Param::Config& config) - : FCS_StepInfoSD(a_name, config) - , m_calculator(m_config.m_LArCalculator) -{ -} - -LArFCS_StepInfoSD::~LArFCS_StepInfoSD() -{ -} - -G4bool LArFCS_StepInfoSD::ProcessHits(G4Step* a_step,G4TouchableHistory*) -{ - G4bool result(false); - // If there's no energy, there's no hit. (Aside: Isn't this energy - // the same as the energy from the calculator? Not necessarily. - // The calculator may include detector effects such as - // charge-collection which are not modeled by Geant4.) - if(a_step->GetTotalEnergyDeposit() <= 0.) { return result; } - - if (m_calculator) { - const double StepLength = a_step->GetStepLength()/ CLHEP::mm; - const G4ThreeVector preStepPosition = a_step->GetPreStepPoint()->GetPosition(); //pre step is the position we're interested in - const G4ThreeVector postStepPosition = a_step->GetPostStepPoint()->GetPosition(); - double et(0.); // Total collected charge - std::vector<const G4Step*> steps; - bool madeSubSteps(false); - if (m_config.shorten_lar_step && StepLength>0.2) { - //create smaller substeps instead - G4int nsub_step=(int) (StepLength/0.2) + 1; - G4double delta=1./((double) nsub_step); - //G4cout <<"Orig prestep: "<<preStepPosition<<std::endl; - for (G4int i=0;i<nsub_step;i++) { - G4double fraction1 = ((G4double) i)*delta; - G4double fraction2 = (((G4double) i) + 1.)*delta; - G4ThreeVector subpoint1=preStepPosition*(1-fraction1) + postStepPosition*fraction1; - G4ThreeVector subpoint2=preStepPosition*(1-fraction2) + postStepPosition*fraction2; - G4StepPoint *startpoint = new G4StepPoint(*(a_step->GetPreStepPoint())); - G4StepPoint *endpoint = new G4StepPoint(*(a_step->GetPostStepPoint())); - startpoint->SetPosition(subpoint1); - endpoint->SetPosition(subpoint2); - - G4Step* newstep = new G4Step(*a_step); - newstep->SetPreStepPoint(startpoint); - newstep->SetPostStepPoint(endpoint); - newstep->SetStepLength( (subpoint1-subpoint2).mag()); - newstep->SetTotalEnergyDeposit(a_step->GetTotalEnergyDeposit()/nsub_step); - steps.push_back(newstep); - madeSubSteps=true; - } - } - else { - steps.push_back(a_step); - } - - for (const G4Step* substep : steps) { - G4ThreeVector stepPosition = 0.5*(substep->GetPreStepPoint()->GetPosition()+substep->GetPostStepPoint()->GetPosition()); - std::vector<LArHitData> processedHits; - if (m_calculator->Process(substep, processedHits)) { - for (const auto& larhit: processedHits) { - et += larhit.energy; - } - } - else { - if (m_config.verboseLevel > 4) { - //Maybe 0 hits or something like that... - G4cout << this->GetName()<<" WARNING ProcessHits: Call to ILArCalculatorSvc::Process failed! Details:" << G4endl - << " " << "Volume: "<< a_step->GetPreStepPoint()->GetPhysicalVolume()->GetName()<<" "<<m_calculator<< " position: "<<stepPosition<<" SL: "<<StepLength<<G4endl - << " " << "Orig position: "<<substep->GetPreStepPoint()->GetPosition()<<" / "<<substep->GetPostStepPoint()->GetPosition()<<G4endl - << " " << "StepLength: "<<StepLength<<" step: "<<preStepPosition<<" / "<<postStepPosition<<G4endl; - } - return result; - } - - // drop hits with zero deposited energy (could still happen with negative corrections from calculator) - //Or if total energy is <0 - if (et <= 0.) { - if (m_config.verboseLevel > 4) { - G4cout << this->GetName()<<" WARNING ProcessHits: Total negative energy: " << et << " not processing..." << G4endl; - } - return result; - } - - const size_t numberOfProcessedHits = processedHits.size(); - const G4ThreeVector originalStepPosition = stepPosition; - double maxSubHitEnergy = -999.; - int maxSubHitEnergyindex =-1; - if (numberOfProcessedHits>0) { - maxSubHitEnergy = processedHits[0].energy; - maxSubHitEnergyindex = 0; - } - //Figure out the subhit with most energy - for (size_t i=1; i<numberOfProcessedHits; ++i) { - if (maxSubHitEnergy<processedHits[i].energy) { - maxSubHitEnergy = processedHits[i].energy; - maxSubHitEnergyindex = i; - } - } - //Identifier for the subhit with max energy - Identifier maxEnergyIdentifier = this->ConvertID(processedHits[maxSubHitEnergyindex].id); - CaloDetDescrElement *maxEnergyCell = m_calo_dd_man->get_element(maxEnergyIdentifier); - - Identifier invalidIdentifier; - //for (size_t i=0; i<numberOfProcessedHits; ++i) { - for (const auto& larhit: processedHits) { - Identifier id = this->ConvertID(larhit.id); - if (id == invalidIdentifier) { - G4cout << this->GetName()<<" WARNING ProcessHits: Something wrong with LArG4Identifier: "<<(std::string) larhit.id<<G4endl - <<" "<<id<<G4endl - <<" "<<id.getString()<<G4endl - <<" "<< a_step->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName()<<G4endl - <<" numberOfProcessedHits: "<<numberOfProcessedHits<<G4endl; - G4cout <<" "<<invalidIdentifier<<G4endl; - } - //need to get the cell information - if (numberOfProcessedHits>1) { - if (!m_larEmID->is_em_barrel(id)) { - //It didn't seem to happen outside em_barrel, so flag up if it does: - G4cout << this->GetName()<<" WARNING ProcessHits: Outside LAr barrel, but numberOfProcessedHits="<<numberOfProcessedHits - <<", LArG4Identifier: "<<(std::string) larhit.id<<G4endl; - } - else { - if (m_config.shift_lar_subhit) { - //find subhit with largest energy - if (maxSubHitEnergyindex == -1) { - G4cout << this->GetName()<<" WARNING ProcessHits: no subhit index with e>-999??? "<<G4endl; - return result; - } - if(m_config.verboseLevel > 9) { - G4cout << this->GetName()<<" VERBOSE ProcessHits: shifting subhits: largest energy subhit index is "<<maxSubHitEnergyindex<<" E: "<<maxSubHitEnergy<<" identifier: "<<maxEnergyIdentifier.getString()<<G4endl; - } - //from identifier - CaloDetDescrElement *thiscell = m_calo_dd_man->get_element(id); - if (!maxEnergyCell) { - //How often does this happen? Do not shift. - G4cout << this->GetName()<<" WARNING ProcessHits: maxEnergyCell failed: "<<maxEnergyIdentifier.getString()<<G4endl - <<" "<<m_calo_dd_man->get_element(id)->getSampling()<<G4endl - <<" "<<originalStepPosition.eta()<<G4endl - <<" "<< originalStepPosition.phi()<<G4endl; - stepPosition = originalStepPosition; - } - else if (maxEnergyCell == thiscell) { - //The cells match, so do not shift this hit. - if(m_config.verboseLevel > 9) { - G4cout << this->GetName()<<" VERBOSE ProcessHits: Original step position: "<<originalStepPosition.x()<<" "<<originalStepPosition.y()<<" "<<originalStepPosition.z()<<G4endl - <<" "<<"This cell: "<<thiscell->x()<<" "<<thiscell->y()<<" "<<thiscell->z()<<G4endl - <<" "<<"No shift"<<G4endl; - } - stepPosition = originalStepPosition; - } - else { - //the two cells do not match => shift - G4ThreeVector diff(thiscell->x()-maxEnergyCell->x(), thiscell->y()-maxEnergyCell->y(), thiscell->z()-maxEnergyCell->z()); - stepPosition = originalStepPosition+diff; - if(m_config.verboseLevel > 9) { - CaloDetDescrElement *bestcell = m_calo_dd_man->get_element(m_calo_dd_man->get_element(id)->getSampling(),originalStepPosition.eta(), originalStepPosition.phi()); - G4cout << this->GetName()<<" VERBOSE ProcessHits: Original step position: "<<originalStepPosition.x()<<" "<<originalStepPosition.y()<<" "<<originalStepPosition.z()<<G4endl - <<" "<<"This cell: "<<thiscell->x()<<" "<<thiscell->y()<<" "<<thiscell->z()<<G4endl - <<" "<<"Highest E cell: "<<maxEnergyCell->x()<<" "<<maxEnergyCell->y()<<" "<<maxEnergyCell->z()<<G4endl - <<" "<<"(Best cell: "<<bestcell->x()<<" "<<bestcell->y()<<" "<<bestcell->z()<<")"<<G4endl - <<" "<<"Shifted step position: "<<stepPosition.x()<<" "<<stepPosition.y()<<" "<<stepPosition.z()<<G4endl; - } - } - } - } - } - //Finalize time for LAr hits?: NO - //double time = larhit.energy)==0 ? 0. : (double) larhit.time/larhit.energy/CLHEP::ns; - double time = larhit.time; - double energy = larhit.energy/CLHEP::MeV; - this->update_map(stepPosition, id, energy, time, true, numberOfProcessedHits); //store numberOfProcessedHits as info - }//numberOfProcessedHits - } //istep - if (madeSubSteps) { - //only delete steps when doing substeps. Do not delete the original G4Step! - while(!steps.empty()) { delete steps.back(); steps.pop_back(); } - } - } - return result; -} - -Identifier LArFCS_StepInfoSD::ConvertID(const LArG4Identifier& a_ident) const -{ - Identifier id; - if(a_ident[0]==4) { - // is LAr - if(a_ident[1]==1) { - //is LAr EM - try { - id = m_larEmID->channel_id(a_ident[2], // barrel_ec - a_ident[3], // sampling - a_ident[4], // region - a_ident[5], // eta - a_ident[6]); // phi - } - catch (LArID_Exception& e) { - G4ExceptionDescription description; - description << "ConvertID: LArEM_ID error code " << e.code() << " " - << (std::string) e; - G4Exception("LArFCS_StepInfoSD", "ConvertIDEM", FatalException, description); - abort(); - } - } - else if(a_ident[1]==2) { - //is EM HEC - try { - id = m_larHecID->channel_id(a_ident[2], // zSide - a_ident[3], // sampling - a_ident[4], // region - a_ident[5], // eta - a_ident[6]); // phi - } - catch(LArID_Exception& e) { - G4ExceptionDescription description; - description << "ConvertID: LArHEC_ID error code " << e.code() << " " - << (std::string) e; - G4Exception("LArFCS_StepInfoSD", "ConvertIDHEC", FatalException, description); - abort(); - } - } - else if(a_ident[1]==3) { - // FCAL - if(a_ident[3]>0) { - //is EM FCAL - try { - id = m_larFcalID->channel_id(a_ident[2], // zSide - a_ident[3], // sampling - a_ident[4], // eta - a_ident[5]); // phi - } - catch(LArID_Exception& e) { - G4ExceptionDescription description; - description << "ConvertID: LArFCAL_ID error code " << e.code() << " " - << (std::string) e; - G4Exception("LArFCS_StepInfoSD", "ConvertIDFCAL", FatalException, description); - abort(); - } - } - else { - //is Mini FCAL - try { - id = m_larMiniFcalID->channel_id(a_ident[2], // zSide - a_ident[3], // module - a_ident[4], // depth - a_ident[5], // eta - a_ident[6]); // phi - } - catch(LArID_Exception& e) { - G4ExceptionDescription description; - description << "ConvertID: LArMiniFCAL_ID error code " << e.code() << " " - << (std::string) e; - G4Exception("LArFCS_StepInfoSD", "ConvertIDMiniFCAL", FatalException, description); - abort(); - } - } - } - } - return id; -} diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.h deleted file mode 100644 index e5756d43a11..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/LArFCS_StepInfoSD.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef ISF_FASTCALOSIM_LARFCS_STEPINFOSD_H -#define ISF_FASTCALOSIM_LARFCS_STEPINFOSD_H - -// Base class header -#include "FCS_StepInfoSD.h" - -#include "LArG4Code/LArG4Identifier.h" - -// Forward declarations -class LArEM_ID; -class LArFCAL_ID; -class LArHEC_ID; -class LArMiniFCAL_ID; -class CaloDetDescrManager; - -class G4Step; -class G4TouchableHistory; -class ILArCalculatorSvc; - -/// @class FCS_StepInfoSD -/// @brief Common sensitive detector class for LAr systems. -/// -/// This SD implementation saves the standard LArHits. -/// See LArG4CalibSD for an SD that handles calibration hits. -/// -class LArFCS_StepInfoSD : public FCS_StepInfoSD -{ -public: - - /// Constructor - LArFCS_StepInfoSD(G4String a_name, const FCS_Param::Config& config); - - /// Destructor - virtual ~LArFCS_StepInfoSD(); - - /// Main processing method - G4bool ProcessHits(G4Step* a_step, G4TouchableHistory*) override; - -private: - /// Helper function for making "real" identifiers from LArG4Identifiers - Identifier ConvertID(const LArG4Identifier& a_ident) const; - - /// Member variable - the calculator we'll use - ILArCalculatorSvc * m_calculator; -}; - -#endif // ISF_FASTCALOSIM_LARFCS_STEPINFOSD_H diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.cxx deleted file mode 100644 index 7df4b9c974d..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.cxx +++ /dev/null @@ -1,101 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include "SDWrapper.h" - -// Geant4 includes -#include "G4SDManager.hh" - -// Framework utilities -#include "CxxUtils/make_unique.h" - -// Project includes -#include "ISF_FastCaloSimEvent/FCS_StepInfoCollection.h" - -// Local includes -#include "FCS_StepInfoSD.h" - -namespace FCS_Param -{ - - namespace detail - { - - //------------------------------------------------------------------------- - // Construct with a hit collection name - //------------------------------------------------------------------------- - template<class SDType, class HitContainerType> - SDWrapper<SDType, HitContainerType>:: - SDWrapper(const std::string& name, const std::string& hitCollectionName) - : G4VSensitiveDetector(name), - m_hitCollName(hitCollectionName), - m_hitColl(hitCollectionName) - {} - - //------------------------------------------------------------------------- - // Add a unique SD to the list - //------------------------------------------------------------------------- - template<class SDType, class HitContainerType> - void SDWrapper<SDType, HitContainerType>:: - addSD(std::unique_ptr<SDType> sd) - { - m_sdList.push_back( std::move(sd) ); - } - - //------------------------------------------------------------------------- - // Initialize the hit collection at the beginning of the G4 event - //------------------------------------------------------------------------- - template<class SDType, class HitContainerType> - void SDWrapper<SDType, HitContainerType>:: - Initialize(G4HCofThisEvent*) - { - if(!m_hitColl.isValid()) { - if(verboseLevel >= 5) { - G4cout << GetName() << " \tDEBUG\t" << "Initializing hit container: " - << m_hitCollName << G4endl; - } - m_hitColl = CxxUtils::make_unique<HitContainerType>(); - } - } - - //------------------------------------------------------------------------- - // This should not be called - //------------------------------------------------------------------------- - template<class SDType, class HitContainerType> - bool SDWrapper<SDType, HitContainerType>:: - ProcessHits(G4Step*, G4TouchableHistory*) - { - G4ExceptionDescription description; - description << "ProcessHits: this SD shouldn't be assigned to volumes!"; - G4Exception(GetName(), "SDError", FatalException, description); - return false; - } - - //------------------------------------------------------------------------- - // Gather the hits into the WriteHandle from all the SDs - //------------------------------------------------------------------------- - template<class SDType, class HitContainerType> - void SDWrapper<SDType, HitContainerType>:: - EndOfAthenaEvent() - { - if(!m_hitColl.isValid()) { - G4cerr << GetName() << " \tERROR\t" << "Hit collection WriteHandle is " - << "invalid!" << G4endl; - throw std::runtime_error("Invalid hit container WriteHandle: " + - m_hitColl.name()); - } - // Loop over each SD and fill the container - for(auto& sd : m_sdList) { - sd->EndOfAthenaEvent( &*m_hitColl ); - } - } - - //------------------------------------------------------------------------- - // Explit template instantiations - //------------------------------------------------------------------------- - template class SDWrapper<FCS_StepInfoSD, ISF_FCS_Parametrization::FCS_StepInfoCollection>; - - } // namespace detail - -} // namespace FCS_Param diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.h deleted file mode 100644 index ef3a248cf71..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef ISF_FASTCALOSIMSD_SDWRAPPER_H -#define ISF_FASTCALOSIMSD_SDWRAPPER_H - -// System includes -#include <string> -#include <vector> -#include <memory> - -// External includes -#include "G4VSensitiveDetector.hh" - -// Framework includes -#include "StoreGate/WriteHandle.h" - - -// Forward declarations -class FCS_StepInfoSD; -namespace ISF_FCS_Parametrization { - class FCS_StepInfoCollection; -} -namespace FCS_Param -{ - - namespace detail - { - - /// @class SDWrapper - /// @brief A template class which wraps multiple sensitive detectors. - /// - /// Allows for SD tools to manage several SDs which collaborate to fill one - /// hit container in a multi-threading-friendly way. The wrapper owns the - /// WriteHandle for the hit container and gathers hits from each SD at the - /// end of an event. - /// - /// The inheritance from G4VSensitiveDetector is merely a trick so the SD - /// tool can save this object in the SensitiveDetectorBase thread-local - /// container. It also allows to create the hit container at the right time - /// via the SD Initialize method invoked by Geant4. - /// - /// Clients shouldn't use this generic template directly, but should use - /// the explicitly allowed specializations given below. - /// - /// @author Steve Farrell <Steven.Farrell@cern.ch> - /// - template<class SDType, class HitContainerType> - class SDWrapper : public G4VSensitiveDetector - { - - public: - - /// Alias to the SD list type - using SDList_t = std::vector< std::unique_ptr<SDType> >; - - /// Construct the wrapper from the output collection name - SDWrapper(const std::string& name, const std::string& hitCollectionName); - - /// Add an SD to this wrapper - void addSD(std::unique_ptr<SDType> sd); - - /// Beginning of G4 event; initialize the hit collection. - virtual void Initialize(G4HCofThisEvent*) override final; - - /// This method should not be called. It will throw. - virtual bool ProcessHits(G4Step*, G4TouchableHistory*) override final; - - /// Gather the hits into the WriteHandle from all the SDs - void EndOfAthenaEvent(); - - private: - - /// The hit container name - std::string m_hitCollName; - - /// The hit container handle - SG::WriteHandle<HitContainerType> m_hitColl; - - /// The list of sensitive detectors that I own and manage - SDList_t m_sdList; - - }; // class SDWrapper - - } // namespace detail - - - /// Template instantiation for LArG4SimpleSD - using FCS_StepInfoSDWrapper = detail::SDWrapper<FCS_StepInfoSD, ISF_FCS_Parametrization::FCS_StepInfoCollection>; - -} // namespace FCS_Param - -#endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.cxx deleted file mode 100644 index 41ca1bd2cbc..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.cxx +++ /dev/null @@ -1,100 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -//************************************************************ -// -// Class TileFCS_StepInfoSD -// Sensitive detector for TileCal G4 simulations with TileGeoModel -// -// Author: Vakho Tsulaia <Vakhtang.Tsulaia@cern.ch> -// -// Major updates: July, 2013 (Sergey) -// -//************************************************************ - -// class header -#include "TileFCS_StepInfoSD.h" -/// Geant4 headers -#include "G4Step.hh" -#include "G4ThreeVector.hh" -#include "G4TouchableHistory.hh" - -/// Athena headers -#include "CaloDetDescr/CaloDetDescrManager.h" -#include "TileG4Interfaces/ITileCalculator.h" - -TileFCS_StepInfoSD::TileFCS_StepInfoSD(G4String name, const FCS_Param::Config & config) - : FCS_StepInfoSD(name, config) - , m_calculator(config.m_TileCalculator) -{ -} - -TileFCS_StepInfoSD::~TileFCS_StepInfoSD() { -} - -G4bool TileFCS_StepInfoSD::ProcessHits(G4Step* a_step, G4TouchableHistory* /*ROhist*/) { - G4bool result(false); - // If there's no energy, there's no hit. (Aside: Isn't this energy - // the same as the energy from the calculator? Not necessarily. - // The calculator may include detector effects such as - // charge-collection which are not modeled by Geant4.) - if(a_step->GetTotalEnergyDeposit() <= 0.) { return result; } - - if (m_calculator) { - //calculation of MicroHit with a_step - TileHitData hitData; - TileMicroHit micHit = m_calculator->GetTileMicroHit(a_step, hitData); - Identifier m_invalid_id; - - //Check if MicroHit is not in scintillator - if ((micHit.pmt_up == m_invalid_id) && (micHit.pmt_down == m_invalid_id)) { - G4cout <<this->GetName()<<" WARNING ProcessHits: Invalid hit in Tile??"<<G4endl; - return result; - } - else { - // Store TileHits Information - if ((micHit.pmt_up == m_invalid_id) || (micHit.pmt_down == m_invalid_id)) { - G4cout <<this->GetName()<<" WARNING ProcessHits: Something wrong in identifier: One tile pmt: "<<micHit.pmt_up<<" "<<micHit.pmt_down<<std::endl; - G4cout <<this->GetName()<<" WARNING ProcessHits: E up: "<<micHit.e_up<<" E down: "<<micHit.e_down<<" T up: "<<micHit.time_up<<" T down: "<<micHit.time_down<<std::endl; - } - const G4ThreeVector pos = 0.5*(a_step->GetPreStepPoint()->GetPosition()+a_step->GetPostStepPoint()->GetPosition()); - - this->update_map(pos, micHit.pmt_up, micHit.e_up, micHit.time_up, true,1); - this->update_map(pos, micHit.pmt_down, micHit.e_down,micHit.time_down , true,1); - } - } - return true; -} - -void TileFCS_StepInfoSD::update_map(const CLHEP::Hep3Vector & l_vec, const Identifier & l_cell, double l_energy, double l_time, bool l_valid, int l_detector) -{ - // Drop any hits that don't have a good identifier attached - if (!m_calo_dd_man->get_element(l_cell)) { return; } - - auto map_item = m_hit_map.find( l_cell ); - if (map_item==m_hit_map.end()) { - m_hit_map[l_cell] = new std::vector< ISF_FCS_Parametrization::FCS_StepInfo* >; - m_hit_map[l_cell]->push_back( new ISF_FCS_Parametrization::FCS_StepInfo( l_vec , l_cell , l_energy , l_time , l_valid , l_detector ) ); - } - else { - bool match = false; - for (auto map_it : * map_item->second) { - // Time check - const double delta_t = std::fabs(map_it->time()-l_time); - if ( delta_t >= m_config.m_maxTimeTile ) { continue; } - // Distance check - const double hit_diff2 = map_it->position().diff2( l_vec ); - if ( hit_diff2 >= m_config.m_maxRadiusTile ) { continue; } - // Found a match. Make a temporary that will be deleted! - const ISF_FCS_Parametrization::FCS_StepInfo my_info( l_vec , l_cell , l_energy , l_time , l_valid , l_detector ); - *map_it += my_info; - match = true; - break; - } // End of search for match in time and space - if (!match) { - map_item->second->push_back( new ISF_FCS_Parametrization::FCS_StepInfo( l_vec , l_cell , l_energy , l_time , l_valid , l_detector ) ); - } // Didn't match - } // ID already in the map - -} // That's it for updating the map! diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.h deleted file mode 100644 index 7664e789390..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/TileFCS_StepInfoSD.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -//************************************************************ -// -// Class TileFCS_StepInfoSD -// Sensitive detector for TileCal G4 simulations using TileGeoModel -// -// Author: Vakho Tsulaia <Vakhtang.Tsulaia@cern.ch> -// -// Major updates: July, 2013 (Sergey) -// -//************************************************************ - -#ifndef ISF_FASTCALOSIMSD_TILEFCS_STEPINFOSD_H -#define ISF_FASTCALOSIMSD_TILEFCS_STEPINFOSD_H - -// Base class header -#include "FCS_StepInfoSD.h" - -class G4Step; -class G4TouchableHistory; -class ITileCalculator; - -class TileFCS_StepInfoSD: public FCS_StepInfoSD { -public: - TileFCS_StepInfoSD(G4String name, const FCS_Param::Config& config); - ~TileFCS_StepInfoSD(); - - G4bool ProcessHits(G4Step*, G4TouchableHistory*) override final; - - // Don't leave copy constructors or assignment operators around - TileFCS_StepInfoSD(const TileFCS_StepInfoSD&) = delete; - TileFCS_StepInfoSD& operator=(const TileFCS_StepInfoSD&) = delete; - -protected: - /// Keep a map instead of trying to keep the full vector. - /// At the end of the event we'll push the map back into the - /// FCS_StepInfoCollection in StoreGate. - virtual void update_map(const CLHEP::Hep3Vector & l_vec, const Identifier & l_cell, double l_energy, double l_time, bool l_valid, int l_detector) override final; - -private: - ITileCalculator* m_calculator; -}; - -#endif // ISF_FASTCALOSIMSD_TILEFCS_STEPINFOSD_H - diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/components/ISF_FastCaloSimSD_entries.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/components/ISF_FastCaloSimSD_entries.cxx deleted file mode 100644 index 0da3aea9972..00000000000 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/components/ISF_FastCaloSimSD_entries.cxx +++ /dev/null @@ -1,5 +0,0 @@ -#include "GaudiKernel/DeclareFactoryEntries.h" - -#include "../FCS_StepInfoSDTool.h" - -DECLARE_TOOL_FACTORY( FCS_Param::FCS_StepInfoSDTool ) -- GitLab