From 96833e8e80fd8fa88514d3e3b096e9cacbc25523 Mon Sep 17 00:00:00 2001 From: Soshi Tsuno <soshi.tsuno@cern.ch> Date: Mon, 2 Nov 2020 18:16:08 +0000 Subject: [PATCH] Allowing radiation damage digitization (ATLPHYSVAL-654) --- .../python/PixelDigitizationConfig.py | 16 ++++++++++++++-- .../python/PixelDigitizationConfigNew.py | 13 +++++++++++++ .../PixelDigitization/src/SensorSim3DTool.cxx | 16 ++++++++-------- .../PixelDigitization/src/SensorSim3DTool.h | 2 +- .../src/SensorSimPlanarTool.cxx | 14 +++++++------- .../PixelDigitization/src/SensorSimPlanarTool.h | 8 ++++---- Simulation/Digitization/python/DigiAlgConfig.py | 2 -- .../python/DigitizationConfigFlags.py | 3 +++ 8 files changed, 50 insertions(+), 24 deletions(-) diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py index a91384df66a..2b2b09cba25 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py +++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py @@ -4,7 +4,7 @@ from __future__ import print_function from AthenaCommon import CfgMgr from Digitization.DigitizationFlags import digitizationFlags - + # The earliest bunch crossing time for which interactions will be sent # to the Pixel Digitization code. def Pixel_FirstXing(): @@ -55,12 +55,24 @@ def SensorSimPlanarTool(name="SensorSimPlanarTool", **kwargs): from AthenaCommon.AppMgr import ToolSvc kwargs.setdefault("SiPropertiesTool", ToolSvc.PixelSiPropertiesTool) kwargs.setdefault("LorentzAngleTool", ToolSvc.PixelLorentzAngleTool) -# kwargs.setdefault("LorentzAngleTool", pixelLorentzAngleToolSetup.PixelLorentzAngleTool) + kwargs.setdefault("doRadDamage", digitizationFlags.doRadiationDamage.get_Value()) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6.4) + kwargs.setdefault("fluenceB", 4.6) + kwargs.setdefault("fluence1", 2.1) + kwargs.setdefault("fluence2", 1.3) + kwargs.setdefault("voltage", 400) + kwargs.setdefault("voltageB", 400) + kwargs.setdefault("voltage1", 250) + kwargs.setdefault("voltage2", 250) return CfgMgr.SensorSimPlanarTool(name, **kwargs) def SensorSim3DTool(name="SensorSim3DTool", **kwargs): from AthenaCommon.AppMgr import ToolSvc kwargs.setdefault("SiPropertiesTool", ToolSvc.PixelSiPropertiesTool) + kwargs.setdefault("doRadDamage", digitizationFlags.doRadiationDamage.get_Value()) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6) return CfgMgr.SensorSim3DTool(name, **kwargs) def SensorSimTool(name="SensorSimTool", **kwargs): diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py index d01cd5f28bc..bb9daa4ff5b 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py +++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfigNew.py @@ -83,6 +83,16 @@ def SensorSimPlanarToolCfg(flags, name="SensorSimPlanarTool", **kwargs): kwargs.setdefault("SiPropertiesTool", SiTool) kwargs.setdefault("LorentzAngleTool", LorentzTool) SensorSimPlanarTool = CompFactory.SensorSimPlanarTool + kwargs.setdefault("doRadDamage", flags.Digitization.DoRadiationDamage) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6.4) + kwargs.setdefault("fluenceB", 4.6) + kwargs.setdefault("fluence1", 2.1) + kwargs.setdefault("fluence2", 1.3) + kwargs.setdefault("voltage", 400) + kwargs.setdefault("voltageB", 400) + kwargs.setdefault("voltage1", 250) + kwargs.setdefault("voltage2", 250) acc.setPrivateTools(SensorSimPlanarTool(name, **kwargs)) return acc @@ -94,6 +104,9 @@ def SensorSim3DToolCfg(flags, name="SensorSim3DTool", **kwargs): acc.popToolsAndMerge(PixelLorentzAngleCfg(flags)) kwargs.setdefault("SiPropertiesTool", SiTool) SensorSim3DTool = CompFactory.SensorSim3DTool + kwargs.setdefault("doRadDamage", flags.Digitization.DoRadiationDamage) + # TODO This is 2018 fluence setting. These parameters should be controlled by the conditions data. + kwargs.setdefault("fluence", 6) acc.setPrivateTools(SensorSim3DTool(name, **kwargs)) return acc diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx index 7d783d4d505..0ac99797f98 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx @@ -51,35 +51,35 @@ StatusCode SensorSim3DTool::initialize() { if (!m_doRadDamage) { m_fluence=0; } - if (m_fluence==1) { + if (static_cast<int>(m_fluence)==1) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_0_20V.root")); m_fluence_layers.push_back(1e-10); } - else if (m_fluence==2) { + else if (static_cast<int>(m_fluence)==2) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_1e14_20V.root")); m_fluence_layers.push_back(1e14); } - else if (m_fluence==3) { + else if (static_cast<int>(m_fluence)==3) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_2e14_30V.root")); m_fluence_layers.push_back(2e14); } - else if (m_fluence==4) { + else if (static_cast<int>(m_fluence)==4) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_5e14_40V.root")); m_fluence_layers.push_back(5e14); } - else if (m_fluence==5) { + else if (static_cast<int>(m_fluence)==5) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_1e15_50V.root")); m_fluence_layers.push_back(1e15); } - else if (m_fluence==6) { + else if (static_cast<int>(m_fluence)==6) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_5e15_160V.root")); m_fluence_layers.push_back(5e15); } - else if (m_fluence==7) { + else if (static_cast<int>(m_fluence)==7) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_6e15_190V_new.root")); m_fluence_layers.push_back(6e15); } - else if (m_fluence==8) { + else if (static_cast<int>(m_fluence)==8) { mapsPath_list.push_back(PathResolverFindCalibFile("PixelDigitization/TCAD_IBL_3Dsensors_efields/phi_1e16_260V_new.root")); m_fluence_layers.push_back(1e16); } diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h index 34a3b8ab120..70b71af3106 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.h @@ -80,7 +80,7 @@ class SensorSim3DTool : public SensorSimTool { Gaudi::Property<bool> m_doChunkCorrection {this, "doChunkCorrection", false, "doChunkCorrection bool: should be flag"}; - Gaudi::Property<int> m_fluence + Gaudi::Property<double> m_fluence {this, "fluence", 0, "this is the fluence benchmark, 0-6. 0 is unirradiated, 1 is start of Run 2, 5 is end of 2018 and 6 is projected end of 2018"}; Gaudi::Property<double> m_trappingTimeElectrons diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx index 985ac58eebc..df14c3d5aec 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx @@ -68,7 +68,7 @@ StatusCode SensorSimPlanarTool::initialize() { // For each layer one configuration TCADpath_list = {iblFiles, sensorFiles, sensorFiles, sensorFiles}; //IBL - 200um sensor depth, B layer - 20um, layer 1, layer 2 - if (m_fluence==1) { + if (static_cast<int>(m_fluence)==1) { ATH_MSG_INFO("Use benchmark point 1!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl0em10.root") ); //IBL PL - Barrel mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_250V_fl7e13.root") ); //B-Layer - Barrel @@ -85,7 +85,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(150); m_voltage_layers.push_back(150); } - else if (m_fluence==2) { + else if (static_cast<int>(m_fluence)==2) { ATH_MSG_INFO("Use benchmark point 2!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl1e14.root") ); @@ -103,7 +103,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==3) { + else if (static_cast<int>(m_fluence)==3) { ATH_MSG_INFO("Use benchmark point 3!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_80V_fl2e14.root") ); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_PIX_350V_fl1_7e14.root") ); @@ -120,7 +120,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==4) { + else if (static_cast<int>(m_fluence)==4) { ATH_MSG_INFO("Use benchmark point 4!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_150V_fl2e14.root") ); @@ -138,7 +138,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==5) { + else if (static_cast<int>(m_fluence)==5) { ATH_MSG_INFO("Use benchmark point 5!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_PL_350V_fl5e14.root") ); @@ -156,7 +156,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(200); m_voltage_layers.push_back(150); } - else if (m_fluence==6) { + else if (static_cast<int>(m_fluence)==6) { ATH_MSG_INFO("Use benchmark point 6!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_400V_fl8_7e14.root") ); @@ -174,7 +174,7 @@ StatusCode SensorSimPlanarTool::initialize() { m_voltage_layers.push_back(250); m_voltage_layers.push_back(250); } - else if (m_fluence==7) { + else if (static_cast<int>(m_fluence)==7) { ATH_MSG_INFO("Use benchmark point 7!"); mapsPath_list.push_back( PathResolverFindCalibFile("PixelDigitization/maps_IBL_endLHC.root") ); diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h index 2afbac5510d..3db9f5b5e22 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.h @@ -62,16 +62,16 @@ class SensorSimPlanarTool : public SensorSimTool { Gaudi::Property<double> m_trappingTimeHoles {this, "trappingTimeHoles", 0.0, "Characteristic time till hole is trapped [ns]"}; - Gaudi::Property<int> m_fluence + Gaudi::Property<double> m_fluence {this, "fluence", 0, "this is the fluence benchmark, 0-6. 0 is unirradiated, 1 is start of Run 2, 5 is end of 2018 and 6 is projected end of 2018"}; - Gaudi::Property<int> m_fluenceB + Gaudi::Property<double> m_fluenceB {this, "fluenceB", -1, "fluence detector has recieved in neqcm2 at the B layer."}; - Gaudi::Property<int> m_fluence1 + Gaudi::Property<double> m_fluence1 {this, "fluence1", -1, "fluence detector has recieved in neqcm2 at the layer 1."}; - Gaudi::Property<int> m_fluence2 + Gaudi::Property<double> m_fluence2 {this, "fluence2", -1, "fluence detector has recieved in neqcm2 at the layer 2."}; Gaudi::Property<double> m_voltage diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py index f40254bc552..73cd7cb4c84 100644 --- a/Simulation/Digitization/python/DigiAlgConfig.py +++ b/Simulation/Digitization/python/DigiAlgConfig.py @@ -118,8 +118,6 @@ def getStandardInDetPileUpTools(): PileUpToolsList += [ "PixelLightDigitizationTool" ] elif 'doSmearedPixelDigi' in digitizationFlags.experimentalDigi(): PileUpToolsList += [ "PixelSmearedDigitizationTool" ] - elif digitizationFlags.doRadiationDamage(): - PileUpToolsList += [ "PixelRadDamDigitizationTool" ] else: PileUpToolsList += [ "PixelDigitizationTool" ] if DetFlags.digitize.SCT_on(): diff --git a/Simulation/Digitization/python/DigitizationConfigFlags.py b/Simulation/Digitization/python/DigitizationConfigFlags.py index feab44fe382..8c37d85be85 100644 --- a/Simulation/Digitization/python/DigitizationConfigFlags.py +++ b/Simulation/Digitization/python/DigitizationConfigFlags.py @@ -95,6 +95,9 @@ def createDigitizationCfgFlags(): # Override the HIT file Run Number with one from a data run flags.addFlag("Digitization.DataRunNumber", -1) + # Run radiation damage simulation + flags.addFlag("Digitization.DoRadiationDamage", False) + # for PileUp digitization # Beam Halo input collections flags.addFlag("Digitization.PU.BeamHaloInputCols", []) -- GitLab