ATLAS Offline Software
Loading...
Searching...
No Matches
AllConfigFlags.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaCommon.SystemOfUnits import GeV, TeV
4from AthenaConfiguration.AthConfigFlags import AthConfigFlags, isGaudiEnv
5from AthenaConfiguration.AutoConfigFlags import GetFileMD, getInitialTimeStampsFromRunNumbers, getRunToTimestampDict, getSpecialConfigurationMetadata, getGeneratorsInfo
6from AthenaConfiguration.Enums import BeamType, Format, ProductionStep, BunchStructureSource, Project
7from Campaigns.Utils import Campaign
8from PyUtils.moduleExists import moduleExists
9
10
11def _addFlagsCategory (acf, name, generator, modName = None):
12 """Add flags category and return True/False on success/failure"""
13 if moduleExists (modName):
14 acf.addFlagsCategory (name, generator)
15 return True
16 return False
17
18
20
21 acf=AthConfigFlags()
22
23 #Flags steering the job execution:
24 from AthenaCommon.Constants import INFO
25 acf.addFlag('Exec.OutputLevel', INFO, help='Global OutputLevel')
26 acf.addFlag('Exec.QuietMode', True, help='Suppress excess output for grid running')
27 acf.addFlag('Exec.PrintAlgsSequence', False, help='print algorithm sequence in ApplicationMgr')
28 acf.addFlag('Exec.MaxEvents', -1, type=int, help='number of events to proceess (-1 for all)')
29 acf.addFlag('Exec.SkipEvents', 0, type=int, help='number of events to skip')
30 acf.addFlag('Exec.FirstEvent', 1, type=int, help='first event number when not reading from input file')
31 acf.addFlag('Exec.DebugStage', '', help='attach debugger at stage: conf, init, exec, fini')
32 acf.addFlag('Exec.Interactive', "", help='interactive prompt at stage: init, exec')
33 acf.addFlag('Exec.FPE', 0, help='FPE check mode: -2 (no FPE check), -1 (abort with core-dump), 0 (FPE Auditor w/o stack-tace) , >0 (number of stack-traces printed by the job)')
34 acf.addFlag('Exec.EventTimeOut', 0, help='per-event timeout (in ns) after which the job is aborted (0 means no timeout)')
35 acf.addFlag('Exec.EventPrintoutInterval', 1, help='interval of event heartbeat printouts from the loop manager')
36 acf.addFlag('Exec.StopOnSignal', [], help='List of signal names that can be used to stop the job gracefully. See SignalMonitorSvc in GaudiUtils.' )
37
38 #Custom messaging for components, see Utils.setupLoggingLevels
39 acf.addFlag('Exec.VerboseMessageComponents', [], help='verbose output for listed components (wildcards)')
40 acf.addFlag('Exec.DebugMessageComponents', [], help='debug output for listed components (wildcards)')
41 acf.addFlag('Exec.InfoMessageComponents', [], help='info output for listed components (wildcards)')
42 acf.addFlag('Exec.WarningMessageComponents', [], help='warning output for listed components (wildcards)')
43 acf.addFlag('Exec.ErrorMessageComponents', [], help='error output for listed components (wildcards)')
44
45 #Multi-threaded event service mode
46 acf.addFlag('Exec.MTEventService', False, help='use multi-threaded event service')
47 acf.addFlag('Exec.MTEventServiceChannel', 'EventService_EventRanges', help='name of YAMPL communication channel between AthenaMT and pilot')
48
49 #Multi-node with MPI
50 acf.addFlag('Exec.MPI', False, help='run in MPI mode')
51
52 #Activate per-event log-output of StoreGate content
53 acf.addFlag('Debug.DumpEvtStore', False, help='dump event store on each event')
54 acf.addFlag('Debug.DumpDetStore', False, help='dump detector store on each event')
55 acf.addFlag('Debug.DumpCondStore', False, help='dump conditions store on each event')
56
57 #Activate NameAuditor
58 acf.addFlag('Debug.NameAuditor',False,help='Activate NameAuditor')
59
60 acf.addFlag('ExecutorSplitting.TotalSteps', 0, help='number of steps for pileup overlay')
61 acf.addFlag('ExecutorSplitting.Step', -1, help='step number of current pileup overlay job')
62 acf.addFlag('ExecutorSplitting.TotalEvents', -1, help='events per pileup overlay step')
63
64 #Flags describing the input data
65 acf.addFlag('Input.Files', ["_ATHENA_GENERIC_INPUTFILE_NAME_",], help='input files')
66 acf.addFlag("Input.FileNentries", -1, help='actual number of events in file (filled from runArgs')
67 acf.addFlag('Input.SecondaryFiles', [], help='secondary input files for DoubleEventSelector')
68 acf.addFlag('Input.isMC', lambda prevFlags : "IS_SIMULATION" in GetFileMD(prevFlags.Input.Files).get("eventTypes", []), help='Monte Carlo input')
69 acf.addFlag('Input.OverrideRunNumber', False, help='override run number' )
70 acf.addFlag("Input.ConditionsRunNumber", -1, help='override HITS file run number with one from a data') # TODO merge with Input.RunNumbers
71 acf.addFlag('Input.RunNumbers', lambda prevFlags : list(GetFileMD(prevFlags.Input.Files).get("runNumbers", [])), type=list, help='run numbers of input files')
72 acf.addFlag('Input.MCChannelNumber', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("mc_channel_number", 0), help='Monte Carlo channel number')
73 acf.addFlag('Input.LumiBlockNumbers', lambda prevFlags : list(GetFileMD(prevFlags.Input.Files).get("lumiBlockNumbers", [])), type=list, help='lumi block numbers of input files')
74 acf.addFlag('Input.TimeStamps', lambda prevFlags : getInitialTimeStampsFromRunNumbers(prevFlags.Input.RunNumbers) if prevFlags.Input.OverrideRunNumber else [], type=list, help='timestamps of inputs files')
75 # Configure EvtIdModifierSvc with a list of dictionaries of the form:
76 # {'run': 152166, 'lb': 202, 'starttstamp': 1269948352889940910, 'evts': 1, 'mu': 0.005}
77 acf.addFlag("Input.RunAndLumiOverrideList", [], help='list of dictionaries to configure EvtIdModifierSvc')
78 # Job number
79 acf.addFlag("Input.JobNumber", 1, help='job number for pileup overlay')
80 acf.addFlag('Input.FailOnUnknownCollections', False, help='fail on unknown collections in input load')
81
82 def _dataYearFromFlags(prevFlags):
83 dataYear = GetFileMD(prevFlags.Input.Files).get("data_year", "")
84 if dataYear:
85 return int(dataYear)
86 if prevFlags.Input.ProjectName.startswith("data"):
87 if prevFlags.Input.ProjectName[4:6].isdigit():
88 return 2000 + int(prevFlags.Input.ProjectName[4:6])
89 return 0
90
91 def _keywordsFromFlags(prevFlags):
92 keywords_string = GetFileMD(prevFlags.Input.Files).get("keywords", "")
93 return [keyword.strip() for keyword in keywords_string.split(',') if keyword.strip()]
94
95 acf.addFlag('Input.ProjectName', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("project_name", ""), help='project name')
96 acf.addFlag('Input.DataYear', _dataYearFromFlags, help='year of input data')
97 acf.addFlag('Input.MCCampaign', lambda prevFlags : Campaign(GetFileMD(prevFlags.Input.Files).get("mc_campaign", "")), type=Campaign, help='Monte Carlo campaign')
98 acf.addFlag('Input.TriggerStream', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("stream", "") if prevFlags.Input.Format == Format.BS
99 else GetFileMD(prevFlags.Input.Files).get("triggerStreamOfFile", ""), help='trigger stream name')
100 acf.addFlag('Input.Format', lambda prevFlags : Format.BS if GetFileMD(prevFlags.Input.Files).get("file_type", "BS") == "BS" else Format.POOL, type=Format, help='input format type')
101 acf.addFlag('Input.ProcessingTags', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("processingTags", []), help='list of stream names in this file')
102 acf.addFlag('Input.GeneratorsInfo', lambda prevFlags : getGeneratorsInfo(prevFlags), help='generator version')
103 acf.addFlag('Input.Keywords', _keywordsFromFlags, type=list, help='evtgen keywords')
104 acf.addFlag('Input.SpecialConfiguration', lambda prevFlags : getSpecialConfigurationMetadata(prevFlags), help='special configuration options read from input file metadata')
105
106 def _inputCollections(inputFile):
107 rawCollections = [type_key[1] for type_key in GetFileMD(inputFile).get("itemList", [])]
108 collections = [col for col in rawCollections if not col.endswith('Aux.')]
109 return collections
110
111 def _typedInputCollections(inputFile):
112 collections = ['%s#%s' % type_key for type_key in GetFileMD(inputFile).get("itemList", [])]
113 return collections
114
115 acf.addFlag('Input.Collections', lambda prevFlags : _inputCollections(prevFlags.Input.Files), help='input collections')
116 acf.addFlag('Input.SecondaryCollections', lambda prevFlags : _inputCollections(prevFlags.Input.SecondaryFiles), help='secondary input collections for overlay')
117 acf.addFlag('Input.TypedCollections', lambda prevFlags : _typedInputCollections(prevFlags.Input.Files), help='input collections key#type')
118 acf.addFlag('Input.SecondaryTypedCollections', lambda prevFlags : _typedInputCollections(prevFlags.Input.SecondaryFiles), help='secondary input collections key#type')
119
120 def _metadataItems(inputFile):
121 return GetFileMD(inputFile).get("metadata_items", {})
122
123 acf.addFlag('Input.MetadataItems', lambda prevFlags : _metadataItems(prevFlags.Input.Files), help='metadata items in input' )
124 acf.addFlag('Input.Release', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("AtlasRelease", ""), help='release of input file')
125 acf.addFlag('Input.AODFixesDone', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("AODFixVersion", ""), help='set of already applied AODFixes')
126
127 acf.addFlag('Concurrency.NumProcs', 0, help='number of concurrent processes')
128 acf.addFlag('Concurrency.NumThreads', 0, help='number of threads' )
129 acf.addFlag('Concurrency.NumConcurrentEvents', lambda prevFlags : prevFlags.Concurrency.NumThreads, help='number of concurrent events')
130 acf.addFlag('Concurrency.DebugWorkers', False, help='stops the worker in bootstrap until SIGUSR1 is received')
131 acf.addFlag('Concurrency.NumOffloadThreads', 0, help='maximum number of extra threads to use for CPU portion of asynchronous algorithms')
132
133 acf.addFlag('Scheduler.CheckDependencies', True, help='runtime check of algorithm input dependencies')
134 acf.addFlag('Scheduler.CheckOutputUsage', False, help='runtime check of algorithm output usage')
135 acf.addFlag('Scheduler.ShowDataDeps', False, help='show data dependencies')
136 acf.addFlag('Scheduler.ShowDataFlow', False, help='show data flow')
137 acf.addFlag('Scheduler.ShowControlFlow', False, help='show data flow')
138 acf.addFlag('Scheduler.EnableVerboseViews', True, help='enable verbose view output')
139 acf.addFlag('Scheduler.AutoLoadUnmetDependencies', True, help='auto-load unmet data dependencies')
140 acf.addFlag('Scheduler.DataDepsGraphFile', '', help='file name containing the data dependency graph [.dot or .md]')
141 acf.addFlag('Scheduler.DataDepsGraphAlgPattern', '.*', help='regex pattern for selecting algorithms to be drawn in the data dependency graph')
142 acf.addFlag('Scheduler.DataDepsGraphObjectPattern', '.*', help='regex pattern for selecting I/O to be drawn in the data dependency graph')
143
144 acf.addFlag('MP.WorkerTopDir', 'athenaMP_workers', help='work directory for MP workers')
145 acf.addFlag('MP.OutputReportFile', 'AthenaMPOutputs', help='name of MP report file')
146 acf.addFlag('MP.Strategy', 'SharedQueue', help='event assignment strategy')
147 acf.addFlag('MP.CollectSubprocessLogs', False, help='collects log of sub-processes')
148 acf.addFlag('MP.PollingInterval', 100, help='time interval in milliseconds between subsequent polling of subproceses')
149 acf.addFlag('MP.EventsBeforeFork', 0, help='number of events to process before forking')
150 acf.addFlag('MP.EventRangeChannel', 'EventService_EventRanges', help='channel name for communicating event ranges with the pilot')
151 acf.addFlag('MP.EvtRangeScattererCaching', False, help='activate extra event caching by the EvtRangeScatterer')
152 acf.addFlag('MP.MemSamplingInterval', 0, help='time interval in seconds between taking memory samples')
153 acf.addFlag('MP.ChunkSize', -1, help='size of event chunks in shared queue (-1: auto_flush for LZMA-compressed files, -2: auto_flush for LZMA or ZLIB, -3: auto_flush for LZMA, ZLIB or LZ4, -4: auto_flush)')
154 acf.addFlag('MP.ReadEventOrders', False, help='read event order from ASCII file for reproducibility')
155 acf.addFlag('MP.EventOrdersFile', 'athenamp_eventorders.txt', help='file name for event order')
156 acf.addFlag('MP.UseSharedReader', False, help='use shared reader')
157 acf.addFlag('MP.UseSharedWriter', False, help='use shared writer')
158 acf.addFlag('MP.UseParallelCompression', True, help='enable event compression in workers')
159 acf.addFlag('MP.SharedWriter.FileFlushSetting', {},
160 help="how frequently (in number of events) SW will flush the output, e.g., {'DAOD_PHYS.pool.root':500}. If empty, AutoFlush is used. Only applies when parallel compression is enabled.")
161
162 acf.addFlag('Common.MsgSuppression', True, help='enable log message suppression')
163 acf.addFlag('Common.MsgSourceLength', 50, help='length of the source-field in the log message format')
164 acf.addFlag('Common.ShowMsgStats', False ,help='print message statistics at the end of the job')
165
166 acf.addFlag('Common.isOnline', False, help='job runs in an online environment')
167 acf.addFlag('Common.useOnlineLumi', lambda prevFlags : prevFlags.Common.isOnline, help='use online version of luminosity')
168 acf.addFlag('Common.isOverlay', lambda prevFlags: prevFlags.Common.ProductionStep == ProductionStep.Overlay,
169 help='enable overlay')
170 acf.addFlag('Common.doExpressProcessing', False, help='do express stream processing')
171 acf.addFlag('Common.ProductionStep', ProductionStep.Default, type=ProductionStep, help='production step')
172 acf.addFlag('Common.Project', Project.determine(), type=Project, help='current athena software project')
173
174 # replace global.Beam*
175 acf.addFlag('Beam.BunchSpacing', 25, help='bunch spacing in nanoseconds')
176 acf.addFlag('Beam.Type', lambda prevFlags : BeamType(GetFileMD(prevFlags.Input.Files).get('beam_type', 'collisions')), type=BeamType, help='beam type')
177 acf.addFlag("Beam.NumberOfCollisions", lambda prevFlags : 2. if prevFlags.Beam.Type is BeamType.Collisions else 0., help='number of pileup collisions')
178
179 def _configureBeamEnergy(prevFlags):
180 metadata = GetFileMD(prevFlags.Input.Files)
181 default = 6.8 * TeV
182 # pool files
183 if prevFlags.Input.Format == Format.POOL:
184 return float(metadata.get("beam_energy", default))
185 # BS files
186 elif prevFlags.Input.Format == Format.BS:
187 if metadata.get("eventTypes", [""])[0] == "IS_DATA":
188 # special option for online running
189 if prevFlags.Common.isOnline:
190 from PyUtils.OnlineISConfig import GetRunType
191
192 return float(GetRunType()[1] or default)
193
194 # configure Beam energy depending on beam type:
195 if prevFlags.Beam.Type.value == "cosmics":
196 return 0.0
197 elif prevFlags.Beam.Type.value == "singlebeam":
198 return 450.0 * GeV
199 elif prevFlags.Beam.Type.value == "collisions":
200 projectName = prevFlags.Input.ProjectName
201 beamEnergy = None
202
203 if "GeV" in projectName:
204 beamEnergy = (
205 float(
206 (str(projectName).split("_")[1]).replace("GeV", "", 1)
207 )
208 / 2
209 * GeV
210 )
211 elif "TeV" in projectName:
212 if "hip5TeV" in projectName:
213 # Approximate 'beam energy' here as sqrt(sNN)/2.
214 beamEnergy = 1.577 * TeV
215 elif "hip8TeV" in projectName:
216 # Approximate 'beam energy' here as sqrt(sNN)/2.
217 beamEnergy = 2.51 * TeV
218 else:
219 beamEnergy = (
220 float(
221 (str(projectName).split("_")[1])
222 .replace("TeV", "", 1)
223 .replace("p", ".")
224 )
225 / 2
226 * TeV
227 )
228 if "5TeV" in projectName:
229 # these are actually sqrt(s) = 5.02 TeV
230 beamEnergy = 2.51 * TeV
231 elif projectName.endswith("_hi") or projectName.endswith("_hip"):
232 if projectName in ("data10_hi", "data11_hi"):
233 beamEnergy = 1.38 * TeV # 1.38 TeV (=3.5 TeV * (Z=82/A=208))
234 elif projectName == "data12_hi":
235 beamEnergy = 1.577 * TeV # 1.577 TeV (=4 TeV * (Z=82/A=208))
236 elif projectName in ("data12_hip", "data13_hip"):
237 # Pb (p) Beam energy in p-Pb collisions in 2012/3 was 1.577 (4) TeV.
238 # Approximate 'beam energy' here as sqrt(sNN)/2.
239 beamEnergy = 2.51 * TeV
240 elif projectName in ("data15_hi", "data18_hi"):
241 beamEnergy = 2.51 * TeV # 2.51 TeV (=6.37 TeV * (Z=82/A=208)) - lowered to 6.37 to match s_NN = 5.02 in Pb-p runs.
242 elif projectName == "data17_hi":
243 beamEnergy = 2.721 * TeV # 2.72 TeV for Xe-Xe (=6.5 TeV * (Z=54/A=129))
244 return beamEnergy or default
245 elif metadata.get("eventTypes", [""])[0] == "IS_SIMULATION":
246 return float(metadata.get("beam_energy", default))
247 return default
248
249
250 acf.addFlag('Beam.Energy', lambda prevFlags : _configureBeamEnergy(prevFlags), help='beam energy in MeV')
251 acf.addFlag('Beam.estimatedLuminosity', lambda prevFlags : ( 1E33*(prevFlags.Beam.NumberOfCollisions)/2.3 ) *\
252 (25./prevFlags.Beam.BunchSpacing), help='luminosity estimated from pileup')
253 acf.addFlag('Beam.BunchStructureSource', lambda prevFlags: BunchStructureSource.MC if prevFlags.Input.isMC else BunchStructureSource.TrigConf, help='source of bunch structure')
254
255 acf.addFlag('Beam.vdMScan.ConfigFile', 'LRAPositioner.root', help='vdM Scan Sim/Reco/BSFit Configuration File')
256 acf.addFlag('Beam.vdMScan.PV.PDF', 'Default', help='vdM Scan Sim/BSFit PV PDF Histogram')
257
258 # output
259 acf.addFlag('Output.BSFileName', '', help='BS output file name')
260 acf.addFlag('Output.EVNTFileName', '', help='EVNT output file name')
261 acf.addFlag('Output.EVNT_TRFileName', '', help='EVNT_TR output file name')
262 acf.addFlag('Output.HITSFileName', '', help='HITS output file name')
263 acf.addFlag('Output.RDOFileName', '', help='RDO output file name')
264 acf.addFlag('Output.RDO_SGNLFileName', '', help='RDO_SGNL output file name')
265 acf.addFlag('Output.ESDFileName', '', help='ESD output file name')
266 acf.addFlag('Output.AODFileName', '', help='AOD output file name')
267 acf.addFlag('Output.HISTFileName', '', help='HIST output file name')
268
269 acf.addFlag('Output.doWriteEVNT', lambda prevFlags: bool(prevFlags.Output.EVNTFileName), help='write EVNT file')
270 acf.addFlag('Output.doWriteEVNT_TR', lambda prevFlags: bool(prevFlags.Output.EVNT_TRFileName), help='write EVNT_TR file')
271 acf.addFlag('Output.doWriteHITS', lambda prevFlags: bool(prevFlags.Output.HITSFileName), help='write HITS file')
272 acf.addFlag('Output.doWriteRDO', lambda prevFlags: bool(prevFlags.Output.RDOFileName), help='write RDO file')
273 acf.addFlag('Output.doWriteRDO_SGNL', lambda prevFlags: bool(prevFlags.Output.RDO_SGNLFileName), help='write RDO_SGNL file')
274 acf.addFlag('Output.doWriteESD', lambda prevFlags: bool(prevFlags.Output.ESDFileName), help='write ESD file')
275 acf.addFlag('Output.doWriteAOD', lambda prevFlags: bool(prevFlags.Output.AODFileName), help='write AOD file')
276 acf.addFlag('Output.doWriteBS', False, help='write bytestream file')
277 acf.addFlag('Output.doWriteDAOD', False, help='write at least one DAOD file')
278 acf.addFlag('Output.doJiveXML', False, help='write JiveXML file')
279
280 acf.addFlag('Output.doGEN_AOD2xAOD', True, help="Configure the AODtoxAOD Truth Conversion")
281 acf.addFlag('Output.OneDataHeaderForm', False, help="Write only a single common DataHeaderForm per stream")
282 acf.addFlag('Output.TreeAutoFlush', {}, help="dict with auto-flush settings for stream e.g. {'STREAM': 123}")
283 acf.addFlag('Output.TemporaryStreams', [], help='list of output streams that are marked temporary')
284 acf.addFlag('Output.StorageTechnology.EventData', {},
285 help="set the underlying POOL storage technology for event data, e.g., {f'{flags.Output.AODFileName}':'ROOTRNTUPLE', '*':'ROOTTREEINDEX'}. If not set for a file, defaults to PoolSvc.DefaultContainerType.")
286 acf.addFlag('Output.StorageTechnology.MetaData', {},
287 help="set the underlying POOL storage technology for metadata, e.g., {f'{flags.Output.AODFileName}':'ROOTRNTUPLE', '*':'ROOTTREE'}. If not set for a file, defaults to the EventData technology for that file.")
288
289 # Might move this elsewhere in the future.
290 # Some flags from https://gitlab.cern.ch/atlas/athena/blob/master/Tracking/TrkDetDescr/TrkDetDescrSvc/python/TrkDetDescrJobProperties.py
291 # (many, e.g. those that set properties of one tool are not needed)
292 acf.addFlag('TrackingGeometry.MagneticFileMode', 6) # TODO: unused?
293 acf.addFlag('TrackingGeometry.MaterialSource', 'COOL', help='material source (COOL, Input or None)')
294
295#Detector Flags:
296 def __detector():
297 from AthenaConfiguration.DetectorConfigFlags import createDetectorConfigFlags
298 return createDetectorConfigFlags()
299 acf.addFlagsCategory( "Detector", __detector )
300
301#Simulation Flags:
302 def __simulation():
303 from SimulationConfig.SimConfigFlags import createSimConfigFlags
304 return createSimConfigFlags()
305 _addFlagsCategory (acf, "Sim", __simulation, 'SimulationConfig' )
306
307#Test Beam Simulation Flags:
308 def __testbeam():
309 from SimulationConfig.TestBeamConfigFlags import createTestBeamConfigFlags
310 return createTestBeamConfigFlags()
311 _addFlagsCategory (acf, "TestBeam", __testbeam, 'SimulationConfig' )
312
313#Digitization Flags:
314 def __digitization():
315 from DigitizationConfig.DigitizationConfigFlags import createDigitizationCfgFlags
316 return createDigitizationCfgFlags()
317 _addFlagsCategory(acf, "Digitization", __digitization, 'DigitizationConfig' )
318
319#Overlay Flags:
320 def __overlay():
321 from OverlayConfiguration.OverlayConfigFlags import createOverlayConfigFlags
322 return createOverlayConfigFlags()
323 _addFlagsCategory(acf, "Overlay", __overlay, 'OverlayConfiguration' )
324
325#Geo Model Flags:
326 def __geomodel():
327 from AthenaConfiguration.GeoModelConfigFlags import createGeoModelConfigFlags
328 return createGeoModelConfigFlags(not isGaudiEnv() or acf.Common.Project is Project.AthAnalysis)
329 acf.addFlagsCategory( "GeoModel", __geomodel )
330
331#Reco Flags:
332 def __reco():
333 from RecJobTransforms.RecoConfigFlags import createRecoConfigFlags
334 return createRecoConfigFlags()
335 _addFlagsCategory(acf, "Reco", __reco, 'RecJobTransforms')
336
337#Generator Flags:
338 def __generators():
339 from GeneratorConfig.GeneratorConfigFlags import createGeneratorConfigFlags
340 return createGeneratorConfigFlags()
341 _addFlagsCategory(acf, "Generator", __generators, 'GeneratorConfig')
342
343#IOVDbSvc Flags:
344 if isGaudiEnv():
345 from IOVDbSvc.IOVDbAutoCfgFlags import getLastGlobalTag, getDatabaseInstanceDefault
346
347 def __getTrigTag(flags):
348 from TriggerJobOpts.TriggerConfigFlags import trigGlobalTag
349 return trigGlobalTag(flags)
350
351 acf.addFlag("IOVDb.GlobalTag", lambda flags :
352 (__getTrigTag(flags) if flags.Trigger.doLVL1 or flags.Trigger.doHLT else None) or
353 getLastGlobalTag(flags), help='global conditions tag')
354
355 acf.addFlag("IOVDb.DatabaseInstance", getDatabaseInstanceDefault, help='conditions DB instance')
356
357 # Run dependent simulation
358 acf.addFlag("IOVDb.RunToTimestampDict", lambda prevFlags: getRunToTimestampDict(), help='runNumber to timestamp map')
359
360 acf.addFlag("IOVDb.DBConnection", lambda prevFlags : "sqlite://;schema=mycool.db;dbname=" + prevFlags.IOVDb.DatabaseInstance, help='default DB connection string')
361 acf.addFlag("IOVDb.CrestServer", "https://crest.cern.ch", help="CREST server URL") # FIXME could this be merged with IOVDb.DBConnection?
362 acf.addFlag("IOVDb.UseCREST", False, help='Use CREST for conditions access')
363
364 #For HLT-jobs, the ring-size should be 0 (eg no cleaning at all since there are no IOV-updates during the job)
365 acf.addFlag("IOVDb.CleanerRingSize",lambda prevFlags : 0 if prevFlags.Trigger.doHLT else 2*max(1, prevFlags.Concurrency.NumConcurrentEvents), help='size of ring-buffer for conditions cleaner')
366 acf.addFlag("IOVDb.SqliteInput","",help="Folders found in this file will be used instead of the production db")
367 acf.addFlag("IOVDb.SqliteFolders",(),help="Folders listed here will be taken from the IOVDb.SqliteInput file instead of the production db. If empty, all folders found in the file are used.")
368 acf.addFlag("IOVDb.WriteParametersAsMetaData", False, help="Write simulation/digitization parameters directly as in-file metadata (True) or via intermediate sqlite files (False)")
369
370#PoolSvc Flags:
371 acf.addFlag("PoolSvc.MaxFilesOpen", lambda prevFlags : 2 if prevFlags.MP.UseSharedReader else 0, help='maximum number of open files')
372 acf.addFlag('PoolSvc.DefaultContainerType', 'ROOTTREEINDEX', help='set the underlying POOL storage technology for the default container type')
373 acf.addFlag("PoolSvc.PersSvcPerInputType", False, help='enable separate persistency service for each input type')
374
375
376 def __bfield():
377 from MagFieldConfig.BFieldConfigFlags import createBFieldConfigFlags
378 return createBFieldConfigFlags()
379 _addFlagsCategory(acf, "BField", __bfield, 'MagFieldConfig')
380
381 def __lar():
382 from LArConfiguration.LArConfigFlags import createLArConfigFlags
383 return createLArConfigFlags()
384 _addFlagsCategory(acf, "LAr", __lar, 'LArConfiguration' )
385
386 def __tile():
387 from TileConfiguration.TileConfigFlags import createTileConfigFlags
388 return createTileConfigFlags()
389 _addFlagsCategory(acf, 'Tile', __tile, 'TileConfiguration' )
390
391
392 def __calo():
393 from CaloRec.CaloConfigFlags import createCaloConfigFlags
394 return createCaloConfigFlags()
395 _addFlagsCategory(acf, 'Calo', __calo, 'CaloRec' )
396
397#Random engine Flags:
398 acf.addFlag("Random.Engine", "dSFMT", help='random number service ("dSFMT", "Ranlux64", "Ranecu")')
399 acf.addFlag("Random.SeedOffset", 0, help='seed offset') # TODO replace usage of Digitization.RandomSeedOffset with this flag
400
401 def __trigger():
402 from TriggerJobOpts.TriggerConfigFlags import createTriggerFlags
403 return createTriggerFlags(acf.Common.Project is not Project.AthAnalysis)
404
405 added = _addFlagsCategory(acf, "Trigger", __trigger, 'TriggerJobOpts' )
406 if not added:
407 # If TriggerJobOpts is not available, we add at least these basic flags
408 # to indicate Trigger is not available:
409 acf.addFlag('Trigger.doLVL1', False, help='enable L1 simulation')
410 acf.addFlag('Trigger.doHLT', False, help='run HLT selection algorithms')
411
412 def __indet():
413 from InDetConfig.InDetConfigFlags import createInDetConfigFlags
414 return createInDetConfigFlags()
415 _addFlagsCategory(acf, "InDet", __indet, 'InDetConfig' )
416
417 def __itk():
418 from InDetConfig.ITkConfigFlags import createITkConfigFlags
419 return createITkConfigFlags()
420 _addFlagsCategory(acf, "ITk", __itk, 'InDetConfig' )
421
422 def __tracking():
423 from TrkConfig.TrkConfigFlags import createTrackingConfigFlags
424 return createTrackingConfigFlags()
425 _addFlagsCategory(acf, "Tracking", __tracking, 'TrkConfig')
426
427 def __trackoverlay():
428 from TrackOverlayConfig.TrackOverlayConfigFlags import createTrackOverlayConfigFlags
429 return createTrackOverlayConfigFlags()
430 _addFlagsCategory(acf, "TrackOverlay", __trackoverlay, 'TrackOverlayConfig')
431
432 def __acts():
433 from ActsConfig.ActsConfigFlags import createActsConfigFlags
434 return createActsConfigFlags()
435 _addFlagsCategory(acf, "Acts", __acts, 'ActsConfig')
436
437 def __hgtd():
438 from HGTD_Config.HGTD_ConfigFlags import createHGTD_ConfigFlags
439 return createHGTD_ConfigFlags()
440 _addFlagsCategory(acf, "HGTD", __hgtd, 'HGTD_Config' )
441
442 def __muon():
443 from MuonConfig.MuonConfigFlags import createMuonConfigFlags
444 return createMuonConfigFlags()
445 _addFlagsCategory(acf, "Muon", __muon, 'MuonConfig' )
446
447 def __muoncombined():
448 from MuonCombinedConfig.MuonCombinedConfigFlags import createMuonCombinedConfigFlags
449 return createMuonCombinedConfigFlags()
450 _addFlagsCategory(acf, "MuonCombined", __muoncombined, 'MuonCombinedConfig' )
451
452 def __egamma():
453 from egammaConfig.egammaConfigFlags import createEgammaConfigFlags
454 return createEgammaConfigFlags()
455 _addFlagsCategory(acf, "Egamma", __egamma, 'egammaConfig' )
456
457 def __met():
458 from METReconstruction.METConfigFlags import createMETConfigFlags
459 return createMETConfigFlags()
460 _addFlagsCategory(acf,"MET",__met, 'METReconstruction')
461
462 def __jet():
463 from JetRecConfig.JetConfigFlags import createJetConfigFlags
464 return createJetConfigFlags()
465 _addFlagsCategory(acf,"Jet",__jet, 'JetRecConfig')
466
467 def __ufo():
468 from TrackCaloClusterRecTools.UFOConfigFlags import createUFOConfigFlags
469 return createUFOConfigFlags()
470 _addFlagsCategory(acf,"UFO",__ufo, 'TrackCaloClusterRecTools')
471
472 def __tau():
473 from tauRec.TauConfigFlags import createTauConfigFlags
474 return createTauConfigFlags()
475 _addFlagsCategory(acf, "Tau",__tau, 'tauRec')
476
477 def __ditau():
478 from DiTauRec.DiTauConfigFlags import createDiTauConfigFlags
479 return createDiTauConfigFlags()
480 _addFlagsCategory(acf, "DiTau",__ditau, 'DiTauRec')
481
482 def __pflow():
483 from eflowRec.PFConfigFlags import createPFConfigFlags
484 return createPFConfigFlags()
485 _addFlagsCategory(acf,"PF",__pflow, 'eflowRec')
486
487 def __btagging():
488 from JetTagConfig.BTaggingConfigFlags import createBTaggingConfigFlags
489 return createBTaggingConfigFlags()
490 _addFlagsCategory(acf,"BTagging",__btagging, 'JetTagConfig')
491
492 def __hi():
493 from HIRecConfig.HIRecConfigFlags import createHIRecConfigFlags
494 return createHIRecConfigFlags()
495 _addFlagsCategory(acf, "HeavyIon", __hi, "HIRecConfig")
496
497 def __onlineED():
498 from EventDisplaysOnline.EventDisplaysOnlineFlags import createOnlineEventDisplayFlags
499 return createOnlineEventDisplayFlags()
500 _addFlagsCategory(acf, "OnlineEventDisplays", __onlineED, 'EventDisplaysOnline' )
501
502 def __dq():
503 from AthenaMonitoring.DQConfigFlags import createDQConfigFlags
504 dqf = createDQConfigFlags()
505 return dqf
506 _addFlagsCategory(acf, "DQ", __dq, 'AthenaMonitoring' )
507
508 def __perfmon():
509 from PerfMonComps.PerfMonConfigFlags import createPerfMonConfigFlags
510 return createPerfMonConfigFlags()
511 _addFlagsCategory(acf, "PerfMon", __perfmon, 'PerfMonComps')
512
513 def __physVal():
514 from PhysValMonitoring.PhysValFlags import createPhysValConfigFlags
515 return createPhysValConfigFlags()
516 _addFlagsCategory(acf, "PhysVal", __physVal , "PhysValMonitoring")
517
518 def __caloRinger():
519 from CaloRingerAlgs.CaloRingerFlags import createCaloRingerConfigFlags
520 return createCaloRingerConfigFlags()
521 _addFlagsCategory(acf, "CaloRinger", __caloRinger, 'CaloRingerAlgs' )
522
523 def __caloGPU():
524 from CaloRecGPU.CaloRecGPUFlags import createFlagsCaloRecGPU
525 return createFlagsCaloRecGPU()
526 _addFlagsCategory(acf, "CaloRecGPU", __caloGPU, 'CaloRecGPU' )
527
528
530 from DerivationFrameworkConfiguration.DerivationConfigFlags import createDerivationConfigFlags
531 return createDerivationConfigFlags()
532 _addFlagsCategory(acf, "Derivation", __commonDerivation, 'DerivationFrameworkConfiguration' )
533
534#indet derivation flags
536 from DerivationFrameworkInDet.InDetDFConfigFlags import createInDetDFConfigFlags
537 return createInDetDFConfigFlags()
538 _addFlagsCategory(acf, "Derivation.InDet", __indetDerivation, 'DerivationFrameworkInDet' )
539
540#egamma derivation Flags:
542 from DerivationFrameworkEGamma.EGammaDFConfigFlags import createEGammaDFConfigFlags
543 return createEGammaDFConfigFlags()
544 _addFlagsCategory(acf, "Derivation.Egamma", __egammaDerivation, 'DerivationFrameworkEGamma' )
545
546#llp derivation Flags:
548 from DerivationFrameworkLLP.LLPDFConfigFlags import createLLPDFConfigFlags
549 return createLLPDFConfigFlags()
550 _addFlagsCategory(acf, "Derivation.LLP", __llpDerivation, 'DerivationFrameworkLLP' )
551
552 # onnxruntime flags
554 from AthOnnxComps.OnnxRuntimeFlags import createOnnxRuntimeFlags
555 return createOnnxRuntimeFlags()
556 _addFlagsCategory(acf, "AthOnnx", __onnxruntime, 'AthOnnxComps')
557
558 #EFTracking fpga data prep (F100)
560 from EFTrackingFPGAPipeline.IntegrationConfigFlag import addFPGADataPrepFlags
561 return addFPGADataPrepFlags()
562
563 _addFlagsCategory(acf, "FPGADataPrep", _eftracking_f100, "EFTrackingFPGAPipeline")
564
565 def __fpga():
566 from AthXRTServices.FPGAConfigFlags import createFPGAMgmtFlags
567 return createFPGAMgmtFlags()
568 _addFlagsCategory(acf, "FPGAMgmt", __fpga, 'AthXRTServices' )
569
570 # For AnalysisBase, pick up things grabbed in Athena by the functions above
571 if not isGaudiEnv():
572 def EDMVersion(flags):
573 # POOL files: decide based on HLT output type present in the file
574 default_version = 3
575 collections = flags.Input.Collections
576 if "HLTResult_EF" in collections:
577 return 1
578 elif "TrigNavigation" in collections:
579 return 2
580 elif any("HLTNav_Summary" in s for s in collections):
581 return 3
582 elif not flags.Input.Collections:
583 # Special case for empty input files (can happen in merge jobs on the grid)
584 # The resulting version doesn't really matter as there's nothing to be done, but we want a valid configuration
585 return 3
586
587 return default_version
588 acf.addFlag('Trigger.EDMVersion', lambda prevFlags: EDMVersion(prevFlags),
589 help='Trigger EDM version (determined by input file or set to the version to be produced)')
590
591 return acf
592
593
594if __name__=="__main__":
595 from AthenaConfiguration.TestDefaults import defaultTestFiles
597 import sys
598 if len(sys.argv) > 1:
599 flags.Input.Files = sys.argv[1:]
600 else:
601 flags.Input.Files = defaultTestFiles.AOD_RUN3_DATA
602
603 flags.loadAllDynamicFlags()
604 flags.initAll()
605 flags.dump()
#define max(a, b)
Definition cfImp.cxx:41
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:310
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177
__commonDerivation()
common derivation flags
_addFlagsCategory(acf, name, generator, modName=None)