71 LOG(debug) <<
"- PCA - Find event vertex using CbmGlobalTracks: " << n_of_trk;
73 for (
int trk_i_idx = 0; trk_i_idx < n_of_trk - 1; trk_i_idx++) {
74 for (
int trk_j_idx = trk_i_idx + 1; trk_j_idx < n_of_trk; trk_j_idx++) {
76 if (pca.has_value() && pca->d_trk <
fMaxDca) {
77 TVector3 pca_i_j = pca->point;
81 if (
fQA.has_value()) {
82 fQA->pca_y_vs_x->Fill(pca_i_j[0], pca_i_j[1]);
83 fQA->pca_x_vs_z->Fill(pca_i_j[2], pca_i_j[0]);
84 fQA->pca_y_vs_z->Fill(pca_i_j[2], pca_i_j[1]);
105 TVector3 n = e1.Cross(e2);
110 TVector3 e1n = e1.Cross(n);
111 TVector3 e2n = e1.Cross(n);
112 TVector3 r21 = r2 - r1;
114 float t1 = e2n.Dot(r21) / nn;
115 float t2 = e1n.Dot(r21) / nn;
117 TVector3 p1 = r1 + t1 * e1;
118 TVector3 p2 = r2 + t2 * e2;
119 TVector3 p21 = p2 - p1;
121 TVector3 point = 0.5 * (p1 + p2);
122 double d_trk = 0.5 * p21.Mag();
124 return std::make_optional<PCA>({point, d_trk});