Skip to content
Snippets Groups Projects

21.9 initialization of hgtd digitization classes

Files
24
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
from AthenaCommon import CfgMgr
# The earliest bunch crossing time for which interactions will be sent
# to the HGTD Digitization code.
def HGTD_FirstXing():
return -50
# The latest bunch crossing time for which interactions will be sent
# to the HGTD Digitization code.
def HGTD_LastXing():
return 25
# NOTE: related to 3BC mode?
######################################################################################
def getHGTD_SurfaceChargesGenerator(name="HGTD_SurfaceChargesGenerator", **kwargs):
## Set up services used by HGTD_SurfaceChargesGenerator
## TODO remove all this stuff and see if PixelDigitization works without it.
# Setup the DCS folders and Svc used in the sctSiliconConditionsSvc
# from IOVDbSvc.CondDB import conddb
# if not conddb.folderRequested('/HGTD/DCS/CHANSTAT'):
# conddb.addFolder("DCS_OFL","/HGTD/DCS/CHANSTAT")
# if not conddb.folderRequested('/HGTD/DCS/MODTEMP'):
# conddb.addFolder("DCS_OFL","/HGTD/DCS/MODTEMP")
# if not conddb.folderRequested('/HGTD/DCS/HV'):
# conddb.addFolder("DCS_OFL","/HGTD/DCS/HV")
# ## HGTD_DCSConditionsSvc - used by HGTD_SurfaceChargesGenerator
# from AthenaCommon.AppMgr import ServiceMgr
# if not hasattr(ServiceMgr, "InDetHGTD_DCSConditionsSvc"):
# from HGTD_ConditionsServices.HGTD_ConditionsServicesConf import HGTD_DCSConditionsSvc
# InDetHGTD_DCSConditionsSvc = HGTD_DCSConditionsSvc(name = "InDetHGTD_DCSConditionsSvc")
# ServiceMgr += InDetHGTD_DCSConditionsSvc
# # HGTD_SiPropertiesSvc - used by HGTD_SurfaceChargesGenerator
# if not hasattr(ServiceMgr, "HGTD_SiPropertiesSvc"):
# # Lorentz Angle Service
# from SiLorentzAngleSvc.LorentzAngleSvcSetup import lorentzAngleSvc
# # Silicon conditions service (set up by LorentzAngleSvcSetup)
# sctSiliconConditionsSvc = ServiceMgr.HGTD_SiliconConditionsSvc
# # Silicon properties service
# from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesSvc;
# sctSiPropertiesSvc = SiPropertiesSvc(name = "HGTD_SiPropertiesSvc",
# DetectorName="HGTD",
# SiConditionsServices = sctSiliconConditionsSvc)
# ServiceMgr += sctSiPropertiesSvc
# ## Charge trapping service - used by HGTD_SurfaceChargesGenerator
# if not hasattr(ServiceMgr, "InDetHGTD_RadDamageSummarySvc"):
# from HGTD_ConditionsServices.HGTD_ConditionsServicesConf import HGTD_RadDamageSummarySvc
# InDetHGTD_RadDamageSummarySvc = HGTD_RadDamageSummarySvc(name = "InDetHGTD_RadDamageSummarySvc")
# ServiceMgr += InDetHGTD_RadDamageSummarySvc
#
# kwargs.setdefault("FixedTime", -999)
# kwargs.setdefault("SubtractTime", -999)
# kwargs.setdefault("SurfaceDriftTime", 10)
# kwargs.setdefault("NumberOfCharges", 1)
# kwargs.setdefault("SmallStepLength", 5)
# kwargs.setdefault("DepletionVoltage", 70)
# kwargs.setdefault("BiasVoltage", 150)
# from AthenaCommon.GlobalFlags import globalflags
# kwargs.setdefault("isOverlay", globalflags.isOverlay())
#
# from Digitization.DigitizationFlags import digitizationFlags
# if 'NewMerge' in digitizationFlags.experimentalDigi():
# kwargs.setdefault("UseMcEventCollectionHelper",True)
# else:
# kwargs.setdefault("UseMcEventCollectionHelper",False)
# if 'doDetailedSurfChargesGen' in digitizationFlags.experimentalDigi():
# kwargs.setdefault("ChargeDriftModel", 1)
# kwargs.setdefault("EFieldModel", 2)
# kwargs.setdefault("MagneticField", -2.0)
# kwargs.setdefault("SensorTemperature", 273.15)
# kwargs.setdefault("TransportTimeStep", 0.25)
# kwargs.setdefault("TransportTimeMax", 25.0)
# from HGTD_Digitization.HGTD_DigitizationConf import HGTD_DetailedSurfaceChargesGenerator
# return HGTD_DetailedSurfaceChargesGenerator(name, **kwargs)
# else:
# from HGTD_Digitization.HGTD_DigitizationConf import HGTD_SurfaceChargesGenerator
# return HGTD_SurfaceChargesGenerator(name, **kwargs)
from HGTD_Digitization.HGTD_DigitizationConf import HGTD_SurfaceChargesGenerator
return HGTD_SurfaceChargesGenerator(name, **kwargs)
######################################################################################
def getHGTD_FrontEnd(name="HGTD_FrontEnd", **kwargs):
from Digitization.DigitizationFlags import digitizationFlags
#Setup noise treament in HGTD_FrontEnd
# To set the mean noise values for the different module types
# Default values set at 0 degrees, plus/minus ~5 enc per plus/minus degree
# kwargs.setdefault("NoiseBarrel", 1500.0)
# kwargs.setdefault("NoiseBarrel3", 1541.0)
# kwargs.setdefault("NoiseInners", 1090.0)
# kwargs.setdefault("NoiseMiddles", 1557.0)
# kwargs.setdefault("NoiseShortMiddles", 940.0)
# kwargs.setdefault("NoiseOuters", 1618.0)
# kwargs.setdefault("NOBarrel", 1.5e-5)
# kwargs.setdefault("NOBarrel3", 2.1e-5)
# kwargs.setdefault("NOInners", 5.0e-9)
# kwargs.setdefault("NOMiddles", 2.7e-5)
# kwargs.setdefault("NOShortMiddles", 2.0e-9)
# kwargs.setdefault("NOOuters", 3.5e-5)
# # If noise is turned off:
# if not digitizationFlags.doInDetNoise.get_Value():
# ###kwargs.setdefault("OnlyHitElements", True)
# print 'HGTD_Digitization:::: Turned off Noise in HGTD_FrontEnd'
# kwargs.setdefault("NoiseOn", False)
# kwargs.setdefault("AnalogueNoiseOn", False)
# kwargs.setdefault("AddNoiseDiodes", False)
# else:
# kwargs.setdefault("NoiseOn", True)
# kwargs.setdefault("AnalogueNoiseOn", True)
# # In overlay MC, only analogue noise is on. Noise hits are not added.
# from AthenaCommon.GlobalFlags import globalflags
# if globalflags.isOverlay() and globalflags.DataSource == 'geant4':
# kwargs["NoiseOn"] = False
# kwargs["AnalogueNoiseOn"] = True
# # Use Calibration data from Conditions DB, still for testing purposes only
# kwargs.setdefault("UseCalibData", True)
# # Setup the ReadCalibChip folders and Svc
# from IOVDbSvc.CondDB import conddb
# if not conddb.folderRequested('/HGTD/DAQ/Calibration/ChipGain'):
# conddb.addFolderSplitMC("HGTD","/HGTD/DAQ/Calibration/ChipGain","/HGTD/DAQ/Calibration/ChipGain")
# if not conddb.folderRequested('/HGTD/DAQ/Calibration/ChipNoise'):
# conddb.addFolderSplitMC("HGTD","/HGTD/DAQ/Calibration/ChipNoise","/HGTD/DAQ/Calibration/ChipNoise")
# from AthenaCommon.AppMgr import ServiceMgr
# if not hasattr(ServiceMgr, "InDetHGTD_ReadCalibChipDataSvc"):
# from HGTD_ConditionsServices.HGTD_ConditionsServicesConf import HGTD_ReadCalibChipDataSvc
# InDetHGTD_ReadCalibChipDataSvc = HGTD_ReadCalibChipDataSvc(name = "InDetHGTD_ReadCalibChipDataSvc")
# ServiceMgr += InDetHGTD_ReadCalibChipDataSvc
# DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx
# from AthenaCommon.BeamFlags import jobproperties
# if digitizationFlags.PileUpPremixing:
# kwargs.setdefault("DataCompressionMode", 3)
# elif globalflags.isOverlay() and globalflags.DataSource == 'geant4':
# kwargs.setdefault("DataCompressionMode", 2)
# elif (jobproperties.Beam.bunchSpacing() <= 50):
# kwargs.setdefault("DataCompressionMode", 1)
# else:
# kwargs.setdefault("DataCompressionMode", 3)
# # DataReadOutMode: 0 is condensed mode and 1 is expanded mode
# if globalflags.isOverlay() and globalflags.DataSource == 'geant4':
# kwargs.setdefault("DataReadOutMode", 0)
# else:
# kwargs.setdefault("DataReadOutMode", 1)
from HGTD_Digitization.HGTD_DigitizationConf import HGTD_FrontEnd
return HGTD_FrontEnd(name, **kwargs)
######################################################################################
def commonHGTD_DigitizationConfig(name,**kwargs):
from Digitization.DigitizationFlags import digitizationFlags
# If noise is turned off:
if not digitizationFlags.doInDetNoise.get_Value():
kwargs.setdefault("OnlyHitElements", True)
kwargs.setdefault("InputObjectName", "HGTD_Hits")
kwargs.setdefault("EnableHits", True)
kwargs.setdefault("BarrelOnly", False)
# Set FixedTime for cosmics for use in SurfaceChargesGenerator
from AthenaCommon.BeamFlags import jobproperties
if jobproperties.Beam.beamType == "cosmics" :
kwargs.setdefault("CosmicsRun", True)
kwargs.setdefault("FixedTime", 10)
kwargs.setdefault("RndmSvc", digitizationFlags.rndmSvc() )
streamName = "HGTD_Digitization" # FIXME ideally random stream name would be configurable
if not digitizationFlags.rndmSeedList.checkForExistingSeed(streamName):
digitizationFlags.rndmSeedList.addSeed(streamName, 49261510, 105132394 )
if digitizationFlags.doXingByXingPileUp():
kwargs.setdefault("FirstXing", HGTD_FirstXing())
kwargs.setdefault("LastXing", HGTD_LastXing() )
from AthenaCommon import CfgMgr
return CfgMgr.HGTD_DigitizationTool(name,**kwargs)
######################################################################################
def getHGTD_DigitizationTool(name="HGTD_DigitizationTool", **kwargs):
kwargs.setdefault("OutputObjectName", "HGTD_RDOs")
kwargs.setdefault("OutputSDOName", "HGTD_SDO_Map")
kwargs.setdefault("HardScatterSplittingMode", 0)
return commonHGTD_DigitizationConfig(name,**kwargs)
######################################################################################
def getHGTD_Amp(name="HGTD_Amp", **kwargs):
kwargs.setdefault("CrossFactor2sides", 0.1)
kwargs.setdefault("CrossFactorBack", 0.07)
kwargs.setdefault("PeakTime", 21)
kwargs.setdefault("deltaT", 1.0)
kwargs.setdefault("Tmin", -25.0)
kwargs.setdefault("Tmax", 150.0)
kwargs.setdefault("NbAverage", 0)
from HGTD_Digitization.HGTD_DigitizationConf import HGTD_Amp
return HGTD_Amp(name, **kwargs)
######################################################################################
def getHGTD_FrontEnd(name="HGTD_FrontEnd", **kwargs):
from Digitization.DigitizationFlags import digitizationFlags
#Setup noise treament in HGTD_FrontEnd
# To set the mean noise values for the different module types
# Default values set at 0 degrees, plus/minus ~5 enc per plus/minus degree
# kwargs.setdefault("NoiseBarrel", 1500.0)
# kwargs.setdefault("NoiseBarrel3", 1541.0)
# kwargs.setdefault("NoiseInners", 1090.0)
# kwargs.setdefault("NoiseMiddles", 1557.0)
# kwargs.setdefault("NoiseShortMiddles", 940.0)
# kwargs.setdefault("NoiseOuters", 1618.0)
# kwargs.setdefault("NOBarrel", 1.5e-5)
# kwargs.setdefault("NOBarrel3", 2.1e-5)
# kwargs.setdefault("NOInners", 5.0e-9)
# kwargs.setdefault("NOMiddles", 2.7e-5)
# kwargs.setdefault("NOShortMiddles", 2.0e-9)
# kwargs.setdefault("NOOuters", 3.5e-5)
# # If noise is turned off:
# if not digitizationFlags.doInDetNoise.get_Value():
# ###kwargs.setdefault("OnlyHitElements", True)
# print 'HGTD_Digitization:::: Turned off Noise in HGTD_FrontEnd'
# kwargs.setdefault("NoiseOn", False)
# kwargs.setdefault("AnalogueNoiseOn", False)
# kwargs.setdefault("AddNoiseDiodes", False)
# else:
# kwargs.setdefault("NoiseOn", True)
# kwargs.setdefault("AnalogueNoiseOn", True)
# # In overlay MC, only analogue noise is on. Noise hits are not added.
# from AthenaCommon.GlobalFlags import globalflags
# if globalflags.isOverlay() and globalflags.DataSource == 'geant4':
# kwargs["NoiseOn"] = False
# kwargs["AnalogueNoiseOn"] = True
# # Use Calibration data from Conditions DB, still for testing purposes only
# kwargs.setdefault("UseCalibData", True)
# # Setup the ReadCalibChip folders and Svc
# from IOVDbSvc.CondDB import conddb
# if not conddb.folderRequested('/HGTD/DAQ/Calibration/ChipGain'):
# conddb.addFolderSplitMC("HGTD","/HGTD/DAQ/Calibration/ChipGain","/HGTD/DAQ/Calibration/ChipGain")
# if not conddb.folderRequested('/HGTD/DAQ/Calibration/ChipNoise'):
# conddb.addFolderSplitMC("HGTD","/HGTD/DAQ/Calibration/ChipNoise","/HGTD/DAQ/Calibration/ChipNoise")
# from AthenaCommon.AppMgr import ServiceMgr
# if not hasattr(ServiceMgr, "InDetHGTD_ReadCalibChipDataSvc"):
# from HGTD_ConditionsServices.HGTD_ConditionsServicesConf import HGTD_ReadCalibChipDataSvc
# InDetHGTD_ReadCalibChipDataSvc = HGTD_ReadCalibChipDataSvc(name = "InDetHGTD_ReadCalibChipDataSvc")
# ServiceMgr += InDetHGTD_ReadCalibChipDataSvc
# DataCompressionMode: 1 is level mode x1x (default), 2 is edge mode 01x, 3 is expanded any hit xxx
# from AthenaCommon.BeamFlags import jobproperties
# if digitizationFlags.PileUpPremixing:
# kwargs.setdefault("DataCompressionMode", 3)
# elif globalflags.isOverlay() and globalflags.DataSource == 'geant4':
# kwargs.setdefault("DataCompressionMode", 2)
# elif (jobproperties.Beam.bunchSpacing() <= 50):
# kwargs.setdefault("DataCompressionMode", 1)
# else:
# kwargs.setdefault("DataCompressionMode", 3)
# # DataReadOutMode: 0 is condensed mode and 1 is expanded mode
# if globalflags.isOverlay() and globalflags.DataSource == 'geant4':
# kwargs.setdefault("DataReadOutMode", 0)
# else:
# kwargs.setdefault("DataReadOutMode", 1)
from HGTD_Digitization.HGTD_DigitizationConf import HGTD_FrontEnd
return HGTD_FrontEnd(name, **kwargs)
Loading