From 4600cf60d449ec14103c2a90192baa50dd42d7bf Mon Sep 17 00:00:00 2001
From: lintao <lintao51@gmail.com>
Date: Fri, 24 Sep 2021 23:18:56 +0800
Subject: [PATCH] update SimHitMergeAlg.

---
 Digitisers/SimHitMerge/src/SimHitMergeAlg.cpp | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/Digitisers/SimHitMerge/src/SimHitMergeAlg.cpp b/Digitisers/SimHitMerge/src/SimHitMergeAlg.cpp
index cdbcbfe2..5a447a9e 100644
--- a/Digitisers/SimHitMerge/src/SimHitMergeAlg.cpp
+++ b/Digitisers/SimHitMerge/src/SimHitMergeAlg.cpp
@@ -61,17 +61,26 @@ StatusCode SimHitMergeAlg::execute()
      for (unsigned int k0 = 0; k0 < m_inputColNames.size(); k0++)
      {
           std::map<unsigned long long, edm4hep::SimCalorimeterHit> id_hit_map;
-          std::map<unsigned long long, std::vector<edm4hep::SimCalorimeterHit> > test_id_hits_map;
           std::map<unsigned long long, std::vector<edm4hep::ConstCaloHitContribution> > id_vconb_map;
 	  edm4hep::SimCalorimeterHitCollection* mergedCol = m_OutputCollections[k0]->createAndPut();
 	  auto col = m_InputCollections[k0]->get();
           //std::cout<<"input="<<m_InputCollections[k0]->objKey()<<",size="<<col->size()<<std::endl;
+
+          if (col->size() == 0) { continue; }
+
+          auto Simhit0 = col->at(0);
+
+          std::map<unsigned long long, std::vector<decltype(Simhit0)> > test_id_hits_map;
+          
 	  for (auto Simhit: *col){
               auto id = Simhit.getCellID();
               if(Simhit.getEnergy() <=0 ) continue; 
               //std::cout<<"DD_sim_hit::ProcessHits, sp x="<<Simhit.getPosition()[0]<<", y="<<Simhit.getPosition()[1]<<", z="<<Simhit.getPosition()[2]<<",edep="<<Simhit.getEnergy()<<std::endl;
               if ( id_hit_map.find(id) != id_hit_map.end()) id_hit_map[id].setEnergy(id_hit_map[id].getEnergy() + Simhit.getEnergy());
-              else id_hit_map[id] = Simhit;
+              else {
+                  edm4hep::SimCalorimeterHit newSimhit(Simhit.getCellID(), Simhit.getEnergy(), Simhit.getPosition());
+                  id_hit_map[id] = newSimhit;
+              }
               std::vector<edm4hep::ConstCaloHitContribution> tmp_vconb ;
               for(int kk=0; kk<Simhit.contributions_size(); kk++){
                   tmp_vconb.push_back(Simhit.getContributions(kk));
@@ -91,7 +100,7 @@ StatusCode SimHitMergeAlg::execute()
           }
 
           if(m_sanity_check){
-              for(std::map<unsigned long long, std::vector<edm4hep::SimCalorimeterHit> >::iterator iter = test_id_hits_map.begin(); iter != test_id_hits_map.end(); iter++){
+              for(auto iter = test_id_hits_map.begin(); iter != test_id_hits_map.end(); iter++){
                   for(unsigned int i=0; i< iter->second.size(); i++){
                      float pos1_x = iter->second.at(i).getPosition()[0];
                      float pos1_y = iter->second.at(i).getPosition()[1];
@@ -110,9 +119,9 @@ StatusCode SimHitMergeAlg::execute()
           }
 
 
-          for(std::map<unsigned long long, edm4hep::SimCalorimeterHit>::iterator iter = id_hit_map.begin(); iter != id_hit_map.end(); iter++)
+          for(auto iter = id_hit_map.begin(); iter != id_hit_map.end(); iter++)
           {
-	       edm4hep::SimCalorimeterHit Simhit = iter->second ;
+	       auto Simhit = iter->second ;
                dd4hep::Position position = m_cellIDConverter->position(Simhit.getCellID());//cm
 	       edm4hep::Vector3f hitPos(position.x()/(dd4hep::mm), position.y()/(dd4hep::mm), position.z()/(dd4hep::mm));//to mm
                //std::cout<<"id="<<Simhit.getCellID()<<",hitPos.x="<<hitPos[0]<<",y="<<hitPos[1]<<",z="<<hitPos[2]<<",ori x="<<Simhit.getPosition()[0]<<",y="<<Simhit.getPosition()[1]<<",z="<<Simhit.getPosition()[2]<<std::endl;
-- 
GitLab