diff --git a/DaVinciSys/CMakeLists.txt b/DaVinciSys/CMakeLists.txt
index f7814943027a098596c29f946102c42d827f2091..e047419750ca81e3bea6100aed6465f006296d5e 100644
--- a/DaVinciSys/CMakeLists.txt
+++ b/DaVinciSys/CMakeLists.txt
@@ -15,8 +15,6 @@ gaudi_subdir(DaVinciSys)
 
 gaudi_depends_on_subdirs(DaVinciTests
                          Phys/DaVinci
-                         Phys/Tesla
-                         Phys/TurboCache
                          )
 
 gaudi_add_test(QMTest QMTEST)
diff --git a/Phys/Tesla/CMakeLists.txt b/Phys/Tesla/CMakeLists.txt
deleted file mode 100644
index d4a6b6632826114d87ae4bf03414f7e2b43b9203..0000000000000000000000000000000000000000
--- a/Phys/Tesla/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-################################################################################
-# Package: Tesla
-################################################################################
-gaudi_subdir(Tesla)
-
-gaudi_depends_on_subdirs(Event/HltEvent
-                         Event/MicroDst
-                         Det/DDDB
-                         GaudiConfUtils
-                         Hlt/HltDAQ
-                         Phys/TeslaTools
-                         Phys/DaVinciKernel)
-
-gaudi_install_python_modules()
-
-gaudi_add_test(QMTest QMTEST)
diff --git a/Phys/Tesla/doc/release.notes b/Phys/Tesla/doc/release.notes
deleted file mode 100644
index 840695ab54c28c1a7d98a6d72762f53f2253cbed..0000000000000000000000000000000000000000
--- a/Phys/Tesla/doc/release.notes
+++ /dev/null
@@ -1,185 +0,0 @@
-!-----------------------------------------------------------------------------
-Package             : Tesla
-Package Coordinator : Sean Benson
-Purpose             : Turbo Stream Analysis
-!-----------------------------------------------------------------------------
-
-! 2016-07-27 - Mika Vesterinen
- - Added chain of Tesla -> TupleMaker tests with and without streaming
-    - Phys/Tesla/tests/qmtest/tesla.qms/tesla_step_oneline.qmt
-    - Phys/Tesla/tests/qmtest/tesla.qms/tesla_step_streams.qmt
-    - Phys/Tesla/tests/qmtest/tesla.qms/tuple_step_oneline.qmt
-    - Phys/Tesla/tests/qmtest/tesla.qms/tuple_step_streams.qmt
-
-!========================== Tesla v2r2 2016-06-13 ============================
-
-! 2016-05-30 - Sean Benson
- - Truth matching for Turbo++.
- - Option to kill Hlt2 selection reports.
- - Configure TrackSys to ensure accurate IP calculation.
-
-!========================== Tesla v2r1 2016-04-25 ============================
-
-! 2016-04-24 - Sean Benson
- - Add DecReportsDecoder for online mode.
-
-!========================== Tesla v2r0 2016-04-11 ============================
-
-! 2016-04-10 - Sean Benson
- - Adjustments for qmtests.
- - Add slot to veto raw bank removal in online mode.
-
-! 2016-04-08 - Eduardo Rodrigues
- - Major version number to reflect the major change from 2016-03-11
-   (no worries since v1r15 did not get used anywhere).
-
-! 2016-04-08 - Sean Benson
- - Adjustments for qmtests.
-
-! 2016-04-07 - Sean Benson
- - Adjust qmtest for fix.
- - Lumi filter fix.
- - More qmtests.
-
-!========================== Tesla v1r15 2016-04-05 ===========================
-
-! 2016-03-30 - Sean Benson
- - Add more qmtests.
-
-! 2016-03-11 - Sean Benson
- - Major change: Adapt to a single TeslaReportAlgo instance for complete sharing.
-
-!========================== Tesla v1r14 2016-02-08 ===========================
-
-! 2016-02-03 - Sean Benson
- - Add packing of calo clusters and hypos.
-
-!========================== Tesla v1r13 2015-10-19 ===========================
-
-! 2015-10-12 - Sean Benson
- - Add support for RelatedInfo packing.
- - Add KillInputTurbo option to rerun (only useful for my personal debugging).
-
-!========================== Tesla v1r12 2015-09-09 ===========================
-
-! 2015-8-20 - Sean Benson
- - PrintDuplicates algorithm included
-
-!========================= Tesla v1r11 2015-08-14 =========================
-
-! 2015-8-15 - Sean Benson
- - Do not write digits, associate to raw event.
-
-!========================== Tesla v1r10 2015-08-07 ===========================
-
-! 2015-7-31 - Sean Benson
- - Facilitate neutral PP2MC matching.
-
-!========================== Tesla v1r9 2015-07-27 ============================
-
-! 2015-07-20 - Marco Clemencic
- - Added workaround for ROOT-7492 (some dictionaries not loaded).
-
-!========================= Tesla v1r8 2015-06-18 =========================
-
-! 2015-6-16 - Sean Benson
- - Add option to make monitoring histograms in the event loop.
-
-!========================= Tesla v1r7 2015-06-12 =========================
-
-! 2015-6-12 - Sean Benson
- - Fix vertex reports decoding.
-
-!========================= Tesla v1r6 2015-06-10 =========================
-
-! 2015-6-10 - Sean Benson
- - Make PV reports location an option.
-
-!=========================== Tesla v1r5 2015-06-02 ===========================
-
-! 2015-5-28 - Sean Benson
- - Configure PP2MCP more efficiently.
-
-! 2015-5-14 - Sean Benson
- - Add RecSummary location.
-
-!=========================== Tesla v1r4 2015-05-04 ===========================
-
-! 2015-5-4 - Sean Benson
- - Remove dependency on TurboStreamProd.
-
-! 2015-4-27 - Sean Benson
- - Add packed relations table location.
- - Add dependency on TurboStreamProd.
-
-! 2015-4-11 - Sean Benson
- - Add relations table generation for XDSTs and LDSTs.
-
-! 2015-3-31 - Sean Benson
- - Fix CMake for DDDB tags.
- - Add previously private lumi tests.
-
-! 2015-3-29 - Sean Benson
- - Files in TestFileDB.
-
-! 2015-3-12 - Sean Benson
- - Test fixes.
-
-! 2015-3-11 - Sean Benson
- - Support refitted PV persistence.
- - Remove deprecated "PreSplit" and "ReportVersion" options.
-
-!=========================== Tesla v1r3 2015-03-04 ===========================
-
-! 2015-2-18 - Sean Benson
- - Containers are only written when created.
- - ROOT compression factor of LZMA:6 added.
-
-! 2015-2-11 - Sean Benson
- - Tesla created objects are now packed.
- - TES objects moved down one level, now under /Event/Turbo/HLTLINE/OBJECT
- - PV selection harmonised with offline.
- - PVs now the same for all resurrections in each event.
-
-!=========================== Tesla v1r2 2015-01-16 ===========================
-
-! 2015-1-15 - Sean Benson
- - Update to tesla.containers and tesla.default tests.
- - Lumi algorithms and Turbo raw bank conversion included in Tesla.
-
-! 2015-01-15 - Eduardo Rodrigues
- - Added python/Tesla/__init__.py to please CMake.
-
-!========================= Tesla v1r1 2014-12-17 =========================
-
-! 2014-12-08 - Sean Benson
- - Add Turbo_THRESHOLD.py to show example of running Tesla
- on Moore output from ThresholdSettings.
-
-! 2014-12-03 - Sean Benson
- - Fix unit tests.
-
-! 2014-12-02 - Sean Benson
- - PVs moved to Tesla-specific TES location
- - Tesla now expects a list of trigger lines instead of a string specifying one.
-
-! 2014-11-07 - Sean Benson
- - New QMTests.
- - Make Tesla split aware
-
-!========================= Tesla v1r0 2014-11-05 =========================
-
-! 2014-10-13 - Sean Benson
- - Added 2 QMTests, container.qmt checks output values are still good,
- default.qmt checks for errors.
- - Changed default output level.
-
-! 2014-10-09 - Sean Benson
- - Give Tesla more slots so the report algorithm does not need
- congiguring by the user.
-
-! 2014-09-07 - Sean Benson
- - Temporarily send users in Turbo.py to use the TCK in my public area.
-
-! 2014-09-07 - Sean Benson
- - First import.
diff --git a/Phys/Tesla/options/Turbo.py b/Phys/Tesla/options/Turbo.py
deleted file mode 100755
index 51d6b7f8fb4e337198cb21f08880090f0f2639ef..0000000000000000000000000000000000000000
--- a/Phys/Tesla/options/Turbo.py
+++ /dev/null
@@ -1,33 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-# SAMPLE FOR TUTORIAL: RunningTesla
-# FOR LATEST SCRIPT SEE Turbo_NewLine.py
-
-from Configurables import Tesla 
-from Gaudi.Configuration import *
-
-from Configurables import RecombineRawEvent, DecodeRawEvent
-RecombineRawEvent()
-DecodeRawEvent().DataOnDemand = True
-
-from Configurables import ConfigTarFileAccessSvc
-ConfigTarFileAccessSvc().File='/afs/cern.ch/work/s/sbenson/public/forTeslaExtendedReps/config.tar'
-
-Tesla().TriggerLine = "Hlt2IncPhi"
-Tesla().EvtMax = -1
-
-from GaudiConf.IOHelper import IOHelper
-ioh = IOHelper()
-ioh.setupServices()
-ioh.inputFiles([
-    "root://eoslhcb.cern.ch//eos/lhcb/user/s/sbenson/DSTs/TeslaChain/RemadeSel_phiphi_1k_Tutorial_0044.dst"
-])
-Tesla().outputFile = "Turbo.dst"
diff --git a/Phys/Tesla/options/Turbo_NewLine.py b/Phys/Tesla/options/Turbo_NewLine.py
deleted file mode 100755
index d72c6e6854a15f1db357565a2a0327632323aa8b..0000000000000000000000000000000000000000
--- a/Phys/Tesla/options/Turbo_NewLine.py
+++ /dev/null
@@ -1,31 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Configurables import Tesla 
-from Gaudi.Configuration import *
-
-from Configurables import RecombineRawEvent, DecodeRawEvent
-RecombineRawEvent()
-DecodeRawEvent().DataOnDemand = True
-
-# Path to private TCK
-from Configurables import ConfigTarFileAccessSvc
-ConfigTarFileAccessSvc().File='/afs/cern.ch/user/s/sbenson/cmtuser/Moore_v23r2/TCKData/config.tar'
-
-Tesla().TriggerLines = ["Hlt2IncPhi"] # Enter your trigger line here
-Tesla().EvtMax = -1
-
-from GaudiConf.IOHelper import IOHelper
-ioh = IOHelper()
-ioh.setupServices()
-ioh.inputFiles([
-    "PATH/TO/HLT/PROCESSED/DATA"
-])
-Tesla().outputFile = "PATH/TO/OUTPUT"
diff --git a/Phys/Tesla/options/Turbo_THRESHOLD.py b/Phys/Tesla/options/Turbo_THRESHOLD.py
deleted file mode 100755
index 4d6dde26313cd2967963249b6752c6a1367d849f..0000000000000000000000000000000000000000
--- a/Phys/Tesla/options/Turbo_THRESHOLD.py
+++ /dev/null
@@ -1,45 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Configurables import Tesla 
-from Gaudi.Configuration import *
-
-from Configurables import RecombineRawEvent, DecodeRawEvent
-RecombineRawEvent()
-DecodeRawEvent().DataOnDemand = True
-
-## Tell HltANNSvc the ID of your line 
-# NEEDED WHEN NOT RUNNING FROM A TCK
-# YOU CAN FIND THE ID IN THE PYTHON IMPLEMENTATION
-# IN Hlt/Hlt2Lines
-from Configurables import HltANNSvc
-Hlt2ID = HltANNSvc().Hlt2SelectionID
-if "Hlt2Global" not in Hlt2ID : Hlt2ID.update( {  "Hlt2Global" : 2 } )
-HltANNSvc().Hlt1SelectionID = { 'PV3D' : 10103
-        ,'ProtoPV3D' : 10117
-}
-Hlt2ID.update(  { 'Hlt2IncPhiDecision'           : 50000
-    ,'Hlt2IncPhiSidebandsDecision'  : 50003
-    ,'Hlt2IncPhiTrackFitDecision'   : 50002
-    } )
-#from Configurables import ConfigTarFileAccessSvc
-#ConfigTarFileAccessSvc().File='/afs/cern.ch/user/s/sbenson/cmtuser/Moore_v23r2/TCKData/config.tar'
-
-Tesla().TriggerLines = ["Hlt2IncPhi"] # Enter your trigger line here
-Tesla().EvtMax = -1
-Tesla().OutputLevel = DEBUG
-
-from GaudiConf.IOHelper import IOHelper
-ioh = IOHelper()
-ioh.setupServices()
-ioh.inputFiles([
-    "/PATH/TO/INPUT"
-])
-Tesla().outputFile = "OUTPUT"
diff --git a/Phys/Tesla/options/config.tar b/Phys/Tesla/options/config.tar
deleted file mode 100644
index bb7558d01e05eb49f4b241a7cac63ba97ea5fa3a..0000000000000000000000000000000000000000
Binary files a/Phys/Tesla/options/config.tar and /dev/null differ
diff --git a/Phys/Tesla/python/Tesla/Configuration.py b/Phys/Tesla/python/Tesla/Configuration.py
deleted file mode 100644
index 225406d5ea3d4d0730c4ac24044c6de6ccc99e0a..0000000000000000000000000000000000000000
--- a/Phys/Tesla/python/Tesla/Configuration.py
+++ /dev/null
@@ -1,1451 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from __future__ import print_function
-import logging as log
-import os
-import re
-
-from Configurables import (
-    AddressKillerAlg,
-    AuditorSvc,
-    CaloClusterCloner,
-    CaloClusterMCTruth,
-    CaloDigit2MCLinks2Table,
-    CaloDigitCloner,
-    CaloHypoCloner,
-    ChargedPP2MC,
-    CopyLinePersistenceLocations,
-    CopyParticle2PVRelationsFromLinePersistenceLocations,
-    CopyParticle2RelatedInfoFromLinePersistenceLocations,
-    CopyProtoParticle2MCRelations,
-    CopySignalMCParticles,
-    DataOnDemandSvc,
-    DataPacking__Pack_LHCb__CaloClusterPacker_ as PackCaloClusters,
-    DataPacking__Unpack_LHCb__CaloClusterPacker_ as UnpackCaloClusters,
-    DecodeRawEvent,
-    DstConf,
-    EventNodeKiller,
-    EventSelector,
-    Gaudi__DataCopy as DataCopy,
-    Gaudi__DataLink as DataLink,
-    GaudiSequencer,
-    HltPackedDataDecoder,
-    HltRoutingBitsFilter,
-    HltSelReportsWriter,
-    InputCopyStream,
-    LHCbApp,
-    LHCbConfigurableUser,
-    LoKi__HDRFilter as HltDecReportsFilter,
-    LoKiSvc,
-    LumiAlgsConf,
-    NeutralPP2MC,
-    OutputStream,
-    P2MCPFromProtoP,
-    PackCaloHypo as PackCaloHypos,
-    PackMCParticle,
-    PackMCVertex,
-    PackParticlesAndVertices,
-    ProtoParticleCloner,
-    PrintDuplicates,
-    RawEventFormatConf,
-    RawEventJuggler,
-    RecSummaryFromSelReports,
-    RecombineRawEvent,
-    RecordStream,
-    SequencerTimerTool,
-    TCKLinePersistenceSvc,
-    TESCheck,
-    TeslaLineChecker,
-    TeslaReportAlgo,
-    TimingAuditor,
-    TrackAssociator,
-    TrackClonerWithClusters,
-    TurboConf,
-    TurboPrescaler,
-    UnpackCaloHypo as UnpackCaloHypos,
-    UnpackParticlesAndVertices,
-    bankKiller
-)
-from Gaudi.Configuration import *
-from GaudiConf import IOExtension, IOHelper
-from GaudiConf import PersistRecoConf
-import GaudiKernel.ProcessJobOptions
-from LHCbKernel.Configuration import *
-from RawEventCompat.Configuration import ReverseDict as RawEventLocationsToBanks
-
-
-# Locations of Track and ProtoParticle objects created in HLT2 that are not
-# defined as part of the 'standard reconstruction' that is saved in PersistReco
-# We need to know these locations in Tesla so that we can truth match the objects
-# See LHCBPS-1807 for more details, and how this list was obtained
-_extra_track_locations = [
-    # These two locations are defined as part of the standard HLT2 reconstruction
-    # 'Hlt2/Track/Best/Downstream',
-    # 'Hlt2/Track/Best/Long',
-    'Hlt2/Track/Best/LongDownstreamClones',
-    'Hlt2/Track/Best/LongV0Vertices',
-    'Hlt2/Track/Best/Muon',
-    'Hlt2/Track/Best/Ttrack',
-    'Hlt2/Track/ComplementForward',
-    'Hlt2/Track/Downstream',
-    'Hlt2/Track/Forward',
-    'Hlt2/Track/Match',
-    'Hlt2/Track/Seeding',
-    'Hlt2/TrackBest/PID/MuonSegments',
-    'Hlt2/TrackEff/Track/FullDownstream',
-    'Hlt2/TrackEff/Track/MuonTT',
-    'Hlt2/TrackEff/Track/StandaloneMuon',
-    'Hlt2/TrackEff/Track/VeloMuon'
-]
-_extra_protoparticle_locations = [
-    # These two locations are defined as part of the standard HLT2 reconstruction
-    # 'Hlt2/ProtoP/Downstream/Charged/WithAllPIDs',
-    # 'Hlt2/ProtoP/Long/Charged/WithAllPIDs',
-    'Hlt2/ProtoP/Best/FullDownstream',
-    'Hlt2/ProtoP/Best/MuonTT',
-    'Hlt2/ProtoP/Best/VeloMuon',
-    'Hlt2/ProtoP/Hlt2/TrackEff/Velo'
-]
-
-
-def _strip_root(root, locs):
-    """Return list of paths `loc` stripped of the `root` prefix.
-
-    Examples
-    --------
-
-        >>> _strip_root('/Event/Turbo', ['/Event/Turbo/Foo'])
-        'Foo'
-        >>> _strip_root('/Event', ['/Event/Turbo/Foo'])
-        'Turbo/Foo'
-        >>> # Path is already relative
-        >>> _strip_root('/Event', ['Turbo/Foo'])
-        'Turbo/Foo'
-        >>> # Complains if the prefix doesn't match the root
-        >>> _strip_root('/Event/Ultra', ['/Event/Turbo/Foo'])
-        AssertionError
-    """
-    root = root.rstrip('/')
-    ret = []
-    for l in locs:
-        # Only need to modify paths that are already absolute
-        if l.startswith('/'):
-            # Strip off the root the prefixes the string
-            l = l.replace(root + '/', '')
-            assert not l.startswith('/'), \
-                   'TES path still prefixed: {0}'.format(l)
-        ret.append(l)
-    return ret
-
-
-class Tesla(LHCbConfigurableUser):
-    __used_configurables__ = [ LHCbApp, LumiAlgsConf, RawEventJuggler, DecodeRawEvent, RawEventFormatConf, DstConf, RecombineRawEvent, PackParticlesAndVertices, TrackAssociator, ChargedPP2MC, TurboConf]
-
-    __slots__ = {
-            "EvtMax"		: -1    	# Maximum number of events to process
-          , "SkipEvents"	: 0		# Skip to event
-          , "Simulation"	: True 		# True implies use SimCond
-          , "DataType"		: '2012' 	# Data type, can be [ 'DC06','2008' etc...]
-          , "InputType"		: 'DST' 	# Input type, can be [ 'DST','LDST' etc...]
-          , "DDDBtag" 		: 'default' 	# default as set in DDDBConf for DataType
-          , "CondDBtag" 	: 'default' 	# default as set in DDDBConf for DataType
-          , 'Persistency' 	: '' 		# None, Root or Pool?
-          , 'OutputLevel' 	: 4 		# Er, output level
-          , 'PackerOutputLevel' : 4             # Packer output level
-          , 'DuplicateCheck' 	: False		# Do we want to add the algorithm to check for duplicates
-          , 'KillInputTurbo' 	: False		# If rerunning Tesla, kill input Turbo locations
-          , "outputFile" 	: 'Tesla.dst' 	# output filename
-          , "outputPrefix"      : ''            # This is prepended to the stream name
-          , "outputSuffix"      : '.dst'        # This is appended to the stream name
-          , 'WriteFSR'    	: False 	# copy FSRs as required
-          , 'PV'	        : "Offline"     # Associate to the PV chosen by the HLT or the offline one
-          , 'VertRepLoc'	: "Hlt2"        # Do we use the maker from Hlt1 or Hlt2
-          , 'TriggerLines'	: []            # Which trigger lines
-          , 'Mode'	        : "Offline"     # "Online" (strip unnecessary banks and run lumi algorithms) or "Offline"?
-                                            # "Online" means running on data from the pit
-                                            # "Offline" is used on DSTs, i.e. the output of Brunel
-          , 'Pack'	        : True          # Do we want to pack the objects?
-          , 'SplitRawEventInput'	: 0.3
-          , 'SplitRawEventOutput'	: 4.3
-          , 'Monitors'	        : []            # Histogram monitors to run in the job
-          , 'Histogram'  	: ""            # Name of histogram file
-          , 'VetoJuggle'  	: True          # True if raw event removal not required in online mode
-          , 'IgnoreDQFlags'  	: True          # Pass IgnoreDQFlags to LHCbApp
-          , 'PersistRecoMC'  	: True          # Match persistReco objects to MC
-          , 'ProtoTypesPR'  	: ["long","down"] # Which protoparticle types are in Turbo++
-          , 'KillInputHlt2Reps'	: False         # Kill input Hlt2 reps to save space
-          , 'InputHlt2RepsToKeep' : []          # List of selection names of reports to keep (if KillInputHlt2Reps is True)
-          , 'HDRFilter'	        : False         # Filter on trigger lines or not
-          , 'Park'	        : False         # If prescaled streams, make a parked version
-          , 'PRtracks'  	: []            # PR track locations
-          , 'PRchargedPP'  	: []            # PR protoparticle locations
-          , 'PRclusters'  	: []            # PR cluster locations
-          , 'PRneutralPP'  	: []            # PR neutral protoparticle locations
-          , 'Streams'           : {}            # Streams, empty if no streaming
-          , 'ValidateStreams'   : False         # Run validation to compare streams and TriggerLines
-          , 'EnableLineChecker' : True          # Enable the comparison of lines in the DecReports and the input to TeslaReportsAlgo
-          , 'IgnoredLines'      : [ ]   # Regexes for lines excluded from the comparison of DecReports and input to TeslaReportsAlgo
-          , 'FilterMC' : False # Save a subset of the input MC particles and vertices under `Tesla.base, mimicking a microDST writer`
-          , 'ILinePersistenceSvc' : "TCKLinePersistenceSvc"   # Implementation of the ILinePersistenceSvc to use (for >= 2017 data types)
-          , 'CandidatesFromSelReports' : False  # If True and DataType >= 2017, take Turbo candidates from Hlt2SelReports rather than
-                                                # from the DstData raw bank (i.e. behave as if DataType =< 2016)
-          }
-    _propertyDocDct ={
-            "EvtMax"		: "Maximum number of events to process, default all"
-            , "SkipEvents"	: "Events to skip, default     0"
-            , "Simulation"	: "True implies use SimCond"
-            , "DataType"	: "Data type, can be [ 'DC06','2008' ...]"
-            , "InputType"	: "Input type, can be [ 'DST','LDST' ...]"
-            , "DDDBtag" 	: "Databse tag, default as set in DDDBConf for DataType"
-            , "CondDBtag" 	: "Databse tag, default as set in DDDBConf for DataType"
-            , 'Persistency' 	: "Root or Pool?"
-            , 'OutputLevel' 	: "Output level"
-            , 'PackerOutputLevel': "Packer output level"
-            , 'DuplicateCheck' 	: "Add the test for duplicates?"
-            , 'KillInputTurbo' 	: "Are we rerunning Tesla"
-            , "outputFile" 	: 'output filename, automatically selects MDF or InputCopyStream'
-            , "outputPrefix"    : 'This is prepended to the stream name'
-            , "outputSuffix"    : 'This is appended to the stream name'
-            , 'WriteFSR'    	: 'copy FSRs as required'
-            , 'PV'     	        : 'Associate to the PV chosen by the HLT or the offline one'
-            , 'VertRepLoc'	: 'Do we use the maker from Hlt1 or Hlt2'
-            , 'TriggerLines'    : 'Which trigger line to process'
-            , 'Mode'     	: '"Online" (strip unnecessary banks and run lumi algorithms) or "Offline"?'
-            , 'Pack'     	: 'Do we want to pack the object?'
-            , 'SplitRawEventInput': "How is the event split up in the input? Propagated to RawEventJuggler() and DecodeRawEvent()."
-            , 'SplitRawEventOutput': "How should the event be split up in the output?"
-            , 'Monitors'        : 'Histogram monitors to run in the job'
-            , 'Histogram'       : 'File name for histogram file'
-            , 'VetoJuggle'      : 'Do we want to stop raw bank removal (assume happened further upstream)'
-            , 'IgnoreDQFlags'  	: 'Pass IgnoreDQFlags to LHCbApp'
-            , 'PersistRecoMC'  	: 'Match persistReco objects to MC'
-            , 'ProtoTypesPR'  	: 'Which protoparticle types are in Turbo++'
-            , 'KillInputHlt2Reps':'Kill input Hlt2 reps to save space'
-            , 'InputHlt2RepsToKeep': 'List of selection names of reports to keep (if KillInputHlt2Reps is True)'
-            , 'HDRFilter'	: 'Filter on trigger lines or not'
-            , 'Park'	        : 'If prescaled streams, make a parked version'
-            , 'PRtracks'  	: 'PR track locations'
-            , 'PRchargedPP'  	: 'PR protoparticle locations'
-            , 'PRclusters'  	: 'PR cluster locations'
-            , 'PRneutralPP'  	: 'PR neutral protoparticle locations'
-            , 'Streams'         : 'Streams, empty if no streaming'
-            , 'ValidateStreams' : 'Run validation to compare streams and TriggerLines'
-            , 'EnableLineChecker' : 'Enable the comparison of lines in the DecReports and the input to TeslaReportsAlgo'
-            , 'IgnoredLines'      : 'Regexes for lines excluded from the comparison of DecReports and input to TeslaReportsAlgo'
-            , 'FilterMC' : "Save a subset of the input MC particles and vertices under `Tesla.base`, mimicking a microDST writer"
-            , 'ILinePersistenceSvc' : "Implementation of the ILinePersistenceSvc to use (for >= 2017 data types)"
-            , 'CandidatesFromSelReports' : ("If True and DataType >= 2017, take Turbo candidates from Hlt2SelReports rather than "
-                                            "from the DstData raw bank (i.e. behave as if DataType =< 2016)")
-
-            }
-
-    writerName = "DstWriter"
-    teslaSeq = GaudiSequencer("TeslaSequence")
-    base = "Turbo/"
-    neutral_pp2mc_loc = "Relations/Turbo/NeutralPP2MC"
-
-
-    def _safeSet(self,conf,param):
-        for p in param:
-            if (not self.isPropertySet(p)) or conf.isPropertySet(p):
-                continue
-            conf.setProp(p,self.getProp(p))
-
-    def _configureDataOnDemand(self) :
-        if 'DataOnDemandSvc' in ApplicationMgr().ExtSvc :
-            ApplicationMgr().ExtSvc.pop('DataOnDemandSvc')
-        else:
-            dod = DataOnDemandSvc()
-        if dod not in ApplicationMgr().ExtSvc :
-            ApplicationMgr().ExtSvc.append( dod )
-
-    def _configureHistos(self):
-        monitorSeq = GaudiSequencer('TelaMonitors')
-        monitorSeq.IgnoreFilterPassed = True
-        monitorSeq.Members += self.getProp('Monitors')
-        self.teslaSeq.Members += [ monitorSeq ]
-        #
-        ApplicationMgr().HistogramPersistency = "ROOT"
-
-        if ( self.getProp("Histogram") != "" ):
-            HistogramPersistencySvc().OutputFile = self.getProp("Histogram")
-
-    def _configureTimingAuditor(self):
-        """Enable the printing of the algorithm timing table."""
-        ApplicationMgr().ExtSvc += ['ToolSvc', 'AuditorSvc']
-        ApplicationMgr().AuditAlgorithms = True
-        AuditorSvc().Auditors += ['TimingAuditor']
-
-        TimingAuditor().addTool(SequencerTimerTool, name='TIMER')
-        TimingAuditor().TIMER.NameSize = 60
-        # Disable INFO output from the default timer tool
-        SequencerTimerTool().OutputLevel = WARNING
-
-    def _configureTrackTruth(self,assocpp,trackLoc) :
-        assoctr = TrackAssociator("TurboAssocTr"+trackLoc.replace("/", ""))
-        assoctr.OutputLevel = self.getProp('OutputLevel')
-        assoctr.TracksInContainer = trackLoc
-        assocpp.TrackLocations += [ trackLoc ]
-        # Add it to a sequence
-        return assoctr
-
-    def _configureDigitsTruth(self) :
-        assocdigits = CaloDigit2MCLinks2Table("TurboDigitAssoc")
-        return
-
-    def _configureClustersAndProtosTruth(self,digits,clusters,protos,protoTabLoc):
-        retSeq = GaudiSequencer("NeutralTruth")
-        clusterTabLoc = self.base + "Relations/CaloClusters"
-
-        assoccluster = CaloClusterMCTruth("TurboClusterAssoc")
-        assoccluster.OutputLevel = self.getProp('OutputLevel')
-        assoccluster.Input = digits
-        assoccluster.Output = clusterTabLoc
-        assoccluster.Clusters+=clusters
-
-        assocneutral = NeutralPP2MC("TurboNeutralPP2MC")
-        assocneutral.InputData += protos
-        assocneutral.OutputLevel = self.getProp('OutputLevel')
-        assocneutral.OutputTable = protoTabLoc
-        assocneutral.MCCaloTable = clusterTabLoc
-
-        retSeq.Members += [assoccluster,assocneutral]
-        return retSeq
-
-    def _unpackMC(self):
-        DataOnDemandSvc().NodeMap['/Event/MC']   = 'DataObject'
-        DataOnDemandSvc().AlgMap["MC/Particles"] = "UnpackMCParticle"
-        DataOnDemandSvc().AlgMap["MC/Vertices"]  = "UnpackMCVertex"
-
-
-    def _filterMCParticlesSequence(self, relations_locations):
-        """Copy signal and associated MC particles to microDST-like locations.
-
-        In the Stripping, the microDST machinery only saves a subset of the
-        input MC particles and vertices. This subset contains two possibly
-        overlapping contributions:
-
-        1. The MCParticle objects in the signal decay tree; and
-        2. The MCParticle objects which can be associated to the reconstructed
-        objects selected by at least one stripping line.
-
-        To mimic this behaviour in Tesla, we run almost the same set of
-        microDST algorithms, using the relations tables Tesla makes to find the
-        MC particles that have been associated to the reconstruction.
-        """
-        output_prefix = self.base.rstrip('/')
-        output_level = self.getProp('OutputLevel')
-
-        # Algorithm to clone the existing relations tables and the MC particles
-        # and vertices these tables point to from their original location to
-        # the same location prefixed by /Event/Turbo
-        copy_pp2mcp = CopyProtoParticle2MCRelations()
-        copy_pp2mcp.InputLocations = relations_locations
-        copy_pp2mcp.OutputPrefix = output_prefix
-        # Don't use the assumed copy of the input ProtoParticle objects, as
-        # Tesla doesn't need to copy them (they're already under /Event/Turbo)
-        copy_pp2mcp.UseOriginalFrom = True
-        copy_pp2mcp.OutputLevel = output_level
-
-        # Algorithm to clone all MC particles and vertices that are associated
-        # to the simulated signal process (using LHCb::MCParticle::fromSignal)
-        copy_signal_mcp = CopySignalMCParticles()
-        copy_signal_mcp.OutputPrefix = output_prefix
-        # Don't copy the associated reconstruction, as Tesla already saves it
-        copy_signal_mcp.SaveAssociatedRecoInfo = False
-        copy_signal_mcp.OutputLevel = output_level
-
-        algorithms = [copy_pp2mcp, copy_signal_mcp]
-        seq = GaudiSequencer('TurboMCFiltering', Members=algorithms)
-
-        return seq
-
-    def _configureForOnline(self,stream):
-        #
-        DecodeRawEvent().DataOnDemand=False
-        writer=InputCopyStream( self.writerName+stream )
-        self._safeSet(DstConf(), ['SplitRawEventOutput'])
-
-        # we can only do this if we are setting one output writer
-        if not self.getProp("Streams"):
-            # Use RawEventJuggler to create the Turbo stream raw event format
-            tck = "0x409f0045" # DUMMY
-            TurboBanksSeq=GaudiSequencer("TurboBanksSeq")
-            RawEventJuggler().TCK=tck
-            RawEventJuggler().Input="Moore"
-            RawEventJuggler().Output=self.getProp("SplitRawEventOutput")
-            RawEventJuggler().Sequencer=TurboBanksSeq
-            RawEventJuggler().WriterOptItemList=writer
-            RawEventJuggler().KillExtraNodes=True
-            RawEventJuggler().KillExtraBanks=True
-            RawEventJuggler().KillExtraDirectories = True
-            if not self.getProp('VetoJuggle'):
-                self.teslaSeq.Members += [TurboBanksSeq]
-
-        # we should already have configured the lumiAgls by now
-        writer.AcceptAlgs += ["LumiSeq","PhysFilter"]
-
-    def _configureLumi(self):
-
-        # Begin Lumi configuration
-        lumiSeq = GaudiSequencer("LumiSeq")
-        #
-        # Add ODIN decoder to LumiSeq ***
-        from DAQSys.Decoders import DecoderDB
-        CreateODIN=DecoderDB["createODIN"].setup()
-        #********************************
-        #
-        # Main algorithm config
-        lumiCounters = GaudiSequencer("LumiCounters")
-        lumiCounters.Members+=[CreateODIN]
-        lumiSeq.Members += [ lumiCounters ]
-
-        LumiAlgsConf().LumiSequencer = lumiCounters
-        LumiAlgsConf().OutputLevel = self.getProp('OutputLevel')
-        LumiAlgsConf().InputType = "MDF"
-        #
-        # Filter out Lumi only triggers from further processing, but still write to output
-        # Trigger masks changed in 2016, see LHCBPS-1486
-        physFilterRequireMask = []
-        if self.getProp( "DataType" ) in ["2012","2015"]: # 2012 needed for nightlies tests.
-            physFilterRequireMask = [ 0x0, 0x4, 0x0 ]
-        else:
-            physFilterRequireMask = [ 0x0, 0x0, 0x80000000 ]
-        physFilter = HltRoutingBitsFilter( "PhysFilter", RequireMask = physFilterRequireMask )
-
-        FSRWriter = RecordStream( "FSROutputStreamDstWriter")
-        FSRWriter.OutputLevel = INFO
-        self.teslaSeq.Members += [lumiSeq, physFilter]
-
-    def _configureOutput(self):
-
-        TeslaReportAlgoSeq = GaudiSequencer('TeslaReportAlgoSeq')
-
-        lines = self.getProp('TriggerLines')
-        turbo_streams = self.getProp('Streams')
-
-        self.teslaSeq.Members += [ TeslaReportAlgoSeq ]
-
-        # Setting up online
-        if self.getProp('Mode') is "Online":
-            from DAQSys.DecoderClass import decoderToLocation
-            from DAQSys.Decoders import DecoderDB
-            hlt_locs = [ "Hlt/VertexReports/PV3D", "Hlt2/SelReports","Hlt2/DecReports" ]
-            odin=DecoderDB["createODIN"].setup()
-            TeslaReportAlgoSeq.Members += [ odin ] + [ decoderToLocation(DecoderDB,loc).setup() for loc in hlt_locs ]
-
-        totalLines=[]
-        if turbo_streams:
-            lines_left_over = lines[:]
-            missing_lines = []
-            for stream in turbo_streams:
-                for line in turbo_streams[stream]['lines']:
-                    totalLines.append(line)
-                    try:
-                        lines_left_over.remove(line)
-                    except ValueError:
-                        missing_lines.append(line)
-            if self.getProp('ValidateStreams'):
-                msg = "Lines missing from streaming:\n  {}\nLines not in turbo but in streams:\n  {}\n".format(
-                    '\n  '.join(lines_left_over), '\n  '.join(missing_lines))
-                assert lines_left_over==[] and missing_lines==[], msg
-                print("Turbo validated")
-        else:
-            totalLines = lines
-
-        if self.getProp('EnableLineChecker'):
-            lineChecker = TeslaLineChecker("TeslaLineChecker")
-            lineChecker.RequestedLines = totalLines
-            lineChecker.IgnoredLines = self.getProp("IgnoredLines")
-            TeslaReportAlgoSeq.Members += [ lineChecker ]
-        trig1 = self._configureReportAlg(totalLines)
-        TeslaReportAlgoSeq.Members+=[trig1]
-
-        # make use of PrintDuplicates algorithm
-        dplic = PrintDuplicates("TurboDuplicates")
-        dplic.OutputLevel = self.getProp('OutputLevel')
-        for l in totalLines:
-            dplic.Inputs+=[self.base + l + "/Particles"]
-        if self.getProp('DuplicateCheck'):
-            TeslaReportAlgoSeq.Members += [dplic]
-
-        # Make protoparticle -> truth tables *****************************************
-        inputType = self.getProp('InputType')
-        if (inputType=='XDST') or (inputType=='LDST'):
-
-            # Get Turbo++ locations
-            PRtracks=self.getProp("PRtracks")
-            PRclusters=self.getProp("PRclusters")
-            PRprotos=self.getProp("PRchargedPP")
-            PRprotosN=self.getProp("PRneutralPP")
-            protoTypes = self.getProp("ProtoTypesPR")
-
-            # CHARGED ################################################################
-            ChargedProtoSeq = GaudiSequencer("ChargedTruthSequencer")
-
-            # Standard Turbo locations
-            protocont = self.base + "Protos"
-            trackcont = self.base + "Tracks"
-
-            assocpp=ChargedPP2MC("TurboProtoAssocPP")
-            assocpp.OutputLevel = self.getProp('OutputLevel')
-            assocpp.VetoEmpty=True
-            # When filtering MC, the relations table cloners will copy the
-            # tables to /Event/Turbo for us. Otherwise we create them there
-            # directly
-            tesROOT = "/Event/"
-            if not self.getProp("FilterMC"):
-                tesROOT = os.path.join(tesROOT, self.base)
-            assocpp.RootInTES=tesROOT
-            # Start with an empty input list, so we don't accidentally create
-            # relations for non-Turbo/non-PersistReco objects
-            assocpp.InputData = []
-
-            # Add Turbo++ track and protoparticle locations
-            truthSeqStandard = self._configureTrackTruth(assocpp,trackcont)
-            ChargedProtoSeq.Members+=[truthSeqStandard]
-            for PRtype in self.getProp("ProtoTypesPR"):
-                matchedTracks = [s for s in PRtracks if PRtype in s.lower()]
-                matchedProtos = [s for s in PRprotos if PRtype in s.lower()]
-                if len(matchedTracks)>1 or len(matchedProtos)>1:
-                    raise ValueError("Multiple instances of type "+PRtype+" have been detected")
-
-                trackTruthSeq = self._configureTrackTruth(assocpp,matchedTracks[0])
-                print(("Adding additional PR protoparticles for truth matching: "+matchedProtos[0]))
-                assocpp.InputData += [ matchedProtos[0] ]
-                ChargedProtoSeq.Members+=[trackTruthSeq]
-
-            # Add container of merged long and downstream PersistReco PPs
-            # TODO this should be in the list in the configuration file
-            assocpp.InputData += ['Hlt2/Protos/Charged']
-            print(("Adding additional PR protoparticles for truth matching: "+assocpp.InputData[-1]))
-            trackTruthSeq = self._configureTrackTruth(assocpp, '/Event/Hlt2/TrackFitted/Charged')
-            ChargedProtoSeq.Members += [trackTruthSeq]
-
-            # Add standard Turbo ProtoParticles
-            assocpp.InputData += [ protocont ]
-
-            # Add final charged PP2MC algorithm
-            ChargedProtoSeq.Members+=[assocpp]
-
-            # NEUTRAL ################################################################
-            NeutralProtoSeq = GaudiSequencer("NeutralTruthSequencer")
-
-            ## Add the digits associator
-            outputDigiLoc = tesROOT + "Digi2MCP"
-            assocdigits = CaloDigit2MCLinks2Table("TurboDigitAssoc")
-            assocdigits.OutputLevel = self.getProp('OutputLevel')
-            outputiDigiLoc = tesROOT + "Relations/CaloDigits"
-            assocdigits.Output = outputDigiLoc
-
-            ## Add the cluster associator
-            ## Finally configure the neutral PP2MC associator
-            NeutralProtoSeq.Members+=[assocdigits]
-
-            # Gather all protos and clusters
-            neutralClustersTot=[]
-            neutralProtosTot=[]
-
-            # Add standard Turbo
-            neutralClustersTot+=[self.base+"CaloClusters"]
-            neutralProtosTot+=[self.base+"Protos"]
-
-            # Add Turbo++
-            for clusters in PRclusters:
-                neutralClustersTot+=[clusters]
-            for protos in PRprotosN:
-                neutralProtosTot+=[protos]
-
-            # Configure
-            self._configureDigitsTruth()
-            protoneutral = self.neutral_pp2mc_loc
-            if not self.getProp('FilterMC'):
-                protoneutral = os.path.join(tesROOT, protoneutral)
-            retSeq = self._configureClustersAndProtosTruth(outputDigiLoc,neutralClustersTot,neutralProtosTot,protoneutral)
-            NeutralProtoSeq.Members+=[retSeq]
-
-            # Add standard Turbo locations if not packing
-            outputPPLoc = tesROOT+'Relations/Turbo/'
-            if not self.getProp('Pack'):
-                writer.OptItemList+=[
-                        outputPPLoc + 'Protos' + '#99'
-                        ]
-            if not self.getProp('Pack'):
-                writer.OptItemList+=[
-                        protoneutral + '#99'
-                        ]
-            # Add final sequences
-            TeslaReportAlgoSeq.Members+=[ChargedProtoSeq,NeutralProtoSeq]
-
-            # Sequence to copy the relations tables, and the subset of MC
-            # particles used by those tables, into /Event/Turbo
-            if self.getProp("FilterMC"):
-                relationsLocations = [os.path.join('Relations', path)
-                                      for path in assocpp.InputData]
-                relationsLocations.append(protoneutral)
-                filterMCSeq = self._filterMCParticlesSequence(relationsLocations)
-                TeslaReportAlgoSeq.Members += [filterMCSeq]
-
-        if self.getProp('Pack'):
-            packer = PackParticlesAndVertices( name = "TurboPacker",
-                    InputStream        = "/Event"+"/"+self.base.rstrip('/'),
-                    DeleteInput        = False,
-                    EnableCheck        = False,
-                    AlwaysCreateOutput = True)
-            TeslaReportAlgoSeq.Members +=[packer]
-
-            hypopacker = PackCaloHypos( name = "PackCaloHypos",
-                    OutputLevel        = self.getProp('OutputLevel'),
-                    InputName          = self.base+"CaloHypos",
-                    OutputName         = self.base+"pRec/neutral/Hypos" )
-            clusterpacker = PackCaloClusters( name = "PackCaloClusters",
-                    AlwaysCreateOutput = True,
-                    DeleteInput        = False,
-                    OutputLevel        = self.getProp('OutputLevel'),
-                    InputName          = self.base+"CaloClusters",
-                    OutputName         = self.base+"pRec/neutral/Clusters" )
-            TeslaReportAlgoSeq.Members +=[hypopacker,clusterpacker]
-
-            # Pack the filtered MC particles and vertices
-            if self.getProp('Simulation') and self.getProp('FilterMC'):
-                mcp_packer = PackMCParticle(
-                    'TurboPackMCParticle',
-                    AlwaysCreateOutput=True,
-                    DeleteInput=False,
-                    InputName=self.base + 'MC/Particles',
-                    OutputName=self.base + 'pSim/MCParticles'
-                )
-                mcv_packer = PackMCVertex(
-                    'TurboPackMCVertex',
-                    AlwaysCreateOutput=True,
-                    DeleteInput=False,
-                    InputName=self.base + 'MC/Vertices',
-                    OutputName=self.base + 'pSim/MCVertices'
-                )
-                TeslaReportAlgoSeq.Members += [mcp_packer, mcv_packer]
-
-            packer.OutputLevel = min(self.getProp('OutputLevel'),self.getProp('PackerOutputLevel'))
-
-        TeslaOutputStreamsSequence = GaudiSequencer('TeslaOutputStreamsSequence')
-
-        TeslaOutputStreamsSequence.ModeOR = True;
-        TeslaOutputStreamsSequence.IgnoreFilterPassed = True
-
-        if turbo_streams:
-            if self.getProp('Park'):
-                streamsOrig = turbo_streams
-                for stream in list(streamsOrig.keys()):
-                    ps = turbo_streams[stream].get('prescale', None)
-                    if ps:
-                        newDict={}
-                        newDict['lines']=turbo_streams[stream]['lines']
-                        pattern = re.compile("prescaled", re.IGNORECASE)
-                        if "prescaled" in stream.lower():
-                            turbo_streams[pattern.sub("parked", stream)]=newDict
-                        else:
-                            turbo_streams[stream+"parked"]=newDict
-            for stream in turbo_streams:
-                if self.getProp('Mode') is "Online":
-                    self._configureForOnline(stream)
-                TeslaOutputStreamsSequence.Members.append(self._configureOutputStream(stream, turbo_streams[stream]))
-        else:
-            if self.getProp('Mode') is "Online":
-                self._configureForOnline('')
-            TeslaOutputStreamsSequence.Members.append(self._configureOutputStream('', {'lines':lines}))
-
-        # Add the output sequence
-        TeslaReportAlgoSeq.Members += [TeslaOutputStreamsSequence]
-
-    def _configureTruthMatching(self, name, packing):
-        output_level = self.getProp('OutputLevel')
-        extra_track_locs = [os.path.join('/Event', self.base, l) for l in _extra_track_locations]
-        extra_proto_locs = [os.path.join('/Event', self.base, l) for l in _extra_protoparticle_locations]
-
-        # Locations of the objects we want to truth-match
-        track_locs = [packing.outputs['Hlt2LongTracks'],
-                      packing.outputs['Hlt2DownstreamTracks']]
-        track_locs += extra_track_locs
-        proto_locs = [packing.outputs['Hlt2LongProtos'],
-                      packing.outputs['Hlt2DownstreamProtos']]
-        proto_locs += extra_proto_locs
-        cluster_locs = [packing.outputs['Hlt2CaloClusters']]
-        neutral_locs = [packing.outputs['Hlt2NeutralProtos']]
-
-        assocpp = ChargedPP2MC("TurboProtoAssocPP")
-        # Configure Track -> MCParticle relations table maker
-        trackTruthSeq = GaudiSequencer('TurboTrackTruthSequencer')
-        trackTruthSeq.Members = [self._configureTrackTruth(assocpp, loc)
-                                 for loc in track_locs]
-
-        # Configure ProtoParticle -> MCParticle relations table maker
-        assocpp.OutputLevel = output_level
-        assocpp.VetoEmpty = True
-        assocpp.InputData += _strip_root('/Event', proto_locs)
-
-        assocDigits = CaloDigit2MCLinks2Table("TurboDigitAssoc")
-        # The digits relations table maker will try to find the linker table
-        # for digits at `Raw/{det}/Digits` at `Link/Raw/{det}/Digits`. Our
-        # digits are at `Turbo/Raw/{det}/Digits`, but we can't remake a linker
-        # table at `Link/Turbo/Raw/{det}/Digits because the information needed
-        # to make one is lost after Boole.
-        # Instead, exploit the fact that the digits under `Turbo/` are a subset
-        # of the originals, and just symlink the original linker table to the
-        # location expected for the Turbo digits
-        assocDigits.RespectInputDigitLocation = False
-        digit_locs = _strip_root('/Event', assocDigits.getDefaultProperty('Inputs'))
-        turbo_digit_locs = [os.path.join(self.base, l) for l in digit_locs]
-        linkingSeq = GaudiSequencer('TurboLinkTableLinkers')
-        for digit_loc in digit_locs:
-            link_loc = os.path.join('Link', digit_loc)
-            turbo_link_loc = os.path.join('Link', self.base, digit_loc)
-            name = '{0}Linker'.format(link_loc.replace('/', ''))
-            dl = DataLink(name, What=link_loc, Target=turbo_link_loc)
-            linkingSeq.Members.append(dl)
-            # DataLinks don't create the ancestor TES structure, so do it
-            # manually
-            path = ''
-            for node in turbo_link_loc.split(os.path.sep)[:-1]:
-                path = os.path.join(path, node)
-                DataOnDemandSvc().NodeMap[path] = 'DataObject'
-
-        # Configure CaloDigit -> MCParticle relations table maker
-        assocDigits.OutputLevel = output_level
-        # Can use a magic string here as this table is only temporary
-        assocDigits.Output = "Relations/CaloDigits"
-        assocDigits.Inputs = turbo_digit_locs
-
-        # Configure CaloCluster -> MCParticle and neutral ProtoParticle ->
-        # MCParticle relations table makers
-        neutral_rels_loc = self.neutral_pp2mc_loc
-        assocClustersNeutrals = self._configureClustersAndProtosTruth(
-            assocDigits.Output,
-            cluster_locs,
-            neutral_locs,
-            neutral_rels_loc
-        )
-
-        chargedProtoSeq = GaudiSequencer("ChargedTruthSequencer")
-        chargedProtoSeq.Members = [trackTruthSeq, assocpp]
-        neutralProtoSeq = GaudiSequencer("NeutralTruthSequencer")
-        neutralProtoSeq.Members = [linkingSeq, assocDigits, assocClustersNeutrals]
-        truthSeq = GaudiSequencer("TurboTruthSequencer")
-        truthSeq.Members = [chargedProtoSeq, neutralProtoSeq]
-
-        # We have now created the relations tables under /Event/Relations,
-        # and want them under /Event/Turbo/Relations. We have two strategies:
-        #   1. Use the CopyProtoParticle2MCRelations algorithm, which will copy
-        #   the tables *and* the MC particles they reference to under
-        #   /Event/Turbo, updating the copied tables to point to the copied MC
-        #   particles; or
-        #   2. Use Gaudi::DataCopy to copy the tables verbatim, so that they
-        #   still refer to MC objects in /Event/MC.
-        # The first case we call 'filtering', as in principle the original MC
-        # objects can now be deleted because we then only depend on those in
-        # /Event/Turbo/MC. The second case we choose to do when not filtering
-        # so that the paths to the final relations tables are the same as those
-        # in the first case.
-        relationsLocations = [os.path.join('Relations', path)
-                              for path in assocpp.InputData]
-        relationsLocations.append(neutral_rels_loc)
-        if self.getProp('FilterMC'):
-            filterMCSeq = self._filterMCParticlesSequence(relationsLocations)
-            truthSeq.Members += [filterMCSeq]
-        else:
-            base = self.base.rstrip('/')
-            truthSeq.Members.append(
-                GaudiSequencer('CopyRelationsTables', Members=[
-                    DataCopy('Copy{0}'.format(loc.replace('/', '')),
-                             What=loc,
-                             Target=os.path.join(base, loc),
-                             # It's very possible that the extra locations
-                             # might not exist, so no relations table will be
-                             # created; we don't mind the copying failing in
-                             # those cases
-                             NeverFail=True if loc.replace('Relations/', '/Event/') in (extra_track_locs + extra_proto_locs) else False,
-                             OutputLevel=output_level)
-                    for loc in relationsLocations
-                    if self.base in loc
-                ], IgnoreFilterPassed=True)
-            )
-
-        return truthSeq
-
-
-    def _configureOutputStream(self, stream, lines_dict):
-        '''
-        The lines dictionary should have the following form:
-
-        lines: The lines to include in the stream
-        prescale: The amount to prescale, as a dictionary of lines. Uses the Prescale property if not present or None
-        prescaleVersion: A version number
-        park: The amount to park. A second line will be created, with the given amound and the label 'Park' appended (not implemented)
-
-        Only the first key is required. The properties will be taken from self otherwise.
-
-        Returns: a stream sequence
-        '''
-
-
-        # Building output name
-        fname =""
-        if not stream:
-            fname = self.getProp("outputFile")
-        else:
-            fname = self.getProp("outputPrefix") + stream + self.getProp("outputSuffix")
-
-        # Building sequencer with stream
-        seq = GaudiSequencer('TeslaStreamSequence' + stream)
-
-        # Required structure
-        lines = lines_dict['lines']
-
-        # Optional prescaling
-        prescale = lines_dict.get('prescale', None)
-        turboRepLoc="Turbo/DecReports"+stream
-        if prescale:
-            print("Requested to prescale stream: "+stream)
-            # if line not in dictionary, give it a prescale of 1
-            for line in lines:
-                if line not in prescale:
-                    prescale[line]=1.0
-            print(prescale)
-            prescaleVersion = lines_dict.get('prescaleVersion', None)
-            pscaler = TurboPrescaler("TurboPrescaler"+stream)
-            pscaler.FilterOutput=True
-            pscaler.ChosenOutputPrescales=prescale
-            pscaler.PrescaleVersion=prescaleVersion
-            pscaler.HltDecReportsLocation="Hlt2/DecReports"
-            pscaler.ReportsOutputLoc=turboRepLoc
-            seq.Members+=[pscaler]
-
-            # Write new reports to the raw event
-            #from Configurables import HltDecReportsWriter
-            #decWriter = HltDecReportsWriter("Hlt2DecReportsWriter")
-            #decWriter.SourceID=3
-            #decWriter.InputHltDecReportsLocation=turboRepLoc
-            #seq.Members+=[decWriter]
-
-        #retrieve the persistency
-        persistency=None
-        if hasattr(self, "Persistency"):
-            if self.getProp("Persistency") is not None:
-                persistency=self.getProp("Persistency")
-
-        iox=IOExtension(persistency)
-
-        writer = InputCopyStream(self.writerName + stream)
-        writer.OutputLevel = self.getProp('OutputLevel')
-
-        writer.RequireAlgs += [seq]
-
-        # If HDR requested, then filter on the output (required if streaming)
-        if self.getProp("HDRFilter") or self.getProp("Streams"):
-            filtCode='|'.join(["HLT_TURBOPASS_RE(\'"+l+"Decision\')" for l in lines])
-            print("Filter code:")
-            print(filtCode)
-            HLTFilter = HltDecReportsFilter ('Hlt2_HLTFilter' + stream
-                    , Code  = filtCode
-                    , Location = "Hlt2/DecReports"
-                    )
-            writer.RequireAlgs+=[HLTFilter]
-            seq.Members+=[HLTFilter]
-
-        # Add our prescaled reports if present
-        if prescale:
-            writer.OptItemList+=[ turboRepLoc + "#99"]
-
-        for l in lines:
-            # IF NOT PACKING NEED TO SET THE LOCATIONS IN THE REPORT ALGORITHM
-            if not self.getProp('Pack'):
-                writer.OptItemList+=[ self.base + l + "/Particles#99"
-                        , self.base + l + "/Vertices#99"
-                        , self.base + l + "/_ReFitPVs#99"
-                        , self.base + l + "/Particle2VertexRelations#99"
-                        ]
-
-        if not self.getProp('Pack'):
-            writer.OptItemList+=[
-                self.base + "Protos#99"
-                ,self.base + "Tracks#99"
-                ,self.base + "RichPIDs#99"
-                ,self.base + "MuonPIDs#99"
-                ,self.base + "CaloHypos#99"
-                ,self.base + "CaloClusters#99"
-                ]
-
-
-        # Does this need to be in streaming? HENRYIII
-        # Add shared places to writer
-        # SB: Might as well support non-packing case.
-        if not self.getProp('Pack'):
-            writer.OptItemList+=[
-                    self.base + "Primary#99"
-                    , self.base + "Rec/Summary#99"
-                    ]
-
-        if self.getProp('Pack'):
-            writer.OptItemList+=[
-                    self.base+"pPhys/Particles#99"
-                    ,self.base+"pPhys/Vertices#99"
-                    ,self.base+"pPhys/RecVertices#99"
-                    ,self.base+"pPhys/Relations#99"
-                    ,self.base+"pPhys/PP2MCPRelations#99"
-                    ,self.base+"pPhys/PartToRelatedInfoRelations#99"
-                    ,self.base+"pRec/Track/Custom#99"
-                    ,self.base+"pRec/Muon/CustomPIDs#99"
-                    ,self.base+"pRec/Rich/CustomPIDs#99"
-                    ,self.base+"pRec/ProtoP/Custom#99"
-                    ,self.base+"pRec/neutral/Hypos#99"
-                    ,self.base+"pRec/neutral/Clusters#99"
-                    ,self.base+"Rec/Summary#99"
-                    ,self.base+"pSim/MCParticles#99"
-                    ,self.base+"pSim/MCVertices#99"
-                    ]
-
-        IOHelper(persistency,persistency).outStream(fname,writer,writeFSR=self.getProp('WriteFSR'))
-        return seq
-
-    def _configureReportAlg(self, lines):
-        trig1 = TeslaReportAlgo("TeslaReportAlgo")
-        trig1.OutputPrefix=self.base
-        trig1.PV=self.getProp('PV')
-        if self.getProp('VertRepLoc')=="Hlt1":
-            trig1.VertRepLoc="Hlt1/VertexReports"
-        else:
-            trig1.VertRepLoc="Hlt2/VertexReports"
-        trig1.PVLoc=self.base+"Primary"
-        trig1.TriggerLines=lines
-        trig1.OutputLevel=self.getProp('OutputLevel')
-        return trig1
-
-    def _selReportsCheck(self, loc='Hlt2/SelReports'):
-        name = '{0}Check'.format(loc.replace('/', ''))
-        return TESCheck(name, Inputs=[loc], Stop=False)
-
-    def _configureOutputTurboSP(self):
-        trigger_lines = self.getProp('TriggerLines')
-        streams = self.getProp('Streams')
-        simulation = self.getProp('Simulation')
-        datatype = self.getProp('DataType')
-        mode = self.getProp('Mode')
-        online = mode == 'Online'
-        vertex_report_location = self.getProp('VertRepLoc')
-        enable_line_checker = self.getProp('EnableLineChecker')
-        raw_format_input = self.getProp('SplitRawEventInput')
-        raw_format_output = self.getProp('SplitRawEventOutput')
-
-        ok = (trigger_lines and not streams) or (streams and not trigger_lines)
-        assert ok, ('Must define at least one of Tesla().Streams and '
-                    'Tesla().TriggerLines, but not both')
-
-        # Treat the no-streaming case as a single anonymous stream
-        if not streams:
-            streams = {'': {'lines': trigger_lines}}
-
-        decoders_seq = GaudiSequencer('TeslaDecoders')
-        if online:
-            from DAQSys.DecoderClass import decoderToLocation
-            from DAQSys.Decoders import DecoderDB
-            hlt_locs = [ "Hlt/VertexReports/PV3D", "Hlt2/SelReports","Hlt2/DecReports" ]
-            odin=DecoderDB["createODIN"].setup()
-            decoders_seq.Members += [ odin ] + [ decoderToLocation(DecoderDB,loc).setup() for loc in hlt_locs ]            
-            DecodeRawEvent().DataOnDemand = False
-            self._safeSet(DstConf(), ['SplitRawEventOutput'])
-
-        # This decoder is setup by TurboConf
-        packed_data_decoder = HltPackedDataDecoder('Hlt2PackedDataDecoder')
-        decoders_seq.Members.append(packed_data_decoder)
-
-        prpacking = PersistRecoConf.PersistRecoPacking(datatype)
-        prunpackers = prpacking.unpackers()
-
-        unpackers_seq = GaudiSequencer('TeslaUnpackers')
-        # Need to run the packers in reverse order, due to object dependencies
-        unpackers_seq.Members += prunpackers[::-1]
-        unpack_psandvs = UnpackParticlesAndVertices(
-            InputStream='/Event/Turbo'
-        )
-        unpackers_seq.Members.append(unpack_psandvs)
-
-        stream_sequences = []
-        for stream_name in streams:
-            stream_seq = self._configureOutputTurboSPStream(
-                stream_name,
-                streams[stream_name]['lines'],
-                prpacking,
-                online,
-                raw_format_output
-            )
-            stream_sequences.append(stream_seq)
-
-        if enable_line_checker:
-            all_lines = sum([d['lines'] for d in streams.values()], [])
-            ignored_lines = self.getProp('IgnoredLines')
-            line_checker = [TeslaLineChecker(
-                RequestedLines=all_lines,
-                IgnoredLines=ignored_lines
-            )]
-        else:
-            line_checker = []
-
-        # Kill the input DstData bank, which is in DAQ/RawEvent online, but in
-        # PersistReco/RawEvent offline (e.g. after Brunel)
-        if online:
-            dstdata_killer = [bankKiller(
-                'Hlt2DstDataKiller',
-                BankTypes=['DstData']
-            )]
-        else:
-            dstdata_killer = [EventNodeKiller(
-                'Hlt2DstDataKiller',
-                Nodes=['PersistReco']
-            )]
-
-        # Kill any links the output file might have had to the input file
-        if online and not simulation:
-            address_killer = [AddressKillerAlg()]
-        else:
-            address_killer = []
-
-        streaming_seq = GaudiSequencer(
-            'TeslaStreamsSequence',
-            Members=(
-                [decoders_seq, unpackers_seq] +
-                line_checker +
-                stream_sequences +
-                dstdata_killer +
-                address_killer
-            ),
-            IgnoreFilterPassed=True
-        )
-
-        return streaming_seq
-
-    def _configureOutputTurboSPStream(self, name, lines, packing, online,
-                                      raw_format_output):
-        """Return a sequence for streaming the lines into the named location.
-
-        Copy line outputs for this stream to a stream-specific location.
-
-        Keyword arguments:
-        name -- Name of the stream
-        lines -- List of HLT2 line names that belong in the stream
-        packing -- Instance of PersistRecoConf.PersistRecoPacking
-        online -- Configure in online mode (if True) or offline
-        raw_format_output -- Output format of the raw event
-        """
-        output_prefix = name.title()
-        decisions = [l + 'Decision' for l in lines]
-        # Naming convention for stream-specific algorithms
-        namer = lambda x: '{0}ForStream{1}'.format(x, output_prefix)
-        pack = self.getProp('Pack')
-        write_fsr = self.getProp('WriteFSR')
-        simulation = self.getProp('Simulation')
-        filter_mc = self.getProp('FilterMC')
-        if filter_mc:
-            assert simulation, 'Expected Simulation = True as FilterMC = True'
-
-        stream_seq = GaudiSequencer(namer('TeslaStreamSequence'))
-
-        # Run the stream sequence iff at least one line in the stream fired
-        filter_code = '|'.join([
-            "HLT_TURBOPASS_RE('{0}')".format(l) for l in decisions
-        ])
-        filter = HltDecReportsFilter(
-            namer('Hlt2_HLTFilter'),
-            Code=filter_code
-        )
-        # Don't filter an anonymous stream by default
-        if output_prefix or self.getProp('HDRFilter'):
-            stream_seq.Members.append(filter)
-
-        tes_root = '/Event'
-        # /Event/<stream name>
-        stream_base = os.path.join(tes_root, output_prefix).rstrip('/')
-        # /Event/<stream name>/Turbo
-        turbo_base = os.path.join(stream_base, 'Turbo')
-
-        # Decode the RecSummary from the SelReports
-        recsummary_decoder = RecSummaryFromSelReports(namer('RecSummaryFromSelReports'))
-        recsummary_decoder.InputHltSelReportsLocation = 'Hlt2/SelReports'
-        recsummary_decoder.OutputRecSummaryLocation = os.path.join(turbo_base, 'Rec/Summary')
-        stream_seq.Members.append(GaudiSequencer(
-            namer('RecSummarySeq'), Members=[
-                self._selReportsCheck(),
-                recsummary_decoder
-            ]
-        ))
-
-        if simulation:
-            self._unpackMC()
-            stream_seq.Members.append(self._configureTruthMatching(name, packing))
-
-        # No need to clone if the output prefix is empty (everything stays
-        # under /Event/Turbo)
-        if output_prefix:
-            persistence_svc = self.getProp('ILinePersistenceSvc')
-            ApplicationMgr().ExtSvc.append(persistence_svc)
-            # Tell the persistence service to map any packed locations it knows
-            # about to unpacked locations, as it is the unpacked locations we
-            # want to copy to stream-specific locations
-            TCKLinePersistenceSvc().ContainerMap = packing.packedToOutputLocationMap()
-
-            container_cloner = CopyLinePersistenceLocations(
-                namer('CopyLinePersistenceLocations'),
-                OutputPrefix=output_prefix,
-                LinesToCopy=decisions,
-                ILinePersistenceSvc=persistence_svc
-            )
-            ppc = container_cloner.addTool(ProtoParticleCloner)
-            tcwc = container_cloner.addTool(TrackClonerWithClusters)
-            cdc = container_cloner.addTool(CaloDigitCloner)
-
-            # Use the Track cloner that copies associated track clusters
-            ppc.ICloneTrack = "TrackClonerWithClusters"
-            tcwc.CloneAncestors = False
-
-            # We do two things here:
-            #   1. Configure the CaloCluster and CaloHypo cloners to have
-            #   consistent behaviour;
-            #   2. Force digits to always be cloned when running over simulated
-            #   data.
-            ccc = container_cloner.addTool(CaloClusterCloner, name='CaloClusterCloner')
-            chc = container_cloner.addTool(CaloHypoCloner, name='CaloHypoCloner')
-            ccc.CloneEntriesNeuP = True
-            ccc.CloneEntriesChP = False
-            ccc.CloneEntriesAlways = simulation
-            chc.CloneClustersNeuP = True
-            chc.CloneClustersChP = False
-            chc.CloneDigitsNeuP = True
-            chc.CloneDigitsChP = False
-            chc.CloneClustersAlways = simulation
-
-            # We *always* want associated digits to be cloned in PersistReco
-            ccc_pp = ccc.clone("CaloClusterClonerForTurboPP")
-            ccc_pp.CloneEntriesAlways = True
-            container_cloner.TurboPPICloneCaloCluster = container_cloner.addTool(ccc_pp).getFullName()
-            chc_pp = chc.clone("CaloHypoClonerForTurboPP")
-            chc_pp.CloneClustersAlways = True
-            container_cloner.TurboPPICloneCaloHypo = container_cloner.addTool(chc_pp).getFullName()
-
-            # Look for input objects under /Event/Turbo
-            def prepend_base(configurable, property):
-                """Prepend Tesla.base to the configurable's property value."""
-                default = configurable.getDefaultProperty(property)
-                value = os.path.join(self.base, default)
-                configurable.setProp(property, value)
-            prepend_base(tcwc, 'VeloClusters')
-            prepend_base(tcwc, 'TTClusters')
-            prepend_base(tcwc, 'ITClusters')
-            prepend_base(cdc, 'EcalADCLocation')
-            prepend_base(cdc, 'PrsADCLocation')
-
-            p2pv_cloner = CopyParticle2PVRelationsFromLinePersistenceLocations(
-                namer('CopyP2PVRelationsFromLinePersistenceLocations'),
-                OutputPrefix=output_prefix,
-                LinesToCopy=decisions,
-                ILinePersistenceSvc=persistence_svc
-            )
-
-            p2ri_cloner = CopyParticle2RelatedInfoFromLinePersistenceLocations(
-                namer('CopyP2RelatedInfoFromLinePersistenceLocations'),
-                # Search for all LHCb::RelatedInfoMap objects at the same TES
-                # level as the container of LHCb::Particle objects using the
-                # CLID, rather than a name
-                RelationsBaseName="",
-                UseRelationsCLID=True,
-                OutputPrefix=output_prefix,
-                LinesToCopy=decisions,
-                ILinePersistenceSvc=persistence_svc
-            )
-
-            copy_line_outputs_seq = GaudiSequencer(
-                namer('TeslaCopyLineOutputsSequence'),
-                Members=[
-                    container_cloner,
-                    p2pv_cloner,
-                    p2ri_cloner
-                ],
-                IgnoreFilterPassed=True
-            )
-            stream_seq.Members.append(copy_line_outputs_seq)
-
-        required_output_locations = [
-            str(recsummary_decoder.OutputRecSummaryLocation) + '#1'
-        ]
-        optional_output_locations = []
-        if pack:
-            datatype = self.getProp('DataType')
-            packers = []
-
-            # Pack the PersistReco locations for this stream
-            prpacking_inputs = {
-                k: v.replace(tes_root, stream_base)
-                for k, v in packing.outputs.items()
-            }
-            prpacking_descriptors = {
-                datatype: {
-                    k: d.copy(location=d.location.replace(tes_root, turbo_base))
-                    for k, d in PersistRecoConf.standardDescriptors[datatype].items()
-                }
-            }
-            prpacking_stream = PersistRecoConf.PersistRecoPacking(
-                datatype,
-                inputs=prpacking_inputs,
-                descriptors=prpacking_descriptors
-            )
-            packers += prpacking_stream.packers(identifier=namer(''))
-
-            # Pack everything else that we've cloned
-            psandvs_packer = PackParticlesAndVertices(
-                namer('TurboPacker'),
-                InputStream=turbo_base,
-                VetoedContainers=list(prpacking_stream.inputs.values())
-            )
-            packers.append(psandvs_packer)
-
-            # Pack the filtered MC particles and vertices
-            if filter_mc:
-                mcp_packer = PackMCParticle(
-                    'TurboPackMCParticle',
-                    AlwaysCreateOutput=True,
-                    DeleteInput=False,
-                    RootInTES=turbo_base
-                )
-                mcv_packer = PackMCVertex(
-                    'TurboPackMCVertex',
-                    AlwaysCreateOutput=True,
-                    DeleteInput=False,
-                    RootInTES=turbo_base
-                )
-
-                packers.append(mcp_packer)
-                packers.append(mcv_packer)
-
-                optional_output_locations += [os.path.join(turbo_base, 'pSim#*')]
-
-            for packer in packers:
-                packer.OutputLevel = min(self.getProp('OutputLevel'),
-                                         self.getProp('PackerOutputLevel'))
-
-            # If the stream is anonymous, we must first kill the output of
-            # PackParticlesAndVertices from HLT2 (which lives in the same
-            # place) so that we can re-run the algorithm here
-            # This is done primarily for packing relations tables, which are
-            # packed by PackParticlesAndVertices but created only in Tesla
-            node_killers = []
-            if not output_prefix:
-                enk = EventNodeKiller(namer('KillHLT2PackPsAndVsOutput'))
-                # List of locations produced by PackParticlesAndVertices
-                enk.Nodes = [os.path.join(turbo_base, p) for p in [
-                    'pPhys/Particles',
-                    'pPhys/Vertices',
-                    'pPhys/FlavourTags',
-                    'pPhys/RecVertices',
-                    'pPhys/Relations',
-                    'pPhys/P2MCPRelations',
-                    'pPhys/P2IntRelations',
-                    'pPhys/PartToRelatedInfoRelations',
-                    'pRec/ProtoP/Custom',
-                    'pRec/Muon/CustomPIDs',
-                    'pRec/Rich/CustomPIDs',
-                    'pRec/Track/Custom',
-                    'pPhys/PP2MCPRelations'
-                ]]
-                node_killers.append(enk)
-
-            packing_seq = GaudiSequencer(
-                namer('TeslaPackingSequence'),
-                Members=node_killers + packers,
-                IgnoreFilterPassed=True
-            )
-            stream_seq.Members.append(packing_seq)
-
-            optional_output_locations += [
-                os.path.join(turbo_base, 'pPhys#*'),
-                os.path.join(turbo_base, 'pRec#*'),
-                os.path.join(turbo_base, 'Hlt2/pRec#*')
-            ]
-        else:
-            # Save everything under the stream prefix
-            optional_output_locations += [
-                os.path.join(turbo_base, '#*')
-            ]
-
-        if output_prefix:
-            fname = '{0}{1}{2}'.format(
-                self.getProp('outputPrefix'),
-                output_prefix,
-                self.getProp('outputSuffix')
-            )
-        else:
-            fname = self.getProp('outputFile')
-
-        if online and not simulation:
-            writer = OutputStream(namer(self.writerName))
-            writer.AcceptAlgs += ['LumiSeq', 'PhysFilter']
-            # In online mode we perform the raw event juggling (otherwise
-            # Brunel does it for us), so must save the locations after juggling
-            optional_output_locations += self._output_raw_event_locations(raw_format_output)
-        else:
-            # In offline mode, e.g. after Brunel, propagate everything from the
-            # input file to the output
-            writer = InputCopyStream(namer(self.writerName))
-
-        writer.ItemList = required_output_locations
-        writer.OptItemList = optional_output_locations
-
-        # Keep the 2016 behaviour by not writing out anything if the
-        # sel reports are missing
-        writer.RequireAlgs = [self._selReportsCheck(), stream_seq]
-        iohelper = IOHelper()
-        iohelper.outStream(fname, writer, writeFSR=write_fsr)
-
-        return stream_seq
-
-    def _configureHlt2SelReportsKill(self):
-        from Configurables import bankKiller, HltSelReportsStripper
-
-        inputHlt2RepsToKeep = self.getProp('InputHlt2RepsToKeep')
-
-        kill_seq = GaudiSequencer('Hlt2SelReportsKillerSeq')
-
-        killer = bankKiller("Hlt2SelReportsBankKiller")
-        killer.BankTypes = ["HltSelReports"]
-        killer.DefaultIsKill = False
-        # HltSelReportsWriter::kSourceID_Hlt2 << HltSelReportsWriter::kSourceID_BitShift
-        killer.KillSourceID = 2 << 13
-        # HltSelReportsWriter::kSourceID_MajorMask
-        killer.KillSourceIDMask = 0xE000
-        kill_seq.Members.append(killer)
-
-        # if the list of reports to keep is empty, do nothing more
-        if inputHlt2RepsToKeep:
-            assert all(name.endswith('Decision') for name in inputHlt2RepsToKeep)
-
-            from DAQSys.Decoders import DecoderDB
-            selreports_decoder = DecoderDB['HltSelReportsDecoder/Hlt2SelReportsDecoder']
-            selreports_loc = selreports_decoder.Outputs['OutputHltSelReportsLocation']
-            decreports_decoder = DecoderDB['HltDecReportsDecoder/Hlt2DecReportsDecoder']
-            decreports_loc = decreports_decoder.Outputs['OutputHltDecReportsLocation']
-
-            # Stop the sequence if Hlt2/SelReports does not exist
-            kill_seq.Members.append(self._selReportsCheck())
-
-            stripper = HltSelReportsStripper('Hlt2SelReportsStripper')
-            stripper.InputHltSelReportsLocation = selreports_loc
-            stripper.OutputHltSelReportsLocation = 'Hlt2/SelReportsFiltered'
-            stripper.OutputHltObjectSummariesLocation = (
-                str(stripper.OutputHltSelReportsLocation) + '/Candidates')
-            stripper.SelectionNames = inputHlt2RepsToKeep
-            stripper.OutputLevel = self.getProp('OutputLevel')
-            kill_seq.Members.append(stripper)
-
-            writer = HltSelReportsWriter('Hlt2SelReportsFilteredWriter')
-            writer.SourceID = 2
-            writer.InputHltSelReportsLocation = str(stripper.OutputHltSelReportsLocation)
-            writer.OutputLevel = self.getProp('OutputLevel')
-            # By the time the stripper runs Hlt2/DecReports should exist
-            writer.UseTCK = True  # use the TCKANNSvc for converting names to numbers
-            writer.InputHltDecReportsLocation = decreports_loc
-            kill_seq.Members.append(writer)
-
-        return kill_seq
-
-    def _raw_event_juggler(self, input_format, output_format):
-        # Load the raw event format dictionaries
-        RawEventFormatConf().loadIfRequired()
-
-        j = RawEventJuggler()
-        j.Input = input_format
-        j.Output = output_format
-        j.KillExtraNodes = True
-        j.KillExtraBanks = True
-        j.KillExtraDirectories = True
-        j.Sequencer = GaudiSequencer('TeslaRawEventJugglerSequence')
-
-        return j.Sequencer
-
-    def _output_raw_event_locations(self, output_format):
-        """Return the list of raw event locations for the output format."""
-        # Load the raw event format dictionaries
-        RawEventFormatConf().loadIfRequired()
-
-        locs = list(RawEventLocationsToBanks(output_format))
-        return [os.path.join('/Event', l) + '#1' for l in locs]
-
-    def __apply_configuration__(self):
-        ############## Set other properties ###########
-        self._safeSet( LHCbApp(), ['EvtMax','SkipEvents','Simulation', 'DataType' , 'CondDBtag','DDDBtag'] )
-        self._safeSet( TurboConf(), ['DataType'] )
-
-        # Make sure DQFlags are ignored for Tesla productions
-        if self.getProp('IgnoreDQFlags'):
-            if not LHCbApp().isPropertySet( "IgnoreDQFlags" ) :
-                LHCbApp().setProp( "IgnoreDQFlags", True )
-
-        # Silence, please!
-        LoKiSvc().Welcome = False
-
-        ApplicationMgr().AppName="Tesla, utilising DaVinci"
-        #
-        if self.getProp('Mode') == "Online":
-            self.setProp('WriteFSR',True)
-            if not self.getProp('Simulation'):
-                self._configureLumi()
-        else:
-            DecodeRawEvent().DataOnDemand=True
-            RecombineRawEvent(Version=self.getProp('SplitRawEventInput'))
-            if self.getProp('DataType') in ['2015', '2016'] and self.getProp('Simulation')==True:
-                self._unpackMC()
-                TurboConf().setProp("PersistReco",True)
-                # We don't want the PersistReco reconstruction under
-                # /Event/Turbo, else it will be packed
-                TurboConf().setProp("RootInTES", "/Event")
-
-        # The MC logic requires the DataOnDemandSvc to be enabled
-        if self.getProp('Simulation'):
-            self._configureDataOnDemand()
-
-        if self.getProp('DataType') in ['2017', '2018'] and not self.getProp('CandidatesFromSelReports'):
-            # Unpack the DstData raw bank
-            TurboConf().setProp("RunPackedDataDecoder", True)
-            streaming_seq = self._configureOutputTurboSP()
-            self.teslaSeq.Members.append(streaming_seq)
-        else:
-            self._configureOutput()
-        #
-        EventSelector().PrintFreq = 1000
-
-        # Add monitors if they are there
-        if len(self.getProp('Monitors'))>0:
-            self._configureHistos()
-
-        # Enable the timing table
-        self._configureTimingAuditor()
-
-        if self.getProp('KillInputTurbo'):
-            enk = EventNodeKiller('KillTurbo')
-            enk.Nodes = [ "Turbo" ]
-            ApplicationMgr().TopAlg.insert( 0,  enk.getFullName() )
-
-        if self.getProp('KillInputHlt2Reps'):
-            kill_selreports = self._configureHlt2SelReportsKill()
-            self.teslaSeq.Members += [kill_selreports]
-
-        if self.getProp('SplitRawEventInput') != self.getProp('SplitRawEventOutput'):
-            raw_event_juggler = self._raw_event_juggler(
-                self.getProp('SplitRawEventInput'),
-                self.getProp('SplitRawEventOutput')
-            )
-            self.teslaSeq.Members += [raw_event_juggler]
-
-        ApplicationMgr().TopAlg+=[self.teslaSeq]
diff --git a/Phys/Tesla/python/Tesla/__init__.py b/Phys/Tesla/python/Tesla/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/Phys/Tesla/tests/options/CheckTurboStreamProd.py b/Phys/Tesla/tests/options/CheckTurboStreamProd.py
deleted file mode 100644
index 6d6c9c28ba77195549c413d915b32017768a26df..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/CheckTurboStreamProd.py
+++ /dev/null
@@ -1,59 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""Script to check TCK-TurboStreamProd compatibility.
-
-To be used in LHCbIntegrationTests and the TCK creation procedure.
-Run with e.g.
-    python $TESLAROOT/tests/options/CheckTurboStreamProd.py turbo_lines.json \
-        '$APPCONFIGOPTS/Turbo/Streams_pp_2018_nocharmxsec.py'
-
-"""
-from __future__ import print_function
-import argparse
-import json
-import re
-import sys
-from Gaudi.Configuration import importOptions
-from Configurables import Tesla
-
-parser = argparse.ArgumentParser(description="")
-parser.add_argument("lines", help='JSON file with turbo lines (- for stdin).')
-parser.add_argument("options", nargs='+', help="Appconfig options that configure Tesla")
-args = parser.parse_args()
-
-if args.lines == '-':
-    turbo_lines = json.load(sys.stdin)
-else:
-    with open(args.lines) as f:
-        turbo_lines = json.load(f)
-
-
-for path in args.options:
-    importOptions(path)
-
-
-def ignored_line(line):
-    return any(re.match(pattern, line) for pattern in Tesla().IgnoredLines)
-
-
-checked_lines = [line for line in turbo_lines if not ignored_line(line)]
-lines_in_streams = sum((v['lines'] for v in Tesla().Streams.values()), [])
-
-orphan_lines = set(checked_lines).difference(set(lines_in_streams))
-if orphan_lines:
-    print("The following lines are missing from TurboStreamProd:\n"
-          "{}".format(list(orphan_lines)), file=sys.stderr)
-    sys.exit(1)
-extra_lines = set(lines_in_streams).difference(set(checked_lines))
-if extra_lines:
-    print("Some lines are assigned to a stream but not present:\n"
-          "{}".format(list(extra_lines)))
-print("Passed")
diff --git a/Phys/Tesla/tests/options/DV_LineChecker.py b/Phys/Tesla/tests/options/DV_LineChecker.py
deleted file mode 100644
index db252eeb48e8ce46704c4595775284908505919e..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/DV_LineChecker.py
+++ /dev/null
@@ -1,28 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Configurables import DaVinci
-from Configurables import TeslaLineChecker
-from Configurables import CondDB
-
-from PRConfig import TestFileDB
-TestFileDB.test_file_db["Upgrade_Bd2KstarMuMu"].run(configurable=DaVinci())
-
-# Necessary DaVinci parameters #################
-DaVinci().Simulation   = True
-DaVinci().EvtMax = 50
-DaVinci().TupleFile = 'DVTuples.root'
-DaVinci().PrintFreq = 10
-DaVinci().DataType      = 'Upgrade'
-DaVinci().UserAlgorithms = [ TeslaLineChecker() ] 
-DaVinci().InputType = 'LDST'
-CondDB().Upgrade    = True
-DaVinci().CondDBtag = "sim-20171127-vc-md100"
-DaVinci().DDDBtag = "dddb-20171126"
diff --git a/Phys/Tesla/tests/options/DV_Upgrade_PVs.py b/Phys/Tesla/tests/options/DV_Upgrade_PVs.py
deleted file mode 100644
index f4e3197010e1b88ac92d7d8a9fa56576aafea002..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/DV_Upgrade_PVs.py
+++ /dev/null
@@ -1,75 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from __future__ import print_function
-from Gaudi.Configuration import *
-from LHCbKernel.Configuration import *
-from Configurables import GaudiSequencer,RawEventJuggler
-from Configurables import DaVinci
-from Configurables import DecodeRawEvent
-from Configurables import CondDB
-from Configurables import DstConf
-DstConf().Turbo=True
-
-DaVinci()
-DaVinci().EvtMax=-1
-DaVinci().DataType="Upgrade"
-DaVinci().InputType = 'LDST'
-CondDB().Upgrade    = True
-DaVinci().CondDBtag = "sim-20171127-vc-md100"
-DaVinci().DDDBtag = "dddb-20171126"
-
-from PRConfig import TestFileDB
-TestFileDB.test_file_db["Upgrade_Bd2KstarMuMu"].run(configurable=DaVinci())
-
-import GaudiPython
-from Gaudi.Configuration import ApplicationMgr
-from Configurables import LoKiSvc
-
-from GaudiKernel import ROOT6WorkAroundEnabled
-if ROOT6WorkAroundEnabled('ROOT-7492'):
-    # trigger autoloading of LHCbKernel dictionary
-    GaudiPython.gbl.LHCb.LHCbID
-    # trigger autoloading of DigiEvent dictionary
-    GaudiPython.gbl.LHCb.CaloDigit
-
-gaudi = GaudiPython.AppMgr()
-gaudi.initialize()
-
-tes = gaudi.evtsvc()
-
-vertLoc = "Turbo/Primary"
-
-version='v10r0_0x00fa0051'
-from TurboStreamProd.helpers import *
-from TurboStreamProd import prodDict
-lines = streamLines(prodDict,version,'DiMuon',debug=True)
-lines += streamLines(prodDict,version,'Charm',debug=True)
-lines += streamLines(prodDict,version,'CharmSpec',debug=True)
-
-while True:
-    gaudi.run(1)
-    #
-    if not tes['/Event/DAQ/RawEvent']:
-        print("End of file")
-        break
-    #
-    n=0
-    for line in lines:
-        rep = tes["Hlt2/SelReports"].selReport(line+"Decision")
-        if rep:
-            n+=1
-    if n==0:
-        continue
-
-    if not tes[vertLoc]:
-        print(tes["Hlt2/SelReports"])
-        print("ERROR: PVs have not been created")
-        break
diff --git a/Phys/Tesla/tests/options/TCK_2015RP.py b/Phys/Tesla/tests/options/TCK_2015RP.py
deleted file mode 100644
index cbd27719ae07450bb44cb762a1c70e681158bf5f..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/TCK_2015RP.py
+++ /dev/null
@@ -1,36 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Configurables import Tesla 
-Tesla().Pack = True
-Tesla().DataType = '2015'
-Tesla().Simulation = False
-Tesla().Mode = 'Offline'
-Tesla().VertRepLoc = 'Hlt2'
-Tesla().EvtMax=1000
-Tesla().outputFile = "tesla_2015_TCK.dst"
-Tesla().SplitRawEventInput = '0.4'
-Tesla().SplitRawEventOutput = '0.4'
-
-from Gaudi.Configuration import *
-version='v10r0_0x00fa0051'
-from TurboStreamProd.helpers import *
-from TurboStreamProd import prodDict
-lines = streamLines(prodDict,version,'DiMuon',debug=True)
-lines += streamLines(prodDict,version,'Charm',debug=True)
-lines += streamLines(prodDict,version,'CharmSpec',debug=True)
-
-Tesla().TriggerLines = lines
-Tesla().EnableLineChecker = False
-
-from PRConfig.TestFileDB import test_file_db
-input = test_file_db['TeslaTest_TCK_0x022600a2']
-input.run(configurable=Tesla())
-Tesla().KillInputTurbo = True
diff --git a/Phys/Tesla/tests/options/analyseAll.py b/Phys/Tesla/tests/options/analyseAll.py
deleted file mode 100644
index 82aa0b342a67dccfdd56bb6d88df878a65b24a04..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/analyseAll.py
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from subprocess import call
-import os
-exec(compile(open(os.path.expandvars("$TESLAROOT/tests/options/streams.py"), "rb").read(), os.path.expandvars("$TESLAROOT/tests/options/streams.py"), 'exec'))
-exit_code = call(["python",os.path.expandvars("$TESLAROOT/tests/options/analyseInput.py")])
-if exit_code:
-    exit( exit_code )
-
-for stream,lines in turbo_streams.items():
-    exit_code = call(["python",os.path.expandvars("$TESLAROOT/tests/options/analyseOutput.py"),stream])
-    if exit_code:
-        exit( exit_code )
diff --git a/Phys/Tesla/tests/options/analyseInput.py b/Phys/Tesla/tests/options/analyseInput.py
deleted file mode 100644
index 48fae6365e4859a3f93b09f8e302a5447410cb31..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/analyseInput.py
+++ /dev/null
@@ -1,105 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from __future__ import print_function
-import sys
-
-import GaudiPython as GP
-from GaudiConf import IOHelper
-from Configurables import (
-  LHCbApp,
-  ApplicationMgr,
-  DataOnDemandSvc,
-  DecodeRawEvent,
-  CondDB
-)
-from DAQSys.Decoders import DecoderDB
-        
-
-lhcbApp = LHCbApp()
-
-# Pass file to open as first command line argument
-# Needs to be same file as in TeslaStepStreams.py
-from PRConfig import TestFileDB
-TestFileDB.test_file_db['TeslaTest_2016raw_0x11361609_0x21361609'].run(configurable=lhcbApp)
-
-LHCb = GP.gbl.LHCb
-appConf = ApplicationMgr()
-
-Hlt1SelReportsDecoder=DecoderDB["HltSelReportsDecoder/Hlt1SelReportsDecoder"].setup()
-Hlt1DecReportsDecoder=DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()
-DataOnDemandSvc().AlgMap['Hlt1/SelReports'] = Hlt1SelReportsDecoder
-DataOnDemandSvc().AlgMap['Hlt1/DecReports'] = Hlt1DecReportsDecoder
-Hlt2SelReportsDecoder=DecoderDB["HltSelReportsDecoder/Hlt2SelReportsDecoder"].setup()
-Hlt2DecReportsDecoder=DecoderDB["HltDecReportsDecoder/Hlt2DecReportsDecoder"].setup()
-DataOnDemandSvc().AlgMap['Hlt2/SelReports'] = Hlt2SelReportsDecoder
-DataOnDemandSvc().AlgMap['Hlt2/DecReports'] = Hlt2DecReportsDecoder
-
-appConf.ExtSvc += [DataOnDemandSvc()]
-appMgr = GP.AppMgr()
-
-evt = appMgr.evtsvc()
-import os
-exec(compile(open(os.path.expandvars("$TESLAROOT/tests/options/streams.py"), "rb").read(), os.path.expandvars("$TESLAROOT/tests/options/streams.py"), 'exec'))
-
-decsPerStream = {}
-evtsPerStream = {}
-for stream, lines in turbo_streams.items():
-    decsPerStream[stream] = 0
-    evtsPerStream[stream] = 0
-
-def routing_bits(rawevent):
-    """Return a list with the 96 routing bit values."""
-    rbbanks = rawevent.banks(LHCb.RawBank.HltRoutingBits)
-    if rbbanks.size() < 1: return [0]*96  # some events don't have rb bank                                               
-    assert rbbanks.size() == 1  # stop if we have multiple rb banks                                                     
-    d = rbbanks[rbbanks.size() - 1].data()  # get last bank                                                             
-    bits = "{:032b}{:032b}{:032b}".format(d[2], d[1], d[0])
-    return [int(b) for b in reversed(bits)]
-
-# Number of events has to be the same as in TeslaStepsStreams.py
-for i in range(0,500):
-    appMgr.run(1)
-    #print i
-    decs = 0
-    inStream = False
-    offStream = False
-    rawevent = evt['DAQ/RawEvent']
-    rbits = routing_bits(rawevent)
-    if rbits[95] != 1:
-        continue
-    if not evt["DAQ/ODIN"]:
-        break
-    if not evt["Hlt2/DecReports"]:
-        print("ERROR: Hlt2 dec report missing")
-        continue
-    else:
-        found = {}
-        for stream, lines in turbo_streams.items():
-            found[stream] = False
-
-        for name,dec in evt["Hlt2/DecReports"].decReports().items():
-            if name == 'Hlt2Global':
-                continue
-            if dec.decision()==1:
-                for stream, lines in turbo_streams.items():
-                    if name[:-8] in lines["lines"]:
-                        decsPerStream[stream] = decsPerStream[stream] + 1
-                        found[stream] = True
-                        
-        for stream, lines in turbo_streams.items():
-            if found[stream]:
-                evtsPerStream[stream] =  evtsPerStream[stream] + 1
-
-print(decsPerStream)
-print(evtsPerStream)
-import pickle
-pickle.dump( decsPerStream, open( "decsPerStream.p", "wb" ) )
-pickle.dump( evtsPerStream, open( "evtsPerStream.p", "wb" ) )
diff --git a/Phys/Tesla/tests/options/analyseOutput.py b/Phys/Tesla/tests/options/analyseOutput.py
deleted file mode 100644
index 151ed575af3b58a72d7242d22dd150e4c76bb771..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/analyseOutput.py
+++ /dev/null
@@ -1,135 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from __future__ import print_function
-import sys
-
-import GaudiPython as GP
-from GaudiConf import IOHelper
-from Configurables import (
-  LHCbApp,
-  ApplicationMgr,
-  DataOnDemandSvc,
-  DecodeRawEvent,
-  HltDecReportsDecoder,
-  CondDB
-)
-from DAQSys.Decoders import DecoderDB
-        
-
-lhcbApp = LHCbApp()
-
-# Pass file to open as first command line argument
-stream = sys.argv[-1]
-prefix = ""
-IOHelper('ROOT').inputFiles([prefix+stream+".dst"])
-
-LHCb = GP.gbl.LHCb
-appConf = ApplicationMgr()
-
-Hlt1SelReportsDecoder=DecoderDB["HltSelReportsDecoder/Hlt1SelReportsDecoder"].setup()
-Hlt1DecReportsDecoder=DecoderDB["HltDecReportsDecoder/Hlt1DecReportsDecoder"].setup()
-DataOnDemandSvc().AlgMap['Hlt1/SelReports'] = Hlt1SelReportsDecoder
-DataOnDemandSvc().AlgMap['Hlt1/DecReports'] = Hlt1DecReportsDecoder
-Hlt2SelReportsDecoder=DecoderDB["HltSelReportsDecoder/Hlt2SelReportsDecoder"].setup()
-Hlt2DecReportsDecoder=DecoderDB["HltDecReportsDecoder/Hlt2DecReportsDecoder"].setup()
-DataOnDemandSvc().AlgMap['Hlt2/SelReports'] = Hlt2SelReportsDecoder
-DataOnDemandSvc().AlgMap['Hlt2/DecReports'] = Hlt2DecReportsDecoder
-TurboDecReportsDecoder=HltDecReportsDecoder("TurboDecReportsDecoder")
-TurboDecReportsDecoder.OutputHltDecReportsLocation = 'Turbo/DecReports'+stream
-turboReports = 'Turbo/DecReports'+stream
-DataOnDemandSvc().AlgMap[turboReports] = TurboDecReportsDecoder
-
-
-    
-appConf.ExtSvc += [DataOnDemandSvc()]
-appMgr = GP.AppMgr()
-
-evt = appMgr.evtsvc()
-import os
-import sys
-exec(compile(open(os.path.expandvars("$TESLAROOT/tests/options/streams.py"), "rb").read(), os.path.expandvars("$TESLAROOT/tests/options/streams.py"), 'exec'))
-
-lines = turbo_streams[stream]["lines"]
-lines = [line+"Decision" for line in lines]
-print(lines)
-decLocation = "Hlt2/DecReports"
-if turbo_streams[stream]["prescale"] != None:
-    print("Prescaled stream")
-    decLocation = turboReports
-    
-
-allEvents = 0
-streamDecs = 0
-streamEvents = 0
-for i in range(0,10000):
-    appMgr.run(1)
-    #print i
-    decs = 0
-    inStream = False
-    offStream = False
-    if not evt["DAQ/ODIN"]:
-        break
-    if not evt[decLocation]:
-        print("ERROR: Hlt2 dec report missing. Location ", decLocation)
-        continue
-    else:
-        allEvents = allEvents + 1
-        for name,dec in evt[decLocation].decReports().items():
-            if name == 'Hlt2Global':
-                continue
-            if dec.decision()==1:
-                if name in lines:
-                    inStream = True
-                    decs = decs + 1
-                    streamDecs = streamDecs + 1
-                else:
-                    offStream = True
-        if inStream:
-            streamEvents = streamEvents + 1
-
-    assert inStream, "ERROR: Should not contain events without positive decision of stream"
-    
-    assert (inStream or not offStream), "ERROR: Should not contain events of other streams"
-
-
-print("##### SUMMARY #####")
-print("All Events ",allEvents, ", events in stream", streamEvents, ", postive line decisions ", streamDecs)
-
-if allEvents != streamEvents:
-    print("ERROR: More events than should be in stream")
-
-import pickle
-decsPerStream = pickle.load( open( "decsPerStream.p", "rb" ) )
-evtsPerStream = pickle.load( open( "evtsPerStream.p", "rb" ) )
-if turbo_streams[stream]["prescale"] == None:
-    if decsPerStream[stream] != streamDecs:
-        print("ERROR : Number of input decision different to output")
-        print("Should be ", decsPerStream[stream])
-        assert False
-    if evtsPerStream[stream] != streamEvents:
-        print("ERROR : Number of input events different to output")
-        print("Should be ", evntsPerStream[stream])
-        assert False
-
-else:
-    print("INFO : Stream contains prescaled lines")
-    print("Input decsions were ", decsPerStream[stream])
-    print("Effective prescaling : ", float(streamDecs)/decsPerStream[stream])
-    if streamDecs >= decsPerStream[stream] :
-        print("ERROR : No prescaling applied")
-        assert False
-        
-    print("Input events were ", evtsPerStream[stream])
-    print("Effective prescaling : ", float(streamEvents)/evtsPerStream[stream])
-    if streamEvents >= evtsPerStream[stream] :
-        print("ERROR : No prescaling applied")
-        assert False
-
diff --git a/Phys/Tesla/tests/options/containers.py b/Phys/Tesla/tests/options/containers.py
deleted file mode 100644
index c825ba2f26c26ebe9d4c3411d2d4c21c4a4732f7..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/containers.py
+++ /dev/null
@@ -1,151 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-# Options file for the QMTest to check that the containers have not
-# changed, either in values or in size.
-
-from __future__ import print_function
-from Configurables import Tesla
-from Gaudi.Configuration import *
-
-from Configurables import HltANNSvc
-Hlt2ID = HltANNSvc().Hlt2SelectionID
-if "Hlt2Global" not in Hlt2ID : Hlt2ID.update( {  "Hlt2Global" : 2 } )
-HltANNSvc().Hlt1SelectionID = { 'PV3D' : 10103
-        ,'ProtoPV3D' : 10117
-}
-Hlt2ID.update(  { 'Hlt2IncPhiDecision'           : 50000
-    ,'Hlt2IncPhiSidebandsDecision'  : 50003
-    ,'Hlt2IncPhiTrackFitDecision'   : 50002
-    } )
-HltANNSvc().InfoID = {
-        "FastTTValidationTool/ValidateWithTT"        : 6350,
-        "MatchVeloMuon"                              : 6400,
-        "IsMuonTool"                                 : 6401,
-        "PatForwardTool/LooseForward"                : 6299,
-        "PatForwardTool/TightForward"                : 6300,
-        'Hlt2Topo2BodyBBDTResponse'                  : 6502,
-        'Hlt2Topo3BodyBBDTResponse'                  : 6303,
-        'Hlt2Topo4BodyBBDTResponse'                  : 6304
-        }
-
-Tesla().TriggerLines = ["Hlt2IncPhi"]
-Tesla().EnableLineChecker = False
-Tesla().OutputLevel = 2
-Tesla().EvtMax = -1
-Tesla().Pack = False
-Tesla().SplitRawEventInput = '0.4'
-Tesla().SplitRawEventOutput = '0.4'
-
-from PRConfig.TestFileDB import test_file_db
-input = test_file_db['Tesla_Bsphiphi_MC12wTurbo']
-input.run(configurable=Tesla())
-
-import GaudiPython
-from Gaudi.Configuration import ApplicationMgr
-from Configurables import LoKiSvc
-
-from GaudiKernel import ROOT6WorkAroundEnabled
-if ROOT6WorkAroundEnabled('ROOT-7492'):
-    # trigger autoloading of LHCbKernel dictionary
-    GaudiPython.gbl.LHCb.LHCbID
-    # trigger autoloading of DigiEvent dictionary
-    GaudiPython.gbl.LHCb.CaloDigit
-
-gaudi = GaudiPython.AppMgr()
-gaudi.initialize()
-
-gaudi.algorithm("TeslaReportAlgo").Enable = False
-gaudi.algorithm("DstWriter").Enable = False
-
-tes = gaudi.evtsvc()
-
-selRepLoc = "Hlt2/SelReports"
-
-prefix = "Hlt2IncPhi"
-partLoc ="/Event/Turbo/" + prefix + "/Particles"
-protoLoc ="/Event/Turbo/Protos"
-trackLoc ="/Event/Turbo/Tracks"
-vertLoc ="/Event/Turbo/" + prefix + "/Vertices"
-
-i_partTot=0.0
-i_trackTot=0.0
-i_protoTot=0.0
-i_vertTot=0.0
-#
-n=0
-n_pop=0
-
-#
-meanMass = 0.0
-meanTrackChi2 = 0.0
-meanVertexChi2 = 0.0
-meanDLLK = 0.0
-#
-meanSizePart = 0.0
-meanSizeTrack = 0.0
-meanSizeVert = 0.0
-meanSizeProto = 0.0
-
-#while True:
-while n<1000:
-    n+=1
-    #
-    gaudi.run(1)
-    if not tes['/Event/DAQ/RawEvent']:
-        print("End of file")
-        break
-    #
-    gaudi.executeEvent()
-    gaudi.algorithm("TeslaReportAlgo").execute()
-
-
-    parts   = tes[partLoc]
-    tracks  = tes[trackLoc]
-    verts   = tes[vertLoc]
-    protos  = tes[protoLoc]
-    if not parts:
-        continue
-    else:
-        n_pop+=1.0
-    for part in parts:
-        i_partTot+=1.0
-        meanMass += part.measuredMass()
-    for track in tracks:
-        i_trackTot+=1.0
-        meanTrackChi2 += track.chi2PerDoF()
-    for vert in verts:
-        i_vertTot+=1.0
-        meanVertexChi2 += vert.chi2()
-    for proto in protos:
-        i_protoTot+=1.0
-        meanDLLK += proto.info(603,0)
-meanSizePart = i_partTot / n_pop
-meanMass = meanMass / ( i_partTot  )
-meanSizeTrack = i_trackTot / n_pop
-meanTrackChi2 = meanTrackChi2 / ( i_trackTot  )
-meanSizeVert = i_vertTot / n_pop
-meanVertexChi2 = meanVertexChi2 / ( i_vertTot )
-meanSizeProto = i_protoTot / n_pop
-meanDLLK = meanDLLK / ( i_protoTot )
-
-# print container sizes and mean of interested quantities
-print("Particle Check ***********************************")
-print("Average mass = "+str(round(meanMass,1)))
-print("Average container size = "+str(round(meanSizePart,1)))
-print("Track Check **************************************")
-print("Average chi2 = "+str(round(meanTrackChi2,2)))
-print("Average container size = "+str(round(meanSizeTrack,1)))
-print("Vertex Check *************************************")
-print("Average chi2 = "+str(round(meanVertexChi2,3)))
-print("Average container size = "+str(round(meanSizeVert,1)))
-print("Proto Check **************************************")
-print("Average DLLK = "+str(round(meanDLLK,3)))
-print("Average container size = "+str(round(meanSizeProto,1)))
diff --git a/Phys/Tesla/tests/options/rightList.py b/Phys/Tesla/tests/options/rightList.py
deleted file mode 100644
index 8a16a3de23db0ee97f88fbafd0c1efa502642e19..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/rightList.py
+++ /dev/null
@@ -1,217 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Configurables import TeslaLineChecker
-list = ["Hlt2BottomoniumDiKstarTurbo"
-,"Hlt2CharmHadD02KmPipTurbo"
-,"Hlt2CharmHadDp2KS0KS0KpTurbo"
-,"Hlt2CharmHadDp2KS0KmKpPip_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0KS0PipTurbo"
-,"Hlt2CharmHadDp2KS0KmKpPip_KS0LLTurbo"
-,"Hlt2CharmHadDp2KS0KmPipPip_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0KmPipPip_KS0LLTurbo"
-,"Hlt2CharmHadDp2KS0KpKpPim_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0KpKpPim_KS0LLTurbo"
-,"Hlt2CharmHadDp2KS0KpPimPip_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0KpPimPip_KS0LLTurbo"
-,"Hlt2CharmHadDp2KS0Kp_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0Kp_KS0LLTurbo"
-,"Hlt2CharmHadDp2KS0PimPipPip_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0PimPipPip_KS0LLTurbo"
-,"Hlt2CharmHadDp2KS0Pip_KS0DDTurbo"
-,"Hlt2CharmHadDp2KS0Pip_KS0LLTurbo"
-,"Hlt2CharmHadDp2KmKmKpPipPipTurbo"
-,"Hlt2CharmHadDp2KmKpPimPipPipTurbo"
-,"Hlt2CharmHadDp2KmPimPipPipPipTurbo"
-,"Hlt2CharmHadDpToKmKpKpTurbo"
-,"Hlt2CharmHadDpToKmKpPipTurbo"
-,"Hlt2CharmHadDpToKmPipPipTurbo"
-,"Hlt2CharmHadDpToKmPipPip_ForKPiAsymTurbo"
-,"Hlt2CharmHadDpToKmPipPip_LTUNBTurbo"
-,"Hlt2CharmHadDpToKpKpPimTurbo"
-,"Hlt2CharmHadDpToKpPimPipTurbo"
-,"Hlt2CharmHadDpToPimPipPipTurbo"
-,"Hlt2CharmHadDsp2KS0KS0KpTurbo"
-,"Hlt2CharmHadDsp2KS0KS0PipTurbo"
-,"Hlt2CharmHadDsp2KS0KmKpPip_KS0DDTurbo"
-,"Hlt2CharmHadDsp2KS0KmKpPip_KS0LLTurbo"
-,"Hlt2CharmHadDsp2KS0KmPipPip_KS0DDTurbo"
-,"Hlt2CharmHadDsp2KS0KmPipPip_KS0LLTurbo"
-,"Hlt2CharmHadDsp2KS0KpKpPim_KS0DDTurbo"
-,"Hlt2CharmHadDsp2KS0KpKpPim_KS0LLTurbo"
-,"Hlt2CharmHadDsp2KS0KpPimPip_KS0DDTurbo"
-,"Hlt2CharmHadDsp2KS0KpPimPip_KS0LLTurbo"
-,"Hlt2CharmHadDsp2KS0PimPipPip_KS0DDTurbo"
-,"Hlt2CharmHadDsp2KS0PimPipPip_KS0LLTurbo"
-,"Hlt2CharmHadDsp2KmKmKpPipPipTurbo"
-,"Hlt2CharmHadDsp2KmKpPimPipPipTurbo"
-,"Hlt2CharmHadDsp2KmPimPipPipPipTurbo"
-,"Hlt2CharmHadDspToKmKpKpTurbo"
-,"Hlt2CharmHadDspToKmKpPipTurbo"
-,"Hlt2CharmHadDspToKmKpPip_LTUNBTurbo"
-,"Hlt2CharmHadDspToKmPipPipTurbo"
-,"Hlt2CharmHadDspToKpKpPimTurbo"
-,"Hlt2CharmHadDspToKpPimPipTurbo"
-,"Hlt2CharmHadDspToPimPipPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KS0_KS0DDTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KS0_KS0LLTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KS0_KS0LL_KS0DDTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0DDTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0DD_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0LLTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0LL_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0DDTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0DD_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0LLTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0LL_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0DDTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0DD_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0LLTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0LL_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0DDTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0DD_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0LLTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0LL_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmKmKpPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmKpKpPimTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmKpPimPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmKpTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmKp_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmPimPipPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KmPip_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KpPimPimPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KpPimTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02KpPim_LTUNBTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02PimPimPipPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02PimPipTurbo"
-,"Hlt2CharmHadDstp2D0Pip_D02PimPip_LTUNBTurbo"
-,"Hlt2CharmHadLcp2KS0KS0PpTurbo"
-,"Hlt2CharmHadLcp2LamKmKpPip_Lam2PpPimTurbo"
-,"Hlt2CharmHadLcp2LamKmPipPip_Lam2PpPimTurbo"
-,"Hlt2CharmHadLcp2LamKp_LamDDTurbo"
-,"Hlt2CharmHadLcp2LamKp_LamLLTurbo"
-,"Hlt2CharmHadLcp2LamPip_LamDDTurbo"
-,"Hlt2CharmHadLcp2LamPip_LamLLTurbo"
-,"Hlt2CharmHadLcpToPpKmKmPipPipTurbo"
-,"Hlt2CharmHadLcpToPpKmKpPimPipTurbo"
-,"Hlt2CharmHadLcpToPpKmKpTurbo"
-,"Hlt2CharmHadLcpToPpKmPimPipPipTurbo"
-,"Hlt2CharmHadLcpToPpKmPipTurbo"
-,"Hlt2CharmHadLcpToPpKmPip_LTUNBTurbo"
-,"Hlt2CharmHadLcpToPpKpKpPimPimTurbo"
-,"Hlt2CharmHadLcpToPpKpPimPimPipTurbo"
-,"Hlt2CharmHadLcpToPpKpPimTurbo"
-,"Hlt2CharmHadLcpToPpPimPimPipPipTurbo"
-,"Hlt2CharmHadLcpToPpPimPipTurbo"
-,"Hlt2CharmHadOmm2LamKm_DDDTurbo"
-,"Hlt2CharmHadOmm2LamKm_DDLTurbo"
-,"Hlt2CharmHadOmm2LamKm_LLLTurbo"
-,"Hlt2CharmHadPentaToPhiPpPimTurbo"
-,"Hlt2CharmHadXic0ToPpKmKmPipTurbo"
-,"Hlt2CharmHadXic0ToPpKmKmPip_LTUNBTurbo"
-,"Hlt2CharmHadXiccp2D0PpKmPim_D02KmPipTurbo"
-,"Hlt2CharmHadXiccp2D0PpKmPip_D02KmPipTurbo"
-,"Hlt2CharmHadXiccp2D0PpKpPim_D02KmPipTurbo"
-,"Hlt2CharmHadXiccp2DpPpKm_Dp2KmPipPipTurbo"
-,"Hlt2CharmHadXiccp2DpPpKp_Dp2KmPipPipTurbo"
-,"Hlt2CharmHadXiccp2LcpKmPim_Lcp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccp2LcpKmPip_Lcp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccp2LcpKpPim_Lcp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccp2Xic0Pim_Xic0ToPpKmKmPipTurbo"
-,"Hlt2CharmHadXiccp2Xic0Pip_Xic0ToPpKmKmPipTurbo"
-,"Hlt2CharmHadXiccp2XicpPimPim_Xicp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccp2XicpPimPip_Xicp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccpp2D0PpKmPimPip_D02KmPipTurbo"
-,"Hlt2CharmHadXiccpp2D0PpKmPipPip_D02KmPipTurbo"
-,"Hlt2CharmHadXiccpp2D0PpKpPimPip_D02KmPipTurbo"
-,"Hlt2CharmHadXiccpp2DpPpKmPim_Dp2KmPipPipTurbo"
-,"Hlt2CharmHadXiccpp2DpPpKmPip_Dp2KmPipPipTurbo"
-,"Hlt2CharmHadXiccpp2DpPpKpPip_Dp2KmPipPipTurbo"
-,"Hlt2CharmHadXiccpp2LcpKmPimPip_Lcp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccpp2LcpKmPipPip_Lcp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccpp2LcpKpPimPip_Lcp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccpp2Xic0PimPip_Xic0ToPpKmKmPipTurbo"
-,"Hlt2CharmHadXiccpp2Xic0PipPip_Xic0ToPpKmKmPipTurbo"
-,"Hlt2CharmHadXiccpp2XicpPim_Xicp2PpKmPipTurbo"
-,"Hlt2CharmHadXiccpp2XicpPip_Xicp2PpKmPipTurbo"
-,"Hlt2CharmHadXicpToPpKmPipTurbo"
-,"Hlt2CharmHadXim2LamPim_DDDTurbo"
-,"Hlt2CharmHadXim2LamPim_DDLTurbo"
-,"Hlt2CharmHadXim2LamPim_LLLTurbo"
-,"Hlt2DiMuonBTurbo"
-,"Hlt2DiMuonJPsiTurbo"
-,"Hlt2DiMuonPsi2STurbo"
-,"Hlt2ExoticaDiMuonNoIPTurbo"
-,"Hlt2ExoticaPrmptDiMuonSSTurbo"
-,"Hlt2ExoticaPrmptDiMuonTurbo"
-,"Hlt2LFVJpsiMuETurbo"
-,"Hlt2LFVPhiMuETurbo"
-,"Hlt2LFVPromptPhiMuETurbo"
-,"Hlt2LFVUpsilonMuETurbo"
-,"Hlt2PIDB2KJPsiEENegTaggedTurboCalib"
-,"Hlt2PIDB2KJPsiEEPosTaggedTurboCalib"
-,"Hlt2PIDB2KJPsiMuMuNegTaggedTurboCalib"
-,"Hlt2PIDB2KJPsiMuMuPosTaggedTurboCalib"
-,"Hlt2PIDD02KPiTagTurboCalib"
-,"Hlt2PIDDetJPsiMuMuNegTaggedTurboCalib"
-,"Hlt2PIDDetJPsiMuMuPosTaggedTurboCalib"
-,"Hlt2PIDDs2KKPiSSTaggedTurboCalib"
-,"Hlt2PIDDs2MuMuPiNegTaggedTurboCalib"
-,"Hlt2PIDDs2MuMuPiPosTaggedTurboCalib"
-,"Hlt2PIDDs2PiPhiKKNegTaggedTurboCalib"
-,"Hlt2PIDDs2PiPhiKKPosTaggedTurboCalib"
-,"Hlt2PIDDs2PiPhiMuMuNegTaggedTurboCalib"
-,"Hlt2PIDDs2PiPhiMuMuPosTaggedTurboCalib"
-,"Hlt2PIDKs2PiPiLLTurboCalib"
-,"Hlt2PIDLambda2PPiLLTurboCalib"
-,"Hlt2PIDLambda2PPiLLhighPTTurboCalib"
-,"Hlt2PIDLambda2PPiLLisMuonTurboCalib"
-,"Hlt2PIDLambda2PPiLLveryhighPTTurboCalib"
-,"Hlt2PIDLb2LcMuNuTurboCalib"
-,"Hlt2PIDLb2LcPiTurboCalib"
-,"Hlt2PIDLc2KPPiTurboCalib"
-,"Hlt2PhiPhi2EETurbo"
-,"Hlt2PhiPromptPhi2EETurbo"
-,"Hlt2SLB_B2D0Mu_D02KmKpTurbo"
-,"Hlt2SLB_B2D0Mu_D02KmPipTurbo"
-,"Hlt2SLB_B2D0Mu_D02PimPipTurbo"
-,"Hlt2SLB_B2DstMu_D02KmKpTurbo"
-,"Hlt2SLB_B2DstMu_D02KmPipTurbo"
-,"Hlt2SLB_B2DstMu_D02PimPipTurbo"
-,"Hlt2StrangeKPiPiPiTurbo"
-,"Hlt2TrackEffDiMuonDownstreamMinusHighStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamMinusHighStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamMinusLowStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamMinusLowStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamPlusHighStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamPlusHighStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamPlusLowStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonDownstreamPlusLowStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTMinusHighStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTMinusHighStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTMinusLowStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTMinusLowStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTPlusHighStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTPlusHighStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTPlusLowStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonMuonTTPlusLowStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonMinusHighStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonMinusHighStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonMinusLowStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonMinusLowStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonPlusHighStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonPlusHighStatTaggedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonPlusLowStatMatchedTurboCalib"
-,"Hlt2TrackEffDiMuonVeloMuonPlusLowStatTaggedTurboCalib"
-,"Hlt2TrackEff_D0ToKpiKaonProbeTurbo"
-,"Hlt2TrackEff_D0ToKpiPionProbeTurbo"]
-TeslaLineChecker().RequestedLines = list
-
diff --git a/Phys/Tesla/tests/options/streams.py b/Phys/Tesla/tests/options/streams.py
deleted file mode 100644
index 5d8ba0db9d2890be8a5ff701edc7eb36a88c0b81..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/options/streams.py
+++ /dev/null
@@ -1,241 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-turbo_streams = {
-    'DiMuon': {
-        'lines': [
-            'Hlt2DiMuonBTurbo',
-            'Hlt2DiMuonJPsiTurbo',
-            'Hlt2DiMuonPsi2STurbo',
-            'Hlt2ExoticaPrmptDiMuonSSTurbo',
-            'Hlt2ExoticaPrmptDiMuonTurbo',
-            'Hlt2DiMuonPsi2SLowPTTurbo',
-            'Hlt2ExoticaDiMuonNoIPTurbo',
-            'Hlt2LFVPhiMuETurbo',
-            'Hlt2LFVPromptPhiMuETurbo',
-            'Hlt2LFVUpsilonMuETurbo',
-            'Hlt2PhiPhi2EETurbo',
-            'Hlt2PhiPromptPhi2EETurbo'
-            ],
-        'prescale': None
-    },
-    'Dp_Lcp_Dsp': {
-        'lines': [
-            'Hlt2CharmHadDp2KS0KS0KpTurbo',
-            'Hlt2CharmHadDp2KS0KS0PipTurbo',
-            'Hlt2CharmHadDp2KS0KmKpPip_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0KmKpPip_KS0LLTurbo',
-            'Hlt2CharmHadDp2KS0KmPipPip_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0KmPipPip_KS0LLTurbo',
-            'Hlt2CharmHadDp2KS0KpKpPim_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0KpKpPim_KS0LLTurbo',
-            'Hlt2CharmHadDp2KS0KpPimPip_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0KpPimPip_KS0LLTurbo',
-            'Hlt2CharmHadDp2KS0Kp_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0Kp_KS0LLTurbo',
-            'Hlt2CharmHadDp2KS0PimPipPip_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0PimPipPip_KS0LLTurbo',
-            'Hlt2CharmHadDp2KS0Pip_KS0DDTurbo',
-            'Hlt2CharmHadDp2KS0Pip_KS0LLTurbo',
-            'Hlt2CharmHadDp2KmKmKpPipPipTurbo',
-            'Hlt2CharmHadDp2KmKpPimPipPipTurbo',
-            'Hlt2CharmHadDp2KmPimPipPipPipTurbo',
-            'Hlt2CharmHadDpToKmKpKpTurbo',
-            'Hlt2CharmHadDpToKmKpPipTurbo',
-            'Hlt2CharmHadDpToKmPipPip_ForKPiAsymTurbo',
-            'Hlt2CharmHadDpToKmPipPip_LTUNBTurbo',
-            'Hlt2CharmHadDpToKpKpPimTurbo',
-            'Hlt2CharmHadDpToKpPimPipTurbo',
-            'Hlt2CharmHadDpToPimPipPipTurbo',
-            'Hlt2CharmHadDsp2KS0KS0KpTurbo',
-            'Hlt2CharmHadDsp2KS0KS0PipTurbo',
-            'Hlt2CharmHadDsp2KS0KmKpPip_KS0DDTurbo',
-            'Hlt2CharmHadDsp2KS0KmKpPip_KS0LLTurbo',
-            'Hlt2CharmHadDsp2KS0KmPipPip_KS0DDTurbo',
-            'Hlt2CharmHadDsp2KS0KmPipPip_KS0LLTurbo',
-            'Hlt2CharmHadDsp2KS0KpKpPim_KS0DDTurbo',
-            'Hlt2CharmHadDsp2KS0KpKpPim_KS0LLTurbo',
-            'Hlt2CharmHadDsp2KS0KpPimPip_KS0DDTurbo',
-            'Hlt2CharmHadDsp2KS0KpPimPip_KS0LLTurbo',
-            'Hlt2CharmHadDsp2KS0PimPipPip_KS0DDTurbo',
-            'Hlt2CharmHadDsp2KS0PimPipPip_KS0LLTurbo',
-            'Hlt2CharmHadDsp2KmKmKpPipPipTurbo',
-            'Hlt2CharmHadDsp2KmKpPimPipPipTurbo',
-            'Hlt2CharmHadDsp2KmPimPipPipPipTurbo',
-            'Hlt2CharmHadDspToKmKpKpTurbo',
-            'Hlt2CharmHadDspToKmKpPip_LTUNBTurbo',
-            'Hlt2CharmHadDspToKmPipPipTurbo',
-            'Hlt2CharmHadDspToKpKpPimTurbo',
-            'Hlt2CharmHadDspToKpPimPipTurbo',
-            'Hlt2CharmHadDspToPimPipPipTurbo',
-            'Hlt2CharmHadLcp2KS0KS0PpTurbo',
-            'Hlt2CharmHadLcp2LamKmKpPip_Lam2PpPimTurbo',
-            'Hlt2CharmHadLcp2LamKmPipPip_Lam2PpPimTurbo',
-            'Hlt2CharmHadLcp2LamKp_LamDDTurbo',
-            'Hlt2CharmHadLcp2LamKp_LamLLTurbo',
-            'Hlt2CharmHadLcp2LamPip_LamDDTurbo',
-            'Hlt2CharmHadLcp2LamPip_LamLLTurbo',
-            'Hlt2CharmHadLcpToPpKmKmPipPipTurbo',
-            'Hlt2CharmHadLcpToPpKmKpPimPipTurbo',
-            'Hlt2CharmHadLcpToPpKmKpTurbo',
-            'Hlt2CharmHadLcpToPpKmPimPipPipTurbo',
-            'Hlt2CharmHadLcpToPpKmPip_LTUNBTurbo',
-            'Hlt2CharmHadLcpToPpKpKpPimPimTurbo',
-            'Hlt2CharmHadLcpToPpKpPimPimPipTurbo',
-            'Hlt2CharmHadLcpToPpKpPimTurbo',
-            'Hlt2CharmHadLcpToPpPimPimPipPipTurbo',
-            'Hlt2CharmHadLcpToPpPimPipTurbo'
-        ],
-        'prescale': None
-    },
-    'Dstp_PR': {
-        'lines': [
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0DDTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0DD_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0LLTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0LL_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0DDTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0DD_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0LLTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0LL_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0DDTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0DD_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0LLTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0LL_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0DDTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0DD_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0LLTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0LL_LTUNBTurbo'
-        ],
-        'prescaleVersion': 1,
-        'prescale': {
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0DDTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0DD_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0LLTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmKp_KS0LL_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0DDTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0DD_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0LLTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KmPip_KS0LL_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0DDTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0DD_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0LLTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KpPim_KS0LL_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0DDTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0DD_LTUNBTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0LLTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KS0PimPip_KS0LL_LTUNBTurbo' : 0.1
-            }
-    },
-    'Dstp_two_Dstp_two_LTUNB_D0': {
-        'lines': [
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KS0_KS0DDTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KS0_KS0LLTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KS0KS0_KS0LL_KS0DDTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmKpTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmKp_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmPip_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KpPimTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KpPim_LTUNBTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02PimPipTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02PimPip_LTUNBTurbo',
-            'Hlt2SLB_B2D0Mu_D02KmKpTurbo',
-            'Hlt2SLB_B2D0Mu_D02KmPipTurbo',
-            'Hlt2SLB_B2D0Mu_D02PimPipTurbo',
-            'Hlt2SLB_B2DstMu_D02KmKpTurbo',
-            'Hlt2SLB_B2DstMu_D02KmPipTurbo',
-            'Hlt2SLB_B2DstMu_D02PimPipTurbo'
-            ],
-        'prescale': None
-    },
-    'PR_park': {
-        'lines': [
-            'Hlt2CharmHadD02KmPipTurbo',
-            'Hlt2CharmHadDpToKmPipPipTurbo',
-            'Hlt2CharmHadDspToKmKpPipTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmPipTurbo',
-            'Hlt2CharmHadLcpToPpKmPipTurbo'
-        ],
-        'prescaleVersion': 1,
-        'prescale': {
-            'Hlt2CharmHadD02KmPipTurbo' : 0.1,
-            'Hlt2CharmHadDpToKmPipPipTurbo' : 0.1,
-            'Hlt2CharmHadDspToKmKpPipTurbo' : 0.1,
-            'Hlt2CharmHadDstp2D0Pip_D02KmPipTurbo' : 0.1,
-            'Hlt2CharmHadLcpToPpKmPipTurbo' : 0.1
-            }
-    },
-    'Xiccp_Xic0_Xicp_Dstp_four_penta': {
-        'lines': [
-            'Hlt2CharmHadDstp2D0Pip_D02KmKmKpPipTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmKpKpPimTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmKpPimPipTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KmPimPipPipTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02KpPimPimPipTurbo',
-            'Hlt2CharmHadDstp2D0Pip_D02PimPimPipPipTurbo',
-            'Hlt2CharmHadPentaToPhiPpPimTurbo',
-            'Hlt2CharmHadXic0ToPpKmKmPip_LTUNBTurbo',
-            'Hlt2CharmHadXiccp2D0PpKmPim_D02KmPipTurbo',
-            'Hlt2CharmHadXiccp2D0PpKmPip_D02KmPipTurbo',
-            'Hlt2CharmHadXiccp2D0PpKpPim_D02KmPipTurbo',
-            'Hlt2CharmHadXiccp2DpPpKm_Dp2KmPipPipTurbo',
-            'Hlt2CharmHadXiccp2DpPpKp_Dp2KmPipPipTurbo',
-            'Hlt2CharmHadXiccp2LcpKmPim_Lcp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccp2LcpKmPip_Lcp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccp2LcpKpPim_Lcp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccp2Xic0Pim_Xic0ToPpKmKmPipTurbo',
-            'Hlt2CharmHadXiccp2Xic0Pip_Xic0ToPpKmKmPipTurbo',
-            'Hlt2CharmHadXiccp2XicpPimPim_Xicp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccp2XicpPimPip_Xicp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccpp2D0PpKmPimPip_D02KmPipTurbo',
-            'Hlt2CharmHadXiccpp2D0PpKmPipPip_D02KmPipTurbo',
-            'Hlt2CharmHadXiccpp2D0PpKpPimPip_D02KmPipTurbo',
-            'Hlt2CharmHadXiccpp2DpPpKmPim_Dp2KmPipPipTurbo',
-            'Hlt2CharmHadXiccpp2DpPpKmPip_Dp2KmPipPipTurbo',
-            'Hlt2CharmHadXiccpp2DpPpKpPip_Dp2KmPipPipTurbo',
-            'Hlt2CharmHadXiccpp2LcpKmPimPip_Lcp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccpp2LcpKmPipPip_Lcp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccpp2LcpKpPimPip_Lcp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccpp2Xic0PimPip_Xic0ToPpKmKmPipTurbo',
-            'Hlt2CharmHadXiccpp2Xic0PipPip_Xic0ToPpKmKmPipTurbo',
-            'Hlt2CharmHadXiccpp2XicpPim_Xicp2PpKmPipTurbo',
-            'Hlt2CharmHadXiccpp2XicpPip_Xicp2PpKmPipTurbo',
-            'Hlt2TrackEff_D0ToKpiKaonProbeTurbo',
-            'Hlt2TrackEff_D0ToKpiPionProbeTurbo',
-            'Hlt2BottomoniumDiKstarTurbo',
-            'Hlt2LFVJpsiMuETurbo',
-            'Hlt2StrangeKPiPiPiTurbo'
-        ],
-        'prescale': None
-    },
-    'XimOmm_PR': {
-        'lines': [
-            'Hlt2CharmHadOmm2LamKm_DDDTurbo',
-            'Hlt2CharmHadOmm2LamKm_DDLTurbo',
-            'Hlt2CharmHadOmm2LamKm_LLLTurbo',
-            'Hlt2CharmHadXic0ToPpKmKmPipTurbo',
-            'Hlt2CharmHadXicpToPpKmPipTurbo',
-            'Hlt2CharmHadXim2LamPim_DDDTurbo',
-            'Hlt2CharmHadXim2LamPim_DDLTurbo',
-            'Hlt2CharmHadXim2LamPim_LLLTurbo'
-        ],
-        'prescaleVersion': 1,
-        'prescale': {
-            'Hlt2CharmHadOmm2LamKm_DDDTurbo' : 0.1,
-            'Hlt2CharmHadOmm2LamKm_DDLTurbo' : 0.1,
-            'Hlt2CharmHadOmm2LamKm_LLLTurbo' : 0.1,
-            'Hlt2CharmHadXic0ToPpKmKmPipTurbo' : 0.1,
-            'Hlt2CharmHadXicpToPpKmPipTurbo' : 0.1,
-            'Hlt2CharmHadXim2LamPim_DDDTurbo' : 0.1,
-            'Hlt2CharmHadXim2LamPim_DDLTurbo' : 0.1,
-            'Hlt2CharmHadXim2LamPim_LLLTurbo' : 0.1
-            }
-    },
-}
diff --git a/Phys/Tesla/tests/qmtest/tesla.qms/default_2015.qmt b/Phys/Tesla/tests/qmtest/tesla.qms/default_2015.qmt
deleted file mode 100644
index fe72d08b297d65f8c71eb3949827ab07486a9e16..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/qmtest/tesla.qms/default_2015.qmt
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
-<!--
-    (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration
-
-    This software is distributed under the terms of the GNU General Public
-    Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".
-
-    In applying this licence, CERN does not waive the privileges and immunities
-    granted to it by virtue of its status as an Intergovernmental Organization
-    or submit itself to any jurisdiction.
--->
-<!--
-#######################################################
-# SUMMARY OF THIS TEST
-# ...................
-# Author: sbenson
-# Purpose: Restore from 2015 reprocessing TCK
-# Prerequisites: None
-# Common failure modes, severities and cures: 
-#               . SEVERE: Segfault or raised exception, stderr, nonzero return code
-#               . MAJOR: additional FATAL/ERROR messages always a major problem. no ERROR messages should ever be printed when running this test.
-#               . MINOR: additional WARNING messages, it is unclear how severe these may be, you will need to hunt down the cause and either fix the problem or suppress the warning.
-#               . EXPECTED: At the moment this test has a habit of timing out or being killed by some abort signal in finalize, but the output always looks fine.
-#######################################################
--->
-<extension class="GaudiTest.GaudiExeTest" kind="test">
-  <argument name="program"><text>gaudirun.py</text></argument>
-  <argument name="timeout"><integer>3600</integer></argument>
-  <argument name="args"><set>
-    <text>../options/TCK_2015RP.py</text>
-  </set></argument>
-  <argument name="validator"><text>
-countErrorLines({"FATAL":0, "ERROR":0, "WARNING" :1})
-</text></argument>
-</extension>
-
diff --git a/Phys/Tesla/tests/qmtest/tesla.qms/lineChecker_success.qmt b/Phys/Tesla/tests/qmtest/tesla.qms/lineChecker_success.qmt
deleted file mode 100644
index f712c207f331bfe1b3ea942ecee73c62a7c21ce4..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/qmtest/tesla.qms/lineChecker_success.qmt
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
-<!--
-    (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration
-
-    This software is distributed under the terms of the GNU General Public
-    Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".
-
-    In applying this licence, CERN does not waive the privileges and immunities
-    granted to it by virtue of its status as an Intergovernmental Organization
-    or submit itself to any jurisdiction.
--->
-<!--
-#######################################################
-# SUMMARY OF THIS TEST
-# ...................
-# Author: sstahl
-# Purpose: Test fucntionality of TeslaLineChecker
-# Common failure modes, severities and cures:
-#               . SEVERE: Segfault or raised exception, stderr, nonzero return code
-#               . MAJOR: additional FATAL/ERROR messages always a major problem. no ERROR messages should ever be printed when running this test.
-#               . MINOR: additional WARNING messages, it is unclear how severe these may be, you will need to hunt down the cause and either fix the problem or suppress the warning.
-#               . EXPECTED: At the moment this test has a habit of timing out or being killed by some abort signal in finalize, but the output always looks fine.
-#######################################################
--->
-<extension class="GaudiTest.GaudiExeTest" kind="test">
-  <argument name="program"><text>gaudirun.py</text></argument>
-  <argument name="timeout"><integer>120</integer></argument>
-  <argument name="args"><set>
-    <text>../options/DV_LineChecker.py</text>
-    <text>../options/rightList.py</text>
-  </set></argument>
-  <argument name="validator"><text>
-block="""
-TeslaLineChecker     INFO Number of counters : 1
- |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
- |*"#accept"                                       |        50 |         50 |( 100.0000 +- 0.000000)% |
-"""
-findReferenceBlock(block)
-  </text></argument>
-</extension>
diff --git a/Phys/Tesla/tests/qmtest/tesla.qms/pvrestore.qmt b/Phys/Tesla/tests/qmtest/tesla.qms/pvrestore.qmt
deleted file mode 100644
index 0811bfef74f64a96f2078957a151db5a79496af0..0000000000000000000000000000000000000000
--- a/Phys/Tesla/tests/qmtest/tesla.qms/pvrestore.qmt
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" ?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
-<!--
-    (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration
-
-    This software is distributed under the terms of the GNU General Public
-    Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".
-
-    In applying this licence, CERN does not waive the privileges and immunities
-    granted to it by virtue of its status as an Intergovernmental Organization
-    or submit itself to any jurisdiction.
--->
-<!--
-#######################################################
-# SUMMARY OF THIS TEST
-# ...................
-# Author: sbenson
-# Purpose: Check Tesla restores online PVs correctly
-# Prerequisites: None
-# Common failure modes, severities and cures: 
-#               . SEVERE: Segfault or raised exception, stderr, nonzero return code
-#               . MAJOR: additional FATAL/ERROR messages always a major problem. no ERROR messages should ever be printed when running this test.
-#               . MINOR: additional WARNING messages, it is unclear how severe these may be, you will need to hunt down the cause and either fix the problem or suppress the warning.
-#               . EXPECTED: At the moment this test has a habit of timing out or being killed by some abort signal in finalize, but the output always looks fine.
-#######################################################
--->
-<extension class="GaudiTest.GaudiExeTest" kind="test">
-  <argument name="program"><text>python</text></argument>
-  <argument name="timeout"><integer>3600</integer></argument>
-  <argument name="args"><set>
-    <text>../options/DV_Upgrade_PVs.py</text>
-  </set></argument>
-  <argument name="validator"><text>
-countErrorLines({"FATAL":0, "ERROR":0, "WARNING" :1})
-  </text></argument>
-</extension>
-
diff --git a/Phys/TurboCache/CMakeLists.txt b/Phys/TurboCache/CMakeLists.txt
deleted file mode 100644
index 091f1ae711e33e62eac24e6594853411511e6406..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/CMakeLists.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-################################################################################
-# Package: TurboCache
-################################################################################
-gaudi_subdir(TurboCache)
-
-gaudi_depends_on_subdirs(Phys/Tesla
-                         Phys/LoKiHlt
-                         Phys/LoKiArrayFunctors
-                         Phys/LoKiHlt
-                         Phys/LoKiPhys
-                         Phys/LoKiAlgo
-                         Phys/LoKiCore)
-
-find_package(Boost)
-find_package(ROOT)
-include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS})
-
-set(options_Turbo04
-    ${AppConfig_DIR}/options/Turbo/Tesla_Data_2017.py
-    ${AppConfig_DIR}/options/Turbo/Streams_pp_2017.py
-    ${AppConfig_DIR}/options/Turbo/Tesla_KillInputHlt2Reps.py
-    )
-
-set(options_Turbo04_TurCal
-    ${AppConfig_DIR}/options/Turbo/Tesla_Data_2017_TurCal.py
-    ${AppConfig_DIR}/options/Turbo/Tesla_Calibration_Hlt2Lines_2017.py
-    )
-
-
-# Do not build for the -O0 platform, as this seems to have problems.
-if (NOT "$ENV{CMTCONFIG}" MATCHES ".*-do0$")
-
-  # Import the cache creation module
-  include(LoKiFunctorsCache)
-
-  # Set dependency so caches build last, after Tesla itself.
-  set(conf_deps ${deps} MergedConfDB)
-
-  #foreach(production Turbo04 Turbo04_TurCal)
-  foreach(production )
-    set(cache_name ${production}_FunctorCache)
-    set(option_files ${options_${production}})
-    MESSAGE(STATUS "Cache for ${production} from: ${option_files}")
-
-    loki_functors_cache(${cache_name}
-                        options/SuppressLogMessages.py
-                        ${option_files}
-                        options/NoEvents.py
-                        options/DisableLoKiCacheFunctors.py
-                        FACTORIES HltFactory Hlt2HltFactory
-                        LINK_LIBRARIES LoKiHltLib
-                        DEPENDS ${conf_deps}
-                        SPLIT 10)
-  endforeach()
-endif()
diff --git a/Phys/TurboCache/doc/release.notes b/Phys/TurboCache/doc/release.notes
deleted file mode 100644
index 7018dfe28c4a03338da01e56e13f71451b5248df..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/doc/release.notes
+++ /dev/null
@@ -1,14 +0,0 @@
-! -----------------------------------------------------------------------------
-! Package     : TurboCache
-! Responsible : 
-! Purpose     : Keep C++ functors for turbo
-! Created     : 2016-09-17
-! -----------------------------------------------------------------------------
-
-2016-09-17 - Sascha Stahl
-- Initial commit of TurboCache, creates the cache for the first streaming 
-  production of 2016.
-
-! -----------------------------------------------------------------------------
-! The END
-! -----------------------------------------------------------------------------
diff --git a/Phys/TurboCache/options/DisableLoKiCacheFunctors.py b/Phys/TurboCache/options/DisableLoKiCacheFunctors.py
deleted file mode 100644
index 29dfb9324efe7669c0500155761a439af42dde3d..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/options/DisableLoKiCacheFunctors.py
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-
-from Configurables import ApplicationMgr
-ApplicationMgr().Environment['LOKI_DISABLE_CACHE'] = '1'
diff --git a/Phys/TurboCache/options/NoEvents.py b/Phys/TurboCache/options/NoEvents.py
deleted file mode 100644
index 1406b15ed9b065c5bf1a899493eb23d6a6657d8b..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/options/NoEvents.py
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Tesla.Configuration import Tesla
-Tesla().EvtMax = 0
diff --git a/Phys/TurboCache/options/SilenceErrors.py b/Phys/TurboCache/options/SilenceErrors.py
deleted file mode 100644
index 5ddada99e302adf32bad885519332696eeb808f3..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/options/SilenceErrors.py
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-# -*- coding: utf-8 -*-
-from Gaudi.Configuration import MessageSvc, FATAL
-MessageSvc(OutputLevel=FATAL)
diff --git a/Phys/TurboCache/options/Streams_v4r1.py b/Phys/TurboCache/options/Streams_v4r1.py
deleted file mode 100644
index 928d767bf7e95f0d908037674882c782a06b849d..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/options/Streams_v4r1.py
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from TurboStreamProd.streams import turbo_streams
-from Tesla.Configuration import Tesla
-Tesla().Streams = turbo_streams["2016"]
-
-#Tesla().ValidateStreams = True
-# Turn on Sascha's algorithm ignoring TurboCalib
-Tesla().EnableLineChecker = True
-Tesla().IgnoredLines = [".*TurboCalib"]
diff --git a/Phys/TurboCache/options/SuppressLogMessages.py b/Phys/TurboCache/options/SuppressLogMessages.py
deleted file mode 100644
index 37e68acd89a76ea36c3c8debaf9b30c748cdb3e7..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/options/SuppressLogMessages.py
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-import logging
-from GaudiKernel.ProcessJobOptions import GetConsoleHandler
-
-# Do not print any of the messages with level lower than WARNING
-GetConsoleHandler().disable(allowed=logging.WARNING)
diff --git a/Phys/TurboCache/options/Tesla_Data_2016_forStreams_v2.py b/Phys/TurboCache/options/Tesla_Data_2016_forStreams_v2.py
deleted file mode 100755
index 25a42373251dc2ac21ecab5027c386e356d03045..0000000000000000000000000000000000000000
--- a/Phys/TurboCache/options/Tesla_Data_2016_forStreams_v2.py
+++ /dev/null
@@ -1,28 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from Tesla.Configuration import Tesla
-Tesla().Pack = True
-Tesla().InputType = "RAW"
-Tesla().DataType = '2016'
-Tesla().Simulation = False
-Tesla().Mode = 'Online'
-Tesla().RawFormatVersion = 0.2
-Tesla().VertRepLoc = 'Hlt2'
-Tesla().Park=True
-Tesla().KillInputHlt2Reps=True
-
-Tesla().outputSuffix = ".mdst"
-#Tesla().outputPrefix = "TURBO_"
-
-### Already juggled online
-Tesla().VetoJuggle = True
-
-Tesla().HDRFilter=True