diff --git a/Tracker/TrackerRecAlgs/PairVertex/CMakeLists.txt b/Tracker/TrackerRecAlgs/PairVertex/CMakeLists.txt
index 07e4fc4065838c8e54104fdbb25625c4b0bb2d21..9d4fc793d2c8c51d3a6a23b1fc299ea35d340057 100644
--- a/Tracker/TrackerRecAlgs/PairVertex/CMakeLists.txt
+++ b/Tracker/TrackerRecAlgs/PairVertex/CMakeLists.txt
@@ -6,10 +6,11 @@ atlas_add_component(
         src/PairVertexAlg.cxx
         src/component/PairVertex_entries.cxx
         LINK_LIBRARIES AthenaBaseComps StoreGateLib GeneratorObjects 
-        FaserActsGeometryLib TrackerSimEvent TrackerIdentifier 
+        FaserActsGeometryLib TrackerSimEvent TrackerIdentifier TrackerPrepRawData TrackerSimData
         TrackerReadoutGeometry TrkTrack GeoPrimitives TrackerRIO_OnTrack 
         xAODFaserWaveform  ScintIdentifier FaserCaloIdentifier
-        FaserActsKalmanFilterLib
+        FaserActsKalmanFilterLib 
+        
 )
 
 atlas_install_python_modules(python/*.py)
diff --git a/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.cxx b/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.cxx
index a44ba24c44f2b516d4f9a7769d8bad8b7405810e..be6c6fcb17102fb3631c5283a36e155a89603e2b 100644
--- a/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.cxx
+++ b/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.cxx
@@ -21,6 +21,7 @@
 
 #include <typeinfo>
 
+
 constexpr float NaN = std::numeric_limits<double>::quiet_NaN();
 
 namespace Tracker {
@@ -83,12 +84,17 @@ bool PairVertexAlg::waveformHitOK(const xAOD::WaveformHit* hit) const
 StatusCode PairVertexAlg::initialize() 
 {
   ATH_CHECK(m_mcEventCollectionKey.initialize());
+  ATH_CHECK(m_siHitCollectionKey.initialize());
+  ATH_CHECK( m_sctMap.initialize());
   ATH_CHECK(m_trackCollectionKey.initialize());
   ATH_CHECK(m_vetoNuContainer.initialize());
   ATH_CHECK(m_vetoContainer.initialize());
   ATH_CHECK(m_triggerContainer.initialize());
   ATH_CHECK(m_preshowerContainer.initialize());
   ATH_CHECK(m_ecalContainer.initialize());
+  ATH_CHECK(m_clusterContainer.initialize());
+  
+  
 
   ATH_CHECK(m_fiducialParticleTool.retrieve());
   ATH_CHECK(m_trackTruthMatchingTool.retrieve());
@@ -147,7 +153,7 @@ StatusCode PairVertexAlg::initialize()
 
   //TRUTH
   m_tree->Branch("tTrkBarcode", &m_truthBarcode); 
-  m_tree->Branch("tTrkPdg", &m_truthPdg); 
+  m_tree->Branch("tTrkPdg", &m_truthPdg);
 
   m_tree->Branch("vertexPos", &m_vertexPos); // [x,y,z]
   m_tree->Branch("isFiducial", &m_isFiducial);
@@ -182,6 +188,16 @@ StatusCode PairVertexAlg::initialize()
   m_tree->Branch("truthd1_IsFiducial", &m_truthd1_IsFiducial);
   m_tree->Branch("truthd1_charge", &m_truthd1_charge);
 
+  //Cluster
+  m_tree->Branch("clusterCount", &m_clusterCount);
+  m_tree->Branch("clusterEFracPos", &m_clusterEFracPos);
+  m_tree->Branch("clusterEFracNeg", &m_clusterEFracNeg);
+  m_tree->Branch("clusterETot", &m_clusterETot);
+  m_tree->Branch("clusterETotPos", &m_clusterETotPos);
+  m_tree->Branch("clusterETotNeg", &m_clusterETotNeg);
+  m_tree->Branch("clusterLocation", &m_clusterLocation);
+  m_tree->Branch("clusterIsDaughter", &m_clusterIsDaughter);
+
 
 
 
@@ -420,6 +436,74 @@ StatusCode PairVertexAlg::execute(const EventContext &ctx) const
         break;
     }
 
+
+    //CLUSTER-->RDO-->SiHit
+    SG::ReadHandle<Tracker::FaserSCT_ClusterContainer> clusterContainer { m_clusterContainer, ctx };
+    SG::ReadHandle<TrackerSimDataCollection> h_collectionMap(m_sctMap);
+    ATH_CHECK(clusterContainer.isValid());
+    ATH_CHECK(h_collectionMap.isValid());
+    int clustercount=0;
+    
+    //loop over all clusters
+    for (auto collection : *clusterContainer)
+    {
+      Identifier id = collection->identify();
+      int station = m_idHelper->station(id);
+
+      for (auto cluster : *collection)
+      {
+        Identifier clusterID = cluster->identify();
+        auto clusterRDOList = cluster->rdoList();
+        float TotalEnergyDeposited=0;
+        float TotalEnergyDeposited_daughterPos=0;
+        float TotalEnergyDeposited_daughterNeg=0;
+        bool isDaughter=false;
+        std::string clusterLocation = std::to_string(m_idHelper->station(clusterID))+' '+std::to_string(m_idHelper->layer(clusterID))+' '+std::to_string(m_idHelper->phi_module(clusterID))+' '+std::to_string(m_idHelper->eta_module(clusterID))+' '+std::to_string(m_idHelper->side(clusterID));
+        
+        //loop over all RDOs in the cluster
+        for (auto rdoID : clusterRDOList)
+        {
+          if (simDataCollection->count(idRDO) > 0)
+          {
+
+          
+           const auto& simdata = h_collectionMap->find(rdoID)->second;
+           const auto& deposits = simdata.getdeposits();
+           int barcode = 0;
+           HepMcParticleLink primary{};
+           for( const auto& depositPair : deposits)
+            {
+              barcode = depositPair.first->barcode();
+              
+              // int pdgID = 0//depositPair.first->pdg_id();
+              // float edeposit = 0.0//depositPair.second;
+
+              // TotalEnergyDeposited+=edeposit; //sum all deposited energies in RDO for each cluster
+
+              // if (barcode==2 || barcode==3) //its a daughter, do something.
+              // {
+              //   isDaughter=true;
+              //   if (pdgID>0){TotalEnergyDeposited_daughterNeg+=edeposit;}
+              //   if (pdgID<0){TotalEnergyDeposited_daughterPos+=edeposit;}
+              // }
+
+            }
+          // m_clusterETotPos.push_back(TotalEnergyDeposited_daughterPos);
+          // m_clusterETotNeg.push_back(TotalEnergyDeposited_daughterNeg);
+          // m_clusterETot.push_back(TotalEnergyDeposited);
+          // m_clusterEFracPos.push_back(TotalEnergyDeposited_daughterPos/TotalEnergyDeposited);
+          // m_clusterEFracNeg.push_back(TotalEnergyDeposited_daughterNeg/TotalEnergyDeposited);
+          // m_clusterLocation.push_back(clusterLocation);
+          // m_clusterIsDaughter.push_back(isDaughter);
+          }
+        }
+        clustercount++;
+      }
+      m_clusterCount=clustercount;
+
+    }
+
+
     m_tree->Fill();
 
     return StatusCode::SUCCESS;
@@ -503,6 +587,15 @@ void PairVertexAlg::clearTree() const
     m_truthd1_IsFiducial.clear();
     m_truthd1_charge.clear();
 
+    m_clusterCount=0;
+    m_clusterEFracPos.clear();
+    m_clusterEFracNeg.clear();
+    m_clusterETot.clear();
+    m_clusterETotPos.clear();
+    m_clusterETotNeg.clear();
+    m_clusterLocation.clear();
+    m_clusterIsDaughter.clear();
+
 }
 
 } // end Tracker
diff --git a/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.h b/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.h
index 3495c0ed4f9b1b96aee1e364c214336ef3eb328e..44442898e81699bfdbcc1718befb4da6aaa56545 100644
--- a/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.h
+++ b/Tracker/TrackerRecAlgs/PairVertex/src/PairVertexAlg.h
@@ -8,6 +8,10 @@ Copyright (C) 2022 CERN for the benefit of the FASER collaboration
 #include "GeoPrimitives/GeoPrimitives.h"
 #include "AthenaBaseComps/AthReentrantAlgorithm.h"
 #include "GeneratorObjects/McEventCollection.h"
+#include "TrackerSimEvent/FaserSiHitCollection.h"
+#include "TrackerSimData/TrackerSimDataCollection.h"
+#include "TrackerPrepRawData/FaserSCT_ClusterCollection.h"
+#include "TrackerPrepRawData/FaserSCT_ClusterContainer.h"
 #include "TrkTrack/TrackCollection.h"
 #include "xAODFaserWaveform/WaveformHit.h"
 #include "xAODFaserWaveform/WaveformHitContainer.h"
@@ -18,6 +22,7 @@ Copyright (C) 2022 CERN for the benefit of the FASER collaboration
 #include "xAODTruth/TruthEventContainer.h"
 
 #include <vector>
+#include <string> 
 #include "TTree.h"
 #include <TH1.h>
 #include <TProfile.h>
@@ -73,7 +78,10 @@ namespace Tracker
         
         const TrackerDD::SCT_DetectorManager* m_detMgr {nullptr};
         SG::ReadHandleKey<McEventCollection> m_mcEventCollectionKey { this, "McEventCollection", "TruthEvent" };
+        SG::ReadHandleKey<FaserSiHitCollection> m_siHitCollectionKey{this, "FaserSiHitCollection", "SCT_Hits"};
+        SG::ReadHandleKey<TrackerSimDataCollection> m_sctMap {this, "TrackerSimDataCollection", "SCT_SDO_Map"};
         SG::ReadHandleKey<TrackCollection> m_trackCollectionKey { this, "TrackCollection", "CKFTrackCollection" };
+        SG::ReadHandleKey<Tracker::FaserSCT_ClusterContainer> m_clusterContainer { this, "ClusterContainer", "SCT_ClusterContainer", "Tracker cluster container name" };
         SG::ReadHandleKey<xAOD::WaveformHitContainer> m_vetoNuContainer { this, "VetoNuContainer", "VetoNuWaveformHits", "VetoNu hit container name" };
         SG::ReadHandleKey<xAOD::WaveformHitContainer> m_vetoContainer { this, "VetoContainer", "VetoWaveformHits", "Veto hit container name" };
         SG::ReadHandleKey<xAOD::WaveformHitContainer> m_triggerContainer { this, "TriggerContainer", "TriggerWaveformHits", "Trigger hit container name" };
@@ -149,6 +157,7 @@ namespace Tracker
         mutable std::vector<int> m_truthParticleBarcode; // vector of barcodes of all truth particles with a momentum larger 50 GeV
         mutable std::vector<int> m_truthParticleMatchedTracks; // vector of number of tracks to which a truth particle is matched to
         mutable std::vector<bool> m_truthParticleIsFiducial; // vector of boolean showing whether a truth particle is fiducial
+        //mutable std::array<std::vector<HepGeom::Point3D<double>>, 12> m_truthHitMap{};
 
         mutable std::vector<int>    m_truthBarcode;
         mutable std::vector<int>    m_truthPdg;
@@ -192,6 +201,20 @@ namespace Tracker
         mutable std::vector<double> m_truthd1_IsFiducial;
         mutable std::vector<double> m_truthd1_charge;
 
+        mutable std::vector<int>    m_truthClusterSensor_d2;
+        mutable std::vector<int>    m_truthClusterSensor_d3;
+
+        //CLUSTER
+        mutable int m_clusterCount;
+        mutable std::vector<float> m_clusterEFracPos;
+        mutable std::vector<float> m_clusterEFracNeg;
+        mutable std::vector<float> m_clusterETot;
+        mutable std::vector<float> m_clusterETotPos;
+        mutable std::vector<float> m_clusterETotNeg;
+        mutable std::vector<std::string> m_clusterLocation;
+        mutable std::vector<bool> m_clusterIsDaughter;
+         
+
 
     };