Beispiel #1
0
    def test3ToolSvc( self ):
        """Test ToolSvc __iadd__"""
        from AthenaCommon.AppMgr import ToolSvc
        from AthenaCommon.Configurable import ConfigurableAlgTool, ConfigurableService

        t1 = ConfigurableAlgTool('tool1')
        t2 = ConfigurableAlgTool('tool2')
        s1 = ConfigurableService('svc1')

        ## Check silent adding of duplicate
        ToolSvc += t1
        self.assertEqual( ToolSvc.getChildren(), [t1] )
        ToolSvc += t1
        self.assertEqual( ToolSvc.getChildren(), [t1] )
        ToolSvc += [t1,t2]
        self.assertEqual( ToolSvc.getChildren(), [t1,t2] )

        ## Check type checking
        with self.assertRaises(TypeError):
            ToolSvc += s1

        with self.assertRaises(TypeError):
            ToolSvc += [s1]

        return
Beispiel #2
0
    def test2SetToolProperties(self):
        """Test setting of tool properties"""

        from AthExHelloWorld.AthExHelloWorldConf import HelloAlg
        from AthExHelloWorld.AthExHelloWorldConf import HelloTool

        HelloWorld = HelloAlg('HelloWorld')

        msg1 = "A Private Message!"

        HelloWorld.MyPrivateHelloTool = HelloTool("HelloTool")
        HelloWorld.MyPrivateHelloTool.MyMessage = msg1

        HelloWorld.setup()

        global ToolSvc

        msg2 = "A Public Message!"

        ToolSvc += HelloTool("PublicHello")
        ToolSvc.PublicHello.MyMessage = msg2

        ToolSvc.setup()

        self.assertEqual(HelloWorld.MyPrivateHelloTool.MyMessage, msg1)
        client = HelloWorld.getName(
        ) + '.' + HelloWorld.MyPrivateHelloTool.getName()
        self.assert_(JobOptionsSvc.verify(client, 'MyMessage', msg1))

        self.assertEqual(ToolSvc.PublicHello.MyMessage, msg2)
        self.assert_(
            JobOptionsSvc.verify('ToolSvc.PublicHello', 'MyMessage', msg2))
   def test2SetToolProperties( self ):
      """Test setting of tool properties"""

      from AthExHelloWorld.AthExHelloWorldConf import HelloAlg
      from AthExHelloWorld.AthExHelloWorldConf import HelloTool

      HelloWorld = HelloAlg( 'HelloWorld' )

      msg1 = "A Private Message!"

      HelloWorld.MyPrivateHelloTool = HelloTool( "HelloTool" )
      HelloWorld.MyPrivateHelloTool.MyMessage = msg1

      HelloWorld.setup()

      global ToolSvc

      msg2 = "A Public Message!"

      ToolSvc += HelloTool( "PublicHello" )
      ToolSvc.PublicHello.MyMessage = msg2

      ToolSvc.setup()

      self.assertEqual( HelloWorld.MyPrivateHelloTool.MyMessage, msg1 )
      client = HelloWorld.getName() + '.' + HelloWorld.MyPrivateHelloTool.getName()
      self.assert_( JobOptionsSvc.verify( client, 'MyMessage', msg1 ) )

      self.assertEqual( ToolSvc.PublicHello.MyMessage, msg2 )
      self.assert_( JobOptionsSvc.verify( 'ToolSvc.PublicHello', 'MyMessage', msg2 ) )
