From a860bd8382acda28d7b08914d100275d6bee5c35 Mon Sep 17 00:00:00 2001
From: Ian Connelly <ian.connelly@cern.ch>
Date: Thu, 6 Dec 2018 16:21:43 +0000
Subject: [PATCH] Making a new interface to provide access to tools to pass up

---
 .../src/CscClusterOnTrackCreator.cxx          |  6 +++
 .../src/CscClusterOnTrackCreator.h            | 23 +++++----
 .../ICscClusterOnTrackCreator.h               | 48 +++++++++++++++++++
 .../IMuonClusterOnTrackCreator.h              |  4 ++
 .../src/CscSegmentUtilTool.cxx                | 33 +++----------
 .../CscSegmentMakers/src/CscSegmentUtilTool.h | 11 ++---
 6 files changed, 79 insertions(+), 46 deletions(-)
 create mode 100644 MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/ICscClusterOnTrackCreator.h

diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx
index f340207e6ef..970bc319a22 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx
@@ -439,4 +439,10 @@ namespace Muon {
   correct(const Trk::PrepRawData& RIO,const Trk::TrackParameters& TP) const {
     return createRIO_OnTrack(RIO,TP.position(),TP.momentum().unit());
   }
+
+  /// These functions are provided from the interface
+  const ToolHandle<ICscStripFitter>& CscClusterOnTrackCreator::GetICscStripFitter() const {return m_stripFitter;}
+  const ToolHandle<ICscClusterFitter>& CscClusterOnTrackCreator::GetICscClusterFitter() const {return m_clusterFitter;}
+  const ToolHandle<ICscClusterUtilTool>& CscClusterOnTrackCreator::GetICscClusterUtilTool() const {return m_clusterUtilTool;}
+
 }
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h
index 4aa32d38cbc..e35f7180d69 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h
@@ -18,7 +18,7 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h"
+#include "MuonRecToolInterfaces/ICscClusterOnTrackCreator.h"
 #include "MuonRIO_OnTrack/MuonClusterOnTrack.h"
 
 #include "MuonReadoutGeometry/MuonDetectorManager.h"
@@ -28,9 +28,9 @@
 
 #include "MuonPrepRawData/CscStripPrepDataContainer.h"
 
