From c17806071be4189a7b2ae0cd4041fb38f00c0eb9 Mon Sep 17 00:00:00 2001 From: Tadej Novak <tadej.novak@cern.ch> Date: Tue, 12 Dec 2017 12:43:15 +0100 Subject: [PATCH] Add ability to override event numbers to be sequential This allows a simple overriding of event numbers to be in sequence from one enabling pile-up events to be the same between different samples. Former-commit-id: f313a615baed70b76fb9efd66e56699012dccae4 --- .../Digitization/python/DigitizationFlags.py | 5 +++- .../Digitization/python/RunDependentConfig.py | 5 +++- .../python/RunDependentMCTaskIterator.py | 29 +++++++++++++++++-- .../RunDependentSimData/share/configCommon.py | 8 ++++- .../share/configEvtNbr_sequential.py | 4 +++ 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 Simulation/RunDependentSim/RunDependentSimData/share/configEvtNbr_sequential.py diff --git a/Simulation/Digitization/python/DigitizationFlags.py b/Simulation/Digitization/python/DigitizationFlags.py index cc3d1578ebe..8b41968f535 100755 --- a/Simulation/Digitization/python/DigitizationFlags.py +++ b/Simulation/Digitization/python/DigitizationFlags.py @@ -545,7 +545,10 @@ class RunAndLumiOverrideList(JobProperty): pDicts = self.get_Value() #clear svc properties? 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 def SetPileUpEventLoopMgrProps(self,pileUpEventLoopMgr): if not (self._locked): diff --git a/Simulation/Digitization/python/RunDependentConfig.py b/Simulation/Digitization/python/RunDependentConfig.py index ac7607b15e1..5d9a7f54548 100644 --- a/Simulation/Digitization/python/RunDependentConfig.py +++ b/Simulation/Digitization/python/RunDependentConfig.py @@ -44,7 +44,10 @@ def buildListOfModifiers(): raise RuntimeError( 'You cannot configure the EvtIdModifierSvc with an unlocked JobProperty.' ) pDicts = digitizationFlags.RunAndLumiOverrideList.get_Value() 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(): if digitizationFlags.dataRunNumber.get_Value() < 0: raise SystemExit("Given a negative Run Number - please use a real run number from data.") diff --git a/Simulation/Digitization/python/RunDependentMCTaskIterator.py b/Simulation/Digitization/python/RunDependentMCTaskIterator.py index cf14c1743e3..fdd2909c895 100644 --- a/Simulation/Digitization/python/RunDependentMCTaskIterator.py +++ b/Simulation/Digitization/python/RunDependentMCTaskIterator.py @@ -9,7 +9,7 @@ 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 task. Try to make each fragment utilize the same amount of CPU and Cache resources. Exploits the fact that the task when sorted by @@ -30,7 +30,12 @@ def getRunLumiInfoFragment(jobnumber,task,maxEvents): hi_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu'],reverse=True),hiMaxEvents) if loMaxEvents > 0: 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): """ Calculate the specific configuration of the current job in the digi task. @@ -106,3 +111,23 @@ class taskIterator(object): if self.current.get('force_new',False): to_do = 0 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 diff --git a/Simulation/RunDependentSim/RunDependentSimData/share/configCommon.py b/Simulation/RunDependentSim/RunDependentSimData/share/configCommon.py index e998cc2fb10..5df55d60de6 100644 --- a/Simulation/RunDependentSim/RunDependentSimData/share/configCommon.py +++ b/Simulation/RunDependentSim/RunDependentSimData/share/configCommon.py @@ -33,9 +33,15 @@ digilog.info('There are %d events in this run.' % runMaxEvents) 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('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 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 digilog.info( 'Writing RunDMC trigger configuration fragment to file. listOfRunsEvents = %s' % diff --git a/Simulation/RunDependentSim/RunDependentSimData/share/configEvtNbr_sequential.py b/Simulation/RunDependentSim/RunDependentSimData/share/configEvtNbr_sequential.py new file mode 100644 index 00000000000..1ba80741486 --- /dev/null +++ b/Simulation/RunDependentSim/RunDependentSimData/share/configEvtNbr_sequential.py @@ -0,0 +1,4 @@ +#################### +## Enable sequential event numbers override +#################### +SequentialEventNumbers = True -- GitLab