From d52e485ecefe85de2bc0e1fc7f1aac08407ff799 Mon Sep 17 00:00:00 2001
From: Susumu Oda <susumu.oda@cern.ch>
Date: Wed, 12 Dec 2018 17:10:54 +0000
Subject: [PATCH] Cleanup of SCT_RawDataToxAOD and SCT_PrepDataToxAOD
 (ATLASRECTS-4575)

Former-commit-id: 700afcce622b50c78b1083026c7bd58e25cf4ba4
---
 .../src/SCT_PrepDataToxAOD.cxx                | 258 ++++++++----------
 .../src/SCT_PrepDataToxAOD.h                  |  31 +--
 .../src/SCT_RawDataToxAOD.cxx                 |  19 +-
 .../src/SCT_RawDataToxAOD.h                   |  13 +-
 4 files changed, 135 insertions(+), 186 deletions(-)

diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx
index 7e1599127f1..38307125023 100644
--- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx
+++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -24,7 +24,7 @@
 #include "StoreGate/ReadHandle.h"
 #include "StoreGate/WriteHandle.h"
 
-#define AUXDATA(OBJ, TYP, NAME) \
+#define AUXDATA(OBJ, TYP, NAME)                                         \
   static const SG::AuxElement::Accessor<TYP> acc_##NAME (#NAME);  acc_##NAME(*(OBJ))
 
 /////////////////////////////////////////////////////////////////////
@@ -34,25 +34,9 @@
 /////////////////////////////////////////////////////////////////////
 SCT_PrepDataToxAOD::SCT_PrepDataToxAOD(const std::string &name, ISvcLocator *pSvcLocator) :
   AthAlgorithm(name,pSvcLocator),
-  m_SCTHelper(0),
-  m_firstEventWarnings(true)
+  m_SCTHelper{nullptr},
+  m_firstEventWarnings{true}
 { 
-  // --- Steering and configuration flags
-  declareProperty("UseTruthInfo", m_useTruthInfo=false);
-  declareProperty("WriteRDOinformation", m_writeRDOinformation =true);
-  declareProperty("WriteSDOs", m_writeSDOs = true);
-  declareProperty("WriteSiHits", m_writeSiHits = true);
-
-  // --- Configuration keys
-  declareProperty("SiClusterContainer",  m_clustercontainer = std::string("SCT_Clusters"));
-  declareProperty("MC_SDOs", m_SDOcontainer = std::string("SCT_SDO_Map"));
-  declareProperty("MC_Hits", m_sihitContainer = std::string("SCT_Hits"));
-  declareProperty("PRD_MultiTruth", m_multiTruth = std::string("PRD_MultiTruthSCT"));
-  declareProperty("SctRdoContainer", m_rdoContainer = std::string("SCT_RDOs"));
-  declareProperty("SctxAodContainer", m_xAodContainer = std::string("SCT_Clusters"));
-  declareProperty("SctxAodOffset", m_xAodOffset = std::string("SCT_ClustersOffsets"));
-
-  // --- Services and Tools
 }
 
 /////////////////////////////////////////////////////////////////////
