diff --git a/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp b/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp
index e3728357740c5001984f99b58fc1a12a8b090842..fd447fd4194b675ef3b1a6e571c16b4961e572d7 100644
--- a/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp
+++ b/Simulation/DetSimAna/src/Edm4hepWriterAnaElemTool.cpp
@@ -415,6 +415,7 @@ Edm4hepWriterAnaElemTool::PostUserTrackingAction(const G4Track* track) {
     int curparid = track->GetParentID();
     int idxedm4hep = -1;
 
+    // note: only the primary track can get the idxedm4hep from Event level User Info.
     if (m_userinfo) {
         idxedm4hep =  m_userinfo->idxG4Track2Edm4hep(curtrkid);
     }
@@ -544,6 +545,28 @@ Edm4hepWriterAnaElemTool::PostUserTrackingAction(const G4Track* track) {
 
     } else {
         // TODO: select other interested tracks
+
+        // extract the track level user info
+        auto trackinfo = dynamic_cast<CommonUserTrackInfo*>(track->GetUserInformation());
+        if (trackinfo) {
+            idxedm4hep = trackinfo->idxEdm4hep();
+
+            auto mc_particle = mcCol->at(idxedm4hep);
+
+            const G4ThreeVector& stop_pos  = track->GetPosition();
+            edm4hep::Vector3d endpoint(stop_pos.x()/CLHEP::mm,
+                                       stop_pos.y()/CLHEP::mm,
+                                       stop_pos.z()/CLHEP::mm);
+            mc_particle.setEndpoint(endpoint);
+
+            const G4ThreeVector& stop_mom = track->GetMomentum();
+
+            edm4hep::Vector3f mom_endpoint(stop_mom.x()/CLHEP::GeV,
+                                           stop_mom.y()/CLHEP::GeV,
+                                           stop_mom.z()/CLHEP::GeV);
+            mc_particle.setMomentumAtEndpoint(mom_endpoint);
+
+        }
     }
 
 }