ATLAS Offline Software
TileDigiRec.py
Go to the documentation of this file.
1 """
2 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 """
4 from AthenaConfiguration.Enums import ProductionStep, BeamType
5 from TileConfiguration.TileConfigFlags import TileRunType
6 import sys
7 
8 
9 def main():
10 
11  from AthenaConfiguration.AllConfigFlags import initConfigFlags
12  from AthenaConfiguration.TestDefaults import defaultTestFiles
13  from AthenaCommon.Logging import log
14 
15  flags = initConfigFlags()
16 
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')
20 
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')
43 
44  args, _ = parser.parse_known_args()
45 
46  flags.Input.Files = defaultTestFiles.HITS_RUN3
47  flags.Exec.MaxEvents = 3
48 
49  flags.Tile.RunType = TileRunType.PHY
50  flags.Tile.doFit = True
51  flags.Tile.doOpt2 = True
52 
53  if args.testbeam:
54  flags.Beam.Type = BeamType.TestBeam
55  flags.TestBeam.Layout = f'tb_Tile2000_2003_{args.layout}'
56 
57  flags.Common.ProductionStep = ProductionStep.Digitization
58  flags.Digitization.PileUp = False
59  flags.Digitization.DoCaloNoise = not args.no_calo_noise
60 
61  if args.run_number:
62  flags.Input.OverrideRunNumber = True
63  flags.Input.ConditionsRunNumber = args.run_number
64 
65  if args.conditions_tag:
66  flags.IOVDb.GlobalTag = args.conditions_tag
67 
68  # Override default configuration flags from command line arguments
69  flags.fillFromArgs(parser=parser)
70 
71  filePrefix = ""
72  if args.file_prefix:
73  filePrefix = args.file_prefix
74  else:
75  prefix = 'tiletb' if args.testbeam else 'tile'
76  filePrefix = f'{prefix}_{flags.Input.RunNumbers[0]}'
77 
78  if args.rdo:
79  flags.Output.doWriteRDO = True
80  outputRDO = f'{filePrefix}.RDO.pool.root'
81  flags.Output.RDOFileName = outputRDO
82 
83  if args.preExec:
84  log.info('Executing preExec: %s', args.preExec)
85  exec(args.preExec)
86 
87  flags.lock()
88 
89  log.info('Final configuration flags follow:')
90  flags.dump()
91 
92  # Construct our accumulator to run
93  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
94  cfg = MainServicesCfg(flags)
95 
96  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
97  cfg.merge(PoolReadCfg(flags))
98 
99  from TileSimAlgs.TileDigitizationConfig import TileDigitizationCfg
100  cfg.merge(TileDigitizationCfg(flags))
101 
102  if args.trigger:
103  from TileSimAlgs.TileDigitizationConfig import TileTriggerDigitizationCfg
104  cfg.merge(TileTriggerDigitizationCfg(flags))
105 
106  if any([args.cells_info_d3pd, args.cells_d3pd, args.mbts_d3pd]):
107  from TileRecUtils.TileCellMakerConfig import TileCellMakerCfg
108  cfg.merge(TileCellMakerCfg(flags))
109  cfg.getEventAlgo('TileCellMaker').CaloCellMakerToolNames['TileCellBuilder'].maskBadChannels = False
110 
111  if args.aant_ntuple:
112  outputAANtuple = f'{filePrefix}.aant.root'
113  if args.testbeam:
114  from TileTBRec.TileTBAANtupleConfig import TileTBAANtupleCfg
115  cfg.merge(TileTBAANtupleCfg(flags, outputFile=outputAANtuple))
116  else:
117  from TileRec.TileAANtupleConfig import TileAANtupleCfg
118  cfg.merge(TileAANtupleCfg(flags, outputFile=outputAANtuple,
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 ""))
123 
124  if args.hits_ntuple:
125  outputHitsNtuple = f'{filePrefix}.ntup.root'
126  from TileRec.TileHitVecToNtupleConfig import TileHitVecToNtupleCfg
127  cfg.merge(TileHitVecToNtupleCfg(flags, outputFile=outputHitsNtuple))
128 
129  if args.digits_ntuple:
130  outputHitsNtuple = f'{filePrefix}.ntup.root'
131  from TileRec.TileDigitsToNtupleConfig import TileDigitsToNtupleCfg
132  cfg.merge(TileDigitsToNtupleCfg(flags, outputFile=outputHitsNtuple))
133 
134  if args.channels_ntuple:
135  outputHitsNtuple = f'{filePrefix}.ntup.root'
136  from TileRec.TileRawChannelToNtupleConfig import TileRawChannelToNtupleCfg
137  cfg.merge(TileRawChannelToNtupleCfg(flags, outputFile=outputHitsNtuple))
138 
139  if args.d3pd:
140  outputD3PD = f'{filePrefix}.d3pd.root'
141  from TileSimEx.TileSimD3PDConfig import TileSimD3PDCfg
142  cfg.merge(TileSimD3PDCfg(flags, outputFile=outputD3PD,
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))
150 
151  if args.sfr_tag:
152  from IOVDbSvc.IOVDbSvcConfig import addOverride
153  cfg.merge(addOverride(flags, '/TILE/OFL02/CALIB/SFR', f'{args.sfr_tag}'))
154 
155  if args.rdo:
156  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
157  outputItemList = []
158  if args.alldigits_rdo:
159  outputItemList += ['TileDigitsContainer#TileDigitsCnt']
160  cfg.merge(OutputStreamCfg(flags, streamName='RDO', ItemList=outputItemList))
161 
162  # Add in-file MetaData
163  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
164  cfg.merge(SetupMetaDataForStreamCfg(flags, "RDO"))
165 
166  # =======>>> Any last things to do?
167  if args.postExec:
168  log.info('Executing postExec: %s', args.postExec)
169  exec(args.postExec)
170 
171  cfg.printConfig(withDetails=True, summariseProps=True, printDefaults=True)
172 
173  if args.config_only:
174  with open('TileDigiRec.pkl', 'wb') as f:
175  cfg.store(f)
176  else:
177  sc = cfg.run()
178  sys.exit(0 if sc.isSuccess() else 1)
179 
180 
181 if __name__ == "__main__":
182  main()
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=None, MetadataItemList=None, disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=None, HelperTools=None)
Definition: OutputStreamConfig.py:13
TileAANtupleConfig.TileAANtupleCfg
def TileAANtupleCfg(flags, outputFile='', saveTMDB=True, **kwargs)
Definition: TileAANtupleConfig.py:15
TileDigitizationConfig.TileTriggerDigitizationCfg
def TileTriggerDigitizationCfg(flags)
Definition: TileDigitizationConfig.py:11
TileCellMakerConfig.TileCellMakerCfg
def TileCellMakerCfg(flags, mergeChannels=True, **kwargs)
Definition: TileCellMakerConfig.py:33
TileTBAANtupleConfig.TileTBAANtupleCfg
def TileTBAANtupleCfg(flags, outputFile='', useFELIX=None, **kwargs)
Definition: TileTBAANtupleConfig.py:33
TileDigitsToNtupleConfig.TileDigitsToNtupleCfg
def TileDigitsToNtupleCfg(flags, outputFile=None, **kwargs)
Definition: TileDigitsToNtupleConfig.py:16
LArG4FSStartPointFilter.exec
exec
Definition: LArG4FSStartPointFilter.py:103
TileSimD3PDConfig.TileSimD3PDCfg
def TileSimD3PDCfg(flags, outputFile=None, saveHitsInfo=True, saveHits=True, saveDigits=None, saveChannels=None, saveCellsInfo=None, saveCells=None, saveMBTS=None)
Definition: TileSimD3PDConfig.py:13
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:310
TileHitVecToNtupleConfig.TileHitVecToNtupleCfg
def TileHitVecToNtupleCfg(flags, outputFile=None, **kwargs)
Definition: TileHitVecToNtupleConfig.py:15
TileDigitizationConfig.TileDigitizationCfg
def TileDigitizationCfg(flags)
Definition: TileDigitizationConfig.py:50
python.IOVDbSvcConfig.addOverride
def addOverride(flags, folder, tag, tagType="tag", db=None)
Definition: IOVDbSvcConfig.py:238
TileDigiRec.main
def main()
Definition: TileDigiRec.py:9
Trk::open
@ open
Definition: BinningType.h:40
TileRawChannelToNtupleConfig.TileRawChannelToNtupleCfg
def TileRawChannelToNtupleCfg(flags, outputFile=None, **kwargs)
Definition: TileRawChannelToNtupleConfig.py:16
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:71