diff --git a/Simulation/SimuJobTransforms/python/SimTransformUtils.py b/Simulation/SimuJobTransforms/python/SimTransformUtils.py index 27553bed7c6c74f035a066304ba4296ad0f85dae..0d1c60da63482a7fba386d95c9ef9ee0c94dca6b 100644 --- a/Simulation/SimuJobTransforms/python/SimTransformUtils.py +++ b/Simulation/SimuJobTransforms/python/SimTransformUtils.py @@ -9,6 +9,68 @@ import PyJobTransforms.trfArgClasses as trfArgClasses from PyJobTransforms.trfExe import athenaExecutor +### Returns the toal number of needed events +def pileUpCalc(nSignalEvts, refreshRate, nSubEvtPerBunch,nBunches): + totalSubEvts = nBunches*nSubEvtPerBunch + totalSubEvts += totalSubEvts*refreshRate*nSignalEvts + return totalSubEvts + + +### Preparing the list of required input PU files +import math +def makeBkgInputCol(initialList, nBkgEvtsPerCrossing, correctForEmptyBunchCrossings, logger): + uberList = [] + refreshrate = 1.0 + + nSignalEvts = 1000 + from AthenaCommon.AthenaCommonFlags import athenaCommonFlags + if (athenaCommonFlags.EvtMax.get_Value()>0): + nSignalEvts = int(athenaCommonFlags.EvtMax.get_Value()) + logger.info('Number of signal events (from athenaCommonFlags.EvtMax) = %s.', nSignalEvts ) + else: + nSignalEvts = 0 + import PyUtils.AthFile as athFile + for inFile in athenaCommonFlags.PoolHitsInput.get_Value(): + try: + inputFile = athFile.fopen(inFile) + nSignalEvts += int(inputFile.nentries) + del inputFile + except: + logger.warning("Unable to open file [%s]"%inFile) + logger.warning('caught:\n%s',err) + import traceback + traceback.print_exc() + logger.info('Number of signal events (read from files) = %s.', nSignalEvts ) + + nBkgEventsPerFile = 5000 + try: + import PyUtils.AthFile as athFile + inputFile = athFile.fopen(initialList[0]) + nBkgEventsPerFile = int(inputFile.nentries) + logger.info('Number of background events per file (read from file) = %s.', nBkgEventsPerFile ) + del inputFile + except: + import traceback + traceback.print_exc() + logger.warning('Failed to count the number of background events in %s. Assuming 5000 - if this is an overestimate the job may die.', initialList[0]) + + from Digitization.DigitizationFlags import digitizationFlags + from AthenaCommon.BeamFlags import jobproperties + Nbunches = 1 + digitizationFlags.finalBunchCrossing.get_Value() - digitizationFlags.initialBunchCrossing.get_Value() + nbunches = int(Nbunches) + if correctForEmptyBunchCrossings: + nbunches = int(math.ceil(float(nbunches) * float(digitizationFlags.bunchSpacing.get_Value())/float(jobproperties.Beam.bunchSpacing.get_Value()))) + logger.info('Simulating a maximum of %s colliding-bunch crossings (%s colliding+non-colliding total) per signal event', nbunches, Nbunches) + nBkgEventsForJob = pileUpCalc(float(nSignalEvts), 1.0, float(nBkgEvtsPerCrossing), nbunches) + logger.info('Number of background events required: %s. Number of background events in input files: %s', nBkgEventsForJob, (nBkgEventsPerFile*len(initialList)) ) + numberOfRepetitionsRequired =float(nBkgEventsForJob)/float(nBkgEventsPerFile*len(initialList)) + NumberOfRepetitionsRequired = 1 + int(math.ceil(numberOfRepetitionsRequired)) + for i in range(0, NumberOfRepetitionsRequired): + uberList+=initialList + logger.info('Expanding input list from %s to %s', len(initialList), len(uberList)) + return uberList + + ### Add Argument Methods def addCommonSimDigArguments(parser): from SimuJobTransforms.simTrfArgs import addForwardDetTrfArgs, addCommonSimDigTrfArgs diff --git a/Simulation/SimuJobTransforms/python/simTrfArgs.py b/Simulation/SimuJobTransforms/python/simTrfArgs.py index 9090f0f939eac4dcf6648525515f63a996cd0288..4d5cef0995cb4002bcb9b2d730e8c12dd8e3b8c9 100644 --- a/Simulation/SimuJobTransforms/python/simTrfArgs.py +++ b/Simulation/SimuJobTransforms/python/simTrfArgs.py @@ -80,19 +80,19 @@ def addPileUpTrfArgs(parser): type=argFactory(argBool), help='Calculates the number of background events that will be require for a given pile-up configuration.', group='PileUp') parser.add_argument('--inputLowPtMinbiasHitsFile','--LowPtMinbiasHitsFile', nargs='+', - type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True), + type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True), help='Input HITS file for low pT minimum bias pile-up sub-events', group='PileUp') parser.add_argument('--inputHighPtMinbiasHitsFile','--HighPtMinbiasHitsFile', nargs='+', - type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True), + type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True), help='Input HITS file for high pT minimum bias pile-up sub-events', group='PileUp') parser.add_argument('--inputCavernHitsFile', '--cavernHitsFile', nargs='+', - type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True), + type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True), help='Input HITS file for cavern background sub-events', group='PileUp') parser.add_argument('--inputBeamHaloHitsFile', '--beamHaloHitsFile', nargs='+', - type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True), + type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True), help='Input HITS file for beam halo sub-events', group='PileUp'), parser.add_argument('--inputBeamGasHitsFile', '--beamGasHitsFile', nargs='+', - type=argFactory(argHITSFile, io='input', executor=['HITtoRDO'], auxiliaryFile=True), + type=argFactory(argHITSFile, io='input', executor=['EVNTtoRDO','HITtoRDO'], auxiliaryFile=True), help='Input HITS file for beam gas sub-events', group='PileUp') parser.add_argument('--numberOfLowPtMinBias', type=argFactory(argFloat), diff --git a/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py b/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py index 99c927fbe18e85a82bfabab416bbcbd1680596c7..b1b644756b8fc4dd53e7d4ce6ff56142bfe4b460 100644 --- a/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py +++ b/Simulation/SimuJobTransforms/share/skeleton.HITtoRDO.py @@ -123,10 +123,7 @@ del PileUpConfigOverride #-------------------------------------------------------------- # Test Pile-up configuration #-------------------------------------------------------------- -def pileUpCalc(nSignalEvts, refreshRate, nSubEvtPerBunch,nBunches): - totalSubEvts = nBunches*nSubEvtPerBunch - totalSubEvts += totalSubEvts*refreshRate*nSignalEvts - return totalSubEvts +from SimuJobTransforms.SimTransformUtils import pileUpCalc if hasattr(runArgs,"testPileUpConfig"): nSignalEvts=1000 if (athenaCommonFlags.EvtMax>0): @@ -206,6 +203,7 @@ if hasattr(runArgs,"PileUpPremixing"): #-------------------------------------------------------------- # Pileup configuration #-------------------------------------------------------------- +from SimuJobTransforms.SimTransformUtils import makeBkgInputCol def HasInputFiles(runArgs, key): if hasattr(runArgs, key): cmd='runArgs.%s' % key @@ -213,57 +211,6 @@ def HasInputFiles(runArgs, key): return True return False -def makeBkgInputCol(initialList, nBkgEvtsPerCrossing, correctForEmptyBunchCrossings): - uberList = [] - refreshrate = 1.0 - - nSignalEvts = 1000 - from AthenaCommon.AthenaCommonFlags import athenaCommonFlags - if (athenaCommonFlags.EvtMax.get_Value()>0): - nSignalEvts = int(athenaCommonFlags.EvtMax.get_Value()) - digilog.info('Number of signal events (from athenaCommonFlags.EvtMax) = %s.', nSignalEvts ) - else: - nSignalEvts = 0 - import PyUtils.AthFile as athFile - for inFile in athenaCommonFlags.PoolHitsInput.get_Value(): - try: - inputFile = athFile.fopen(inFile) - nSignalEvts += int(inputFile.nentries) - del inputFile - except: - digilog.warning("Unable to open file [%s]"%inFile) - digilog.warning('caught:\n%s',err) - import traceback - traceback.print_exc() - digilog.info('Number of signal events (read from files) = %s.', nSignalEvts ) - - nBkgEventsPerFile = 5000 - try: - import PyUtils.AthFile as athFile - inputFile = athFile.fopen(initialList[0]) - nBkgEventsPerFile = int(inputFile.nentries) - digilog.info('Number of background events per file (read from file) = %s.', nBkgEventsPerFile ) - del inputFile - except: - import traceback - traceback.print_exc() - digilog.warning('Failed to count the number of background events in %s. Assuming 5000 - if this is an overestimate the job may die.', initialList[0]) - - from Digitization.DigitizationFlags import digitizationFlags - from AthenaCommon.BeamFlags import jobproperties - Nbunches = 1 + digitizationFlags.finalBunchCrossing.get_Value() - digitizationFlags.initialBunchCrossing.get_Value() - nbunches = int(Nbunches) - if correctForEmptyBunchCrossings: - nbunches = int(math.ceil(float(nbunches) * float(digitizationFlags.bunchSpacing.get_Value())/float(jobproperties.Beam.bunchSpacing.get_Value()))) - digilog.info('Simulating a maximum of %s colliding-bunch crossings (%s colliding+non-colliding total) per signal event', nbunches, Nbunches) - nBkgEventsForJob = pileUpCalc(float(nSignalEvts), 1.0, float(nBkgEvtsPerCrossing), nbunches) - digilog.info('Number of background events required: %s. Number of background events in input files: %s', nBkgEventsForJob, (nBkgEventsPerFile*len(initialList)) ) - numberOfRepetitionsRequired =float(nBkgEventsForJob)/float(nBkgEventsPerFile*len(initialList)) - NumberOfRepetitionsRequired = 1 + int(math.ceil(numberOfRepetitionsRequired)) - for i in range(0, NumberOfRepetitionsRequired): - uberList+=initialList - digilog.info('Expanding input list from %s to %s', len(initialList), len(uberList)) - return uberList ## Low Pt minbias set-up bkgArgName="LowPtMinbiasHitsFile" @@ -272,7 +219,7 @@ if hasattr(runArgs, "inputLowPtMinbiasHitsFile"): if HasInputFiles(runArgs, bkgArgName): exec("bkgArg = runArgs."+bkgArgName) digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg, - digitizationFlags.numberOfLowPtMinBias.get_Value(), True) + digitizationFlags.numberOfLowPtMinBias.get_Value(), True, digilog) if digitizationFlags.LowPtMinBiasInputCols.statusOn: digitizationFlags.doLowPtMinBias = True else: @@ -285,7 +232,7 @@ if hasattr(runArgs, "inputHighPtMinbiasHitsFile"): if HasInputFiles(runArgs, bkgArgName): exec("bkgArg = runArgs."+bkgArgName) digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg, - digitizationFlags.numberOfHighPtMinBias.get_Value(), True) + digitizationFlags.numberOfHighPtMinBias.get_Value(), True, digilog) if digitizationFlags.HighPtMinBiasInputCols.statusOn: digitizationFlags.doHighPtMinBias = True else: @@ -298,7 +245,7 @@ if hasattr(runArgs, "inputCavernHitsFile"): if HasInputFiles(runArgs, bkgArgName): exec("bkgArg = runArgs."+bkgArgName) digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg, - digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value())) + digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), digilog) if digitizationFlags.cavernInputCols.statusOn: digitizationFlags.doCavern = True else: @@ -311,7 +258,7 @@ if hasattr(runArgs, "inputBeamHaloHitsFile"): if HasInputFiles(runArgs, bkgArgName): exec("bkgArg = runArgs."+bkgArgName) digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg, - digitizationFlags.numberOfBeamHalo.get_Value(), True) + digitizationFlags.numberOfBeamHalo.get_Value(), True, digilog) if digitizationFlags.beamHaloInputCols.statusOn: digitizationFlags.doBeamHalo = True else: @@ -324,7 +271,7 @@ if hasattr(runArgs, "inputBeamGasHitsFile"): if HasInputFiles(runArgs, bkgArgName): exec("bkgArg = runArgs."+bkgArgName) digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg, - digitizationFlags.numberOfBeamGas.get_Value(), True) + digitizationFlags.numberOfBeamGas.get_Value(), True, digilog) if digitizationFlags.beamGasInputCols.statusOn: digitizationFlags.doBeamGas = True else: diff --git a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py index fde12ad917fc9652f1a5bcb27957abf75fc7d78e..c43037791feb8839969b2120bb75e5811903def1 100644 --- a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py +++ b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py @@ -1143,6 +1143,79 @@ if hasattr(runArgs,"digiSteeringConf"): #-------------------------------------------------------------- # Pileup configuration - removed as pileup will be handled on-the-fly #-------------------------------------------------------------- +from SimuJobTransforms.SimTransformUtils import makeBkgInputCol +def HasInputFiles(runArgs, key): + if hasattr(runArgs, key): + cmd='runArgs.%s' % key + if eval(cmd): + return True + return False + +## Low Pt minbias set-up +bkgArgName="LowPtMinbiasHitsFile" +if hasattr(runArgs, "inputLowPtMinbiasHitsFile"): + bkgArgName="inputLowPtMinbiasHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfLowPtMinBias.get_Value(), True, fast_chain_log) +if digitizationFlags.LowPtMinBiasInputCols.statusOn: + digitizationFlags.doLowPtMinBias = True +else: + digitizationFlags.doLowPtMinBias = False + +## High Pt minbias set-up +bkgArgName="HighPtMinbiasHitsFile" +if hasattr(runArgs, "inputHighPtMinbiasHitsFile"): + bkgArgName="inputHighPtMinbiasHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfHighPtMinBias.get_Value(), True, fast_chain_log) +if digitizationFlags.HighPtMinBiasInputCols.statusOn: + digitizationFlags.doHighPtMinBias = True +else: + digitizationFlags.doHighPtMinBias = False + +## Cavern Background set-up +bkgArgName="cavernHitsFile" +if hasattr(runArgs, "inputCavernHitsFile"): + bkgArgName="inputCavernHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), fast_chain_log) +if digitizationFlags.cavernInputCols.statusOn: + digitizationFlags.doCavern = True +else: + digitizationFlags.doCavern = False + +## Beam Halo set-up +bkgArgName="beamHaloHitsFile" +if hasattr(runArgs, "inputBeamHaloHitsFile"): + bkgArgName="inputBeamHaloHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfBeamHalo.get_Value(), True, fast_chain_log) +if digitizationFlags.beamHaloInputCols.statusOn: + digitizationFlags.doBeamHalo = True +else: + digitizationFlags.doBeamHalo = False + +## Beam Gas set-up +bkgArgName="beamGasHitsFile" +if hasattr(runArgs, "inputBeamGasHitsFile"): + bkgArgName="inputBeamGasHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfBeamGas.get_Value(), True, fast_chain_log) +if digitizationFlags.beamGasInputCols.statusOn: + digitizationFlags.doBeamGas = True +else: + digitizationFlags.doBeamGas = False + #-------------------------------------------------------------- # Other configuration: LVL1, turn off sub detectors, calo noise diff --git a/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py index 422b4986599d50f436e4e5c101c385071daaf692..cd7c1567779805e393684743d2769047cde9f0a8 100644 --- a/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py +++ b/Tools/FullChainTransforms/share/skeleton.EVGENtoRDO.py @@ -338,6 +338,78 @@ if hasattr(runArgs,"digiSteeringConf"): #-------------------------------------------------------------- # Pileup configuration - removed as pileup will be handled on-the-fly #-------------------------------------------------------------- +from SimuJobTransforms.SimTransformUtils import makeBkgInputCol +def HasInputFiles(runArgs, key): + if hasattr(runArgs, key): + cmd='runArgs.%s' % key + if eval(cmd): + return True + return False + +## Low Pt minbias set-up +bkgArgName="LowPtMinbiasHitsFile" +if hasattr(runArgs, "inputLowPtMinbiasHitsFile"): + bkgArgName="inputLowPtMinbiasHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.LowPtMinBiasInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfLowPtMinBias.get_Value(), True, fast_chain_log) +if digitizationFlags.LowPtMinBiasInputCols.statusOn: + digitizationFlags.doLowPtMinBias = True +else: + digitizationFlags.doLowPtMinBias = False + +## High Pt minbias set-up +bkgArgName="HighPtMinbiasHitsFile" +if hasattr(runArgs, "inputHighPtMinbiasHitsFile"): + bkgArgName="inputHighPtMinbiasHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.HighPtMinBiasInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfHighPtMinBias.get_Value(), True, fast_chain_log) +if digitizationFlags.HighPtMinBiasInputCols.statusOn: + digitizationFlags.doHighPtMinBias = True +else: + digitizationFlags.doHighPtMinBias = False + +## Cavern Background set-up +bkgArgName="cavernHitsFile" +if hasattr(runArgs, "inputCavernHitsFile"): + bkgArgName="inputCavernHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.cavernInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfCavern.get_Value(), (not digitizationFlags.cavernIgnoresBeamInt.get_Value()), fast_chain_log) +if digitizationFlags.cavernInputCols.statusOn: + digitizationFlags.doCavern = True +else: + digitizationFlags.doCavern = False + +## Beam Halo set-up +bkgArgName="beamHaloHitsFile" +if hasattr(runArgs, "inputBeamHaloHitsFile"): + bkgArgName="inputBeamHaloHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.beamHaloInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfBeamHalo.get_Value(), True, fast_chain_log) +if digitizationFlags.beamHaloInputCols.statusOn: + digitizationFlags.doBeamHalo = True +else: + digitizationFlags.doBeamHalo = False + +## Beam Gas set-up +bkgArgName="beamGasHitsFile" +if hasattr(runArgs, "inputBeamGasHitsFile"): + bkgArgName="inputBeamGasHitsFile" +if HasInputFiles(runArgs, bkgArgName): + exec("bkgArg = runArgs."+bkgArgName) + digitizationFlags.beamGasInputCols = makeBkgInputCol(bkgArg, + digitizationFlags.numberOfBeamGas.get_Value(), True, fast_chain_log) +if digitizationFlags.beamGasInputCols.statusOn: + digitizationFlags.doBeamGas = True +else: + digitizationFlags.doBeamGas = False #-------------------------------------------------------------- # Other configuration: LVL1, turn off sub detectors, calo noise