From fca769507e6c92c19e23ba83666de662d740806d Mon Sep 17 00:00:00 2001
From: Oleksii Lubynets <lubynets@lxbk0200.gsi.de>
Date: Sun, 13 Sep 2020 20:19:45 +0200
Subject: [PATCH] add PV from reco to CbmKFPF

---
 reco/KF/CbmKFParticleFinder.cxx | 12 ++++++++++--
 reco/KF/CbmKFParticleFinder.h   |  3 +++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/reco/KF/CbmKFParticleFinder.cxx b/reco/KF/CbmKFParticleFinder.cxx
index e3b2150b05..a65f3c9a6e 100644
--- a/reco/KF/CbmKFParticleFinder.cxx
+++ b/reco/KF/CbmKFParticleFinder.cxx
@@ -37,7 +37,7 @@ CbmKFParticleFinder::CbmKFParticleFinder(const char* name, Int_t iVerbose)
   , fTrackArray(0)
   , fEvents(0)
   , fTopoReconstructor(0)
-  , fPVFindMode(2)
+  , fPVFindMode(3)
   , fPID(0)
   , fSuperEventAnalysis(0)
   , fSETracks(0)
@@ -116,6 +116,8 @@ InitStatus CbmKFParticleFinder::Init() {
       }
     }
   }
+  
+  fCbmPrimVertex = (CbmVertex*) ioman->GetObject("PrimaryVertex.");
 
   return kSUCCESS;
 }
@@ -255,6 +257,12 @@ void CbmKFParticleFinder::Exec(Option_t* /*opt*/) {
       kfVertex.GetRefY() = mcpv[1];
       kfVertex.GetRefZ() = mcpv[2];
     }
+    
+    if(fPVFindMode==3) {
+      kfVertex.GetRefX() = fCbmPrimVertex->GetX();
+      kfVertex.GetRefY() = fCbmPrimVertex->GetY();
+      kfVertex.GetRefZ() = fCbmPrimVertex->GetZ();
+    }
 
     vector<L1FieldRegion> vField, vFieldAtLastPoint;
     fitter.Fit(vRTracks, pdg);
@@ -319,7 +327,7 @@ void CbmKFParticleFinder::Exec(Option_t* /*opt*/) {
 
       eventTopoReconstructor[iEvent].Init(tracks, tracksAtLastPoint);
 
-      if (fPVFindMode == 0) {
+      if (fPVFindMode == 0 || fPVFindMode == 3) {
         KFPVertex primVtx_tmp;
         primVtx_tmp.SetXYZ(
           kfVertex.GetRefX(), kfVertex.GetRefY(), kfVertex.GetRefZ());
diff --git a/reco/KF/CbmKFParticleFinder.h b/reco/KF/CbmKFParticleFinder.h
index 12ddcfa4b2..4687b616b3 100644
--- a/reco/KF/CbmKFParticleFinder.h
+++ b/reco/KF/CbmKFParticleFinder.h
@@ -17,6 +17,7 @@ class KFParticleFinder;
 class KFPTrackVector;
 class CbmMCEventList;
 class CbmMCDataArray;
+class CbmVertex;
 
 struct KFFieldVector {
   float fField[10];
@@ -32,6 +33,7 @@ public:
   void UseMCPV() { fPVFindMode = 0; }
   void ReconstructSinglePV() { fPVFindMode = 1; }
   void RconstructMultiplePV() { fPVFindMode = 2; }
+  void UseReconstructedPV()   { fPVFindMode = 3; }
 
   void SetStsTrackBranchName(const TString& name) {
     fStsTrackBranchName = name;
@@ -104,6 +106,7 @@ private:
   CbmMCDataArray* fMCTrackArray;     //mc tracks in timeslices
   TClonesArray* fMCTrackArrayEvent;  //mc tracks in event-by-event mode
   CbmMCEventList* fEventList;        //mc event list in timeslice
+  CbmVertex* fCbmPrimVertex;         //mc primary vertex
 
   //topology reconstructor
   KFParticleTopoReconstructor* fTopoReconstructor;
-- 
GitLab