Beispiel #4
0
    def __init__(self, name='CaloTrackingGeometryBuilderCond'):

        from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags

        from LArTrackingGeometry.ConfiguredLArVolumeBuilder import ConfiguredLArVolumeBuilder

        # import the ToolSvc
        from AthenaCommon.AppMgr import ToolSvc
        if 'ToolSvc' not in dir():
            ToolSvc = ToolSvc()

        ConfLArVolumeBuilder = ConfiguredLArVolumeBuilder()
        ToolSvc += ConfLArVolumeBuilder

        from TileTrackingGeometry.ConfiguredTileVolumeBuilder import ConfiguredTileVolumeBuilder

        ConfTileVolumeBuilder = ConfiguredTileVolumeBuilder()
        ToolSvc += ConfTileVolumeBuilder

        # The volume helper
        from TrkDetDescrTools.TrkDetDescrToolsConf import Trk__TrackingVolumeHelper
        CaloTrackingVolumeHelper = Trk__TrackingVolumeHelper(
            name='TrackingVolumeHelper')
        ToolSvc += CaloTrackingVolumeHelper

        Calo__CaloTrackingGeometryBuilderCond.__init__(self,name,\
                                                   LArVolumeBuilder = ConfLArVolumeBuilder,\
                                                   TileVolumeBuilder = ConfTileVolumeBuilder,\
                                                   TrackingVolumeHelper = CaloTrackingVolumeHelper,\
                                                   GapLayerEnvelope    = TrkDetFlags.CaloEnvelopeCover(),\
                                                   EntryVolumeName = TrkDetFlags.CaloEntryVolumeName(),\
                                                   ExitVolumeName  = TrkDetFlags.CaloContainerName(),
                                                   MagneticFieldMode = TrkDetFlags.MagneticFieldMode())
    def __init__(self, name='MuonTrackingGeometryBuilder'):

        from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags

        # import the ToolSvc
        from AthenaCommon.AppMgr import ToolSvc
        if 'ToolSvc' not in dir():
            ToolSvc = ToolSvc()

        from MuonTrackingGeometry.MuonTrackingGeometryConf import Muon__MuonStationTypeBuilder
        MuonStationTypeBuilder = Muon__MuonStationTypeBuilder(
            name='MuonStationTypeBuilder')

        ToolSvc += MuonStationTypeBuilder

        # muon active/passive geometry setup
        from MuonTrackingGeometry.MuonTrackingGeometryConf import Muon__MuonStationBuilder
        MuonStationBuilder = Muon__MuonStationBuilder(
            name='MuonStationBuilder')
        ToolSvc += MuonStationBuilder

        from MuonTrackingGeometry.MuonTrackingGeometryConf import Muon__MuonInertMaterialBuilder
        MuonInertMaterialBuilder = Muon__MuonInertMaterialBuilder(
            name='MuonInertMaterialBuilder')
        ToolSvc += MuonInertMaterialBuilder

        Muon__MuonTrackingGeometryBuilder.__init__(self,name,\
                                                   EntryVolumeName=TrkDetFlags.MuonSystemEntryVolumeName(),\
                                                   ExitVolumeName  = TrkDetFlags.MuonSystemContainerName())
Beispiel #6
0
    def __getitem__(self, key, refresh=True):
        if refresh:
            # remove current configuration first, as much as possible, to prevent
            # hysteresis; note that if the user keeps configurables around in the
            # main (or any other) space, a merge will occur
            from AthenaCommon.AlgSequence import AlgSequence

            topSeq = AlgSequence()
            topSeq.removeAll()

            from AthenaCommon.AppMgr import theApp, ServiceMgr, ToolSvc, theAuditorSvc

            theApp._streams.removeAll()
            ServiceMgr.removeAll()
            ToolSvc.removeAll()
            theAuditorSvc.removeAll()

            del topSeq, theApp, ServiceMgr, ToolSvc, theAuditorSvc

        return self._shelve[key]
def tooldiff():
    from AthenaCommon.AppMgr import ToolSvc
    from AthenaCommon.AppMgr import ServiceMgr
    alltools = ToolSvc.getAllChildren()
    alltools += ServiceMgr.getAllChildren()
    toolmap = dict()
    for i in alltools:
        tooltype = i.configurables.keys()[0]
        toolitems = i.configurables.items()
        if toolmap.has_key(tooltype):
            if toolmap[tooltype] != toolitems:
                print '%s seen before' % tooltype,
                print ' and differs'
                print 'previous contents: ', toolmap[tooltype]
                print 'new contents: ', toolitems
        else:
            toolmap[tooltype] = toolitems

    for i in toolmap.keys():
        print ' '
        print ' '
        print '******************************************************************************'
        print 'toolmap key ', i
        print '******************************************************************************'
        if len(toolmap[i]) > 1:
            firsttool = toolmap[i][1]
            prop = firsttool[1].getProperties()
            prop_differ = False
            diff_list = list()
            diffvals = dict()
            diffvals[firsttool] = prop
            for j in toolmap[i]:
                print 'toolmap item ', j
                print j[1]
                print '    '
                if prop != j[1].getProperties():
                    prop_differ = True
                    jprop = j[1].getProperties()
                    diffvals[j[1]] = jprop
                    for p in prop.keys():
                        if prop[p] != jprop[p]:
                            diff_list.append(p)
            if prop_differ:
                print 'Properties differ in ', set(diff_list)
                for kk in diffvals.keys():
                    print kk, diffvals[kk]

        else:
            print 'single item'
        print '******************************************************************************'
