diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
index 5b789e0efcd210d77f2cba80d6a377cabafe8168..937b2e7e44dadaee6169cfd86d8d184ea9e16330 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
@@ -377,6 +377,32 @@ StatusCode NtupleDumperAlg::initialize()
   m_tree->Branch("truth_dec_z", &m_truth_dec_z);
   m_tree->Branch("truth_isFiducial", &m_truth_isFiducial);
 
+
+  m_tree->Branch("truth_st0_x", &m_truth_st_x[0]);
+  m_tree->Branch("truth_st0_y", &m_truth_st_y[0]);
+  m_tree->Branch("truth_st0_z", &m_truth_st_z[0]);
+  m_tree->Branch("truth_st1_x", &m_truth_st_x[1]);
+  m_tree->Branch("truth_st1_y", &m_truth_st_y[1]);
+  m_tree->Branch("truth_st1_z", &m_truth_st_z[1]);
+  m_tree->Branch("truth_st2_x", &m_truth_st_x[2]);
+  m_tree->Branch("truth_st2_y", &m_truth_st_y[2]);
+  m_tree->Branch("truth_st2_z", &m_truth_st_z[2]);
+  m_tree->Branch("truth_st3_x", &m_truth_st_x[3]);
+  m_tree->Branch("truth_st3_y", &m_truth_st_y[3]);
+  m_tree->Branch("truth_st3_z", &m_truth_st_z[3]);
+  m_tree->Branch("truth_st0_px", &m_truth_st_px[0]);
+  m_tree->Branch("truth_st0_py", &m_truth_st_py[0]);
+  m_tree->Branch("truth_st0_pz", &m_truth_st_pz[0]);
+  m_tree->Branch("truth_st1_px", &m_truth_st_px[1]);
+  m_tree->Branch("truth_st1_py", &m_truth_st_py[1]);
+  m_tree->Branch("truth_st1_pz", &m_truth_st_pz[1]);
+  m_tree->Branch("truth_st2_px", &m_truth_st_px[2]);
+  m_tree->Branch("truth_st2_py", &m_truth_st_py[2]);
+  m_tree->Branch("truth_st2_pz", &m_truth_st_pz[2]);
+  m_tree->Branch("truth_st3_px", &m_truth_st_px[3]);
+  m_tree->Branch("truth_st3_py", &m_truth_st_py[3]);
+  m_tree->Branch("truth_st3_pz", &m_truth_st_pz[3]);
+
   // for mother + daughter particle truth infomation 
 
   m_tree->Branch("truthM_P", &m_truthM_P);
@@ -764,6 +790,20 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
         m_truth_pdg.push_back(particle->pdgId());
         m_truth_isFiducial.push_back(m_fiducialParticleTool->isFiducial(particle->barcode()));
 
+        auto positions = m_fiducialParticleTool->getTruthPositions(particle->barcode()); // Add truth position information at each station
+        for (int station = 0; station < 4; ++station) {
+          m_truth_st_x[station].push_back(positions[station].x());
+          m_truth_st_y[station].push_back(positions[station].y());
+          m_truth_st_z[station].push_back(positions[station].z());
+        }
+
+        auto momenta = m_fiducialParticleTool->getTruthMomenta(particle->barcode()); //  Add truth momentum information at each station
+        for (int station = 0; station < 4; ++station) {
+          m_truth_st_px[station].push_back(momenta[station].x());
+          m_truth_st_py[station].push_back(momenta[station].y());
+          m_truth_st_pz[station].push_back(momenta[station].z());
+        }
+
         if ( particle->hasProdVtx()) {
           m_truth_prod_x.push_back(particle->prodVtx()->x());
           m_truth_prod_y.push_back(particle->prodVtx()->y());
@@ -1604,6 +1644,17 @@ NtupleDumperAlg::clearTree() const
   m_truth_dec_z.clear();
   m_truth_isFiducial.clear();
 
+  for (int station = 0; station < 4; ++station) {
+    m_truth_st_x[station].clear();
+    m_truth_st_y[station].clear();
+    m_truth_st_z[station].clear();
+  }
+  for (int station = 0; station < 4; ++station) {
+    m_truth_st_px[station].clear();
+    m_truth_st_py[station].clear();
+    m_truth_st_pz[station].clear();
+  }
+
   m_truthM_P.clear();
   m_truthM_px.clear();
   m_truthM_py.clear();
diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
index 0786017d3dc421f079a1dd12bf2cb4996c277dfc..c57c803ce12b75bb26d2518bbdc8c8d767e20aab 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.h
@@ -380,6 +380,13 @@ private:
   mutable std::vector<int> m_truth_pdg; // pdg of first 10 truth particles 
   mutable std::vector<bool> m_truth_isFiducial; // Boolean for if first 10 truth particles are fiducial
 
+  mutable std::array<std::vector<double>, 4> m_truth_st_x; // vector of the x components of the simulated hits of the truth particle for each station
+  mutable std::array<std::vector<double>, 4> m_truth_st_y; // vector of the y components of the simulated hits of the truth particle for each station
+  mutable std::array<std::vector<double>, 4> m_truth_st_z; // vector of the z components of the simulated hits of the truth particle for each station
+  mutable std::array<std::vector<double>, 4> m_truth_st_px; // x components of the true momentum at each station
+  mutable std::array<std::vector<double>, 4> m_truth_st_py; // y components of the true momentum at each station
+  mutable std::array<std::vector<double>, 4> m_truth_st_pz; // z components of the true momentum at each station
+
   mutable double m_truthLeptonMomentum; 
   mutable int    m_truthBarcode;
   mutable int    m_truthPdg;