diff --git a/Digitisers/DCHDigi/src/DCHDigiAlg.cpp b/Digitisers/DCHDigi/src/DCHDigiAlg.cpp
index df87532e842f8d8abce017c53944117e5e12367a..f179943a32f9831adcdb00a6b638dfb63132f7d3 100644
--- a/Digitisers/DCHDigi/src/DCHDigiAlg.cpp
+++ b/Digitisers/DCHDigi/src/DCHDigiAlg.cpp
@@ -86,9 +86,9 @@ StatusCode DCHDigiAlg::execute()
         tot_edep   += iter->second.at(i).getEDep();//GeV
         tot_length += iter->second.at(i).getPathLength();//mm
         tot_time += iter->second.at(i).getTime();
-        tot_x    += iter->second.at(i).getPosition()[0];
-        tot_y    += iter->second.at(i).getPosition()[1];
-        tot_z    += iter->second.at(i).getPosition()[2];
+        tot_x    += iter->second.at(i).getEDep()*iter->second.at(i).getPosition()[0];
+        tot_y    += iter->second.at(i).getEDep()*iter->second.at(i).getPosition()[1];
+        tot_z    += iter->second.at(i).getEDep()*iter->second.at(i).getPosition()[2];
  
         auto asso = AssoVec->create();
         asso.setRec(trkHit);
@@ -97,9 +97,9 @@ StatusCode DCHDigiAlg::execute()
     }
     
     trkHit.setTime(tot_time/simhit_size);
-    trkHit.setEDep(tot_edep/simhit_size);
-    trkHit.setEdx (tot_edep*1000/(tot_length/10) ); // MeV/cm
-    trkHit.setPosition (edm4hep::Vector3d(tot_x/simhit_size, tot_y/simhit_size, tot_z/simhit_size));
+    trkHit.setEDep(tot_edep);
+    trkHit.setEdx (tot_edep*1000/(tot_length/10) ); // MeV/cm, need check!
+    trkHit.setPosition (edm4hep::Vector3d(tot_x/tot_edep, tot_y/tot_edep, tot_z/tot_edep));//center mass
   }
   std::cout<<"output digi DCHhit size="<< Vec->size() <<std::endl;
   _nEvt ++ ;