From 5ea28f76a02687622f17248939f899f7bd40a089 Mon Sep 17 00:00:00 2001
From: Nicholas Styles <nicholas.styles@desy.de>
Date: Fri, 30 Jan 2015 17:42:16 +0100
Subject: [PATCH] add TRT shared hits (xAODTracking-00-13-05)

  * Add TRT shared hits to summary
  * Tagged as xAODTracking-00-13-05

2015-01-21 Nick Styles
  * Add protection for getting number of track parameters to avoid crashes running on ESD
  * Tagged as xAODTracking-00-13-04
---
 Event/xAOD/xAODTracking/Root/TrackParticleAuxContainer_v2.cxx  | 2 +-
 Event/xAOD/xAODTracking/Root/TrackParticle_v1.cxx              | 1 +
 Event/xAOD/xAODTracking/Root/TrackSummaryAccessors_v1.cxx      | 1 +
 Event/xAOD/xAODTracking/xAODTracking/TrackingPrimitives.h      | 3 ++-
 .../xAODTracking/versions/TrackParticleAuxContainer_v2.h       | 1 +
 5 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/Event/xAOD/xAODTracking/Root/TrackParticleAuxContainer_v2.cxx b/Event/xAOD/xAODTracking/Root/TrackParticleAuxContainer_v2.cxx
index f7ffc6f9db1..e8600e48fc6 100644
--- a/Event/xAOD/xAODTracking/Root/TrackParticleAuxContainer_v2.cxx
+++ b/Event/xAOD/xAODTracking/Root/TrackParticleAuxContainer_v2.cxx
@@ -82,7 +82,7 @@ namespace xAOD {
       AUX_VARIABLE( numberOfTRTDeadStraws             );
       AUX_VARIABLE( numberOfTRTTubeHits               );
       AUX_VARIABLE( numberOfTRTXenonHits              );
-
+      AUX_VARIABLE( numberOfTRTSharedHits              );
       AUX_VARIABLE( numberOfPrecisionLayers );
       AUX_VARIABLE( numberOfPrecisionHoleLayers );
       AUX_VARIABLE( numberOfPhiLayers );
diff --git a/Event/xAOD/xAODTracking/Root/TrackParticle_v1.cxx b/Event/xAOD/xAODTracking/Root/TrackParticle_v1.cxx
index 9261d3e013d..bfa20fbe1d3 100644
--- a/Event/xAOD/xAODTracking/Root/TrackParticle_v1.cxx
+++ b/Event/xAOD/xAODTracking/Root/TrackParticle_v1.cxx
@@ -246,6 +246,7 @@ namespace xAOD {
   size_t TrackParticle_v1::numberOfParameters() const{
     ///@todo - Can we do this in a better way? Not great to force retrieval of one specific parameter - any would do.
     static Accessor< std::vector<float>  > acc( "parameterX" );
+    if(! acc.isAvailable( *this )) return 0;
     return acc(*this).size();
   }
 
diff --git a/Event/xAOD/xAODTracking/Root/TrackSummaryAccessors_v1.cxx b/Event/xAOD/xAODTracking/Root/TrackSummaryAccessors_v1.cxx
index 2bfb84d53bd..edffa020f37 100644
--- a/Event/xAOD/xAODTracking/Root/TrackSummaryAccessors_v1.cxx
+++ b/Event/xAOD/xAODTracking/Root/TrackSummaryAccessors_v1.cxx
@@ -95,6 +95,7 @@ namespace xAOD {
         DEFINE_ACCESSOR( uint8_t, numberOfTRTDeadStraws             );
         DEFINE_ACCESSOR( uint8_t, numberOfTRTTubeHits               );
         DEFINE_ACCESSOR( uint8_t, numberOfTRTXenonHits              );
+	DEFINE_ACCESSOR( uint8_t, numberOfTRTSharedHits              );
         DEFINE_ACCESSOR( uint8_t, numberOfPrecisionLayers );
         DEFINE_ACCESSOR( uint8_t, numberOfPrecisionHoleLayers );
         DEFINE_ACCESSOR( uint8_t, numberOfPhiLayers );
diff --git a/Event/xAOD/xAODTracking/xAODTracking/TrackingPrimitives.h b/Event/xAOD/xAODTracking/xAODTracking/TrackingPrimitives.h
index 118e1d37491..ed2aba54f38 100644
--- a/Event/xAOD/xAODTracking/xAODTracking/TrackingPrimitives.h
+++ b/Event/xAOD/xAODTracking/xAODTracking/TrackingPrimitives.h
@@ -258,6 +258,7 @@ namespace xAOD {
     numberOfTRTDeadStraws           =37,  //!< number of dead TRT straws crossed [unit8_t].
     numberOfTRTTubeHits             =38,  //!< number of TRT tube hits [unit8_t].
     numberOfTRTXenonHits            =46,  //!< number of TRT hits on track in straws with xenon [unit8_t].
+    numberOfTRTSharedHits           =62,  //!< number of TRT hits used by more than one track
 
     // --- Muon Spectrometer
     numberOfPrecisionLayers = 7,       //!< layers with at least 3 hits [unit8_t].
@@ -277,7 +278,7 @@ namespace xAOD {
     eProbabilityBrem                = 50, //!< Electron probability from Brem fitting (DNA) [float].  
     pixeldEdx                       = 51, //!< the dE/dx estimate, calculated using the pixel clusters [?]
     // -- numbers...
-    numberOfTrackSummaryTypes       = 62
+    numberOfTrackSummaryTypes       = 63
   };
 
   /// Enumerates the different types of information stored in Summary. 
diff --git a/Event/xAOD/xAODTracking/xAODTracking/versions/TrackParticleAuxContainer_v2.h b/Event/xAOD/xAODTracking/xAODTracking/versions/TrackParticleAuxContainer_v2.h
index e976cd4df6e..64e81a6ac3b 100644
--- a/Event/xAOD/xAODTracking/xAODTracking/versions/TrackParticleAuxContainer_v2.h
+++ b/Event/xAOD/xAODTracking/xAODTracking/versions/TrackParticleAuxContainer_v2.h
@@ -134,6 +134,7 @@ namespace xAOD {
      std::vector< uint8_t >         numberOfTRTDeadStraws            ;
      std::vector< uint8_t >         numberOfTRTTubeHits              ;
      std::vector< uint8_t >         numberOfTRTXenonHits             ;
+     std::vector< uint8_t >         numberOfTRTSharedHits             ;
      
      std::vector< uint8_t >         numberOfPrecisionLayers;
      std::vector< uint8_t >         numberOfPrecisionHoleLayers;
-- 
GitLab