From 9adde218d0f6a57734ee2c3f3f51a11991acbac9 Mon Sep 17 00:00:00 2001
From: Frederic Julian Linz <f.linz@gsi.de>
Date: Tue, 23 Apr 2024 00:58:43 +0000
Subject: [PATCH] Add information to AT converter for multi-stream input

---
 .../CbmMatchEvents.cxx                        |  4 ++--
 .../CbmRecEventHeaderConverter.cxx            | 20 +++++++++++++------
 .../CbmRecEventHeaderConverter.h              |  1 +
 .../CbmStsTracksConverter.cxx                 |  2 --
 4 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/analysis/common/analysis_tree_converter/CbmMatchEvents.cxx b/analysis/common/analysis_tree_converter/CbmMatchEvents.cxx
index 77552434f5..f690e3ca4a 100644
--- a/analysis/common/analysis_tree_converter/CbmMatchEvents.cxx
+++ b/analysis/common/analysis_tree_converter/CbmMatchEvents.cxx
@@ -27,8 +27,8 @@ void CbmMatchEvents::ProcessData(CbmEvent* event)
 {
   if (!event) { throw std::runtime_error("No event to match"); }
 
-  LOG(info) << "Event: " << event->GetNumber() << " t_start " << event->GetStartTime()
-            << " Msts = " << event->GetNofStsTracks();
+  LOG(info) << "Event: " << event->GetNumber() << "  t_start = " << event->GetStartTime()
+            << "  t_end = " << event->GetEndTime() << "  Msts = " << event->GetNofStsTracks();
 
   count_map_.clear();
 
diff --git a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx
index efe6df5e84..f7c9a2efd4 100644
--- a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.cxx
@@ -35,16 +35,18 @@ void CbmRecEventHeaderConverter::Init()
   RecEventHeaderBranch.AddField<float>("vtx_chi2", "primiry vertex fit chi^2/NDF");
   RecEventHeaderBranch.AddField<float>("Epsd", "GeV, full energy deposit in PSD");
   RecEventHeaderBranch.AddField<int>("M", "total multiplicity in STS(+MVD)");
+  RecEventHeaderBranch.AddField<int>("nMCEvents", "Number of MC events that contributed");
   RecEventHeaderBranch.AddField<int>("evt_id", "event identifier");
-  RecEventHeaderBranch.AddField<float>("start_time", "Start time of the event, ns");
-  RecEventHeaderBranch.AddField<float>("end_time", "End time of the event, ns");
-  RecEventHeaderBranch.AddField<float>("match_weight", "");
+  RecEventHeaderBranch.AddFields<float>({"start_time", "end_time"}, "Start and end time of the event, ns");
+  RecEventHeaderBranch.AddField<float>("match_weight",
+                                       "Weight of matched event");  // TODO: Add info how it is calculated
   RecEventHeaderBranch.AddField<float>("T0", "Reconstructed T0, ns");
   RecEventHeaderBranch.AddField<float>("tStartTS", "TS start time, ns");
 
   ivtx_chi2_     = RecEventHeaderBranch.GetFieldId("vtx_chi2");
   iEpsd_         = RecEventHeaderBranch.GetFieldId("Epsd");
   iM_            = RecEventHeaderBranch.GetFieldId("M");
+  iMCEvents_     = RecEventHeaderBranch.GetFieldId("nMCEvents");
   ievt_id_       = RecEventHeaderBranch.GetFieldId("evt_id");
   istart_time_   = RecEventHeaderBranch.GetFieldId("start_time");
   iend_time_     = RecEventHeaderBranch.GetFieldId("end_time");
@@ -70,7 +72,7 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event)
   rec_event_header_->SetField(n_sts_tracks, iM_);
   rec_event_header_->SetField(GetPsdEnergy(event), iEpsd_);
 
-  int evt_id;
+  int nMCEvents, evt_id;
   float match_weight, start_time, end_time, T0, tStartTS;
   if (event) {
     evt_id     = event->GetUniqueID();
@@ -80,10 +82,14 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event)
 
     tStartTS = fTimeSlice->GetStartTime();
 
-    if (event->GetMatch() && event->GetMatch()->GetNofLinks() > 0)
+    if (event->GetMatch() && event->GetMatch()->GetNofLinks() > 0) {
       match_weight = float(event->GetMatch()->GetMatchedLink().GetWeight());
-    else
+      nMCEvents    = event->GetMatch()->GetNofLinks();
+    }
+    else {
       match_weight = 0.;
+      nMCEvents    = 0;
+    }
   }
   else {
     evt_id       = cbm_header_->GetEventID();
@@ -92,6 +98,7 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event)
     T0           = -999999.;
     tStartTS     = -1.;
     match_weight = 1.;
+    nMCEvents    = 1;
   }
   rec_event_header_->SetField(evt_id, ievt_id_);
   rec_event_header_->SetField(start_time, istart_time_);
@@ -99,6 +106,7 @@ void CbmRecEventHeaderConverter::ProcessData(CbmEvent* event)
   rec_event_header_->SetField(T0, iT0_);
   rec_event_header_->SetField(tStartTS, iTStartTS_);
   rec_event_header_->SetField(match_weight, imatch_weight_);
+  rec_event_header_->SetField(nMCEvents, iMCEvents_);
 }
 
 float CbmRecEventHeaderConverter::GetPsdEnergy(CbmEvent* event)
diff --git a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h
index 4a3fc3a351..cc4d053ca7 100644
--- a/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h
+++ b/analysis/common/analysis_tree_converter/CbmRecEventHeaderConverter.h
@@ -39,6 +39,7 @@ private:
   int ivtx_chi2_ {AnalysisTree::UndefValueInt};
   int iEpsd_ {AnalysisTree::UndefValueInt};
   int iM_ {AnalysisTree::UndefValueInt};
+  int iMCEvents_{AnalysisTree::UndefValueInt};
   int ievt_id_ {AnalysisTree::UndefValueInt};
   int istart_time_ {AnalysisTree::UndefValueInt};
   int iend_time_ {AnalysisTree::UndefValueInt};
diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
index eeadfa3dee..6a3e4371b2 100644
--- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
@@ -277,8 +277,6 @@ void CbmStsTracksConverter::MapTracks(CbmEvent* event)
       if (p == sim_tracks_map.end())  // match is not found
         continue;
 
-      //      LOG(info) << match->GetTrueOverAllHitsRatio();
-
       track.SetField(float(match->GetTrueOverAllHitsRatio()), imatch_weight_);
       vtx_tracks_2_sim_->AddMatch(out_id, p->second);
     }
-- 
GitLab