3 """ Instantiate more custom track isolation in derivation 
    6 from AthenaCommon.Logging 
import logging
 
    7 from AthenaConfiguration.ComponentAccumulator 
import ComponentAccumulator
 
    8 from AthenaConfiguration.ComponentFactory 
import CompFactory
 
   12     mlog = logging.getLogger(
'DerivationTrackIsoConfig')
 
   13     mlog.info(
'Starting track isolation for derivation')
 
   17     from xAODPrimitives.xAODIso 
import xAODIso 
as isoPar
 
   19     ptcone_list = [ [ isoPar.ptcone40, isoPar.ptcone30, isoPar.ptcone20 ] ]
 
   20     trkcor_list = [ [ isoPar.coreTrackPtr ] ]
 
   22     if 'object_types' not in jwarg:
 
   23         object_types = (
"Electrons", 
"Photons", 
"Muons")
 
   25         object_types = jwarg[
'object_types']
 
   28         WP = 
'Nonprompt_All_MaxWeight' 
   33         from TrackVertexAssociationTool.TrackVertexAssociationToolConfig 
import isoTTVAToolCfg
 
   34         ttvaCA = acc.popToolsAndMerge(
 
   38     if 'postfix' in jwarg:
 
   39         postfix = jwarg[
'postfix']
 
   41     if 'ptCuts' not in jwarg:
 
   44         ptCuts = jwarg[
'ptCuts']
 
   46     do_egamma = any(x 
in object_types 
for x 
in (
"Electrons", 
"Photons"))
 
   48     mlog.info(
'will isolate objects '+
" ".
join(object_types)+
' with TTVA WP = '+WP)
 
   50     for track_pt 
in ptCuts:
 
   51         for loose_cone 
in (
True, 
False):
 
   52             if loose_cone 
and not do_egamma:
 
   56             cone_str = 
"LooseCone" if loose_cone 
else "" 
   59             name = f
"{WP}TTVA{cone_str}_pt{track_pt}" 
   63             if "Electrons" in object_types:
 
   64                 kwargs[
"ElIsoTypes"] = ptcone_list
 
   65                 kwargs[
"ElCorTypes"] = trkcor_list
 
   66                 kwargs[
"ElCorTypesExtra"] = [[]]
 
   67                 kwargs[
"CustomConfigurationNameEl"] = name
 
   68             if "Electrons" in object_types 
and "LRT" in postfix:
 
   69                 kwargs[
"ElectronCollectionContainerName"] = 
"LRTElectrons" 
   70             if "Photons" in object_types:
 
   71                 kwargs[
"PhIsoTypes"] = ptcone_list
 
   72                 kwargs[
"PhCorTypes"] = trkcor_list
 
   73                 kwargs[
"PhCorTypesExtra"] = [[]]
 
   74                 kwargs[
"CustomConfigurationNamePh"] = name
 
   75             if "Muons" in object_types 
and not loose_cone:
 
   76                 kwargs[
"MuIsoTypes"] = ptcone_list
 
   77                 kwargs[
"MuCorTypes"] = trkcor_list
 
   78                 kwargs[
"MuCorTypesExtra"] = [[]]
 
   79                 kwargs[
"CustomConfigurationNameMu"] = name
 
   80             if "Muons" in object_types 
and not loose_cone 
and "LRT" in postfix:
 
   81                 kwargs[
"MuonCollectionContainerName"] = 
"MuonsLRT" 
   87                 toolkwargs[
'TTVATool'] = ttvaCA
 
   90             from InDetConfig.InDetTrackSelectionToolConfig 
import (
 
   91                 isoTrackSelectionToolCfg )
 
   92             toolkwargs[
'TrackSelectionTool'] = acc.popToolsAndMerge(
 
   96                 toolkwargs[
'CoreTrackEtaRange'] = 0.01
 
   98             from IsolationAlgs.IsoToolsConfig 
import TrackIsolationToolCfg
 
   99             kwargs[
'TrackIsolationTool'] = acc.popToolsAndMerge(
 
  103             kwargs[
'name'] = f
"IsolationBuilder{WP}{cone_str}{track_pt}{postfix}" 
  104             acc.addEventAlgo(CompFactory.IsolationBuilder(**kwargs))
 
  111     for track_pt 
in 500, 1000:
 
  112         for cone_str 
in "", 
"LooseCone":
 
  113             name = f
"{WP}TTVA{cone_str}_pt{track_pt}" 
  114             iso_vars += [ 
"ptconeCorrBitset_"+name,
 
  115                              "ptconecoreTrackPtrCorrection_"+name ]
 
  116             for cone_size 
in 20, 30, 40:
 
  117                 for var_str 
in "", 
"var":
 
  118                     iso_vars.append(f
"pt{var_str}cone{cone_size}_{name}")
 
  121 if __name__ == 
"__main__":
 
  122     from AthenaConfiguration.AllConfigFlags 
import initConfigFlags
 
  123     from AthenaConfiguration.ComponentAccumulator 
import printProperties
 
  124     from AthenaConfiguration.TestDefaults 
import defaultTestFiles
 
  125     from AthenaConfiguration.MainServicesConfig 
import MainServicesCfg
 
  127     flags.Input.Files = defaultTestFiles.RDO_RUN2
 
  128     flags.Output.doWriteESD = 
True   
  129     flags.Output.doWriteAOD = 
True   
  132     mlog = logging.getLogger(
"derivationTrackIsolationConfigTest")
 
  133     mlog.info(
"Configuring derivation track isolation: ")
 
  138     for par 
in (
'500', 
'1000', 
'LooseCone1000'):
 
  139         print(
'------ Config for ',par,
' ----------')
 
  140         name = 
"IsolationBuilderNonprompt_All_MaxWeight"+par
 
  142                         acc.getEventAlgo(name),