diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h
index 50453e26cf7b4ce21ca8b3b4a6b4c70bceb19d40..892b15b98bf957186cdf64000a130ed2f51ea223 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/CombinatorialKalmanFilterAlg.h
@@ -64,6 +64,10 @@ public:
   virtual Acts::MagneticFieldContext getMagneticFieldContext(const EventContext& ctx) const;
 
  private:
+  size_t m_numberOfEvents {0};
+  size_t m_numberOfTrackSeeds {0};
+  size_t m_numberOfFittedTracks {0};
+  size_t m_numberOfSelectedTracks {0};
   void computeSharedHits(std::vector<IndexSourceLink>* sourceLinks, TrackFinderResult& results) const;
   std::shared_ptr<TrackFinderFunction> m_fit;
   std::unique_ptr<const Acts::Logger> m_logger;
@@ -79,6 +83,7 @@ public:
   Gaudi::Property<bool> m_resolvePassive {this, "resolvePassive", false};
   Gaudi::Property<bool> m_resolveMaterial {this, "resolveMaterial", true};
   Gaudi::Property<bool> m_resolveSensitive {this, "resolveSensitive", true};
+  Gaudi::Property<bool> m_noDiagnostics {this, "noDiagnostics", true, "Set ACTS logging level to INFO and do not run performance writer, states writer or summary writer"};
   Gaudi::Property<double> m_maxSteps {this, "maxSteps", 10000};
   Gaudi::Property<double> m_chi2Max {this, "chi2Max", 15};
   Gaudi::Property<unsigned long> m_nMax {this, "nMax", 10};
diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/PerformanceWriterTool.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/PerformanceWriterTool.h
index 037a7da407d4c09d2e4cd20cba31731af455f52d..198e4515988226e71e76c07b1a812ca00e64c641 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/PerformanceWriterTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/PerformanceWriterTool.h
@@ -33,6 +33,7 @@ private:
       this, "McEventCollection", "BeamTruthEvent"};
   ToolHandle<IFaserActsExtrapolationTool> m_extrapolationTool {
       this, "ExtrapolationTool", "FaserActsExtrapolationTool"};
+  Gaudi::Property<bool> m_noDiagnostics {this, "noDiagnostics", true, "Set ACTS logging level to INFO and do not run performance writer, states writer or summary writer"};
   Gaudi::Property<std::string> m_filePath{this, "FilePath", "performance_ckf.root"};
   TFile* m_outputFile{nullptr};
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectoryStatesWriterTool.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectoryStatesWriterTool.h
index 280762a89a23fdf0555615aa0a7e82c23d3ccfa5..ee8ef5d25a9f808d4ed8ae87787b437188969b49 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectoryStatesWriterTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectoryStatesWriterTool.h
@@ -40,6 +40,7 @@ private:
 
   const FaserSCT_ID* m_idHelper{nullptr};
   const TrackerDD::SCT_DetectorManager* m_detMgr {nullptr};
+  Gaudi::Property<bool> m_noDiagnostics {this, "noDiagnostics", true, "Set ACTS logging level to INFO and do not run performance writer, states writer or summary writer"};
   Gaudi::Property<std::string> m_filePath {this, "FilePath", "track_states_ckf.root", "Output root file"};
   Gaudi::Property<std::string> m_treeName {this, "TreeName", "tree", "Tree name"};
   Gaudi::Property<bool> m_mc {this, "MC", false};
diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectorySummaryWriterTool.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectorySummaryWriterTool.h
index 2ce72c2429164d9ff8af8e77cf95aaac36d8df26..33b5ee882b8a5f4358cb8b65203704f4bbd9c9a3 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectorySummaryWriterTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/RootTrajectorySummaryWriterTool.h
@@ -40,6 +40,7 @@ private:
   ToolHandle<IFaserActsExtrapolationTool> m_extrapolationTool {
       this, "ExtrapolationTool", "FaserActsExtrapolationTool"};
 
+  Gaudi::Property<bool> m_noDiagnostics {this, "noDiagnostics", true, "Set ACTS logging level to INFO and do not run performance writer, states writer or summary writer"};
   Gaudi::Property<std::string> m_filePath{this, "FilePath", "track_summary_ckf.root", "Output root file"};
   Gaudi::Property<std::string> m_treeName{this, "TreeName", "tree", "Tree name"};
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py b/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py
index 8021e9319d7dcf7d7205a0c1547f9bbffd4d5625..eff59e223aa10a06a3e1f7202f350f6d7cb58243 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py
+++ b/Tracking/Acts/FaserActsKalmanFilter/python/CombinatorialKalmanFilterConfig.py
@@ -52,20 +52,26 @@ def CombinatorialKalmanFilterCfg(flags, **kwargs):
     track_seed_tool.std_cluster = 0.023
     track_seed_tool.origin = 0
 
+    actsExtrapolationTool = CompFactory.FaserActsExtrapolationTool("FaserActsExtrapolationTool")
+    actsExtrapolationTool.MaxSteps = 1000
+    actsExtrapolationTool.TrackingGeometryTool = CompFactory.FaserActsTrackingGeometryTool("TrackingGeometryTool")
+
     trajectory_states_writer_tool = CompFactory.RootTrajectoryStatesWriterTool()
+    trajectory_states_writer_tool.noDiagnostics = kwargs["noDiagnostics"]
     trajectory_states_writer_tool.MC = True
 
     trajectory_summary_writer_tool = CompFactory.RootTrajectorySummaryWriterTool()
+    trajectory_summary_writer_tool .noDiagnostics = kwargs["noDiagnostics"]
 
-    actsExtrapolationTool = CompFactory.FaserActsExtrapolationTool("FaserActsExtrapolationTool")
-    actsExtrapolationTool.MaxSteps = 1000
-    actsExtrapolationTool.TrackingGeometryTool = CompFactory.FaserActsTrackingGeometryTool("TrackingGeometryTool")
     performance_writer_tool = CompFactory.PerformanceWriterTool("PerformanceWriterTool")
+    performance_writer_tool.noDiagnostics = kwargs["noDiagnostics"]
     performance_writer_tool.ExtrapolationTool = actsExtrapolationTool
 
+
     ckf = CompFactory.CombinatorialKalmanFilterAlg(**kwargs)
     ckf.TrackSeed = track_seed_tool
     ckf.ActsLogging = "INFO"