-class ICscStripFitter;
-class ICscClusterFitter;
-class ICscClusterUtilTool;
+//class ICscStripFitter;
+//class ICscClusterFitter;
+//class ICscClusterUtilTool;
 class CscIdHelper;
 
 namespace Muon {
@@ -59,7 +59,7 @@ namespace Muon {
        - CscStripFitter: Tool to fit charge + time of a CSC strip
        - CscStripPrepDataLocation: Storegate key of the CscStripPrepData collection
    */
- class CscClusterOnTrackCreator : public AthAlgTool, virtual public IMuonClusterOnTrackCreator {
+ class CscClusterOnTrackCreator : public AthAlgTool, virtual public ICscClusterOnTrackCreator {
   public:
     
     CscClusterOnTrackCreator(const std::string&,const std::string&,const IInterface*);
@@ -96,10 +96,9 @@ namespace Muon {
     */
     virtual const MuonClusterOnTrack* correct(const Trk::PrepRawData& RIO,const Trk::TrackParameters& TP) const; 
   
-    // These tools are used elsewhere with default setups, so we should just pass them out
-    ToolHandle<ICscStripFitter>     GetCalibCscStripFitter()  {return m_stripFitter;}
-    ToolHandle<ICscClusterFitter>   GetQratCscClusterFitter() {return m_clusterFitter;}
-    ToolHandle<ICscClusterUtilTool> GetCscClusterUtilTool()   {return m_clusterUtilTool;}
+    virtual const ToolHandle<ICscStripFitter>& GetICscStripFitter() const;
+    virtual const ToolHandle<ICscClusterFitter>& GetICscClusterFitter() const;
+    virtual const ToolHandle<ICscClusterUtilTool>& GetICscClusterUtilTool() const;
 
 
   private:
@@ -107,9 +106,9 @@ namespace Muon {
     const CscIdHelper*                   m_cscIdHelper;
     const RpcIdHelper*                   m_rpcIdHelper;     
     const TgcIdHelper*                   m_tgcIdHelper;     
-    ToolHandle<ICscStripFitter>                     m_stripFitter;
-    ToolHandle<ICscClusterFitter>                   m_clusterFitter;
-    ToolHandle<ICscClusterUtilTool>                 m_clusterUtilTool;
+    ToolHandle<ICscStripFitter>          m_stripFitter;
+    ToolHandle<ICscClusterFitter>        m_clusterFitter;
+    ToolHandle<ICscClusterUtilTool>      m_clusterUtilTool;
     bool m_have_csc_tools;
 
   SG::ReadCondHandleKey<RIO_OnTrackErrorScaling> m_cscErrorScalingKey
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/ICscClusterOnTrackCreator.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/ICscClusterOnTrackCreator.h
new file mode 100644
index 00000000000..50bba1d613d
--- /dev/null
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/ICscClusterOnTrackCreator.h
@@ -0,0 +1,48 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef MUON_ICSCCLUSTERONTRACKCREATOR_H
+#define MUON_ICSCCLUSTERONTRACKCREATOR_H
+
+#include "MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h"
+
+static const InterfaceID IID_ICscClusterOnTrackCreator
+    ("Muon::ICscClusterOnTrackCreator",1,0);
+
+class ICscStripFitter;
+class ICscClusterFitter;
+class ICscClusterUtilTool;
+
+
+namespace Muon {
+
+
+  /** @brief Interface for tools calibrating CSCCluster, turning them into Muon::ICscClusterOnTrack object. 
+      The interface inherits from IMuonClusterOnTrackCreator. 
+  */
+  class ICscClusterOnTrackCreator : virtual public IMuonClusterOnTrackCreator
+  {      
+  public:
+    ///////////////////////////////////////////////////////////////////
+    // Standard tool methods
+    ///////////////////////////////////////////////////////////////////
+    
+    static const InterfaceID& interfaceID();
+    
+
+    /** @brief Return some tools used by CscClusterOnTrackCreator       
+    */
+    virtual const ToolHandle<ICscStripFitter>& GetICscStripFitter() const = 0;
+    virtual const ToolHandle<ICscClusterFitter>& GetICscClusterFitter() const = 0;
+    virtual const ToolHandle<ICscClusterUtilTool>& GetICscClusterUtilTool() const = 0;
+  };
+  
+  inline const InterfaceID& ICscClusterOnTrackCreator::interfaceID()
+  {
+    return IID_ICscClusterOnTrackCreator;
+  }
+} // end of name space
+
+#endif // MUON_ICSCCLUSTERONTRACKCREATOR_H
+
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h
index e0d6042cb04..edf9c0d26a1 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecToolInterfaces/MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h
@@ -12,6 +12,10 @@
 static const InterfaceID IID_IMuonClusterOnTrackCreator
     ("Muon::IMuonClusterOnTrackCreator",1,0);
 
+class ICscStripFitter;
+class ICscClusterFitter;
+class ICscClusterUtilTool;
+
 namespace Trk {
     class PrepRawData;
 }
diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.cxx
index 49f9cb691de..5471e54d5be 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.cxx
@@ -25,7 +25,7 @@
 #include "TrkSurfaces/RotatedTrapezoidBounds.h"
 
 #include "CscSegmentMakers/ICscSegmentFinder.h"
-#include "MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h"
+#include "MuonRecToolInterfaces/ICscClusterOnTrackCreator.h"
 #include "CscClusterization/ICscClusterFitter.h"
 #include "CscClusterization/ICscStripFitter.h"
 #include "MuonIdHelpers/MuonIdHelperTool.h"
@@ -124,11 +124,6 @@ CscSegmentUtilTool::CscSegmentUtilTool
   declareProperty("Remove3Overlap", m_remove3Overlap = true);
   declareProperty("UnspoiledHits", m_nunspoil = -1);
 
-  // Retrieve ToolHandles from CscClusterOnTrackCreator
-  m_pfitter_prec = m_rotCreator.GetQratCscClusterFitter();
-  m_clusterTool  = m_rotCreator.GetCscClusterUtilTool();
-  m_stripFitter  = m_rotCreator.GetCalibCscStripFitter();
-
 }
 
 //******************************************************************************
@@ -150,7 +145,7 @@ StatusCode CscSegmentUtilTool::initialize()
   ATH_MSG_DEBUG ( "  ROT tan(theta) tolerance: "
                   << m_fitsegment_tantheta_tolerance );
   ATH_MSG_DEBUG ( " cluster_error_scaler " << m_cluster_error_scaler);
-  ATH_MSG_DEBUG ( "  Precision cluster fitter is " << m_pfitter_prec.typeAndName() );
+  //ATH_MSG_DEBUG ( "  Precision cluster fitter is " << m_rotCreator->GetICscClusterFitter().typeAndName() );
   ATH_MSG_DEBUG ( "  ROT creator: " << m_rotCreator.typeAndName() );
 
 
@@ -167,32 +162,18 @@ StatusCode CscSegmentUtilTool::initialize()
 
   m_phelper = m_gm->cscIdHelper();
 
-  
-  // Retrieve the precision cluster fitting tool.
-  if ( m_pfitter_prec.retrieve().isFailure() ) {
-    ATH_MSG_FATAL ( "Unable to retrieve CSC precision cluster fitting tool "
-                    << m_pfitter_prec->name() );
-    return StatusCode::FAILURE;
-  }else{
-    ATH_MSG_DEBUG( "Retrieved " << m_pfitter_prec );
-  }
-
   if ( m_rotCreator.retrieve().isFailure() ) {
     ATH_MSG_ERROR ( "Could not get " << m_rotCreator ); 
     return StatusCode::FAILURE;
   }else{
     ATH_MSG_DEBUG ( "Got " << m_rotCreator ); 
   }
+
   if ( m_idHelper.retrieve().isFailure() ) {
     ATH_MSG_ERROR ( "Could not get " << m_idHelper ); 
     return StatusCode::FAILURE;
   }
 
-  if(m_clusterTool.retrieve().isFailure() ){
-    ATH_MSG_ERROR( "Could not get "<< m_clusterTool );
-    return StatusCode::FAILURE;
-  }
-
   if ( m_cscCoolStrSvc.retrieve().isFailure() ) {
     ATH_MSG_FATAL ( "Unable to retrieve pointer to the CSC COLL Conditions Service" );
     return StatusCode::FAILURE;
@@ -383,7 +364,7 @@ fit_detailCalcPart1(const ICscSegmentFinder::TrkClusters& clus, const Amg::Vecto
     double d = Amg::error(clu->localCovariance(),Trk::locX);
     if (isunspoiled) {
       if ( IsSlopeGiven && outlierHitLayer != ( iclu - clus.begin() ) )
-        d = m_pfitter_prec->getCorrectedError(prd, s1);
+        d = m_rotCreator->GetICscClusterFitter()->getCorrectedError(prd, s1);
 //      if ( outlierHitLayer == ( iclu - clus.begin() ) )
 //        d = getDefaultError(id, measphi, prd);
     }
@@ -453,7 +434,7 @@ fit_detailCalcPart1(const ICscSegmentFinder::TrkClusters& clus, const Amg::Vecto
     double d = Amg::error(clu->localCovariance(),Trk::locX);
     if (isunspoiled) {
       if ( IsSlopeGiven )
-        d = m_pfitter_prec->getCorrectedError(prd, s1);
+        d = m_rotCreator->GetICscClusterFitter()->getCorrectedError(prd, s1);
       if ( outlierHitLayer == ( iclu - clus.begin() ) ) 
         d = getDefaultError(id, measphi, prd);
     }
@@ -1502,11 +1483,11 @@ void CscSegmentUtilTool::add_2dseg2hits(ICscSegmentFinder::Segments &segs, ICscS
         const Muon::CscClusterOnTrack* cot = iseg->clus[iclus].cl;
 	if(checkCrossTalk){
 	  const Muon::CscPrepData* prep = cot->prepRawData();
-	  std::vector<const Muon::CscStripPrepData*> strips = m_clusterTool->getStrips(prep);
+	  std::vector<const Muon::CscStripPrepData*> strips = m_rotCreator->GetICscClusterUtilTool()->getStrips(prep);
 	  std::vector<double> stripCharges;
 	  for (unsigned int s=0; s<strips.size(); ++s) {
 	    ICscClusterFitter::StripFit sfit;
-	    sfit = m_stripFitter->fit(*strips[s]);
+	    sfit = m_rotCreator->GetICscStripFitter()->fit(*strips[s]);
 	    stripCharges.push_back(sfit.charge);
 	  }
 	  double maxCharge=0,centCharge=0;
diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.h b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.h
index 2391d200167..4aee3db63ec 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerAlgs/CscSegmentMakers/src/CscSegmentUtilTool.h
@@ -17,7 +17,6 @@
 #include "xAODEventInfo/EventInfo.h"
 #include "StoreGate/ReadHandleKey.h"
 //#include "CscClusterization/CalibCscStripFitter.h"
-//#include "CscClusterization/ICscStripFitter.h"
 
 namespace MuonGM {
   class MuonDetectorManager;
@@ -29,12 +28,10 @@ namespace Trk {
 namespace Muon {
   class MuonIdHelperTool;
   class MuonSegment;
-  class IMuonClusterOnTrackCreator;
+  class ICscClusterOnTrackCreator;
   class CscPrepData;
 }
 class ICscSegmentFinder;
-class ICscClusterFitter;
-class ICscStripFitter;
 
 class CscSegmentUtilTool : virtual public ICscSegmentUtilTool, public AthAlgTool {
 
@@ -118,11 +115,9 @@ private:  // data
   bool m_remove3Overlap; 
   int  m_nunspoil;
  
-  ToolHandle<ICscClusterFitter> m_pfitter_prec;
-  ToolHandle<Muon::IMuonClusterOnTrackCreator> m_rotCreator;
+  ToolHandle<Muon::ICscClusterOnTrackCreator> m_rotCreator;
   ToolHandle<Muon::MuonIdHelperTool> m_idHelper;
-  ToolHandle<ICscClusterUtilTool> m_clusterTool;
-  ToolHandle<ICscStripFitter>   m_stripFitter;
+  
   ServiceHandle<MuonCalib::CscICoolStrSvc> m_cscCoolStrSvc;
 
   SG::ReadHandleKey<xAOD::EventInfo> m_eventInfo{this,"EventInfo","EventInfo","event info"};
-- 
GitLab