From b9b5fbfcfc04da79d26219102abc7ed31d7e45c9 Mon Sep 17 00:00:00 2001
From: Jing Chen <jing.chen@cern.ch>
Date: Wed, 22 May 2019 12:40:01 +0000
Subject: [PATCH] Apply sTGCSimHit and MMSimHit to "DetectorDescription"
 (ATLASSIM-3711, ATLASSIM-3755)

---
 .../GeoAdaptors/GeoAdaptors/GeoMuonHits.h     | 17 +++++----
 .../GeoAdaptors/GeoAdaptors/GeoMuonHits.icc   | 38 +++++++++----------
 .../src/MuonHitRelocation.cxx                 | 31 +++++++--------
 3 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.h b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.h
index 12aabea82b9..a6a683b7707 100755
--- a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.h
+++ b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef GEOADAPTORS_GEOMUONHITS_H
@@ -32,7 +32,8 @@ class MDTSimHit;
 class RPCSimHit;
 class TGCSimHit;
 class CSCSimHit;
-class GenericMuonSimHit;
+class sTGCSimHit;
+class MMSimHit;
 
 
 
@@ -156,7 +157,7 @@ class GeoMMHit {
  public:
 
   // Constructor:
-  GeoMMHit(const GenericMuonSimHit & h);
+  GeoMMHit(const MMSimHit & h);
 
   // Get the absolute global position:
   Amg::Vector3D getGlobalPosition() const;
@@ -168,7 +169,7 @@ class GeoMMHit {
   Amg::Vector3D getTrkGlobalPosition() const;
   
   // Underlying hit.
-  const GenericMuonSimHit &data() const { return *m_hit;}
+  const MMSimHit &data() const { return *m_hit;}
 
   // Is this hit OK?
   operator bool () const { return s_man; }
@@ -178,7 +179,7 @@ class GeoMMHit {
  private:
   static void init();
   
-  const GenericMuonSimHit *m_hit;
+  const MMSimHit *m_hit;
   static const MuonGM::MuonDetectorManager* s_man;
   static const MmIdHelper* s_mmID;
 
@@ -189,13 +190,13 @@ class GeosTGCHit {
  public:
 
   // Constructor:
-  GeosTGCHit(const GenericMuonSimHit & h);
+  GeosTGCHit(const sTGCSimHit & h);
 
   // Get the absolute global position:
   Amg::Vector3D getGlobalPosition() const;
 
   // Underlying hit.
-  const GenericMuonSimHit &data() const { return *m_hit;}
+  const sTGCSimHit &data() const { return *m_hit;}
 
   // Is this hit OK?
   operator bool () const { return s_man; }
@@ -205,7 +206,7 @@ class GeosTGCHit {
  private:
   static void init();
   
-  const GenericMuonSimHit *m_hit;
+  const sTGCSimHit *m_hit;
   static const MuonGM::MuonDetectorManager* s_man;
   static const sTgcIdHelper* s_stgcID;
 
diff --git a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.icc b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.icc
index 284b1c4588b..062e704e241 100755
--- a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.icc
+++ b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoMuonHits.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "StoreGate/StoreGateSvc.h"
@@ -38,8 +38,10 @@
 #include "MuonSimEvent/CscHitIdHelper.h"
 #include "MuonReadoutGeometry/CscReadoutElement.h"
 
-#include "MuonSimEvent/GenericMuonSimHitCollection.h"
-#include "MuonSimEvent/GenericMuonSimHit.h"
+#include "MuonSimEvent/MMSimHitCollection.h"
+#include "MuonSimEvent/MMSimHit.h"
+#include "MuonSimEvent/sTGCSimHitCollection.h"
+#include "MuonSimEvent/sTGCSimHit.h"
 #include "MuonSimEvent/MicromegasHitIdHelper.h"
 #include "MuonSimEvent/sTgcHitIdHelper.h"
 #include "MuonSimEvent/sTgcSimIdToOfflineId.h"
@@ -262,14 +264,14 @@ inline void GeoMMHit::init()
       s_mmID = s_man->mmIdHelper();
 }
 
-inline GeoMMHit::GeoMMHit (const GenericMuonSimHit & h) {
+inline GeoMMHit::GeoMMHit (const MMSimHit & h) {
     m_hit = &h;
     if (!s_mmID) init();
 }
 
 inline Amg::Vector3D GeoMMHit::getGlobalPosition() const {
 
-    HitID hitid = m_hit->GenericId();
+    HitID hitid = m_hit->MMId();
     MM_SimIdToOfflineId simToOffline(*s_mmID);
     Identifier offid = simToOffline.convert(hitid);
   
@@ -285,16 +287,14 @@ inline Amg::Vector3D GeoMMHit::getGlobalPosition() const {
         return Amg::Vector3D(0,0,0);
     }
 
-    Amg::Vector3D xU;
-    Amg::Vector3D localHit(m_hit->localPosition().x(),m_hit->localPosition().y(),m_hit->localPosition().z());
-    xU = mmdet->localToGlobalCoords(localHit,offid);
+    Amg::Vector3D xU(m_hit->globalPosition().x(),m_hit->globalPosition().y(),m_hit->globalPosition().z());
 
     return xU;
   
 }
 inline Amg::Vector3D GeoMMHit::getTrkGlobalPosition() const {
 
-    HitID hitid = m_hit->GenericId();
+    HitID hitid = m_hit->MMId();
     MM_SimIdToOfflineId simToOffline(*s_mmID);
     Identifier offid = simToOffline.convert(hitid);
   
@@ -317,8 +317,8 @@ inline Amg::Vector3D GeoMMHit::getTrkGlobalPosition() const {
 }
 inline Amg::Vector3D GeoMMHit::getTrkLocalPosition() const {
 
-/*
-    HitID hitid = m_hit->GenericId();
+
+    HitID hitid = m_hit->MMId();
     MM_SimIdToOfflineId simToOffline(*s_mmID);
     Identifier offid = simToOffline.convert(hitid);
   
@@ -331,12 +331,12 @@ inline Amg::Vector3D GeoMMHit::getTrkLocalPosition() const {
     {
         std::cerr<<"MM readout element not found for Id = "
                  <<s_mmID->show_to_string(offid)<<std::endl;
-        return Amg::Vector3D(0,0,0);
     }
 
-    Amg::Vector3D xU;
-*/
-    Amg::Vector3D localHit(0.,m_hit->localPosition().y(),m_hit->localPosition().z());
+    Amg::Transform3D gToL = mmdet->absTransform().inverse();
+    Amg::Vector3D hpos(m_hit->globalPosition().x(),m_hit->globalPosition().y(),m_hit->globalPosition().z());
+    Amg::Vector3D locp = gToL*hpos;
+    Amg::Vector3D localHit(0.,locp.y(),locp.z());
     Amg::Vector3D trkLocHit=Amg::AngleAxis3D(90.*CLHEP::deg,Amg::Vector3D(0.,1.,0.))*localHit;
 
     return trkLocHit;
@@ -348,14 +348,14 @@ inline void GeosTGCHit::init()
     if(detStore->retrieve(s_man,"Muon").isSuccess())
       s_stgcID = s_man->stgcIdHelper();
 }
-inline GeosTGCHit::GeosTGCHit (const GenericMuonSimHit & h) {
+inline GeosTGCHit::GeosTGCHit (const sTGCSimHit & h) {
     m_hit = &h;
     if (!s_stgcID) init();
 }
 
 inline Amg::Vector3D GeosTGCHit::getGlobalPosition() const {
 
-    HitID hitid = m_hit->GenericId();
+    HitID hitid = m_hit->sTGCId();
     sTgcSimIdToOfflineId simToOffline(*s_stgcID);
     Identifier offid = simToOffline.convert(hitid);
   
@@ -371,9 +371,7 @@ inline Amg::Vector3D GeosTGCHit::getGlobalPosition() const {
         return Amg::Vector3D(0,0,0);
     }
 
-    Amg::Vector3D xU;
-    Amg::Vector3D localHit(m_hit->localPosition().x(),m_hit->localPosition().y(),m_hit->localPosition().z());
-    xU = stgcdet->localToGlobalCoords(localHit,offid);
+    Amg::Vector3D xU(m_hit->globalPosition().x(),m_hit->globalPosition().y(),m_hit->globalPosition().z());
 
     return xU;
   
diff --git a/MuonSpectrometer/MuonGeoModelTest/src/MuonHitRelocation.cxx b/MuonSpectrometer/MuonGeoModelTest/src/MuonHitRelocation.cxx
index 277065c4aaf..0d4cea801ce 100644
--- a/MuonSpectrometer/MuonGeoModelTest/src/MuonHitRelocation.cxx
+++ b/MuonSpectrometer/MuonGeoModelTest/src/MuonHitRelocation.cxx
@@ -13,7 +13,8 @@
 #include "MuonSimEvent/RPCSimHitCollection.h"
 #include "MuonSimEvent/TGCSimHitCollection.h"
 #include "MuonSimEvent/CSCSimHitCollection.h"
-#include "MuonSimEvent/GenericMuonSimHitCollection.h"
+#include "MuonSimEvent/MMSimHitCollection.h"
+#include "MuonSimEvent/sTGCSimHitCollection.h"
 #include "MuonSimEvent/MDTSimHit.h"
 #include "MuonSimEvent/RPCSimHit.h"
 #include "MuonSimEvent/TGCSimHit.h"
@@ -436,10 +437,10 @@ StatusCode MuonHitRelocation::execute() {
       // 
       m_stmuonHelper=sTgcHitIdHelper::GetHelper();
 	
-      const DataHandle<GenericMuonSimHitCollection> stgc_collection;
+      const DataHandle<sTGCSimHitCollection> stgc_collection;
       if (evtStore()->retrieve(stgc_collection,"sTGCSensitiveDetector")==StatusCode::SUCCESS) {
-          ATH_MSG_VERBOSE("Generic Muon hit Collection sTGC found with size = "<<stgc_collection->size() );
-          for(GenericMuonSimHitConstIterator i_hit=stgc_collection->begin() ; i_hit!=stgc_collection->end() ; ++i_hit) {
+          ATH_MSG_VERBOSE("sTGC Muon hit Collection sTGC hit found with size = "<<stgc_collection->size() );
+          for(sTGCSimHitConstIterator i_hit=stgc_collection->begin() ; i_hit!=stgc_collection->end() ; ++i_hit) {
 	    
               GeosTGCHit ghit(*i_hit);
 
@@ -448,12 +449,12 @@ StatusCode MuonHitRelocation::execute() {
               m_c->theta = direction.theta();
               m_c->phi   = direction.phi();
       
-              m_c->lx = (*i_hit).localPosition().x();
-              m_c->ly = (*i_hit).localPosition().y();
-              m_c->lz = (*i_hit).localPosition().z();
+              m_c->lx = -999;
+              m_c->ly = -999;
+              m_c->lz = -999;
               ATH_MSG_DEBUG("        sTGC hit - local coords "<<m_c->lx<<" "<<m_c->ly<<" "<<m_c->lz );
 
-              const int idHit    = (*i_hit).GenericId();
+              const int idHit    = (*i_hit).sTGCId();
               //std::cout<<"TGC idHit = "<<idHit<<std::endl;
       
               Amg::Vector3D u = ghit.getGlobalPosition();
@@ -506,10 +507,10 @@ StatusCode MuonHitRelocation::execute() {
       // 
       m_mmmuonHelper=MicromegasHitIdHelper::GetHelper();
 	
-      const DataHandle<GenericMuonSimHitCollection> mm_collection;
+      const DataHandle<MMSimHitCollection> mm_collection;
       if (evtStore()->retrieve(mm_collection,"MicromegasSensitiveDetector")==StatusCode::SUCCESS) {
-          ATH_MSG_VERBOSE("Generic Muon hit Collection (Micromegas) found with size = "<<mm_collection->size() );
-          for(GenericMuonSimHitConstIterator i_hit=mm_collection->begin() ; i_hit!=mm_collection->end() ; ++i_hit) {
+          ATH_MSG_VERBOSE("MM Muon hit Collection (Micromegas) found with size = "<<mm_collection->size() );
+          for(MMSimHitConstIterator i_hit=mm_collection->begin() ; i_hit!=mm_collection->end() ; ++i_hit) {
 	    
               GeoMMHit ghit(*i_hit);
 
@@ -518,12 +519,12 @@ StatusCode MuonHitRelocation::execute() {
               m_c->theta = direction.theta();
               m_c->phi   = direction.phi();
       
-              m_c->lx = (*i_hit).localPosition().x();
-              m_c->ly = (*i_hit).localPosition().y();
-              m_c->lz = (*i_hit).localPosition().z();
+              m_c->lx = -999;
+              m_c->ly = -999;
+              m_c->lz = -999;
               ATH_MSG_DEBUG("        MM hit - local coords "<<m_c->lx<<" "<<m_c->ly<<" "<<m_c->lz );
 
-              const int idHit    = (*i_hit).GenericId();
+              const int idHit    = (*i_hit).MMId();
       
               Amg::Vector3D u = ghit.getGlobalPosition();
               m_c->x=u.x();
-- 
GitLab