BmnRoot
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
13
15 if (fVerbose > 1)
16 cout << "=========================== Combined Vertex finder init started ====================" << endl;
17
18 fKalman = new BmnKalmanFilter();
19
20 // Get ROOT Manager
21 FairRootManager* ioman = FairRootManager::Instance();
22 if (nullptr == ioman)
23 Fatal("Init", "FairRootManager is not instantiated");
24
25 fCbmVertex = (CbmVertex*)ioman->GetObject("PrimaryVertex."); // in
26 if (!fCbmVertex) {
27 cout << "BmnCombineVertexFinder::Init(): branch PrimaryVertex not found! Task will be deactivated" << endl;
28 SetActive(kFALSE);
29 return kERROR;
30 }
31
32 fMpdVertex = (CbmVertex*)ioman->GetObject("MpdVertex."); // in
33 if (!fMpdVertex) {
34 cout << "BmnCombineVertexFinder::Init(): branch MpdVertex not found! Task will be deactivated" << endl;
35 SetActive(kFALSE);
36 return kERROR;
37 }
38
39 fBeamTrackArray = (TClonesArray*)ioman->GetObject("BmnBeamTrack"); // in
40 if (!fBeamTrackArray) {
41 cout << "BmnCombineVertexFinder::Init(): branch BmnBeamTrack not found! Task will be deactivated" << endl;
42 SetActive(kFALSE);
43 return kERROR;
44 }
45
46 fCombineVertexArray = new TClonesArray("CbmVertex", 2); // out
47 ioman->Register("CombineVertex", "VERTEX", fCombineVertexArray, kTRUE);
48
49 if (fVerbose > 1) cout << "=========================== Combined Vertex finder init finished ===================" << endl;
50
51 return kSUCCESS;
52}
53
54void BmnCombineVertexFinder::Exec(Option_t* opt) {
55
56 if (!IsActive())
57 return;
58
59 if (fVerbose > 1) {
60 cout << "======================== Combined Vertex finder exec started ======================" << endl;
61 }
62
63 fCombineVertexArray->Delete();
64
65 CbmVertex combVertexCbm = *fCbmVertex;
66 CbmVertex combVertexMpd = *fMpdVertex;
67
68 BmnTrack* beamTrack = nullptr;
69 beamTrack = (BmnTrack*)fBeamTrackArray->At(0);
70 if (beamTrack != nullptr) {
71 combVertexCbm = CombineVertex(fCbmVertex, beamTrack);
72 combVertexMpd = CombineVertex(fMpdVertex, beamTrack);
73 }
74
75 new ((*fCombineVertexArray)[0]) CbmVertex(combVertexCbm);
76 new ((*fCombineVertexArray)[1]) CbmVertex(combVertexMpd);
77
78 if (fVerbose > 1)
79 cout << "\n======================== Combined Vertex finder exec finished ======================" << endl;
80}
81
83 Double_t weightPrimaryVertex[2] = { 0.0, 0.0 };
84 Double_t weightBeam[2] = { 0.0, 0.0 };
85
86 FairTrackParam par = *(beamTrack->GetParamLast());
87 fKalman->TGeoTrackPropagate(&par, vrtx->GetZ(), 2212, nullptr, nullptr, 1);
88
89 Double_t primaryVertexX = vrtx->GetX();
90 Double_t primaryVertexY = vrtx->GetY();
91
92 weightPrimaryVertex[0] = 1 / vrtx->GetCovariance(0, 0);
93 weightPrimaryVertex[1] = 1 / vrtx->GetCovariance(1, 1);
94 weightBeam[0] = 1 / par.GetCovariance(0, 0);
95 weightBeam[1] = 1 / par.GetCovariance(1, 1);
96 Double_t beamVertexX = par.GetX();
97 Double_t beamVertexY = par.GetY();
98
99 Double_t X = (primaryVertexX * weightPrimaryVertex[0] + beamVertexX * weightBeam[0]) / (weightPrimaryVertex[0] + weightBeam[0]);
100 Double_t Y = (primaryVertexY * weightPrimaryVertex[1] + beamVertexY * weightBeam[1]) / (weightPrimaryVertex[1] + weightBeam[1]);
101 Double_t Z = vrtx->GetZ();
102 Double_t chi2 = vrtx->GetChi2();
103 Int_t NTracks = vrtx->GetNTracks() + 1;
104 Int_t NDF = NTracks * 2;
105 TMatrixFSym* covMat = new TMatrixFSym(3);
106 vrtx->CovMatrix(*covMat);
107
108 CbmVertex combVrtx;
109 combVrtx.SetVertex(X, Y, Z, chi2, NDF, NTracks, *covMat);
110 return combVrtx;
111}
112
113
115
CbmVertex CombineVertex(CbmVertex *vrtx, BmnTrack *beamTrack)
virtual void Exec(Option_t *opt)
BmnStatus TGeoTrackPropagate(FairTrackParam *par, Double_t zOut, Int_t pdg, vector< Double_t > *F, Double_t *length, Bool_t isField)
FairTrackParam * GetParamLast()
Definition BmnTrack.h:76
void SetVertex(Double_t x, Double_t y, Double_t z, Double_t chi2, Int_t ndf, Int_t nTracks, const TMatrixFSym &covMat)
Double_t GetZ() const
Definition CbmVertex.h:60
void CovMatrix(TMatrixFSym &covMat) const
Double_t GetX() const
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
STL namespace.