From 8f562ec0fb91f513e343e94bfd0aed410f27dfc0 Mon Sep 17 00:00:00 2001
From: erodrigu <eduardo.rodrigues@cern.ch>
Date: Fri, 7 Jan 2022 09:15:25 +0100
Subject: [PATCH] Remove Phys/LoKiJets

---
 CMakeLists.txt                                |    3 +-
 Phys/LoKiJets/CMakeLists.txt                  |   48 -
 Phys/LoKiJets/doc/release.notes               |  444 -------
 Phys/LoKiJets/histo/jec.root                  |  Bin 95312 -> 0 bytes
 .../python/LoKiJets/StdJets_Configuration.py  |   53 -
 Phys/LoKiJets/python/LoKiJets/__init__.py     |   44 -
 Phys/LoKiJets/src/LoKiFastJetMaker.cpp        |  198 ---
 Phys/LoKiJets/src/LoKiFastJetMaker.h          |  290 -----
 .../LoKiJets/src/LoKiFastJetWithAreaMaker.cpp |  318 -----
 Phys/LoKiJets/src/LoKiJetMakerAlg.cpp         |  358 ------
 Phys/LoKiJets/src/LoKiJetMakerWR2VtxAlg.cpp   |  184 ---
 Phys/LoKiJets/src/LoKiJetParticleMaker.cpp    |  120 --
 Phys/LoKiJets/src/LoKiJets2JetsAlg.cpp        |  144 ---
 Phys/LoKiJets/src/LoKiSeedConeJetMaker.cpp    |  508 --------
 Phys/LoKiJets/src/LoKiSeedFinder.cpp          |  969 --------------
 Phys/LoKiJets/src/LoKiVVSeedFinder.cpp        | 1118 -----------------
 Phys/LoKiJets/src/LoKiVVSeedFinder.h          |  274 ----
 17 files changed, 1 insertion(+), 5072 deletions(-)
 delete mode 100644 Phys/LoKiJets/CMakeLists.txt
 delete mode 100755 Phys/LoKiJets/doc/release.notes
 delete mode 100644 Phys/LoKiJets/histo/jec.root
 delete mode 100755 Phys/LoKiJets/python/LoKiJets/StdJets_Configuration.py
 delete mode 100755 Phys/LoKiJets/python/LoKiJets/__init__.py
 delete mode 100644 Phys/LoKiJets/src/LoKiFastJetMaker.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiFastJetMaker.h
 delete mode 100644 Phys/LoKiJets/src/LoKiFastJetWithAreaMaker.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiJetMakerAlg.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiJetMakerWR2VtxAlg.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiJetParticleMaker.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiJets2JetsAlg.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiSeedConeJetMaker.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiSeedFinder.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiVVSeedFinder.cpp
 delete mode 100644 Phys/LoKiJets/src/LoKiVVSeedFinder.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bba2d728e..05b5d7ace 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
 ###############################################################################