def debuglevel(level=2):
    from AthenaCommon.AlgSequence import AlgSequence
    job = AlgSequence()
    if hasattr(job, 'TrigSteer_HLT'):
        steeringEF = job.TrigSteer_HLT
        steeringEF.OutputLevel = level
        import re
        exp = re.compile("EFID|FTF|IDTrig|FTK|L2ID")
        pokus = None
        reftoconf = list()
        reftoname = list()
        for alg in steeringEF.getAllChildren():
            try:
                algname = alg.name()
            except:
                print 'No algname for ', alg
                algname = ''

            if exp.search(algname):
                print algname
                try:
                    alg.OutputLevel = level
                    pokus = alg
                except:
                    pass

            for j in alg.properties().items():
                (aa, ab) = j
                if hasattr(type(ab), '__name__'):
                    nm = type(ab).__name__
                    if nm.find('ToolHandle') > -1 and nm.find(
                            'ToolHandleArray') == -1:
                        print nm
                        reftoconf.append(ab)
                        reftoname.append(ab.getName())

        from AthenaCommon.AppMgr import ToolSvc
        for t in ToolSvc.getAllChildren():
            for it in reftoname:
                if t.getName().find(it) > -1:
                    try:
                        t.OutputLevel = level
                    except:
                        print 'Setting of outputlevel failed for ', t
Beispiel #9
0
    def get_available_trigger_monitoring_tools(self):
        "Get list of currently running trigger-monitoring tools"

        # get list of all tools in ToolSvc
        tool_list = ToolSvc.getAllChildren()

        # list of monitoring tools
        mon_tools = []

        # loop over tools
        for tool in tool_list:

            # skip tools with names that will garble our commands
            # (no TrigMonTools do this)
            # specifically skip tools with scope resolution operators in their names (why do they have these here!?)
            if "::" in tool.getName():
                print "Skipping",tool.getName(),"as its name contains a scope resolution operator '::'."
                continue

            # OLD:
            # find if Trig and Monitoring are in the tool Dll name
            if "Trig" in tool.getDlls() and "Monitoring" in tool.getDlls():
                mon_tools.append(tool.getName())
            #
            # NEW:
            # find if Trig and Monitoring are in the tool Dll name, or if the tool name contains both 'Mon' and either 'HLT' or 'Trig'
            # (This change was made to catch TrigEgammaMonTool, which has 'TrigEgammaAnalysisTools' as its Dll name)
            # FURTHER EDIT: extra if statemend added below (7 lines below here) to catch all TrigEgammaAnalysisTools, so we can just revert back to the previous 'OLD' if statement above
            #if ( "Trig" in tool.getDlls() and "Monitoring" in tool.getDlls() ) or ( ("HLT" in tool.getName() or "Trig" in tool.getName()) and "Mon" in tool.getName() ):
            #    mon_tools.append(tool.getName())

            # of if the tool Dll name is TrigInDetAnalysisExample, as is the case for the IDtrk tools
            if 'TrigInDetAnalysisExample' == tool.getDlls():
                mon_tools.append(tool.getName())
            # of if the tool Dll name is TrigEgammaAnalysisTools, as is the case for the Egamma tools
            if 'TrigEgammaAnalysisTools' == tool.getDlls():
                mon_tools.append(tool.getName())


        # return the list of monitoring tools
        print "mon_tools =",mon_tools
        return mon_tools
Beispiel #10
0
    def __init__(self,name = 'TileVolumeBuilder'):

        from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags

        # import the ToolSvc if necessary
        from AthenaCommon.AppMgr import ToolSvc
        if 'ToolSvc' not in dir():
           ToolSvc = ToolSvc()
       
        # The volume helper for the Tile
        from TrkDetDescrTools.TrkDetDescrToolsConf import Trk__TrackingVolumeHelper
        TileTrackingVolumeHelper = Trk__TrackingVolumeHelper(name='TrackingVolumeHelper')
        ToolSvc += TileTrackingVolumeHelper 
              
        Tile__TileVolumeBuilder.__init__(self,name,
                                         UseCaloSurfBuilder = TrkDetFlags.TileUseCaloSurfBuilder(),
                                         TrackingVolumeHelper = TileTrackingVolumeHelper,                                         
                                         BarrelEnvelopeCover  = TrkDetFlags.TileBarrelEnvelopeCover(),
                                         OutputLevel = TrkDetFlags.TileBuildingOutputLevel(),
                                         MagneticFieldMode = TrkDetFlags.MagneticFieldMode())
