Skip to content
Snippets Groups Projects
Commit 2dc4259c authored by Edward Moyse's avatar Edward Moyse
Browse files

Merge branch 'ModularisedFTAGInMaster' into 'master'

AFT-509: New modularised FTAG code in official reconstruction

See merge request atlas/athena!37217
parents b2ad187d 569af893
No related branches found
No related tags found
No related merge requests found
...@@ -149,17 +149,49 @@ def PrepareStandAloneBTagCfg(inputFlags): ...@@ -149,17 +149,49 @@ def PrepareStandAloneBTagCfg(inputFlags):
return result return result
def BTagRecoSplitCfg(inputFlags, JetCollection = ['AntiKt4EMTopo'], **kwargs):
result=ComponentAccumulator()
taggerList = inputFlags.BTagging.run2TaggersList
result.merge(JetTagCalibCfg(inputFlags, TaggerList = taggerList, **kwargs))
secVertexingAndAssociators = {'JetFitter':'BTagTrackToJetAssociator','SV1':'BTagTrackToJetAssociator'}
result.merge(JetBTaggerSplitAlgsCfg(inputFlags, JetCollection = JetCollection[0], TaggerList = taggerList, SecVertexingAndAssociators = secVertexingAndAssociators, **kwargs))
from AthenaCommon.ConcurrencyFlags import jobproperties
if jobproperties.ConcurrencyFlags.NumThreads() == 0 :
for el in result._allSequences:
el.name = "TopAlg"
return result
def BTagRecoCfg(inputFlags, JetCollection = ['AntiKt4EMTopo'], **kwargs):
result=ComponentAccumulator()
taggerList = inputFlags.BTagging.run2TaggersList
result.merge(JetTagCalibCfg(inputFlags, TaggerList = taggerList, **kwargs))
result.merge(JetBTaggerAlgCfg(inputFlags, JetCollection = JetCollection[0], PrimaryVertexCollectionName="PrimaryVertices", TaggerList = taggerList, **kwargs))
from AthenaCommon.ConcurrencyFlags import jobproperties
if jobproperties.ConcurrencyFlags.NumThreads() == 0 :
for el in result._allSequences:
el.name = "TopAlg"
return result
def BTagCfg(inputFlags, JetCollection = [], **kwargs): def BTagCfg(inputFlags, JetCollection = [], **kwargs):
#This is monolithic for now. #This is monolithic for now.
#Once a first complete example runs, this will be split into small modular chunks. #Once a first complete example runs, this will be split into small modular chunks.
#Some such items may be best placed elsewehere (e.g. put magnetic field setup in magnetic field git folder etc)
result=ComponentAccumulator() result=ComponentAccumulator()
timestamp = kwargs.get('TimeStamp', None) timestamp = kwargs.get('TimeStamp', None)
if timestamp: del kwargs['TimeStamp'] if timestamp: del kwargs['TimeStamp']
splitAlg = kwargs.get('SplitAlg', None) splitAlg = kwargs.get('SplitAlg', None)
del kwargs['SplitAlg'] if splitAlg: del kwargs['SplitAlg']
TrainedTaggers = inputFlags.BTagging.run2TaggersList + ['MultiSVbb1','MultiSVbb2'] TrainedTaggers = inputFlags.BTagging.run2TaggersList + ['MultiSVbb1','MultiSVbb2']
result.merge(JetTagCalibCfg(inputFlags, TaggerList = TrainedTaggers, **kwargs)) result.merge(JetTagCalibCfg(inputFlags, TaggerList = TrainedTaggers, **kwargs))
...@@ -203,6 +235,8 @@ def BTagCfg(inputFlags, JetCollection = [], **kwargs): ...@@ -203,6 +235,8 @@ def BTagCfg(inputFlags, JetCollection = [], **kwargs):
result.merge(JetBTaggerSplitAlgsCfg(inputFlags, JetCollection = jet, TaggerList = taggerList, SecVertexingAndAssociators = secVertexingAndAssociators, **kwargs)) result.merge(JetBTaggerSplitAlgsCfg(inputFlags, JetCollection = jet, TaggerList = taggerList, SecVertexingAndAssociators = secVertexingAndAssociators, **kwargs))
else: else:
if kwargs.get('Release', None):
del kwargs['Release']
result.merge(JetBTaggerAlgCfg(inputFlags, JetCollection = jet, PrimaryVertexCollectionName="PrimaryVertices", TaggerList = taggerList, **kwargs)) result.merge(JetBTaggerAlgCfg(inputFlags, JetCollection = jet, PrimaryVertexCollectionName="PrimaryVertices", TaggerList = taggerList, **kwargs))
return result return result
...@@ -225,6 +259,13 @@ def JetBTaggerSplitAlgsCfg(inputFlags, JetCollection="", TaggerList=[], SecVerte ...@@ -225,6 +259,13 @@ def JetBTaggerSplitAlgsCfg(inputFlags, JetCollection="", TaggerList=[], SecVerte
'BTagging/201903/dl1r/antikt4empflow/network.json', 'BTagging/201903/dl1r/antikt4empflow/network.json',
'BTagging/201903/dl1/antikt4empflow/network.json', 'BTagging/201903/dl1/antikt4empflow/network.json',
#'BTagging/201903/dl1rmu/antikt4empflow/network.json', #'BTagging/201903/dl1rmu/antikt4empflow/network.json',
],
'AntiKt4EMTopo': [
#'BTagging/201903/smt/antikt4empflow/network.json',
'BTagging/201903/rnnip/antikt4empflow/network.json',
'BTagging/201903/dl1r/antikt4empflow/network.json',
'BTagging/201903/dl1/antikt4empflow/network.json',
#'BTagging/201903/dl1rmu/antikt4empflow/network.json',
] ]
} }
...@@ -238,8 +279,9 @@ def JetBTaggerSplitAlgsCfg(inputFlags, JetCollection="", TaggerList=[], SecVerte ...@@ -238,8 +279,9 @@ def JetBTaggerSplitAlgsCfg(inputFlags, JetCollection="", TaggerList=[], SecVerte
for assoc in TrackToJetAssociators: for assoc in TrackToJetAssociators:
result.merge(JetParticleAssociationAlgCfg(inputFlags, jet, "InDetTrackParticles", assoc, **kwargs)) result.merge(JetParticleAssociationAlgCfg(inputFlags, jet, "InDetTrackParticles", assoc, **kwargs))
del kwargs['Release'] if kwargs.get('Release', None):
del kwargs['Release']
#Sec vertex finding #Sec vertex finding
for k, v in SecVertexingAndAssociators.items(): for k, v in SecVertexingAndAssociators.items():
...@@ -266,6 +308,7 @@ def JetBTaggerSplitAlgsCfg(inputFlags, JetCollection="", TaggerList=[], SecVerte ...@@ -266,6 +308,7 @@ def JetBTaggerSplitAlgsCfg(inputFlags, JetCollection="", TaggerList=[], SecVerte
if ts == "": if ts == "":
result.merge(RunHighLevelTaggersCfg(inputFlags, jet, 'BTagTrackToJetAssociator', postTagDL2JetToTrainingMap[jet], ts)) result.merge(RunHighLevelTaggersCfg(inputFlags, jet, 'BTagTrackToJetAssociator', postTagDL2JetToTrainingMap[jet], ts))
return result return result
def RunHighLevelTaggersCfg(inputFlags, JetCollection, Associator, TrainingMaps, TimeStamp): def RunHighLevelTaggersCfg(inputFlags, JetCollection, Associator, TrainingMaps, TimeStamp):
...@@ -344,7 +387,6 @@ if __name__=="__main__": ...@@ -344,7 +387,6 @@ if __name__=="__main__":
from AthenaConfiguration.AllConfigFlags import ConfigFlags as cfgFlags from AthenaConfiguration.AllConfigFlags import ConfigFlags as cfgFlags
cfgFlags.Input.isMC=True
cfgFlags.Input.Files= args.filesIn.split(",") cfgFlags.Input.Files= args.filesIn.split(",")
#cfgFlags.Input.isMC=False #cfgFlags.Input.isMC=False
#cfgFlags.Input.Files=["/atlas/guirriec/git-athena/q431_2019-03-02T2147/myESD_2019.pool.root"] #cfgFlags.Input.Files=["/atlas/guirriec/git-athena/q431_2019-03-02T2147/myESD_2019.pool.root"]
...@@ -378,7 +420,8 @@ if __name__=="__main__": ...@@ -378,7 +420,8 @@ if __name__=="__main__":
if args.release == "21.2": if args.release == "21.2":
kwargs["TimeStamp"] = ['201810','201903'] kwargs["TimeStamp"] = ['201810','201903']
kwargs['Release'] = '21' kwargs['Release'] = '21'
kwargs["SplitAlg"] = args.splitAlg if args.splitAlg:
kwargs["SplitAlg"] = args.splitAlg
acc.merge(BTagCfg(cfgFlags, JetCollection = JetCollection, **kwargs)) acc.merge(BTagCfg(cfgFlags, JetCollection = JetCollection, **kwargs))
......
...@@ -14,11 +14,9 @@ def JetBTaggerAlgCfg(ConfigFlags, JetCollection="", PrimaryVertexCollectionName= ...@@ -14,11 +14,9 @@ def JetBTaggerAlgCfg(ConfigFlags, JetCollection="", PrimaryVertexCollectionName=
acc=ComponentAccumulator() acc=ComponentAccumulator()
jetcol = JetCollection jetcol = JetCollection
del options['Release']
# setup the Analysis__BTagTrackAssociation tool # setup the Analysis__BTagTrackAssociation tool
options.setdefault('BTagTrackAssocTool', acc.popToolsAndMerge(BTagTrackAssociationCfg(ConfigFlags, 'TrackAssociation'+ ConfigFlags.BTagging.GeneralToolSuffix, jetcol, TaggerList ))) options.setdefault('BTagTrackAssocTool', acc.popToolsAndMerge(BTagTrackAssociationCfg(ConfigFlags, 'TrackAssociation'+ ConfigFlags.BTagging.GeneralToolSuffix, jetcol, TaggerList )))
options.setdefault('BTagTool', acc.popToolsAndMerge(BTagToolCfg(ConfigFlags, TaggerList, PrimaryVertexCollectionName, SetupScheme))) options.setdefault('BTagTool', acc.popToolsAndMerge(BTagToolCfg(ConfigFlags, TaggerList, PrimaryVertexCollectionName, SetupScheme)))
timestamp = options.get('TimeStamp', None) timestamp = options.get('TimeStamp', None)
...@@ -26,7 +24,7 @@ def JetBTaggerAlgCfg(ConfigFlags, JetCollection="", PrimaryVertexCollectionName= ...@@ -26,7 +24,7 @@ def JetBTaggerAlgCfg(ConfigFlags, JetCollection="", PrimaryVertexCollectionName=
timestamp = [''] timestamp = ['']
else: else:
del options['TimeStamp'] del options['TimeStamp']
for ts in timestamp: for ts in timestamp:
# setup the secondary vertexing tool # setup the secondary vertexing tool
options['BTagSecVertexing'] = acc.popToolsAndMerge(BTagSecVtxToolCfg(ConfigFlags, 'SecVx'+ConfigFlags.BTagging.GeneralToolSuffix, jetcol, TimeStamp = ts, **options)) options['BTagSecVertexing'] = acc.popToolsAndMerge(BTagSecVtxToolCfg(ConfigFlags, 'SecVx'+ConfigFlags.BTagging.GeneralToolSuffix, jetcol, TimeStamp = ts, **options))
...@@ -43,5 +41,5 @@ def JetBTaggerAlgCfg(ConfigFlags, JetCollection="", PrimaryVertexCollectionName= ...@@ -43,5 +41,5 @@ def JetBTaggerAlgCfg(ConfigFlags, JetCollection="", PrimaryVertexCollectionName=
# -- create main BTagging algorithm # -- create main BTagging algorithm
acc.addEventAlgo(JetBTaggerAlg(**options)) acc.addEventAlgo(JetBTaggerAlg(**options))
return acc return acc
...@@ -14,8 +14,7 @@ def JetParticleAssociationAlgCfg(ConfigFlags, JetCollection="", ParticleCollecti ...@@ -14,8 +14,7 @@ def JetParticleAssociationAlgCfg(ConfigFlags, JetCollection="", ParticleCollecti
jetcol = JetCollection jetcol = JetCollection
partcol = ParticleCollection partcol = ParticleCollection
release = options.get('Release', '21')
release = options.get('Release', None)
optionAssoc = {} optionAssoc = {}
if release == '21': if release == '21':
......
...@@ -5,6 +5,7 @@ mlog = logging.getLogger( 'CombinedRec_config' ) ...@@ -5,6 +5,7 @@ mlog = logging.getLogger( 'CombinedRec_config' )
from AthenaCommon.GlobalFlags import globalflags from AthenaCommon.GlobalFlags import globalflags
from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
from RecExConfig.RecFlags import rec from RecExConfig.RecFlags import rec
from RecExConfig.RecAlgsFlags import recAlgs from RecExConfig.RecAlgsFlags import recAlgs
from RecExConfig.ObjKeyStore import objKeyStore from RecExConfig.ObjKeyStore import objKeyStore
...@@ -125,12 +126,21 @@ pdr.flag_domain('btagging') ...@@ -125,12 +126,21 @@ pdr.flag_domain('btagging')
btaggingOK = False btaggingOK = False
if jetOK and rec.doBTagging() and DetFlags.ID_on() and DetFlags.Muon_on(): if jetOK and rec.doBTagging() and DetFlags.ID_on() and DetFlags.Muon_on():
try: try:
from BTagging.BTaggingFlags import BTaggingFlags from AthenaCommon.Configurable import Configurable
protectedInclude( "BTagging/BTagging_jobOptions.py") Configurable.configurableRun3Behavior=1
from AthenaConfiguration.AllConfigFlags import ConfigFlags
# Translate all needed flags from old jobProperties to a new AthConfigFlag Container
from AthenaCommon.AthenaCommonFlags import jobproperties as jps
ConfigFlags.Input.Files = jps.AthenaCommonFlags.FilesInput.get_Value()
ConfigFlags.IOVDb.GlobalTag=globalflags.ConditionsTag()
# Configure BTagging algorithm
from BTagging.BTagRun3Config import BTagRecoSplitCfg
CAtoGlobalWrapper(BTagRecoSplitCfg, ConfigFlags)
except Exception: except Exception:
treatException("Could not set up btagging reconstruction") treatException("Could not set up btagging reconstruction")
btaggingOK=False btaggingOK=False
pass finally:
Configurable.configurableRun3Behavior=0
pass pass
# #
...@@ -182,3 +192,6 @@ else: ...@@ -182,3 +192,6 @@ else:
pdr.flag_domain('caloringer') pdr.flag_domain('caloringer')
if rec.doCaloRinger: if rec.doCaloRinger:
include('CaloRingerAlgs/CaloRinger_jobOptions.py') include('CaloRingerAlgs/CaloRinger_jobOptions.py')
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