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
160 acf.addFlag('Common.MsgSuppression', True, help='enable log message suppression')
161 acf.addFlag('Common.MsgSourceLength', 50, help='length of the source-field in the log message format')
162 acf.addFlag('Common.ShowMsgStats', False ,help='print message statistics at the end of the job')
163
164 acf.addFlag('Common.isOnline', False, help='job runs in an online environment')
165 acf.addFlag('Common.useOnlineLumi', lambda prevFlags : prevFlags.Common.isOnline, help='use online version of luminosity')
166 acf.addFlag('Common.isOverlay', lambda prevFlags: prevFlags.Common.ProductionStep == ProductionStep.Overlay,
167 help='enable overlay')
168 acf.addFlag('Common.doExpressProcessing', False, help='do express stream processing')
169 acf.addFlag('Common.ProductionStep', ProductionStep.Default, type=ProductionStep, help='production step')
170 acf.addFlag('Common.Project', Project.determine(), type=Project, help='current athena software project')
171
172 # replace global.Beam*
173 acf.addFlag('Beam.BunchSpacing', 25, help='bunch spacing in nanoseconds')
174 acf.addFlag('Beam.Type', lambda prevFlags : BeamType(GetFileMD(prevFlags.Input.Files).get('beam_type', 'collisions')), type=BeamType, help='beam type')
175 acf.addFlag("Beam.NumberOfCollisions", lambda prevFlags : 2. if prevFlags.Beam.Type is BeamType.Collisions else 0., help='number of pileup collisions')
176
177 def _configureBeamEnergy(prevFlags):
178 metadata = GetFileMD(prevFlags.Input.Files)
179 default = 6.8 * TeV
180 # pool files
181 if prevFlags.Input.Format == Format.POOL:
182 return float(metadata.get("beam_energy", default))
183 # BS files
184 elif prevFlags.Input.Format == Format.BS:
185 if metadata.get("eventTypes", [""])[0] == "IS_DATA":
186 # special option for online running
187 if prevFlags.Common.isOnline:
188 from PyUtils.OnlineISConfig import GetRunType
189
190 return float(GetRunType()[1] or default)
191
192 # configure Beam energy depending on beam type:
193 if prevFlags.Beam.Type.value == "cosmics":
194 return 0.0
195 elif prevFlags.Beam.Type.value == "singlebeam":
196 return 450.0 * GeV
197 elif prevFlags.Beam.Type.value == "collisions":
198 projectName = prevFlags.Input.ProjectName
199 beamEnergy = None
200
201 if "GeV" in projectName:
202 beamEnergy = (
203 float(
204 (str(projectName).split("_")[1]).replace("GeV", "", 1)
205 )
206 / 2
207 * GeV
208 )
209 elif "TeV" in projectName:
210 if "hip5TeV" in projectName:
211 # Approximate 'beam energy' here as sqrt(sNN)/2.
212 beamEnergy = 1.577 * TeV
213 elif "hip8TeV" in projectName:
214 # Approximate 'beam energy' here as sqrt(sNN)/2.
215 beamEnergy = 2.51 * TeV
216 else:
217 beamEnergy = (
218 float(
219 (str(projectName).split("_")[1])
220 .replace("TeV", "", 1)
221 .replace("p", ".")
222 )
223 / 2
224 * TeV
225 )
226 if "5TeV" in projectName:
227 # these are actually sqrt(s) = 5.02 TeV
228 beamEnergy = 2.51 * TeV
229 elif projectName.endswith("_hi") or projectName.endswith("_hip"):
230 if projectName in ("data10_hi", "data11_hi"):
231 beamEnergy = 1.38 * TeV # 1.38 TeV (=3.5 TeV * (Z=82/A=208))
232 elif projectName == "data12_hi":
233 beamEnergy = 1.577 * TeV # 1.577 TeV (=4 TeV * (Z=82/A=208))
234 elif projectName in ("data12_hip", "data13_hip"):
235 # Pb (p) Beam energy in p-Pb collisions in 2012/3 was 1.577 (4) TeV.
236 # Approximate 'beam energy' here as sqrt(sNN)/2.
237 beamEnergy = 2.51 * TeV
238 elif projectName in ("data15_hi", "data18_hi"):
239 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.
240 elif projectName == "data17_hi":
241 beamEnergy = 2.721 * TeV # 2.72 TeV for Xe-Xe (=6.5 TeV * (Z=54/A=129))
242 return beamEnergy or default
243 elif metadata.get("eventTypes", [""])[0] == "IS_SIMULATION":
244 return float(metadata.get("beam_energy", default))
245 return default
246
247
248 acf.addFlag('Beam.Energy', lambda prevFlags : _configureBeamEnergy(prevFlags), help='beam energy in MeV')
249 acf.addFlag('Beam.estimatedLuminosity', lambda prevFlags : ( 1E33*(prevFlags.Beam.NumberOfCollisions)/2.3 ) *\
250 (25./prevFlags.Beam.BunchSpacing), help='luminosity estimated from pileup')
251 acf.addFlag('Beam.BunchStructureSource', lambda prevFlags: BunchStructureSource.MC if prevFlags.Input.isMC else BunchStructureSource.TrigConf, help='source of bunch structure')
252
253 acf.addFlag('Beam.vdMScan.ConfigFile', 'LRAPositioner.root', help='vdM Scan Sim/Reco/BSFit Configuration File')
254 acf.addFlag('Beam.vdMScan.PV.PDF', 'Default', help='vdM Scan Sim/BSFit PV PDF Histogram')
255
256 # output
257 acf.addFlag('Output.BSFileName', '', help='BS output file name')
258 acf.addFlag('Output.EVNTFileName', '', help='EVNT output file name')
259 acf.addFlag('Output.EVNT_TRFileName', '', help='EVNT_TR output file name')
260 acf.addFlag('Output.HITSFileName', '', help='HITS output file name')
261 acf.addFlag('Output.RDOFileName', '', help='RDO output file name')
262 acf.addFlag('Output.RDO_SGNLFileName', '', help='RDO_SGNL output file name')
263 acf.addFlag('Output.ESDFileName', '', help='ESD output file name')
264 acf.addFlag('Output.AODFileName', '', help='AOD output file name')
265 acf.addFlag('Output.HISTFileName', '', help='HIST output file name')
266
267 acf.addFlag('Output.doWriteEVNT', lambda prevFlags: bool(prevFlags.Output.EVNTFileName), help='write EVNT file')
268 acf.addFlag('Output.doWriteEVNT_TR', lambda prevFlags: bool(prevFlags.Output.EVNT_TRFileName), help='write EVNT_TR file')
269 acf.addFlag('Output.doWriteHITS', lambda prevFlags: bool(prevFlags.Output.HITSFileName), help='write HITS file')
270 acf.addFlag('Output.doWriteRDO', lambda prevFlags: bool(prevFlags.Output.RDOFileName), help='write RDO file')
271 acf.addFlag('Output.doWriteRDO_SGNL', lambda prevFlags: bool(prevFlags.Output.RDO_SGNLFileName), help='write RDO_SGNL file')
272 acf.addFlag('Output.doWriteESD', lambda prevFlags: bool(prevFlags.Output.ESDFileName), help='write ESD file')
273 acf.addFlag('Output.doWriteAOD', lambda prevFlags: bool(prevFlags.Output.AODFileName), help='write AOD file')
274 acf.addFlag('Output.doWriteBS', False, help='write bytestream file')
275 acf.addFlag('Output.doWriteDAOD', False, help='write at least one DAOD file')
276 acf.addFlag('Output.doJiveXML', False, help='write JiveXML file')
277
278 acf.addFlag('Output.doGEN_AOD2xAOD', True, help="Configure the AODtoxAOD Truth Conversion")
279 acf.addFlag('Output.OneDataHeaderForm', False, help="Write only a single common DataHeaderForm per stream")
280 acf.addFlag('Output.TreeAutoFlush', {}, help="dict with auto-flush settings for stream e.g. {'STREAM': 123}")
281 acf.addFlag('Output.TemporaryStreams', [], help='list of output streams that are marked temporary')
282 acf.addFlag('Output.StorageTechnology.EventData', {},
283 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.")
284 acf.addFlag('Output.StorageTechnology.MetaData', {},
285 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.")
286
287 # Might move this elsewhere in the future.
288 # Some flags from https://gitlab.cern.ch/atlas/athena/blob/master/Tracking/TrkDetDescr/TrkDetDescrSvc/python/TrkDetDescrJobProperties.py
289 # (many, e.g. those that set properties of one tool are not needed)
290 acf.addFlag('TrackingGeometry.MagneticFileMode', 6) # TODO: unused?
291 acf.addFlag('TrackingGeometry.MaterialSource', 'COOL', help='material source (COOL, Input or None)')
292
293#Detector Flags:
294 def __detector():
295 from AthenaConfiguration.DetectorConfigFlags import createDetectorConfigFlags
296 return createDetectorConfigFlags()
297 acf.addFlagsCategory( "Detector", __detector )
298
299#Simulation Flags:
300 def __simulation():
301 from SimulationConfig.SimConfigFlags import createSimConfigFlags
302 return createSimConfigFlags()
303 _addFlagsCategory (acf, "Sim", __simulation, 'SimulationConfig' )
304
305#Test Beam Simulation Flags:
306 def __testbeam():
307 from SimulationConfig.TestBeamConfigFlags import createTestBeamConfigFlags
308 return createTestBeamConfigFlags()
309 _addFlagsCategory (acf, "TestBeam", __testbeam, 'SimulationConfig' )
310
311#Digitization Flags:
312 def __digitization():
313 from DigitizationConfig.DigitizationConfigFlags import createDigitizationCfgFlags
314 return createDigitizationCfgFlags()
315 _addFlagsCategory(acf, "Digitization", __digitization, 'DigitizationConfig' )
316
317#Overlay Flags:
318 def __overlay():
319 from OverlayConfiguration.OverlayConfigFlags import createOverlayConfigFlags
320 return createOverlayConfigFlags()
321 _addFlagsCategory(acf, "Overlay", __overlay, 'OverlayConfiguration' )
322
323#Geo Model Flags:
324 def __geomodel():
325 from AthenaConfiguration.GeoModelConfigFlags import createGeoModelConfigFlags
326 return createGeoModelConfigFlags(not isGaudiEnv() or acf.Common.Project is Project.AthAnalysis)
327 acf.addFlagsCategory( "GeoModel", __geomodel )
328
329#Reco Flags:
330 def __reco():
331 from RecJobTransforms.RecoConfigFlags import createRecoConfigFlags
332 return createRecoConfigFlags()
333 _addFlagsCategory(acf, "Reco", __reco, 'RecJobTransforms')
334
335#Generator Flags:
336 def __generators():
337 from GeneratorConfig.GeneratorConfigFlags import createGeneratorConfigFlags
338 return createGeneratorConfigFlags()
339 _addFlagsCategory(acf, "Generator", __generators, 'GeneratorConfig')
340
341#IOVDbSvc Flags:
342 if isGaudiEnv():
343 from IOVDbSvc.IOVDbAutoCfgFlags import getLastGlobalTag, getDatabaseInstanceDefault
344
345 def __getTrigTag(flags):
346 from TriggerJobOpts.TriggerConfigFlags import trigGlobalTag
347 return trigGlobalTag(flags)
348
349 acf.addFlag("IOVDb.GlobalTag", lambda flags :
350 (__getTrigTag(flags) if flags.Trigger.doLVL1 or flags.Trigger.doHLT else None) or
351 getLastGlobalTag(flags), help='global conditions tag')
352
353 acf.addFlag("IOVDb.DatabaseInstance", getDatabaseInstanceDefault, help='conditions DB instance')
354
355 # Run dependent simulation
356 acf.addFlag("IOVDb.RunToTimestampDict", lambda prevFlags: getRunToTimestampDict(), help='runNumber to timestamp map')
357
358 acf.addFlag("IOVDb.DBConnection", lambda prevFlags : "sqlite://;schema=mycool.db;dbname=" + prevFlags.IOVDb.DatabaseInstance, help='default DB connection string')
359 acf.addFlag("IOVDb.CrestServer", "https://crest.cern.ch", help="CREST server URL") # FIXME could this be merged with IOVDb.DBConnection?
360 acf.addFlag("IOVDb.UseCREST", False, help='Use CREST for conditions access')
361
362 #For HLT-jobs, the ring-size should be 0 (eg no cleaning at all since there are no IOV-updates during the job)
363 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')
364 acf.addFlag("IOVDb.SqliteInput","",help="Folders found in this file will be used instead of the production db")
365 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.")
366 acf.addFlag("IOVDb.WriteParametersAsMetaData", False, help="Write simulation/digitization parameters directly as in-file metadata (True) or via intermediate sqlite files (False)")
367
368#PoolSvc Flags:
369 acf.addFlag("PoolSvc.MaxFilesOpen", lambda prevFlags : 2 if prevFlags.MP.UseSharedReader else 0, help='maximum number of open files')
370 acf.addFlag('PoolSvc.DefaultContainerType', 'ROOTTREEINDEX', help='set the underlying POOL storage technology for the default container type')
371 acf.addFlag("PoolSvc.PersSvcPerInputType", False, help='enable separate persistency service for each input type')
372
373
374 def __bfield():
375 from MagFieldConfig.BFieldConfigFlags import createBFieldConfigFlags
376 return createBFieldConfigFlags()
377 _addFlagsCategory(acf, "BField", __bfield, 'MagFieldConfig')
378
379 def __lar():
380 from LArConfiguration.LArConfigFlags import createLArConfigFlags
381 return createLArConfigFlags()
382 _addFlagsCategory(acf, "LAr", __lar, 'LArConfiguration' )
383
384 def __tile():
385 from TileConfiguration.TileConfigFlags import createTileConfigFlags
386 return createTileConfigFlags()
387 _addFlagsCategory(acf, 'Tile', __tile, 'TileConfiguration' )
388
389
390 def __calo():
391 from CaloRec.CaloConfigFlags import createCaloConfigFlags
392 return createCaloConfigFlags()
393 _addFlagsCategory(acf, 'Calo', __calo, 'CaloRec' )
394
395#Random engine Flags:
396 acf.addFlag("Random.Engine", "dSFMT", help='random number service ("dSFMT", "Ranlux64", "Ranecu")')
397 acf.addFlag("Random.SeedOffset", 0, help='seed offset') # TODO replace usage of Digitization.RandomSeedOffset with this flag
398
399 def __trigger():
400 from TriggerJobOpts.TriggerConfigFlags import createTriggerFlags
401 return createTriggerFlags(acf.Common.Project is not Project.AthAnalysis)
402
403 added = _addFlagsCategory(acf, "Trigger", __trigger, 'TriggerJobOpts' )
404 if not added:
405 # If TriggerJobOpts is not available, we add at least these basic flags
406 # to indicate Trigger is not available:
407 acf.addFlag('Trigger.doLVL1', False, help='enable L1 simulation')
408 acf.addFlag('Trigger.doHLT', False, help='run HLT selection algorithms')
409
410 def __indet():
411 from InDetConfig.InDetConfigFlags import createInDetConfigFlags
412 return createInDetConfigFlags()
413 _addFlagsCategory(acf, "InDet", __indet, 'InDetConfig' )
414
415 def __itk():
416 from InDetConfig.ITkConfigFlags import createITkConfigFlags
417 return createITkConfigFlags()
418 _addFlagsCategory(acf, "ITk", __itk, 'InDetConfig' )
419
420 def __tracking():
421 from TrkConfig.TrkConfigFlags import createTrackingConfigFlags
422 return createTrackingConfigFlags()
423 _addFlagsCategory(acf, "Tracking", __tracking, 'TrkConfig')
424
425 def __trackoverlay():
426 from TrackOverlayConfig.TrackOverlayConfigFlags import createTrackOverlayConfigFlags
427 return createTrackOverlayConfigFlags()
428 _addFlagsCategory(acf, "TrackOverlay", __trackoverlay, 'TrackOverlayConfig')
429
430 def __acts():
431 from ActsConfig.ActsConfigFlags import createActsConfigFlags
432 return createActsConfigFlags()
433 _addFlagsCategory(acf, "Acts", __acts, 'ActsConfig')
434
435 def __hgtd():
436 from HGTD_Config.HGTD_ConfigFlags import createHGTD_ConfigFlags
437 return createHGTD_ConfigFlags()
438 _addFlagsCategory(acf, "HGTD", __hgtd, 'HGTD_Config' )
439
440 def __muon():
441 from MuonConfig.MuonConfigFlags import createMuonConfigFlags
442 return createMuonConfigFlags()
443 _addFlagsCategory(acf, "Muon", __muon, 'MuonConfig' )
444
445 def __muoncombined():
446 from MuonCombinedConfig.MuonCombinedConfigFlags import createMuonCombinedConfigFlags
447 return createMuonCombinedConfigFlags()
448 _addFlagsCategory(acf, "MuonCombined", __muoncombined, 'MuonCombinedConfig' )
449
450 def __egamma():
451 from egammaConfig.egammaConfigFlags import createEgammaConfigFlags
452 return createEgammaConfigFlags()
453 _addFlagsCategory(acf, "Egamma", __egamma, 'egammaConfig' )
454
455 def __met():
456 from METReconstruction.METConfigFlags import createMETConfigFlags
457 return createMETConfigFlags()
458 _addFlagsCategory(acf,"MET",__met, 'METReconstruction')
459
460 def __jet():
461 from JetRecConfig.JetConfigFlags import createJetConfigFlags
462 return createJetConfigFlags()
463 _addFlagsCategory(acf,"Jet",__jet, 'JetRecConfig')
464
465 def __ufo():
466 from TrackCaloClusterRecTools.UFOConfigFlags import createUFOConfigFlags
467 return createUFOConfigFlags()
468 _addFlagsCategory(acf,"UFO",__ufo, 'TrackCaloClusterRecTools')
469
470 def __tau():
471 from tauRec.TauConfigFlags import createTauConfigFlags
472 return createTauConfigFlags()
473 _addFlagsCategory(acf, "Tau",__tau, 'tauRec')
474
475 def __ditau():
476 from DiTauRec.DiTauConfigFlags import createDiTauConfigFlags
477 return createDiTauConfigFlags()
478 _addFlagsCategory(acf, "DiTau",__ditau, 'DiTauRec')
479
480 def __pflow():
481 from eflowRec.PFConfigFlags import createPFConfigFlags
482 return createPFConfigFlags()
483 _addFlagsCategory(acf,"PF",__pflow, 'eflowRec')
484
485 def __btagging():
486 from JetTagConfig.BTaggingConfigFlags import createBTaggingConfigFlags
487 return createBTaggingConfigFlags()
488 _addFlagsCategory(acf,"BTagging",__btagging, 'JetTagConfig')
489
490 def __hi():
491 from HIRecConfig.HIRecConfigFlags import createHIRecConfigFlags
492 return createHIRecConfigFlags()
493 _addFlagsCategory(acf, "HeavyIon", __hi, "HIRecConfig")
494
495 def __onlineED():
496 from EventDisplaysOnline.EventDisplaysOnlineFlags import createOnlineEventDisplayFlags
497 return createOnlineEventDisplayFlags()
498 _addFlagsCategory(acf, "OnlineEventDisplays", __onlineED, 'EventDisplaysOnline' )
499
500 def __dq():
501 from AthenaMonitoring.DQConfigFlags import createDQConfigFlags
502 dqf = createDQConfigFlags()
503 return dqf
504 _addFlagsCategory(acf, "DQ", __dq, 'AthenaMonitoring' )
505
506 def __perfmon():
507 from PerfMonComps.PerfMonConfigFlags import createPerfMonConfigFlags
508 return createPerfMonConfigFlags()
509 _addFlagsCategory(acf, "PerfMon", __perfmon, 'PerfMonComps')
510
511 def __physVal():
512 from PhysValMonitoring.PhysValFlags import createPhysValConfigFlags
513 return createPhysValConfigFlags()
514 _addFlagsCategory(acf, "PhysVal", __physVal , "PhysValMonitoring")
515
516 def __caloRinger():
517 from CaloRingerAlgs.CaloRingerFlags import createCaloRingerConfigFlags
518 return createCaloRingerConfigFlags()
519 _addFlagsCategory(acf, "CaloRinger", __caloRinger, 'CaloRingerAlgs' )
520
521 def __caloGPU():
522 from CaloRecGPU.CaloRecGPUFlags import createFlagsCaloRecGPU
523 return createFlagsCaloRecGPU()
524 _addFlagsCategory(acf, "CaloRecGPU", __caloGPU, 'CaloRecGPU' )
525
526
528 from DerivationFrameworkConfiguration.DerivationConfigFlags import createDerivationConfigFlags
529 return createDerivationConfigFlags()
530 _addFlagsCategory(acf, "Derivation", __commonDerivation, 'DerivationFrameworkConfiguration' )
531
532#indet derivation flags
534 from DerivationFrameworkInDet.InDetDFConfigFlags import createInDetDFConfigFlags
535 return createInDetDFConfigFlags()
536 _addFlagsCategory(acf, "Derivation.InDet", __indetDerivation, 'DerivationFrameworkInDet' )
537
538#egamma derivation Flags:
540 from DerivationFrameworkEGamma.EGammaDFConfigFlags import createEGammaDFConfigFlags
541 return createEGammaDFConfigFlags()
542 _addFlagsCategory(acf, "Derivation.Egamma", __egammaDerivation, 'DerivationFrameworkEGamma' )
543
544#llp derivation Flags:
546 from DerivationFrameworkLLP.LLPDFConfigFlags import createLLPDFConfigFlags
547 return createLLPDFConfigFlags()
548 _addFlagsCategory(acf, "Derivation.LLP", __llpDerivation, 'DerivationFrameworkLLP' )
549
550 # onnxruntime flags
552 from AthOnnxComps.OnnxRuntimeFlags import createOnnxRuntimeFlags
553 return createOnnxRuntimeFlags()
554 _addFlagsCategory(acf, "AthOnnx", __onnxruntime, 'AthOnnxComps')
555
556 #EFTracking fpga data prep (F100)
558 from EFTrackingFPGAPipeline.IntegrationConfigFlag import addFPGADataPrepFlags
559 return addFPGADataPrepFlags()
560
561 _addFlagsCategory(acf, "FPGADataPrep", _eftracking_f100, "EFTrackingFPGAPipeline")
562
563 def __fpga():
564 from AthXRTServices.FPGAConfigFlags import createFPGAMgmtFlags
565 return createFPGAMgmtFlags()
566 _addFlagsCategory(acf, "FPGAMgmt", __fpga, 'AthXRTServices' )
567
568 # For AnalysisBase, pick up things grabbed in Athena by the functions above
569 if not isGaudiEnv():
570 def EDMVersion(flags):
571 # POOL files: decide based on HLT output type present in the file
572 default_version = 3
573 collections = flags.Input.Collections
574 if "HLTResult_EF" in collections:
575 return 1
576 elif "TrigNavigation" in collections:
577 return 2
578 elif any("HLTNav_Summary" in s for s in collections):
579 return 3
580 elif not flags.Input.Collections:
581 # Special case for empty input files (can happen in merge jobs on the grid)
582 # The resulting version doesn't really matter as there's nothing to be done, but we want a valid configuration
583 return 3
584
585 return default_version
586 acf.addFlag('Trigger.EDMVersion', lambda prevFlags: EDMVersion(prevFlags),
587 help='Trigger EDM version (determined by input file or set to the version to be produced)')
588
589 return acf
590
591
592if __name__=="__main__":
593 from AthenaConfiguration.TestDefaults import defaultTestFiles
595 import sys
596 if len(sys.argv) > 1:
597 flags.Input.Files = sys.argv[1:]
598 else:
599 flags.Input.Files = defaultTestFiles.AOD_RUN3_DATA
600
601 flags.loadAllDynamicFlags()
602 flags.initAll()
603 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)