diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py index 36ba4f89e7ef2935e98d26f97e395c0111b000e2..85e84c5a83c31b7ba847818104c94052e4afe63f 100644 --- a/Simulation/Digitization/python/DigiAlgConfig.py +++ b/Simulation/Digitization/python/DigiAlgConfig.py @@ -128,6 +128,82 @@ def getSplitInDetPileUpTools(): PileUpToolsList += [ "TRTDigitizationToolPU" ] return PileUpToolsList +def getSplitNoMergeInDetPileUpTools(): + """ This is for testing the fast chain with full digitization in split PU mode without +merging pileup + """ + from AthenaCommon.DetFlags import DetFlags + PileUpToolsList = [] + if DetFlags.digitize.BCM_on(): + PileUpToolsList += [ "BCM_DigitizationTool" ] + if DetFlags.digitize.pixel_on(): + PileUpToolsList += [ "PixelDigitizationTool" ] + PileUpToolsList += [ "PixelDigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.SCT_on(): + PileUpToolsList += [ "SCT_DigitizationTool" ] + PileUpToolsList += [ "SCT_DigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.TRT_on(): + PileUpToolsList += [ "TRTDigitizationTool" ] + PileUpToolsList += [ "TRTDigitizationToolSplitNoMergePU" ] + return PileUpToolsList + +def getSplitNoMergeSFInDetPileUpTools(): + """ This is for testing the fast chain with full digitization in split PU mode without +merging pileup + """ + from AthenaCommon.DetFlags import DetFlags + PileUpToolsList = [] + if DetFlags.digitize.BCM_on(): + PileUpToolsList += [ "BCM_DigitizationTool" ] + if DetFlags.digitize.pixel_on(): + PileUpToolsList += [ "PixelDigitizationTool" ] + PileUpToolsList += [ "PixelFastDigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.SCT_on(): + PileUpToolsList += [ "SCT_DigitizationTool" ] + PileUpToolsList += [ "SCT_FastDigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.TRT_on(): + PileUpToolsList += [ "TRTDigitizationTool" ] + PileUpToolsList += [ "TRTFastDigitizationToolSplitNoMergePU" ] + return PileUpToolsList + +def getSplitNoMergeFSInDetPileUpTools(): + """ This is for testing the fast chain with full digitization in split PU mode without +merging pileup + """ + from AthenaCommon.DetFlags import DetFlags + PileUpToolsList = [] + if DetFlags.digitize.BCM_on(): + PileUpToolsList += [ "BCM_DigitizationTool" ] + if DetFlags.digitize.pixel_on(): + PileUpToolsList += [ "PixelFastDigitizationTool" ] + PileUpToolsList += [ "PixelDigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.SCT_on(): + PileUpToolsList += [ "SCT_FastDigitizationTool" ] + PileUpToolsList += [ "SCT_DigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.TRT_on(): + PileUpToolsList += [ "TRTFastDigitizationTool" ] + PileUpToolsList += [ "TRTDigitizationToolSplitNoMergePU" ] + return PileUpToolsList + +def getSplitNoMergeFFInDetPileUpTools(): + """ This is for testing the fast chain with full digitization in split PU mode without +merging pileup + """ + from AthenaCommon.DetFlags import DetFlags + PileUpToolsList = [] + if DetFlags.digitize.BCM_on(): + PileUpToolsList += [ "BCM_DigitizationTool" ] + if DetFlags.digitize.pixel_on(): + PileUpToolsList += [ "PixelFastDigitizationTool" ] + PileUpToolsList += [ "PixelFastDigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.SCT_on(): + PileUpToolsList += [ "SCT_FastDigitizationTool" ] + PileUpToolsList += [ "SCT_FastDigitizationToolSplitNoMergePU" ] + if DetFlags.digitize.TRT_on(): + PileUpToolsList += [ "TRTFastDigitizationTool" ] + PileUpToolsList += [ "TRTFastDigitizationToolSplitNoMergePU" ] + return PileUpToolsList + def getStandardCaloPileUpTools(): from AthenaCommon.DetFlags import DetFlags PileUpToolsList = [] @@ -234,6 +310,70 @@ def getSplitPileUpToolsList(): PileUpToolsList += [ "MergeRecoTimingObjTool" ] return PileUpToolsList +def getSplitNoMergePileUpToolsList(): + PileUpToolsList = [] + ## Truth information + PileUpToolsList += getStandardTruthPileUpTools() + ## Forward Detector Digitization + PileUpToolsList += getStandardForwardPileUpTools() + ## Inner Detector Digitization - non-standard + PileUpToolsList += getSplitNoMergeInDetPileUpTools() + ## Calo Digitization + PileUpToolsList += getStandardCaloPileUpTools() + ## Muon System Digitization + PileUpToolsList += getStandardMuonPileUpTools() + ## RecoTimingObj + PileUpToolsList += [ "MergeRecoTimingObjTool" ] + return PileUpToolsList + +def getSplitNoMergeSFPileUpToolsList(): + PileUpToolsList = [] + ## Truth information + PileUpToolsList += getStandardTruthPileUpTools() + ## Forward Detector Digitization + PileUpToolsList += getStandardForwardPileUpTools() + ## Inner Detector Digitization - non-standard + PileUpToolsList += getSplitNoMergeSFInDetPileUpTools() + ## Calo Digitization + PileUpToolsList += getStandardCaloPileUpTools() + ## Muon System Digitization + PileUpToolsList += getStandardMuonPileUpTools() + ## RecoTimingObj + PileUpToolsList += [ "MergeRecoTimingObjTool" ] + return PileUpToolsList + +def getSplitNoMergeFSPileUpToolsList(): + PileUpToolsList = [] + ## Truth information + PileUpToolsList += getStandardTruthPileUpTools() + ## Forward Detector Digitization + PileUpToolsList += getStandardForwardPileUpTools() + ## Inner Detector Digitization - non-standard + PileUpToolsList += getSplitNoMergeFSInDetPileUpTools() + ## Calo Digitization + PileUpToolsList += getStandardCaloPileUpTools() + ## Muon System Digitization + PileUpToolsList += getStandardMuonPileUpTools() + ## RecoTimingObj + PileUpToolsList += [ "MergeRecoTimingObjTool" ] + return PileUpToolsList + +def getSplitNoMergeFFPileUpToolsList(): + PileUpToolsList = [] + ## Truth information + PileUpToolsList += getStandardTruthPileUpTools() + ## Forward Detector Digitization + PileUpToolsList += getStandardForwardPileUpTools() + ## Inner Detector Digitization - non-standard + PileUpToolsList += getSplitNoMergeFFInDetPileUpTools() + ## Calo Digitization + PileUpToolsList += getStandardCaloPileUpTools() + ## Muon System Digitization + PileUpToolsList += getStandardMuonPileUpTools() + ## RecoTimingObj + PileUpToolsList += [ "MergeRecoTimingObjTool" ] + return PileUpToolsList + def getStandardPileUpToolsAlg(name="StandardPileUpToolsAlg", **kwargs): kwargs.setdefault('PileUpTools', getStandardPileUpToolsList() ) from Digitization.DigitizationFlags import digitizationFlags @@ -283,3 +423,23 @@ def getStandardInTimeOnlyTruthPileUpToolsAlg(name="StandardInTimeOnlyTruthPileUp else: from PileUpComps.PileUpCompsConf import DigitizationAlg return DigitizationAlg(name, **kwargs) + +def getSplitNoMergePileUpToolsAlg(name="SplitNoMergePileUpToolsAlg", **kwargs): + kwargs.setdefault('PileUpTools', getSplitNoMergePileUpToolsList() ) + from PileUpComps.PileUpCompsConf import DigitizationAlg + return DigitizationAlg(name, **kwargs) + +def getSplitNoMergeSFPileUpToolsAlg(name="SplitNoMergeSFPileUpToolsAlg", **kwargs): + kwargs.setdefault('PileUpTools', getSplitNoMergeSFPileUpToolsList() ) + from PileUpComps.PileUpCompsConf import DigitizationAlg + return DigitizationAlg(name, **kwargs) + +def getSplitNoMergeFSPileUpToolsAlg(name="SplitNoMergeFSPileUpToolsAlg", **kwargs): + kwargs.setdefault('PileUpTools', getSplitNoMergeFSPileUpToolsList() ) + from PileUpComps.PileUpCompsConf import DigitizationAlg + return DigitizationAlg(name, **kwargs) + +def getSplitNoMergeFFPileUpToolsAlg(name="SplitNoMergeFFPileUpToolsAlg", **kwargs): + kwargs.setdefault('PileUpTools', getSplitNoMergeFFPileUpToolsList() ) + from PileUpComps.PileUpCompsConf import DigitizationAlg + return DigitizationAlg(name, **kwargs) diff --git a/Simulation/Digitization/python/DigitizationConfigDb.py b/Simulation/Digitization/python/DigitizationConfigDb.py index 18019027adf59f69ff3b3a4db7ed153e11feb9f6..c55668f0e0241817b87d6c46d5e73e2497d51401 100644 --- a/Simulation/Digitization/python/DigitizationConfigDb.py +++ b/Simulation/Digitization/python/DigitizationConfigDb.py @@ -29,12 +29,9 @@ addAlgorithm("Digitization.DigiAlgConfig.getFastPileUpToolsAlg" , "FastPile addAlgorithm("Digitization.DigiAlgConfig.getSplitPileUpToolsAlg" , "SplitPileUpToolsAlg") addAlgorithm("Digitization.DigiAlgConfig.getStandardSignalOnlyTruthPileUpToolsAlg" , "StandardSignalOnlyTruthPileUpToolsAlg") addAlgorithm("Digitization.DigiAlgConfig.getStandardInTimeOnlyTruthPileUpToolsAlg" , "StandardInTimeOnlyTruthPileUpToolsAlg") +addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergePileUpToolsAlg" , "SplitNoMergePileUpToolsAlg") +addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergeSFPileUpToolsAlg" , "SplitNoMergeSFPileUpToolsAlg") +addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergeFSPileUpToolsAlg" , "SplitNoMergeFSPileUpToolsAlg") +addAlgorithm("Digitization.DigiAlgConfig.getSplitNoMergeFFPileUpToolsAlg" , "SplitNoMergeFFPileUpToolsAlg") addService("Digitization.PileUpMergeSvcConfig.getPileUpMergeSvc" , "PileUpMergeSvc") -## addTool("Digitization.PileUpMergeSvcConfig.getALFARange" , "ALFARange" ) -## addTool("Digitization.PileUpMergeSvcConfig.getTRTRange" , "TRTRange") -## addTool("Digitization.PileUpMergeSvcConfig.getLArRangeEM" , "LArRangeEM") -## addTool("Digitization.PileUpMergeSvcConfig.getLArRangeHEC" , "LArRangeHEC") -## addTool("Digitization.PileUpMergeSvcConfig.getLArRangeFCAL" , "LArRangeFCAL") -## addTool("Digitization.PileUpMergeSvcConfig.getsTgcRange" , "sTgcRange") -## addTool("Digitization.PileUpMergeSvcConfig.getMmRange" , "MmRange") diff --git a/Simulation/Digitization/python/DigitizationFlags.py b/Simulation/Digitization/python/DigitizationFlags.py index d9e10f2c638930f12fa6ca2e6300539989efda59..a72d46cd5cbcf0bec33884919c78778a03f1bf19 100755 --- a/Simulation/Digitization/python/DigitizationFlags.py +++ b/Simulation/Digitization/python/DigitizationFlags.py @@ -40,6 +40,16 @@ class rndmSeedList(JobProperty): allowedTypes=['list'] StoredValue= [] + def checkForExistingSeed(self, name): + """Ensure that each stream is only initialized once""" + found = False + seedlist = self.get_Value() + for iseed in seedlist: + found = iseed.startswith(name+" ") + if found: + break + return found + def addSeed( self, name, seed1, seed2 ): """Add seeds to internal seedlist. Seeds will be incremented by offset values """ @@ -50,12 +60,7 @@ class rndmSeedList(JobProperty): logDigitizationFlags.info("Adding Digitization random number seed '" + newseed + "'") #ensure each stream only initialized once - found = False - for iseed in seedlist: - found = iseed.startswith(name+" ") - if found: - break - + found = self.checkForExistingSeed(name) if found: logDigitizationFlags.error ("Initialization values for random number stream " + name + " already exist!") else: diff --git a/Simulation/Digitization/python/RunDependentMCTaskIterator.py b/Simulation/Digitization/python/RunDependentMCTaskIterator.py index bcdde770c87e2d50410b976891766e8272fc762b..cf14c1743e3536c03fccddb7a9ac1d3624461d96 100644 --- a/Simulation/Digitization/python/RunDependentMCTaskIterator.py +++ b/Simulation/Digitization/python/RunDependentMCTaskIterator.py @@ -24,8 +24,12 @@ def getRunLumiInfoFragment(jobnumber,task,maxEvents): else: hiMaxEvents=int((maxEvents-1)/2) loMaxEvents=int((maxEvents+1)/2) - hi_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu'],reverse=True),hiMaxEvents) - lo_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu']),loMaxEvents) + hi_mu_frag=[] + lo_mu_frag=[] + if hiMaxEvents > 0: + 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']) def getFragment(jobnumber,task,maxEvents): diff --git a/Simulation/Digitization/share/Digitization.py b/Simulation/Digitization/share/Digitization.py index d4d9c104784a14839a84085328d34772ecfae208..de55df25ce8c4a879b9c3950991e65e6584a0b01 100755 --- a/Simulation/Digitization/share/Digitization.py +++ b/Simulation/Digitization/share/Digitization.py @@ -49,6 +49,11 @@ else : DetFlags.Truth_setOn() DetFlags.LVL1_setOn() +checkOverlay = getattr(DetFlags, 'overlay', None) +if checkOverlay is not None: + DetFlags.overlay.all_setOff() +else: + logDigitization_flags.warning( 'DetFlags.overlay is not supported in this release' ) DetFlags.simulate.all_setOff() DetFlags.makeRIO.all_setOff() DetFlags.writeBS.all_setOff()