Skip to content
Snippets Groups Projects

Progress towards a working ZDC CA configuration (both calibration and reco)

Merged Peter Alan Steinberg requested to merge steinber/athena:23.0-zdc-catrf into 23.0
Files
2
@@ -3,28 +3,116 @@
#
from AthenaConfiguration.ComponentFactory import CompFactory
from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
from AthenaConfiguration.Enums import Format
#from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
def ZdcRecCfg(flags, DoCalib=False, DoTimeCalib=False, DoTrigEff=False):
"""Configure Zdc analysis alg
Additional arguments are useful in calibration runs
"""
#TODO a better way to find data taking period (not by looking at Geo tag)
if int(flags.Input.ProjectName.strip("data").split("_")[0]) < 20:
return ZdcRecRun2Cfg(flags, DoCalib=DoCalib, DoTimeCalib=DoTimeCalib, DoTrigEff=DoTrigEff)
def ZdcRecRun2Cfg(flags, DoCalib=False, DoTimeCalib=False, DoTrigEff=False):
def ZdcRecOutputCfg(flags):
from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
acc = ComponentAccumulator()
ZDC_ItemList=[]
if flags.Input.Format is Format.BS:
ZDC_ItemList.append("xAOD::ZdcModuleContainer#ZdcModules")
ZDC_ItemList.append("xAOD::ZdcModuleAuxContainer#ZdcModulesAux.")
from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
acc.merge(ForDetGeometryCfg(flags))
if flags.Output.doWriteESD:
acc.merge(OutputStreamCfg(flags, "ESD", ZDC_ItemList))
if flags.Output.doWriteAOD:
acc.merge(OutputStreamCfg(flags, "AOD", ZDC_ItemList))
return acc
def PrivateToolCfg(flags, run, config="PbPb2015", DoCalib=False, DoTimeCalib=False, DoTrigEff=False):
acc = ComponentAccumulator()
acc.setPrivateTools(CompFactory.ZDC.ZdcAnalysisTool(
Configuration = config,
DoCalib = DoCalib,
DoTimeCalib = DoTimeCalib,
DoTrigEff = DoTrigEff,
LHCRun = run ))
return acc
def ZdcRecRun2Cfg(flags):
acc = ComponentAccumulator()
config = None
DoCalib = False
DoTimeCalib = False
DoTrigEff = False
if flags.Input.ProjectName == "data15_hi":
config = "PbPb2015"
DoCalib = True
DoTimeCalib = True
DoTrigEff = True
if flags.Input.ProjectName == "data16_hip":
config = "pPb2016"
DoCalib = True
DoTimeCalib = False
DoTrigEff = False
if flags.Input.ProjectName == "data18_hi":
config = "PbPb2018"
DoCalib = True
DoTimeCalib = False
DoTrigEff = False
#from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
#acc.merge(ForDetGeometryCfg(flags))
acc.merge(ByteStreamReadCfg(flags, type_names=['xAOD::TriggerTowerContainer/ZdcTriggerTowers',
'xAOD::TriggerTowerAuxContainer/ZdcTriggerTowersAux.']))
acc.addEventAlgo(CompFactory.ZdcByteStreamRawDataV2())
anaTool = acc.popToolsAndMerge(PrivateToolCfg(flags,2,config,DoCalib,DoTimeCalib,DoTrigEff))
acc.addEventAlgo(CompFactory.ZdcRecV3("ZdcRecV3",ZdcAnalysisTool=anaTool))
return acc
def ZdcRecRun3Cfg(flags):
acc = ComponentAccumulator()
config = None
DoCalib = False
DoTimeCalib = False
DoTrigEff = False
if flags.Input.ProjectName == "data22_13p6TeV":
config = "LHCf2022"
if flags.Input.ProjectName == "data23_hi":
config = "PbPb20223"
# TODO drop or include in ZdcRec config, up to experts
# channelTool = CompFactory.ZdcRecChannelToolLucrod()
#from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
#acc.merge(ForDetGeometryCfg(flags))
acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
anaTool = acc.popToolsAndMerge(PrivateToolCfg(flags,3,config,DoCalib,DoTimeCalib,DoTrigEff))
acc.addEventAlgo(CompFactory.ZdcRecRun3("ZdcRecRun3",ZdcAnalysisTool=anaTool))
alg = CompFactory.ZdcRec()
acc.addEventAlgo(alg)
acc.merge(addToAOD(flags, ['ZdcRawChannelCollection#ZdcRawChannelCollection']))
return acc
def ZdcRecCfg(flags):
"""Configure Zdc analysis alg
Additional arguments are useful in calibration runs
"""
acc = ComponentAccumulator()
#TODO a better way to find data taking period (not by looking at Geo tag)
if flags.Input.Format is Format.BS:
year = int(flags.Input.ProjectName.strip("data").split("_")[0])
if (year < 20):
acc.merge(ZdcRecRun2Cfg(flags))
if (year > 20 and year < 26):
acc.merge(ZdcRecRun3Cfg(flags))
if flags.Output.doWriteESD or flags.Output.doWriteAOD:
acc.merge(ZdcRecOutputCfg(flags))
return acc
@@ -35,9 +123,7 @@ if __name__ == '__main__':
flags = initConfigFlags()
# if these are promoted to globally available flags should be removed from here
flags.addFlag("DoCalib", False)
flags.addFlag("DoTimeCalib", False)
flags.addFlag("DoTrigEff", False)
flags.Detector.GeometryZDC=True
flags.Detector.GeometryAFP=False
flags.Detector.GeometryALFA=False
@@ -56,16 +142,17 @@ if __name__ == '__main__':
acc=MainServicesCfg(flags)
# if need to read BS file
from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg
acc.merge(ByteStreamReadCfg(flags))
from TriggerJobOpts.TriggerRecoConfig import TriggerRecoCfgData
acc.merge(TriggerRecoCfgData(flags))
acc.merge(ZdcRecCfg(flags,
DoCalib=flags.DoCalib,
DoTimeCalib=flags.DoTimeCalib,
DoTrigEff=flags.DoTrigEff))
from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
acc.merge(ForDetGeometryCfg(flags))
acc.merge(ZdcRecCfg(flags))
# example on how to enable logging for decoder
# print(help(acc.getService("MessageSvc")))
@@ -79,3 +166,4 @@ if __name__ == '__main__':
if status.isFailure():
import sys
sys.exit(-1)
Loading