Beispiel #11
0
    DQTDataFlowMon = DQTDataFlowMonTool(name = 'DQTDataFlowMon', 
            histoPathBase = '/GLOBAL/DQTDataFlow',                                     
            releaseString = releaseString)                                   
    #ToolSvc += DQTDataFlowMon #bugfix ATR-20161
    ManagedAthenaGlobalMon.AthenaMonTools += [ DQTDataFlowMon ]

#-- set up output histogram file ------------------------------------------------------------------------------
log.info('HLTFlags %s', HLTMonFlags)

from GaudiSvc.GaudiSvcConf import THistSvc
svcMgr += THistSvc()
svcMgr.THistSvc.Output += ["GLOBAL DATAFILE='" + DQMonFlags.histogramFile() + "' OPT='RECREATE'"]

include( "TrigHLTMonitoring/HLTMonitoring_topOptions.py" )

if hasattr(runArgs,"useDB"):
    if runArgs.useDB:
        pass
    elif not runArgs.useDB:
        log.info("Update tools to use xAODConfigTool")
        for tool in ToolSvc.getAllChildren(): 
            tool_prop = tool.getDefaultProperties()
            for prop,value in tool_prop.iteritems():
                if prop == "TrigConfigTool":
                    log.info("Set xAOD::TrigConfigTool %s",tool.getName())
                    tool.TrigConfigTool="TrigConf::xAODConfigTool"
                if prop == "TrigConfigSvc":
                    log.info("Set xAOD::TrigConfigSvc %s",tool.getName())
                    tool.TrigConfigTool="TrigConf::xAODConfigSvc"

Beispiel #12
0
def removeFromToolSvc(tool):
    "removeFromToolSvc( tool ) --> remove tool from ToolSvc"
    from AthenaCommon.AppMgr import ToolSvc
    if hasattr(ToolSvc, tool.getName()):
        print("Removing tool %s from ToolSvc." % tool.getName())
        ToolSvc.remove(tool.getName())
Beispiel #13
0
def clearAllAsgSelectors():
    from AthenaCommon.AppMgr import ToolSvc
    for name in getAsgToolNames():
        if hasattr(ToolSvc, name):
            print 'removing ', name
            ToolSvc.remove(name)
