ATLAS Offline Software
Loading...
Searching...
No Matches
TileAANtupleConfig.py
Go to the documentation of this file.
2# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3#
4
5
6from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7from AthenaConfiguration.ComponentFactory import CompFactory
8from AthenaConfiguration.Enums import Format
9from TileConfiguration.TileConfigFlags import TileRunType
10
11'''
12@file TileAANtupleConfig.py
13@brief Python configuration of TileAANtuple algorithm for the Run III
14'''
15def TileAANtupleCfg(flags, outputFile='', saveTMDB=True, **kwargs):
16 ''' Function to configure TileAANtuple algorithm.'''
17
18
19 cisRun = flags.Tile.RunType is TileRunType.CIS
20 laserRun = flags.Tile.RunType is TileRunType.LAS
21 pedestalRun = flags.Tile.RunType is TileRunType.PED
22 physicsRun = flags.Tile.RunType is TileRunType.PHY
23
24 readDigits = flags.Tile.readDigits
25
26 kwargs.setdefault('UseDspUnits', False)
27 useDspUnits = kwargs['UseDspUnits']
28
29 offlineUnits = 3 # MeV (default)
30 if useDspUnits:
31 offlineUnits = -1
32 elif cisRun:
33 offlineUnits = 0 # ADC
34 elif not (pedestalRun or physicsRun):
35 offlineUnits = 1 # pCb
36
37 kwargs.setdefault('TileDigitsContainer', 'TileDigitsCnt' if readDigits else "")
38 kwargs.setdefault('TileDigitsContainerFlt', 'TileDigitsFlt' if not readDigits else "")
39 kwargs.setdefault('TileRawChannelContainer', flags.Tile.RawChannelContainer)
40 kwargs.setdefault('TileRawChannelContainerFit', 'TileRawChannelFit' if flags.Tile.doFit else "")
41 kwargs.setdefault('TileRawChannelContainerFitCool', 'TileRawChannelFitCool' if flags.Tile.doFitCOOL else "")
42 kwargs.setdefault('TileRawChannelContainerOpt', "")
43 kwargs.setdefault('TileRawChannelContainerQIE', 'TileRawChannelQIE' if flags.Tile.doQIE else "")
44 kwargs.setdefault('TileRawChannelContainerOF1', 'TileRawChannelOF1' if flags.Tile.doOF1 else "")
45 kwargs.setdefault('TileRawChannelContainerMF', 'TileRawChannelMF' if flags.Tile.doMF else "")
46 kwargs.setdefault('TileRawChannelContainerWiener', "")
47 kwargs.setdefault('TileRawChannelContainerDsp', "")
48 kwargs.setdefault('TileLaserObject', 'TileLaserObj' if laserRun else "")
49 kwargs.setdefault('TileBeamElemContainer', 'TileBeamElemCnt' if not physicsRun else "")
50
51 kwargs.setdefault('TileMuRcvRawChannelContainer', 'MuRcvRawChCnt' if saveTMDB else "")
52 kwargs.setdefault('TileMuRcvDigitsContainer', 'MuRcvDigitsCnt' if saveTMDB else "")
53 kwargs.setdefault('TileMuRcvContainer', "TileMuRcvCnt" if saveTMDB else "")
54
55 kwargs.setdefault('CheckDCS', flags.Tile.useDCS)
56 kwargs.setdefault('BSInput', flags.Input.Format is Format.BS and not physicsRun)
57 kwargs.setdefault('CalibMode', pedestalRun or cisRun)
58 kwargs.setdefault('CalibrateEnergy', flags.Input.isMC or useDspUnits or not cisRun)
59 kwargs.setdefault('OfflineUnits', offlineUnits)
60
61 acc = ComponentAccumulator()
62
63 from TileGeoModel.TileGMConfig import TileGMCfg
64 acc.merge(TileGMCfg(flags))
65
66 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
67 acc.merge(LArGMCfg(flags))
68
69 from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
70 acc.merge( TileCablingSvcCfg(flags) )
71
72 if 'TileBadChanTool' not in kwargs:
73 from TileConditions.TileBadChannelsConfig import TileBadChannelsCondAlgCfg
74 acc.merge( TileBadChannelsCondAlgCfg(flags) )
75
76 if 'TileCondToolEmscale' not in kwargs:
77 from TileConditions.TileEMScaleConfig import TileCondToolEmscaleCfg
78 emScaleTool = acc.popToolsAndMerge( TileCondToolEmscaleCfg(flags) )
79 kwargs['TileCondToolEmscale'] = emScaleTool
80
81 if kwargs['CheckDCS']:
82 from TileConditions.TileDCSConfig import TileDCSCondAlgCfg
83 acc.merge( TileDCSCondAlgCfg(flags) )
84
85 from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg
86 acc.merge( TileDQstatusAlgCfg(flags) )
87
88 if not outputFile:
89 run = str(flags.Input.RunNumbers[0])
90 outputFile = 'tile_{}.aan.root'.format(run)
91 histsvc = CompFactory.THistSvc()
92 histsvc.Output += ["%s DATAFILE='%s' OPT='RECREATE'" % ('AANT', outputFile)]
93 acc.addService(histsvc)
94
95 TileAANtuple = CompFactory.TileAANtuple
96 acc.addEventAlgo(TileAANtuple('TileNtuple', **kwargs), primary = True)
97
98 return acc
99
100
101if __name__=='__main__':
102
103 # Set the Athena configuration flags
104 from AthenaConfiguration.AllConfigFlags import initConfigFlags
105 flags = initConfigFlags()
106 parser = flags.getArgumentParser()
107 parser.add_argument('--postExec', help='Code to execute after setup')
108 parser.add_argument('--no-tmdb', dest='tmdb', action='store_false', help='Do not save TMDB information into ntuple')
109 args, _ = parser.parse_known_args()
110
111 # Setup logs
112 from AthenaCommon.Logging import log
113 from AthenaCommon.Constants import INFO
114 log.setLevel(INFO)
115
116 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
117 flags.Input.Files = defaultTestFiles.RAW_RUN2
118 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
119 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
120 flags.Exec.MaxEvents = 3
121 flags.fillFromArgs(parser=parser)
122
123 log.info('FINAL CONFIG FLAGS SETTINGS FOLLOW')
124 flags.dump()
125
126 flags.lock()
127
128 # Initialize configuration object, add accumulator, merge, and run.
129 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
130 cfg = MainServicesCfg(flags)
131
132 rawChannelContainer = 'TileRawChannelCnt'
133
134 if flags.Input.Format is Format.BS:
135 from TileByteStream.TileByteStreamConfig import TileRawDataReadingCfg
136 cfg.merge( TileRawDataReadingCfg(flags,
137 readMuRcv=args.tmdb,
138 readMuRcvDigits=args.tmdb,
139 readMuRcvRawCh=args.tmdb) )
140
141 else:
142 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
143 cfg.merge(PoolReadCfg(flags))
144
145 inputCollections = flags.Input.Collections
146 if rawChannelContainer not in inputCollections:
147 rawChannelContainer = 'TileRawChannelFlt' if 'TileRawChannelFlt' in inputCollections else ""
148
149 cfg.merge( TileAANtupleCfg(flags, TileRawChannelContainer=rawChannelContainer, saveTMDB = args.tmdb) )
150
151 # Any last things to do?
152 if args.postExec:
153 log.info('Executing postExec: %s', args.postExec)
154 exec(args.postExec)
155
156 cfg.printConfig(withDetails = True, summariseProps = True)
157
158 cfg.store( open('TileAANtuple.pkl','wb') )
159
160 sc = cfg.run()
161
162 import sys
163 # Success should be 0
164 sys.exit(0 if sc.isSuccess() else 1)
class to produce TileCal commissioning ntuples
TileAANtupleCfg(flags, outputFile='', saveTMDB=True, **kwargs)