@@ -62,20 +46,19 @@ SCT_PrepDataToxAOD::SCT_PrepDataToxAOD(const std::string &name, ISvcLocator *pSv
 /////////////////////////////////////////////////////////////////////
 StatusCode SCT_PrepDataToxAOD::initialize()
 {
-
   CHECK ( detStore()->retrieve(m_SCTHelper, "SCT_ID") );
 
   //make sure we don't write what we don't have
-  if (not  m_useTruthInfo) {
-    m_writeSDOs = false;
-    m_writeSiHits = false;
+  if (not  m_useTruthInfo.value()) {
+    m_writeSDOs.set(false);
+    m_writeSiHits.set(false);
   }
 
   ATH_CHECK( m_clustercontainer.initialize() );
-  ATH_CHECK( m_SDOcontainer.initialize(m_writeSDOs) );
-  ATH_CHECK( m_sihitContainer.initialize(m_writeSiHits) );
-  ATH_CHECK( m_multiTruth.initialize(m_useTruthInfo) );
-  ATH_CHECK( m_rdoContainer.initialize(m_writeRDOinformation) );
+  ATH_CHECK( m_SDOcontainer.initialize(m_writeSDOs.value()) );
+  ATH_CHECK( m_sihitContainer.initialize(m_writeSiHits.value()) );
+  ATH_CHECK( m_multiTruth.initialize(m_useTruthInfo.value()) );
+  ATH_CHECK( m_rdoContainer.initialize(m_writeRDOinformation.value()) );
   ATH_CHECK( m_xAodContainer.initialize() );
   ATH_CHECK( m_xAodOffset.initialize() );
 
@@ -93,37 +76,33 @@ StatusCode SCT_PrepDataToxAOD::execute()
 {     
   // the cluster ambiguity map
   std::map< Identifier, const SCT_RDORawData* > idToRAWDataMap;
-  if ( m_writeRDOinformation ) {
-      SG::ReadHandle<SCT_RDO_Container> rdoContainer(m_rdoContainer);
-      if( rdoContainer.isValid() )
-      {	
-	  // get all the RIO_Collections in the container
-	  for(const auto& collection: *rdoContainer ){
-	      
-	      //get all the RDOs in the collection
-	      for (const auto& rdo : *collection) {
-		  
-		  if ( !rdo) {
-		      ATH_MSG_WARNING( "Null SCT RDO. Skipping it");
-		      continue;
-		  }
-		  
-		  Identifier rdoId = rdo->identify();
-		  
-		  idToRAWDataMap.insert( std::pair< Identifier, const SCT_RDORawData*>( rdoId, rdo ) );
-	      } // collection
-	  } // Have container;
-      }
-      else if ( m_firstEventWarnings )
-      {
-	  ATH_MSG_WARNING( "Failed to retrieve SCT RDO container" );
-      }
+  if (m_writeRDOinformation.value()) {
+    SG::ReadHandle<SCT_RDO_Container> rdoContainer(m_rdoContainer);
+    if (rdoContainer.isValid()) {
+      // get all the RIO_Collections in the container
+      for (const auto& collection: *rdoContainer) {
+
+        //get all the RDOs in the collection
+        for (const auto& rdo : *collection) {
+
+          if (rdo==nullptr) {
+            ATH_MSG_WARNING( "Null SCT RDO. Skipping it");
+            continue;
+          }
+
+          Identifier rdoId = rdo->identify();
+          idToRAWDataMap.insert( std::pair< Identifier, const SCT_RDORawData*>( rdoId, rdo ) );
+        } // collection
+      } // Have container;
+    } else if ( m_firstEventWarnings ) {
+      ATH_MSG_WARNING( "Failed to retrieve SCT RDO container" );
+    }
   }
   ATH_MSG_DEBUG("Size of RDO map is "<<idToRAWDataMap.size());
 
   // Mandatory. This is needed and required if this algorithm is scheduled.
   SG::ReadHandle<InDet::SCT_ClusterContainer> sctClusterContainer(m_clustercontainer);
-  if( not sctClusterContainer.isValid() ) {
+  if (not sctClusterContainer.isValid()) {
     ATH_MSG_FATAL("Cannot retrieve SCT PrepDataContainer " << m_clustercontainer.key());
     return StatusCode::FAILURE;
   }
@@ -131,28 +110,27 @@ StatusCode SCT_PrepDataToxAOD::execute()
   // Create the xAOD container and its auxiliary store:
   SG::WriteHandle<xAOD::TrackMeasurementValidationContainer> xaod(m_xAodContainer);
   ATH_CHECK( xaod.record(std::make_unique<xAOD::TrackMeasurementValidationContainer>(),
-			 std::make_unique<xAOD::TrackMeasurementValidationAuxContainer>()) );
+                         std::make_unique<xAOD::TrackMeasurementValidationAuxContainer>()) );
   
   SG::WriteHandle<std::vector<unsigned int> > offsets(m_xAodOffset);
   ATH_CHECK( offsets.record(std::make_unique<std::vector<unsigned int> >( m_SCTHelper->wafer_hash_max(), 0 )) );
   
   // Loop over the container
   unsigned int counter(0);
-  for( const auto& clusterCollection : *sctClusterContainer){
+  for (const auto& clusterCollection : *sctClusterContainer) {
 
     //Fill Offset container
     (*offsets)[clusterCollection->identifyHash()] = counter;
     
     // skip empty collections
-    if( clusterCollection->empty() ) continue;
-
+    if (clusterCollection->empty()) continue;
          
     // loop over collection and convert to xAOD
-    for( const InDet::SCT_Cluster* prd : *clusterCollection ){
+    for (const InDet::SCT_Cluster* prd : *clusterCollection) {
       ++counter;
       
       Identifier clusterId = prd->identify();
-      if ( !clusterId.is_valid() ) {
+      if (not clusterId.is_valid()) {
         ATH_MSG_WARNING("SCT cluster identifier is not valid!");
       }
               
@@ -171,23 +149,19 @@ StatusCode SCT_PrepDataToxAOD::execute()
       const Amg::Vector2D& locpos = prd->localPosition();
       float locY(0.);
       float locX = locpos.x();
-      if ( !(std::isinf(locpos.y()) || std::isnan(locpos.y())) ){
-        if (locpos.y()>=1e-07)
-          locY=locpos.y();
+      if (not (std::isinf(locpos.y()) or std::isnan(locpos.y()))) {
+        if (locpos.y()>=1e-07) locY=locpos.y();
       } else { 
         locY = -9999.;
       }
 
       // Set local error matrix
-      xprd->setLocalPosition(locX,locY); 
-      
-
-      
+      xprd->setLocalPosition(locX,locY);
 
       const Amg::MatrixX& localCov = prd->localCovariance();
-      if(localCov.size() == 1){
-        xprd->setLocalPositionError( localCov(0,0), 0., 0. ); 
-      } else if(localCov.size() == 4){
+      if (localCov.size() == 1) {
+        xprd->setLocalPositionError( localCov(0,0), 0., 0. );
+      } else if (localCov.size() == 4) {
         xprd->setLocalPositionError( localCov(0,0), localCov(1,1), localCov(0,1) );
       } else {
         xprd->setLocalPositionError(0.,0.,0.);
@@ -195,7 +169,7 @@ StatusCode SCT_PrepDataToxAOD::execute()
          
       // Set vector of hit identifiers
       std::vector< uint64_t > rdoIdentifierList;
-      for( const auto &hitIdentifier : prd->rdoList() ){
+      for (const auto &hitIdentifier : prd->rdoList()) {
         rdoIdentifierList.push_back( hitIdentifier.get_compact() );
       }
       xprd->setRdoIdentifierList(rdoIdentifierList);
@@ -214,7 +188,7 @@ StatusCode SCT_PrepDataToxAOD::execute()
       // Add the Detector element ID  --  not sure if needed as we have the informations above
       const InDetDD::SiDetectorElement* de = prd->detectorElement();
       uint64_t detElementId(0);
-      if(de){
+      if (de) {
         Identifier detId = de->identify();
         if ( detId.is_valid() ) {
           detElementId = detId.get_compact();
@@ -223,40 +197,40 @@ StatusCode SCT_PrepDataToxAOD::execute()
       AUXDATA(xprd, uint64_t, detectorElementID) = detElementId;
    
       //Add details about the individual hits 
-      if(m_writeRDOinformation)
+      if (m_writeRDOinformation.value()) {
         addRDOInformation(xprd, prd, idToRAWDataMap);
-   
+      }
       
       // Use the MultiTruth Collection to get a list of all true particle contributing to the cluster
-      if(m_useTruthInfo){
-	SG::ReadHandle<PRD_MultiTruthCollection> prdmtColl(m_multiTruth);
-	if(prdmtColl.isValid()) {
-	  std::vector<int> barcodes;
-	  //std::pair<PRD_MultiTruthCollection::const_iterator,PRD_MultiTruthCollection::const_iterator>;
-	  auto range = prdmtColl->equal_range(clusterId);
-	  for (auto i = range.first; i != range.second; ++i) {
-	    barcodes.push_back( i->second.barcode() );
-	  }
-	  AUXDATA(xprd,  std::vector<int> , truth_barcode) = barcodes;
-	}
+      if (m_useTruthInfo.value()) {
+        SG::ReadHandle<PRD_MultiTruthCollection> prdmtColl(m_multiTruth);
+        if (prdmtColl.isValid()) {
+          std::vector<int> barcodes;
+          //std::pair<PRD_MultiTruthCollection::const_iterator,PRD_MultiTruthCollection::const_iterator>;
+          auto range = prdmtColl->equal_range(clusterId);
+          for (auto i = range.first; i != range.second; ++i) {
+            barcodes.push_back( i->second.barcode() );
+          }
+          AUXDATA(xprd,  std::vector<int> , truth_barcode) = barcodes;
+        }
       }
 
       // Use the SDO Collection to get a list of all true particle contributing to the cluster per readout element
       //  Also get the energy deposited by each true particle per readout element   
-      if( m_writeSDOs ){
-	SG::ReadHandle<InDetSimDataCollection> sdoCollection(m_SDOcontainer);
-	if( sdoCollection.isValid() ) {
-	  addSDOInformation( xprd, prd, &*sdoCollection);
-	}
+      if (m_writeSDOs.value()) {
+        SG::ReadHandle<InDetSimDataCollection> sdoCollection(m_SDOcontainer);
+        if (sdoCollection.isValid()) {
+          addSDOInformation( xprd, prd, &*sdoCollection);
+        }
       }
     
       // Now Get the most detailed truth from the SiHits
       // Note that this could get really slow if there are a lot of hits and clusters
-      if( m_writeSiHits ){
-	SG::ReadHandle<SiHitCollection> sihitCollection(m_sihitContainer);
-	if( sihitCollection.isValid() ) {
-	  addSiHitInformation( xprd, prd, &*sihitCollection); 
-	}
+      if (m_writeSiHits.value()) {
+        SG::ReadHandle<SiHitCollection> sihitCollection(m_sihitContainer);
+        if (sihitCollection.isValid()) {
+          addSiHitInformation( xprd, prd, &*sihitCollection);
+        }
       }
     }
   }
@@ -268,7 +242,6 @@ StatusCode SCT_PrepDataToxAOD::execute()
 }
 
 
-
 void SCT_PrepDataToxAOD::addSDOInformation( xAOD::TrackMeasurementValidation* xprd,
                                             const InDet::SCT_Cluster* prd,
                                             const InDetSimDataCollection* sdoCollection ) const
@@ -277,15 +250,15 @@ void SCT_PrepDataToxAOD::addSDOInformation( xAOD::TrackMeasurementValidation* xp
   std::vector< std::vector< int > > sdo_depositsBarcode;
   std::vector< std::vector< float > > sdo_depositsEnergy;
   // find hit
-  for( const auto &hitIdentifier : prd->rdoList() ){
+  for (const auto &hitIdentifier : prd->rdoList()) {
     auto pos = sdoCollection->find(hitIdentifier);
-    if( pos != sdoCollection->end() ) {
+    if (pos != sdoCollection->end()) {
       sdo_word.push_back( pos->second.word() ) ;
       
       std::vector< int > sdoDepBC;
       std::vector< float > sdoDepEnergy;
-      for( auto deposit : pos->second.getdeposits() ){
-        if(deposit.first){
+      for (auto deposit : pos->second.getdeposits()) {
+        if (deposit.first) {
           sdoDepBC.push_back( deposit.first->barcode());
         } else {
           sdoDepBC.push_back( -1 );
@@ -303,14 +276,10 @@ void SCT_PrepDataToxAOD::addSDOInformation( xAOD::TrackMeasurementValidation* xp
 }
 
 
-
 void  SCT_PrepDataToxAOD::addSiHitInformation( xAOD::TrackMeasurementValidation* xprd, 
                                                const InDet::SCT_Cluster* prd,
                                                const SiHitCollection* sihitCollection) const
-                             
-                             
 {
-
   std::vector<SiHit> matchingHits = findAllHitsCompatibleWithCluster(  prd, sihitCollection );
 
   int numHits = matchingHits.size();
@@ -329,8 +298,8 @@ void  SCT_PrepDataToxAOD::addSiHitInformation( xAOD::TrackMeasurementValidation*
 
   int hitNumber(0);
   const InDetDD::SiDetectorElement* de = prd->detectorElement();
-  if(de){
-    for ( auto sihit : matchingHits ) {          
+  if (de) {
+    for (auto sihit : matchingHits) {
       sihit_energyDeposit[hitNumber] =  sihit.energyLoss() ;
       sihit_meanTime[hitNumber] =  sihit.meanTime() ;
       sihit_barcode[hitNumber] =  sihit.particleLink().barcode() ;
@@ -365,13 +334,8 @@ void  SCT_PrepDataToxAOD::addSiHitInformation( xAOD::TrackMeasurementValidation*
   AUXDATA(xprd, std::vector<float> , sihit_endPosY) = sihit_endPosY;
   AUXDATA(xprd, std::vector<float> , sihit_endPosZ) = sihit_endPosZ;
 
-
 }
 
-
-
-
-
 std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const InDet::SCT_Cluster* prd, 
                                                                          const SiHitCollection* collection) const
 {
@@ -380,25 +344,24 @@ std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const I
     
   // Check if we have detector element  --  needed to find the local position of the SiHits
   const InDetDD::SiDetectorElement* de = prd->detectorElement();
-  if(!de)
-    return matchingHits;
+  if (de==nullptr) return matchingHits;
 
   std::vector<const SiHit* >  multiMatchingHits;
   
   for ( const auto&  siHit : *collection) {
     // Check if it is a SCT hit
-    if( !siHit.isSCT() )
-      continue;
+    if (not siHit.isSCT()) continue;
      
     //Check if it is on the correct module
     Identifier clusterId = prd->identify();
   
-    if( m_SCTHelper->barrel_ec(clusterId) != siHit.getBarrelEndcap() ||
-        m_SCTHelper->layer_disk(clusterId)!= siHit.getLayerDisk()    ||  
-        m_SCTHelper->phi_module(clusterId)!= siHit.getPhiModule()    ||
-        m_SCTHelper->eta_module(clusterId)!= siHit.getEtaModule()    ||
-        m_SCTHelper->side(clusterId)      != siHit.getSide()  ) 
-       continue;
+    if (m_SCTHelper->barrel_ec(clusterId) != siHit.getBarrelEndcap() or
+        m_SCTHelper->layer_disk(clusterId)!= siHit.getLayerDisk()    or
+        m_SCTHelper->phi_module(clusterId)!= siHit.getPhiModule()    or
+        m_SCTHelper->eta_module(clusterId)!= siHit.getEtaModule()    or
+        m_SCTHelper->side(clusterId)      != siHit.getSide()  ) {
+      continue;
+    }
 
     // Now we have all hits in the module that match lets check to see if they match the cluster
     // Must be within +/- 1 hits of any hit in the cluster to be included
@@ -409,13 +372,12 @@ std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const I
     Amg::Vector2D pos = de->hitLocalToLocal( averagePosition.z(), averagePosition.y() );
     InDetDD::SiCellId diode = de->cellIdOfPosition(pos);
    
-    for( const auto &hitIdentifier : prd->rdoList() ){
-      //if( abs( int(diode.etaIndex()) - m_SCTHelper->eta_index( hitIdentifier ) ) <=1 ) 
-      //if( abs( int(diode.phiIndex() - m_SCTHelper->phi_index( hitIdentifier ) ) <=1 ) 
+    for (const auto &hitIdentifier : prd->rdoList()) {
+      //if ( abs( int(diode.etaIndex()) - m_SCTHelper->eta_index( hitIdentifier ) ) <=1 )
+      //if ( abs( int(diode.phiIndex() - m_SCTHelper->phi_index( hitIdentifier ) ) <=1 )
       ATH_MSG_DEBUG("Truth Strip " <<  diode.phiIndex() << " Cluster Strip " <<   m_SCTHelper->strip( hitIdentifier ) );
 
-      if( abs( int(diode.phiIndex()) -  m_SCTHelper->strip( hitIdentifier ) ) <=1)
-      {
+      if ( abs( int(diode.phiIndex()) -  m_SCTHelper->strip( hitIdentifier ) ) <=1) {
         multiMatchingHits.push_back(&siHit);
         break;
       }     
@@ -431,32 +393,29 @@ std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const I
     const SiHit* lowestXPos = *siHitIter;
     const SiHit* highestXPos = *siHitIter;
 
-
     // We will merge these hits
     std::vector<const SiHit* > ajoiningHits;
     ajoiningHits.push_back( *siHitIter );
   
     siHitIter2 = siHitIter+1;
     while ( siHitIter2 != multiMatchingHits.end() ) {
-    // Need to come from the same truth particle 
-      if( (*siHitIter)->particleLink().barcode() != (*siHitIter2)->particleLink().barcode() ){
+      // Need to come from the same truth particle
+      if ((*siHitIter)->particleLink().barcode() != (*siHitIter2)->particleLink().barcode() ) {
         ++siHitIter2;
         continue;
       }
        
       // Check to see if the SiHits are compatible with each other.
-      if (fabs((highestXPos->localEndPosition().x()-(*siHitIter2)->localStartPosition().x()))<0.00005 &&
-          fabs((highestXPos->localEndPosition().y()-(*siHitIter2)->localStartPosition().y()))<0.00005 &&
-          fabs((highestXPos->localEndPosition().z()-(*siHitIter2)->localStartPosition().z()))<0.00005 )
-      {
+      if (fabs((highestXPos->localEndPosition().x()-(*siHitIter2)->localStartPosition().x()))<0.00005 and
+          fabs((highestXPos->localEndPosition().y()-(*siHitIter2)->localStartPosition().y()))<0.00005 and
+          fabs((highestXPos->localEndPosition().z()-(*siHitIter2)->localStartPosition().z()))<0.00005 ) {
         highestXPos = *siHitIter2;
         ajoiningHits.push_back( *siHitIter2 );
         // Dont use hit  more than once
         siHitIter2 = multiMatchingHits.erase( siHitIter2 );
-      }else if (fabs((lowestXPos->localStartPosition().x()-(*siHitIter2)->localEndPosition().x()))<0.00005 &&
-                fabs((lowestXPos->localStartPosition().y()-(*siHitIter2)->localEndPosition().y()))<0.00005 &&
-                fabs((lowestXPos->localStartPosition().z()-(*siHitIter2)->localEndPosition().z()))<0.00005)
-      {
+      } else if (fabs((lowestXPos->localStartPosition().x()-(*siHitIter2)->localEndPosition().x()))<0.00005 and
+                 fabs((lowestXPos->localStartPosition().y()-(*siHitIter2)->localEndPosition().y()))<0.00005 and
+                 fabs((lowestXPos->localStartPosition().z()-(*siHitIter2)->localEndPosition().z()))<0.00005) {
         lowestXPos = *siHitIter2;
         ajoiningHits.push_back( *siHitIter2 );
         // Dont use hit  more than once
@@ -466,21 +425,21 @@ std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const I
       }
     }
     
-    if( ajoiningHits.size() == 0){
+    if (ajoiningHits.size() == 0) {
       ATH_MSG_WARNING("This should really never happen");
       continue;
-    }else if(ajoiningHits.size() == 1){
+    } else if (ajoiningHits.size() == 1) {
       // Copy Si Hit ready to return
       matchingHits.push_back( *ajoiningHits[0] );
       continue;
     } else {
-    //  Build new SiHit and merge information together.  
+      //  Build new SiHit and merge information together.
       ATH_MSG_DEBUG("Merging " << ajoiningHits.size() << " SiHits together." );
       
       
-      float energyDep(0);
-      float time(0);
-      for( auto& siHit :  ajoiningHits){
+      float energyDep(0.);
+      float time(0.);
+      for (auto& siHit : ajoiningHits) {
         energyDep += siHit->energyLoss();
         time += siHit->meanTime();
       }
@@ -507,27 +466,25 @@ std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const I
 
 void SCT_PrepDataToxAOD::addRDOInformation(xAOD::TrackMeasurementValidation* xprd, 
                                            const InDet::SCT_Cluster* prd,
-                                           const std::map<Identifier, const SCT_RDORawData*>& idToRAWDataMap) const{
-
-
+                                           const std::map<Identifier, const SCT_RDORawData*>& idToRAWDataMap) const {
   std::vector<int> strip;
   std::vector<int> timebin;
   std::vector<int> groupsize;
   
-  for( const auto &hitIdentifier : prd->rdoList() ){
+  for (const auto &hitIdentifier : prd->rdoList()) {
     auto result = idToRAWDataMap.find(hitIdentifier);
-    if( result != idToRAWDataMap.end() ){
+    if (result != idToRAWDataMap.end() ) {
       const SCT_RDORawData *sctRdo = result->second;
       const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(sctRdo);
       int tbin(-1);
       int gs(-1);
-      if (rdo3!=0){
+      if (rdo3!=0) {
         tbin = rdo3->getTimeBin();
         gs = rdo3->getGroupSize();
       }
       timebin.push_back( tbin);
       groupsize.push_back( gs);
-      strip.push_back(m_SCTHelper->strip(sctRdo->identify())); 
+      strip.push_back(m_SCTHelper->strip(sctRdo->identify()));
     } else {
       timebin.push_back( -1 );
       strip.push_back( -1 );
@@ -538,7 +495,6 @@ void SCT_PrepDataToxAOD::addRDOInformation(xAOD::TrackMeasurementValidation* xpr
   AUXDATA(xprd,  std::vector<int> , rdo_strip) = strip;
   AUXDATA(xprd,  std::vector<int> , rdo_timebin) = timebin;
   AUXDATA(xprd,  std::vector<int> , rdo_groupsize) = groupsize;
-  
 }
 
 /////////////////////////////////////////////////////////////////////
diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h
index c1137285395..0ad7343f69f 100644
--- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h
+++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -25,11 +25,11 @@
 #include "StoreGate/ReadHandleKey.h"
 #include "StoreGate/WriteHandleKey.h"
 
+#include <atomic>
 #include <string>
 
 class SCT_ID;
 class SiHit;
-class InDetSimDataCollection;
 class SCT_RDORawData;
 class Identifier;
 
@@ -70,26 +70,25 @@ private:
  
  
   const SCT_ID *m_SCTHelper;
-  SG::ReadHandleKey<InDet::SCT_ClusterContainer>  m_clustercontainer;
-  SG::ReadHandleKey<InDetSimDataCollection>  m_SDOcontainer;
-  SG::ReadHandleKey<SiHitCollection>  m_sihitContainer;
-  SG::ReadHandleKey<PRD_MultiTruthCollection>  m_multiTruth;
-  SG::ReadHandleKey<SCT_RDO_Container>  m_rdoContainer;
-  SG::WriteHandleKey<xAOD::TrackMeasurementValidationContainer>  m_xAodContainer;
-  SG::WriteHandleKey<std::vector<unsigned int> >  m_xAodOffset;
+  SG::ReadHandleKey<InDet::SCT_ClusterContainer>  m_clustercontainer{this, "SiClusterContainer", "SCT_Clusters"};
+  SG::ReadHandleKey<InDetSimDataCollection>  m_SDOcontainer{this, "MC_SDOs", "SCT_SDO_Map"};
+  SG::ReadHandleKey<SiHitCollection>  m_sihitContainer{this, "MC_Hits", "SCT_Hits"};
+  SG::ReadHandleKey<PRD_MultiTruthCollection>  m_multiTruth{this, "PRD_MultiTruth", "PRD_MultiTruthSCT"};
+  SG::ReadHandleKey<SCT_RDO_Container>  m_rdoContainer{this, "SctRdoContainer", "SCT_RDOs"};
+  SG::WriteHandleKey<xAOD::TrackMeasurementValidationContainer>  m_xAodContainer{this, "SctxAodContainer", "SCT_Clusters"};
+  SG::WriteHandleKey<std::vector<unsigned int> >  m_xAodOffset{this, "SctxAodOffset", "SCT_ClustersOffsets"};
 
   // For P->T converter of SCT_Clusters
   SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
 
-  bool  m_useTruthInfo;
-  bool  m_writeRDOinformation;
-  bool  m_writeSDOs;
-  bool  m_writeSiHits;
+  BooleanProperty m_useTruthInfo{this, "UseTruthInfo", false};
+  BooleanProperty m_writeRDOinformation{this, "WriteRDOinformation", true};
+  BooleanProperty m_writeSDOs{this, "WriteSDOs", true};
+  BooleanProperty m_writeSiHits{this, "WriteSiHits", true};
   
   // --- private members
-  bool m_firstEventWarnings;
+  std::atomic_bool m_firstEventWarnings;
   
 };
 
-
-#endif 
+#endif // SCT_PREPDATATOXAOD_H
diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.cxx
index d94d5d63ecd..0fbcdfcfe2e 100644
--- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.cxx
+++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -9,26 +9,21 @@
 
 #include "SCT_RawDataToxAOD.h"
 
-#include "GaudiKernel/ServiceHandle.h"
+#include "InDetIdentifier/SCT_ID.h"
 #include "StoreGate/ReadHandle.h"
 #include "StoreGate/WriteHandle.h"
-
-#include "InDetIdentifier/SCT_ID.h"
-
 // xAOD container type
 #include "xAODTracking/SCTRawHitValidationAuxContainer.h"
 
 SCT_RawDataToxAOD::SCT_RawDataToxAOD(const std::string &name,
                                      ISvcLocator *pSvcLocator)
   : AthAlgorithm(name, pSvcLocator),
-    m_SCTHelper(0)
+    m_SCTHelper{nullptr}
 {
-  declareProperty("SctRdoContainer", m_rdoContainerName = std::string("SCT_RDOs"));
-  declareProperty("SctxAodRawHitContainer", m_xAodRawHitContainerName = std::string("SCT_RawHits"));
 }
 
 StatusCode SCT_RawDataToxAOD::initialize() {
-  CHECK(detStore()->retrieve(m_SCTHelper, "SCT_ID"));
+  ATH_CHECK(detStore()->retrieve(m_SCTHelper, "SCT_ID"));
   ATH_CHECK(m_rdoContainerName.initialize());
   ATH_CHECK(m_xAodRawHitContainerName.initialize());
   return StatusCode::SUCCESS;
@@ -47,8 +42,8 @@ StatusCode SCT_RawDataToxAOD::execute() {
 
   // Create the output xAOD container and its auxiliary store:
   SG::WriteHandle<xAOD::SCTRawHitValidationContainer> xaod(m_xAodRawHitContainerName);
-  ATH_CHECK( xaod.record(std::make_unique<xAOD::SCTRawHitValidationContainer>(), 
-			 std::make_unique<xAOD::SCTRawHitValidationAuxContainer>()) );
+  ATH_CHECK(xaod.record(std::make_unique<xAOD::SCTRawHitValidationContainer>(),
+                        std::make_unique<xAOD::SCTRawHitValidationAuxContainer>()));
 
   /// loop over input RDOs
   for (const SCT_RDO_Collection* collection : *rdoContainer) {
@@ -62,7 +57,7 @@ StatusCode SCT_RawDataToxAOD::execute() {
       xrdo->setWord(rdo->getWord());
       // setting additional decorations based on identifier
       bec_acc(*xrdo) = m_SCTHelper->barrel_ec(id);
-      layer_acc(*xrdo) = m_SCTHelper->layer_disk(id);   
+      layer_acc(*xrdo) = m_SCTHelper->layer_disk(id);
       phi_module_acc(*xrdo) = m_SCTHelper->phi_module(id);
       eta_module_acc(*xrdo) = m_SCTHelper->eta_module(id);
       side_acc(*xrdo) = m_SCTHelper->side(id);
diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.h b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.h
index cbfbc3a7459..68b635f6c75 100644
--- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.h
+++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_RawDataToxAOD.h
@@ -1,14 +1,12 @@
 // -*- C++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef SCT_RAWDATATOXAOD_H
 #define SCT_RAWDATATOXAOD_H
 
-#include <string>
-
 #include "AthenaBaseComps/AthAlgorithm.h"
 
 // StoreGate Data Handle Key
@@ -19,6 +17,8 @@
 // xAOD container type
 #include "xAODTracking/SCTRawHitValidationContainer.h"
 
+#include <string>
+
 class ISvcLocator;
 class SCT_ID;
 
@@ -35,9 +35,8 @@ public:
 private:
   const SCT_ID* m_SCTHelper;
 
-  std::string m_clustercontainer;
-  SG::ReadHandleKey<SCT_RDO_Container> m_rdoContainerName;
-  SG::WriteHandleKey<xAOD::SCTRawHitValidationContainer> m_xAodRawHitContainerName;
+  SG::ReadHandleKey<SCT_RDO_Container> m_rdoContainerName{this, "SctRdoContainer", "SCT_RDOs"};
+  SG::WriteHandleKey<xAOD::SCTRawHitValidationContainer> m_xAodRawHitContainerName{this, "SctxAodRawHitContainer", "SCT_RawHits"};
 };
 
-#endif
+#endif // SCT_RAWDATATOXAOD_H
-- 
GitLab