+    ckf.noDiagnostics = kwargs["noDiagnostics"]
     ckf.RootTrajectoryStatesWriterTool = trajectory_states_writer_tool
     ckf.RootTrajectorySummaryWriterTool = trajectory_summary_writer_tool
     ckf.PerformanceWriterTool = performance_writer_tool
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmanFilterAlg.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmanFilterAlg.cxx
index ebc292de212566ae8e79cc793eabcdc6e679c9fa..c565a135729fad666f5d1bdc4c2d6d4b5131579c 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmanFilterAlg.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/CombinatorialKalmanFilterAlg.cxx
@@ -36,22 +36,16 @@ StatusCode CombinatorialKalmanFilterAlg::initialize() {
   ATH_CHECK(m_trackingGeometryTool.retrieve());
   ATH_CHECK(m_trackSeedTool.retrieve());
   //  ATH_CHECK(m_trackCollection.initialize());
-  if (m_performanceWriter) {
-    ATH_CHECK(m_performanceWriterTool.retrieve());
-  }
-  if (m_statesWriter) {
-    ATH_CHECK(m_trajectoryStatesWriterTool.retrieve());
-  }
-  if (m_summaryWriter) {
-    ATH_CHECK(m_trajectorySummaryWriterTool.retrieve());
-  }
+  ATH_CHECK(m_performanceWriterTool.retrieve());
+  ATH_CHECK(m_trajectoryStatesWriterTool.retrieve());
+  ATH_CHECK(m_trajectorySummaryWriterTool.retrieve());
   ATH_CHECK(detStore()->retrieve(m_idHelper,"FaserSCT_ID"));
   m_fit = makeTrackFinderFunction(m_trackingGeometryTool->trackingGeometry(),
                                   m_resolvePassive, m_resolveMaterial, m_resolveSensitive);
   // FIXME fix Acts logging level
-  if (m_actsLogging == "VERBOSE") {
+  if (m_actsLogging == "VERBOSE" && !m_noDiagnostics) {
     m_logger = Acts::getDefaultLogger("KalmanFitter", Acts::Logging::VERBOSE);
-  } else if (m_actsLogging == "DEBUG") {
+  } else if (m_actsLogging == "DEBUG" && !m_noDiagnostics) {
     m_logger = Acts::getDefaultLogger("KalmanFitter", Acts::Logging::DEBUG);
   } else {
     m_logger = Acts::getDefaultLogger("KalmanFitter", Acts::Logging::INFO);
@@ -63,6 +57,7 @@ StatusCode CombinatorialKalmanFilterAlg::initialize() {
 StatusCode CombinatorialKalmanFilterAlg::execute() {
 
   const EventContext& ctx = Gaudi::Hive::currentContext();
+  m_numberOfEvents++;
 
   ATH_CHECK(m_trackCollection.initialize());
   SG::WriteHandle<TrackCollection> trackContainer{m_trackCollection,ctx};
@@ -109,22 +104,22 @@ StatusCode CombinatorialKalmanFilterAlg::execute() {
 
   // Perform the track finding for all initial parameters
   ATH_MSG_DEBUG("Invoke track finding with " << initialParameters->size() << " seeds.");
+  m_numberOfTrackSeeds += initialParameters->size();
   IndexSourceLinkContainer tmp;
   for (const auto& sl : *sourceLinks) {
     tmp.emplace_hint(tmp.end(), sl);
   }
   auto results = (*m_fit)(tmp, *initialParameters, options);
+  m_numberOfFittedTracks += results.size();
 
   std::vector<TrackQuality> trackQuality;
   selectTracks(results, trackQuality);
-  for (const auto& track : trackQuality) {
-    ATH_MSG_VERBOSE("?? " << track.nMeasurements << ", " << track.chi2);
-  }
 
   TrackFinderResult selectedResults;
   for (size_t i = 0; i < std::min(trackQuality.size(), (size_t)m_nTrajectories); ++i) {
     selectedResults.push_back(Acts::Result<Acts::CombinatorialKalmanFilterResult<IndexSourceLink>>(trackQuality[i].track));
   }
+  m_numberOfSelectedTracks += selectedResults.size();
   /*
   TrackFinderResult minTrackRequirements {};
   for (auto& result : results) {
@@ -201,13 +196,13 @@ StatusCode CombinatorialKalmanFilterAlg::execute() {
     }
   }
 
-  if (m_statesWriter) {
+  if (m_statesWriter && !m_noDiagnostics) {
     ATH_CHECK(m_trajectoryStatesWriterTool->write(geoctx, trajectories));
   }
-  if (m_summaryWriter) {
+  if (m_summaryWriter && !m_noDiagnostics) {
     ATH_CHECK(m_trajectorySummaryWriterTool->write(geoctx, trajectories));
   }
-  if  (m_performanceWriter) {
+  if  (m_performanceWriter && !m_noDiagnostics) {
     ATH_CHECK(m_performanceWriterTool->write(geoctx, trajectories));
   }
   ATH_CHECK(trackContainer.record(std::move(outputTracks)));
@@ -217,6 +212,11 @@ StatusCode CombinatorialKalmanFilterAlg::execute() {
 
 
 StatusCode CombinatorialKalmanFilterAlg::finalize() {
+  ATH_MSG_INFO("CombinatorialKalmanFilterAlg::finalize()");
+  ATH_MSG_INFO(m_numberOfEvents << " events processed.");
+  ATH_MSG_INFO(m_numberOfTrackSeeds << " seeds.");
+  ATH_MSG_INFO(m_numberOfFittedTracks << " fitted tracks.");
+  ATH_MSG_INFO(m_numberOfSelectedTracks << " good fitted tracks.");
   return StatusCode::SUCCESS;
 }
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/PerformanceWriterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/PerformanceWriterTool.cxx
index 3f99bea98466b59a4ccaa12c898c1f9660ca27bc..b01d58ed37c095c451c3f453cbbcc4f261945cec 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/PerformanceWriterTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/PerformanceWriterTool.cxx
@@ -11,43 +11,46 @@ PerformanceWriterTool::PerformanceWriterTool(
 
 
 StatusCode PerformanceWriterTool::initialize() {
-  ATH_CHECK(m_extrapolationTool.retrieve());
-  ATH_CHECK(m_mcEventCollectionKey.initialize());
-  ATH_CHECK(m_simDataCollectionKey.initialize());
-
-  std::string filePath = m_filePath;
-  m_outputFile = TFile::Open(filePath.c_str(), "RECREATE");
-  if (m_outputFile == nullptr) {
-    ATH_MSG_WARNING("Unable to open output file at " << m_filePath);
-    return StatusCode::RECOVERABLE;
-  }
+  if (!m_noDiagnostics) {
+    ATH_CHECK(m_extrapolationTool.retrieve());
+    ATH_CHECK(m_mcEventCollectionKey.initialize());
+    ATH_CHECK(m_simDataCollectionKey.initialize());
+
+    std::string filePath = m_filePath;
+    m_outputFile = TFile::Open(filePath.c_str(), "RECREATE");
+    if (m_outputFile == nullptr) {
+      ATH_MSG_WARNING("Unable to open output file at " << m_filePath);
+      return StatusCode::RECOVERABLE;
+    }
 
-  // initialize the residual and efficiency plots tool
-  m_resPlotTool.book(m_resPlotCache);
-  m_effPlotTool.book(m_effPlotCache);
-  m_summaryPlotTool.book(m_summaryPlotCache);
+    // initialize the residual and efficiency plots tool
+    m_resPlotTool.book(m_resPlotCache);
+    m_effPlotTool.book(m_effPlotCache);
+    m_summaryPlotTool.book(m_summaryPlotCache);
+  }
   return StatusCode::SUCCESS;
 }
 
 
 StatusCode PerformanceWriterTool::finalize() {
-  // fill residual and pull details into additional hists
-  m_resPlotTool.refinement(m_resPlotCache);
-  if (m_outputFile) {
-    m_outputFile->cd();
-    m_resPlotTool.write(m_resPlotCache);
-    m_effPlotTool.write(m_effPlotCache);
-    m_summaryPlotTool.write(m_summaryPlotCache);
-    ATH_MSG_VERBOSE("Wrote performance plots to '" << m_outputFile->GetPath() << "'");
-  }
+  if (!m_noDiagnostics) {
+    // fill residual and pull details into additional hists
+    m_resPlotTool.refinement(m_resPlotCache);
+    if (m_outputFile) {
+      m_outputFile->cd();
+      m_resPlotTool.write(m_resPlotCache);
+      m_effPlotTool.write(m_effPlotCache);
+      m_summaryPlotTool.write(m_summaryPlotCache);
+      ATH_MSG_VERBOSE("Wrote performance plots to '" << m_outputFile->GetPath() << "'");
+    }
 
-  m_resPlotTool.clear(m_resPlotCache);
-  m_effPlotTool.clear(m_effPlotCache);
-  m_summaryPlotTool.clear(m_summaryPlotCache);
-  if (m_outputFile) {
-    m_outputFile->Close();
+    m_resPlotTool.clear(m_resPlotCache);
+    m_effPlotTool.clear(m_effPlotCache);
+    m_summaryPlotTool.clear(m_summaryPlotCache);
+    if (m_outputFile) {
+      m_outputFile->Close();
+    }
   }
-
   return StatusCode::SUCCESS;
 }
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx
index e81f46ff6d2d87c96b9d86fba97982bbf01dc4cb..b857ce4788a0a8b51ad8bcc8080761bb732adac9 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx
@@ -23,184 +23,187 @@ RootTrajectoryStatesWriterTool::RootTrajectoryStatesWriterTool(
     : AthAlgTool(type, name, parent) {}
 
 StatusCode RootTrajectoryStatesWriterTool::initialize() {
-  ATH_CHECK(m_mcEventCollectionKey.initialize());
-  ATH_CHECK(m_simDataCollectionKey.initialize());
-  ATH_CHECK(m_faserSiHitKey.initialize());
-  ATH_CHECK(detStore()->retrieve(m_idHelper, "FaserSCT_ID"));
-  ATH_CHECK(detStore()->retrieve(m_detMgr, "SCT"));
-
-  std::string filePath = m_filePath;
-  std::string treeName = m_treeName;
-  m_outputFile = TFile::Open(filePath.c_str(), "RECREATE");
-  if (m_outputFile == nullptr) {
-    ATH_MSG_ERROR("Unable to open output file at " << m_filePath);
-    return StatusCode::FAILURE;
-  }
-  m_outputFile->cd();
-  m_outputTree = new TTree(treeName.c_str(), treeName.c_str());
-  if (m_outputTree == nullptr) {
-    ATH_MSG_ERROR("Unable to create TTree");
-    return StatusCode::FAILURE;
-  }
-
-  m_outputTree = new TTree("tree", "tree");
-
-  m_outputTree->Branch("event_nr", &m_eventNr);
-  m_outputTree->Branch("multiTraj_nr", &m_multiTrajNr);
-  m_outputTree->Branch("subTraj_nr", &m_subTrajNr);
-
-  m_outputTree->Branch("t_x", &m_t_x);
-  m_outputTree->Branch("t_y", &m_t_y);
-  m_outputTree->Branch("t_z", &m_t_z);
-  m_outputTree->Branch("t_dx", &m_t_dx);
-  m_outputTree->Branch("t_dy", &m_t_dy);
-  m_outputTree->Branch("t_dz", &m_t_dz);
-  m_outputTree->Branch("t_eLOC0", &m_t_eLOC0);
-  m_outputTree->Branch("t_eLOC1", &m_t_eLOC1);
-  m_outputTree->Branch("t_ePHI", &m_t_ePHI);
-  m_outputTree->Branch("t_eTHETA", &m_t_eTHETA);
-  m_outputTree->Branch("t_eQOP", &m_t_eQOP);
-  m_outputTree->Branch("t_eT", &m_t_eT);
-
-  m_outputTree->Branch("nStates", &m_nStates);
-  m_outputTree->Branch("nMeasurements", &m_nMeasurements);
-  m_outputTree->Branch("volume_id", &m_volumeID);
-  m_outputTree->Branch("layer_id", &m_layerID);
-  m_outputTree->Branch("module_id", &m_moduleID);
-  m_outputTree->Branch("station", &m_station);
-  m_outputTree->Branch("layer", &m_layer);
-  m_outputTree->Branch("phi_module", &m_phi_module);
-  m_outputTree->Branch("eta_module", &m_eta_module);
-  m_outputTree->Branch("side", &m_side);
-  m_outputTree->Branch("pathLength", &m_pathLength);
-  m_outputTree->Branch("l_x_hit", &m_lx_hit);
-  m_outputTree->Branch("l_y_hit", &m_ly_hit);
-  m_outputTree->Branch("g_x_hit", &m_x_hit);
-  m_outputTree->Branch("g_y_hit", &m_y_hit);
-  m_outputTree->Branch("g_z_hit", &m_z_hit);
-  m_outputTree->Branch("res_x_hit", &m_res_x_hit);
-  m_outputTree->Branch("res_y_hit", &m_res_y_hit);
-  m_outputTree->Branch("err_x_hit", &m_err_x_hit);
-  m_outputTree->Branch("err_y_hit", &m_err_y_hit);
-  m_outputTree->Branch("pull_x_hit", &m_pull_x_hit);
-  m_outputTree->Branch("pull_y_hit", &m_pull_y_hit);
-  m_outputTree->Branch("dim_hit", &m_dim_hit);
-
-  m_outputTree->Branch("nPredicted", &m_nParams[0]);
-  m_outputTree->Branch("predicted", &m_hasParams[0]);
-  m_outputTree->Branch("eLOC0_prt", &m_eLOC0[0]);
-  m_outputTree->Branch("eLOC1_prt", &m_eLOC1[0]);
-  m_outputTree->Branch("ePHI_prt", &m_ePHI[0]);
-  m_outputTree->Branch("eTHETA_prt", &m_eTHETA[0]);
-  m_outputTree->Branch("eQOP_prt", &m_eQOP[0]);
-  m_outputTree->Branch("eT_prt", &m_eT[0]);
-  m_outputTree->Branch("res_eLOC0_prt", &m_res_eLOC0[0]);
-  m_outputTree->Branch("res_eLOC1_prt", &m_res_eLOC1[0]);
-  m_outputTree->Branch("res_ePHI_prt", &m_res_ePHI[0]);
-  m_outputTree->Branch("res_eTHETA_prt", &m_res_eTHETA[0]);
-  m_outputTree->Branch("res_eQOP_prt", &m_res_eQOP[0]);
-  m_outputTree->Branch("res_eT_prt", &m_res_eT[0]);
-  m_outputTree->Branch("err_eLOC0_prt", &m_err_eLOC0[0]);
-  m_outputTree->Branch("err_eLOC1_prt", &m_err_eLOC1[0]);
-  m_outputTree->Branch("err_ePHI_prt", &m_err_ePHI[0]);
-  m_outputTree->Branch("err_eTHETA_prt", &m_err_eTHETA[0]);
-  m_outputTree->Branch("err_eQOP_prt", &m_err_eQOP[0]);
-  m_outputTree->Branch("err_eT_prt", &m_err_eT[0]);
-  m_outputTree->Branch("pull_eLOC0_prt", &m_pull_eLOC0[0]);
-  m_outputTree->Branch("pull_eLOC1_prt", &m_pull_eLOC1[0]);
-  m_outputTree->Branch("pull_ePHI_prt", &m_pull_ePHI[0]);
-  m_outputTree->Branch("pull_eTHETA_prt", &m_pull_eTHETA[0]);
-  m_outputTree->Branch("pull_eQOP_prt", &m_pull_eQOP[0]);
-  m_outputTree->Branch("pull_eT_prt", &m_pull_eT[0]);
-  m_outputTree->Branch("g_x_prt", &m_x[0]);
-  m_outputTree->Branch("g_y_prt", &m_y[0]);
-  m_outputTree->Branch("g_z_prt", &m_z[0]);
-  m_outputTree->Branch("px_prt", &m_px[0]);
-  m_outputTree->Branch("py_prt", &m_py[0]);
-  m_outputTree->Branch("pz_prt", &m_pz[0]);
-  m_outputTree->Branch("eta_prt", &m_eta[0]);
-  m_outputTree->Branch("pT_prt", &m_pT[0]);
-
-  m_outputTree->Branch("nFiltered", &m_nParams[1]);
-  m_outputTree->Branch("filtered", &m_hasParams[1]);
-  m_outputTree->Branch("eLOC0_flt", &m_eLOC0[1]);
-  m_outputTree->Branch("eLOC1_flt", &m_eLOC1[1]);
-  m_outputTree->Branch("ePHI_flt", &m_ePHI[1]);
-  m_outputTree->Branch("eTHETA_flt", &m_eTHETA[1]);
-  m_outputTree->Branch("eQOP_flt", &m_eQOP[1]);
-  m_outputTree->Branch("eT_flt", &m_eT[1]);
-  m_outputTree->Branch("res_eLOC0_flt", &m_res_eLOC0[1]);
-  m_outputTree->Branch("res_eLOC1_flt", &m_res_eLOC1[1]);
-  m_outputTree->Branch("res_ePHI_flt", &m_res_ePHI[1]);
-  m_outputTree->Branch("res_eTHETA_flt", &m_res_eTHETA[1]);
-  m_outputTree->Branch("res_eQOP_flt", &m_res_eQOP[1]);
-  m_outputTree->Branch("res_eT_flt", &m_res_eT[1]);
-  m_outputTree->Branch("err_eLOC0_flt", &m_err_eLOC0[1]);
-  m_outputTree->Branch("err_eLOC1_flt", &m_err_eLOC1[1]);
-  m_outputTree->Branch("err_ePHI_flt", &m_err_ePHI[1]);
-  m_outputTree->Branch("err_eTHETA_flt", &m_err_eTHETA[1]);
-  m_outputTree->Branch("err_eQOP_flt", &m_err_eQOP[1]);
-  m_outputTree->Branch("err_eT_flt", &m_err_eT[1]);
-  m_outputTree->Branch("pull_eLOC0_flt", &m_pull_eLOC0[1]);
-  m_outputTree->Branch("pull_eLOC1_flt", &m_pull_eLOC1[1]);
-  m_outputTree->Branch("pull_ePHI_flt", &m_pull_ePHI[1]);
-  m_outputTree->Branch("pull_eTHETA_flt", &m_pull_eTHETA[1]);
-  m_outputTree->Branch("pull_eQOP_flt", &m_pull_eQOP[1]);
-  m_outputTree->Branch("pull_eT_flt", &m_pull_eT[1]);
-  m_outputTree->Branch("g_x_flt", &m_x[1]);
-  m_outputTree->Branch("g_y_flt", &m_y[1]);
-  m_outputTree->Branch("g_z_flt", &m_z[1]);
-  m_outputTree->Branch("px_flt", &m_px[1]);
-  m_outputTree->Branch("py_flt", &m_py[1]);
-  m_outputTree->Branch("pz_flt", &m_pz[1]);
-  m_outputTree->Branch("eta_flt", &m_eta[1]);
-  m_outputTree->Branch("pT_flt", &m_pT[1]);
-
-  m_outputTree->Branch("nSmoothed", &m_nParams[2]);
-  m_outputTree->Branch("smoothed", &m_hasParams[2]);
-  m_outputTree->Branch("eLOC0_smt", &m_eLOC0[2]);
-  m_outputTree->Branch("eLOC1_smt", &m_eLOC1[2]);
-  m_outputTree->Branch("ePHI_smt", &m_ePHI[2]);
-  m_outputTree->Branch("eTHETA_smt", &m_eTHETA[2]);
-  m_outputTree->Branch("eQOP_smt", &m_eQOP[2]);
-  m_outputTree->Branch("eT_smt", &m_eT[2]);
-  m_outputTree->Branch("res_eLOC0_smt", &m_res_eLOC0[2]);
-  m_outputTree->Branch("res_eLOC1_smt", &m_res_eLOC1[2]);
-  m_outputTree->Branch("res_ePHI_smt", &m_res_ePHI[2]);
-  m_outputTree->Branch("res_eTHETA_smt", &m_res_eTHETA[2]);
-  m_outputTree->Branch("res_eQOP_smt", &m_res_eQOP[2]);
-  m_outputTree->Branch("res_eT_smt", &m_res_eT[2]);
-  m_outputTree->Branch("err_eLOC0_smt", &m_err_eLOC0[2]);
-  m_outputTree->Branch("err_eLOC1_smt", &m_err_eLOC1[2]);
-  m_outputTree->Branch("err_ePHI_smt", &m_err_ePHI[2]);
-  m_outputTree->Branch("err_eTHETA_smt", &m_err_eTHETA[2]);
-  m_outputTree->Branch("err_eQOP_smt", &m_err_eQOP[2]);
-  m_outputTree->Branch("err_eT_smt", &m_err_eT[2]);
-  m_outputTree->Branch("pull_eLOC0_smt", &m_pull_eLOC0[2]);
-  m_outputTree->Branch("pull_eLOC1_smt", &m_pull_eLOC1[2]);
-  m_outputTree->Branch("pull_ePHI_smt", &m_pull_ePHI[2]);
-  m_outputTree->Branch("pull_eTHETA_smt", &m_pull_eTHETA[2]);
-  m_outputTree->Branch("pull_eQOP_smt", &m_pull_eQOP[2]);
-  m_outputTree->Branch("pull_eT_smt", &m_pull_eT[2]);
-  m_outputTree->Branch("g_x_smt", &m_x[2]);
-  m_outputTree->Branch("g_y_smt", &m_y[2]);
-  m_outputTree->Branch("g_z_smt", &m_z[2]);
-  m_outputTree->Branch("px_smt", &m_px[2]);
-  m_outputTree->Branch("py_smt", &m_py[2]);
-  m_outputTree->Branch("pz_smt", &m_pz[2]);
-  m_outputTree->Branch("eta_smt", &m_eta[2]);
-  m_outputTree->Branch("pT_smt", &m_pT[2]);
-
-  m_outputTree->Branch("chi2", &m_chi2);
+  if (!m_noDiagnostics) {
+    ATH_CHECK(m_mcEventCollectionKey.initialize());
+    ATH_CHECK(m_simDataCollectionKey.initialize());
+    ATH_CHECK(m_faserSiHitKey.initialize());
+    ATH_CHECK(detStore()->retrieve(m_idHelper, "FaserSCT_ID"));
+    ATH_CHECK(detStore()->retrieve(m_detMgr, "SCT"));
+
+    std::string filePath = m_filePath;
+    std::string treeName = m_treeName;
+    m_outputFile = TFile::Open(filePath.c_str(), "RECREATE");
+    if (m_outputFile == nullptr) {
+      ATH_MSG_ERROR("Unable to open output file at " << m_filePath);
+      return StatusCode::FAILURE;
+    }
+    m_outputFile->cd();
+    m_outputTree = new TTree(treeName.c_str(), treeName.c_str());
+    if (m_outputTree == nullptr) {
+      ATH_MSG_ERROR("Unable to create TTree");
+      return StatusCode::FAILURE;
+    }
 
+    m_outputTree = new TTree("tree", "tree");
+
+    m_outputTree->Branch("event_nr", &m_eventNr);
+    m_outputTree->Branch("multiTraj_nr", &m_multiTrajNr);
+    m_outputTree->Branch("subTraj_nr", &m_subTrajNr);
+
+    m_outputTree->Branch("t_x", &m_t_x);
+    m_outputTree->Branch("t_y", &m_t_y);
+    m_outputTree->Branch("t_z", &m_t_z);
+    m_outputTree->Branch("t_dx", &m_t_dx);
+    m_outputTree->Branch("t_dy", &m_t_dy);
+    m_outputTree->Branch("t_dz", &m_t_dz);
+    m_outputTree->Branch("t_eLOC0", &m_t_eLOC0);
+    m_outputTree->Branch("t_eLOC1", &m_t_eLOC1);
+    m_outputTree->Branch("t_ePHI", &m_t_ePHI);
+    m_outputTree->Branch("t_eTHETA", &m_t_eTHETA);
+    m_outputTree->Branch("t_eQOP", &m_t_eQOP);
+    m_outputTree->Branch("t_eT", &m_t_eT);
+
+    m_outputTree->Branch("nStates", &m_nStates);
+    m_outputTree->Branch("nMeasurements", &m_nMeasurements);
+    m_outputTree->Branch("volume_id", &m_volumeID);
+    m_outputTree->Branch("layer_id", &m_layerID);
+    m_outputTree->Branch("module_id", &m_moduleID);
+    m_outputTree->Branch("station", &m_station);
+    m_outputTree->Branch("layer", &m_layer);
+    m_outputTree->Branch("phi_module", &m_phi_module);
+    m_outputTree->Branch("eta_module", &m_eta_module);
+    m_outputTree->Branch("side", &m_side);
+    m_outputTree->Branch("pathLength", &m_pathLength);
+    m_outputTree->Branch("l_x_hit", &m_lx_hit);
+    m_outputTree->Branch("l_y_hit", &m_ly_hit);
+    m_outputTree->Branch("g_x_hit", &m_x_hit);
+    m_outputTree->Branch("g_y_hit", &m_y_hit);
+    m_outputTree->Branch("g_z_hit", &m_z_hit);
+    m_outputTree->Branch("res_x_hit", &m_res_x_hit);
+    m_outputTree->Branch("res_y_hit", &m_res_y_hit);
+    m_outputTree->Branch("err_x_hit", &m_err_x_hit);
+    m_outputTree->Branch("err_y_hit", &m_err_y_hit);
+    m_outputTree->Branch("pull_x_hit", &m_pull_x_hit);
+    m_outputTree->Branch("pull_y_hit", &m_pull_y_hit);
+    m_outputTree->Branch("dim_hit", &m_dim_hit);
+
+    m_outputTree->Branch("nPredicted", &m_nParams[0]);
+    m_outputTree->Branch("predicted", &m_hasParams[0]);
+    m_outputTree->Branch("eLOC0_prt", &m_eLOC0[0]);
+    m_outputTree->Branch("eLOC1_prt", &m_eLOC1[0]);
+    m_outputTree->Branch("ePHI_prt", &m_ePHI[0]);
+    m_outputTree->Branch("eTHETA_prt", &m_eTHETA[0]);
+    m_outputTree->Branch("eQOP_prt", &m_eQOP[0]);
+    m_outputTree->Branch("eT_prt", &m_eT[0]);
+    m_outputTree->Branch("res_eLOC0_prt", &m_res_eLOC0[0]);
+    m_outputTree->Branch("res_eLOC1_prt", &m_res_eLOC1[0]);
+    m_outputTree->Branch("res_ePHI_prt", &m_res_ePHI[0]);
+    m_outputTree->Branch("res_eTHETA_prt", &m_res_eTHETA[0]);
+    m_outputTree->Branch("res_eQOP_prt", &m_res_eQOP[0]);
+    m_outputTree->Branch("res_eT_prt", &m_res_eT[0]);
+    m_outputTree->Branch("err_eLOC0_prt", &m_err_eLOC0[0]);
+    m_outputTree->Branch("err_eLOC1_prt", &m_err_eLOC1[0]);
+    m_outputTree->Branch("err_ePHI_prt", &m_err_ePHI[0]);
+    m_outputTree->Branch("err_eTHETA_prt", &m_err_eTHETA[0]);
+    m_outputTree->Branch("err_eQOP_prt", &m_err_eQOP[0]);
+    m_outputTree->Branch("err_eT_prt", &m_err_eT[0]);
+    m_outputTree->Branch("pull_eLOC0_prt", &m_pull_eLOC0[0]);
+    m_outputTree->Branch("pull_eLOC1_prt", &m_pull_eLOC1[0]);
+    m_outputTree->Branch("pull_ePHI_prt", &m_pull_ePHI[0]);
+    m_outputTree->Branch("pull_eTHETA_prt", &m_pull_eTHETA[0]);
+    m_outputTree->Branch("pull_eQOP_prt", &m_pull_eQOP[0]);
+    m_outputTree->Branch("pull_eT_prt", &m_pull_eT[0]);
+    m_outputTree->Branch("g_x_prt", &m_x[0]);
+    m_outputTree->Branch("g_y_prt", &m_y[0]);
+    m_outputTree->Branch("g_z_prt", &m_z[0]);
+    m_outputTree->Branch("px_prt", &m_px[0]);
+    m_outputTree->Branch("py_prt", &m_py[0]);
+    m_outputTree->Branch("pz_prt", &m_pz[0]);
+    m_outputTree->Branch("eta_prt", &m_eta[0]);
+    m_outputTree->Branch("pT_prt", &m_pT[0]);
+
+    m_outputTree->Branch("nFiltered", &m_nParams[1]);
+    m_outputTree->Branch("filtered", &m_hasParams[1]);
+    m_outputTree->Branch("eLOC0_flt", &m_eLOC0[1]);
+    m_outputTree->Branch("eLOC1_flt", &m_eLOC1[1]);
+    m_outputTree->Branch("ePHI_flt", &m_ePHI[1]);
+    m_outputTree->Branch("eTHETA_flt", &m_eTHETA[1]);
+    m_outputTree->Branch("eQOP_flt", &m_eQOP[1]);
+    m_outputTree->Branch("eT_flt", &m_eT[1]);
+    m_outputTree->Branch("res_eLOC0_flt", &m_res_eLOC0[1]);
+    m_outputTree->Branch("res_eLOC1_flt", &m_res_eLOC1[1]);
+    m_outputTree->Branch("res_ePHI_flt", &m_res_ePHI[1]);
+    m_outputTree->Branch("res_eTHETA_flt", &m_res_eTHETA[1]);
+    m_outputTree->Branch("res_eQOP_flt", &m_res_eQOP[1]);
+    m_outputTree->Branch("res_eT_flt", &m_res_eT[1]);
+    m_outputTree->Branch("err_eLOC0_flt", &m_err_eLOC0[1]);
+    m_outputTree->Branch("err_eLOC1_flt", &m_err_eLOC1[1]);
+    m_outputTree->Branch("err_ePHI_flt", &m_err_ePHI[1]);
+    m_outputTree->Branch("err_eTHETA_flt", &m_err_eTHETA[1]);
+    m_outputTree->Branch("err_eQOP_flt", &m_err_eQOP[1]);
+    m_outputTree->Branch("err_eT_flt", &m_err_eT[1]);
+    m_outputTree->Branch("pull_eLOC0_flt", &m_pull_eLOC0[1]);
+    m_outputTree->Branch("pull_eLOC1_flt", &m_pull_eLOC1[1]);
+    m_outputTree->Branch("pull_ePHI_flt", &m_pull_ePHI[1]);
+    m_outputTree->Branch("pull_eTHETA_flt", &m_pull_eTHETA[1]);
+    m_outputTree->Branch("pull_eQOP_flt", &m_pull_eQOP[1]);
+    m_outputTree->Branch("pull_eT_flt", &m_pull_eT[1]);
+    m_outputTree->Branch("g_x_flt", &m_x[1]);
+    m_outputTree->Branch("g_y_flt", &m_y[1]);
+    m_outputTree->Branch("g_z_flt", &m_z[1]);
+    m_outputTree->Branch("px_flt", &m_px[1]);
+    m_outputTree->Branch("py_flt", &m_py[1]);
+    m_outputTree->Branch("pz_flt", &m_pz[1]);
+    m_outputTree->Branch("eta_flt", &m_eta[1]);
+    m_outputTree->Branch("pT_flt", &m_pT[1]);
+
+    m_outputTree->Branch("nSmoothed", &m_nParams[2]);
+    m_outputTree->Branch("smoothed", &m_hasParams[2]);
+    m_outputTree->Branch("eLOC0_smt", &m_eLOC0[2]);
+    m_outputTree->Branch("eLOC1_smt", &m_eLOC1[2]);
+    m_outputTree->Branch("ePHI_smt", &m_ePHI[2]);
+    m_outputTree->Branch("eTHETA_smt", &m_eTHETA[2]);
+    m_outputTree->Branch("eQOP_smt", &m_eQOP[2]);
+    m_outputTree->Branch("eT_smt", &m_eT[2]);
+    m_outputTree->Branch("res_eLOC0_smt", &m_res_eLOC0[2]);
+    m_outputTree->Branch("res_eLOC1_smt", &m_res_eLOC1[2]);
+    m_outputTree->Branch("res_ePHI_smt", &m_res_ePHI[2]);
+    m_outputTree->Branch("res_eTHETA_smt", &m_res_eTHETA[2]);
+    m_outputTree->Branch("res_eQOP_smt", &m_res_eQOP[2]);
+    m_outputTree->Branch("res_eT_smt", &m_res_eT[2]);
+    m_outputTree->Branch("err_eLOC0_smt", &m_err_eLOC0[2]);
+    m_outputTree->Branch("err_eLOC1_smt", &m_err_eLOC1[2]);
+    m_outputTree->Branch("err_ePHI_smt", &m_err_ePHI[2]);
+    m_outputTree->Branch("err_eTHETA_smt", &m_err_eTHETA[2]);
+    m_outputTree->Branch("err_eQOP_smt", &m_err_eQOP[2]);
+    m_outputTree->Branch("err_eT_smt", &m_err_eT[2]);
+    m_outputTree->Branch("pull_eLOC0_smt", &m_pull_eLOC0[2]);
+    m_outputTree->Branch("pull_eLOC1_smt", &m_pull_eLOC1[2]);
+    m_outputTree->Branch("pull_ePHI_smt", &m_pull_ePHI[2]);
+    m_outputTree->Branch("pull_eTHETA_smt", &m_pull_eTHETA[2]);
+    m_outputTree->Branch("pull_eQOP_smt", &m_pull_eQOP[2]);
+    m_outputTree->Branch("pull_eT_smt", &m_pull_eT[2]);
+    m_outputTree->Branch("g_x_smt", &m_x[2]);
+    m_outputTree->Branch("g_y_smt", &m_y[2]);
+    m_outputTree->Branch("g_z_smt", &m_z[2]);
+    m_outputTree->Branch("px_smt", &m_px[2]);
+    m_outputTree->Branch("py_smt", &m_py[2]);
+    m_outputTree->Branch("pz_smt", &m_pz[2]);
+    m_outputTree->Branch("eta_smt", &m_eta[2]);
+    m_outputTree->Branch("pT_smt", &m_pT[2]);
+
+    m_outputTree->Branch("chi2", &m_chi2);
+  }
   return StatusCode::SUCCESS;
 }
 
 
 StatusCode RootTrajectoryStatesWriterTool::finalize() {
-  m_outputFile->cd();
-  m_outputTree->Write();
-  m_outputFile->Close();
+  if (!m_noDiagnostics) {
+    m_outputFile->cd();
+    m_outputTree->Write();
+    m_outputFile->Close();
+  }
   return StatusCode::SUCCESS;
 }
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx
index e3251a8098f29661776da8350fff4b26585cdc79..2d8765e3163930e003b0d1a6eeaeb999256b9432 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx
@@ -32,94 +32,98 @@ RootTrajectorySummaryWriterTool::RootTrajectorySummaryWriterTool(
 
 
 StatusCode RootTrajectorySummaryWriterTool::initialize() {
-  ATH_CHECK(m_simDataCollectionKey.initialize());
-  ATH_CHECK(m_mcEventCollectionKey.initialize());
-  ATH_CHECK(detStore()->retrieve(m_idHelper, "FaserSCT_ID"));
-
-  std::string filePath = m_filePath;
-  std::string treeName = m_treeName;
-  m_outputFile = TFile::Open(filePath.c_str(), "RECREATE");
-  if (m_outputFile == nullptr) {
-    ATH_MSG_WARNING("Unable to open output file at " << m_filePath);
-    return StatusCode::RECOVERABLE;
-  }
-  m_outputFile->cd();
-  m_outputTree = new TTree(treeName.c_str(), treeName.c_str());
-  if (m_outputTree == nullptr) {
-    ATH_MSG_ERROR("Unable to create TTree");
-    return StatusCode::FAILURE;
-  }
+  if (!m_noDiagnostics) {
+        ATH_CHECK(m_simDataCollectionKey.initialize());
+        ATH_CHECK(m_mcEventCollectionKey.initialize());
+        ATH_CHECK(detStore()->retrieve(m_idHelper, "FaserSCT_ID"));
+
+    std::string filePath = m_filePath;
+    std::string treeName = m_treeName;
+    m_outputFile = TFile::Open(filePath.c_str(), "RECREATE");
+    if (m_outputFile == nullptr) {
+      ATH_MSG_WARNING("Unable to open output file at " << m_filePath);
+      return StatusCode::RECOVERABLE;
+    }
+    m_outputFile->cd();
+    m_outputTree = new TTree(treeName.c_str(), treeName.c_str());
+    if (m_outputTree == nullptr) {
+      ATH_MSG_ERROR("Unable to create TTree");
+      return StatusCode::FAILURE;
+    }
 
-  m_outputTree = new TTree("tree", "tree");
-
-  m_outputTree->Branch("event_nr", &m_eventNr);
-  m_outputTree->Branch("multiTraj_nr", &m_multiTrajNr);
-  m_outputTree->Branch("subTraj_nr", &m_subTrajNr);
-
-  m_outputTree->Branch("nStates", &m_nStates);
-  m_outputTree->Branch("nMeasurements", &m_nMeasurements);
-  m_outputTree->Branch("nOutliers", &m_nOutliers);
-  m_outputTree->Branch("nHoles", &m_nHoles);
-  m_outputTree->Branch("nSharedHits", &m_nSharedHits);
-  m_outputTree->Branch("chi2Sum", &m_chi2Sum);
-  m_outputTree->Branch("NDF", &m_NDF);
-  m_outputTree->Branch("measurementChi2", &m_measurementChi2);
-  m_outputTree->Branch("outlierChi2", &m_outlierChi2);
-  m_outputTree->Branch("measurementVolume", &m_measurementVolume);
-  m_outputTree->Branch("measurementLayer", &m_measurementLayer);
-  m_outputTree->Branch("outlierVolume", &m_outlierVolume);
-  m_outputTree->Branch("outlierLayer", &m_outlierLayer);
-
-  m_outputTree->Branch("nMajorityHits", &m_nMajorityHits);
-  m_outputTree->Branch("majorityParticleId", &m_majorityParticleId);
-  m_outputTree->Branch("t_charge", &m_t_charge);
-  m_outputTree->Branch("t_time", &m_t_time);
-  m_outputTree->Branch("t_vx", &m_t_vx);
-  m_outputTree->Branch("t_vy", &m_t_vy);
-  m_outputTree->Branch("t_vz", &m_t_vz);
-  m_outputTree->Branch("t_px", &m_t_px);
-  m_outputTree->Branch("t_py", &m_t_py);
-  m_outputTree->Branch("t_pz", &m_t_pz);
-  m_outputTree->Branch("t_theta", &m_t_theta);
-  m_outputTree->Branch("t_phi", &m_t_phi);
-  m_outputTree->Branch("t_eta", &m_t_eta);
-  m_outputTree->Branch("t_p", &m_t_p);
-  m_outputTree->Branch("t_pT", &m_t_pT);
-
-  m_outputTree->Branch("hasFittedParams", &m_hasFittedParams);
-  m_outputTree->Branch("eLOC0_fit", &m_eLOC0_fit);
-  m_outputTree->Branch("eLOC1_fit", &m_eLOC1_fit);
-  m_outputTree->Branch("ePHI_fit", &m_ePHI_fit);
-  m_outputTree->Branch("eTHETA_fit", &m_eTHETA_fit);
-  m_outputTree->Branch("eQOP_fit", &m_eQOP_fit);
-  m_outputTree->Branch("eT_fit", &m_eT_fit);
-  m_outputTree->Branch("err_eLOC0_fit", &m_err_eLOC0_fit);
-  m_outputTree->Branch("err_eLOC1_fit", &m_err_eLOC1_fit);
-  m_outputTree->Branch("err_ePHI_fit", &m_err_ePHI_fit);
-  m_outputTree->Branch("err_eTHETA_fit", &m_err_eTHETA_fit);
-  m_outputTree->Branch("err_eQOP_fit", &m_err_eQOP_fit);
-  m_outputTree->Branch("err_eT_fit", &m_err_eT_fit);
-  m_outputTree->Branch("res_eLOC0_fit", &m_res_eLOC0_fit);
-  m_outputTree->Branch("res_eLOC1_fit", &m_res_eLOC1_fit);
-  m_outputTree->Branch("res_ePHI_fit", &m_res_ePHI_fit);
-  m_outputTree->Branch("res_eTHETA_fit", &m_res_eTHETA_fit);
-  m_outputTree->Branch("res_eQOP_fit", &m_res_eQOP_fit);
-  m_outputTree->Branch("res_eT_fit", &m_res_eT_fit);
-  m_outputTree->Branch("pull_eLOC0_fit", &m_pull_eLOC0_fit);
-  m_outputTree->Branch("pull_eLOC1_fit", &m_pull_eLOC1_fit);
-  m_outputTree->Branch("pull_ePHI_fit", &m_pull_ePHI_fit);
-  m_outputTree->Branch("pull_eTHETA_fit", &m_pull_eTHETA_fit);
-  m_outputTree->Branch("pull_eQOP_fit", &m_pull_eQOP_fit);
-  m_outputTree->Branch("pull_eT_fit", &m_pull_eT_fit);
+    m_outputTree = new TTree("tree", "tree");
+
+    m_outputTree->Branch("event_nr", &m_eventNr);
+    m_outputTree->Branch("multiTraj_nr", &m_multiTrajNr);
+    m_outputTree->Branch("subTraj_nr", &m_subTrajNr);
+
+    m_outputTree->Branch("nStates", &m_nStates);
+    m_outputTree->Branch("nMeasurements", &m_nMeasurements);
+    m_outputTree->Branch("nOutliers", &m_nOutliers);
+    m_outputTree->Branch("nHoles", &m_nHoles);
+    m_outputTree->Branch("nSharedHits", &m_nSharedHits);
+    m_outputTree->Branch("chi2Sum", &m_chi2Sum);
+    m_outputTree->Branch("NDF", &m_NDF);
+    m_outputTree->Branch("measurementChi2", &m_measurementChi2);
+    m_outputTree->Branch("outlierChi2", &m_outlierChi2);
+    m_outputTree->Branch("measurementVolume", &m_measurementVolume);
+    m_outputTree->Branch("measurementLayer", &m_measurementLayer);
+    m_outputTree->Branch("outlierVolume", &m_outlierVolume);
+    m_outputTree->Branch("outlierLayer", &m_outlierLayer);
+
+    m_outputTree->Branch("nMajorityHits", &m_nMajorityHits);
+    m_outputTree->Branch("majorityParticleId", &m_majorityParticleId);
+    m_outputTree->Branch("t_charge", &m_t_charge);
+    m_outputTree->Branch("t_time", &m_t_time);
+    m_outputTree->Branch("t_vx", &m_t_vx);
+    m_outputTree->Branch("t_vy", &m_t_vy);
+    m_outputTree->Branch("t_vz", &m_t_vz);
+    m_outputTree->Branch("t_px", &m_t_px);
+    m_outputTree->Branch("t_py", &m_t_py);
+    m_outputTree->Branch("t_pz", &m_t_pz);
+    m_outputTree->Branch("t_theta", &m_t_theta);
+    m_outputTree->Branch("t_phi", &m_t_phi);
+    m_outputTree->Branch("t_eta", &m_t_eta);
+    m_outputTree->Branch("t_p", &m_t_p);
+    m_outputTree->Branch("t_pT", &m_t_pT);
+
+    m_outputTree->Branch("hasFittedParams", &m_hasFittedParams);
+    m_outputTree->Branch("eLOC0_fit", &m_eLOC0_fit);
+    m_outputTree->Branch("eLOC1_fit", &m_eLOC1_fit);
+    m_outputTree->Branch("ePHI_fit", &m_ePHI_fit);
+    m_outputTree->Branch("eTHETA_fit", &m_eTHETA_fit);
+    m_outputTree->Branch("eQOP_fit", &m_eQOP_fit);
+    m_outputTree->Branch("eT_fit", &m_eT_fit);
+    m_outputTree->Branch("err_eLOC0_fit", &m_err_eLOC0_fit);
+    m_outputTree->Branch("err_eLOC1_fit", &m_err_eLOC1_fit);
+    m_outputTree->Branch("err_ePHI_fit", &m_err_ePHI_fit);
+    m_outputTree->Branch("err_eTHETA_fit", &m_err_eTHETA_fit);
+    m_outputTree->Branch("err_eQOP_fit", &m_err_eQOP_fit);
+    m_outputTree->Branch("err_eT_fit", &m_err_eT_fit);
+    m_outputTree->Branch("res_eLOC0_fit", &m_res_eLOC0_fit);
+    m_outputTree->Branch("res_eLOC1_fit", &m_res_eLOC1_fit);
+    m_outputTree->Branch("res_ePHI_fit", &m_res_ePHI_fit);
+    m_outputTree->Branch("res_eTHETA_fit", &m_res_eTHETA_fit);
+    m_outputTree->Branch("res_eQOP_fit", &m_res_eQOP_fit);
+    m_outputTree->Branch("res_eT_fit", &m_res_eT_fit);
+    m_outputTree->Branch("pull_eLOC0_fit", &m_pull_eLOC0_fit);
+    m_outputTree->Branch("pull_eLOC1_fit", &m_pull_eLOC1_fit);
+    m_outputTree->Branch("pull_ePHI_fit", &m_pull_ePHI_fit);
+    m_outputTree->Branch("pull_eTHETA_fit", &m_pull_eTHETA_fit);
+    m_outputTree->Branch("pull_eQOP_fit", &m_pull_eQOP_fit);
+    m_outputTree->Branch("pull_eT_fit", &m_pull_eT_fit);
+  }
 
   return StatusCode::SUCCESS;
 }
 
 
 StatusCode RootTrajectorySummaryWriterTool::finalize() {
-  m_outputFile->cd();
-  m_outputTree->Write();
-  m_outputFile->Close();
+  if (!m_noDiagnostics) {
+    m_outputFile->cd();
+    m_outputTree->Write();
+    m_outputFile->Close();
+  }
   return StatusCode::SUCCESS;
 }
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/test/CombinatorialKalmanFilterAlg_Data.py b/Tracking/Acts/FaserActsKalmanFilter/test/CombinatorialKalmanFilterAlg_Data.py
index 5cf53fa5fb7cb4262c4c276374d54a8ea51402ef..81b9f6acd6c2c42d74de52e12d775d4dff2d0307 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/test/CombinatorialKalmanFilterAlg_Data.py
+++ b/Tracking/Acts/FaserActsKalmanFilter/test/CombinatorialKalmanFilterAlg_Data.py
@@ -6,25 +6,22 @@ from AthenaCommon.Constants import DEBUG, VERBOSE, INFO
 from AthenaCommon.Configurable import Configurable
 from CalypsoConfiguration.AllConfigFlags import ConfigFlags
 from CalypsoConfiguration.MainServicesConfig import MainServicesCfg
-from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
 from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg
-from WaveRecAlgs.WaveRecAlgsConfig import WaveformReconstructionCfg
+from FaserByteStreamCnvSvc.FaserByteStreamCnvSvcConfig import FaserByteStreamCnvSvcCfg
 from TrackerPrepRawDataFormation.TrackerPrepRawDataFormationConfig import FaserSCT_ClusterizationCfg
-from TrackerSpacePointFormation.TrackerSpacePointFormationConfig import TrackerSpacePointFinderCfg
-from TrackerSeedFinder.TrackerSeedFinderConfig import TrackerSeedFinderCfg
 from FaserActsKalmanFilter.CombinatorialKalmanFilterConfig import CombinatorialKalmanFilterCfg
+from TrackerSegmentFit.TrackerSegmentFitConfig import SegmentFitAlgCfg
 
 log.setLevel(DEBUG)
 Configurable.configurableRun3Behavior = True
 
-ConfigFlags.Input.Files = ['/eos/project-f/faser-commissioning/TI12Data/Run-004411/Faser-Physics-004411-00000.raw']
-ConfigFlags.Output.ESDFileName = "myCKF.ESD.pool.root"
-ConfigFlags.Output.AODFileName = "myCKF.AOD.pool.root"
+ConfigFlags.Input.Files = ['/home/tboeckh/Documents/data/raw/TI12/MiddleStationTrack.raw']
+ConfigFlags.Output.ESDFileName = "CKF.ESD.pool.root"
 ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-01"
-ConfigFlags.IOVDb.DatabaseInstance = "OFLP200"               # Use MC conditions for now
-ConfigFlags.Input.ProjectName = "data21"                     # Needed to bypass autoconfig
-ConfigFlags.Input.isMC = False                               # Needed to bypass autoconfig
-ConfigFlags.GeoModel.FaserVersion     = "FASER-01"           # FASER geometry
+ConfigFlags.IOVDb.DatabaseInstance = "OFLP200"
+ConfigFlags.Input.ProjectName = "data21"
+ConfigFlags.Input.isMC = False
+ConfigFlags.GeoModel.FaserVersion = "FASER-01"
 ConfigFlags.Common.isOnline = False
 ConfigFlags.GeoModel.Align.Dynamic = False
 ConfigFlags.Beam.NumberOfCollisions = 0.
@@ -32,24 +29,26 @@ ConfigFlags.Detector.GeometryFaserSCT = True
 ConfigFlags.lock()
 
 acc = MainServicesCfg(ConfigFlags)
-#acc.merge(PoolReadCfg(ConfigFlags))
 acc.merge(PoolWriteCfg(ConfigFlags))
-from FaserByteStreamCnvSvc.FaserByteStreamCnvSvcConfig import FaserByteStreamCnvSvcCfg               
 acc.merge(FaserByteStreamCnvSvcCfg(ConfigFlags))
-acc.merge(WaveformReconstructionCfg(ConfigFlags))
-acc.merge(FaserSCT_ClusterizationCfg(ConfigFlags, DataObjectName="SCT_EDGEMODE_RDOs"))
-acc.merge(TrackerSpacePointFinderCfg(ConfigFlags))
-acc.merge(TrackerSeedFinderCfg(ConfigFlags))
-acc.merge(CombinatorialKalmanFilterCfg(ConfigFlags))
+acc.merge(FaserSCT_ClusterizationCfg(ConfigFlags, DataObjectName="SCT_LEVELMODE_RDOs", ClusterToolTimingPattern="X1X"))
+acc.merge(SegmentFitAlgCfg(ConfigFlags))
+acc.merge(CombinatorialKalmanFilterCfg(ConfigFlags, noDiagnostics=True))
 
-logging.getLogger('forcomps').setLevel(VERBOSE)
-acc.foreach_component("*").OutputLevel = VERBOSE
-acc.foreach_component("*ClassID*").OutputLevel = INFO
-acc.getService("StoreGateSvc").Dump = True
-acc.getService("ConditionStore").Dump = True
-acc.printConfig(withDetails=True)
-ConfigFlags.dump()
+# logging.getLogger('forcomps').setLevel(VERBOSE)
+# acc.foreach_component("*").OutputLevel = VERBOSE
+# acc.foreach_component("*ClassID*").OutputLevel = INFO
+# acc.getService("StoreGateSvc").Dump = True
+# acc.getService("ConditionStore").Dump = True
+# acc.printConfig(withDetails=True)
+# ConfigFlags.dump()
 
-sc = acc.run(maxEvents=-1)
+# Hack to avoid problem with our use of MC databases when isMC = False
+replicaSvc = acc.getService("DBReplicaSvc")
+replicaSvc.COOLSQLiteVetoPattern = ""
+replicaSvc.UseCOOLSQLite = True
+replicaSvc.UseCOOLFrontier = False
+replicaSvc.UseGeomSQLite = True
 
+sc = acc.run(maxEvents=-1)
 sys.exit(not sc.isSuccess())