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