From 2d11c5b077bb2c0818dd78256acb3e66e495e1d6 Mon Sep 17 00:00:00 2001
From: Volker Friese <v.friese@gsi.de>
Date: Thu, 29 Apr 2021 20:19:32 +0200
Subject: [PATCH] Restored primary vertex branch in event-based reconstruction.
 Refs #2096.

---
 reco/global/CbmFindPrimaryVertex.cxx | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/reco/global/CbmFindPrimaryVertex.cxx b/reco/global/CbmFindPrimaryVertex.cxx
index e882246617..caf43ebea2 100644
--- a/reco/global/CbmFindPrimaryVertex.cxx
+++ b/reco/global/CbmFindPrimaryVertex.cxx
@@ -107,10 +107,14 @@ InitStatus CbmFindPrimaryVertex::Init()
   }
 
   // Create and register CbmVertex object
-  if (!fEvents) {
-    fPrimVert = new CbmVertex("Primary Vertex", "Global");
-    ioman->Register("PrimaryVertex.", "Global", fPrimVert, IsOutputBranchPersistent("PrimaryVertex"));
-  }
+  // if (!fEvents) {
+  // TODO: This is here for legacy, since many analysis tasks use the vertex branch instead
+  // of retrieving the vertex from the event object. It shall be removed after the all analysis tasks
+  // are adjusted. Neither in event-based nor in time-based reconstruction a branch with a single
+  // vertex object makes sense.
+  fPrimVert = new CbmVertex("Primary Vertex", "Global");
+  ioman->Register("PrimaryVertex.", "Global", fPrimVert, IsOutputBranchPersistent("PrimaryVertex"));
+  // }
 
   // Call the Init method of the vertex finder
   fFinder->Init();
@@ -142,6 +146,7 @@ void CbmFindPrimaryVertex::Exec(Option_t*)
 
   // Event-based mode
   else {
+    fPrimVert->Reset();  // TODO: Legacy
     nEvents = fEvents->GetEntriesFast();
     for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
       CbmEvent* event = dynamic_cast<CbmEvent*>(fEvents->At(iEvent));
@@ -149,6 +154,9 @@ void CbmFindPrimaryVertex::Exec(Option_t*)
       result = fFinder->FindEventVertex(event, fTracks);
       LOG(debug) << GetName() << ": Event " << iEvent << " " << event->GetVertex()->ToString();
       nTracksUsed += result;
+
+      // Legacy: copy event vertex object to event branch
+      if (iEvent == 0) *fPrimVert = *(event->GetVertex());
     }
   }
 
-- 
GitLab