Beispiel #14
0
    def __init__(self, name='AtlasExtrapolator'):

        # get the correct TrackingGeometry setup
        from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc
        from AthenaCommon.AppMgr import ServiceMgr as svcMgr
        AtlasTrackingGeometrySvc = svcMgr.AtlasTrackingGeometrySvc

        # import the ToolSvc
        from AthenaCommon.AppMgr import ToolSvc
        if 'ToolSvc' not in dir():
            ToolSvc = ToolSvc()

        # PROPAGATOR DEFAULTS --------------------------------------------------------------------------------------

        self.AtlasPropagators = []

        from TrkExRungeKuttaPropagator.TrkExRungeKuttaPropagatorConf import Trk__RungeKuttaPropagator as RkPropagator
        AtlasRungeKuttaPropagator = RkPropagator(
            name='AtlasRungeKuttaPropagator')
        ToolSvc += AtlasRungeKuttaPropagator

        self.AtlasPropagators += [AtlasRungeKuttaPropagator]

        from TrkExSTEP_Propagator.TrkExSTEP_PropagatorConf import Trk__STEP_Propagator as STEP_Propagator
        AtlasSTEP_Propagator = STEP_Propagator(name='AtlasSTEP_Propagator')
        ToolSvc += AtlasSTEP_Propagator

        self.AtlasPropagators += [AtlasSTEP_Propagator]

        # UPDATOR DEFAULTS -----------------------------------------------------------------------------------------

        self.AtlasUpdators = []

        from TrkExTools.TrkExToolsConf import Trk__MaterialEffectsUpdator as MaterialEffectsUpdator
        AtlasMaterialEffectsUpdator = MaterialEffectsUpdator(
            name='AtlasMaterialEffectsUpdator')
        ToolSvc += AtlasMaterialEffectsUpdator

        self.AtlasUpdators += [AtlasMaterialEffectsUpdator]

        AtlasMaterialEffectsUpdatorLandau = MaterialEffectsUpdator(
            name='AtlasMaterialEffectsUpdatorLandau')
        AtlasMaterialEffectsUpdatorLandau.LandauMode = True
        ToolSvc += AtlasMaterialEffectsUpdatorLandau

        self.AtlasUpdators += [AtlasMaterialEffectsUpdatorLandau]

        # the UNIQUE NAVIGATOR ( === UNIQUE GEOMETRY) --------------------------------------------------------------
        from TrkExTools.TrkExToolsConf import Trk__Navigator
        AtlasNavigator = Trk__Navigator(name='AtlasNavigator')
        AtlasNavigator.TrackingGeometrySvc = AtlasTrackingGeometrySvc
        ToolSvc += AtlasNavigator

        # CONFIGURE PROPAGATORS/UPDATORS ACCORDING TO GEOMETRY SIGNATURE

        AtlasSubPropagators = []
        AtlasSubUpdators = []

        # -------------------- set it depending on the geometry ----------------------------------------------------
        # default for Global is (Rk,Mat)
        AtlasSubPropagators += [AtlasRungeKuttaPropagator.name()]
        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name()]

        # default for ID is (Rk,Mat)
        AtlasSubPropagators += [AtlasRungeKuttaPropagator.name()]
        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name()]

        # default for BeamPipe is (Rk,Mat)
        AtlasSubPropagators += [AtlasRungeKuttaPropagator.name()]
        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name()]

        # default for Calo is (STEP,Mat)
        AtlasSubPropagators += [AtlasSTEP_Propagator.name()]
        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name()]

        # default for MS is (STEP,Mat)
        AtlasSubPropagators += [AtlasSTEP_Propagator.name()]
        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name()]

        # default for Cavern is (Rk,Mat)
        AtlasSubPropagators += [AtlasRungeKuttaPropagator.name()]
        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name()]

        # ----------------------------------------------------------------------------------------------------------

        # call the base class constructor
        Trk__Extrapolator.__init__(self,name,\
                                   Navigator = AtlasNavigator,\
                                   MaterialEffectsUpdators = self.AtlasUpdators,\
                                   Propagators = self.AtlasPropagators,\
                                   SubPropagators = AtlasSubPropagators,\
                                   SubMEUpdators = AtlasSubUpdators,\
                                   DoCaloDynamic = False
                                   )
Beispiel #15
0
            clist += [y]
        else:
            print "Removing: ", y, " from CaloCellMaker.CaloCellMakerToolNames"
    topSequence.CaloCellMaker.CaloCellMakerToolNames = clist

    # Configuring LArBadChanTool
    ToolSvc.LArBadChanTool.ReadFromASCII = True
    ToolSvc.LArBadChanTool.CoolFolder = ""
    ToolSvc.LArBadChanTool.ComplementaryCoolFolder = ""
    ToolSvc.LArBadChanTool.CoolMissingFEBsFolder = ""
    ToolSvc.LArBadChanTool.WriteEmptyFolders = True
    ToolSvc.LArBadChanTool.FCALAfile = "H6BadChannels.txt"
    ToolSvc.LArBadChanTool.HECAfile = "H6BadChannels.txt"
    ToolSvc.LArBadChanTool.EMECAfile = "H6BadChannels.txt"
    # and removing TileBadChanTool
    ToolSvc.remove("TileBadChanTool/TileBadChanTool")

    if doBeamQuality and doSim:
        from TBRec.TBRecConf import TBBeamQualityMC
        TBBeamQualityClus = TBBeamQualityMC("TBBeamQualityClus")
        TBBeamQualityClus.ReadFileforXcryo = False
        TBBeamQualityClus.CheckTrackParams = False
        TBBeamQualityClus.CheckPrimaryTrack = False
        TBBeamQualityClus.CheckVetoScint = False
        TBBeamQualityClus.CheckClusters = True
        TBBeamQualityClus.CheckTrackReco = False
        #        from AthenaCommon.AppMgr import athMasterSeq
        topSequence += TBBeamQualityClus

if doMakeEMTopoCluster:
    include("CaloRec/EMTopoCluster_jobOptions.py")
