CbmRoot
Loading...
Searching...
No Matches
CbmPVFinderKFGlobal.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023-2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer], Alex Bercuci*/
4
9
10#include "CbmPVFinderKFGlobal.h"
11
12#include "CbmEvent.h"
13#include "CbmGlobalTrack.h"
15#include "CbmKFTrack.h"
16#include "CbmKFVertex.h"
17#include "TClonesArray.h"
18
19#include <cmath>
20#include <vector>
21
23
24// ---------------------------------------------------------------------------------------------------------------------
25//
27{
28 Int_t nTracks = tracks->GetEntriesFast();
29
31 std::vector<CbmKFTrack> vKFTracks(nTracks);
32 for (int iT = 0; iT < nTracks; ++iT) {
33 auto* globalTrack = dynamic_cast<CbmGlobalTrack*>(tracks->At(iT));
34
35 if (globalTrack->GetStsTrackIndex() < 0) {
36 continue;
37 }
38 if (globalTrack->GetTrdTrackIndex() < 0) {
39 continue;
40 }
41 if (globalTrack->GetTofTrackIndex() < 0) {
42 continue;
43 }
44
45 if (globalTrack->GetChi2() < 0.) continue;
46 CbmKFTrack& kfTrack = vKFTracks[iT];
47 kfTrack.SetGlobalTrack(*globalTrack);
48 if (!std::isfinite(kfTrack.GetTrack()[0]) || !std::isfinite(kfTrack.GetCovMatrix()[0])) continue;
49 finder.AddTrack(&kfTrack);
50 }
51 CbmKFVertex kfVertex;
52 finder.Fit(kfVertex);
53 kfVertex.GetVertex(*vertex);
54
55 // Re-fit vertices of the global tracks
56 for (int iT = 0; iT < nTracks; ++iT) {
57 auto* globalTrack = dynamic_cast<CbmGlobalTrack*>(tracks->At(iT));
58 auto& kfTrack = vKFTracks[iT];
59 kfTrack.Fit2Vertex(kfVertex);
60 FairTrackParam par;
61 kfTrack.GetTrackParam(par);
62 globalTrack->SetParamPrimaryVertex(&par);
63 }
64
65 return vertex->GetNTracks();
66}
67
68// ---------------------------------------------------------------------------------------------------------------------
69//
71{
72 assert(event);
74
75 // Get vertex object
76 CbmVertex* vertex = event->GetVertex();
77
78 // Copy input tracks to KF tracks
79 Int_t nTracks = event->GetNofData(ECbmDataType::kGlobalTrack);
80 if (nTracks <= 0) return 0;
81
82 std::vector<CbmKFTrack> vKFTracks(nTracks);
83 for (Int_t iT = 0; iT < nTracks; ++iT) {
84 auto iTrkEvent = event->GetIndex(ECbmDataType::kGlobalTrack, iT);
85 auto* globalTrack = dynamic_cast<CbmGlobalTrack*>(tracks->At(iTrkEvent));
86
87 // if (globalTrack->GetStsTrackIndex() < 0) {
88 // continue;
89 // }
90 // if (globalTrack->GetTrdTrackIndex() < 0) {
91 // continue;
92 // }
93 // if (globalTrack->GetTofTrackIndex() < 0) {
94 // continue;
95 // }
96
97 if (globalTrack->GetChi2() < 0.) continue;
98 CbmKFTrack& kfTrack = vKFTracks[iT];
99 kfTrack.SetGlobalTrack(*globalTrack);
100 if (!std::isfinite(kfTrack.GetTrack()[0]) || !std::isfinite(kfTrack.GetCovMatrix()[0])) continue;
101 finder.AddTrack(&kfTrack, iTrkEvent);
102 }
103
104 // Do the vertex finding
105 CbmKFVertex kfVertex;
106 finder.Fit(kfVertex);
107
108 // Copy KFVertex into CbmVertex
109 kfVertex.GetVertex(*vertex);
110 std::vector<uint32_t> idx;
111 finder.GetUsedTracks(idx);
112 vertex->SetTracks(idx);
113 // Re-fit vertices of the global tracks
114 for (int iT = 0; iT < nTracks; ++iT) {
115 auto iTrkEvent = event->GetIndex(ECbmDataType::kGlobalTrack, iT);
116 auto* globalTrack = dynamic_cast<CbmGlobalTrack*>(tracks->At(iTrkEvent));
117 auto& kfTrack = vKFTracks[iT];
118 // TODO: SZh. 03.07.2024: Provide time initialization (to CbmTrackParam)
119 kfTrack.Fit2Vertex(kfVertex);
120 FairTrackParam par;
121 kfTrack.GetTrackParam(par);
122 globalTrack->SetParamPrimaryVertex(&par);
123 }
124 return vertex->GetNTracks();
125}
TClonesArray * tracks
ClassImp(CbmPVFinderKFGlobal)
Primary vertex finder from the global tracks (implementation)
Class characterising one event by a collection of links (indices) to data objects,...
Definition CbmEvent.h:34
int GetUsedTracks(std::vector< uint32_t > &idx) const
void AddTrack(CbmKFTrackInterface *Track, int32_t idx=-1)
void Fit(CbmKFVertexInterface &vtx)
void SetGlobalTrack(CbmGlobalTrack &track, bool first=1)
Double_t * GetCovMatrix() override
array[6] of track parameters(x,y,tx,ty,qp,z)
Definition CbmKFTrack.h:78
Double_t * GetTrack() override
Is it electron.
Definition CbmKFTrack.h:77
void GetVertex(CbmVertex &v)
Implementation of the primary vertex finder using KF utility.
virtual Int_t FindPrimaryVertex(TClonesArray *tracks, CbmVertex *vertex)
Execution of PV finding.
virtual Int_t FindEventVertex(CbmEvent *event, TClonesArray *tracks)
Execution of PV finding.
bool SetTracks(std::vector< uint32_t > &indexVector)
int32_t GetNTracks() const
Definition CbmVertex.h:72