Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
StateLessPT_NewConfig.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4 #
5 
6 if __name__=='__main__':
7  import os,sys,getopt
8 
9  if len(sys.argv)>1 and (sys.argv[1]=="-h" or sys.argv[1]=="--help"):
10  print("Usage:")
11  print(" ")
12  print("StateLessPT_NewConfig.py {--config XXX} {--stream YYY} {--run Z}")
13  print(" default XXX: LArMon")
14  print(" default YYY: ''")
15  print(" default Z: '435946'")
16 
17  # #####################################################
18  # Read jobOpt configuration options
19  # #####################################################
20 
21  #some defaults
22  CONFIG = 'LArMon'
23  STREAM = "NONE"
24  RUNN = 448285
25  if len(sys.argv)>1:
26  for ii in range(1,len(sys.argv)):
27  print(ii," ",sys.argv[ii])
28  try:
29  opts,args=getopt.getopt(sys.argv[1:],"t:",["config=","stream=","run="])
30  except getopt.GetoptError as e:
31  print("Failed to interpret arguments")
32  print(e)
33  sys.exit(-1)
34  pass
35 
36  for o,a in opts:
37  if o=="--config":
38  print("Got option --config: ",a)
39  CONFIG=a
40  if o=="--stream": STREAM=a
41  if o=="--run": RUNN=int(a)
42 
43  from AthenaConfiguration.Enums import Format
44 
45  # #####################################################
46  # Get environment variables
47  # #####################################################
48 
49  partition = os.environ.get("TDAQ_PARTITION")
50 
51  from ispy import IPCPartition, ISObject
52 
53  # ################################
54  # To read run parameters from IS
55  # ################################
56  p = IPCPartition(partition)
57  if not p.isValid():
58  print("Partition:",p.name(),"is not valid")
59  sys.exit(1)
60 
61 
62  from AthenaConfiguration.Enums import BeamType
63  runnumber = RUNN
64  if partition == "ATLAS" or partition[0:3] == "LAr":
65  try:
66  y = ISObject(p, 'RunParams.SOR_RunParams', 'RunParams')
67  except:
68  print("Could not find Run Parameters in IS - Set default beam type to 'cosmics'")
69  beamType=BeamType.Cosmics
70  else:
71  y.checkout()
72  beamtype = y.beam_type
73  beamenergy = y.beam_energy
74  runnumber = y.run_number
75  project = y.T0_project_tag
76  print("RUN CONFIGURATION: beam type %i, beam energy %i, run number %i, project tag %s"%(beamtype,beamenergy,runnumber,project))
77  # define beam type based on project tag name
78  if project[7:10]=="cos":
79  beamType=BeamType.Cosmics
80  else:
81  beamType=BeamType.Collisions
82 
83 
84  else:
85  beamType=BeamType.Collisions
86 
87 
88  try:
89  x = ISObject(p, 'LArParams.LAr.RunLogger.GlobalParams', 'GlobalParamsInfo')
90  except:
91  print("Could not find IS Parameters - Set default flag")
92  ReadDigits = False
93  FirstSample = 3
94  NSamples = 4
95  LArFormat = 1
96  RunType = 2
97  LATOME_FW = 5
98  #for splash test
99  #ReadDigits = True
100  #FirstSample = 6
101  #NSamples = 32
102  #LArFormat = 0
103  #RunType = 0
104  else:
105  try:
106  x.checkout()
107  except:
108  print("Couldn not find IS Parameters - Set default flag")
109  ReadDigits = False
110  FirstSample = 3
111  NSamples = 4
112  LArFormat = 1
113  RunType = 2
114  LATOME_FW = 5
115  #for splash test
116  #ReadDigits = True
117  #FirstSample = 6
118  #NSamples = 32
119  #LArFormat = 0
120  #RunType = 0
121  else:
122  RunType = x.runType
123  LArFormat = x.format
124  FirstSample = x.firstSample
125  NSamples = x.nbOfSamples
126  RunType = x.runType
127  LATOME_FW = x.ttype_mask_A
128  print("RUN CONFIGURATION: format %i,run type %i"%(RunType,LArFormat))
129  # Decide how to get cell energy: DSP or digits
130  if LArFormat==0:
131  ReadDigits = True
132  else:
133  ReadDigits = False
134 
135  print("RUN CONFIGURATION: ReadDigits =", ReadDigits)
136 
137 
138  from AthenaConfiguration.AllConfigFlags import initConfigFlags
139  flags = initConfigFlags()
140  from AthenaMonitoring.DQConfigFlags import allSteeringFlagsOff
141  allSteeringFlagsOff(flags)
142 
143 
144  flags.Beam.Type=beamType
145  flags.Beam.BunchSpacing=25
146  print("RUN CONFIGURATION: Beamtype =",flags.Beam.Type)
147 
148  flags.Common.isOnline=True
149  flags.Input.Format=Format.BS
150  flags.Input.isMC=False
151 
152 
153  from AthenaCommon.Constants import WARNING
154  flags.Exec.MaxEvents=-1
155 
156  from AthenaConfiguration.AutoConfigOnlineRecoFlags import autoConfigOnlineRecoFlags
157  autoConfigOnlineRecoFlags(flags,partition)
158 
159  flags.IOVDb.DatabaseInstance="CONDBR2"
160  flags.IOVDb.GlobalTag="CONDBR2-ES1PA-2023-03"
161 
162  flags.GeoModel.Layout="atlas"
163  from AthenaConfiguration.TestDefaults import defaultGeometryTags
164  flags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
165 
166  #overwrite the run number
167  flags.Input.RunNumbers=[runnumber]
168  # overwrite LB number for playback partition if needed....
169  flags.Input.LumiBlockNumbers=[0]
170 
171  from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
172  setupDetectorFlags(flags, ['LAr'], toggle_geometry=True)
173 
174  flags.Trigger.doID=False
175  flags.Trigger.doMuon=False
176  flags.Trigger.L1.doMuon=False
177  flags.Trigger.L1.doTopo=False
178  flags.Trigger.doHLT=False
179  flags.Trigger.doLVL1=False
180  flags.Trigger.Online.isPartition=True
181  flags.Trigger.triggerConfig='DB'
182  flags.Trigger.DecisionMakerValidation.Execute=False
183  flags.Trigger.enableL1CaloPhase1=False
184 
185  flags.DQ.doMonitoring=True
186  flags.DQ.disableAtlasReadyFilter=True
187  flags.DQ.useTrigger=True
188  flags.DQ.FileKey=''
189  flags.DQ.Environment='online'
190 
191  flags.LAr.doAlign=False
192  flags.LAr.doHVCorr=False
193 
194  # in case to debug FPE:
195  #flags.Exec.FPE=3
196  #if 'DTMon' in CONFIG:
197  # flags.Exec.FPE=5
198 
199  if RunType == 0:
200  flags.LAr.ROD.forceIter=True
201 
202  flags.Calo.TopoCluster.doTopoClusterLocalCalib=False
203 
204  def __monflags():
205  from LArMonitoring.LArMonConfigFlags import createLArMonConfigFlags
206  return createLArMonConfigFlags()
207 
208  flags.addFlagsCategory("LArMon", __monflags)
209 
210  if STREAM=="CosmicCalo" or STREAM=="LArCellsEmpty":
211  flags.LArMon.doLArRawMonitorSignal=True
212 
213  if 'CaloMon' in CONFIG: # needs Lumi access
214  flags.DQ.enableLumiAccess=False
215  else:
216  flags.DQ.enableLumiAccess=True
217 
218 
219  flags.lock()
220 
221  flags.dump()
222 
223  # taken from future EmonByteStreamConfig
224  from AthenaConfiguration.ComponentFactory import CompFactory
225  from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
226 
227  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
228  acc = MainServicesCfg(flags)
229 
230  bytestream_conversion = CompFactory.ByteStreamCnvSvc()
231  acc.addService(bytestream_conversion, primary=True)
232 
233  from ByteStreamEmonSvc.EmonByteStreamConfig import EmonByteStreamCfg
234  acc.merge(EmonByteStreamCfg(flags))
235 
236  bytestream_input = acc.getService("ByteStreamInputSvc")
237 
238  # ############################################################
239  # The name of the partition you want to connect to is taken
240  # from 'TDAQ_PARTITION' if it exists, otherwise from here.
241  # ############################################################
242 
243  bytestream_input.Partition = partition
244 
245  # #########################################
246  # The source of events, dcm for full events.
247  # #########################################
248 
249  if partition == "ATLAS" or partition[:3] == "LAr":
250  bytestream_input.Key = "dcm"
251  else:
252  bytestream_input.Key = "CompleteEvent"
253 
254  bytestream_input.KeyCount = 15
255  bytestream_input.KeyCount = 150
256  bytestream_input.UpdatePeriod = 200
257  #
258  # #######################################
259  # Set this to the IS server where you want
260  # to publish histograms, too. If unset, no histograms
261  # are published.
262  # #######################################
263 
264  bytestream_input.ISServer = 'LArHistogramming'
265 
266  # ########################################
267  # The provider name under which your histograms
268  # appear in OH.
269  # ########################################
270 
271  if STREAM!='NONE':
272  bytestream_input.PublishName = '%s-%s'%(CONFIG,STREAM)
273  else:
274  bytestream_input.PublishName = '%s-%s'%(CONFIG,"NoTrigSel")
275 
276  # ###################################################
277  # Should histograms be cleared at new run ? default: yes
278  # Moved to False 27th Jan 2010 - Reset for each event in HLT 15.5.5
279  # ###################################################
280 
281  bytestream_input.ClearHistograms = True
282 
283  # #########################
284  # To get all Beam Splashes this needs uncomment
285  # #########################
286 
287  #bytestream_input.Dispersion=False
288 
289  # ###############################################
290  # Frequency of updates (in number of events, not secs...)
291  # ###############################################
292 
293  bytestream_input.Frequency = 5
294 
295  # #######################################################
296  # TimeOut (in milliseconds) - Prevent job with low rates
297  # to reconnect too often to SFIs
298  # ######################################################
299 
300  bytestream_input.Timeout = 3600000
301 
302  # ###################################################
303  # Stream/trigger Selection
304  # --> For LAr partitions, no stream available
305  # --> For ATLAS, can create streams from L1 items
306  # ##################################################
307 
308  if bytestream_input.Partition[:3] == "LAr":
309  bytestream_input.StreamType = ""
310  else:
311  bytestream_input.LVL1Logic = "Or"
312  bytestream_input.LVL1Origin = "TAV"
313  bytestream_input.StreamType = "physics"
314  bytestream_input.StreamLogic = "And"
315  if STREAM!="NONE":
316  if STREAM=="LArCellsEmpty":
317  bytestream_input.StreamType = "calibration"
318  bytestream_input.StreamNames = ['LArCellsEmpty']
319  if STREAM=="Main":
320  bytestream_input.StreamNames = ['Main']
321  if STREAM=="CosmicCalo":
322  bytestream_input.StreamNames = ['CosmicCalo']
323  if STREAM=="L1Topo":
324  bytestream_input.StreamNames = ['L1Topo']
325  if STREAM=="L1Calo":
326  bytestream_input.StreamNames = ['L1Calo']
327  if STREAM=="express":
328  bytestream_input.StreamNames = ['express']
329  bytestream_input.StreamType = "express"
330  if STREAM=="LArNoiseBurst":
331  bytestream_input.StreamType = "calibration"
332  bytestream_input.StreamNames = ['LArNoiseBurst']
333  if STREAM=="Standby":
334  bytestream_input.StreamNames = ['Standby']
335  if STREAM=="ZeroBias":
336  bytestream_input.StreamNames = ['ZeroBias']
337  if STREAM=="MinBias":
338  bytestream_input.StreamNames = ['MinBias']
339  if STREAM=="Background":
340  bytestream_input.StreamNames = ['Background']
341  if STREAM=="05_Jets":
342  bytestream_input.StreamType = "calibration"
343  bytestream_input.StreamNames = ['DataScouting_05_Jets']
344  if STREAM=="random":
345  bytestream_input.StreamNames = ['monitoring_random']
346  bytestream_input.StreamType = "monitoring"
347  if STREAM=="calibration":
348  bytestream_input.StreamType = "calibration"
349 
350 
351  print("DEBUG: bytestream_input.StreamNames:",bytestream_input.StreamNames)
352 
353  else: # select any trigger, but from physics events only !
354  bytestream_input.StreamType = "physics"
355  bytestream_input.StreamLogic = "Or"
356  # not possible to ignore one stream, so creating a full list
357  bytestream_input.StreamNames = ["Main","CosmicCalo","L1Topo","L1Calo","Standby","ZeroBias","Background", "EnhancedBias", "MinBias", "LArCells", "LArCellsEmpty", "LArNoiseBurst", "BphysDelayed", "Late"]
358 
359 
360  # #################################################
361  # Shall athena exit if the partition is shutdown ?
362  # For offline athena tasks ONLY.
363  # Set this parameter to FALSE online.
364  # #################################################
365  bytestream_input.ExitOnPartitionShutdown = False
366 
367  # #################################################
368  # From Sergei Kolos, Nov. 2009:
369  # Parameter default overwritten to drastically
370  # decrease the load on the network
371  # #################################################
372 
373  bytestream_input.BufferSize = 10
374 
375  # #################################################
376  # Private Application Configuration options, replace with
377  # your configuration.
378  # #################################################
379 
380  event_selector = CompFactory.EventSelectorByteStream(
381  name='EventSelector',
382  ByteStreamInputSvc=bytestream_input.name,
383  FileBased=False)
384  acc.addService(event_selector)
385  acc.setAppProperty("EvtSel", event_selector.name)
386 
387  event_persistency = CompFactory.EvtPersistencySvc(
388  name="EventPersistencySvc",
389  CnvServices=[bytestream_conversion.name])
390  acc.addService(event_persistency)
391 
392  address_provider = CompFactory.ByteStreamAddressProviderSvc()
393  acc.addService(address_provider)
394 
395  proxy = CompFactory.ProxyProviderSvc()
396  proxy.ProviderNames += [address_provider.name]
397  acc.addService(proxy)
398 
399  acc.merge(SGInputLoaderCfg(flags, FailIfNoProxy=True))
400 
401 
402  from TriggerJobOpts.TriggerRecoConfig import TriggerRecoCfg
403  acc.merge(TriggerRecoCfg(flags))
404 
405 
406  l1bsdec = acc.getEventAlgo("L1TriggerByteStreamDecoder")
407  l1bsdec.ByteStreamMetadataRHKey=""
408  print("MaybeMissingROBs: ",l1bsdec.MaybeMissingROBs)
409  l1bsdec.MaybeMissingROBs += [0x770001, 0x7500ac, 0x7500ad, 0x7300a8, 0x7300a9, 0x7300aa, 0x7300ab]
410 
411  if LATOME_FW == 6:
412  print("LATOME FW VERSION IS 6 - USING CUSTOM MAPPING")
413  #if isFW6:
414  # Temporary fix for FW6 mapping. These two lines must be removed when we are not running with fw6 print("ADDING FW6 MAPPING HACK")
415  from IOVDbSvc.IOVDbSvcConfig import addOverride
416  acc.merge(addOverride(flags,"/LAR/Identifier/LatomeMapping","LARIdentifierLatomeMapping-fw6"))
417 
418  print('CONFIG ',CONFIG)
419  print('STREAM ',STREAM)
420 
421  if "LArSCvsRawChannel" in CONFIG:
422  from LArMonitoring.RecoPT_Phase1NewConfig import LArSCvsRawChannelMonAlgCfg
423  acc.merge(LArSCvsRawChannelMonAlgCfg(flags,STREAM))
424 
425  elif CONFIG!="LArDTMon":
426  from LArMonitoring.RecoPT_NewConfig import LArMonitoringConfig
427  acc.merge(LArMonitoringConfig(flags,CONFIG,STREAM,RunType))
428 
429  else:
430  from LArMonitoring.RecoPT_Phase1NewConfig import LArDTMonitoringConfig
431  acc.merge(LArDTMonitoringConfig(flags,STREAM))
432 
433 
434  # fixes for splashes
435  if RunType == 0 and CONFIG!="LArDTMon":
436  acc.getEventAlgo("LArRawDataReadingAlg").LArRawChannelKey=""
437 
438  # example for blocking the folder not filled during cosmics
439  cil=acc.getCondAlgo('CondInputLoader')
440  iovdbsvc=acc.getService('IOVDbSvc')
441  folder='/TRIGGER/LUMI/LBLB'
442  for i in range(0,len(iovdbsvc.Folders)):
443  if (iovdbsvc.Folders[i].find(folder)>=0):
444  del iovdbsvc.Folders[i]
445  break
446 
447  remove_folder = False
448  for cil_Loadval in cil.Load:
449  if folder in cil_Loadval:
450  print(f"Removing {cil_Loadval} from cil/Load")
451  remove_folder = True
452  break
453  if remove_folder: cil.Load.remove(cil_Loadval)
454 
455  if flags.DQ.enableLumiAccess:
456  lbd = acc.getCondAlgo('LBDurationCondAlg')
457  lbd.LBLBFolderInputKey=""
458  print('lbd ',lbd)
459 
460  # somehow needs to add postprocessing
461  from DataQualityUtils.DQPostProcessingAlg import DQPostProcessingAlg
462  ppa = DQPostProcessingAlg("DQPostProcessingAlg")
463  ppa.ExtraInputs = {( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' )}
464  ppa.Interval = 200
465  ppa.OutputLevel = WARNING
466  if flags.Common.isOnline:
467  ppa.FileKey = ((flags.DQ.FileKey + '/') if not flags.DQ.FileKey.endswith('/')
468  else flags.DQ.FileKey)
469 
470  acc.addEventAlgo(ppa, sequenceName='AthEndSeq')
471 
472  # example how to dump the store:
473  #acc.getService("StoreGateSvc").Dump=True
474  #acc.getService("StoreGateSvc").OutputLevel=DEBUG
475 
476  acc.printConfig()
477  acc.run()
EmonByteStreamConfig.EmonByteStreamCfg
def EmonByteStreamCfg(flags, type_names=[])
Definition: EmonByteStreamConfig.py:12
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
StateLessPT_NewConfig.__monflags
def __monflags()
Definition: StateLessPT_NewConfig.py:204
LArMonConfigFlags.createLArMonConfigFlags
def createLArMonConfigFlags()
Definition: LArMonConfigFlags.py:19
SGInputLoaderConfig.SGInputLoaderCfg
def SGInputLoaderCfg(flags, Load=None, **kwargs)
Definition: SGInputLoaderConfig.py:7
python.LArMonitoringConfig.LArMonitoringConfig
def LArMonitoringConfig(inputFlags)
Definition: LArMonitoringConfig.py:5
python.IOVDbSvcConfig.addOverride
def addOverride(flags, folder, tag, db=None)
Definition: IOVDbSvcConfig.py:233
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
Constants
some useful constants -------------------------------------------------—
python.DQConfigFlags.allSteeringFlagsOff
def allSteeringFlagsOff(flags)
Definition: DQConfigFlags.py:143
python.AutoConfigOnlineRecoFlags.autoConfigOnlineRecoFlags
def autoConfigOnlineRecoFlags(flags, partition=None)
Definition: AutoConfigOnlineRecoFlags.py:134
LArSCvsRawChannelConfig.LArSCvsRawChannelMonAlgCfg
def LArSCvsRawChannelMonAlgCfg(flags)
Definition: LArSCvsRawChannelConfig.py:12
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.DetectorConfigFlags.setupDetectorFlags
def setupDetectorFlags(flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False)
Definition: DetectorConfigFlags.py:291
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.TriggerRecoConfig.TriggerRecoCfg
def TriggerRecoCfg(flags)
Definition: TriggerRecoConfig.py:17
RecoPT_Phase1NewConfig.LArDTMonitoringConfig
def LArDTMonitoringConfig(flags, STREAM)
Definition: RecoPT_Phase1NewConfig.py:6