From ad75c39af0153cd0da11fabfff0845f10cd00c6d Mon Sep 17 00:00:00 2001
From: lintao <lintao51@gmail.com>
Date: Sat, 25 Sep 2021 01:42:11 +0800
Subject: [PATCH] update silicon tracking.

---
 .../src/SiliconTrackingAlg.cpp                |  2 +-
 .../src/SpacePointBuilderAlg.cpp              | 19 +++++++++++++------
 .../SiliconTracking/src/TrackSubsetAlg.cpp    | 14 +++++++-------
 .../SiliconTracking/src/TrackSubsetAlg.h      |  5 +++--
 Utilities/KiTrack/include/ILDImpl/FTDHit01.h  |  2 +-
 Utilities/KiTrack/include/ILDImpl/IFTDHit.h   |  4 ++--
 Utilities/KiTrack/src/ILDImpl/FTDHit01.cc     |  2 +-
 7 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
index 88d71d3c..a3fde79c 100644
--- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp
@@ -660,7 +660,7 @@ int SiliconTrackingAlg::InitialiseVTX() {
     
     for (int ielem=0; ielem<nelem; ++ielem) {
     //for(auto hit : *hitVTXCol){ 
-      edm4hep::TrackerHit hit = hitVTXCol->at(ielem);
+      auto hit = hitVTXCol->at(ielem);
       //gear::Vector3D U(1.0,hit->getU()[1],hit->getU()[0],gear::Vector3D::spherical);
       //gear::Vector3D V(1.0,hit->getV()[1],hit->getV()[0],gear::Vector3D::spherical);
       gear::Vector3D U(1.0,hit.getCovMatrix()[1],hit.getCovMatrix()[0],gear::Vector3D::spherical);
diff --git a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
index 956b4251..fdd5118d 100644
--- a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp
@@ -108,10 +108,17 @@ StatusCode SpacePointBuilderAlg::execute(){
     
     unsigned nHits = hitCol->size();
     debug() << "Number of hits: " << nHits << endmsg;
+
+    if (!nHits) {
+        return sc;
+    }
+
+    auto tmpHit0 = hitCol->at(0);
     
     //store hits in map according to their CellID0
-    std::map<long long, std::vector<edm4hep::TrackerHit> > map_cellID0_hits;
-    std::map<long long, std::vector<edm4hep::TrackerHit> >::iterator it;
+    
+    std::map<long long, std::vector<decltype(tmpHit0)> > map_cellID0_hits;
+    decltype(map_cellID0_hits)::iterator it;
     for(auto trkHit : *hitCol){
       debug() << "Add hit with CellID0 = " << trkHit.getCellID() << " " << getCellID0Info( trkHit.getCellID() ) << endmsg;
       map_cellID0_hits[ trkHit.getCellID() ].push_back( trkHit );
@@ -121,14 +128,14 @@ StatusCode SpacePointBuilderAlg::execute(){
     // now loop over all CellID0s
     for( it= map_cellID0_hits.begin(); it!= map_cellID0_hits.end(); it++ ){
       rawStripHits += it->second.size();
-      std::vector<edm4hep::TrackerHit>& hitsFront = it->second;
+      auto hitsFront = it->second;
       unsigned long long cellID0 = it->first;
       //get the CellID0s at the back of this sensor
       std::vector<int> cellID0sBack = getCellID0sAtBack( cellID0 );
       
       for( unsigned i=0; i< cellID0sBack.size(); i++ ){ 
         int cellID0Back = cellID0sBack[i];
-        std::vector<edm4hep::TrackerHit>& hitsBack = map_cellID0_hits[ cellID0Back ];
+        auto hitsBack = map_cellID0_hits[ cellID0Back ];
         debug() << "strips: CellID0 " << cellID0  << " " << getCellID0Info( cellID0 )  << "(" << hitsFront.size()
 		<< " hits) <---> CellID0 " << cellID0Back << getCellID0Info( cellID0Back )
 		<< "(" << hitsBack.size() << " hits)" << endmsg
@@ -137,9 +144,9 @@ StatusCode SpacePointBuilderAlg::execute(){
         possibleSpacePoints += hitsFront.size() * hitsBack.size();
 	// Now iterate over all combinations and store those that make sense
         for( unsigned ifront=0; ifront<hitsFront.size(); ifront++ ){
-	  edm4hep::TrackerHit& hitFront = hitsFront[ifront];
+	  auto hitFront = hitsFront[ifront];
 	  for( unsigned j=0; j<hitsBack.size(); j++ ){
-	    edm4hep::TrackerHit& hitBack = hitsBack[j];
+	    auto hitBack = hitsBack[j];
 
 	    std::vector<edm4hep::ConstSimTrackerHit> simHitsFront;
 	    std::vector<edm4hep::ConstSimTrackerHit> simHitsBack;
diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
index 2efe0f52..3d049e6a 100644
--- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
+++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp
@@ -96,7 +96,7 @@ StatusCode TrackSubsetAlg::finalize(){
 }
 
 StatusCode TrackSubsetAlg::execute(){ 
-  std::vector<edm4hep::Track> tracks;
+  std::vector<edm4hep::ConstTrack> tracks;
 
   auto trkCol = _outColHdl.createAndPut();
   /**********************************************************************************************/
@@ -151,9 +151,9 @@ StatusCode TrackSubsetAlg::execute(){
   
   debug() << "The tracks and their qualities (and their hits ): " << endmsg;
 
-  std::vector<edm4hep::Track*> tracks_p;
+  std::vector<edm4hep::ConstTrack*> tracks_p;
   for( unsigned i=0; i < tracks.size(); i++ ){
-    edm4hep::Track* track = &tracks[i];
+    auto* track = &tracks[i];
     tracks_p.push_back(track);
     double qi = trackQI( track );
     debug() << "Track " << track->id() << " address " << track << "\t" << qi << "( ";
@@ -174,14 +174,14 @@ StatusCode TrackSubsetAlg::execute(){
   
   TrackCompatibility comp;
   
-  SubsetHopfieldNN<edm4hep::Track*> subset;
+  SubsetHopfieldNN<edm4hep::ConstTrack*> subset;
   //SubsetSimple<edm4hep::Track* > subset;
   subset.add( tracks_p );
   subset.setOmega( _omega );
   subset.calculateBestSet( comp, trackQI );
 
-  std::vector<edm4hep::Track*> accepted = subset.getAccepted();
-  std::vector<edm4hep::Track*> rejected = subset.getRejected();
+  auto accepted = subset.getAccepted();
+  auto rejected = subset.getRejected();
   
   debug() << "\tThe accepted tracks:" << endmsg;
   for( unsigned i=0; i < accepted.size(); i++ ){
@@ -203,7 +203,7 @@ StatusCode TrackSubsetAlg::execute(){
   for( unsigned i=0; i < accepted.size(); i++ ){
     edm4hep::Track trackImpl;
     
-    edm4hep::Track* track = accepted[i];
+    auto track = accepted[i];
     
     std::vector<edm4hep::ConstTrackerHit> trackerHitsObj;
     std::vector<edm4hep::ConstTrackerHit> trackerHits;
diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h
index c6e59d81..e6f710dd 100644
--- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h
+++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.h
@@ -5,6 +5,7 @@
 #include "GaudiAlg/GaudiAlgorithm.h"
 
 #include "edm4hep/TrackCollection.h"
+#include "edm4hep/TrackerHitCollection.h"
 //#include "edm4hep/Track.h"
 #include "TrackSystemSvc/IMarlinTrkSystem.h"
 
@@ -83,7 +84,7 @@ class TrackSubsetAlg : public GaudiAlgorithm {
 /** A functor to return whether two tracks are compatible: The criterion is if the share a TrackerHit or more */
 class TrackCompatibility{
  public:
-  inline bool operator()( edm4hep::Track* trackA, edm4hep::Track* trackB ){
+  inline bool operator()( edm4hep::ConstTrack* trackA, edm4hep::ConstTrack* trackB ){
     unsigned nHitsA = trackA->trackerHits_size();
     unsigned nHitsB = trackB->trackerHits_size();
     for( unsigned i=0; i < nHitsA; i++){
@@ -103,7 +104,7 @@ class TrackQI{
   /** @param trkSystem a pointer to an IMarlinTrkSystem, needed for fitting of tracks */
   TrackQI( MarlinTrk::IMarlinTrkSystem* trkSystem ): _trkSystem(trkSystem){}
   
-  inline double operator()( edm4hep::Track* track ){
+  inline double operator()( edm4hep::ConstTrack* track ){
     return ROOT::Math::chisquared_cdf_c( track->getChi2() , track->getNdf() );   
   }
   
diff --git a/Utilities/KiTrack/include/ILDImpl/FTDHit01.h b/Utilities/KiTrack/include/ILDImpl/FTDHit01.h
index 6750231e..66b975e5 100644
--- a/Utilities/KiTrack/include/ILDImpl/FTDHit01.h
+++ b/Utilities/KiTrack/include/ILDImpl/FTDHit01.h
@@ -14,7 +14,7 @@ namespace KiTrackMarlin{
   class FTDHit01 : public IFTDHit{
   public:
       
-    FTDHit01( edm4hep::TrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD );
+    FTDHit01( edm4hep::ConstTrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD );
   };
 }
 #endif
diff --git a/Utilities/KiTrack/include/ILDImpl/IFTDHit.h b/Utilities/KiTrack/include/ILDImpl/IFTDHit.h
index 33b817bf..cb497dfa 100644
--- a/Utilities/KiTrack/include/ILDImpl/IFTDHit.h
+++ b/Utilities/KiTrack/include/ILDImpl/IFTDHit.h
@@ -16,7 +16,7 @@ namespace KiTrackMarlin{
   class IFTDHit : public IHit{
   public:
         
-    edm4hep::TrackerHit* getTrackerHit() { return &_trackerHit; };
+    edm4hep::ConstTrackerHit* getTrackerHit() { return &_trackerHit; };
             
     int getSide() { return _side; }
     unsigned getModule() { return _module; }
@@ -31,7 +31,7 @@ namespace KiTrackMarlin{
     
   protected:
     
-    edm4hep::TrackerHit _trackerHit;
+    edm4hep::ConstTrackerHit _trackerHit;
             
     int _side;
     unsigned _layer;
diff --git a/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc b/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc
index a5eaab1c..5d53538c 100644
--- a/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc
+++ b/Utilities/KiTrack/src/ILDImpl/FTDHit01.cc
@@ -6,7 +6,7 @@
 using namespace KiTrackMarlin;
 
 
-FTDHit01::FTDHit01( edm4hep::TrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD ){
+FTDHit01::FTDHit01( edm4hep::ConstTrackerHit trackerHit , const SectorSystemFTD* const sectorSystemFTD ){
    
    
    _sectorSystemFTD = sectorSystemFTD;
-- 
GitLab