Beispiel #16
0
    def __init__(self,name = 'Extrapolation', nameprefix = 'Atlas', ToolOutputLevel = None, TrackingGeometrySvc = None):
       
        # get the correct TrackingGeometry setup
        if not TrackingGeometrySvc :
            from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc
            from AthenaCommon.AppMgr import ServiceMgr as svcMgr
            AtlasTrackingGeometrySvc = svcMgr.AtlasTrackingGeometrySvc 
        else :
            AtlasTrackingGeometrySvc = TrackingGeometrySvc

        # import the ToolSvc
        from AthenaCommon.AppMgr import ToolSvc
        if 'ToolSvc' not in dir() :
            ToolSvc = ToolSvc()

        # load the RungeKutta Propagator
        from TrkExRungeKuttaPropagator.TrkExRungeKuttaPropagatorConf import Trk__RungeKuttaPropagator
        RungeKuttaPropagator = Trk__RungeKuttaPropagator(name = nameprefix+'RungeKuttaPropagator')
        if ToolOutputLevel :
            RungeKuttaPropagator.OutputLevel     = ToolOutputLevel
        ToolSvc += RungeKuttaPropagator
        
        # from the Propagator create a Propagation engine to handle path length
        from TrkExEngine.TrkExEngineConf import Trk__PropagationEngine
        StaticPropagator = Trk__PropagationEngine(name = nameprefix+'StaticPropagation')
        # give the tools it needs 
        StaticPropagator.Propagator               = RungeKuttaPropagator
        # configure output formatting               
        StaticPropagator.OutputPrefix             = '[SP] - '
        StaticPropagator.OutputPostfix            = ' - '
        if ToolOutputLevel : 
            StaticPropagator.OutputLevel          = ToolOutputLevel
        # add to tool service
        ToolSvc += StaticPropagator
        
        # load the material effects engine
        from TrkExEngine.TrkExEngineConf import Trk__MaterialEffectsEngine
        MaterialEffectsEngine = Trk__MaterialEffectsEngine(name = nameprefix+'MaterialEffects')
        # configure output formatting               
        MaterialEffectsEngine.OutputPrefix        = '[ME] - '
        MaterialEffectsEngine.OutputPostfix       = ' - '
        #MaterialEffectsEngine.EnergyLossCorrection = False
        if ToolOutputLevel : 
            MaterialEffectsEngine.OutputLevel     = ToolOutputLevel
        # add to tool service
        ToolSvc += MaterialEffectsEngine
        
        # load the static navigation engine
        from TrkExEngine.TrkExEngineConf import Trk__StaticNavigationEngine
        StaticNavigator = Trk__StaticNavigationEngine(name = nameprefix+'StaticNavigation')
        # give the tools it needs 
        StaticNavigator.PropagationEngine        = StaticPropagator
        StaticNavigator.MaterialEffectsEngine    = MaterialEffectsEngine
        # Geometry name
        StaticNavigator.TrackingGeometry         = AtlasTrackingGeometrySvc.TrackingGeometryName
        # configure output formatting               
        StaticNavigator.OutputPrefix             = '[SN] - '
        StaticNavigator.OutputPostfix            = ' - '
        if ToolOutputLevel : 
            StaticNavigator.OutputLevel              = ToolOutputLevel
        # add to tool service
        ToolSvc += StaticNavigator
        
        
        # load the Static ExtrapolationEngine
        from TrkExEngine.TrkExEngineConf import Trk__StaticEngine
        StaticExtrapolator = Trk__StaticEngine(name = nameprefix+'StaticExtrapolation')
        # give the tools it needs 
        StaticExtrapolator.PropagationEngine        = StaticPropagator
        StaticExtrapolator.MaterialEffectsEngine    = MaterialEffectsEngine
        StaticExtrapolator.NavigationEngine         = StaticNavigator
        # configure output formatting               
        StaticExtrapolator.OutputPrefix             = '[SE] - '
        StaticExtrapolator.OutputPostfix            = ' - '
        if ToolOutputLevel : 
            StaticExtrapolator.OutputLevel              = ToolOutputLevel
        # add to tool service
        ToolSvc += StaticExtrapolator
       
        # call the base class constructor
        ExEngine.__init__(self, name=nameprefix+'Extrapolation',\
                          ExtrapolationEngines   = [ StaticExtrapolator ], \
                          PropagationEngine      = StaticPropagator, \
                          NavigationEngine       = StaticNavigator, \
                          TrackingGeometrySvc    = AtlasTrackingGeometrySvc, \
                          OutputPrefix           = '[ME] - ', \
                          OutputPostfix          = ' - ')
        # set the output level
        if ToolOutputLevel :
            self.OutputLevel = ToolOutputLevel