diff --git a/benchmarks/B0/scripts/hits_far_forward_protons.cxx b/benchmarks/B0/scripts/hits_far_forward_protons.cxx
index aa877e88cea24c6aca00927abac02bc854a83558..cb6adfdcb9e2084c8b9b692167166f3a0f4ac87c 100644
--- a/benchmarks/B0/scripts/hits_far_forward_protons.cxx
+++ b/benchmarks/B0/scripts/hits_far_forward_protons.cxx
@@ -31,7 +31,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -54,7 +54,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/B0/scripts/rec_far_forward_protons.cxx b/benchmarks/B0/scripts/rec_far_forward_protons.cxx
index 4cd5d32102eeed30190d1fb2add2fa9591cf0a5d..e9c43514376022a6841d6494af6104edbab095f9 100644
--- a/benchmarks/B0/scripts/rec_far_forward_protons.cxx
+++ b/benchmarks/B0/scripts/rec_far_forward_protons.cxx
@@ -29,7 +29,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -52,7 +52,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/clustering/scripts/cluster_plots.py b/benchmarks/clustering/scripts/cluster_plots.py
index d5a890acbba2213adc8d0e923a6b4dc5cdb85804..29c2ebdd9cd26919f5f721e4e4984d58101b09ca 100644
--- a/benchmarks/clustering/scripts/cluster_plots.py
+++ b/benchmarks/clustering/scripts/cluster_plots.py
@@ -51,7 +51,7 @@ def flatten_collection(rdf, collection, cols=None):
 
 def thrown_particles_figure(rdf, save, mcbranch="mcparticles"):
     # define truth particle info
-    dft = flatten_collection(rdf, mcbranch, ['genStatus', 'pdgID', 'psx', 'psy', 'psz', 'mass'])
+    dft = flatten_collection(rdf, mcbranch, ['genStatus', 'pdgID', 'ps.x', 'ps.y', 'ps.z', 'mass'])
     dft.rename(columns={c: c.replace(mcbranch + '.', '') for c in dft.columns}, inplace=True)
     dft.rename(columns={c: c.replace(mcbranch + 'Info.', '') for c in dft.columns}, inplace=True)
     # select thrown particles
@@ -79,7 +79,7 @@ def thrown_particles_figure(rdf, save, mcbranch="mcparticles"):
 
     # calculate kinematics
     get_4vecs = np.vectorize(lambda x, y, z, m: ROOT.Math.PxPyPzMVector(x, y, z, m))
-    fourvecs = get_4vecs(*dft[['psx', 'psy', 'psz', 'mass']].values.T)
+    fourvecs = get_4vecs(*dft[['ps.x', 'ps.y', 'ps.z', 'mass']].values.T)
 
     dft.loc[:, 'p'] = [v.P() for v in fourvecs]
     dft.loc[:, 'eta'] = [v.Eta() for v in fourvecs]
diff --git a/benchmarks/imaging_ecal/scripts/utils.py b/benchmarks/imaging_ecal/scripts/utils.py
index d3847618b4cec578b3b53b52be833c5aa8ec042a..ca58634ad9353a0a709cca58ae1a8eceaba1c515 100644
--- a/benchmarks/imaging_ecal/scripts/utils.py
+++ b/benchmarks/imaging_ecal/scripts/utils.py
@@ -51,7 +51,7 @@ def get_mcp_data(path, evnums=None, branch='mcparticles2'):
         events.GetEntry(iev)
         # extract full mc particle data
         for part in getattr(events, branch):
-            dbuf[idb] = (iev, part.psx, part.psy, part.psz, part.pdgID, part.status)
+            dbuf[idb] = (iev, part.ps.x, part.ps.y, part.ps.z, part.pdgID, part.status)
             idb += 1
     return pd.DataFrame(data=dbuf[:idb], columns=['event', 'px', 'py', 'pz', 'pid', 'status'])
 
@@ -75,7 +75,7 @@ def get_mcp_simple(path, evnums=None, branch='mcparticles2'):
         events.GetEntry(iev)
         # extract full mc particle data
         part = getattr(events, branch)[2]
-        dbuf[idb] = (iev, part.psx, part.psy, part.psz, part.pdgID, part.status)
+        dbuf[idb] = (iev, part.ps.x, part.ps.y, part.ps.z, part.pdgID, part.status)
         idb += 1
     return pd.DataFrame(data=dbuf[:idb], columns=['event', 'px', 'py', 'pz', 'pid', 'status'])
 
diff --git a/benchmarks/imaging_shower_ML/scripts/prepare_tf_dataset.py b/benchmarks/imaging_shower_ML/scripts/prepare_tf_dataset.py
index 2b722a458596e0e9506af32db9cf719f442bc228..9355b5d94299f26735bdffb25f4dfb0778df1ccb 100644
--- a/benchmarks/imaging_shower_ML/scripts/prepare_tf_dataset.py
+++ b/benchmarks/imaging_shower_ML/scripts/prepare_tf_dataset.py
@@ -49,7 +49,7 @@ def get_mcp_simple(path, evnums=None, branch='mcparticles2'):
         events.GetEntry(iev)
         # extract full mc particle data
         part = getattr(events, branch)[2]
-        dbuf[idb] = (iev, part.psx, part.psy, part.psz, part.pdgID, part.status)
+        dbuf[idb] = (iev, part.ps.x, part.ps.y, part.ps.z, part.pdgID, part.status)
         idb += 1
     return pd.DataFrame(data=dbuf[:idb], columns=['event', 'px', 'py', 'pz', 'pid', 'status'])
 
