Skip to content
Snippets Groups Projects
Commit 1aa376c5 authored by Tamara Vazquez Schroeder's avatar Tamara Vazquez Schroeder
Browse files

Merge branch 'event-numbers' into '21.0'

Digitization: Add ability to override event numbers and make them in sequence (ATLASSIM-3335)

See merge request atlas/athena!7372

Former-commit-id: cbb668c0fb69718caf70ed720d5bc39e75f4d0c5
parents a6243ddc c1780607
No related branches found
No related tags found
No related merge requests found
...@@ -545,7 +545,10 @@ class RunAndLumiOverrideList(JobProperty): ...@@ -545,7 +545,10 @@ class RunAndLumiOverrideList(JobProperty):
pDicts = self.get_Value() pDicts = self.get_Value()
#clear svc properties? #clear svc properties?
for el in pDicts: for el in pDicts:
eventIdModSvc.add_modifier(run_nbr=el['run'], lbk_nbr=el['lb'], time_stamp=el['starttstamp'], nevts=el['evts']) if 'evt_nbr' in el:
eventIdModSvc.add_modifier(run_nbr=el['run'], lbk_nbr=el['lb'], time_stamp=el['starttstamp'], nevts=el['evts'], evt_nbr=el['evt_nbr'])
else:
eventIdModSvc.add_modifier(run_nbr=el['run'], lbk_nbr=el['lb'], time_stamp=el['starttstamp'], nevts=el['evts'])
return return
def SetPileUpEventLoopMgrProps(self,pileUpEventLoopMgr): def SetPileUpEventLoopMgrProps(self,pileUpEventLoopMgr):
if not (self._locked): if not (self._locked):
......
...@@ -44,7 +44,10 @@ def buildListOfModifiers(): ...@@ -44,7 +44,10 @@ def buildListOfModifiers():
raise RuntimeError( 'You cannot configure the EvtIdModifierSvc with an unlocked JobProperty.' ) raise RuntimeError( 'You cannot configure the EvtIdModifierSvc with an unlocked JobProperty.' )
pDicts = digitizationFlags.RunAndLumiOverrideList.get_Value() pDicts = digitizationFlags.RunAndLumiOverrideList.get_Value()
for el in pDicts: for el in pDicts:
Modifiers += add_modifier(run_nbr=el['run'], lbk_nbr=el['lb'], time_stamp=el['starttstamp'], nevts=el['evts']) if 'evt_nbr' in el:
Modifiers += add_modifier(run_nbr=el['run'], lbk_nbr=el['lb'], time_stamp=el['starttstamp'], nevts=el['evts'], evt_nbr=el['evt_nbr'])
else:
Modifiers += add_modifier(run_nbr=el['run'], lbk_nbr=el['lb'], time_stamp=el['starttstamp'], nevts=el['evts'])
elif digitizationFlags.dataRunNumber.get_Value(): elif digitizationFlags.dataRunNumber.get_Value():
if digitizationFlags.dataRunNumber.get_Value() < 0: if digitizationFlags.dataRunNumber.get_Value() < 0:
raise SystemExit("Given a negative Run Number - please use a real run number from data.") raise SystemExit("Given a negative Run Number - please use a real run number from data.")
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
import itertools import itertools
def getRunLumiInfoFragment(jobnumber,task,maxEvents): def getRunLumiInfoFragment(jobnumber,task,maxEvents,sequentialEventNumbers=False):
"""Calculate the specific configuration of the current job in the digi """Calculate the specific configuration of the current job in the digi
task. Try to make each fragment utilize the same amount of CPU and task. Try to make each fragment utilize the same amount of CPU and
Cache resources. Exploits the fact that the task when sorted by Cache resources. Exploits the fact that the task when sorted by
...@@ -30,7 +30,12 @@ def getRunLumiInfoFragment(jobnumber,task,maxEvents): ...@@ -30,7 +30,12 @@ def getRunLumiInfoFragment(jobnumber,task,maxEvents):
hi_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu'],reverse=True),hiMaxEvents) hi_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu'],reverse=True),hiMaxEvents)
if loMaxEvents > 0: if loMaxEvents > 0:
lo_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu']),loMaxEvents) lo_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu']),loMaxEvents)
return sorted(sum([hi_mu_frag,lo_mu_frag],[]),key=lambda job: job['run'])
fragment=sorted(sum([hi_mu_frag,lo_mu_frag],[]),key=lambda job: job['run'])
if sequentialEventNumbers:
return defineSequentialEventNumbers(jobnumber,fragment,maxEvents)
else:
return fragment
def getFragment(jobnumber,task,maxEvents): def getFragment(jobnumber,task,maxEvents):
""" Calculate the specific configuration of the current job in the digi task. """ Calculate the specific configuration of the current job in the digi task.
...@@ -106,3 +111,23 @@ class taskIterator(object): ...@@ -106,3 +111,23 @@ class taskIterator(object):
if self.current.get('force_new',False): to_do = 0 if self.current.get('force_new',False): to_do = 0
raise StopIteration raise StopIteration
# #
def defineSequentialEventNumbers(jobnumber,fragment,maxEvents):
""" Calculate sequential event numbers for the defined getFragment.
"""
new_frag = []
evt_nbr = jobnumber * maxEvents
for t in fragment:
for i in range(t['evts']):
evt_nbr += 1
new_frag.append({
'run': t['run'],
'lb': t['lb'],
'starttstamp': t['starttstamp'],
'dt': t['dt'],
'evts': 1,
'evt_nbr': evt_nbr,
'mu': t['mu'],
'force_new': t['force_new']
})
return new_frag
...@@ -33,9 +33,15 @@ digilog.info('There are %d events in this run.' % runMaxEvents) ...@@ -33,9 +33,15 @@ digilog.info('There are %d events in this run.' % runMaxEvents)
jobsPerRun=int(math.ceil(float(runMaxEvents)/corrMaxEvents)) jobsPerRun=int(math.ceil(float(runMaxEvents)/corrMaxEvents))
digilog.info('Assuming there are usually %d events per job. (Based on %d events in this job.)', corrMaxEvents, trfMaxEvents) digilog.info('Assuming there are usually %d events per job. (Based on %d events in this job.)', corrMaxEvents, trfMaxEvents)
digilog.info('There must be %d jobs per run.' % jobsPerRun) digilog.info('There must be %d jobs per run.' % jobsPerRun)
# Override event numbers with sequential ones if requested
sequentialEventNumbers = True if 'SequentialEventNumbers' in dir() and SequentialEventNumbers else False
if sequentialEventNumbers:
digilog.info('All event numbers will be sequential.')
#Load needed tools #Load needed tools
from Digitization.RunDependentMCTaskIterator import getRunLumiInfoFragment from Digitization.RunDependentMCTaskIterator import getRunLumiInfoFragment
fragment=getRunLumiInfoFragment(jobnumber=(trfJobNumber-1),task=JobMaker,maxEvents=trfMaxEvents) fragment=getRunLumiInfoFragment(jobnumber=(trfJobNumber-1),task=JobMaker,maxEvents=trfMaxEvents,sequentialEventNumbers=sequentialEventNumbers)
from RunDependentSimComps.RunLumiConfigTools import condenseRunLumiInfoFragment from RunDependentSimComps.RunLumiConfigTools import condenseRunLumiInfoFragment
digilog.info( 'Writing RunDMC trigger configuration fragment to file. listOfRunsEvents = %s' % digilog.info( 'Writing RunDMC trigger configuration fragment to file. listOfRunsEvents = %s' %
......
####################
## Enable sequential event numbers override
####################
SequentialEventNumbers = True
if not 'DetFlags' in dir():
#if you configure one detflag, you're responsible for configuring them all!
from AthenaCommon.DetFlags import DetFlags
DetFlags.all_setOff()
DetFlags.Truth_setOn()
DetFlags.Print()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment