2 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 from AthenaConfiguration.Enums
import ProductionStep, BeamType
5 from TileConfiguration.TileConfigFlags
import TileRunType
11 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
12 from AthenaConfiguration.TestDefaults
import defaultTestFiles
13 from AthenaCommon.Logging
import log
17 parser = flags.getArgumentParser(description=
'Run Tile TB digitization.')
18 parser.add_argument(
'--preExec', help=
'Code to execute before locking configs')
19 parser.add_argument(
'--postExec', help=
'Code to execute after setup')
21 parser.add_argument(
'--run-number', default=
None, help=
'Override run number for conditions')
22 parser.add_argument(
'--conditions-tag', default=
None, help=
'Override conditions tag')
23 parser.add_argument(
'--layout', default=
'5B', choices=[
'2B1EB',
'2B2EB',
'3B',
'5B'], help=
'Tile TB layout')
24 parser.add_argument(
'--no-calo-noise', action=
'store_true', help=
'Switch off Calo noise')
25 parser.add_argument(
'--aant-ntuple', action=
'store_true', help=
'Produce output Tile (TB) AANT ntuple (h1000/h2000)')
26 parser.add_argument(
'--hits-ntuple', action=
'store_true', help=
'Produce output ntuple with Tile hits')
27 parser.add_argument(
'--digits-ntuple', action=
'store_true', help=
'Produce output ntuple with Tile digits')
28 parser.add_argument(
'--channels-ntuple', action=
'store_true', help=
'Produce output ntuple with Tile raw channels')
29 parser.add_argument(
'--d3pd', action=
'store_true', help=
'Produce output Tile D3PD file')
30 parser.add_argument(
'--hits-d3pd', action=
'store_true', help=
'Save Tile hits into D3PD')
31 parser.add_argument(
'--hits-info-d3pd', action=
'store_true', help=
'Save Tile hits info into D3PD')
32 parser.add_argument(
'--digits-d3pd', action=
'store_true', help=
'Save Tile digits into D3PD')
33 parser.add_argument(
'--channels-d3pd', action=
'store_true', help=
'Save Tile raw channels into D3PD')
34 parser.add_argument(
'--cells-d3pd', action=
'store_true', help=
'Save Tile cells into D3PD')
35 parser.add_argument(
'--cells-info-d3pd', action=
'store_true', help=
'Save Tile cells into D3PD')
36 parser.add_argument(
'--mbts-d3pd', action=
'store_true', help=
'Save Tile MBTS into D3PD')
37 parser.add_argument(
'--rdo', action=
'store_true', help=
'Produce output Tile RDO file')
38 parser.add_argument(
'--file-prefix', default=
None, help=
'Prefix to be used in names of output files')
39 parser.add_argument(
'--sfr-tag', default=
None, help=
'Override Tile sampling fraction tag')
40 parser.add_argument(
'--testbeam', action=
'store_true', help=
'Digitize Test beam simulation')
41 parser.add_argument(
'--trigger', action=
'store_true', help=
'Simulate Tile trigger output')
42 parser.add_argument(
'--alldigits-rdo', action=
'store_true', help=
'Save all Tile digits into RDO')
44 args, _ = parser.parse_known_args()
46 flags.Input.Files = defaultTestFiles.HITS_RUN3
47 flags.Exec.MaxEvents = 3
49 flags.Tile.RunType = TileRunType.PHY
50 flags.Tile.doFit =
True
51 flags.Tile.doOpt2 =
True
54 flags.Beam.Type = BeamType.TestBeam
55 flags.TestBeam.Layout = f
'tb_Tile2000_2003_{args.layout}'
57 flags.Common.ProductionStep = ProductionStep.Digitization
58 flags.Digitization.PileUp =
False
59 flags.Digitization.DoCaloNoise =
not args.no_calo_noise
62 flags.Input.OverrideRunNumber =
True
63 flags.Input.ConditionsRunNumber = args.run_number
65 if args.conditions_tag:
66 flags.IOVDb.GlobalTag = args.conditions_tag
69 flags.fillFromArgs(parser=parser)
73 filePrefix = args.file_prefix
75 prefix =
'tiletb' if args.testbeam
else 'tile'
76 filePrefix = f
'{prefix}_{flags.Input.RunNumbers[0]}'
79 flags.Output.doWriteRDO =
True
80 outputRDO = f
'{filePrefix}.RDO.pool.root'
81 flags.Output.RDOFileName = outputRDO
84 log.info(
'Executing preExec: %s', args.preExec)
89 log.info(
'Final configuration flags follow:')
93 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
96 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
99 from TileSimAlgs.TileDigitizationConfig
import TileDigitizationCfg
103 from TileSimAlgs.TileDigitizationConfig
import TileTriggerDigitizationCfg
106 if any([args.cells_info_d3pd, args.cells_d3pd, args.mbts_d3pd]):
107 from TileRecUtils.TileCellMakerConfig
import TileCellMakerCfg
109 cfg.getEventAlgo(
'TileCellMaker').CaloCellMakerToolNames[
'TileCellBuilder'].maskBadChannels =
False
112 outputAANtuple = f
'{filePrefix}.aant.root'
114 from TileTBRec.TileTBAANtupleConfig
import TileTBAANtupleCfg
117 from TileRec.TileAANtupleConfig
import TileAANtupleCfg
119 TileL2Cnt=
'TileL2Cnt' if args.trigger
else "",
120 TileMuRcvContainer=
'TileMuRcvCnt' if args.trigger
else "",
121 TileMuRcvDigitsContainer=
'MuRcvDigitsCnt' if args.trigger
else "",
122 TileMuRcvRawChannelContainer=
'MuRcvRawChCnt' if args.trigger
else ""))
125 outputHitsNtuple = f
'{filePrefix}.ntup.root'
126 from TileRec.TileHitVecToNtupleConfig
import TileHitVecToNtupleCfg
129 if args.digits_ntuple:
130 outputHitsNtuple = f
'{filePrefix}.ntup.root'
131 from TileRec.TileDigitsToNtupleConfig
import TileDigitsToNtupleCfg
134 if args.channels_ntuple:
135 outputHitsNtuple = f
'{filePrefix}.ntup.root'
136 from TileRec.TileRawChannelToNtupleConfig
import TileRawChannelToNtupleCfg
140 outputD3PD = f
'{filePrefix}.d3pd.root'
141 from TileSimEx.TileSimD3PDConfig
import TileSimD3PDCfg
143 saveHitsInfo=args.hits_info_d3pd,
144 saveHits=args.hits_d3pd,
145 saveDigits=args.digits_d3pd,
146 saveChannels=args.channels_d3pd,
147 saveCellsInfo=args.cells_info_d3pd,
148 saveCells=args.cells_d3pd,
149 saveMBTS=args.mbts_d3pd))
152 from IOVDbSvc.IOVDbSvcConfig
import addOverride
153 cfg.merge(
addOverride(flags,
'/TILE/OFL02/CALIB/SFR', f
'{args.sfr_tag}'))
156 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
158 if args.alldigits_rdo:
159 outputItemList += [
'TileDigitsContainer#TileDigitsCnt']
160 cfg.merge(
OutputStreamCfg(flags, streamName=
'RDO', ItemList=outputItemList))
163 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
168 log.info(
'Executing postExec: %s', args.postExec)
171 cfg.printConfig(withDetails=
True, summariseProps=
True, printDefaults=
True)
174 with open(
'TileDigiRec.pkl',
'wb')
as f:
178 sys.exit(0
if sc.isSuccess()
else 1)
181 if __name__ ==
"__main__":