diff --git a/benchmarks/tracking/scripts/hits_central_electrons.cxx b/benchmarks/tracking/scripts/hits_central_electrons.cxx
index a0d76fd458bed414d9996cb57e2d1190c87a0dbe..7e38cc88aea38933b9b0567bfc915198e72e779e 100644
--- a/benchmarks/tracking/scripts/hits_central_electrons.cxx
+++ b/benchmarks/tracking/scripts/hits_central_electrons.cxx
@@ -31,7 +31,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -54,7 +54,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/tracking/scripts/hits_central_pions.cxx b/benchmarks/tracking/scripts/hits_central_pions.cxx
index 2e97e0dfd3bb7659a3cd4b1dd02e86275bf3a5e9..0a70c5e487fa07404f524261ae9a4fe80f4d8b29 100644
--- a/benchmarks/tracking/scripts/hits_central_pions.cxx
+++ b/benchmarks/tracking/scripts/hits_central_pions.cxx
@@ -31,7 +31,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -54,7 +54,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/tracking/scripts/rec_central_electrons.cxx b/benchmarks/tracking/scripts/rec_central_electrons.cxx
index 89a4521b677d9102982003f69112261caf710c65..9bb12315020e3c8e8e1a62b8a2b7c3258e9e6533 100644
--- a/benchmarks/tracking/scripts/rec_central_electrons.cxx
+++ b/benchmarks/tracking/scripts/rec_central_electrons.cxx
@@ -29,7 +29,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -52,7 +52,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/tracking/scripts/rec_central_pions.cxx b/benchmarks/tracking/scripts/rec_central_pions.cxx
index 716a9a60c4ea67beca1d3e16f1da385d9ac676f2..f761b66f9399c00a312c5df73a485181a3445982 100644
--- a/benchmarks/tracking/scripts/rec_central_pions.cxx
+++ b/benchmarks/tracking/scripts/rec_central_pions.cxx
@@ -29,7 +29,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -52,7 +52,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/tracking/scripts/rec_multiple_tracks.cxx b/benchmarks/tracking/scripts/rec_multiple_tracks.cxx
index 9f0da77516241aefbf0fcb692248cd9934303b98..02bd77de9c2f6596303874e0a03c0ab4378e5ec1 100644
--- a/benchmarks/tracking/scripts/rec_multiple_tracks.cxx
+++ b/benchmarks/tracking/scripts/rec_multiple_tracks.cxx
@@ -29,7 +29,7 @@ auto p_track = [](std::vector<eic::TrackParametersData> const& in) {
 std::vector<float> pt (std::vector<dd4pod::Geant4ParticleData> const& in){
   std::vector<float> result;
   for (size_t i = 0; i < in.size(); ++i) {
-    result.push_back(std::sqrt(in[i].psx * in[i].psx + in[i].psy * in[i].psy));
+    result.push_back(std::sqrt(in[i].ps.x * in[i].ps.x + in[i].ps.y * in[i].ps.y));
   }
   return result;
 }
@@ -52,7 +52,7 @@ auto fourvec = [](ROOT::VecOps::RVec<dd4pod::Geant4ParticleData> const& in) {
   std::vector<ROOT::Math::PxPyPzMVector> result;
   ROOT::Math::PxPyPzMVector lv;
   for (size_t i = 0; i < in.size(); ++i) {
-    lv.SetCoordinates(in[i].psx, in[i].psy, in[i].psz, in[i].mass);
+    lv.SetCoordinates(in[i].ps.x, in[i].ps.y, in[i].ps.z, in[i].mass);
     result.push_back(lv);
   }
   return result;
diff --git a/benchmarks/tracking/scripts/tracking_performance.py b/benchmarks/tracking/scripts/tracking_performance.py
index 9c34738339696cdf528e140365969ba1f1f6c9d5..3166f92108aca57e65f6e02cfb5548c05f4d7d9d 100644
--- a/benchmarks/tracking/scripts/tracking_performance.py
+++ b/benchmarks/tracking/scripts/tracking_performance.py
@@ -50,7 +50,7 @@ def flatten_collection(rdf, collection, cols=None):
 
 def thrown_particles_figure(rdf, save, mcbranch="mcparticles2"):
     # define truth particle info
-    dft = flatten_collection(rdf, mcbranch, ['genStatus', 'pdgID', 'psx', 'psy', 'psz', 'mass'])
+    dft = flatten_collection(rdf, mcbranch, ['genStatus', 'pdgID', 'ps.x', 'ps.y', 'ps.z', 'mass'])
     dft.rename(columns={c: c.replace(mcbranch + '.', '') for c in dft.columns}, inplace=True)
     # select thrown particles
     dft = dft[dft['genStatus'] == 1]
@@ -79,7 +79,7 @@ def thrown_particles_figure(rdf, save, mcbranch="mcparticles2"):
 
     # calculate kinematics
     get_4vecs = np.vectorize(lambda x, y, z, m: ROOT.Math.PxPyPzMVector(x, y, z, m))
-    fourvecs = get_4vecs(*dft[['psx', 'psy', 'psz', 'mass']].values.T)
+    fourvecs = get_4vecs(*dft[['ps.x', 'ps.y', 'ps.z', 'mass']].values.T)
 
     dft.loc[:, 'p'] = [v.P() for v in fourvecs]
     dft.loc[:, 'theta'] = [v.Theta() for v in fourvecs]