-# (c) Copyright 2000-2021 CERN for the benefit of the LHCb Collaboration      #
+# (c) Copyright 2000-2022 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".   #
@@ -62,7 +62,6 @@ lhcb_add_subdirectories(
     Phys/LoKiAlgo
     Phys/LoKiArrayFunctors
     Phys/LoKiFitters
-    Phys/LoKiJets
     Phys/LoKiPhys
     Phys/LoKiProtoParticles
     Phys/LoKiTracks
diff --git a/Phys/LoKiJets/CMakeLists.txt b/Phys/LoKiJets/CMakeLists.txt
deleted file mode 100644
index 3f9fb4b78..000000000
--- a/Phys/LoKiJets/CMakeLists.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2021 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.                                       #
-###############################################################################
-#[=======================================================================[.rst:
-Phys/LoKiJets
--------------
-#]=======================================================================]
-
-gaudi_add_module(LoKiJets
-    SOURCES
-        src/LoKiFastJetMaker.cpp
-        src/LoKiFastJetWithAreaMaker.cpp
-        src/LoKiJetMakerAlg.cpp
-        src/LoKiJetMakerWR2VtxAlg.cpp
-        src/LoKiJetParticleMaker.cpp
-        src/LoKiJets2JetsAlg.cpp
-        src/LoKiSeedConeJetMaker.cpp
-        src/LoKiSeedFinder.cpp
-        src/LoKiVVSeedFinder.cpp
-    LINK
-        AIDA::aida
-        Boost::headers
-        FastJet::FastJet
-        Gaudi::GaudiAlgLib
-        Gaudi::GaudiKernel
-        Gaudi::GaudiUtilsLib
-        LHCb::LHCbMathLib
-        LHCb::LoKiCoreLib
-        LHCb::PhysEvent
-        LHCb::RecEvent
-        Phys::DaVinciInterfacesLib
-        Phys::DaVinciKernelLib
-        Phys::DaVinciTypesLib
-        Phys::LoKiAlgo
-        Phys::LoKiPhysLib
-        ROOT::GenVector
-        ROOT::Hist
-        ROOT::MathCore
-)
-
-gaudi_install(PYTHON)
diff --git a/Phys/LoKiJets/doc/release.notes b/Phys/LoKiJets/doc/release.notes
deleted file mode 100755
index 888ed48bd..000000000
--- a/Phys/LoKiJets/doc/release.notes
+++ /dev/null
@@ -1,444 +0,0 @@
-! -----------------------------------------------------------------------------
-! Package     : Phys/LoKiJets
-! Responsible : Victor Coco victor.coco@cern.ch
-! Purpose     : Jet finding algorithm embedded into LHCb software
-! -----------------------------------------------------------------------------
-
-!========================= LoKiJets v6r15 2016-03-04 ==========================
-
-! 2016-02-14 - Phil Ilten
- - Added option to turn off banner for HLT.
-
-!========================= LoKiJets v6r14 2015-11-25 ==========================
-
-! 2015-11-01 - Gerhard Raven
- - replace endreq with endmsg
-
-!========================= LoKiJets v6r13 2015-10-07 ==========================
-! 2015-08-12 - Gerhard Raven
- - remove #include of obsolete Gaudi headers
-
-!========================= LoKiJets v6r12 2014-10-30 =========================
-
-! 2014-10-20 - Chris Jones
- - General downgrading of various Error and Warning message, to sanitise a bit
-   things for running in production, the Stripping.
-
-!========================= LoKiJets v6r11p1 2014-09-30 =========================
-
-! 2014-09-18 - Marco Clemencic 
- - Fixed compilation problem with head version of ROOT. 
-
-!========================= LoKiJets v6r11 2014-07-25 =========================
-
-! 2014-06-18 - Wouter Hulsbergen
- - Change default values of RecombinationScheme and Strategy in LokiFastJetmaker
-   to default values in fastjet. The change in Strategy saves a factor ~50 in
-   execution time.
-
-!========================= LoKiJets v6r10 2014-02-20 =========================
-
-! 2014-02-06 - Marco Clemencic
- - Reverted the workaround because it's now in Gaudi.
-
-! 2014-02-03 - Marco Clemencic
- - Fixed problems with some incompatibilities between the new Plugin Service and 
-   the old one. 
-   Some templated tools are called using explicitly the old naming, and that was 
-   not working with the new plugin service. 
-
-! 2014-01-25 - Chris Jones
- - Sanitise unneccessary info() printout for production.
- - Replace cout (not allowed) with debug().
- - Protect debug() and verbose() messages behind if statements.
-
-!========================= LoKiJets v6r9 2013-10-29 =========================
-
-! 2013-10-10 - Chris Jones
- - Some minor clean ups and typo fixes.
-
-! 2013-10-10 - Cedric Potterat
- - Fixing Memory Leak detected by Valgrind.
-
-!========================= LoKiJets v6r8p2 2013-06-13 =========================
-
-! 2013-05-21 - Chris Jones
- - Do not use cout (not allowed), replace with info() messages.
- - Protect debug() with if ( msglevel(MSG::DEBUG) ) checks
- - Fix clang 3.2 warnings.
-
-!========================= LoKiJets v6r8p1 2013-04-05 =========================
-
-! 2013-03-22 - Cedric Potterat
- - Fix Covertiy defect in LoKiSeedFinder.cpp
-
-!========================= LoKiJets v6r8 2012-11-30 =========================
-
-! 2012-11-29 - Marco Clemencic
- - Added CMake configuration file.
-
-! 2012-11-26 - Victor Coco
- - LoKiFastJetWithAreaMaker now compatible with fastjet 3.0. 
-   TODO: implement more easy config of the area type
-
-!========================= LoKiJets v6r7 2012-10-04 =========================
-
-! 2012-09-27 - Murilo Rangel
-- JetID cuts Updated also for no PV association
-
-! 2012-09-26 - Murilo Rangel
-- Updated jec.root file and JetID cuts
-
-!========================= LoKiJets v6r6p1 2012-07-09 =========================
-
-! 2012-06-29 - Chris Jones
- - Use a public instance of LoKi::DistanceCalculator
-
-!========================= LoKiJets v6r6 2012-06-28 =========================
-
-! 2012-06-27 - potterat
- - correct the the jet 2 pv association. 
-
-!========================= LoKiJets v6r5 2012-05-03 =========================
-
-! 2012-04-27 - rangel
-- Added more jet information
-
-!========================= LoKiJets v6r4 2012-03-01 =========================
-
-! 2012-02-29 - rangel
- - n90 small bug fix
-
-!========================= LoKiJets v6r3 2012-02-03 =========================
-
-! 2012-01-28 - Chris Jones
- - Fix compilation warnings introduced with the last commit
- - Remove obsolete file LoKiJets_dll.cpp
-
-! 2012-01-27 - Victor Coco
- - Add some jet ID variable in LoKiJetMakerAlg
- - Clean LoKiFastJetMaker from outdated options
- - Add JEC reference histogram in histo/jec.root
- - Add JEC correction in LoKiJetMakerAlg
-
-! 2012-01-17 - Victor Coco
- - Add some protection against jets made of daughter with no PV info + update
-   refernece point and endVertex of the jets that have associated PV 
-
-!========================= LoKiJets v6r2 2011-12-15 =========================
-
-! 2011-11-28 - Murilo Rangel
- - Add first JetID variables in JetMakerAlg.
-
-! 2011-11-25 - Victor Coco
- - Add structure for appending jet ID info in JetMakerAlg. To be continued...
-
-! 2011-11-23 - Chris Jones
- - Fix various gcc 4.6 warnings
-
-!================== LoKiJets v6r1 2011-11-10 ===============================
-
-! 2011-11-07 - Cedric Potterat
- - Setting the option to set the referencePoint of the Jet to the associated 
-   vertex (if true) in  LoKiJetMakerAlg
-
-! 2011-10-27 - Victor Coco
- - Rethinking of the jet to vertex association. Modification in LoKiJetMakerAlg
-
-!================== LoKiJets v6r0 2011-04-29 ===============================
-LoKiJets add new methods with multi PV, move codes in JetAccessories(MC) 
-and correction in the cmt/requirements of LoKiJets
-
-! 2011-04-19 - Cédric Potterat
- - new LoKiJetMakerWR2VtxAlg.cpp
-  . new algorith to run the JetMaker algorithms on a RecVertx container
- - new version of src/LoKiSeedConeJetMaker.{cpp,h}, src/LoKiSeedFinder.{cpp,h},
-   src/LoKiVVSeedFinder.{cpp,h}, LoKiFastJetMaker.{cpp,h},  LoKiFastJetWithAreaMaker.cpp :
-  . update for the new IJetMaker.h fonction (with vertex)
-  . new algorithm for the SeedFinders
-  . add the possiblility to assign a PV to a FastJet (via option)
- - move LoKiMCPartBHadronSeed.{cpp,h}, PartonicJets2HepMCJets.cpp, HepMCJets2Jets.cpp, 
-   HepMCJets2HepMCJets.cpp, PartonicJets2HepMCJets.cpp to JetAccessoriesMC
- - src/LoKiJetParticleMaker
-  . increase the reserver of the output vector from 20 to 100
- - cmt/requirements
-  . Increase to v6r0
-
-
-!================== LoKiJets v5r5 2011-04-21 ===============================
-
-! 2011-04-08 - Juan Palacios
- - src/HepMCJets2HepMCJets.cpp
- - src/Jets2Jets.cpp
- - src/HepMCJets2Jets.cpp
- - src/PartonicJets2HepMCJets.cpp
-  . Fix memory leaks.
- - cmt/requirements
-  . Increase to v5r5.
-
-!================== LoKiJets v5r4 2011-02-20 ===============================
-
-! 2011-02-08 - Juan Palacios
- - cmt/requirements
-  . Use Phys/LoKiAlgoMC.
-
-! 2011-02-02 - Cédric Potterat
- - add src/LoKiSeedConeJetMaker
-    creat Jet with a cone algo around a seed
-    (seed created by a call to a LoKiJetMaker Algo)
- - add src/LoKiSeedFinder
-    creat Seed for LoKiSeedConeJetMaker (Barcelona and Milano Algo)
-    can be call as a LoKiJetMaker alog, output Seed
- - add src/LoKiVVSeedFinder
-    creat Seed for LoKiSeedConeJetMaker (Lausanne Algo)
-    can be call as a LoKiJetMaker alog, output Seed
- - add src/LoKiMCPartBHadronSeed
-    creat Seed for LoKiSeedConeJetMaker (MCPart B Hadron is the Seed)
-    can be call as a LoKiJetMaker alog, output Seed
- - Increase to v5r4.
-
-!================== LoKiJets v5r3 2011-02-04 ===============================
-
-! 2011-02-04 - Juan Palacios
- - Add needed LoKi MC packages.
- - Increase to v5r3.
-
-!================== LoKiJets v5r2p2 2010-07-12 ===============================
-
-! 2010-07-12 - Juan Palacios
- - cmt/requirements
-  . Remove Phys/Particle2MCTruth. Not actually needed.
- - src/HepMCJets2Jets.cpp
-  . Remove include of IP2MCP.h
-
-!================== LoKiJets v5r2p1 2010-07-12 ===============================
-
-! 2010-07-12 - Juan Palacios
- - cmt/requirements
-  . Need Phys/Particle2MCTruth. Increase to v5r2p1.
-
-!================== LoKiJets v5r2 2010-04-30 =================================
-
-! 2010-04-16 - Juan Palacios
- - src/LoKiJetParticleMaker.cpp, src/LoKiJets2JetsAlg.cpp
-  . use Particle::Range instead of Particle::Container for inputs.
- - cmt/requirements
-  . Increase to v5r2
-
-!================== LoKiJets v5r1 2010-02-22 =================================
-
-! 2010-02-04 - Victor Coco
- - rename Configuration.py to JetMaker_Config.py in order to fix some warning
-   concerning configurables
-
-!================== LoKiJets v5r0 2010-02-02 =================================
-
-! 2010-01-11 - Victor Coco
- - remove stdint.h include from LoKiFastJetMaker (not recognised under windows)
-
-! 2010-01-08 - Victor Coco
- - remove call to CommonParticles.Utils (not needed and unknown in windows
-   configuration --> package not build)
-
-! 2009-12-14 - Victor Coco
- - add some python configuration for jet making + some simple option file.
-   Not definitive, just as starting point
- - add all the needed classes to relate jets at the different level of simulation.
-   In the end they might go in a LoKiJetsMCTools package (except the Jets2Jets tool)
- - Clean a bit, remove warning, remove completly Kt jet maker
- - Update few things like the nominal way of calling StdJets on demand
- 
-
-
-!================== LoKiJets v4r1 
-
-! 2008-11-09 - Vanya BELYAEV
- - remove options directory with all opts-files 
- - add python directory with corresponding on-demand configuration of 
-   standard Kt-Jets on-demand.
-
-   to enable on-demand cratino of jets:
-
-      import LoKiJets.StdKtJets_Configuration 
-
-      The location is defined to be "Phys/StdKtJets"
-
-      The jets are made from:
-
-        "Phys/Std/NoPIDPions" 
-         and 
-        "Phys/StdLooseAllPhotons"
-   
-! 2008-06-26 - Vanya BELYAEV
-
- - LoKi::JetMaker
-     use "LoKi::FastJetMaker" as the default jet maker 
-
- - KtJetMaker is declaread as obsolete 
-
- - cmt/requirements
-
-   version increment to v4r1 
-
-!========================== LoKiJets v4r0 2007-12-18 =====================
-
-! 2007-12-18 - Patrick Koppenburg
- - Small patch by Victor Coco
-
-! 2007-12-10 - Vanya BELYAEV
-
-  Add fastjet package, but still KtJet as the default engine
-  new files:
-
-    src/LoKiFastJetMaker.cpp 
-    src/LoKiFastJetMaker.h 
-    src/LoKiFastJetWithAreaMaker.cpp
-
-  After successfull tests, the "Kt"-stuff will be removed 
-
-
-
-!========================== LoKiJets v3r0 2007-12-10 =====================
-
-! 2007-12-10 - Vanya BELYAEV
-
- - use ktjet from LCG_Interfaces
-   no local ktejet is used anymore 
- - postpone a bit the fastjet tools 
-
-! 2007-10-16 - Vanya BELYAEV
- - add new tool LoKi::KtJetyMaker - the simplest implementation
-   of IJetMaker interface using KtJet algorithm
- - redesigne the algorithm to invoke th eJEt-Making tool
- - add LoKi::JetParticleMaker - the implementation of "particle maker" 
- - cmt/requirements
-   increment the version to v3r0 
- 
-
-!========================== LoKiJets v2r4 2007-09-24 =====================
-
-! 2007-08-22 - Patrick Koppenburg
- - LoKiKtJetMaker.cpp
-   Replace all by particle -> setParticleID( m_Id ); by 
-   particle -> setParticleID( LHCb::ParticleID (m_Id) );
- - Increment to v2r4
-
-! 2007-07-17 - Patrick Koppenburg
- - Removed _load file. Rlease when needed.
-
-!========================== LoKiJets v2r3p1 2007-04-19 ===================
-! 2007-04-19 -  P. Koppenburg
-  Remove controversial doxygen comment
-
-!========================== LoKiJets v2r3 2007-03-26 ===================
-
-! 2007-03-27 - Vanya BELYAEV
- - src/LoKiKtJetMaker.cpp
-     use pointer instead of copy... 
-      [somethng is definitely wrong inside KtJet and/or KtLorentzVector]
- - cmt/requirements 
-    version increment to v2r3 
-
-!========================== LoKiJets v2r2 2007-03-04 ===================
-
-! 2007-03-04 - Vanya BELYAEV
-
- - src/LoKiKtJetMaker.cpp
-   improve the selection of the associated particle
- - cmt/requirements 
-   version increment to v2r2  
-
-!========================== LoKiJets v2r1 2006-11-12 ===================
-! 2006-11-12 - Vanya BELYAEV
- - src/LoKiKtJetMaker.cpp
-
-    many fixes, in particular, fix for the particle combiner, 
-    better treatment of orting schemes, better error handling, 
-    guard against empty input lists, etc...
-    
-     Finally it works more or less OK.
-
-- options/StdKtJets.opts,
-  options/StdMCKtJets.opts
-  options/StdHepKtJets.opts
-
-    configuration files to run the corresponding jet-finding algorithms:
-   
-    - for  regular Kt jets 
-    $LOKIJETSOPTS/StdKtJets.opts 
-
-    - for  Kt jets from MC-particles:
-    $LOKIJETSOPTS/StdMCKtJets.opts 
-
-    - for  Kt jets from HepMC-particles:
-    $LOKIJETSOPTS/StdHepMCKtJets.opts 
-
-- cmt/requirements
-  
-     version increment to v2r1 
-
-
-!========================== LoKiJets v2r0 2006-10-18 ===================
-! 2006-10-18 - Vanya BELYAEV
-
- - src/LoKiKtJetMaker.cpp
-   fix a bug with the creation of jets for particle ("isAtomic"-flag)
- - (re)-tag as v2r0 !
-
-
-!========================== LoKiJets v2r0 2006-09-06 ===================
-  
-!2006-09-06 - Vanya BELYAEV
- - reimport the pckage under Phys has and adapt for DC06 software branch
- - tool is temporary(?) removed 
- - cmt/requiremens 
-     version change to v2r0 
-
- 
-! 2005-07-26 - Vanya BELYAEV
- - src/KtJetTool.cpp
-   new tool which implements IJetMaker interface 
-
-
-!========================== LoKiJets v1r1 2005-06-13 ===================
-! 2005-06-02 - P. Koppenburg
-  KtJets moved to External/
-
-!========================== LoKiJets v1r0 2005-02-21 ==========================
-! 2005-03-29 - Vanya BELYAEV
-
- - no new code, just SLOCCount report
-
-Categorizing files.
-Computing results.
-
-SLOC    Directory       SLOC-by-Language (Sorted)
-150     src_top_dir     cpp=150
-36      cmt             csh=20,sh=16
-0       CVS             (none)
-0       doc             (none)
-0       src_CVS         (none)
-
-Totals grouped by language (dominant language first):
-cpp:            150 (80.65%)
-csh:             20 (10.75%)
-sh:              16 (8.60%)
-
-Total Physical Source Lines of Code (SLOC)                = 186
-Development Effort Estimate, Person-Years (Person-Months) = 0.03 (0.41)
- (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
-Schedule Estimate, Years (Months)                         = 0.15 (1.78)
- (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
-Estimated Average Number of Developers (Effort/Schedule)  = 0.23
-Total Estimated Cost to Develop                           = $ 4,620
- (average salary = $56,286/year, overhead = 2.40).
-SLOCCount is Open Source Software/Free Software, licensed under the FSF GPL.
-Please credit this data as "generated using 'SLOCCount' by David A. Wheeler."
-
-
-! 2005-03-21 - Vanya BELYAEV
- - New package
-
-! -----------------------------------------------------------------------------
-! The END 
-! -----------------------------------------------------------------------------
diff --git a/Phys/LoKiJets/histo/jec.root b/Phys/LoKiJets/histo/jec.root
deleted file mode 100644
index 8d88e3fa9a125e663c71987be05e43aa773ca85c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 95312
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

diff --git a/Phys/LoKiJets/python/LoKiJets/StdJets_Configuration.py b/Phys/LoKiJets/python/LoKiJets/StdJets_Configuration.py
deleted file mode 100755
index ec0ac88bb..000000000
--- a/Phys/LoKiJets/python/LoKiJets/StdJets_Configuration.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-###############################################################################
-# (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.                                       #
-###############################################################################
-# =============================================================================
-# =============================================================================
-## @file  LoKiJets/StdJets.py
-#  configuration file for 'Standard Jets made with FastJet'
-#  @author Victor COCO victor.coco@cern.ch
-#  @date 2009-09-09
-# =============================================================================
-"""
-Configuration file for jets made with FastJet
-"""
-from __future__ import print_function
-__author__ = "Victor COCO victor.coco@cern.ch"
-# =============================================================================
-__all__ = ('StdJets', 'FastJet', 'locations')
-# =============================================================================
-from Gaudi.Configuration import *
-from Configurables import LoKi__JetMaker, LoKi__FastJetMaker
-from CommonParticles.Utils import *
-
-## create the algorithm
-StdJets = LoKi__JetMaker('StdJets')
-
-# select the jet maker
-StdJets.JetMaker = 'LoKi__FastJetMaker'
-
-StdJets.addTool(LoKi__FastJetMaker)
-
-FastJet = getattr(StdJets, 'LoKi__FastJetMaker')
-
-## configure Data-On-Demand service
-locations = updateDoD(StdJets)
-
-## ============================================================================
-if '__main__' == __name__:
-
-    print(__doc__)
-    print(__author__)
-    print(locationsDoD(locations))
-
-# =============================================================================
-# The END
-# =============================================================================
diff --git a/Phys/LoKiJets/python/LoKiJets/__init__.py b/Phys/LoKiJets/python/LoKiJets/__init__.py
deleted file mode 100755
index 0f1935074..000000000
--- a/Phys/LoKiJets/python/LoKiJets/__init__.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-###############################################################################
-# (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.                                       #
-###############################################################################
-# =============================================================================
-# @file
-# Mandatory file to keep Python 'package' for Phys/LoKiJets
-#
-#   This file is a part of LoKi project -
-#     "C++ ToolKit  for Smart and Friendly Physics Analysis"
-#
-#  The package has been designed with the kind help from
-#  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-#  contributions and advices from G.Raven, J.van Tilburg,
-#  A.Golutvin, P.Koppenburg have been used in the design.
-#
-# @author Vanya BELYAEV Ivan.Belyaev@nikhef.nl
-# @date 2008-11-09
-# =============================================================================
-"""
-Mandatory file to keep Python 'package' for Phys/LoKiJets
-
-This file is a part of LoKi project -
-\"C++ ToolKit  for Smart and Friendly Physics Analysis\"
-
-The package has been designed with the kind help from
-Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-contributions and advices from G.Raven, J.van Tilburg,
-A.Golutvin, P.Koppenburg have been used in the design.
-"""
-# =============================================================================
-__author__ = " Vanya BELYAEV Ivan.Belyaev@nikhef.nl "
-# =============================================================================
-
-# =============================================================================
-# The END
-# =============================================================================
diff --git a/Phys/LoKiJets/src/LoKiFastJetMaker.cpp b/Phys/LoKiJets/src/LoKiFastJetMaker.cpp
deleted file mode 100644
index a0b752d77..000000000
--- a/Phys/LoKiJets/src/LoKiFastJetMaker.cpp
+++ /dev/null
@@ -1,198 +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.                                       *
-\*****************************************************************************/
-
-#include "LoKi/ILoKiSvc.h"
-
-#include "LoKiFastJetMaker.h"
-
-#include "fastjet/ClusterSequence.hh"
-#include "fastjet/config.h"
-
-#include "DetDesc/IDetectorElement.h"
-
-/**
- *  Implementation file for class  LoKi::FastJetMaker
- *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
- *  @author Victor COCO   coco@lapp.in2p3.fr
- *  @date   2007-10-22
- */
-
-/*  standard initialization of the tool
- *  @return status code
- */
-StatusCode LoKi::FastJetMaker::initialize() {
-  StatusCode sc = GaudiTool::initialize();
-  if ( sc.isFailure() ) { return sc; }
-  // check the parameters
-  sc = check();
-  if ( sc.isFailure() ) { return sc; }
-  //
-  svc<LoKi::ILoKiSvc>( "LoKiSvc", true );
-  //
-  if ( !m_showBanner ) fastjet::ClusterSequence::set_fastjet_banner_stream( 0 );
-  return sc;
-}
-// ============================================================================
-// prepare the input information
-// ============================================================================
-fastjet::JetDefinition LoKi::FastJetMaker::prepare( const IJetMaker::Input&          input,
-                                                    std::vector<fastjet::PseudoJet>& jets ) const {
-  // input container of "particles"
-  jets.reserve( input.size() );
-  for ( IJetMaker::Input::const_iterator ip = input.begin(); input.end() != ip; ++ip ) {
-    const LHCb::Particle* p = *ip;
-    if ( NULL == p ) {
-      Warning( "Invalid input particle" ).ignore();
-      continue;
-    }
-    jets.push_back( makeJet( p, to_user_index( ip - input.begin() ) ) );
-  }
-
-  //  if(m_type == fastjet::plugin_algorithm)
-  //  {
-  //     fastjet::JetDefinition::Plugin * plugin;
-  //     double overlap_threshold = 0.5;
-  //     plugin = new fastjet::SISConePlugin (m_r, overlap_threshold);
-  //     fastjet::JetDefinition jet_def(plugin);
-  //     delete plugin;
-  //     return jet_def ;
-
-  //}
-  // else{
-
-  fastjet::JetFinder           finder   = (fastjet::JetFinder)m_type;
-  fastjet::RecombinationScheme scheme   = (fastjet::RecombinationScheme)m_recom;
-  fastjet::Strategy            strategy = (fastjet::Strategy)m_strat;
-  fastjet::JetDefinition       jet_def( finder, m_r, scheme, strategy );
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << "fastjet::JetDefinition:" << endmsg;
-    debug() << jet_def.description() << endmsg;
-  }
-
-  return jet_def;
-  //  }
-}
-// ===========================================================================
-// find the jets
-// ===========================================================================
-StatusCode LoKi::FastJetMaker::makeJets( const IJetMaker::Input& input_,    //
-                                         const LHCb::RecVertex& /* vtx_ */, //
-                                         IJetMaker::Jets& jets_ ) const {
-  makeJets( input_, jets_ ).ignore();
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::FastJetMaker::makeJets( const IJetMaker::Input& input_, IJetMaker::Jets& jets_ ) const {
-
-  StatusCode sc = check();
-  if ( sc.isFailure() ) { return Error( "Invalid configuration of fastjet" ); }
-
-  // input container of "particles"
-  Jets_ inputs;
-  // prepare the input dat and define the jets
-
-  fastjet::JetDefinition jetDef = prepare( input_, inputs );
-
-  if ( inputs.empty() ) {
-    IJetMaker::Jets output;
-    output.reserve( 0 );
-    jets_ = output;
-    if ( msgLevel( MSG::DEBUG ) ) { m_nJets += output.size(); }
-    return StatusCode::SUCCESS;
-  }
-  // Jets found
-  Jets_ jets;
-
-  fastjet::ClusterSequence* clusters = new fastjet::ClusterSequence( inputs, jetDef );
-
-  switch ( m_sort ) {
-  case 3:
-    jets = sorted_by_rapidity( clusters->inclusive_jets( m_ptmin ) );
-    break;
-  case 2:
-    jets = sorted_by_pt( clusters->inclusive_jets( m_ptmin ) );
-    break;
-  case 1:
-    jets = sorted_by_E( clusters->inclusive_jets( m_ptmin ) );
-    break;
-  default:
-    jets = sorted_by_pt( clusters->inclusive_jets( m_ptmin ) );
-    break;
-  }
-
-  if ( jets.empty() ) { Warning( "No jets from fastjet::ClusterSequence", StatusCode::SUCCESS, 0 ).ignore(); }
-
-  //
-  if ( NULL == m_combiner ) { m_combiner = tool<IParticleCombiner>( m_combinerName, this ); }
-
-  // Get the default geometry FIXME, use functional framework
-  auto lhcb = getDet<IDetectorElement>( m_standardGeometry_address );
-  if ( !lhcb ) { throw GaudiException( "Could not load geometry", name(), StatusCode::FAILURE ); }
-  auto& geometry = *lhcb->geometry();
-
-  IJetMaker::Jets output;
-  output.reserve( jets.size() );
-
-  LoKi::Point3D point = LoKi::Point3D( 0, 0, 0 );
-
-  for ( Jets_::iterator ijet = jets.begin(); jets.end() != ijet; ++ijet ) {
-    const Jet&          jet          = *ijet;
-    const Constituents& constituents = clusters->constituents( jet );
-    if ( constituents.empty() ) { Warning( "Jet is 'empty'!" ).ignore(); }
-
-    LHCb::Particle              pJet;
-    LHCb::Vertex                vJet;
-    LHCb::Particle::ConstVector daughters;
-
-    pJet.setParticleID( LHCb::ParticleID( m_jetID ) );
-
-    pJet.setReferencePoint( point );
-
-    for ( Constituents::const_iterator ic = constituents.begin(); constituents.end() != ic; ++ic ) {
-      const Jet& c = *ic;
-      // find the appropriate input particle
-      const int index = from_user_index( c.user_index() );
-      if ( 0 > index || (int)inputs.size() <= index ) {
-        Warning( "Invalid index for a constituent!" ).ignore();
-        continue;
-      } // CONTINUE
-      // get the appropriate particle:
-      const LHCb::Particle* p = input_[index];
-      // add the particle into the vertex
-      daughters.push_back( p );
-    }
-    if ( daughters.empty() ) {
-      Warning( "Empty list of of daughter particles, skip it" ).ignore();
-      continue;
-    }
-    // use the tool
-    const StatusCode sc = m_combiner->combine( daughters, pJet, vJet, geometry );
-    if ( sc.isFailure() ) {
-      Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-      continue;
-    }
-    // redefine the momentum
-    pJet.setMomentum( Gaudi::LorentzVector( jet.px(), jet.py(), jet.pz(), jet.e() ) );
-    //
-    output.push_back( pJet.clone() );
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) { m_nJets += output.size(); }
-
-  jets_ = output;
-
-  delete clusters;
-
-  return StatusCode::SUCCESS;
-}
-
-DECLARE_COMPONENT( LoKi::FastJetMaker )
diff --git a/Phys/LoKiJets/src/LoKiFastJetMaker.h b/Phys/LoKiJets/src/LoKiFastJetMaker.h
deleted file mode 100644
index d635e8d39..000000000
--- a/Phys/LoKiJets/src/LoKiFastJetMaker.h
+++ /dev/null
@@ -1,290 +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.                                       *
-\*****************************************************************************/
-#pragma once
-
-#include "GaudiAlg/GaudiTool.h"
-
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-
-#include "Event/Particle.h"
-#include "LoKi/Geometry.h"
-#include "LoKi/Kinematics.h"
-
-#include "fastjet/JetDefinition.hh"
-#include "fastjet/PseudoJet.hh"
-
-namespace LoKi {
-
-  /** @class FastJetMaker
-   *
-   *  The most trivial, FastJet based  implementaion of interface IJetMaker
-   *  @see IJetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
-   *  @author Victor COCO   coco@lapp.in2p3.fr
-   *  @date   2007-10-22
-   */
-  class FastJetMaker : public virtual IJetMaker, public GaudiTool {
-  public:
-    /** The main method: jet-finding procedure
-     *
-     *  @code
-     *
-     *  // get the tool
-     *  const IJetMaker* jetMaker = tool<IJetMaker> ( .... ) ;
-     *
-     *  // input particles
-     *  IJetMaker::Inputs input = ...
-     *  // 1)
-     *  // const Particles* particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles->begin() , particles->end() ) ;
-     *  // 2)
-     *  // LHCb::Particle::ConstVector particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *  // 3)
-     *  // LoKi::Range particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *
-     *  // placeholder for "output" jets
-     *  IJetMaker::Jets   jets ;
-     *
-     *  // find the jets!
-     *  StatusCode sc = jetMaker -> makeJets ( input , jets ) ;
-     *
-     *  // make  a loop over jets:
-     *  for ( IJetMaker::Jets::const_iterator iJet = jets.begin() ;
-     *        jets.end() != iJet ; ++iJet )
-     *    {
-     *        // get the jet
-     *        LHCb::Particle* jet = *iJet ;
-     *    }
-     *
-     *  @endcode
-     *
-     *  @attention It is a responsibility of users (e.g. the algorithm)
-     *             to take care about the ownership of jets *AND* their
-     *             vertices). The tool is not intended to do it!
-     *
-     *  @param input contaainer of input particles
-     *  @param jets  container of  output jets
-     *  @return status code
-     */
-    StatusCode makeJets( const IJetMaker::Input& input, IJetMaker::Jets& jets ) const override;
-    StatusCode makeJets( const IJetMaker::Input& input, const LHCb::RecVertex& vtx,
-                         IJetMaker::Jets& jets ) const override;
-
-    /** the standard constructor
-     *
-     *  @todo The default values for configuration parameters
-     *        (especially for R-parameter) need to be adjusted
-     *        according Victor Coco's studies.
-     *
-     */
-    FastJetMaker( const std::string& type, const std::string& name, const IInterface* parent )
-        : GaudiTool( type, name, parent )
-        //
-        , m_jetID( 98 )
-        //
-        , m_type( 0 )
-        , m_recom( fastjet::E_scheme )
-        , m_r( 0.7 )
-        , m_ptmin( 0 )
-        //
-        , m_sort( 2 )
-        //
-        , m_strat( fastjet::Best )
-        , m_showBanner( false )
-        //
-        , m_combinerName( "MomentumCombiner" )
-        , m_combiner( 0 ) {
-      //
-      declareInterface<IJetMaker>( this );
-      //
-      declareProperty( "JetID", m_jetID, "Particle ID for the Jet" );
-      //
-      declareProperty( "Type", m_type, "The type of the algorithm [0:kt,1:Cambridge,2:anti-kt,default:kt]" );
-      declareProperty( "Recombination", m_recom, "Recombination scheme: fastjet::RecombinationScheme" );
-      declareProperty( "RParameter", m_r );
-      declareProperty( "PtMin", m_ptmin );
-      //
-      declareProperty( "Sort", m_sort, "Sorting Criteria for jets [3:eta,2:pt,1:E,default:pt]" );
-      declareProperty( "Strategy", m_strat, "JetFinding strategy, see fastjet::Strategy " );
-      declareProperty( "ShowBanner", m_showBanner = false, "Print the FastJet banner if true." );
-      // define momentum combiner
-      declareProperty( "ParticleCombiner", m_combinerName );
-    }
-    /// destructor
-    virtual ~FastJetMaker() {}
-
-  public:
-    /** standard initialization of the tool
-     *  @return status code
-     */
-    StatusCode initialize() override;
-
-  protected:
-    /// make the detailed check of all parameters
-    inline StatusCode check() const {
-      // verify the algorithm type
-      switch ( m_type ) {
-      case fastjet::kt_algorithm:
-        break;
-      case fastjet::cambridge_algorithm:
-        break;
-      case fastjet::antikt_algorithm:
-        break;
-      case fastjet::genkt_algorithm:
-        break;
-      case fastjet::cambridge_for_passive_algorithm:
-        break;
-      case fastjet::genkt_for_passive_algorithm:
-        break;
-      case fastjet::plugin_algorithm:
-        break;
-      default:
-        return Error( "Invalid JetFinder-algorithm is specified" );
-      }
-      // verify the recombination sceme
-      switch ( m_recom ) {
-      case fastjet::E_scheme:
-        break;
-      case fastjet::pt_scheme:
-        break;
-      case fastjet::pt2_scheme:
-        break;
-      case fastjet::Et_scheme:
-        break;
-      case fastjet::Et2_scheme:
-        break;
-      case fastjet::BIpt_scheme:
-        break;
-      case fastjet::BIpt2_scheme:
-        break;
-      default:
-        return Error( "Invalid RecombinationScheme is specified" );
-      }
-      // verify the strategy
-      switch ( m_strat ) {
-        /// experimental ...
-      case fastjet::N2MinHeapTiled:
-        break;
-        /// fastest from about 50..10^4
-      case fastjet::N2Tiled:
-        break;
-        /// legacy
-      case fastjet::N2PoorTiled:
-        break;
-        /// fastest below 50
-      case fastjet::N2Plain:
-        break;
-        /// worse even than the usual N^3 algorithms
-      case fastjet::N3Dumb:
-        break;
-        /// automatic selection of the best (based on N)
-      case fastjet::Best:
-        break;
-        /// best of the NlnN variants -- best overall for N>10^4
-      case fastjet::NlnN:
-        break;
-        /// legacy N ln N using 3pi coverage of cylinder
-      case fastjet::NlnN3pi:
-        break;
-        /// legacy N ln N using 4pi coverage of cylinder
-      case fastjet::NlnN4pi:
-        break;
-        /// Chan's closest pair method (in a variant with 4pi coverage),
-        /// for use exclusively wit h the Cambridge algorithm
-      case fastjet::NlnNCam4pi:
-        break;
-      case fastjet::NlnNCam2pi2R:
-        break;
-      case fastjet::NlnNCam:
-        break; // 2piMultD
-        /// the plugin has been used...
-      case fastjet::plugin_strategy:
-        break;
-      default:
-        return Error( "Invalid Strategy is specified" );
-      }
-      // check the minimum momentum
-      if ( 0 > m_ptmin ) { Warning( "PtMin is negative " ).ignore(); }
-      //
-      return StatusCode::SUCCESS;
-    }
-
-  protected:
-    // prepare the input information
-    fastjet::JetDefinition prepare( const IJetMaker::Input& input, std::vector<fastjet::PseudoJet>& jets ) const;
-    //
-    int to_user_index( const int index ) const { return index + 10000; }
-    int from_user_index( const int index ) const { return index - 10000; }
-
-  private:
-    // the default constructor is disabled
-    FastJetMaker();
-    // the copy constructor is disabled
-    FastJetMaker( const FastJetMaker& );
-    // the assignement operator is disabled
-    FastJetMaker& operator=( const FastJetMaker& );
-
-  protected:
-    Gaudi::Property<std::string> m_standardGeometry_address{this, "StandardGeometryTop", "/dd/Structure/LHCb"};
-
-    // proposed jet ID
-    int m_jetID; ///< proposed jet ID
-    // KtEvent flag
-    int m_type; ///< KtEvent flag/mode
-    // Angular distance scheme
-    int m_angle; ///< angular distance scheme
-    // Recombination scheme
-    int m_recom; ///< recombination scheme
-    // R-parameter
-    double m_r; ///< R-parameters
-    // ptMin-parameter
-    double m_ptmin; ///< pt-min parameter
-    // jet sorting criteria
-    int m_sort; ///< jet sorting criteria
-    // jet finding strategy
-    int m_strat; ///< jet finding strategy
-    // print the FastJet banner
-    bool m_showBanner; ///< print the FastJet banner
-    // combiner
-    std::string                m_combinerName;
-    mutable IParticleCombiner* m_combiner; ///< combiner to be used
-
-  private:
-    mutable Gaudi::Accumulators::StatCounter<> m_nJets{this, "#jets"};
-  };
-
-  typedef fastjet::PseudoJet Jet;
-  typedef std::vector<Jet>   Jets_;
-  typedef std::vector<Jet>   Constituents;
-  /// trivial function which "converts" particle into the "jet"
-  inline Jet makeJet( const LHCb::Particle* p, const int index ) {
-    if ( 0 == p ) { return Jet(); }
-    const Gaudi::LorentzVector& v = p->momentum();
-    Jet                         jet( v.Px(), v.Py(), v.Pz(), v.E() );
-    jet.set_user_index( index );
-    return jet;
-  }
-} // End of namespace LoKi
diff --git a/Phys/LoKiJets/src/LoKiFastJetWithAreaMaker.cpp b/Phys/LoKiJets/src/LoKiFastJetWithAreaMaker.cpp
deleted file mode 100644
index 8955fe40e..000000000
--- a/Phys/LoKiJets/src/LoKiFastJetWithAreaMaker.cpp
+++ /dev/null
@@ -1,318 +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.                                       *
-\*****************************************************************************/
-
-#include "LoKiFastJetMaker.h"
-
-#include "fastjet/ClusterSequenceArea.hh"
-
-#include "DetDesc/IDetectorElement.h"
-
-namespace LoKi {
-
-  /** @class FastJetWithAreaMaker
-   *
-   *  The most trivial, FastJet based  implementation of interface IJetMaker
-   *  @see IJetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
-   *  @author Victor COCO   coco@lapp.in2p3.fr
-   *  @date   2007-10-22
-   */
-  class FastJetWithAreaMaker : public LoKi::FastJetMaker {
-  public:
-    /** The main method: jet-finding procedure
-     *
-     *  @code
-     *
-     *  // get the tool
-     *  const IJetMaker* jetMaker = tool<IJetMaker> ( .... ) ;
-     *
-     *  // input particles
-     *  IJetMaker::Inputs input = ...
-     *  // 1)
-     *  // const Particles* particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles->begin() , particles->end() ) ;
-     *  // 2)
-     *  // LHCb::Particle::ConstVector particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *  // 3)
-     *  // LoKi::Range particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *
-     *  // placeholder for "output" jets
-     *  IJetMaker::Jets   jets ;
-     *
-     *  // find the jets!
-     *  StatusCode sc = jetMaker -> makeJets ( input , jets ) ;
-     *
-     *  // make  a loop over jets:
-     *  for ( IJetMaker::Jets::const_iterator iJet = jets.begin() ;
-     *        jets.end() != iJet ; ++iJet )
-     *    {
-     *        // get the jet
-     *        LHCb::Particle* jet = *iJet ;
-     *    }
-     *
-     *  @endcode
-     *
-     *  @attention It is a responsibility of users (e.g. the algorithm)
-     *             to take care about the ownership of jets *AND* their
-     *             vertices). The tool is not intended to do it!
-     *
-     *  @param input contaainer of input particles
-     *  @param jets  container of  output jets
-     *  @return status code
-     */
-    StatusCode makeJets( const IJetMaker::Input& input, IJetMaker::Jets& jets ) const override;
-    StatusCode makeJets( const IJetMaker::Input& input, const LHCb::RecVertex& vtx,
-                         IJetMaker::Jets& jets ) const override;
-
-    /** the standard constructor
-     *
-     *  @todo The default values for configuration parameters
-     *        (especially for R-parameter) need to be adjusted
-     *        according Victor Coco's studies.
-     *
-     */
-    FastJetWithAreaMaker( const std::string& type, const std::string& name, const IInterface* parent )
-        : LoKi::FastJetMaker( type, name, parent )
-        // area type
-        , m_area_type( 20 ) ///< the type of area method
-        // the maximal pseudorapidity for ghosts
-        , m_ghost_etamax( 8 ) ///< the maximal pseudorapidity for ghosts
-        // number of repetitions for active area evaluation
-        , m_active_area_repeats( 2 ) ///< number of repetitions for active area evaluation
-        // the area of the ghost
-        , m_ghost_area( 0.01 ) ///< the area of the ghost
-        // the scatterer parameter for the grid
-        , m_grid_scatterer( 1.e-4 ) ///< the scatterer parameter for the grid
-        // the scatterer parameter for kt
-        , m_kt_scatterer( 0.1 ) ///< the scatterer parameter for kt
-        // the kt for ghosts
-        , m_mean_ghost_kt( 1.e-100 ) ///< the kt for ghosts
-        // pt/area strategy
-        , m_ptarea_strategy( 0 ) /// deprecated... to put back
-        // pt/area strategy
-        , m_ptarea_range( 2 ) ///< pt/area range
-        , m_effRfact( 1. ) {
-      //
-      declareProperty( "AreaType", m_area_type, "The method to get the area calculation" );
-      //
-      declareProperty( "GhostEtaMax", m_ghost_etamax, "The maximal pseudorapidity for active area ghosts" );
-      //
-      declareProperty( "AreaRepeat", m_active_area_repeats, "Repeate active area evaluation" );
-      //
-      declareProperty( "GhostArea", m_ghost_area, "The area, associated with single ghost" );
-      //
-      declareProperty( "GridScatterer", m_grid_scatterer,
-                       "The fractional random fluctiatuon of ghosts on eta-phi grid" );
-      //
-      declareProperty( "KtScatterer", m_kt_scatterer, "The fractional random fluctiatuon of ghosts kt" );
-      //
-      declareProperty( "GhostKt", m_mean_ghost_kt, "The average transverse momentum of the ghosts" );
-      //
-      declareProperty( "PtPerAreaStrategy", m_ptarea_strategy, "The strategy for pt/unit area evaluation" );
-      //
-      declareProperty( "PtPerAreaRange", m_ptarea_range, "The range for pt/unit area evaluation" );
-      //
-      declareProperty( "VoronoiEffectiveRFactor", m_effRfact, "Effective R Factor for Voronoi area determination" );
-      //
-    };
-
-  private:
-    // the method to get the area
-    int m_area_type; ///< the method to get the area
-    // the maximal pseudorapidity for ghosts
-    double m_ghost_etamax; ///< the maximal pseudorapidity for ghosts
-    // number of repetitions for active area evaluation
-    int m_active_area_repeats; ///< number of repetitions for active area evaluation
-    // the area of the ghost
-    double m_ghost_area; ///< the area of the ghosts
-    // the scatterer parameter for the grid
-    double m_grid_scatterer; // the scatterer parameter for the grid
-    // the scatterer parameter for kt
-    double m_kt_scatterer; ///< the scatterer parameter for kt
-    // the kt for ghosts
-    double m_mean_ghost_kt; ///< the kt for ghosts
-    // pt/area strategy
-    unsigned int m_ptarea_strategy; ///< pt/area strategy
-    // pt/area range
-    double m_ptarea_range; ///< pt/area range
-    // effective R factor for voronoi area
-    double m_effRfact; ///< effective R factor for voronoi area
-
-    mutable Gaudi::Accumulators::StatCounter<> m_nJets{this, "#jets"};
-  };
-} // End of namespace LoKi
-
-/** @file
- *  Implementation file for class  LoKi::FastJetWithAreaMaker
- *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
- *  @author Victor COCO   coco@lapp.in2p3.fr
- *  @date   2007-10-22
- */
-
-// find the jets
-StatusCode LoKi::FastJetWithAreaMaker::makeJets( const IJetMaker::Input& input_, const LHCb::RecVertex& /* vtx_ */,
-                                                 IJetMaker::Jets&        jets_ ) const {
-  makeJets( input_, jets_ ).ignore();
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::FastJetWithAreaMaker::makeJets( const IJetMaker::Input& input_, IJetMaker::Jets& jets_ ) const {
-
-  StatusCode sc = check();
-  if ( sc.isFailure() ) { return Error( "Invalid configurtaion of fastjet" ); }
-
-  // input data
-  Jets_ inputs;
-
-  // prepare the input dat and define the jets
-  fastjet::JetDefinition jet_def = prepare( input_, inputs );
-
-  // Jets found
-  Jets_ jets;
-
-  fastjet::AreaDefinition area_def;
-
-  if ( m_area_type == -1 ) {
-    return Error( "Invalid configurtaion of area type in fastjet" );
-  } else if ( m_area_type < 11 ) {
-    // specify the active area
-    fastjet::GhostedAreaSpec active_area( m_ghost_etamax, m_active_area_repeats, m_ghost_area, m_grid_scatterer,
-                                          m_kt_scatterer, m_mean_ghost_kt );
-    fastjet::AreaDefinition  myarea_def( fastjet::active_area, active_area );
-    area_def = myarea_def;
-
-  } else if ( m_area_type == 20 ) {
-    fastjet::VoronoiAreaSpec vor_area( m_effRfact );
-    fastjet::AreaDefinition  myarea_def( fastjet::voronoi_area, vor_area );
-    area_def = myarea_def;
-  } else {
-    fastjet::AreaDefinition myarea_def( m_area_type );
-    area_def = myarea_def;
-  }
-
-  // clusterisation sequence
-  fastjet::ClusterSequenceArea clusters // fastjet::ClusterSequenceWithArea   clusters
-      ( inputs, jet_def, area_def );
-
-  switch ( m_sort ) {
-  case 3:
-    jets = sorted_by_rapidity( clusters.inclusive_jets( m_ptmin ) );
-    break;
-  case 2:
-    jets = sorted_by_pt( clusters.inclusive_jets( m_ptmin ) );
-    break;
-  case 1:
-    jets = sorted_by_E( clusters.inclusive_jets( m_ptmin ) );
-    break;
-  default:
-    jets = sorted_by_pt( clusters.inclusive_jets( m_ptmin ) );
-    break;
-  }
-
-  if ( jets.empty() ) { Warning( "No jets from fastjet::ClusterSequenceWithArea" ).ignore(); }
-
-  //
-  if ( 0 == m_combiner ) { m_combiner = tool<IParticleCombiner>( m_combinerName, this ); }
-
-  // Get the default geometry FIXME, use functional framework
-  auto lhcb = getDet<IDetectorElement>( m_standardGeometry_address );
-  if ( !lhcb ) { throw GaudiException( "Could not load geometry", name(), StatusCode::FAILURE ); }
-  auto& geometry = *lhcb->geometry();
-
-  IJetMaker::Jets output;
-  output.reserve( jets.size() );
-
-  LoKi::Point3D point = LoKi::Point3D( 0, 0, 0 );
-
-  // get the "pt per unit area" estimate
-  // const double ptPerUnitArea = clusters.parabolic_pt_per_unit_area
-  //  ( (fastjet::ClusterSequenceArea::mean_pt_strategies) m_ptarea_strategy ,
-  //    m_ptarea_range ) ;
-
-  for ( Jets_::iterator ijet = jets.begin(); jets.end() != ijet; ++ijet ) {
-    const Jet&          jet          = *ijet;
-    const Constituents& constituents = clusters.constituents( jet );
-    if ( constituents.empty() ) { Warning( "Jet is 'empty'!" ).ignore(); }
-
-    LHCb::Particle              pJet, pJetArea;
-    LHCb::Vertex                vJet;
-    LHCb::Particle::ConstVector daughters;
-
-    pJet.setParticleID( LHCb::ParticleID( m_jetID ) );
-    pJetArea.setParticleID( LHCb::ParticleID( -1 * m_jetID ) );
-
-    pJet.setReferencePoint( point );
-    pJetArea.setReferencePoint( point );
-
-    // set the jet active area
-    pJet.addInfo( LHCb::Particle::JetActiveArea, clusters.area( jet ) );
-    // set the jet active area uncertainty
-    pJet.addInfo( LHCb::Particle::JetActiveAreaError, clusters.area_error( jet ) );
-    // get active area 4-vector
-    fastjet::PseudoJet area = clusters.area_4vector( jet );
-    pJet.addInfo( LHCb::Particle::JetActiveAreaPx, area.px() );
-    pJet.addInfo( LHCb::Particle::JetActiveAreaPy, area.py() );
-    pJet.addInfo( LHCb::Particle::JetActiveAreaPz, area.pz() );
-    pJet.addInfo( LHCb::Particle::JetActiveAreaE, area.e() );
-    pJet.addInfo( LHCb::Particle::JetPtPerUnitArea, 0. );
-
-    for ( Constituents::const_iterator ic = constituents.begin(); constituents.end() != ic; ++ic ) {
-      const Jet& c = *ic;
-      // find the appropriate input particle
-      const int index = from_user_index( c.user_index() );
-      if ( 0 > index || (int)inputs.size() <= index ) {
-        Warning( "Invalid index for a constituent!" ).ignore();
-        continue;
-      } // CONTINUE
-      // get the appropriate particle:
-      const LHCb::Particle* p = input_[index];
-      // add the particle into the vertex
-      daughters.push_back( p );
-    }
-    if ( daughters.empty() ) {
-      Warning( "Empty list of of daughter particles, skip it" ).ignore();
-      continue;
-    }
-    // use the tool
-    StatusCode sc = m_combiner->combine( daughters, pJet, vJet, geometry );
-    if ( sc.isFailure() ) {
-      Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-      continue;
-    }
-    // redefine the momentum
-    pJet.setMomentum( Gaudi::LorentzVector( jet.px(), jet.py(), jet.pz(), jet.e() ) );
-    //
-
-    output.push_back( pJet.clone() );
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) { m_nJets += output.size(); }
-
-  jets_ = output;
-
-  return StatusCode::SUCCESS;
-}
-
-DECLARE_COMPONENT( LoKi::FastJetWithAreaMaker )
diff --git a/Phys/LoKiJets/src/LoKiJetMakerAlg.cpp b/Phys/LoKiJets/src/LoKiJetMakerAlg.cpp
deleted file mode 100644
index e6e5f766d..000000000
--- a/Phys/LoKiJets/src/LoKiJetMakerAlg.cpp
+++ /dev/null
@@ -1,358 +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.                                       *
-\*****************************************************************************/
-
-#include "LoKi/Algo.h"
-#include "LoKi/ParticleContextCuts.h"
-#include "LoKi/ParticleCuts.h"
-#include "LoKi/VertexCuts.h"
-
-#include "Kernel/DaVinciAlgorithm.h"
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-#include "Kernel/PVSentry.h"
-#include "Kernel/Particle2Vertex.h"
-
-#include "Event/Particle.h"
-
-#include "AIDA/IHistogram2D.h"
-#include "GaudiKernel/IHistogramSvc.h"
-#include "boost/lexical_cast.hpp"
-#include <GaudiUtils/Aida2ROOT.h>
-
-#include "Math/VectorUtil.h"
-#include "TH2D.h"
-#include "TMath.h"
-
-class TH2D;
-
-namespace LoKi {
-
-  /** @class JetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Vanya BELYAEV belyaev@lapp.in2p3.fr
-   *  @date   2005-03-21
-   */
-  class JetMaker : public LoKi::Algo {
-  public:
-    /** Standard constructor
-     *  @param name instance name
-     *  @param pSvc pointer to Service Locator
-     */
-    JetMaker( const std::string& name, ISvcLocator* pSvc )
-        : LoKi::Algo( name, pSvc )
-        //
-        , m_makerName( "LoKi::FastJetMaker" )
-        , m_maker( 0 )
-        , m_associate2Vertex( false )
-        , m_runJetID( true ) {
-      //
-      declareProperty( "JetMaker", m_makerName, "Type type/name of jet-maker tool (IJetMaker interface)" );
-      declareProperty( "Associate2Vertex", m_associate2Vertex, "Jet reconstruction per vertex" );
-      declareProperty( "JetID", m_runJetID, "Append Jet ID information to the jet" );
-      declareProperty( "ApplyJetID", m_applyJetID = false, "Apply jet ID cuts" );
-      declareProperty( "ApplyJEC", m_applyJEC = false );
-
-      declareProperty( "HistoPath", m_histo_path = "JEC" );
-      //
-    }
-
-  public:
-    /** standard execution of the algorithm
-     *  @see LoKi::Algo
-     *  @return status code
-     */
-    StatusCode initialize() override;
-    StatusCode analyse() override;
-
-    StatusCode appendJetIDInfo( LHCb::Particle* jet );
-    StatusCode JEC( LHCb::Particle* jet );
-
-  private:
-    /// maker name
-    std::string m_makerName; // jet maker name
-    /// maker
-    const IJetMaker* m_maker; // jet maker to be used
-    /// associate two vertex?
-    bool m_associate2Vertex; // make jet per vertex
-    /// append jet ID info
-    bool m_runJetID; // append jet ID info
-    /// apply JEC
-    bool m_applyJEC;
-    /// apply JEC
-    bool m_applyJetID;
-    /// histograms for JEC
-    std::vector<TH2D*> m_histosJEC;
-    /// histo path
-    std::string m_histo_path;
-
-    mutable Gaudi::Accumulators::StatCounter<> m_nJets{this, "#jets"};
-  };
-
-} // end of namespace LoKi
-
-/** @file
- *  Implementation file for class  LoKi::JetMaker
- *  @date  2005-03-21
- *  @author Vanya BELYAEV  belyaev@lapp.in2p3.fr
- */
-
-/*  standard execution of the algorithm
- *  @see LoKi::Algo
- *  @return status code
- */
-
-StatusCode LoKi::JetMaker::initialize() {
-  StatusCode sc = LoKi::Algo::initialize();
-  if ( sc.isFailure() ) { return sc; }
-  // Read in the histograms:
-  if ( m_applyJEC ) {
-    for ( int i = 1; i < 4; ++i ) {
-      std::string         histoname = "JEC_PV" + boost::lexical_cast<std::string>( i );
-      AIDA::IHistogram2D* aida      = get<AIDA::IHistogram2D>( histoSvc(), m_histo_path + histoname );
-      if ( 0 == aida ) warning() << "Could not find AIDA::IHistogram2D* " << m_histo_path + histoname << "." << endmsg;
-      m_histosJEC.push_back( Gaudi::Utils::Aida2ROOT::aida2root( aida ) );
-    }
-  }
-  //
-  return sc;
-}
-
-StatusCode LoKi::JetMaker::analyse() {
-  using namespace LoKi;
-  using namespace LoKi::Types;
-  using namespace LoKi::Cuts;
-
-  if ( m_associate2Vertex ) {
-
-    // A cut to get the x position of the bestPV of input particles (would be better to code a VKEY functor)
-    LoKi::Types::Fun bestVertexVX = BPV( this, VX );
-    LoKi::Types::Fun bestVertexVY = BPV( this, VY );
-    LoKi::Types::Fun bestVertexVZ = BPV( this, VZ );
-
-    // A cut to check that a jet contains information able to link it to a PV
-    LoKi::Types::Cut withPVPointingInfo =
-        NINTREE( ( ABSID == 310 || ABSID == 3122 ) ||
-                 ( HASTRACK && static_cast<int>( LHCb::Track::Types::Downstream ) != TRTYPE ) ) > 0;
-
-    Range part = select( "part", PALL );
-
-    // Loop over PV list and make jets out of appropriate inputs related to the PVs
-    const LHCb::RecVertex::Range pvs = this->primaryVertices();
-    for ( LHCb::RecVertex::Range::const_iterator i_pv = pvs.begin(); pvs.end() != i_pv; i_pv++ ) {
-      IJetMaker::Input inputs;
-      for ( Range::const_iterator i_p = part.begin(); part.end() != i_p; i_p++ ) {
-        // Neutral inputs
-        if ( Q( *i_p ) == 0 ) {
-          // Take all neutrals exept V0s
-          if ( ABSID( *i_p ) != 310 && ABSID( *i_p ) != 3122 ) inputs.push_back( *i_p );
-          // Keep only the V0s that match to the vertex
-          else if ( bestVertexVX( *i_p ) == VX( *i_pv ) && bestVertexVY( *i_p ) == VY( *i_pv ) &&
-                    bestVertexVZ( *i_p ) == VZ( *i_pv ) )
-            inputs.push_back( *i_p );
-          else
-            continue;
-        }
-        // Charged inputs
-        else {
-          // Take all downstream tracks
-          if ( static_cast<int>( LHCb::Track::Types::Downstream ) == TRTYPE( *i_p ) ) inputs.push_back( *i_p );
-          // Keep only the tracks with velo segment that match to the vertex
-          else if ( bestVertexVX( *i_p ) == VX( *i_pv ) && bestVertexVY( *i_p ) == VY( *i_pv ) &&
-                    bestVertexVZ( *i_p ) == VZ( *i_pv ) )
-            inputs.push_back( *i_p );
-          else
-            continue;
-        }
-      }
-
-      // input container of "particles"
-      IJetMaker::Jets jets;
-
-      LoKi::Types::Fun mtf     = LoKi::Cuts::INFO( 9003, -10. );
-      LoKi::Types::Fun n90     = LoKi::Cuts::INFO( 9002, -10. );
-      LoKi::Types::Fun cpf     = LoKi::Cuts::INFO( 9006, -10. );
-      LoKi::Types::Fun width   = LoKi::Cuts::INFO( 9007, -10. );
-      LoKi::Types::Fun nPVInfo = LoKi::Cuts::INFO( 9005, -10. );
-      if ( 0 == m_maker ) { m_maker = tool<IJetMaker>( m_makerName, m_makerName, this ); }
-
-      // make the jets
-      StatusCode sc = m_maker->makeJets( inputs.begin(), inputs.end(), jets );
-
-      if ( sc.isFailure() ) { return Error( "Error from jet maker", sc ); }
-
-      // save all jets
-
-      while ( !jets.empty() ) {
-        LHCb::Particle* jet = jets.back();
-        if ( m_applyJEC ) this->JEC( jet ).ignore();
-        if ( m_runJetID ) this->appendJetIDInfo( jet ).ignore();
-        // If the jet contain info on PV, assign a PV and update the P2PV relation table
-        if ( withPVPointingInfo( jet ) ) {
-          jet->setReferencePoint( Gaudi::XYZPoint( ( *i_pv )->position() ) );
-          LHCb::Vertex* vJet = new LHCb::Vertex();
-          vJet->setPosition( ( *i_pv )->position() );
-          vJet->setCovMatrix( ( *i_pv )->covMatrix() );
-          vJet->setChi2( ( *i_pv )->chi2() );
-          vJet->setNDoF( ( *i_pv )->nDoF() );
-          vJet->setOutgoingParticles( jet->daughters() );
-          jet->setEndVertex( vJet );
-          this->relate( jet, *i_pv );
-        }
-        if ( !( m_applyJetID && m_runJetID && ( mtf( jet ) > 0.75 || nPVInfo( jet ) < 2 ) ) ) {
-          sc = save( "jets", jet );
-          if ( sc.isFailure() ) { return Error( "Error from save function in jet maker", sc ); }
-        }
-        jets.pop_back();
-        unRelatePV( jet );
-        delete jet->endVertex();
-        delete jet;
-      }
-    }
-  } else {
-
-    Range all = select( "all", LoKi::Cuts::PALL );
-    // input container of "particles"
-    IJetMaker::Jets jets;
-
-    if ( 0 == m_maker ) { m_maker = tool<IJetMaker>( m_makerName, m_makerName, this ); }
-
-    // make the jets
-    StatusCode sc = m_maker->makeJets( all.begin(), all.end(), jets );
-
-    if ( sc.isFailure() ) { return Error( "Error from jet maker", sc ); }
-
-    LoKi::Types::Fun mtf     = LoKi::Cuts::INFO( 9003, -10. );
-    LoKi::Types::Fun n90     = LoKi::Cuts::INFO( 9002, -10. );
-    LoKi::Types::Fun cpf     = LoKi::Cuts::INFO( 9006, -10. );
-    LoKi::Types::Fun width   = LoKi::Cuts::INFO( 9007, -10. );
-    LoKi::Types::Fun nPVInfo = LoKi::Cuts::INFO( 9005, -10. );
-
-    // save all jets
-    while ( !jets.empty() ) {
-      LHCb::Particle* jet = jets.back();
-      if ( m_runJetID ) this->appendJetIDInfo( jet ).ignore();
-      if ( m_applyJetID && m_runJetID && ( mtf( jet ) > 0.75 || nPVInfo( jet ) < 2 ) ) {
-        jets.pop_back();
-        delete jet;
-        continue;
-      }
-
-      sc = save( "jets", jet );
-      if ( sc.isFailure() ) { return Error( "Error from save function in jet maker", sc ); }
-
-      jets.pop_back();
-      delete jet;
-    }
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) { m_nJets += selected( "jets" ).size(); }
-  setFilterPassed( true );
-
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::JetMaker::appendJetIDInfo( LHCb::Particle* jet ) {
-  // Get Jet Daughters
-  std::vector<const LHCb::Particle*>           daughtersvector = jet->daughtersVector();
-  std::vector<const LHCb::Particle*>::iterator idaughter       = daughtersvector.begin();
-
-  double mtf;   /// Highest pT track / Jet pT
-  double cpf;   /// charged pT fraction - V0s are not included
-  double width; /// jet width
-  int    n90;   /// Number of items responsible for at least 90% of the jet momentum
-  int    ntrk;  /// Number of tracks
-
-  float              auxptmax = -1, sumpt = 0;
-  int                iitems = 0;
-  double             tpx = 0, tpy = 0;
-  std::vector<float> itemspt;
-  ntrk = n90 = width = 0;
-
-  for ( ; idaughter != daughtersvector.end(); ++idaughter ) {
-    const LHCb::Particle* daughter = *idaughter;
-    if ( daughter->particleID().threeCharge() != 0 ) {
-      ntrk++;
-      auxptmax = daughter->momentum().Pt() > auxptmax ? daughter->momentum().Pt() : auxptmax;
-      tpx += daughter->momentum().Px();
-      tpy += daughter->momentum().Py();
-    }
-    iitems++;
-    float pt = daughter->momentum().Pt();
-    sumpt += pt;
-    itemspt.push_back( pt );
-    for ( int ii = 0; ii < iitems; ii++ ) {
-      if ( itemspt[ii] < pt ) {
-        float aux   = itemspt[ii];
-        itemspt[ii] = pt;
-        pt          = aux;
-      }
-    }
-    width += ROOT::Math::VectorUtil::DeltaR( daughter->momentum(), jet->momentum() ) * daughter->momentum().Pt();
-  }
-
-  mtf = auxptmax / jet->momentum().Pt();
-  mtf = 0 > mtf ? 0 : mtf;
-  mtf = 1 < mtf ? 1 : mtf;
-  cpf = std::sqrt( tpx * tpx + tpy * tpy ) / jet->momentum().Pt();
-  width /= sumpt;
-
-  sort( itemspt.begin(), itemspt.end() );
-  float auxptsum = 0;
-  n90            = 0;
-  for ( int ii = iitems - 1; ii >= 0; ii-- ) {
-    auxptsum += itemspt[ii];
-    n90++;
-    if ( auxptsum / sumpt > 0.9 ) break;
-  }
-
-  LoKi::Types::Fun NsatCells   = LoKi::Cuts::SUMTREE( LoKi::Cuts::INFO( 955, 0. ), LoKi::Cuts::Q == 0, 0. );
-  LoKi::Types::Fun N_HasPVInfo = LoKi::Cuts::NINTREE(
-      ( LoKi::Cuts::ABSID == 310 || LoKi::Cuts::ABSID == 3122 ) ||
-      ( LoKi::Cuts::HASTRACK && static_cast<int>( LHCb::Track::Types::Downstream ) != LoKi::Cuts::TRTYPE ) );
-
-  jet->addInfo( 9001, ntrk );
-  jet->addInfo( 9002, n90 );
-  jet->addInfo( 9003, mtf );
-  jet->addInfo( 9006, cpf );
-  jet->addInfo( 9007, width );
-  jet->addInfo( 9004, NsatCells( jet ) );
-  jet->addInfo( 9005, N_HasPVInfo( jet ) );
-
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::JetMaker::JEC( LHCb::Particle* jet ) {
-  const int    PV    = this->primaryVertices().size();
-  const int    usePV = ( PV > 3 ? 3 : PV );
-  const TH2D*  histo = m_histosJEC[usePV - 1];
-  const int    xbin  = histo->GetXaxis()->FindFixBin( LoKi::Cuts::PT( jet ) / 1000. );
-  const int    ybin  = histo->GetYaxis()->FindFixBin( LoKi::Cuts::ETA( jet ) );
-  const double cor   = histo->GetBinContent( xbin, ybin );
-  // Store the uncorrected kinematics
-
-  jet->addInfo( 9100, cor );
-  jet->addInfo( 9101, PV );
-
-  jet->setMomentum( Gaudi::LorentzVector( cor * LoKi::Cuts::PX( jet ), cor * LoKi::Cuts::PY( jet ),
-                                          cor * LoKi::Cuts::PZ( jet ), cor * LoKi::Cuts::E( jet ) ) );
-
-  return StatusCode::SUCCESS;
-}
-
-DECLARE_COMPONENT( LoKi::JetMaker )
diff --git a/Phys/LoKiJets/src/LoKiJetMakerWR2VtxAlg.cpp b/Phys/LoKiJets/src/LoKiJetMakerWR2VtxAlg.cpp
deleted file mode 100644
index c878b599f..000000000
--- a/Phys/LoKiJets/src/LoKiJetMakerWR2VtxAlg.cpp
+++ /dev/null
@@ -1,184 +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.                                       *
-\*****************************************************************************/
-
-#include "LoKi/Algo.h"
-#include "LoKi/ParticleCuts.h"
-
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-
-#include "Event/Particle.h"
-
-namespace LoKi {
-
-  /** @class JetMakerWR2Vtx
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Vanya BELYAEV belyaev@lapp.in2p3.fr
-   *  @date   2005-03-21
-   */
-  class JetMakerWR2Vtx : public LoKi::Algo {
-  public:
-    /** Standard constructor
-     *  @param name instance name
-     *  @param pSvc pointer to Service Locator
-     */
-    JetMakerWR2Vtx( const std::string& name, ISvcLocator* pSvc )
-        : LoKi::Algo( name, pSvc )
-        //
-        , m_makerName( "LoKi::FastJetMaker" )
-        , m_maker( 0 )
-        , m_VtxLoc( "" ) {
-      //
-      declareProperty( "JetMaker", m_makerName, "Type type/name of jet-maker tool (IJetMaker interface)" );
-      declareProperty( "InputRecVtxLoc", m_VtxLoc, "RecVtx Input location" );
-
-      //
-    }
-
-    /** standard execution of the algorithm
-     *  @see LoKi::Algo
-     *  @return status code
-     */
-    StatusCode analyse() override;
-
-  private:
-    /// maker name
-    std::string m_makerName; // jet maker name
-    /// maker
-    const IJetMaker* m_maker; // jet maker to be used
-    std::string      m_VtxLoc;
-
-    mutable Gaudi::Accumulators::StatCounter<> m_nJets{this, "#jets"};
-  };
-
-} // end of namespace LoKi
-
-/** @file
- *  Implementation file for class  LoKi::JetMakerWR2Vtx
- *  @date  2005-03-21
- *  @author Vanya BELYAEV  belyaev@lapp.in2p3.fr
- */
-
-/*  standard execution of the algorithm
- *  @see LoKi::Algo
- *  @return status code
- */
-StatusCode LoKi::JetMakerWR2Vtx::analyse() {
-  using namespace LoKi;
-  using namespace LoKi::Types;
-  // select all input particles
-  Range all = select( "all", LoKi::Cuts::PALL );
-
-  // input container of "particles"
-  const std::vector<const LHCb::Particle*> input( all.begin(), all.end() );
-
-  // const LHCb::RecVertex vtx;
-  if ( 0 == m_maker ) { m_maker = tool<IJetMaker>( m_makerName, m_makerName, this ); }
-
-  if ( m_VtxLoc == "" ) {
-
-    IJetMaker::Jets jets;
-
-    StatusCode sc = m_maker->makeJets( input, jets );
-    if ( sc.isFailure() ) { return Error( "Error from seed maker", sc ); }
-
-    int myj = 0;
-    while ( !jets.empty() ) {
-
-      LHCb::Particle* jet = jets.back();
-
-      myj++;
-      if ( msgLevel( MSG::DEBUG ) ) {
-        debug() << "SeedsP " << myj << "| nb of combin Seeds:  " << jet->weight()
-                << "  nb part in the jet:  " << jet->daughtersVector().size() << "  Pt:  " << jet->pt() << endmsg;
-        debug() << "        | m  : " << jet->momentum() << endmsg;
-        debug() << "        | eta: " << jet->momentum().eta() << "  / phi: " << jet->momentum().phi() << endmsg;
-        debug() << "        |Chi2: " << jet->endVertex()->chi2() << endmsg;
-        debug() << "        |nDoF: " << jet->endVertex()->nDoF() << endmsg;
-        debug() << "        |C/N : " << jet->endVertex()->chi2PerDoF() << endmsg;
-      }
-
-      save( "jets", jet ).ignore();
-      jets.pop_back();
-      delete jet;
-    }
-  }
-
-  if ( !exist<LHCb::RecVertex::Range>( m_VtxLoc ) ) return Error( "the VtxLoc do not exsit" );
-
-  const LHCb::RecVertex::Range PVs = get<LHCb::RecVertex::Range>( m_VtxLoc );
-
-  if ( msgLevel( MSG::DEBUG ) ) debug() << "Vtx size : " << PVs.size() << endmsg;
-
-  int i = 0;
-  // std::vector<int> sjets;
-  for ( LHCb::RecVertex::Range::const_iterator ipv2 = PVs.begin(); ipv2 != PVs.end(); ++ipv2 ) {
-    //   sjets.at(i) = 0;
-
-    if ( msgLevel( MSG::DEBUG ) ) debug() << "Vtx: " << i << endmsg;
-
-    IJetMaker::Jets jets;
-
-    const LHCb::RecVertex vtx = **ipv2;
-
-    // make the jets
-    StatusCode sc = m_maker->makeJets( input, vtx, jets );
-
-    if ( sc.isFailure() ) { return Error( "Error from seed maker", sc ); }
-
-    // save all jets
-    int myj = 0;
-
-    while ( !jets.empty() ) {
-
-      LHCb::Particle* jet = jets.back();
-      //     sjets.at(i)++;
-      myj++;
-      if ( msgLevel( MSG::DEBUG ) ) {
-        debug() << "SeedsP " << myj << "| nb of combin Seeds:  " << jet->weight()
-                << "  nb part in the jet:  " << jet->daughtersVector().size() << "  Pt:  " << jet->pt() << endmsg;
-        debug() << "        | m  : " << jet->momentum() << endmsg;
-        debug() << "        | eta: " << jet->momentum().eta() << "  / phi: " << jet->momentum().phi() << endmsg;
-        debug() << "        |Chi2: " << jet->endVertex()->chi2() << endmsg;
-        debug() << "        |nDoF: " << jet->endVertex()->nDoF() << endmsg;
-        debug() << "        |C/N : " << jet->endVertex()->chi2PerDoF() << endmsg;
-      }
-
-      save( "jets", jet ).ignore();
-      jets.pop_back();
-      delete jet;
-    }
-    //   i++;
-  }
-
-  // int kk=0;
-  // for(int jj = 0; jj != (int)  sjets.size(); jj++)
-  //   if( sjets.at(i) > 0)
-  //     kk++;
-
-  // if(kk > 1) std::cout<<"evt :"<<evt<<std::endl;
-
-  if ( msgLevel( MSG::DEBUG ) ) { m_nJets += selected( "jets" ).size(); }
-
-  setFilterPassed( true );
-
-  return StatusCode::SUCCESS;
-}
-
-DECLARE_COMPONENT( LoKi::JetMakerWR2Vtx )
diff --git a/Phys/LoKiJets/src/LoKiJetParticleMaker.cpp b/Phys/LoKiJets/src/LoKiJetParticleMaker.cpp
deleted file mode 100644
index 4aa1d2261..000000000
--- a/Phys/LoKiJets/src/LoKiJetParticleMaker.cpp
+++ /dev/null
@@ -1,120 +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.                                       *
-\*****************************************************************************/
-// ============================================================================
-// include files
-// ============================================================================
-// STD & STL
-// ============================================================================
-#include <string>
-// ============================================================================
-// GaudiAlg
-// ============================================================================
-#include "GaudiAlg/GaudiTool.h"
-// ============================================================================
-// DaVinci Kernel
-// ============================================================================
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleMaker.h"
-// ============================================================================
-namespace LoKi {
-  // ==========================================================================
-  /** @class JetParticleMaker
-   *  The simple implementation of interface IParticleMaker for building the
-   *  jets using IJetMaker tool
-   *  @see IParticleMaker
-   *  @see IJetMaker
-   *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
-   *  @date 2007-10-15
-   */
-  class JetParticleMaker : public virtual IParticleMaker, public GaudiTool {
-  public:
-    // ========================================================================
-    /// make the particles
-    StatusCode makeParticles( LHCb::Particle::ConstVector& particles ) override;
-    /// initialize the tool
-    StatusCode initialize() override {
-      StatusCode sc = GaudiTool::initialize();
-      if ( sc.isFailure() ) { return sc; }
-      // locate the jet-finder
-      m_jetMaker = tool<IJetMaker>( m_jetMakerName, this );
-      // check the inputs
-      if ( m_inputs.empty() ) { Warning( "No input locations are specified!" ).ignore(); }
-      return StatusCode::SUCCESS;
-    }
-    // ========================================================================
-    /// The standard constructor
-    JetParticleMaker( const std::string& type, const std::string& name, const IInterface* parent )
-        : GaudiTool( type, name, parent ), m_jetMakerName( "LoKi::FastJetMaker" ), m_jetMaker( 0 ) {
-      declareInterface<IParticleMaker>( this );
-
-      declareProperty( "JetMaker", m_jetMakerName, "The type/name of Jet-Maker tool" );
-      declareProperty( "Inputs", m_inputs, "The list of input locations " );
-    }
-    // ========================================================================
-  private:
-    // ========================================================================
-    // the jet maker name
-    std::string m_jetMakerName; ///< the jet-maker name
-    // the jet maker itself
-    const IJetMaker*                 m_jetMaker; ///< the jet-maker itself
-    typedef std::vector<std::string> Inputs;
-    // input locations
-    Inputs m_inputs; ///< the input locations
-    // counters
-    mutable Gaudi::Accumulators::SummingCounter<unsigned int> m_nbJetsCounter{this, "#jets"};
-    // ========================================================================
-  };
-  // ==========================================================================
-} // end of namespace LoKi
-// ============================================================================
-// make the particles
-// ============================================================================
-StatusCode LoKi::JetParticleMaker::makeParticles( LHCb::Particle::ConstVector& particles ) {
-
-  IJetMaker::Input inputs;
-  // loop over all input locations
-  for ( Inputs::const_iterator i = m_inputs.begin(); m_inputs.end() != i; ++i ) {
-    if ( exist<LHCb::Particle::Range>( *i ) ) {
-      const LHCb::Particle::Range parts = get<LHCb::Particle::Range>( *i );
-      inputs.insert( inputs.end(), parts.begin(), parts.end() );
-    } else if ( exist<LHCb::Particle::Range>( ( *i ) + "/Particles" ) ) {
-      const LHCb::Particle::Range parts = get<LHCb::Particle::Range>( ( *i ) + "/Particles" );
-      inputs.insert( inputs.end(), parts.begin(), parts.end() );
-    } else {
-      return Error( "No valid location: " + ( *i ) );
-    }
-  }
-
-  // empty container of conmstituents?
-  if ( inputs.empty() ) { Warning( "Empty container of input particles " ).ignore(); }
-
-  // prepare the container for output jets
-  IJetMaker::Jets jets;
-  jets.reserve( 100 );
-
-  // use Jet Maker tool:
-  StatusCode sc = m_jetMaker->makeJets( inputs, jets );
-  if ( sc.isFailure() ) { return Error( "The error form JetMaker", sc ); }
-
-  // add the jets to the output container:
-  particles.insert( particles.end(), jets.begin(), jets.end() );
-
-  // some statistics
-  m_nbJetsCounter += jets.size();
-
-  return StatusCode::SUCCESS;
-}
-// ============================================================================
-/// the factory
-DECLARE_COMPONENT( LoKi::JetParticleMaker )
-// ============================================================================]
-// The END
-// ============================================================================
diff --git a/Phys/LoKiJets/src/LoKiJets2JetsAlg.cpp b/Phys/LoKiJets/src/LoKiJets2JetsAlg.cpp
deleted file mode 100644
index 3361a3bf2..000000000
--- a/Phys/LoKiJets/src/LoKiJets2JetsAlg.cpp
+++ /dev/null
@@ -1,144 +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.                                       *
-\*****************************************************************************/
-// ============================================================================
-// Include files
-// ============================================================================
-#include "GaudiAlg/GaudiAlgorithm.h"
-// ============================================================================
-// DaVinci Kernel
-// ============================================================================
-#include "Kernel/IJets2Jets.h"
-// ===========================================================================
-// Event
-// ============================================================================
-#include "Event/Particle.h"
-// ============================================================================
-
-// ==========================================================================
-/** @class Jets2JetsAlg
- *  @date  2009-10-29
- *  @author Victor Coco  victor.coco@cern.ch
- *
- */
-class Jets2JetsAlg : public GaudiAlgorithm {
-  // ========================================================================
-  /// the friend factory for instantiation
-  // ========================================================================
-public:
-  // ========================================================================
-  /** Standard constructor
-   *  @param name instance name
-   *  @param pSvc pointer to Service Locator
-   */
-  Jets2JetsAlg( const std::string& name, ISvcLocator* pSvc )
-      : GaudiAlgorithm( name, pSvc )
-      //
-      , m_jetMatcherName()
-      , m_jetALocation()
-      , m_jetBLocation()
-      , m_output()
-      , m_jetMatcher( 0 ) {
-    //
-    declareProperty( "Jets2Jets", m_jetMatcherName, "Type type/name of jet-jetMatcher tool (IJets2Jets interface)" );
-    declareProperty( "JetsALocation", m_jetALocation, "Location of the first set of jet" );
-    declareProperty( "JetsBLocation", m_jetBLocation, "Location of the second set of jet" );
-    declareProperty( "OutputTable", m_output, "Location of the output table" );
-    //
-  }
-  // ========================================================================
-public:
-  // ========================================================================
-  /** standard execution of the algorithm
-   *  @see LoKi::Algo
-   *  @return status code
-   */
-  StatusCode initialize() override;
-  StatusCode execute() override;
-  // ========================================================================
-
-  // ========================================================================
-private:
-  // ========================================================================
-  /// jetMatcher name
-  std::string m_jetMatcherName; ///< jet jetMatcher name
-  std::string m_jetALocation;   ///< Location of the first set of jet
-  std::string m_jetBLocation;   ///< Location of the second set of jet
-  std::string m_output;         ///< Location of the second set of jet
-  /// jetMatcher
-  const IJets2Jets* m_jetMatcher; ///< jet jetMatcher to be used
-  // ========================================================================
-};
-// ==========================================================================
-// end of namespace LoKi
-// ============================================================================
-/** @file
- *  Implementation file for class Jets2JetsAlg
- *  Client for implementation of IJets2Jets, furnishing the sets of jets out of
- *  transiant event store location and recording the resulting output table
- *
- *  @date  2009-10-29
- *  @author Victor COCO  victor.coco@cern.ch
- */
-
-// Declaration of the Algorithm Factory
-DECLARE_COMPONENT( Jets2JetsAlg )
-
-StatusCode Jets2JetsAlg::initialize() {
-  StatusCode sc = GaudiAlgorithm::initialize();
-  if ( sc.isFailure() ) return sc;
-  if ( m_jetALocation.empty() || m_jetBLocation.empty() ) return Error( "No input locations is specified" );
-  if ( m_jetMatcherName.empty() || m_jetBLocation.empty() ) return Error( "No jet matching tool specified" );
-  if ( m_output.empty() ) return Error( "No OutputTable is specified" );
-  return sc;
-}
-
-StatusCode Jets2JetsAlg::execute() {
-  // Get the jets
-  const LHCb::Particles* PartsA = get<LHCb::Particles>( m_jetALocation );
-  const LHCb::Particles* PartsB = get<LHCb::Particles>( m_jetBLocation );
-  if ( PartsA->size() == 0 || PartsB->size() == 0 ) {
-    Warning( "No jets to match in the event" ).ignore();
-    setFilterPassed( false );
-    return StatusCode::SUCCESS;
-  }
-  IJets2Jets::Jets* JetsA = new IJets2Jets::Jets();
-  IJets2Jets::Jets* JetsB = new IJets2Jets::Jets();
-  for ( LHCb::Particles::const_iterator ip = PartsA->begin(); PartsA->end() != ip; ip++ ) JetsA->push_back( *ip );
-  for ( LHCb::Particles::const_iterator ip = PartsB->begin(); PartsB->end() != ip; ip++ ) JetsB->push_back( *ip );
-  if ( 0 == m_jetMatcher ) m_jetMatcher = tool<IJets2Jets>( m_jetMatcherName, m_jetMatcherName, this );
-
-  // create the relation table
-  IJets2Jets::Table* table = new IJets2Jets::Table();
-  put( table, m_output );
-
-  // call the tool
-  m_jetMatcher->makeRelation( *JetsA, *JetsB, *table );
-
-  // total number of established links
-  const size_t links = table->relations().size();
-
-  // make a statistics
-  if ( msgLevel( MSG::VERBOSE ) ) { counter( "# " + m_jetALocation + "->" + m_jetBLocation ) += links; }
-  //
-  if ( table->relations().empty() ) {
-    Warning( "The relation table is empty!" ).ignore();
-    setFilterPassed( false );
-  }
-  setFilterPassed( true );
-
-  return StatusCode::SUCCESS;
-}
-
-// ===========================================================================
-/// The factory
-// ============================================================================
-// The END
-// ============================================================================
diff --git a/Phys/LoKiJets/src/LoKiSeedConeJetMaker.cpp b/Phys/LoKiJets/src/LoKiSeedConeJetMaker.cpp
deleted file mode 100644
index 4b7d0b3a4..000000000
--- a/Phys/LoKiJets/src/LoKiSeedConeJetMaker.cpp
+++ /dev/null
@@ -1,508 +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.                                       *
-\*****************************************************************************/
-
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-
-#include "LoKi/Geometry.h"
-#include "LoKi/ILoKiSvc.h"
-#include "LoKi/Kinematics.h"
-
-#include "Event/Particle.h"
-#include "Event/RecVertex.h"
-#include "Kernel/IParticleTransporter.h"
-
-#include "DetDesc/IDetectorElement.h"
-
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/ITupleTool.h"
-
-namespace LoKi {
-
-  /** @class SeedConeJetMaker
-   *
-   *  The most trivial, SeedConeJet based  implementaion of interface IJetMaker
-   *  @see IJetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Cedric POTTERAT  cedric.potterat@cern.ch
-   *  @date   2011-01-31
-   */
-  class SeedConeJetMaker : public virtual IJetMaker, public GaudiTool {
-  public:
-    /** The main method: jet-finding procedure
-     *
-     *  @code
-     *
-     *  // get the tool
-     *  const IJetMaker* jetMaker = tool<IJetMaker> ( .... ) ;
-     *
-     *  // input particles
-     *  IJetMaker::Inputs input = ...
-     *  // 1)
-     *  // const Particles* particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles->begin() , particles->end() ) ;
-     *  // 2)
-     *  // LHCb::Particle::ConstVector particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *  // 3)
-     *  // LoKi::Range particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *
-     *  // placeholder for "output" jets
-     *  IJetMaker::Jets   jets ;
-     *
-     *  // find the jets!
-     *  StatusCode sc = jetMaker -> makeJets ( input , jets ) ;
-     *
-     *  // make  a loop over jets:
-     *  for ( IJetMaker::Jets::const_iterator iJet = jets.begin() ;
-     *        jets.end() != iJet ; ++iJet )
-     *    {
-     *        // get the jet
-     *        LHCb::Particle* jet = *iJet ;
-     *    }
-     *
-     *  @endcode
-     *
-     *  @attention It is a responsibility of users (e.g. the algorithm)
-     *             to take care about the ownership of jets *AND* their
-     *             vertices). The tool is not intended to do it!
-     *
-     *  @param input contaainer of input particles
-     *  @param jets  container of  output jets
-     *  @return status code
-     */
-    StatusCode makeJets( const IJetMaker::Input& input, IJetMaker::Jets& jets ) const override;
-    StatusCode makeJets( const IJetMaker::Input& input, const LHCb::RecVertex& vtx,
-                         IJetMaker::Jets& jets ) const override;
-
-    /** the standard constructor
-     *
-     *  @todo The default values for configuration parameters
-     *        (especially for R-parameter) need to be adjusted
-     *        according to EPFL/UB/CERN studies.
-     *
-     */
-    SeedConeJetMaker( const std::string& type, const std::string& name, const IInterface* parent )
-        : GaudiTool( type, name, parent )
-        //
-        , m_jetID( 10098 )
-        //
-        , m_r( 0.7 )
-        , m_ptmin( 8000 )
-        //
-        , m_sort( 4 )
-        , m_sortSeed( 4 )
-
-        //
-        , m_combinerName( "MomentumCombiner" )
-        , m_combiner( 0 )
-
-        , m_seedFinderName( "LoKi__SeedFinder" )
-        , m_seedFinder( 0 )
-        , m_uniquetrk( false )
-
-    {
-      //
-      declareInterface<IJetMaker>( this );
-      //
-      declareProperty( "JetID", m_jetID, "Particle ID for the Jet" );
-      declareProperty( "RParameter", m_r );
-      declareProperty( "PtMin", m_ptmin );
-      //
-      declareProperty( "SortJet", m_sort,
-                       "Sorting Criteria for jets [0:none,1:pt,2:E, 3:eta,4:DauThenPt, default:DauThenPt]" );
-
-      declareProperty( "SortSeed", m_sort,
-                       "Sorting Criteria for Seeds [0:none,1:pt,2:E, 3:eta,4:DauThenPt, default:DauThenPt]" );
-      // define momentum combiner
-      declareProperty( "ParticleCombiner", m_combinerName );
-      declareProperty( "SeedFinder", m_seedFinderName, "VVSeedFinder, UBSeedFinder, ..." );
-
-      declareProperty( "ConeUniqueTrk", m_uniquetrk, "Cone With unique trk ON/OFF" );
-    }
-
-    /** standard initialization of the tool
-     *  @return status code
-     */
-    StatusCode initialize() override;
-
-  protected:
-    /// make the detailed check of all parameters
-
-    inline StatusCode check() const {
-      if ( 0 > m_ptmin ) { Warning( "PtMin is negative " ).ignore(); }
-      return StatusCode::SUCCESS;
-    }
-
-  protected:
-    int to_user_index( const int index ) const { return index + 10000; }
-    int from_user_index( const int index ) const { return index - 10000; }
-
-  protected:
-    Gaudi::Property<std::string> m_standardGeometry_address{this, "StandardGeometryTop", "/dd/Structure/LHCb"};
-
-    // proposed jet ID
-    int m_jetID; ///< proposed jet ID
-    // R-parameter
-    double m_r; ///< R-parameters
-    // ptMin-parameter
-    double m_ptmin; ///< pt-min parameter
-    // jet sorting criteria
-    int m_sort;     ///< jet sorting criteria
-    int m_sortSeed; ///< seed sorting criteria
-
-    // combiner
-    std::string                m_combinerName;
-    mutable IParticleCombiner* m_combiner; ///< combiner to be used
-
-    std::string        m_seedFinderName;
-    mutable IJetMaker* m_seedFinder; ///< combiner to be used
-
-    bool m_uniquetrk;
-
-    ITupleTool* m_tuple;
-
-    IJetMaker::Jets JetCone( double const& Rmax, IJetMaker::Jets& seeds, IJetMaker::Input const& inputs,
-                             IGeometryInfo const& geometry ) const;
-
-    IJetMaker::Jets JetConePurged( double const& Rmax, IJetMaker::Jets& seeds, IJetMaker::Input const& inputs,
-                                   IGeometryInfo const& geometry ) const;
-
-  private:
-    mutable Gaudi::Accumulators::StatCounter<> m_nJets{this, "#jets"};
-  };
-} // namespace LoKi
-
-class sortDauPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    if ( obj1->weight() == obj2->weight() )
-      if ( obj1->daughtersVector().size() == obj2->daughtersVector().size() )
-        return obj1->pt() > obj2->pt();
-      else
-        return obj1->daughtersVector().size() > obj2->daughtersVector().size();
-    else
-      return obj1->weight() > obj2->weight();
-  }
-};
-
-class sortE {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().E() > obj2->momentum().E();
-  }
-};
-
-class sortEta {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().Eta() > obj2->momentum().Eta();
-  }
-};
-
-class sortPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) { return obj1->pt() > obj2->pt(); }
-};
-
-/*  standard initialization of the tool
- *  @return status code
- */
-StatusCode LoKi::SeedConeJetMaker::initialize() {
-  StatusCode sc = GaudiTool::initialize();
-  if ( sc.isFailure() ) { return sc; }
-
-  svc<LoKi::ILoKiSvc>( "LoKiSvc", true );
-
-  // select your prefered SeedFinder
-  m_seedFinder = tool<IJetMaker>( m_seedFinderName, this );
-
-  m_combiner = tool<IParticleCombiner>( m_combinerName, this );
-
-  return sc;
-}
-
-// ===========================================================================
-// find the jets via a Seed Finder
-// ===========================================================================
-
-StatusCode LoKi::SeedConeJetMaker::makeJets( const IJetMaker::Input& input_, IJetMaker::Jets& jets_ ) const {
-
-  const LHCb::RecVertex::Container* verts = get<LHCb::RecVertex::Container>( LHCb::RecVertexLocation::Primary );
-  if ( verts->size() != 1 ) return StatusCode::SUCCESS;
-  LHCb::RecVertex::Container::const_iterator iv = verts->begin();
-
-  const LHCb::RecVertex vtx = **iv;
-
-  makeJets( input_, vtx, jets_ ).ignore();
-
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::SeedConeJetMaker::makeJets( const IJetMaker::Input& input_, const LHCb::RecVertex& vtx_,
-                                             IJetMaker::Jets& jets_ ) const {
-
-  IJetMaker::Jets Seeds;
-
-  // create seeds with the input particles
-  m_seedFinder->makeJets( input_, vtx_, Seeds ).ignore();
-
-  if ( Seeds.empty() ) {
-    Warning( "No Seeds from: " + m_seedFinderName ).ignore();
-    return StatusCode::SUCCESS;
-  }
-
-  // sort the seeds according to the selected creteria (SortSeed opt)
-  if ( m_sortSeed == 1 ) std::stable_sort( Seeds.begin(), Seeds.end(), sortPt() );
-  if ( m_sortSeed == 2 ) std::stable_sort( Seeds.begin(), Seeds.end(), sortE() );
-  if ( m_sortSeed == 3 ) std::stable_sort( Seeds.begin(), Seeds.end(), sortEta() );
-  if ( m_sortSeed == 4 ) std::stable_sort( Seeds.begin(), Seeds.end(), sortDauPt() );
-
-  LHCb::Particle::Vector output;
-  LHCb::Particle::Vector outputP;
-
-  output.reserve( Seeds.size() );
-  outputP.reserve( Seeds.size() );
-
-  // Get the default geometry FIXME, use functional framework
-  auto lhcb = getDet<IDetectorElement>( m_standardGeometry_address );
-  if ( !lhcb ) { throw GaudiException( "Could not load geometry", name(), StatusCode::FAILURE ); }
-  auto& geometry = *lhcb->geometry();
-
-  // create jets arrount the seeds directions, use the RParameter opt, PtJetMin and the jetID.
-  output = JetCone( m_r, Seeds, input_, geometry );
-  // sort the jets according to the selected creteria (SortJet opt)
-  if ( m_sort == 1 ) std::stable_sort( output.begin(), output.end(), sortPt() );
-  if ( m_sort == 2 ) std::stable_sort( output.begin(), output.end(), sortE() );
-  if ( m_sort == 3 ) std::stable_sort( output.begin(), output.end(), sortEta() );
-  if ( m_sort == 4 ) std::stable_sort( output.begin(), output.end(), sortDauPt() );
-  int myj = 0;
-  for ( LHCb::Particle::Vector::iterator ijet = output.begin(); output.end() != ijet; ++ijet ) {
-    LHCb::Particle* pJet = *ijet;
-
-    myj++;
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "ConeJets " << myj << "| nb of combin Seeds:  " << pJet->weight()
-              << "  nb part in the jet:  " << pJet->daughtersVector().size() << "  Pt:  " << pJet->pt() << endmsg;
-      debug() << "         | m  : " << pJet->momentum() << endmsg;
-      debug() << "         | eta: " << pJet->momentum().eta() << "  / phi: " << pJet->momentum().phi() << endmsg;
-    }
-  }
-
-  if ( m_uniquetrk ) {
-    outputP = JetConePurged( m_r, output, input_, geometry );
-    if ( m_sort == 1 ) std::stable_sort( outputP.begin(), outputP.end(), sortPt() );
-    if ( m_sort == 2 ) std::stable_sort( outputP.begin(), outputP.end(), sortE() );
-    if ( m_sort == 3 ) std::stable_sort( outputP.begin(), outputP.end(), sortEta() );
-    if ( m_sort == 4 ) std::stable_sort( outputP.begin(), outputP.end(), sortDauPt() );
-
-  } else
-    outputP = output;
-
-  myj = 0;
-  for ( LHCb::Particle::Vector::iterator ijet = outputP.begin(); outputP.end() != ijet; ++ijet ) {
-    LHCb::Particle* pJet = *ijet;
-
-    myj++;
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "ConeJetsP" << myj << "| nb of combin Seeds:  " << pJet->weight()
-              << "  nb part in the jet:  " << pJet->daughtersVector().size() << "  Pt:  " << pJet->pt() << endmsg;
-      debug() << "         | m  : " << pJet->momentum() << endmsg;
-      debug() << "         | eta: " << pJet->momentum().eta() << "  / phi: " << pJet->momentum().phi() << endmsg;
-    }
-  }
-
-  if ( msgLevel( MSG::INFO ) ) { m_nJets += outputP.size(); }
-
-  jets_ = outputP;
-
-  // Delete the pointer to the seed
-  for ( IJetMaker::Jets::iterator ijet = Seeds.begin(); Seeds.end() != ijet; ++ijet ) delete *ijet;
-
-  return StatusCode::SUCCESS;
-}
-
-//=============================================================================
-// JETCONE: THE HEART OF EVERYTHING, BUILDS A JET AROUND A SEED
-//=============================================================================
-IJetMaker::Jets LoKi::SeedConeJetMaker::JetCone( double const& Rmax, IJetMaker::Jets& seeds,
-                                                 IJetMaker::Input const& inputs, IGeometryInfo const& geometry ) const {
-
-  LHCb::Particle::Vector          pJetVec;
-  IJetMaker::Jets::const_iterator iseeds;
-
-  // loop over the seeds
-  for ( iseeds = seeds.begin(); iseeds != seeds.end(); ++iseeds ) {
-
-    const LHCb::Particle* pSeed = *iseeds;
-
-    LHCb::Particle              pJet;
-    LHCb::Vertex                vJet;
-    LHCb::Particle::ConstVector daughters;
-    daughters.reserve( inputs.size() );
-
-    pJet.setParticleID( LHCb::ParticleID( m_jetID ) );
-    pJet.setReferencePoint( pSeed->referencePoint() );
-    pJet.setEndVertex( pSeed->endVertex() );
-    double phiSeed = 0;
-    double etaSeed = 0;
-
-    if ( pSeed->endVertex() != NULL ) {
-      Gaudi::XYZVector seedd = Gaudi::XYZVector( Gaudi::XYZPoint( pSeed->endVertex()->position() ) -
-                                                 Gaudi::XYZPoint( pSeed->referencePoint() ) );
-      phiSeed                = seedd.phi();
-      etaSeed                = seedd.eta();
-
-    } else {
-      phiSeed = pSeed->momentum().phi();
-      etaSeed = pSeed->momentum().eta();
-    }
-
-    const double PI = 3.14159265;
-
-    Gaudi::LorentzVector ptot = Gaudi::LorentzVector( 0., 0., 0., 0. );
-
-    LHCb::Particle::ConstVector::const_iterator ip;
-    // loop over the particles
-    for ( ip = inputs.begin(); ip != inputs.end(); ++ip ) {
-
-      const LHCb::Particle* myPart = *ip;
-      Gaudi::LorentzVector  p1     = myPart->momentum();
-
-      double phiPart = myPart->momentum().phi();
-      double etaPart = myPart->momentum().eta();
-      double Dphi    = fabs( phiSeed - phiPart );
-      if ( Dphi > PI ) { Dphi = 2 * PI - Dphi; };
-      double R = sqrt( Dphi * Dphi + ( etaSeed - etaPart ) * ( etaSeed - etaPart ) );
-
-      // continue if not in DeltaR (Cone geom in eta-phi plan)
-      if ( R > Rmax ) continue;
-      ptot = ptot + p1;
-
-      daughters.push_back( myPart );
-    }
-
-    if ( daughters.empty() ) Warning( "Empty list of of daughter particles, skip it" ).ignore();
-
-    // continue if the jet is below PtJetMin opt
-    if ( ptot.Pt() < m_ptmin ) continue;
-    // save the particles involved as the daugther of the jet
-    StatusCode sc = m_combiner->combine( daughters, pJet, vJet, geometry );
-    if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-
-    pJet.setMomentum( Gaudi::LorentzVector( ptot ) );
-    pJetVec.push_back( pJet.clone() );
-  }
-  // return your jets
-  return pJetVec;
-}
-
-//=============================================================================
-// JETCONE: THE HEART OF EVERYTHING, BUILDS A JET AROUND A SEED
-//=============================================================================
-IJetMaker::Jets LoKi::SeedConeJetMaker::JetConePurged( double const& Rmax, IJetMaker::Jets& seeds,
-                                                       IJetMaker::Input const& inputs,
-                                                       IGeometryInfo const&    geometry ) const {
-
-  LHCb::Particle::Vector          pJetVec;
-  IJetMaker::Jets::const_iterator iseeds;
-
-  LHCb::Particle::Vector inputs2;
-
-  LHCb::Particle::ConstVector::const_iterator ip;
-  // loop over the particles
-  for ( ip = inputs.begin(); ip != inputs.end(); ++ip ) inputs2.push_back( ( *ip )->clone() );
-
-  // loop over the seeds
-  for ( iseeds = seeds.begin(); iseeds != seeds.end(); ++iseeds ) {
-
-    const LHCb::Particle* pSeed = *iseeds;
-
-    LHCb::Particle              pJet;
-    LHCb::Vertex                vJet;
-    LHCb::Particle::ConstVector daughters;
-    daughters.reserve( inputs.size() );
-
-    pJet.setParticleID( LHCb::ParticleID( m_jetID ) );
-    pJet.setReferencePoint( pSeed->referencePoint() );
-    pJet.setEndVertex( pSeed->endVertex() );
-    double phiSeed = 0;
-    double etaSeed = 0;
-
-    if ( pSeed->endVertex() != NULL ) {
-      Gaudi::XYZVector seedd = Gaudi::XYZVector( Gaudi::XYZPoint( pSeed->endVertex()->position() ) -
-                                                 Gaudi::XYZPoint( pSeed->referencePoint() ) );
-      phiSeed                = seedd.phi();
-      etaSeed                = seedd.eta();
-
-    } else {
-      phiSeed = pSeed->momentum().phi();
-      etaSeed = pSeed->momentum().eta();
-    }
-
-    const double PI = 3.14159265;
-
-    Gaudi::LorentzVector ptot = Gaudi::LorentzVector( 0., 0., 0., 0. );
-
-    LHCb::Particle::Vector inputs3; // part not used!
-
-    LHCb::Particle::Vector::iterator ip;
-    // loop over the particles
-    for ( ip = inputs2.begin(); ip != inputs2.end(); ++ip ) {
-
-      LHCb::Particle*      myPart = *ip;
-      Gaudi::LorentzVector p1     = myPart->momentum();
-
-      double phiPart = myPart->momentum().phi();
-      double etaPart = myPart->momentum().eta();
-      double Dphi    = fabs( phiSeed - phiPart );
-      if ( Dphi > PI ) { Dphi = 2 * PI - Dphi; };
-      double R = sqrt( Dphi * Dphi + ( etaSeed - etaPart ) * ( etaSeed - etaPart ) );
-
-      // continue if not in DeltaR (Cone geom in eta-phi plan)
-      if ( R > Rmax ) {
-        inputs3.push_back( myPart );
-      } else {
-        ptot = ptot + p1;
-
-        daughters.push_back( myPart );
-      }
-    }
-    inputs2 = inputs3; // remove the particle already assingned to a jet
-
-    if ( daughters.empty() ) Warning( "Empty list of of daughter particles, skip it" ).ignore();
-
-    // continue if the jet is below PtJetMin opt
-    if ( ptot.Pt() < m_ptmin ) continue;
-    // save the particles involved as the daugther of the jet
-    StatusCode sc = m_combiner->combine( daughters, pJet, vJet, geometry );
-    if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-
-    pJet.setMomentum( Gaudi::LorentzVector( ptot ) );
-    pJetVec.push_back( pJet.clone() );
-  }
-  // return your jets
-  return pJetVec;
-}
-
-DECLARE_COMPONENT( LoKi::SeedConeJetMaker )
diff --git a/Phys/LoKiJets/src/LoKiSeedFinder.cpp b/Phys/LoKiJets/src/LoKiSeedFinder.cpp
deleted file mode 100644
index 80ea8be26..000000000
--- a/Phys/LoKiJets/src/LoKiSeedFinder.cpp
+++ /dev/null
@@ -1,969 +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.                                       *
-\*****************************************************************************/
-
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-
-#include "LoKi/Geometry.h"
-#include "LoKi/ILoKiSvc.h"
-#include "LoKi/Kinematics.h"
-
-#include "Event/Particle.h"
-#include "Event/RecVertex.h"
-#include "Kernel/IDistanceCalculator.h"
-#include "Kernel/IParticleTransporter.h"
-#include "Kernel/IVertexFit.h"
-
-#include "DetDesc/IDetectorElement.h"
-
-#include "GaudiAlg/GaudiTool.h"
-
-namespace LoKi {
-
-  /** @class VVSeedFinder
-   *
-   *  The SeedFinder implementaion of interface IJetMaker
-   *  @see IJetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Cedric POTTERAT  cedric.potterat@cern.ch
-   *  @date   2011-01-31
-   */
-  class SeedFinder : public virtual IJetMaker, public GaudiTool {
-  public:
-    /** The main method: seed-finding procedure
-     *
-     *  @code
-     *
-     *  // get the tool
-     *  const IJetMaker* seedMaker = tool<IJetMaker> ( .... ) ;
-     *
-     *  // input particles
-     *  IJetMaker::Inputs input = ...
-     *  // 1)
-     *  // const Particles* particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles->begin() , particles->end() ) ;
-     *  // 2)
-     *  // LHCb::Particle::ConstVector particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *  // 3)
-     *  // LoKi::Range particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *
-     *  // placeholder for "output" jets
-     *  IJetMaker::Jets   seeds ;
-     *
-     *  // find the jets!
-     *  StatusCode sc = seedMaker -> makeJets ( input , seeds ) ;
-     *
-     *  // make  a loop over jets:
-     *  for ( IJetMaker::Jets::const_iterator iSeed = seeds.begin() ;
-     *        seeds.end() != iSeed ; ++iSeed )
-     *    {
-     *        // get the jet
-     *        LHCb::Particle* seed = *iSeed ;
-     *    }
-     *
-     *  @endcode
-     *
-     *  @attention It is a responsibility of users (e.g. the algorithm)
-     *             to take care about the ownership of jets *AND* their
-     *             vertices). The tool is not intended to do it!
-     *
-     *  @param input contaainer of input particles
-     *  @param seeds  container of  output seeds (of type Particle)
-     *  @return status code
-     */
-    StatusCode makeJets( const IJetMaker::Input& input, IJetMaker::Jets& jets ) const override;
-    StatusCode makeJets( const IJetMaker::Input& input, const LHCb::RecVertex& vtx,
-                         IJetMaker::Jets& jets ) const override;
-
-    /** the standard constructor
-     *
-     *  @todo The default values for configuration parameters
-     *        (especially for R-parameter) need to be adjusted
-     *        according to EPFL/UB/CERN studies.
-     *
-     */
-    SeedFinder( const std::string& type, const std::string& name, const IInterface* parent )
-        : GaudiTool( type, name, parent )
-        , m_seedID( 20097 )
-        , m_r( 0.15 )
-        , m_sort( 4 )
-        , m_combinerName( "MomentumCombiner" )
-        , m_combiner( 0 )
-        , m_dist( 0 )
-        , m_fitter( 0 )
-        , m_PtTrackMin( 600.0 )
-        , m_PTrackMin( 1000.0 )
-        , m_IPmin( 0.1 )
-        , m_Signif( 2.5 )
-        , m_DMK0( 10.0 )
-        , m_DtrakMaxK0( 0.5 )
-        , m_TseedVtxMin( 1.0 )
-        , m_TseedVtxMax( 200.0 )
-        , m_TseedVtxMinAnyPV( 0.1 )
-        , m_DtrakMax( 0.5 )
-        , m_PtSeedsMin( 1000 )
-        , m_SeedsMaxChi2DoF( 50. )
-        , m_Triplets( true )
-        , m_DRmin( 0.1 )
-        , m_DRmax( 50. )
-        , m_TrkChi2DoF( 2.5 )
-        , m_PVveto( true )
-    // ,   m_dirAng   ( 5.)
-
-    {
-      declareInterface<IJetMaker>( this );
-      declareProperty( "SeedID", m_seedID, "Particle ID for the Seed" );
-      declareProperty( "SeedRParameter", m_r );
-      declareProperty( "Sort", m_sort, "Sorting Criteria for jets [0:none,1:pt,2:E,3:eta, default:Pt]" );
-      declareProperty( "ParticleCombiner", m_combinerName );
-      declareProperty( "SeedPtTrackMin", m_PtTrackMin, "pt of the track used for Vertexing" );
-      declareProperty( "SeedPTrackMin", m_PTrackMin, "p of the track used for Vertexing" );
-      declareProperty( "SeedIPmin", m_IPmin, "ip of the track used for Vertexing" );
-      declareProperty( "SeedSignif", m_Signif, "signif oft he track used for Vertexing" );
-      declareProperty( "SeedDMK0", m_DMK0, "mass window for Ks" );
-      declareProperty( "SeedDtrakMaxK0", m_DtrakMaxK0, "dca window for Ks" );
-      declareProperty( "SeedTseedVtxMin", m_TseedVtxMin, "min distance btw PV and the  vtx" );
-      declareProperty( "SeedTseedVtxMinAnyPV", m_TseedVtxMinAnyPV, "min distance btw any PV and the  vtx" );
-      declareProperty( "SeedTseedVtxMax", m_TseedVtxMax, "max distance btw PV and the  vtx" );
-      declareProperty( "SeedDtrakMax", m_DtrakMax, "dca window for vtx" );
-      declareProperty( "SeedPtSeedsMin", m_PtSeedsMin, "min pt of the seeds" );
-      declareProperty( "SeedVtxMaxChi2PerDoF", m_SeedsMaxChi2DoF, "max chi2 per dof for the vtx fit of the seed" );
-      declareProperty( "SeedTriplets", m_Triplets, "built Vtx with 3 tracks" );
-      declareProperty( "SeedDRmin", m_DRmin, "min positon in R of the vtx" );
-      declareProperty( "SeedDRmax", m_DRmax, "max positon in R of the vtx" );
-      declareProperty( "SeedTrkChi2PerDoF", m_TrkChi2DoF, "max chi2PerDoF for the track used for the vtx" );
-      declareProperty( "vetoPV", m_PVveto,
-                       "exclude vertex near to any PV with distance fixe by 'SeedTseedVtxMinAnyPV' and exclude the trk "
-                       "associated to any PV to construct a secondary vtx" );
-      //   declareProperty ( "SeedMaxDirAngle"         , m_dirAng          , "Max direction angle btw the seed momentum
-      //   and the direction vtx-> seed"  );
-    }
-    /** standard initialization of the tool
-     *  @return status code
-     */
-    StatusCode initialize() override;
-
-  protected:
-    /// make the detailed check of all parameters
-
-    inline StatusCode check() const {
-      if ( 0 > m_ptmin ) { Warning( "PtMin is negative " ).ignore(); }
-      return StatusCode::SUCCESS;
-    }
-
-  protected:
-    Gaudi::Property<std::string> m_standardGeometry_address{this, "StandardGeometryTop", "/dd/Structure/LHCb"};
-
-    int to_user_index( const int index ) const { return index + 10000; }
-    int from_user_index( const int index ) const { return index - 10000; }
-    // proposed jet ID
-    int m_seedID; ///< proposed jet ID
-    // R-parameter
-    double m_r; ///< R-parameters
-    // ptMin-parameter
-    double m_ptmin; ///< pt-min parameter
-    // jet sorting criteria
-    int m_sort; ///< jet sorting criteria
-    // combiner
-    std::string                m_combinerName;
-    mutable IParticleCombiner* m_combiner; ///< combiner to be used
-
-    IDistanceCalculator* m_dist;
-    IVertexFit*          m_fitter;
-
-    double m_Rmax;
-    double m_PtTrackMin;
-    double m_PTrackMin;
-    double m_IPmin;
-    double m_Signif;
-    double m_DMK0;
-    double m_DtrakMaxK0;
-    double m_TseedVtxMin;
-    double m_TseedVtxMax;
-    double m_TseedVtxMinAnyPV;
-    double m_DtrakMax;
-    double m_PtSeedsMin;
-    double m_SeedsMaxChi2DoF;
-    bool   m_Triplets;
-    double m_DRmin;
-    double m_DRmax;
-    double m_TrkChi2DoF;
-    bool   m_PVveto;
-    double m_dirAng;
-
-    void RemoveTracks( LHCb::Particle::ConstVector& particles, const LHCb::RecVertex PV ) const;
-
-    double getDeltaR( LHCb::Particle* p1, LHCb::Particle* p2 ) const;
-
-  private:
-    mutable Gaudi::Accumulators::StatCounter<> m_nSeeds{this, "#seeds"};
-  };
-} // namespace LoKi
-
-class sortDauPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    if ( obj1->weight() == obj2->weight() )
-      if ( obj1->daughtersVector().size() == obj2->daughtersVector().size() )
-        return obj1->pt() > obj2->pt();
-      else
-        return obj1->daughtersVector().size() > obj2->daughtersVector().size();
-    else
-      return obj1->weight() > obj2->weight();
-  }
-};
-
-class sortCHi2NDoF {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-
-    if ( obj1->daughtersVector().size() == obj2->daughtersVector().size() )
-      return obj1->endVertex()->chi2PerDoF() < obj2->endVertex()->chi2PerDoF();
-    else
-      return obj1->daughtersVector().size() > obj2->daughtersVector().size();
-  }
-};
-
-class sortDirAng {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-
-    Gaudi::XYZVector seedd1 = Gaudi::XYZVector( Gaudi::XYZPoint( obj1->endVertex()->position() ) -
-                                                Gaudi::XYZPoint( obj1->referencePoint() ) );
-    Gaudi::XYZVector seedd2 = Gaudi::XYZVector( Gaudi::XYZPoint( obj2->endVertex()->position() ) -
-                                                Gaudi::XYZPoint( obj2->referencePoint() ) );
-
-    double dotprod1 = std::fabs( std::acos( seedd1.Unit().Dot( obj1->momentum().Vect().Unit() ) ) );
-    double dotprod2 = std::fabs( std::acos( seedd2.Unit().Dot( obj2->momentum().Vect().Unit() ) ) );
-
-    return dotprod1 < dotprod2;
-  }
-};
-
-class sortCOMBO {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-
-    Gaudi::XYZVector seedd1 = Gaudi::XYZVector( Gaudi::XYZPoint( obj1->endVertex()->position() ) -
-                                                Gaudi::XYZPoint( obj1->referencePoint() ) );
-    Gaudi::XYZVector seedd2 = Gaudi::XYZVector( Gaudi::XYZPoint( obj2->endVertex()->position() ) -
-                                                Gaudi::XYZPoint( obj2->referencePoint() ) );
-
-    double dotprod1 = std::fabs( std::acos( seedd1.Unit().Dot( obj1->momentum().Vect().Unit() ) ) );
-    double dotprod2 = std::fabs( std::acos( seedd2.Unit().Dot( obj2->momentum().Vect().Unit() ) ) );
-
-    double combo1 = 1000 * 1000 * ( dotprod1 * obj1->endVertex()->chi2PerDoF() ) /
-                    ( obj1->daughtersVector().size() * obj1->pt() * obj1->pt() );
-    double combo2 = 1000 * 1000 * ( dotprod2 * obj2->endVertex()->chi2PerDoF() ) /
-                    ( obj2->daughtersVector().size() * obj2->pt() * obj2->pt() );
-
-    return combo1 < combo2;
-  }
-};
-
-class sortE {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().E() > obj2->momentum().E();
-  }
-};
-
-class sortEta {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().Eta() > obj2->momentum().Eta();
-  }
-};
-
-class sortPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) { return obj1->pt() > obj2->pt(); }
-};
-
-/*  standard initialization of the tool
- *  @return status code
- */
-StatusCode LoKi::SeedFinder::initialize() {
-  const StatusCode sc = GaudiTool::initialize();
-  if ( sc.isFailure() ) { return sc; }
-
-  svc<LoKi::ILoKiSvc>( "LoKiSvc", true );
-
-  m_dist = tool<IDistanceCalculator>( "LoKi::DistanceCalculator" );
-
-  m_combiner = tool<IParticleCombiner>( m_combinerName, this );
-
-  m_fitter = tool<IVertexFit>( "OfflineVertexFitter" );
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << " ------------------------------------------------------ " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " |         SeedsFinder Tool for Phys Particles        | " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " ------------------------------------------------------ " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " |                                                      " << endmsg;
-    debug() << " |   SeedsFinder parameters: " << endmsg;
-    debug() << " |   SeedID                " << m_seedID << endmsg;
-    debug() << " |   SeedTriplets          " << m_Triplets << endmsg;
-    debug() << " |   PtTrackMin            " << m_PtTrackMin << endmsg;
-    debug() << " |   PTrackMin             " << m_PTrackMin << endmsg;
-    debug() << " |   TrkChi2PerDoF         " << m_TrkChi2DoF << endmsg;
-    debug() << " |   IPmin                 " << m_IPmin << endmsg;
-    debug() << " |   Signif                " << m_Signif << endmsg;
-    debug() << " |   DMK0                  " << m_DMK0 << endmsg;
-    debug() << " |   TseedVtxMin           " << m_TseedVtxMin << endmsg;
-    debug() << " |   TseedVtxMax           " << m_TseedVtxMax << endmsg;
-    debug() << " |   DtrakMax              " << m_DtrakMax << endmsg;
-    debug() << " |   PtSeedsMin            " << m_PtSeedsMin << endmsg;
-    debug() << " |   SeedsVtxMaxChi2PerDoF " << m_SeedsMaxChi2DoF << endmsg;
-    debug() << " |                                                      " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " ------------------------------------------------------ " << endmsg;
-  }
-
-  return sc;
-}
-
-// ===========================================================================
-// find seeds
-// ===========================================================================
-
-StatusCode LoKi::SeedFinder::makeJets( const IJetMaker::Input& input_, IJetMaker::Jets& jets_ ) const {
-
-  const LHCb::RecVertex::Container* verts = get<LHCb::RecVertex::Container>( LHCb::RecVertexLocation::Primary );
-  if ( verts->size() != 1 ) return StatusCode::SUCCESS;
-  LHCb::RecVertex::Container::const_iterator iv = verts->begin();
-
-  const LHCb::RecVertex vtx = **iv;
-
-  makeJets( input_, vtx, jets_ ).ignore();
-
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::SeedFinder::makeJets( const IJetMaker::Input& input_, const LHCb::RecVertex& RecVert_,
-                                       IJetMaker::Jets& jets_ ) const {
-
-  const LHCb::RecVertex::Container* verts = get<LHCb::RecVertex::Container>( LHCb::RecVertexLocation::Primary );
-  LHCb::RecVertex::Container::const_iterator iv;
-  LHCb::VertexBase*                          RecVert = RecVert_.clone();
-
-  std::vector<LHCb::VertexBase*> PVs;
-
-  for ( iv = verts->begin(); iv != verts->end(); iv++ )
-    if ( ( *iv )->position() != RecVert->position() ) PVs.push_back( ( *iv )->clone() );
-
-  IJetMaker::Jets Seeds;
-  IJetMaker::Jets SeedsPurged;
-
-  double       ipl, chi2l;
-  StatusCode   sc;
-  LHCb::Vertex vtx, vseedbest;
-  double       dca12, dcae12;
-  // Kshort Mass
-  const double MK0 = 497.7;
-
-  std::vector<Gaudi::XYZVector> Slopes_flag;
-
-  LHCb::Particle::ConstVector PartIPK0Sub;
-  LHCb::Particle::ConstVector PartIP;
-  LHCb::Particle::ConstVector all;
-  LHCb::Particle::ConstVector KsDau;
-
-  double tof = 0, tofe = 0;
-
-  int testLiHi    = 0;
-  int testClone   = 0;
-  int testLong    = 0;
-  int testCharged = 0;
-
-  // Get the default geometry FIXME, use functional framework
-  auto lhcb = getDet<IDetectorElement>( m_standardGeometry_address );
-  if ( !lhcb ) { throw GaudiException( "Could not load geometry", name(), StatusCode::FAILURE ); }
-  auto& geometry = *lhcb->geometry();
-
-  //----------------------------------------//
-  // test the particles                     //
-  //----------------------------------------//
-
-  for ( LHCb::Particle::ConstVector::const_iterator ip = input_.begin(); input_.end() != ip; ++ip ) {
-    const LHCb::Particle* p = *ip;
-    if ( 0 == p ) {
-      Warning( "Invalid input particle" ).ignore();
-      continue;
-    }
-    const LHCb::ProtoParticle* myProto = p->proto();
-    if ( myProto != NULL ) {
-      const LHCb::Track* trk = myProto->track();
-      if ( trk != NULL ) {
-        if ( trk->flags() == 1 || trk->flags() == 4 ) continue;
-        // == 1 : backward, == 4 clone
-        double CloneDist = trk->info( LHCb::Track::AdditionalInfo::CloneDist, 9999. );
-        double TrkLi     = trk->likelihood();
-        double GhostProb = trk->ghostProbability();
-        double LongTrk   = static_cast<int>( trk->type() );
-        if ( msgLevel( MSG::VERBOSE ) ) {
-          verbose() << "addinfo Likelihood = " << TrkLi << endmsg;
-          verbose() << "addinfo CloneDist  = " << CloneDist << endmsg;
-          verbose() << "addinfo GhostProb  = " << GhostProb << endmsg;
-          verbose() << "addinfo Longb      = " << LongTrk << endmsg;
-          verbose() << "p Trk   = " << trk->momentum() / Gaudi::Units::GeV << endmsg;
-        }
-        if ( CloneDist < 9999. ) testClone++;
-        if ( TrkLi < -60. ) testLiHi++;
-        if ( LongTrk == 3 ) testLong++;
-        //----------------------------------------//
-        // discard clones and Ghost               //
-        //----------------------------------------//
-        if ( CloneDist < 9999. ) continue;
-        if ( TrkLi < -60. ) continue;
-      }
-    }
-
-    bool m_FilterPart = true;
-    //----------------------------------------//
-    // check if 1 particle is not twice on    //
-    // the TES with the slopes                //
-    //----------------------------------------//
-    bool flag_same = false;
-    if ( m_FilterPart ) {
-      if ( Slopes_flag.size() != 0 ) {
-        for ( int k = 0; k < (int)Slopes_flag.size(); k++ ) {
-          if ( Slopes_flag.at( k ) == p->slopes() ) {
-            flag_same = true;
-            if ( msgLevel( MSG::VERBOSE ) )
-              verbose() << "same slopes !!  s1: " << Slopes_flag.at( k ) << "   s2: " << p->slopes() << endmsg;
-            break;
-          }
-        }
-      }
-      if ( !flag_same ) {
-        Slopes_flag.push_back( p->slopes() );
-      } else {
-        continue;
-      }
-    }
-
-    //----------------------------------------//
-    // save all the part that arrived here    //
-    // as the global container                //
-    //----------------------------------------//
-    all.push_back( p );
-
-    if ( p->charge() == 0 ) continue;
-    testCharged++;
-    if ( p->proto() == NULL ) continue;
-    if ( p->proto()->track() == NULL ) continue;
-    if ( p->proto()->track()->type() != LHCb::Track::Types::Long ) continue;
-    if ( p->proto()->track()->chi2PerDoF() > m_TrkChi2DoF ) continue;
-
-    sc = m_dist->distance( p, RecVert, ipl, chi2l, geometry );
-
-    if ( p->p() < m_PTrackMin ) continue;
-    if ( p->pt() < m_PtTrackMin ) continue;
-    if ( ipl < m_IPmin ) continue;
-    if ( sqrt( chi2l ) < m_Signif ) continue;
-
-    //----------------------------------------//
-    // save all the charge, with a good Pt    //
-    // and a good IP/IPE as the input         //
-    // particles for the Cone Jet Algo        //
-    //----------------------------------------//
-    PartIP.push_back( p );
-  }
-
-  if ( m_PVveto ) {
-    for ( iv = verts->begin(); iv != verts->end(); ++iv ) { RemoveTracks( PartIP, **iv ); }
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << "nb of ghost (LiH)             : " << testLiHi << endmsg;
-    debug() << "nb of clone                   : " << testClone << endmsg;
-    debug() << "nb of long                    : " << testLong << endmsg;
-    debug() << "nb of charged                 : " << testCharged << endmsg;
-    debug() << "nb of 'photon'                : " << (int)all.size() - double( testCharged ) << endmsg;
-    debug() << "Particle ALL size             : " << input_.size() << endmsg;
-    debug() << "Particle ALL size (JetCone)   : " << all.size() << endmsg;
-    debug() << "Particle INPUT for JET        : " << PartIP.size() << endmsg;
-  }
-
-  int cntK0 = 0;
-
-  //=============================================================================
-  // COMBINEPIPIMINK0: GET RIF OF K0S
-  //=============================================================================
-  for ( LHCb::Particle::ConstVector::const_iterator ip = PartIP.begin(); PartIP.end() != ip; ++ip ) {
-    const LHCb::Particle* p     = *ip;
-    bool                  testK = false;
-
-    for ( LHCb::Particle::ConstVector::const_iterator kp = KsDau.begin(); KsDau.end() != kp; ++kp )
-      if ( *ip == *kp ) {
-        testK = true;
-        break;
-      }
-
-    if ( !testK )
-      for ( LHCb::Particle::ConstVector::const_iterator ip2 = ip + 1; PartIP.end() != ip2; ++ip2 ) {
-        const LHCb::Particle* p2 = *ip2;
-
-        sc = m_dist->distance( ( p ), ( p2 ), dca12, dcae12, geometry );
-        if ( !sc ) { warning() << "can't mesure the dist " << endmsg; }
-        if ( dca12 > m_DtrakMax ) continue; // dca too large bwt the tracks
-
-        Gaudi::LorentzVector sum = ( p )->momentum() + ( p2 )->momentum();
-
-        //=============================================================================
-        // COMBINEPIPIMINK0: GET RIF OF K0S
-        //=============================================================================
-        if ( ( p )->particleID().abspid() == 211 && ( p2 )->particleID().abspid() == 211 &&
-             ( ( p )->charge() ) * ( ( p2 )->charge() ) < 0 )
-          if ( fabs( sum.M() - MK0 ) < m_DMK0 ) {
-            cntK0++;
-            testK = true;
-
-            KsDau.push_back( p );
-            KsDau.push_back( p2 );
-          }
-      }
-
-    if ( testK ) continue;
-    PartIPK0Sub.push_back( p );
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << "nb K0                         : " << cntK0 << endmsg;
-    debug() << "Particle INPUT for JET no K0  : " << PartIPK0Sub.size() << endmsg;
-  }
-
-  if ( PartIPK0Sub.size() < 2 ) { return Warning( "Not enough good part for seeding", StatusCode::SUCCESS ); }
-
-  Gaudi::XYZPoint      BL_P = Gaudi::XYZPoint( 0, 0, 0 );
-  Gaudi::LorentzVector BL_M = Gaudi::LorentzVector( 0, 0, 1, 0 );
-
-  if ( exist<LHCb::Particle::Range>( "/Event/BeamLine" ) ) {
-    const LHCb::Particle::Range BL  = get<LHCb::Particle::Range>( "/Event/BeamLine" );
-    const LHCb::Particle*       tmp = *( BL.begin() );
-    BL_P                            = Gaudi::XYZPoint( tmp->referencePoint() );
-    BL_M                            = Gaudi::LorentzVector( tmp->momentum() );
-    //   m_BeamLine->setMomentum( tmp->momentum() );
-    if ( msgLevel( MSG::DEBUG ) ) debug() << "Beam line position " << BL_P << " direction " << BL_M << endmsg;
-  } else {
-    if ( msgLevel( MSG::DEBUG ) )
-      debug() << "No Beam line found at "
-              << "/Event/BeamLine" << endmsg;
-
-    BL_P = Gaudi::XYZPoint( RecVert->position() );
-
-    if ( msgLevel( MSG::DEBUG ) ) debug() << "Beam line position " << BL_P << " direction " << BL_M << endmsg;
-  }
-
-  // COMBIN PART
-
-  LHCb::Particle::ConstVector::const_iterator jp, kp, lp;
-  for ( jp = PartIPK0Sub.begin(); jp != PartIPK0Sub.end(); jp++ ) {
-    for ( kp = jp + 1; kp != PartIPK0Sub.end(); kp++ ) {
-
-      sc = m_dist->distance( ( *jp ), ( *kp ), dca12, dcae12, geometry );
-      if ( !sc ) { warning() << "can't mesure the dist " << endmsg; }
-      if ( dca12 > m_DtrakMax ) continue; // dca too large bwt the tracks
-
-      Gaudi::LorentzVector sum = ( *jp )->momentum() + ( *kp )->momentum();
-
-      if ( m_Triplets ) {
-
-        // add Try 3-tracks Seed otpion
-        for ( lp = ( kp + 1 ); lp != PartIPK0Sub.end(); lp++ ) {
-
-          double dca13, dcae13;
-          m_dist->distance( ( *jp ), ( *lp ), dca13, dcae13, geometry ).ignore();
-          if ( dca13 > m_DtrakMax ) continue; // dca too large btw the trks
-
-          double dca23, dcae23;
-          m_dist->distance( ( *lp ), ( *kp ), dca23, dcae23, geometry ).ignore();
-          if ( dca23 > m_DtrakMax ) continue; // dca too large btw the trks
-
-          StatusCode scvtx = m_fitter->fit( vtx, **jp, **kp, **lp, geometry );
-          if ( scvtx.isFailure() ) {
-            warning() << "VTX Fit failed" << endmsg;
-            continue;
-          }
-
-          if ( vtx.chi2PerDoF() > m_SeedsMaxChi2DoF ) continue;
-          // cut on chi2
-          double mydz = -1;
-          if ( scvtx ) mydz = vtx.position().z() - RecVert->position().z();
-          if ( mydz < 0 ) continue;
-          // the vtx is before the PV
-
-          // intersection of the beam line with the XY plane,
-          // find the lambda parameter of the line.
-          double lambda = ( vtx.position().z() - BL_P.z() ) / BL_M.z();
-
-          // find x and y of intersection point
-          double x = BL_P.x() + lambda * BL_M.x();
-          double y = BL_P.y() + lambda * BL_M.y();
-
-          x -= vtx.position().x();
-          y -= vtx.position().y();
-
-          double dr = sqrt( x * x + y * y );
-          if ( dr < m_DRmin || dr > m_DRmax ) continue;
-
-          // the vtx is too close or to far from the beam direction
-
-          //---------------------------
-          // Seed level cuts -----------
-          //---------------------------
-          LHCb::VertexBase* PPvtx2 = vtx.clone();
-          m_dist->distance( PPvtx2, RecVert, tof, tofe ).ignore();
-          if ( tof < m_TseedVtxMin || tof > m_TseedVtxMax ) continue;
-          // the vtx is too close or to far from the PV (~time of flight)
-          bool PVveto = false;
-          if ( m_PVveto )
-            for ( std::vector<LHCb::VertexBase*>::iterator pv = PVs.begin(); pv != PVs.end(); pv++ ) {
-              m_dist->distance( PPvtx2, *pv, tof, tofe ).ignore();
-              if ( tof < m_TseedVtxMinAnyPV ) {
-                PVveto = true;
-                break;
-              }
-            }
-          if ( PVveto ) continue;
-
-          Gaudi::LorentzVector sum2 = sum + ( *lp )->momentum();
-          if ( sum2.Pt() < m_PtSeedsMin ) continue;
-          // Pt too soft
-
-          LHCb::Particle::ConstVector daughters2;
-          LHCb::Particle              pSeed2;
-          LHCb::Vertex                vSeed2;
-
-          daughters2.push_back( *lp );
-          daughters2.push_back( *kp );
-          daughters2.push_back( *jp );
-          pSeed2.setParticleID( LHCb::ParticleID( m_seedID ) );
-          pSeed2.setReferencePoint( RecVert->position() );
-          pSeed2.setMomentum( sum2 );
-
-          StatusCode sc = m_combiner->combine( daughters2, pSeed2, vSeed2, geometry );
-
-          pSeed2.setEndVertex( vtx.clone() );
-          // save the trks as the daugthers
-          // remove
-          if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-          Seeds.push_back( pSeed2.clone() );
-          // remove lp to test another part
-
-        } // end loop lp
-      }
-
-      // 2-seed
-      LHCb::Particle              pSeed;
-      LHCb::Particle::ConstVector daughters;
-      LHCb::Vertex                vSeed;
-
-      StatusCode scvtx = m_fitter->fit( vtx, **jp, **kp, geometry );
-
-      if ( scvtx.isFailure() ) {
-        warning() << "VTX Fit failed" << endmsg;
-        continue;
-      }
-
-      if ( vtx.chi2PerDoF() > m_SeedsMaxChi2DoF ) continue;
-
-      double mydz = -1;
-      if ( scvtx ) mydz = vtx.position().z() - RecVert->position().z();
-      if ( mydz < 0 ) continue;
-      // the vtx is before the PV
-
-      // Gaudi::XYZPoint  dv =   Gaudi::XYZPoint(vtx.position() - m_BeamLine->referencePoint().position());
-
-      // intersection of the beam line with the XY plane,
-      // find the lambda parameter of the line.
-      double lambda = ( vtx.position().z() - BL_P.z() ) / BL_M.z();
-
-      // find x and y of intersection point
-      double x = BL_P.x() + lambda * BL_M.x();
-      double y = BL_P.y() + lambda * BL_M.y();
-
-      x -= vtx.position().x();
-      y -= vtx.position().y();
-
-      double dr = sqrt( x * x + y * y );
-      if ( dr < m_DRmin || dr > m_DRmax ) continue;
-      // the vtx is too close or to far from the beam direction
-
-      //---------------------------
-      // Seed level cuts -----------
-      //---------------------------
-      LHCb::VertexBase* PPvtx2 = vtx.clone();
-      m_dist->distance( PPvtx2, RecVert, tof, tofe ).ignore();
-      if ( tof < m_TseedVtxMin || tof > m_TseedVtxMax ) continue;
-      // the vtx is too close or to far from the PV (~time of flight)
-
-      bool PVveto = false;
-      if ( m_PVveto )
-        for ( std::vector<LHCb::VertexBase*>::iterator pv = PVs.begin(); pv != PVs.end(); pv++ ) {
-          m_dist->distance( PPvtx2, *pv, tof, tofe ).ignore();
-          if ( tof < m_TseedVtxMinAnyPV ) {
-            PVveto = true;
-            break;
-          }
-        }
-      if ( PVveto ) continue;
-
-      if ( sum.Pt() < m_PtSeedsMin ) continue;
-      // Pt too soft
-
-      daughters.push_back( *jp );
-      daughters.push_back( *kp );
-
-      pSeed.setParticleID( LHCb::ParticleID( m_seedID ) );
-      pSeed.setReferencePoint( RecVert->position() );
-      pSeed.setMomentum( sum );
-      StatusCode sc = m_combiner->combine( daughters, pSeed, vSeed, geometry );
-      // save the trks as the daugthers
-      pSeed.setEndVertex( vtx.clone() );
-      if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-      Seeds.push_back( pSeed.clone() );
-
-    } // end loop kp
-  }   // end loop jp
-
-  if ( Seeds.empty() ) {
-    Warning( "No Seeds from LoKi::SeedFinder" ).ignore();
-    return StatusCode::SUCCESS;
-  }
-
-  //=============================================================================
-  // SORT THE SEEDS
-  //=============================================================================
-
-  if ( m_sort == 1 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortPt() );
-  else if ( m_sort == 2 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortE() );
-  else if ( m_sort == 3 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortEta() );
-  else if ( m_sort == 4 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortDauPt() );
-  else if ( m_sort == 5 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortCHi2NDoF() );
-  else if ( m_sort == 6 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortDirAng() );
-  else if ( m_sort == 7 )
-    std::stable_sort( Seeds.begin(), Seeds.end(), sortCOMBO() );
-
-  // remove seed who share a track with a higher racked seed
-  int myj = 0;
-
-  for ( IJetMaker::Jets::iterator ijet = Seeds.begin(); Seeds.end() != ijet; ++ijet ) {
-    myj++;
-
-    bool            samedau = false;
-    LHCb::Particle* Seed1   = *ijet;
-    if ( Seed1->daughters().size() < 2 ) continue;
-
-    const LHCb::Particle* dau11( 0 );
-    const LHCb::Particle* dau12( 0 );
-    const LHCb::Particle* dau13( 0 );
-
-    dau11 = Seed1->daughters().at( 0 ).target();
-    dau12 = Seed1->daughters().at( 1 ).target();
-
-    if ( msgLevel( MSG::VERBOSE ) ) {
-      verbose() << "Seeds  " << myj << "| nb of combin Seeds:  " << Seed1->weight()
-                << "  nb part in the jet:  " << Seed1->daughtersVector().size() << "  Pt:  " << Seed1->pt() << endmsg;
-      verbose() << "        | m  : " << Seed1->momentum() << endmsg;
-      verbose() << "        | eta: " << Seed1->momentum().eta() << "  / phi: " << Seed1->momentum().phi() << endmsg;
-      verbose() << "        |dau1: " << dau11->pt() << endmsg;
-      verbose() << "        |dau2: " << dau12->pt() << endmsg;
-    }
-
-    if ( Seed1->daughters().size() > 2 ) {
-      dau13 = Seed1->daughters().at( 2 ).target();
-      if ( msgLevel( MSG::VERBOSE ) ) verbose() << "        |dau3: " << dau13->pt() << endmsg;
-    }
-
-    Gaudi::XYZVector seedd = Gaudi::XYZVector( Gaudi::XYZPoint( Seed1->endVertex()->position() ) -
-                                               Gaudi::XYZPoint( Seed1->referencePoint() ) );
-
-    double dotprod = seedd.Unit().Dot( Seed1->momentum().Vect().Unit() );
-
-    double a = std::fabs( std::acos( dotprod ) );
-
-    double combo1 = 1000 * 1000 * ( a * Seed1->endVertex()->chi2PerDoF() ) /
-                    ( Seed1->daughtersVector().size() * Seed1->pt() * Seed1->pt() );
-
-    if ( msgLevel( MSG::VERBOSE ) ) {
-      verbose() << "        |PAng: " << a << endmsg;
-      verbose() << "        |Chi2: " << Seed1->endVertex()->chi2() << endmsg;
-      verbose() << "        |nDoF: " << Seed1->endVertex()->nDoF() << endmsg;
-      verbose() << "        |C/N : " << Seed1->endVertex()->chi2PerDoF() << endmsg;
-      verbose() << "        |COMB: " << combo1 << endmsg;
-    }
-
-    for ( IJetMaker::Jets::iterator ijet2 = SeedsPurged.begin(); SeedsPurged.end() != ijet2; ++ijet2 ) {
-
-      LHCb::Particle* Seed2 = *ijet2;
-
-      const LHCb::Particle* dau21( 0 );
-      const LHCb::Particle* dau22( 0 );
-      const LHCb::Particle* dau23( 0 );
-
-      dau21 = Seed2->daughters().at( 0 ).target();
-      dau22 = Seed2->daughters().at( 1 ).target();
-      if ( Seed2->daughters().size() > 2 ) dau23 = Seed2->daughters().at( 2 ).target();
-
-      //     double R = getDeltaR(Seed1, Seed2);
-
-      //     if(R < 0.5){//start the merging process
-
-      if ( ( dau11 == dau21 ) || ( dau12 == dau22 ) || ( dau11 == dau22 ) || ( dau12 == dau21 ) ) {
-        samedau = true;
-        break;
-      }
-      if ( Seed1->daughters().size() > 2 )
-        if ( ( dau13 == dau21 ) || ( dau13 == dau22 ) ) {
-          samedau = true;
-          break;
-        }
-      if ( Seed2->daughters().size() > 2 )
-        if ( ( dau11 == dau23 ) || ( dau12 == dau23 ) ) {
-          samedau = true;
-          break;
-        }
-      if ( Seed2->daughters().size() > 2 && Seed1->daughters().size() > 2 )
-        if ( dau13 == dau23 ) {
-          samedau = true;
-          break;
-        }
-
-      //     }
-    }
-    if ( samedau ) continue;
-
-    SeedsPurged.push_back( Seed1 );
-  }
-
-  myj = 0;
-  for ( IJetMaker::Jets::iterator ijet = SeedsPurged.begin(); SeedsPurged.end() != ijet; ++ijet ) {
-    LHCb::Particle* pJet = *ijet;
-
-    myj++;
-
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "SeedsP " << myj << "| nb of combin Seeds:  " << pJet->weight()
-              << "  nb part in the jet:  " << pJet->daughtersVector().size() << "  Pt:  " << pJet->pt() << endmsg;
-      debug() << "        | m  : " << pJet->momentum() << endmsg;
-      debug() << "        | eta: " << pJet->momentum().eta() << "  / phi: " << pJet->momentum().phi() << endmsg;
-    }
-
-    const LHCb::Particle* dau11( 0 );
-    const LHCb::Particle* dau12( 0 );
-    dau11 = pJet->daughters().at( 0 ).target();
-    dau12 = pJet->daughters().at( 1 ).target();
-
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "        |dau1: " << dau11->pt() << endmsg;
-      debug() << "        |dau2: " << dau12->pt() << endmsg;
-    }
-
-    if ( pJet->daughters().size() > 2 ) {
-      const LHCb::Particle* dau13( 0 );
-      dau13 = pJet->daughters().at( 2 ).target();
-      if ( msgLevel( MSG::DEBUG ) ) debug() << "        |dau3: " << dau13->pt() << endmsg;
-    }
-
-    Gaudi::XYZVector seedd = Gaudi::XYZVector( Gaudi::XYZPoint( pJet->endVertex()->position() ) -
-                                               Gaudi::XYZPoint( pJet->referencePoint() ) );
-
-    double dotprod = seedd.Unit().Dot( pJet->momentum().Vect().Unit() );
-
-    double a = std::fabs( std::acos( dotprod ) );
-
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "        |dirA: " << a << endmsg;
-      debug() << "        |Chi2: " << pJet->endVertex()->chi2() << endmsg;
-      debug() << "        |nDoF: " << pJet->endVertex()->nDoF() << endmsg;
-      debug() << "        |C/N : " << pJet->endVertex()->chi2PerDoF() << endmsg;
-    }
-
-    double combo1 = 1000 * 1000 * ( a * pJet->endVertex()->chi2PerDoF() ) /
-                    ( pJet->daughtersVector().size() * pJet->pt() * pJet->pt() );
-
-    if ( msgLevel( MSG::DEBUG ) ) debug() << "        |COMB: " << combo1 << endmsg;
-  }
-
-  if ( msgLevel( MSG::INFO ) ) { m_nSeeds += SeedsPurged.size(); }
-
-  jets_ = SeedsPurged;
-
-  return StatusCode::SUCCESS;
-}
-
-//=============================================================================
-// Remove trks form a PV
-//=============================================================================
-
-void LoKi::SeedFinder::RemoveTracks( LHCb::Particle::ConstVector& particles, const LHCb::RecVertex PV ) const {
-
-  // Remove all tracks from the PV
-  LHCb::Particle::ConstVector                 tmp;
-  SmartRefVector<LHCb::Track>::const_iterator iPV    = PV.tracks().begin();
-  int                                         endkey = PV.tracks().back()->key();
-
-  for ( LHCb::Particle::ConstVector::const_iterator i = particles.begin(); i != particles.end(); ++i ) {
-    if ( ( *i )->proto()->track() == NULL ) continue;
-    const LHCb::Track* tk = ( *i )->proto()->track();
-
-    while ( ( ( *iPV )->key() < tk->key() ) && ( *iPV )->key() != endkey ) { iPV++; }
-    if ( ( *iPV )->key() == tk->key() ) {
-      if ( ( *iPV )->key() != endkey ) iPV++;
-      continue;
-    }
-    tmp.push_back( *i );
-  }
-  // Copy back tmp to particles
-  particles = tmp;
-}
-
-//=============================================================================
-// GETDELTAR: CALCULATES DELTAR
-//=============================================================================
-double LoKi::SeedFinder::getDeltaR( LHCb::Particle* p1, LHCb::Particle* p2 ) const {
-
-  const double PI = 3.14159265;
-  double       R, Dphi, phi1, phi2, e1, e2;
-  phi1 = p1->momentum().phi();
-  phi2 = p2->momentum().phi();
-  e1   = p1->momentum().eta();
-  e2   = p2->momentum().eta();
-  Dphi = fabs( phi1 - phi2 );
-  if ( Dphi > PI ) { Dphi = 2 * PI - Dphi; };
-  R = sqrt( Dphi * Dphi + ( e1 - e2 ) * ( e1 - e2 ) );
-  return R;
-}
-
-DECLARE_COMPONENT( LoKi::SeedFinder )
diff --git a/Phys/LoKiJets/src/LoKiVVSeedFinder.cpp b/Phys/LoKiJets/src/LoKiVVSeedFinder.cpp
deleted file mode 100644
index a92be7e96..000000000
--- a/Phys/LoKiJets/src/LoKiVVSeedFinder.cpp
+++ /dev/null
@@ -1,1118 +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.                                       *
-\*****************************************************************************/
-
-#include "LoKi/Geometry.h"
-#include "LoKi/ILoKiSvc.h"
-#include "LoKi/Kinematics.h"
-
-#include "Kernel/IDistanceCalculator.h"
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-#include "Kernel/IVertexFit.h"
-
-#include "Event/Particle.h"
-#include "Event/RecVertex.h"
-#include "Kernel/IParticleTransporter.h"
-#include "LHCbMath/LHCbMath.h"
-
-#include "DetDesc/IDetectorElement.h"
-
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/ITupleTool.h"
-
-namespace LoKi {
-
-  /** @class VVSeedFinder
-   *
-   *  The VVSeedFinder (EPFL) implementaion of interface IJetMaker
-   *  @see IJetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Cedric POTTERAT  cedric.potterat@cern.ch
-   *  @date   2011-01-31
-   */
-  class VVSeedFinder : public virtual IJetMaker, public GaudiTool {
-  public:
-    /** The main method: seed-finding procedure
-     *
-     *  @code
-     *
-     *  // get the tool
-     *  const IJetMaker* seedMaker = tool<IJetMaker> ( .... ) ;
-     *
-     *  // input particles
-     *  IJetMaker::Inputs input = ...
-     *  // 1)
-     *  // const Particles* particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles->begin() , particles->end() ) ;
-     *  // 2)
-     *  // LHCb::Particle::ConstVector particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *  // 3)
-     *  // LoKi::Range particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *
-     *  // placeholder for "output" jets
-     *  IJetMaker::Jets   seeds ;
-     *
-     *  // find the jets!
-     *  StatusCode sc = seedMaker -> makeJets ( input , seeds ) ;
-     *
-     *  // make  a loop over jets:
-     *  for ( IJetMaker::Jets::const_iterator iSeed = seeds.begin() ;
-     *        seeds.end() != iSeed ; ++iSeed )
-     *    {
-     *        // get the jet
-     *        LHCb::Particle* seed = *iSeed ;
-     *    }
-     *
-     *  @endcode
-     *
-     *  @attention It is a responsibility of users (e.g. the algorithm)
-     *             to take care about the ownership of jets *AND* their
-     *             vertices). The tool is not intended to do it!
-     *
-     *  @param input contaainer of input particles
-     *  @param seeds  container of  output seeds (of type Particle)
-     *  @return status code
-     */
-    StatusCode makeJets( const IJetMaker::Input& input, IJetMaker::Jets& jets ) const override;
-    StatusCode makeJets( const IJetMaker::Input& input, const LHCb::RecVertex& vtx,
-                         IJetMaker::Jets& jets ) const override;
-
-    /** the standard constructor
-     *
-     *  @todo The default values for configuration parameters
-     *        (especially for R-parameter) need to be adjusted
-     *        according to EPFL studies.
-     *        @link http://cdsweb.cern.ch/record/1211038/files/LHCb-INT-2009-023.pdf LHCb-INT-2009-023 - Bay/Potterat
-     * @endlink
-     *        @link http://cdsweb.cern.ch/record/1266883/files/CERN-THESIS-2010-074.pdf CERN_THESIS-2010-074 - Potterat
-     * @endlink
-     *
-     */
-    VVSeedFinder( const std::string& type, const std::string& name, const IInterface* parent )
-        : GaudiTool( type, name, parent )
-        //
-        , m_seedID( 20098 )
-        //
-        , m_r( 0.15 )
-        //
-        , m_sort( 4 )
-        //
-        , m_combinerName( "MomentumCombiner" )
-        , m_combiner( 0 )
-        , m_dist( 0 )
-        , m_fitter( 0 )
-        , m_PtTrackMin( 600.0 )
-        , m_PTrackMin( 1000.0 )
-        , m_IPmin( 0.1 )
-        , m_Signif( 2.5 )
-        , m_DMK0( 10.0 )
-        , m_TseedVtxMin( 1.0 )
-        , m_TseedVtxMax( 200.0 )
-        , m_TseedVtxMinAnyPV( 0.1 )
-        , m_DtrakMax( 0.5 )
-        , m_PtSeedsMin( 1000. )
-        , m_PtMergedSeedsMin( 1000. )
-        , m_SeedsMaxChi2DoF( 50. )
-        , m_Triplets( false )
-        , m_DRmin( 0.1 )
-        , m_DRmax( 10. )
-        , m_TrkChi2DoF( 2.5 )
-        , m_DeltaRSeeds( 0.5 )
-        , m_preFilter( true )
-        , m_jetFilter( true )
-        , m_PVveto( true ) {
-      //
-      declareInterface<IJetMaker>( this );
-      //
-      declareProperty( "SeedID", m_seedID, "Particle ID for the Seed" );
-      declareProperty( "SeedRParameter", m_r );
-      declareProperty( "Sort", m_sort,
-                       "Sorting Criteria for jets [0:none,1:pt,2:E,3:eta, 4:ProtoSeed the Dau then Pt, default:4]" );
-      // define momentum combiner
-      declareProperty( "ParticleCombiner", m_combinerName );
-      declareProperty( "SeedPtTrackMin", m_PtTrackMin, "pt of the track used for Vertexing" );
-      declareProperty( "SeedPTrackMin", m_PTrackMin, "p of the track used for Vertexing" );
-      declareProperty( "SeedIPmin", m_IPmin, "ip of the track used for Vertexing" );
-      declareProperty( "SeedSignif", m_Signif, "signif oft he track used for Vertexing" );
-      declareProperty( "SeedDMK0", m_DMK0, "mass window for Ks" );
-      declareProperty( "SeedTseedVtxMin", m_TseedVtxMin, "min distance btw PV and the  vtx" );
-      declareProperty( "SeedTseedVtxMax", m_TseedVtxMax, "max distance btw PV and the  vtx" );
-      declareProperty( "SeedTseedVtxMinAnyPV", m_TseedVtxMinAnyPV, "min distance btw any PV and the  vtx" );
-
-      declareProperty( "SeedDtrakMax", m_DtrakMax, "dca window for vtx" );
-      declareProperty( "SeedPtSeedsMin", m_PtSeedsMin, "min pt of the seeds" );
-      declareProperty( "SeedVtxMaxChi2PerDoF", m_SeedsMaxChi2DoF, "max chi2 per dof for the vtx fit of the seed" );
-      declareProperty( "PtMergedSeedsMin", m_PtMergedSeedsMin, "min pt of the merged seeds" );
-
-      declareProperty( "SeedTriplets", m_Triplets, "built Vtx with 3 tracks" );
-      declareProperty( "SeedDRmin", m_DRmin, "min positon in R of the vtx" );
-      declareProperty( "SeedDRmax", m_DRmax, "max positon in R of the vtx" );
-      declareProperty( "SeedTrkChi2PerDoF", m_TrkChi2DoF, "max chi2PerDoF for the track used for the vtx" );
-      declareProperty( "SeedsDeltaR", m_DeltaRSeeds, "min DR btw 2 seeds otherwise:merge" );
-      declareProperty( "SeedpreFilter", m_preFilter, "pre filter the protoseeds" );
-      declareProperty( "SeedFilter", m_jetFilter, "filter the protoseeds" );
-      declareProperty( "vetoPV", m_PVveto,
-                       "exclude vertex near to any PV with distance fixe by 'SeedTseedVtxMinAnyPV' and exclude the trk "
-                       "associated to any PV to construct a secondary vtx" );
-    }
-    /** standard initialization of the tool
-     *  @return status code
-     */
-    StatusCode initialize() override;
-
-  protected:
-    /// make the detailed check of all parameters
-
-    inline StatusCode check() const {
-      if ( 0 > m_ptmin ) { Warning( "PtMin is negative " ).ignore(); }
-      return StatusCode::SUCCESS;
-    }
-
-    Gaudi::Property<std::string> m_standardGeometry_address{this, "StandardGeometryTop", "/dd/Structure/LHCb"};
-
-    int to_user_index( const int index ) const { return index + 10000; }
-    int from_user_index( const int index ) const { return index - 10000; }
-    // proposed jet ID
-    int m_seedID; ///< proposed jet ID
-    // R-parameter
-    double m_r; ///< R-parameters
-    // ptMin-parameter
-    double m_ptmin; ///< pt-min parameter
-    // jet sorting criteria
-    int m_sort; ///< jet sorting criteria
-    // combiner
-    std::string                m_combinerName;
-    mutable IParticleCombiner* m_combiner; ///< combiner to be used
-
-    IDistanceCalculator* m_dist;
-    IVertexFit*          m_fitter;
-
-    double m_Rmax;
-    double m_PtTrackMin;
-    double m_PTrackMin;
-    double m_IPmin;
-    double m_Signif;
-    double m_DMK0;
-    double m_TseedVtxMin;
-    double m_TseedVtxMax;
-    double m_TseedVtxMinAnyPV;
-    double m_DtrakMax;
-    double m_PtSeedsMin;
-    double m_PtMergedSeedsMin;
-    double m_SeedsMaxChi2DoF;
-    bool   m_Triplets;
-    double m_DRmin;
-    double m_DRmax;
-    double m_TrkChi2DoF;
-    double m_DeltaRSeeds;
-    bool   m_preFilter;
-    bool   m_jetFilter;
-    bool   m_PVveto;
-
-    IJetMaker::Jets JetCone( double const& Rmax, IJetMaker::Jets& seeds, IJetMaker::Input const& inputs,
-                             IGeometryInfo const& geometry ) const;
-
-    IJetMaker::Jets FilterProtoJets( const double& DeltaRSeeds, IJetMaker::Jets& ProtoJets ) const;
-
-    double getDeltaR( LHCb::Particle* p1, LHCb::Particle* p2 ) const;
-
-    void RemoveTracks( LHCb::Particle::ConstVector& particles, const LHCb::RecVertex PV ) const;
-
-  private:
-    mutable Gaudi::Accumulators::StatCounter<> m_nSeeds{this, "#seeds"};
-  };
-
-} // namespace LoKi
-
-class sortDauPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    if ( obj1->weight() == obj2->weight() )
-      if ( obj1->daughtersVector().size() == obj2->daughtersVector().size() )
-        return obj1->pt() > obj2->pt();
-      else
-        return obj1->daughtersVector().size() > obj2->daughtersVector().size();
-    else
-      return obj1->weight() > obj2->weight();
-  }
-};
-
-class sortE {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().E() > obj2->momentum().E();
-  }
-};
-
-class sortEta {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().Eta() > obj2->momentum().Eta();
-  }
-};
-
-class sortPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) { return obj1->pt() > obj2->pt(); }
-};
-
-/*  standard initialization of the tool
- *  @return status code
- */
-StatusCode LoKi::VVSeedFinder::initialize() {
-  StatusCode sc = GaudiTool::initialize();
-  if ( sc.isFailure() ) { return sc; }
-
-  svc<LoKi::ILoKiSvc>( "LoKiSvc", true );
-
-  m_dist = tool<IDistanceCalculator>( "LoKi::DistanceCalculator" );
-  if ( !m_dist ) {
-    err() << "Unable to Retrieve LoKi::DistanceCalculator" << endmsg;
-    return StatusCode::FAILURE;
-  }
-
-  m_combiner = tool<IParticleCombiner>( m_combinerName, this );
-  if ( !m_combiner ) {
-    err() << "Unable to Retrieve Default  ParticleCombiner" << endmsg;
-    return StatusCode::FAILURE;
-  }
-
-  m_fitter = tool<IVertexFit>( "OfflineVertexFitter" );
-  if ( !m_fitter ) {
-    err() << "Unable to Retrieve Default VertexFitter" << endmsg;
-    return StatusCode::FAILURE;
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << " ------------------------------------------------------ " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " |     \\  /\\  /                                       | " << endmsg;
-    debug() << " |      \\/  \\/SeedsFinder Tool for Phys Particles     | " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " |       \\  /                                         | " << endmsg;
-    debug() << " |        \\/       EPFLausanne - 2009-11              | " << endmsg;
-    debug() << " |         |        A. Bay & C. Potterat              | " << endmsg;
-    debug() << " |         |                                          | " << endmsg;
-    debug() << " |                                       _     _      | " << endmsg;
-    debug() << " |                                  |   |_||_||_      | " << endmsg;
-    debug() << " |                                  |__ |  | ||__     | " << endmsg;
-    debug() << " ------------------------------------------------------ " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " |                                                     " << endmsg;
-    debug() << " |   VVSeedsFinder parameters: " << endmsg;
-    debug() << " |   SeedID            " << m_seedID << endmsg;
-    debug() << " |   SeedTriplets      " << m_Triplets << endmsg;
-    debug() << " |   SeedRParameter    " << m_r << endmsg;
-    debug() << " |   PtTrackMin        " << m_PtTrackMin << endmsg;
-    debug() << " |   PTrackMin         " << m_PTrackMin << endmsg;
-    debug() << " |   SeedTrkChi2PerDoF " << m_TrkChi2DoF << endmsg;
-    debug() << " |   IPmin             " << m_IPmin << endmsg;
-    debug() << " |   Signif            " << m_Signif << endmsg;
-    debug() << " |   DMK0              " << m_DMK0 << endmsg;
-    debug() << " |   TseedVtxMin       " << m_TseedVtxMin << endmsg;
-    debug() << " |   TseedVtxMax       " << m_TseedVtxMax << endmsg;
-    debug() << " |   DtrakMax          " << m_DtrakMax << endmsg;
-    debug() << " |   DeltaRSeeds       " << m_DeltaRSeeds << endmsg;
-    debug() << " |   PtSeedsMin        " << m_PtSeedsMin << endmsg;
-    debug() << " |   PtMergedSeedsMin  " << m_PtMergedSeedsMin << endmsg;
-    debug() << " |                                                      " << endmsg;
-    debug() << " |                                                    | " << endmsg;
-    debug() << " ------------------------------------------------------ " << endmsg;
-  }
-
-  return StatusCode::SUCCESS;
-}
-// ===========================================================================
-// find seeds
-// ===========================================================================
-StatusCode LoKi::VVSeedFinder::makeJets( const IJetMaker::Input& input_, IJetMaker::Jets& jets_ ) const {
-
-  const LHCb::RecVertex::Container* verts = get<LHCb::RecVertex::Container>( LHCb::RecVertexLocation::Primary );
-  if ( verts->size() != 1 ) return StatusCode::SUCCESS;
-  LHCb::RecVertex::Container::const_iterator iv  = verts->begin();
-  const LHCb::RecVertex                      vtx = **iv;
-  makeJets( input_, vtx, jets_ ).ignore();
-  return StatusCode::SUCCESS;
-}
-
-StatusCode LoKi::VVSeedFinder::makeJets( const IJetMaker::Input& input_, const LHCb::RecVertex& RecVert_,
-                                         IJetMaker::Jets& jets_ ) const {
-
-  const LHCb::RecVertex::Container* verts = get<LHCb::RecVertex::Container>( LHCb::RecVertexLocation::Primary );
-  LHCb::RecVertex::Container::const_iterator iv;
-  LHCb::VertexBase*                          RecVert = RecVert_.clone();
-
-  std::vector<LHCb::VertexBase*> PVs;
-
-  for ( iv = verts->begin(); iv != verts->end(); iv++ )
-    if ( ( *iv )->position() != RecVert->position() ) PVs.push_back( ( *iv )->clone() );
-
-  IJetMaker::Jets Seeds;
-  double          ipl, chi2l;
-  StatusCode      sc;
-  LHCb::Vertex    vtx, vseedbest;
-  double          dca12, dcae12;
-  // Kshort Mass
-  const double MK0 = 497.7;
-
-  std::vector<Gaudi::XYZVector> Slopes_flag;
-
-  LHCb::Particle::ConstVector PartIPK0Sub;
-  LHCb::Particle::ConstVector PartIP;
-  LHCb::Particle::ConstVector all;
-  LHCb::Particle::ConstVector KsDau;
-
-  double tof = 0, tofe = 0;
-
-  int testLiHi    = 0;
-  int testClone   = 0;
-  int testLong    = 0;
-  int testCharged = 0;
-
-  // Get the default geometry FIXME, use functional framework
-  auto lhcb = getDet<IDetectorElement>( m_standardGeometry_address );
-  if ( !lhcb ) { throw GaudiException( "Could not load geometry", name(), StatusCode::FAILURE ); }
-  auto& geometry = *lhcb->geometry();
-
-  //----------------------------------------//
-  // test the particles                     //
-  //----------------------------------------//
-
-  for ( LHCb::Particle::ConstVector::const_iterator ip = input_.begin(); input_.end() != ip; ++ip ) {
-    const LHCb::Particle* p = *ip;
-    if ( 0 == p ) {
-      Warning( "Invalid input particle" ).ignore();
-      continue;
-    }
-    const LHCb::ProtoParticle* myProto = p->proto();
-    if ( myProto != NULL ) {
-      const LHCb::Track* trk = myProto->track();
-      if ( trk != NULL ) {
-        if ( trk->flags() == 1 || trk->flags() == 4 ) continue;
-        // == 1 : backward, == 4 clone
-        if ( trk->flags() == 1 ) continue;
-        double CloneDist = trk->info( LHCb::Track::AdditionalInfo::CloneDist, 9999. );
-        double TrkLi     = trk->likelihood();
-        double GhostProb = trk->ghostProbability();
-        double LongTrk   = static_cast<int>( trk->type() );
-        if ( msgLevel( MSG::VERBOSE ) ) {
-          verbose() << "addinfo Likelihood = " << TrkLi << endmsg;
-          verbose() << "addinfo CloneDist  = " << CloneDist << endmsg;
-          verbose() << "addinfo GhostProb  = " << GhostProb << endmsg;
-          verbose() << "addinfo Longb      = " << LongTrk << endmsg;
-          verbose() << "p Trk   = " << trk->momentum() / Gaudi::Units::GeV << endmsg;
-        }
-        if ( CloneDist < 9999. ) testClone++;
-        if ( TrkLi < -60. ) testLiHi++;
-        if ( LongTrk == 3 ) testLong++;
-        //----------------------------------------//
-        // discard clones and Ghost               //
-        //----------------------------------------//
-        if ( CloneDist < 9999. ) continue;
-        if ( TrkLi < -60. ) continue;
-      }
-    }
-
-    bool m_FilterPart = true;
-    //----------------------------------------//
-    // check if 1 particle is not twice on    //
-    // the TES with the slopes                //
-    //----------------------------------------//
-    bool flag_same = false;
-    if ( m_FilterPart ) {
-      if ( Slopes_flag.size() != 0 ) {
-        for ( int k = 0; k < (int)Slopes_flag.size(); k++ ) {
-          if ( Slopes_flag.at( k ) == p->slopes() ) {
-            flag_same = true;
-            if ( msgLevel( MSG::VERBOSE ) )
-              verbose() << "same slopes !!  s1: " << Slopes_flag.at( k ) << "   s2: " << p->slopes() << endmsg;
-            break;
-          }
-        }
-      }
-      if ( !flag_same ) {
-        Slopes_flag.push_back( p->slopes() );
-      } else {
-        continue;
-      }
-    }
-
-    //----------------------------------------//
-    // save all the part that arrived here    //
-    // as the global container                //
-    //----------------------------------------//
-    all.push_back( p );
-
-    if ( p->charge() == 0 ) continue;
-    testCharged++;
-    if ( p->proto() == NULL ) continue;
-    if ( p->proto()->track() == NULL ) continue;
-    if ( p->proto()->track()->type() != LHCb::Track::Types::Long ) continue;
-    if ( p->proto()->track()->chi2PerDoF() > m_TrkChi2DoF ) continue;
-
-    sc = m_dist->distance( p, RecVert, ipl, chi2l, geometry );
-
-    if ( p->p() < m_PTrackMin ) continue;
-    if ( p->pt() < m_PtTrackMin ) continue;
-    if ( ipl < m_IPmin ) continue;
-    if ( sqrt( chi2l ) < m_Signif ) continue;
-
-    //----------------------------------------//
-    // save all the charge, with a good Pt    //
-    // and a good IP/IPE as the input         //
-    // particles for the Cone Jet Algo        //
-    //----------------------------------------//
-
-    PartIP.push_back( p );
-  }
-
-  //----------------------------------------//
-  // discard the trk coming any VTX         //
-  //----------------------------------------//
-
-  if ( m_PVveto )
-    for ( iv = verts->begin(); iv != verts->end(); iv++ ) RemoveTracks( PartIP, **iv );
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << "nb of ghost (LiH)             : " << testLiHi << endmsg;
-    debug() << "nb of clone                   : " << testClone << endmsg;
-    debug() << "nb of long                    : " << testLong << endmsg;
-    debug() << "nb of charged                 : " << testCharged << endmsg;
-    debug() << "nb of 'photon'                : " << (int)all.size() - double( testCharged ) << endmsg;
-    debug() << "Particle ALL size             : " << input_.size() << endmsg;
-    debug() << "Particle ALL size (JetCone)   : " << all.size() << endmsg;
-    debug() << "Particle INPUT for JET        : " << PartIP.size() << endmsg;
-  }
-
-  int cntK0 = 0;
-
-  //=============================================================================
-  // COMBINEPIPIMINK0: GET RIF OF K0S
-  //=============================================================================
-  for ( LHCb::Particle::ConstVector::const_iterator ip = PartIP.begin(); PartIP.end() != ip; ++ip ) {
-    const LHCb::Particle* p     = *ip;
-    bool                  testK = false;
-
-    for ( LHCb::Particle::ConstVector::const_iterator kp = KsDau.begin(); KsDau.end() != kp; ++kp )
-      if ( *ip == *kp ) {
-        testK = true;
-        break;
-      }
-
-    if ( !testK )
-      for ( LHCb::Particle::ConstVector::const_iterator ip2 = ip + 1; PartIP.end() != ip2; ++ip2 ) {
-        const LHCb::Particle* p2 = *ip2;
-
-        sc = m_dist->distance( ( p ), ( p2 ), dca12, dcae12, geometry );
-        if ( !sc ) { warning() << "can't mesure the dist " << endmsg; }
-        if ( dca12 > m_DtrakMax ) continue; // dca too large bwt the tracks
-
-        Gaudi::LorentzVector sum = ( p )->momentum() + ( p2 )->momentum();
-
-        //=============================================================================
-        // COMBINEPIPIMINK0: GET RIF OF K0S
-        //=============================================================================
-        if ( ( p )->particleID().abspid() == 211 && ( p2 )->particleID().abspid() == 211 &&
-             ( ( p )->charge() ) * ( ( p2 )->charge() ) < 0 )
-          if ( fabs( sum.M() - MK0 ) < m_DMK0 ) {
-            cntK0++;
-            testK = true;
-
-            KsDau.push_back( p );
-            KsDau.push_back( p2 );
-          }
-      }
-
-    if ( testK ) continue;
-    PartIPK0Sub.push_back( p );
-  }
-
-  if ( msgLevel( MSG::DEBUG ) ) {
-    debug() << "nb K0                         : " << cntK0 << endmsg;
-    debug() << "Particle INPUT for JET no K0  : " << PartIPK0Sub.size() << endmsg;
-  }
-
-  if ( PartIPK0Sub.size() < 2 ) {
-    Warning( "Not enough good part for seeding" ).ignore();
-    return StatusCode::SUCCESS;
-  }
-
-  Gaudi::XYZPoint      BL_P = Gaudi::XYZPoint( 0, 0, 0 );
-  Gaudi::LorentzVector BL_M = Gaudi::LorentzVector( 0, 0, 1, 0 );
-
-  if ( exist<LHCb::Particle::Range>( "/Event/BeamLine" ) ) {
-    const LHCb::Particle::Range BL  = get<LHCb::Particle::Range>( "/Event/BeamLine" );
-    const LHCb::Particle*       tmp = *( BL.begin() );
-    BL_P                            = Gaudi::XYZPoint( tmp->referencePoint() );
-    BL_M                            = Gaudi::LorentzVector( tmp->momentum() );
-    //   m_BeamLine->setMomentum( tmp->momentum() );
-    if ( msgLevel( MSG::DEBUG ) ) debug() << "Beam line position " << BL_P << " direction " << BL_M << endmsg;
-  } else {
-    if ( msgLevel( MSG::DEBUG ) )
-      debug() << "No Beam line found at "
-              << "/Event/BeamLine" << endmsg;
-
-    BL_P = Gaudi::XYZPoint( RecVert->position() );
-
-    if ( msgLevel( MSG::DEBUG ) ) debug() << "Beam line position " << BL_P << " direction " << BL_M << endmsg;
-  }
-
-  // COMBIN PART
-
-  LHCb::Particle::ConstVector::const_iterator jp, kp, lp;
-  for ( jp = PartIPK0Sub.begin(); jp != PartIPK0Sub.end(); jp++ ) {
-    for ( kp = jp + 1; kp != PartIPK0Sub.end(); kp++ ) {
-
-      sc = m_dist->distance( ( *jp ), ( *kp ), dca12, dcae12, geometry );
-      if ( !sc ) { warning() << "can't mesure the dist " << endmsg; }
-      if ( dca12 > m_DtrakMax ) continue; // dca too large bwt the tracks
-
-      Gaudi::LorentzVector sum = ( *jp )->momentum() + ( *kp )->momentum();
-
-      if ( m_Triplets ) {
-
-        // add Try 3-tracks Seed otpion
-        for ( lp = ( kp + 1 ); lp != PartIPK0Sub.end(); lp++ ) {
-
-          double dca13, dcae13;
-          m_dist->distance( ( *jp ), ( *lp ), dca13, dcae13, geometry ).ignore();
-          if ( dca13 > m_DtrakMax ) continue; // dca too large btw the trks
-
-          double dca23, dcae23;
-          m_dist->distance( ( *lp ), ( *kp ), dca23, dcae23, geometry ).ignore();
-          if ( dca23 > m_DtrakMax ) continue; // dca too large btw the trks
-
-          StatusCode scvtx = m_fitter->fit( vtx, **jp, **kp, **lp, geometry );
-          if ( scvtx.isFailure() ) {
-            warning() << "VTX Fit failed" << endmsg;
-            continue;
-          }
-
-          if ( vtx.chi2PerDoF() > m_SeedsMaxChi2DoF ) continue;
-          // cut on chi2
-          double mydz = -1;
-          if ( scvtx ) mydz = vtx.position().z() - RecVert->position().z();
-          if ( mydz < 0 ) continue;
-          // the vtx is before the PV
-
-          // intersection of the beam line with the XY plane,
-          // find the lambda parameter of the line.
-          double lambda = ( vtx.position().z() - BL_P.z() ) / BL_M.z();
-
-          // find x and y of intersection point
-          double x = BL_P.x() + lambda * BL_M.x();
-          double y = BL_P.y() + lambda * BL_M.y();
-
-          x -= vtx.position().x();
-          y -= vtx.position().y();
-
-          double dr = sqrt( x * x + y * y );
-          if ( dr < m_DRmin || dr > m_DRmax ) continue;
-
-          // the vtx is too close or to far from the beam direction
-
-          //---------------------------
-          // Seed level cuts -----------
-          //---------------------------
-          LHCb::VertexBase* PPvtx2 = vtx.clone();
-          m_dist->distance( PPvtx2, RecVert, tof, tofe ).ignore();
-          if ( tof < m_TseedVtxMin || tof > m_TseedVtxMax ) continue;
-          // the vtx is too close or to far from the PV (~time of flight)
-          bool PVveto = false;
-          if ( m_PVveto )
-            for ( std::vector<LHCb::VertexBase*>::iterator pv = PVs.begin(); pv != PVs.end(); pv++ ) {
-              m_dist->distance( PPvtx2, *pv, tof, tofe ).ignore();
-              if ( tof < m_TseedVtxMinAnyPV ) {
-                PVveto = true;
-                break;
-              }
-            }
-          if ( PVveto ) continue;
-
-          Gaudi::LorentzVector sum2 = sum + ( *lp )->momentum();
-          if ( sum2.Pt() < m_PtSeedsMin ) continue;
-          // Pt too soft
-
-          LHCb::Particle::ConstVector daughters2;
-          LHCb::Particle              pSeed2;
-          LHCb::Vertex                vSeed2;
-
-          daughters2.push_back( *lp );
-          daughters2.push_back( *kp );
-          daughters2.push_back( *jp );
-          pSeed2.setParticleID( LHCb::ParticleID( m_seedID ) );
-          pSeed2.setReferencePoint( RecVert->position() );
-          pSeed2.setMomentum( sum2 );
-
-          StatusCode sc = m_combiner->combine( daughters2, pSeed2, vSeed2, geometry );
-
-          pSeed2.setEndVertex( vtx.clone() );
-          // save the trks as the daugthers
-          // remove
-          if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-          Seeds.push_back( pSeed2.clone() );
-          // remove lp to test another part
-
-        } // end loop lp
-      }
-
-      // 2-seed
-      LHCb::Particle              pSeed;
-      LHCb::Particle::ConstVector daughters;
-      LHCb::Vertex                vSeed;
-
-      StatusCode scvtx = m_fitter->fit( vtx, **jp, **kp, geometry );
-
-      if ( scvtx.isFailure() ) {
-        warning() << "VTX Fit failed" << endmsg;
-        continue;
-      }
-
-      if ( vtx.chi2PerDoF() > m_SeedsMaxChi2DoF ) continue;
-
-      double mydz = -1;
-      if ( scvtx ) mydz = vtx.position().z() - RecVert->position().z();
-      if ( mydz < 0 ) continue;
-      // the vtx is before the PV
-
-      // Gaudi::XYZPoint  dv =   Gaudi::XYZPoint(vtx.position() - m_BeamLine->referencePoint().position());
-
-      // intersection of the beam line with the XY plane,
-      // find the lambda parameter of the line.
-      double lambda = ( vtx.position().z() - BL_P.z() ) / BL_M.z();
-
-      // find x and y of intersection point
-      double x = BL_P.x() + lambda * BL_M.x();
-      double y = BL_P.y() + lambda * BL_M.y();
-
-      x -= vtx.position().x();
-      y -= vtx.position().y();
-
-      double dr = sqrt( x * x + y * y );
-      if ( dr < m_DRmin || dr > m_DRmax ) continue;
-      // the vtx is too close or to far from the beam direction
-
-      //---------------------------
-      // Seed level cuts -----------
-      //---------------------------
-      LHCb::VertexBase* PPvtx2 = vtx.clone();
-      m_dist->distance( PPvtx2, RecVert, tof, tofe ).ignore();
-      if ( tof < m_TseedVtxMin || tof > m_TseedVtxMax ) continue;
-      // the vtx is too close or to far from the PV (~time of flight)
-
-      bool PVveto = false;
-      if ( m_PVveto )
-        for ( std::vector<LHCb::VertexBase*>::iterator pv = PVs.begin(); pv != PVs.end(); pv++ ) {
-          m_dist->distance( PPvtx2, *pv, tof, tofe ).ignore();
-          if ( tof < m_TseedVtxMinAnyPV ) {
-            PVveto = true;
-            break;
-          }
-        }
-      if ( PVveto ) continue;
-
-      if ( sum.Pt() < m_PtSeedsMin ) continue;
-      // Pt too soft
-
-      daughters.push_back( *jp );
-      daughters.push_back( *kp );
-
-      pSeed.setParticleID( LHCb::ParticleID( m_seedID ) );
-      pSeed.setReferencePoint( RecVert->position() );
-      pSeed.setMomentum( sum );
-      StatusCode sc = m_combiner->combine( daughters, pSeed, vSeed, geometry );
-      // save the trks as the daugthers
-      pSeed.setEndVertex( vtx.clone() );
-      if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-      Seeds.push_back( pSeed.clone() );
-
-    } // end loop kp
-  }   // end loop jp
-
-  if ( Seeds.empty() ) {
-    Warning( "No Seeds from LoKiVVSeedFinder" ).ignore();
-    return StatusCode::SUCCESS;
-  }
-
-  //=============================================================================
-  // SORT THE SEEDS
-  //=============================================================================
-  if ( m_sort == 1 ) std::sort( Seeds.begin(), Seeds.end(), sortPt() );
-  if ( m_sort == 2 ) std::sort( Seeds.begin(), Seeds.end(), sortE() );
-  if ( m_sort == 3 ) std::sort( Seeds.begin(), Seeds.end(), sortEta() );
-  if ( m_sort == 4 ) std::sort( Seeds.begin(), Seeds.end(), sortDauPt() );
-
-  IJetMaker::Jets ProtoJets, MergeProtoJets;
-  ProtoJets.reserve( Seeds.size() );
-  MergeProtoJets.reserve( Seeds.size() );
-
-  int myj = 0;
-  for ( IJetMaker::Jets::iterator ijet = Seeds.begin(); Seeds.end() != ijet; ++ijet ) {
-    LHCb::Particle* pJet = *ijet;
-
-    myj++;
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "Seeds  " << myj << "| nb of combin Seeds:  " << pJet->weight()
-              << "  nb part in the jet:  " << pJet->daughtersVector().size() << "  Pt:  " << pJet->pt() << endmsg;
-      debug() << "        | m  : " << pJet->momentum() << endmsg;
-      debug() << "        | eta: " << pJet->momentum().eta() << "  / phi: " << pJet->momentum().phi() << endmsg;
-    }
-  }
-
-  //=============================================================================
-  // BUILDPROTOJETS: BUILDS JETS AROUND THE SEEDS FORMED WITH THE PRIMARY VERTEX AND THE VERTEXCOMBINATIONS
-  //=============================================================================
-  ProtoJets = JetCone( m_r, Seeds, input_, geometry );
-
-  myj = 0;
-  for ( IJetMaker::Jets::iterator ijet = ProtoJets.begin(); ProtoJets.end() != ijet; ++ijet ) {
-    LHCb::Particle* pJet = *ijet;
-
-    myj++;
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "BSeeds " << myj << "| nb of combin Seeds:  " << pJet->weight()
-              << "  nb part in the jet:  " << pJet->daughtersVector().size() << "  Pt:  " << pJet->pt() << endmsg;
-      debug() << "        | m  : " << pJet->momentum() << endmsg;
-      debug() << "        | eta: " << pJet->momentum().eta() << "  / phi: " << pJet->momentum().phi() << endmsg;
-    }
-  }
-
-  //=============================================================================
-  // FILTERPROTOJETS: MERGES JETS WHICH ARE TOO CLOSE OR THE SAME
-  //=============================================================================
-  MergeProtoJets = FilterProtoJets( m_DeltaRSeeds, ProtoJets );
-
-  if ( msgLevel( MSG::INFO ) ) { m_nSeeds += Seeds.size(); }
-
-  jets_ = MergeProtoJets;
-
-  myj = 0;
-  for ( IJetMaker::Jets::iterator ijet = MergeProtoJets.begin(); MergeProtoJets.end() != ijet; ++ijet ) {
-    LHCb::Particle* pJet = *ijet;
-
-    myj++;
-    if ( msgLevel( MSG::DEBUG ) ) {
-      debug() << "CSeeds " << myj << "| nb of combin Seeds:  " << pJet->weight()
-              << "  nb part in the jet:  " << pJet->daughtersVector().size() << "  Pt:  " << pJet->pt() << endmsg;
-      debug() << "        | m  : " << pJet->momentum() << endmsg;
-      debug() << "        | eta: " << pJet->momentum().eta() << "  / phi: " << pJet->momentum().phi() << endmsg;
-    }
-  }
-
-  return StatusCode::SUCCESS;
-}
-
-//=============================================================================
-// JETCONE: THE HEART OF EVERYTHING, BUILDS A JET AROUND A SEED
-//=============================================================================
-IJetMaker::Jets LoKi::VVSeedFinder::JetCone( double const& Rmax, IJetMaker::Jets& seeds, IJetMaker::Input const& inputs,
-                                             IGeometryInfo const& geometry ) const {
-
-  LHCb::Particle::Vector pJetVec;
-
-  IJetMaker::Jets::const_iterator iseeds;
-
-  for ( iseeds = seeds.begin(); iseeds != seeds.end(); ++iseeds ) {
-
-    const LHCb::Particle* pSeed = *iseeds;
-
-    LHCb::Particle              pJet;
-    LHCb::Vertex                vJet;
-    LHCb::Particle::ConstVector daughters;
-
-    pJet.setParticleID( LHCb::ParticleID( 9999999 ) );
-
-    pJet.setReferencePoint( pSeed->referencePoint() );
-
-    const double PI = 3.14159265;
-
-    double               phiSeed = pSeed->momentum().phi();
-    double               etaSeed = pSeed->momentum().eta();
-    Gaudi::LorentzVector ptot    = Gaudi::LorentzVector( 0., 0., 0., 0. );
-
-    LHCb::Particle::ConstVector::const_iterator ip;
-
-    for ( ip = inputs.begin(); ip != inputs.end(); ++ip ) {
-
-      const LHCb::Particle* myPart = *ip;
-      Gaudi::LorentzVector  p1     = myPart->momentum();
-
-      double phiPart = myPart->momentum().phi();
-      double etaPart = myPart->momentum().eta();
-      double Dphi    = fabs( phiSeed - phiPart );
-      if ( Dphi > PI ) { Dphi = 2 * PI - Dphi; };
-      double R = sqrt( Dphi * Dphi + ( etaSeed - etaPart ) * ( etaSeed - etaPart ) );
-
-      if ( R > Rmax ) continue;
-      ptot = ptot + p1;
-
-      daughters.push_back( myPart );
-    }
-
-    if ( daughters.empty() ) Warning( "Empty list of of daughter particles, skip it" ).ignore();
-
-    StatusCode sc = m_combiner->combine( daughters, pJet, vJet, geometry );
-    if ( sc.isFailure() ) Warning( "Error from momentum combiner, skip", sc, 0 ).ignore();
-
-    pJet.setMomentum( Gaudi::LorentzVector( ptot ) );
-    pJetVec.push_back( pJet.clone() );
-  }
-
-  return pJetVec;
-}
-
-//=============================================================================
-// JETCONE: END
-//=============================================================================
-
-//=============================================================================
-// FILTERPROTOJETS: MERGES JETS WHICH ARE TOO CLOSE OR THE SAME
-//=============================================================================
-IJetMaker::Jets LoKi::VVSeedFinder::FilterProtoJets( const double& DeltaRSeeds, IJetMaker::Jets& ProtoJets ) const {
-  //----------------------------------------------------------------------
-  // filter protojets which are too close or the same-------- ------------
-  //----------------------------------------------------------------------
-
-  //  const double PI=3.14159265;
-  // erase the 6th element
-  //  myvector.erase (myvector.begin()+5);
-
-  if ( msgLevel( MSG::DEBUG ) ) debug() << "size of  noFiltered ProtoJets           = " << ProtoJets.size() << endmsg;
-
-  IJetMaker::Jets NewProtoJets;
-  IJetMaker::Jets NewProtoJets2;
-
-  bool testJets = true;
-  int  mySize   = 0;
-  int  k        = 0;
-  if ( m_preFilter ) {
-    for ( IJetMaker::Jets::iterator ip = ProtoJets.begin(); ip != ProtoJets.end(); ++ip ) {
-      LHCb::Particle* seed = ( *ip );
-      if ( seed->momentum().E() > 0. ) {
-        int j = 0;
-        for ( IJetMaker::Jets::iterator ip2 = ip + 1; ip2 != ProtoJets.end(); ++ip2 ) {
-          j++;
-
-          LHCb::Particle* seed2 = ( *ip2 );
-          if ( seed2->momentum().E() > 0. ) {
-
-            double testR = getDeltaR( seed, seed2 );
-
-            if ( testR < 0.00005 ) {
-              //    if( testR <  0.05 || (fabs(v1.E() - v2.E())/v1.E() <  0.05 && testR < 0.1)){
-              // SAME JET !
-              ProtoJets.at( k )->setMomentum( Gaudi::LorentzVector( seed->momentum() ) );
-
-              double myWeight = seed->weight() + seed2->weight();
-
-              ProtoJets.at( k )->eraseInfo( LHCb::Particle::additionalInfo::Weight );
-              ProtoJets.at( k )->addInfo( LHCb::Particle::additionalInfo::Weight, myWeight );
-
-              seed->eraseInfo( LHCb::Particle::additionalInfo::Weight );
-              seed->addInfo( LHCb::Particle::additionalInfo::Weight, myWeight );
-
-              seed->setMomentum( Gaudi::LorentzVector( seed->momentum() ) );
-              ProtoJets.at( k + j )->setMomentum( Gaudi::LorentzVector( 0., 0., 0., 0. ) );
-            }
-          }
-        }
-      }
-      k++;
-    }
-  }
-  for ( IJetMaker::Jets::iterator ip = ProtoJets.begin(); ip != ProtoJets.end(); ++ip ) {
-
-    LHCb::Particle* seed = ( *ip );
-    if ( seed->momentum().E() > 0. ) { NewProtoJets.push_back( seed ); }
-  }
-
-  ProtoJets.clear();
-  ProtoJets = NewProtoJets;
-
-  if ( msgLevel( MSG::DEBUG ) ) debug() << "size of preFiltered ProtoJets           = " << ProtoJets.size() << endmsg;
-
-  if ( m_jetFilter ) {
-    while ( testJets ) {
-
-      NewProtoJets.clear();
-      mySize        = (int)ProtoJets.size();
-      testJets      = false;
-      int    k      = 0;
-      int    J1test = 0;
-      int    J2test = 0;
-      double testDR = 100.0;
-
-      NewProtoJets = ProtoJets;
-
-      for ( IJetMaker::Jets::iterator ip = ProtoJets.begin(); ip != ProtoJets.end(); ++ip ) {
-        LHCb::Particle* seed = ( *ip );
-
-        if ( seed->momentum().E() > 0. ) {
-          int j = 0;
-          for ( IJetMaker::Jets::iterator ip2 = ip + 1; ip2 != ProtoJets.end(); ++ip2 ) {
-            j++;
-            LHCb::Particle* seed2 = ( *ip2 );
-
-            if ( seed2->momentum().E() > 0. ) {
-
-              double R = getDeltaR( seed, seed2 );
-
-              if ( R < DeltaRSeeds && R < testDR ) {
-
-                testDR = R;
-                J1test = k;
-                J2test = j + k;
-              }
-            }
-          }
-        }
-        k++;
-      }
-
-      if ( testDR < DeltaRSeeds ) {
-        if ( msgLevel( MSG::VERBOSE ) ) {
-          verbose() << " FilterProtoJet merge " << endmsg;
-          verbose() << "Nseed phi/eta= " << ( ProtoJets.at( J1test )->momentum() ).phi() << " "
-                    << ( ProtoJets.at( J1test )->momentum() ).eta() << endmsg;
-          verbose() << "Nseed2phi/eta= " << ( ProtoJets.at( J2test )->momentum() ).phi() << " "
-                    << ( ProtoJets.at( J2test )->momentum() ).eta() << endmsg;
-          verbose() << "E P1= " << ( ProtoJets.at( J1test )->momentum() ).E()
-                    << "   E P2= " << ( ProtoJets.at( J2test )->momentum() ).E() << endmsg;
-          verbose() << "E P1/P2= "
-                    << fabs( ( ProtoJets.at( J1test )->momentum() ).E() - ( ProtoJets.at( J2test )->momentum() ).E() ) /
-                           ( ProtoJets.at( J1test )->momentum() ).E()
-                    << endmsg;
-        }
-        if ( testDR > LHCb::Math::looseTolerance || !m_preFilter ) {
-
-          NewProtoJets.at( J1test )->setMomentum(
-              Gaudi::LorentzVector( ( ProtoJets.at( J1test )->momentum() + ProtoJets.at( J2test )->momentum() ) ) );
-
-          const LHCb::Particle::ConstVector DaughtersJ2 = ProtoJets.at( J2test )->daughtersVector();
-          for ( LHCb::Particle::ConstVector::const_iterator ip3 = DaughtersJ2.begin(); ip3 != DaughtersJ2.end();
-                ++ip3 ) {
-            const LHCb::Particle* d1 = *ip3;
-            NewProtoJets.at( J1test )->addToDaughters( d1 );
-          }
-
-          double myWeight = ProtoJets.at( J1test )->weight() + ProtoJets.at( J2test )->weight();
-          double myCL     = -1;
-
-          if ( ProtoJets.at( J1test )->momentum().E() > ProtoJets.at( J2test )->momentum().E() ) {
-            NewProtoJets.at( J1test )->setReferencePoint( ProtoJets.at( J1test )->referencePoint() );
-            myCL = ProtoJets.at( J1test )->confLevel();
-          } else {
-            NewProtoJets.at( J1test )->setReferencePoint( ProtoJets.at( J2test )->referencePoint() );
-            myCL = ProtoJets.at( J2test )->confLevel();
-          }
-          NewProtoJets.at( J1test )->eraseInfo( LHCb::Particle::additionalInfo::Weight );
-          NewProtoJets.at( J1test )->addInfo( LHCb::Particle::additionalInfo::Weight, myWeight );
-          NewProtoJets.at( J1test )->eraseInfo( LHCb::Particle::additionalInfo::ConfLevel );
-          NewProtoJets.at( J1test )->addInfo( LHCb::Particle::additionalInfo::ConfLevel, myCL );
-
-        } else {
-
-          // Same jet... nothing to do.... just erase one.
-        }
-
-        NewProtoJets.erase( NewProtoJets.begin() + J2test );
-      }
-
-      if ( msgLevel( MSG::VERBOSE ) ) {
-        verbose() << " ProtoJet Size         : " << mySize << endmsg;
-        verbose() << " ProtoJet Size         : " << ProtoJets.size() << endmsg;
-        verbose() << " NewFilterProtoJet Size: " << NewProtoJets.size() << endmsg;
-      }
-
-      if ( (int)NewProtoJets.size() != mySize ) testJets = true;
-
-      ProtoJets.clear();
-      ProtoJets = NewProtoJets;
-
-      if ( NewProtoJets.size() % 10 == 0 )
-        if ( msgLevel( MSG::VERBOSE ) )
-          verbose() << "Number of filtered ProtoJets is " << NewProtoJets.size() << endmsg;
-    }
-
-    if ( msgLevel( MSG::DEBUG ) )
-      debug() << "size of    Filtered ProtoJets           = " << NewProtoJets.size() << endmsg;
-
-    NewProtoJets.clear();
-    for ( IJetMaker::Jets::iterator ip2 = ProtoJets.begin(); ip2 != ProtoJets.end(); ++ip2 ) {
-      if ( ( *ip2 )->momentum().Pt() < m_PtMergedSeedsMin ) continue;
-      NewProtoJets.push_back( ( *ip2 ) );
-    }
-  }
-
-  return NewProtoJets;
-}
-//=============================================================================
-// END OF FILTERPROTOJETS
-//=============================================================================
-
-//=============================================================================
-// GETDELTAR: CALCULATES DELTAR
-//=============================================================================
-double LoKi::VVSeedFinder::getDeltaR( LHCb::Particle* p1, LHCb::Particle* p2 ) const {
-
-  const double PI = 3.14159265;
-  double       R, Dphi, phi1, phi2, e1, e2;
-  phi1 = p1->momentum().phi();
-  phi2 = p2->momentum().phi();
-  e1   = p1->momentum().eta();
-  e2   = p2->momentum().eta();
-  Dphi = fabs( phi1 - phi2 );
-  if ( Dphi > PI ) { Dphi = 2 * PI - Dphi; };
-  R = sqrt( Dphi * Dphi + ( e1 - e2 ) * ( e1 - e2 ) );
-  return R;
-}
-
-//=============================================================================
-// Remove trks form a PV
-//=============================================================================
-
-void LoKi::VVSeedFinder::RemoveTracks( LHCb::Particle::ConstVector& particles, const LHCb::RecVertex PV ) const {
-
-  // Remove all tracks from the PV
-  LHCb::Particle::ConstVector                 tmp;
-  SmartRefVector<LHCb::Track>::const_iterator iPV    = PV.tracks().begin();
-  int                                         endkey = PV.tracks().back()->key();
-
-  for ( LHCb::Particle::ConstVector::const_iterator i = particles.begin(); i != particles.end(); ++i ) {
-    if ( ( *i )->proto()->track() == NULL ) continue;
-    const LHCb::Track* tk = ( *i )->proto()->track();
-
-    while ( ( ( *iPV )->key() < tk->key() ) && ( *iPV )->key() != endkey ) { iPV++; }
-    if ( ( *iPV )->key() == tk->key() ) {
-      if ( ( *iPV )->key() != endkey ) iPV++;
-      continue;
-    }
-    tmp.push_back( *i );
-  }
-  // Copy back tmp to particles
-  particles = tmp;
-}
-
-/// The factory
-DECLARE_COMPONENT( LoKi::VVSeedFinder )
diff --git a/Phys/LoKiJets/src/LoKiVVSeedFinder.h b/Phys/LoKiJets/src/LoKiVVSeedFinder.h
deleted file mode 100644
index e688d9eac..000000000
--- a/Phys/LoKiJets/src/LoKiVVSeedFinder.h
+++ /dev/null
@@ -1,274 +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.                                       *
-\*****************************************************************************/
-// ============================================================================
-#pragma once
-
-#include "GaudiAlg/GaudiTool.h"
-
-#include "Kernel/IJetMaker.h"
-#include "Kernel/IParticleCombiner.h"
-
-#include "Event/Particle.h"
-#include "Kernel/IDistanceCalculator.h"
-#include "Kernel/IVertexFit.h"
-#include "LoKi/Geometry.h"
-#include "LoKi/Kinematics.h"
-
-#include "Event/RecVertex.h"
-#include "GaudiAlg/ITupleTool.h"
-#include "Kernel/IParticleTransporter.h"
-#include "LHCbMath/LHCbMath.h"
-
-namespace LoKi {
-
-  /** @class VVSeedFinder
-   *
-   *  The VVSeedFinder (EPFL) implementaion of interface IJetMaker
-   *  @see IJetMaker
-   *
-   *  This file is a part of LoKi project -
-   *    "C++ ToolKit  for Smart and Friendly Physics Analysis"
-   *
-   *  The package has been designed with the kind help from
-   *  Galina PAKHLOVA and Sergey BARSUK.  Many bright ideas,
-   *  contributions and advices from G.Raven, J.van Tilburg,
-   *  A.Golutvin, P.Koppenburg have been used in the design.
-   *
-   *  @author Cedric POTTERAT  cedric.potterat@cern.ch
-   *  @date   2011-01-31
-   */
-  class VVSeedFinder : public virtual IJetMaker, public GaudiTool {
-  public:
-    /** The main method: seed-finding procedure
-     *
-     *  @code
-     *
-     *  // get the tool
-     *  const IJetMaker* seedMaker = tool<IJetMaker> ( .... ) ;
-     *
-     *  // input particles
-     *  IJetMaker::Inputs input = ...
-     *  // 1)
-     *  // const Particles* particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles->begin() , particles->end() ) ;
-     *  // 2)
-     *  // LHCb::Particle::ConstVector particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *  // 3)
-     *  // LoKi::Range particles = .... ;
-     *  // // create the input container
-     *  // IJetMaker::Inputs input( particles.begin() , particles.end() ) ;
-     *
-     *  // placeholder for "output" jets
-     *  IJetMaker::Jets   seeds ;
-     *
-     *  // find the jets!
-     *  StatusCode sc = seedMaker -> makeJets ( input , seeds ) ;
-     *
-     *  // make  a loop over jets:
-     *  for ( IJetMaker::Jets::const_iterator iSeed = seeds.begin() ;
-     *        seeds.end() != iSeed ; ++iSeed )
-     *    {
-     *        // get the jet
-     *        LHCb::Particle* seed = *iSeed ;
-     *    }
-     *
-     *  @endcode
-     *
-     *  @attention It is a responsibility of users (e.g. the algorithm)
-     *             to take care about the ownership of jets *AND* their
-     *             vertices). The tool is not intended to do it!
-     *
-     *  @param input contaainer of input particles
-     *  @param seeds  container of  output seeds (of type Particle)
-     *  @return status code
-     */
-    StatusCode makeJets( const IJetMaker::Input& input, IJetMaker::Jets& jets ) const override;
-    StatusCode makeJets( const IJetMaker::Input& input, const LHCb::RecVertex& vtx,
-                         IJetMaker::Jets& jets ) const override;
-
-    /** the standard constructor
-     *
-     *  @todo The default values for configuration parameters
-     *        (especially for R-parameter) need to be adjusted
-     *        according to EPFL studies.
-     *        @link http://cdsweb.cern.ch/record/1211038/files/LHCb-INT-2009-023.pdf LHCb-INT-2009-023 - Bay/Potterat
-     * @endlink
-     *        @link http://cdsweb.cern.ch/record/1266883/files/CERN-THESIS-2010-074.pdf CERN_THESIS-2010-074 - Potterat
-     * @endlink
-     *
-     */
-    VVSeedFinder( const std::string& type, const std::string& name, const IInterface* parent )
-        : GaudiTool( type, name, parent )
-        //
-        , m_seedID( 20098 )
-        //
-        , m_r( 0.15 )
-        //
-        , m_sort( 4 )
-        //
-        , m_combinerName( "MomentumCombiner" )
-        , m_combiner( 0 )
-        , m_dist( 0 )
-        , m_fitter( 0 )
-        , m_PtTrackMin( 600.0 )
-        , m_PTrackMin( 1000.0 )
-        , m_IPmin( 0.1 )
-        , m_Signif( 2.5 )
-        , m_DMK0( 10.0 )
-        , m_TseedVtxMin( 1.0 )
-        , m_TseedVtxMax( 200.0 )
-        , m_TseedVtxMinAnyPV( 0.1 )
-        , m_DtrakMax( 0.5 )
-        , m_PtSeedsMin( 1000. )
-        , m_PtMergedSeedsMin( 1000. )
-        , m_SeedsMaxChi2DoF( 50. )
-        , m_Triplets( false )
-        , m_DRmin( 0.1 )
-        , m_DRmax( 10. )
-        , m_TrkChi2DoF( 2.5 )
-        , m_DeltaRSeeds( 0.5 )
-        , m_preFilter( true )
-        , m_jetFilter( true )
-        , m_PVveto( true ) {
-      //
-      declareInterface<IJetMaker>( this );
-      //
-      declareProperty( "SeedID", m_seedID, "Particle ID for the Seed" );
-      declareProperty( "SeedRParameter", m_r );
-      declareProperty( "Sort", m_sort,
-                       "Sorting Criteria for jets [0:none,1:pt,2:E,3:eta, 4:ProtoSeed the Dau then Pt, default:4]" );
-      // define momentum combiner
-      declareProperty( "ParticleCombiner", m_combinerName );
-      declareProperty( "SeedPtTrackMin", m_PtTrackMin, "pt of the track used for Vertexing" );
-      declareProperty( "SeedPTrackMin", m_PTrackMin, "p of the track used for Vertexing" );
-      declareProperty( "SeedIPmin", m_IPmin, "ip of the track used for Vertexing" );
-      declareProperty( "SeedSignif", m_Signif, "signif oft he track used for Vertexing" );
-      declareProperty( "SeedDMK0", m_DMK0, "mass window for Ks" );
-      declareProperty( "SeedTseedVtxMin", m_TseedVtxMin, "min distance btw PV and the  vtx" );
-      declareProperty( "SeedTseedVtxMax", m_TseedVtxMax, "max distance btw PV and the  vtx" );
-      declareProperty( "SeedTseedVtxMinAnyPV", m_TseedVtxMinAnyPV, "min distance btw any PV and the  vtx" );
-
-      declareProperty( "SeedDtrakMax", m_DtrakMax, "dca window for vtx" );
-      declareProperty( "SeedPtSeedsMin", m_PtSeedsMin, "min pt of the seeds" );
-      declareProperty( "SeedVtxMaxChi2PerDoF", m_SeedsMaxChi2DoF, "max chi2 per dof for the vtx fit of the seed" );
-      declareProperty( "PtMergedSeedsMin", m_PtMergedSeedsMin, "min pt of the merged seeds" );
-
-      declareProperty( "SeedTriplets", m_Triplets, "built Vtx with 3 tracks" );
-      declareProperty( "SeedDRmin", m_DRmin, "min positon in R of the vtx" );
-      declareProperty( "SeedDRmax", m_DRmax, "max positon in R of the vtx" );
-      declareProperty( "SeedTrkChi2PerDoF", m_TrkChi2DoF, "max chi2PerDoF for the track used for the vtx" );
-      declareProperty( "SeedsDeltaR", m_DeltaRSeeds, "min DR btw 2 seeds otherwise:merge" );
-      declareProperty( "SeedpreFilter", m_preFilter, "pre filter the protoseeds" );
-      declareProperty( "SeedFilter", m_jetFilter, "filter the protoseeds" );
-      declareProperty( "vetoPV", m_PVveto,
-                       "exclude vertex near to any PV with distance fixe by 'SeedTseedVtxMinAnyPV' and exclude the trk "
-                       "associated to any PV to construct a secondary vtx" );
-    }
-    /** standard initialization of the tool
-     *  @return status code
-     */
-    StatusCode initialize() override;
-
-  protected:
-    /// make the detailed check of all parameters
-
-    inline StatusCode check() const {
-      if ( 0 > m_ptmin ) { Warning( "PtMin is negative " ).ignore(); }
-      return StatusCode::SUCCESS;
-    }
-
-    int to_user_index( const int index ) const { return index + 10000; }
-    int from_user_index( const int index ) const { return index - 10000; }
-    // proposed jet ID
-    int m_seedID; ///< proposed jet ID
-    // R-parameter
-    double m_r; ///< R-parameters
-    // ptMin-parameter
-    double m_ptmin; ///< pt-min parameter
-    // jet sorting criteria
-    int m_sort; ///< jet sorting criteria
-    // combiner
-    std::string                m_combinerName;
-    mutable IParticleCombiner* m_combiner; ///< combiner to be used
-
-    IDistanceCalculator* m_dist;
-    IVertexFit*          m_fitter;
-
-    double m_Rmax;
-    double m_PtTrackMin;
-    double m_PTrackMin;
-    double m_IPmin;
-    double m_Signif;
-    double m_DMK0;
-    double m_TseedVtxMin;
-    double m_TseedVtxMax;
-    double m_TseedVtxMinAnyPV;
-    double m_DtrakMax;
-    double m_PtSeedsMin;
-    double m_PtMergedSeedsMin;
-    double m_SeedsMaxChi2DoF;
-    bool   m_Triplets;
-    double m_DRmin;
-    double m_DRmax;
-    double m_TrkChi2DoF;
-    double m_DeltaRSeeds;
-    bool   m_preFilter;
-    bool   m_jetFilter;
-    bool   m_PVveto;
-
-    IJetMaker::Jets JetCone( const double& Rmax, IJetMaker::Jets& seeds, const IJetMaker::Input& inputs ) const;
-
-    IJetMaker::Jets FilterProtoJets( const double& DeltaRSeeds, IJetMaker::Jets& ProtoJets ) const;
-
-    double getDeltaR( LHCb::Particle* p1, LHCb::Particle* p2 ) const;
-
-    void RemoveTracks( LHCb::Particle::ConstVector& particles, const LHCb::RecVertex PV ) const;
-
-  private:
-    mutable Gaudi::Accumulators::StatCounter<> m_nSeeds{this, "#seeds"};
-  };
-
-} // namespace LoKi
-
-class sortDauPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    if ( obj1->weight() == obj2->weight() )
-      if ( obj1->daughtersVector().size() == obj2->daughtersVector().size() )
-        return obj1->pt() > obj2->pt();
-      else
-        return obj1->daughtersVector().size() > obj2->daughtersVector().size();
-    else
-      return obj1->weight() > obj2->weight();
-  }
-};
-
-class sortE {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().E() > obj2->momentum().E();
-  }
-};
-
-class sortEta {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) {
-    return obj1->momentum().Eta() > obj2->momentum().Eta();
-  }
-};
-
-class sortPt {
-public:
-  inline bool operator()( LHCb::Particle* obj1, LHCb::Particle* obj2 ) { return obj1->pt() > obj2->pt(); }
-};
-- 
GitLab