From bec720ed798cc56bfbfb54ebb986a12db04d88f1 Mon Sep 17 00:00:00 2001
From: Nick Styles <nicholas.styles@cern.ch>
Date: Fri, 2 Nov 2018 17:24:02 +0100
Subject: [PATCH] Add flag to toggle use of digital ROT creation (and include
 other changes from egamma fix in 21.0). Using this will save some CPU, but
 currently does not give optimal egamma performance - see ATLASRECTS-3949,
 ATLASRECTS-4573.

Set false by default for egamma tuning until GXF changes can be made to fully support use of PRDs properly.

Update

update
---
 .../python/InDetJobProperties.py              |  9 +++-
 .../share/InDetRecLoadTools.py                | 43 ++++++++++++-------
 .../InDetDenseEnvAmbiTrackSelectionTool.cxx   |  4 +-
 ...enseEnvironmentsAmbiguityProcessorTool.cxx | 11 ++++-
 4 files changed, 47 insertions(+), 20 deletions(-)

diff --git a/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py b/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py
index 34446ffa078..9b1cc0da380 100644
--- a/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py
+++ b/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py
@@ -1168,6 +1168,12 @@ class checkDeadElementsOnTrack(InDetFlagsJobProperty):
   allowedTypes = ['bool']
   StoredValue  = True
 
+class doDigitalROTCreation(InDetFlagsJobProperty): 
+  """use PixelClusterOnTrackToolDigital during ROT creation to save CPU""" 
+  statusOn     = True 
+  allowedTypes = ['bool']
+  StoredValue  = False
+
 
 ##-----------------------------------------------------------------------------
 ## 2nd step
@@ -2778,7 +2784,8 @@ _list_InDetJobProperties = [Enabled,
                             doParticleConversion,
                             doStoreTrackSeeds,
                             doHIP300,
-                            checkDeadElementsOnTrack
+                            checkDeadElementsOnTrack,
+                            doDigitalROTCreation
                            ]
 for j in _list_InDetJobProperties: 
     jobproperties.InDetJobProperties.add_JobProperty(j)
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py
index c3869db5a60..591e38058d8 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py
@@ -175,18 +175,23 @@ if InDetFlags.loadRotCreator():
             if InDetFlags.doDBM():
                 print PixelClusterOnTrackToolDBM
                 
-        PixelClusterOnTrackToolDigital = InDet__PixelClusterOnTrackTool("InDetPixelClusterOnTrackToolDigital",
-                                                                 LorentzAngleTool   = ToolSvc.PixelLorentzAngleTool,
-                                                                 DisableDistortions = (InDetFlags.doFatras() or InDetFlags.doDBMstandalone()),
-                                                                 applyNNcorrection = False,
-                                                                 NNIBLcorrection = False,
-                                                                 SplitClusterAmbiguityMap = InDetKeys.SplitClusterAmbiguityMap(),
-                                                                 RunningTIDE_Ambi = InDetFlags.doTIDE_Ambi(),
-                                                                 ErrorStrategy = 2,
-                                                                 PositionStrategy = 1 
-                                                                 )
+        if InDetFlags.doDigitalROTCreation():
 
-        ToolSvc += PixelClusterOnTrackToolDigital
+            PixelClusterOnTrackToolDigital = InDet__PixelClusterOnTrackTool("InDetPixelClusterOnTrackToolDigital",
+                                                                            LorentzAngleTool   = ToolSvc.PixelLorentzAngleTool,
+                                                                            DisableDistortions = (InDetFlags.doFatras() or InDetFlags.doDBMstandalone()),
+                                                                            applyNNcorrection = False,
+                                                                            NNIBLcorrection = False,
+                                                                            SplitClusterAmbiguityMap = InDetKeys.SplitClusterAmbiguityMap(),
+                                                                            RunningTIDE_Ambi = InDetFlags.doTIDE_Ambi(),
+                                                                            ErrorStrategy = 2,
+                                                                            PositionStrategy = 1 
+                                                                            )
+
+            ToolSvc += PixelClusterOnTrackToolDigital
+
+        else :
+          PixelClusterOnTrackToolDigital = None
     else:
         PixelClusterOnTrackTool = None
         PixelClusterOnTrackToolDigital = None
@@ -236,11 +241,17 @@ if InDetFlags.loadRotCreator():
         InDet_SeedToTrackConversion = InDet__SeedToTrackConversionTool( name = "InDet_SeedToTrackConversion")
         ToolSvc += InDet_SeedToTrackConversion
     
-    InDetRotCreatorDigital = Trk__RIO_OnTrackCreator(name             = 'InDetRotCreatorDigital',
-                                              ToolPixelCluster = PixelClusterOnTrackToolDigital,
-                                              ToolSCT_Cluster  = SCT_ClusterOnTrackTool,
-                                              Mode             = 'indet')
-    ToolSvc += InDetRotCreatorDigital
+    if PixelClusterOnTrackToolDigital != None :
+        InDetRotCreatorDigital = Trk__RIO_OnTrackCreator(name             = 'InDetRotCreatorDigital',
+                                                         ToolPixelCluster = PixelClusterOnTrackToolDigital,
+                                                         ToolSCT_Cluster  = SCT_ClusterOnTrackTool,
+                                                         Mode             = 'indet')
+        ToolSvc += InDetRotCreatorDigital
+
+    else:
+        
+        InDetRotCreatorDigital=InDetRotCreator
+
 
     #
     # --- configure broad cluster ROT creator
diff --git a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx
index ecf35181ca0..b18ffbb1488 100755
--- a/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetAmbiTrackSelectionTool/src/InDetDenseEnvAmbiTrackSelectionTool.cxx
@@ -1080,7 +1080,9 @@ bool InDet::InDetDenseEnvAmbiTrackSelectionTool::decideWhichHitsToKeep(const Trk
       lastbutonerot = lastrot;
       lastrot       = tsosDetails.RIO[index];
       lastrotindex  = index;   
-      continue;    
+      continue;
+    } else if (tsosDetails.type[index] == Outlier &&  tsosDetails.hitIsShared[index] <= 0){
+      continue;
     } else{ 
       if (m_monitorTracks)
         m_observerTool->rejectTrack(*ptrTrack, 106);		// rejection location 106: "Too many hits shared - we have to remove at least one PRD"
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
index 5885b4d530d..900859b0b5b 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
@@ -1286,7 +1286,10 @@ const Trk::Track* Trk::DenseEnvironmentsAmbiguityProcessorTool::refitPrds( const
     increment_by_eta(m_NbremFits,track);
 
     ATH_MSG_VERBOSE ("Brem track, refit with electron brem fit");
-    newTrack = fit(prds, *par, true, Trk::electron);
+    // TODO revert once GlobalChi2Fitter properly handles brem fits when 
+    //      starting from prds
+    // newTrack = fit(prds, *par, true, Trk::electron);
+    newTrack = fit(*track, true, Trk::electron);
 
   }
   else
@@ -1304,7 +1307,11 @@ const Trk::Track* Trk::DenseEnvironmentsAmbiguityProcessorTool::refitPrds( const
       increment_by_eta(m_NrecoveryBremFits,track);
 
       ATH_MSG_VERBOSE ("Normal fit failed, try brem recovery");
-      newTrack = fit(prds, *par, true, Trk::electron);
+      // TODO revert once GlobalChi2Fitter properly handles brem fits when 
+      //      starting from prds
+      // newTrack = fit(prds, *par, true, Trk::electron);
+      newTrack = fit(*track, true, Trk::electron);
+
     }
   }
   
-- 
GitLab