BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnCombineVertexFinder.cxx
Go to the documentation of this file.
2
3#include "BmnMath.h"
4#include "TCanvas.h"
5#include "TFitResult.h"
6#include "TGraph.h"
7#include "vector"
8
9using namespace std;
10using namespace TMath;
11
16
18{
19 if (fVerbose > 1)
20 cout << "=========================== Combined Vertex finder init started ====================" << endl;
21
23
24 // Get ROOT Manager
25 FairRootManager* ioman = FairRootManager::Instance();
26 if (nullptr == ioman)
27 Fatal("Init", "FairRootManager is not instantiated");
28
29 fCbmVertex = (CbmVertex*)ioman->GetObject("PrimaryVertex."); // in
30 if (!fCbmVertex) {
31 cout << "BmnCombineVertexFinder::Init(): branch PrimaryVertex not found! Task will be deactivated" << endl;
32 SetActive(kFALSE);
33 return kERROR;
34 }
35
36 fMpdVertex = (CbmVertex*)ioman->GetObject("MpdVertex."); // in
37 if (!fMpdVertex) {
38 cout << "BmnCombineVertexFinder::Init(): branch MpdVertex not found! Task will be deactivated" << endl;
39 SetActive(kFALSE);
40 return kERROR;
41 }
42
43 fBeamTrackArray = (TClonesArray*)ioman->GetObject("BmnBeamTrack"); // in
44 if (!fBeamTrackArray) {
45 cout << "BmnCombineVertexFinder::Init(): branch BmnBeamTrack not found! Task will be deactivated" << endl;
46 SetActive(kFALSE);
47 return kERROR;
48 }
49
50 fCombineVertexArray = new TClonesArray("CbmVertex", 2); // out
51 ioman->Register("CombineVertex", "VERTEX", fCombineVertexArray, kTRUE);
52
53 if (fVerbose > 1)
54 cout << "=========================== Combined Vertex finder init finished ===================" << endl;
55
56 return kSUCCESS;
57}
58
60{
61
62 if (!IsActive())
63 return;
64
65 if (fVerbose > 1) {
66 cout << "======================== Combined Vertex finder exec started ======================" << endl;
67 }
68
69 fCombineVertexArray->Delete();
70
71 CbmVertex combVertexCbm = *fCbmVertex;
72 CbmVertex combVertexMpd = *fMpdVertex;
73
74 BmnTrack* beamTrack = nullptr;
75 beamTrack = (BmnTrack*)fBeamTrackArray->At(0);
76 if (beamTrack != nullptr) {
77 combVertexCbm = CombineVertex(fCbmVertex, beamTrack);
78 combVertexMpd = CombineVertex(fMpdVertex, beamTrack);
79 }
80
81 new ((*fCombineVertexArray)[0]) CbmVertex(combVertexCbm);
82 new ((*fCombineVertexArray)[1]) CbmVertex(combVertexMpd);
83
84 if (fVerbose > 1)
85 cout << "\n======================== Combined Vertex finder exec finished ======================" << endl;
86}
87
89{
90 Double_t weightPrimaryVertex[2] = {0.0, 0.0};
91 Double_t weightBeam[2] = {0.0, 0.0};
92
93 FairTrackParam par = *(beamTrack->GetParamLast());
94 fKalman->TGeoTrackPropagate(&par, vrtx->GetZ(), 2212, nullptr, nullptr, 1);
95
96 Double_t primaryVertexX = vrtx->GetX();
97 Double_t primaryVertexY = vrtx->GetY();
98
99 weightPrimaryVertex[0] = 1 / vrtx->GetCovariance(0, 0);
100 weightPrimaryVertex[1] = 1 / vrtx->GetCovariance(1, 1);
101 weightBeam[0] = 1 / par.GetCovariance(0, 0);
102 weightBeam[1] = 1 / par.GetCovariance(1, 1);
103 Double_t beamVertexX = par.GetX();
104 Double_t beamVertexY = par.GetY();
105
106 Double_t X = (primaryVertexX * weightPrimaryVertex[0] + beamVertexX * weightBeam[0])
107 / (weightPrimaryVertex[0] + weightBeam[0]);
108 Double_t Y = (primaryVertexY * weightPrimaryVertex[1] + beamVertexY * weightBeam[1])
109 / (weightPrimaryVertex[1] + weightBeam[1]);
110 Double_t Z = vrtx->GetZ();
111 Double_t chi2 = vrtx->GetChi2();
112 Int_t NTracks = vrtx->GetNTracks() + 1;
113 Int_t NDF = NTracks * 2;
114 TMatrixFSym* covMat = new TMatrixFSym(3);
115 vrtx->CovMatrix(*covMat);
116
117 CbmVertex combVrtx;
118 combVrtx.SetVertex(X, Y, Z, chi2, NDF, NTracks, *covMat);
119 return combVrtx;
120}
121
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
void Fatal(const char *location, const char *msgfmt,...)
TMatrixTSym< Float_t > TMatrixFSym
CbmVertex CombineVertex(CbmVertex *vrtx, BmnTrack *beamTrack)
virtual void Exec(Option_t *opt)
FairTrackParam * GetParamLast()
Definition BmnTrack.h:65
CbmVertex.h.
Definition CbmVertex.h:21
void SetVertex(Double_t x, Double_t y, Double_t z, Double_t chi2, Int_t ndf, Int_t nTracks, const TMatrixFSym &covMat)
Set the member variables.
Double_t GetZ() const
Definition CbmVertex.h:60
void CovMatrix(TMatrixFSym &covMat) const
Double_t GetX() const
Accessors.
Definition CbmVertex.h:58
Int_t GetNTracks() const
Definition CbmVertex.h:63
Double_t GetChi2() const
Definition CbmVertex.h:61
Double_t GetCovariance(Int_t i, Int_t j) const
Double_t GetY() const
Definition CbmVertex.h:59