16 double vertex_dx = 0.01;
17 double vertex_dy = 0.01;
18 double vertex_dz = 0.01;
19 double vertex_x_min = -35 + 0.5 * vertex_dx;
20 double vertex_x_max = +35 + 0.5 * vertex_dx;
21 double vertex_y_min = -35 + 0.5 * vertex_dy;
22 double vertex_y_max = +35 + 0.5 * vertex_dy;
23 double vertex_z_min = -65 + 0.5 * vertex_dz;
24 double vertex_z_max = +65 + 0.5 * vertex_dz;
35 double dca_min = -2.5 - 0.5 * dca_dx;
36 double dca_max = +2.5 + 0.5 * dca_dx;
41 h_name =
"vertex_y_vs_x";
43 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), x_vtx_binning.n_of_bins, x_vtx_binning.x_min,
44 x_vtx_binning.x_max, y_vtx_binning.n_of_bins, y_vtx_binning.x_min, y_vtx_binning.x_max);
45 fH2D[h_name]->GetXaxis()->SetTitle(
"Vertex_{X} [cm]");
46 fH2D[h_name]->GetYaxis()->SetTitle(
"Vertex_{Y} [cm]");
48 h_name =
"vertex_x_vs_z";
50 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), z_vtx_binning.n_of_bins, z_vtx_binning.x_min,
51 z_vtx_binning.x_max, x_vtx_binning.n_of_bins, x_vtx_binning.x_min, x_vtx_binning.x_max);
52 fH2D[h_name]->GetXaxis()->SetTitle(
"Vertex_{Z} [cm]");
53 fH2D[h_name]->GetYaxis()->SetTitle(
"Vertex_{X} [cm]");
55 h_name =
"vertex_y_vs_z";
57 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), z_vtx_binning.n_of_bins, z_vtx_binning.x_min,
58 z_vtx_binning.x_max, y_vtx_binning.n_of_bins, y_vtx_binning.x_min, y_vtx_binning.x_max);
59 fH2D[h_name]->GetXaxis()->SetTitle(
"Vertex_{Z} [cm]");
60 fH2D[h_name]->GetYaxis()->SetTitle(
"Vertex_{Y} [cm]");
65 h_name =
"pca_y_vs_x";
67 std::make_shared<TH2D>(h_name.c_str(), h_name.c_str(), x_vtx_binning.n_of_bins, x_vtx_binning.x_min,
68 x_vtx_binning.x_max, y_vtx_binning.n_of_bins, y_vtx_binning.x_min, y_vtx_binning.x_max);
69 fH2DShared[h_name]->GetXaxis()->SetTitle(
"Vertex_{X} [cm]");
70 fH2DShared[h_name]->GetYaxis()->SetTitle(
"Vertex_{Y} [cm]");
72 h_name =
"pca_x_vs_z";
74 std::make_shared<TH2D>(h_name.c_str(), h_name.c_str(), z_vtx_binning.n_of_bins, z_vtx_binning.x_min,
75 z_vtx_binning.x_max, x_vtx_binning.n_of_bins, x_vtx_binning.x_min, x_vtx_binning.x_max);
76 fH2DShared[h_name]->GetXaxis()->SetTitle(
"Vertex_{Z} [cm]");
77 fH2DShared[h_name]->GetYaxis()->SetTitle(
"Vertex_{X} [cm]");
79 h_name =
"pca_y_vs_z";
81 std::make_shared<TH2D>(h_name.c_str(), h_name.c_str(), z_vtx_binning.n_of_bins, z_vtx_binning.x_min,
82 z_vtx_binning.x_max, y_vtx_binning.n_of_bins, y_vtx_binning.x_min, y_vtx_binning.x_max);
83 fH2DShared[h_name]->GetXaxis()->SetTitle(
"Vertex_{Z} [cm]");
84 fH2DShared[h_name]->GetYaxis()->SetTitle(
"Vertex_{Y} [cm]");
86 std::cout <<
" - DcaVertexFinder - Enabling QA" << std::endl;
92 for (
const char* di : {
"x",
"y",
"z"}) {
93 h_name = Form(
"dca_d%s_vs_x", di);
95 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), r_dca_binning.n_of_bins, r_dca_binning.x_min,
96 r_dca_binning.x_max, x_vtx_binning.n_of_bins, x_vtx_binning.x_min, x_vtx_binning.x_max);
97 fH2D[h_name]->GetYaxis()->SetTitle(
"X [cm]");
98 fH2D[h_name]->GetXaxis()->SetTitle(Form(
"DCA_{%s} [cm]", di));
100 h_name = Form(
"dca_d%s_vs_y", di);
102 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), r_dca_binning.n_of_bins, r_dca_binning.x_min,
103 r_dca_binning.x_max, y_vtx_binning.n_of_bins, y_vtx_binning.x_min, y_vtx_binning.x_max);
104 fH2D[h_name]->GetYaxis()->SetTitle(
"Y [cm]");
105 fH2D[h_name]->GetXaxis()->SetTitle(Form(
"DCA_{%s} [cm]", di));
107 h_name = Form(
"dca_d%s_vs_z", di);
109 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), r_dca_binning.n_of_bins, r_dca_binning.x_min,
110 r_dca_binning.x_max, z_vtx_binning.n_of_bins, z_vtx_binning.x_min, z_vtx_binning.x_max);
111 fH2D[h_name]->GetYaxis()->SetTitle(Form(
"Z [cm]"));
112 fH2D[h_name]->GetXaxis()->SetTitle(Form(
"DCA_{%s} [cm]", di));
118 LOG(info) <<
" - INFO - Enabling MC comparison";
119 for (
const char* di : {
"x",
"y",
"z"}) {
120 h_name = Form(
"res_%s_vs_x", di);
122 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), r_dca_binning.n_of_bins, r_dca_binning.x_min,
123 r_dca_binning.x_max, x_vtx_binning.n_of_bins, x_vtx_binning.x_min, x_vtx_binning.x_max);
124 fH2D[h_name]->GetYaxis()->SetTitle(
"X [cm]");
125 fH2D[h_name]->GetXaxis()->SetTitle(Form(
"%s_{rec} - %s_{MC} [cm]", di, di));
127 h_name = Form(
"res_%s_vs_y", di);
129 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), r_dca_binning.n_of_bins, r_dca_binning.x_min,
130 r_dca_binning.x_max, y_vtx_binning.n_of_bins, y_vtx_binning.x_min, y_vtx_binning.x_max);
131 fH2D[h_name]->GetYaxis()->SetTitle(
"Y [cm]");
132 fH2D[h_name]->GetXaxis()->SetTitle(Form(
"%s_{rec} - %s_{MC} [cm]", di, di));
134 h_name = Form(
"res_%s_vs_z", di);
136 std::make_unique<TH2D>(h_name.c_str(), h_name.c_str(), r_dca_binning.n_of_bins, r_dca_binning.x_min,
137 r_dca_binning.x_max, z_vtx_binning.n_of_bins, z_vtx_binning.x_min, z_vtx_binning.x_max);
138 fH2D[h_name]->GetYaxis()->SetTitle(Form(
"Z [cm]"));
139 fH2D[h_name]->GetXaxis()->SetTitle(Form(
"%s_{rec} - %s_{MC} [cm]", di, di));
145 h_name =
"ca_track_multiplicity_all";
146 fH1D[h_name] = std::make_unique<TH1D>(h_name.c_str(), h_name.c_str(), 50, 0, 50);
147 fH1D[h_name]->GetXaxis()->SetTitle(
"N_{CATrack}");
148 fH1D[h_name]->GetYaxis()->SetTitle(
"Entries");
150 h_name =
"ca_track_multiplicity_sel";
151 fH1D[h_name] = std::make_unique<TH1D>(h_name.c_str(), h_name.c_str(), 50, 0, 50);
152 fH1D[h_name]->GetXaxis()->SetTitle(
"N_{CATrack}");
153 fH1D[h_name]->GetYaxis()->SetTitle(
"Entries");
161 fH1D[
"ca_track_multiplicity_sel"]->Fill(
fGlbTrks.size());
164 const std::optional<CbmVertex> vertex =
fVertexFinder->FindVertex();
166 if (vertex.has_value()) {
168 TVector3 vtx(vertex->GetX(), vertex->GetY(), vertex->GetZ());
170 fH2D[
"vertex_y_vs_x"]->Fill(vtx[0], vtx[1]);
171 fH2D[
"vertex_x_vs_z"]->Fill(vtx[2], vtx[0]);
172 fH2D[
"vertex_y_vs_z"]->Fill(vtx[2], vtx[1]);
175 float trk_tx = trk->GetParamFirst()->GetTx();
176 float trk_ty = trk->GetParamFirst()->GetTy();
177 float trk_x0 = trk->GetParamFirst()->GetX();
178 float trk_y0 = trk->GetParamFirst()->GetY();
179 float trk_z0 = trk->GetParamFirst()->GetZ();
181 TVector3 p(trk_x0, trk_y0, trk_z0);
182 TVector3 e(trk_tx, trk_ty, 1);
183 TVector3 trk_to_vtx = ((vtx - p).Cross(e)) * (1. / e.Mag());
185 fH2D[
"dca_dx_vs_x"]->Fill(trk_to_vtx.Px(), vtx.Px());
186 fH2D[
"dca_dx_vs_y"]->Fill(trk_to_vtx.Px(), vtx.Py());
187 fH2D[
"dca_dx_vs_z"]->Fill(trk_to_vtx.Px(), vtx.Pz());
189 fH2D[
"dca_dy_vs_x"]->Fill(trk_to_vtx.Py(), vtx.Px());
190 fH2D[
"dca_dy_vs_y"]->Fill(trk_to_vtx.Py(), vtx.Py());
191 fH2D[
"dca_dy_vs_z"]->Fill(trk_to_vtx.Py(), vtx.Pz());
193 fH2D[
"dca_dz_vs_x"]->Fill(trk_to_vtx.Pz(), vtx.Px());
194 fH2D[
"dca_dz_vs_y"]->Fill(trk_to_vtx.Pz(), vtx.Py());
195 fH2D[
"dca_dz_vs_z"]->Fill(trk_to_vtx.Pz(), vtx.Pz());
201 for (
int mc_trk_idx = 0; mc_trk_idx < n_of_mc_trks; mc_trk_idx++) {
203 if (mc_trk->GetMotherId() == -1) {
204 mc_trk->GetStartVertex(mc_vertex);
209 fH2D[
"res_x_vs_x"]->Fill(vtx[0] - mc_vertex[0], vtx[0]);
210 fH2D[
"res_x_vs_y"]->Fill(vtx[0] - mc_vertex[0], vtx[1]);
211 fH2D[
"res_x_vs_z"]->Fill(vtx[0] - mc_vertex[0], vtx[2]);
213 fH2D[
"res_y_vs_x"]->Fill(vtx[1] - mc_vertex[1], vtx[0]);
214 fH2D[
"res_y_vs_y"]->Fill(vtx[1] - mc_vertex[1], vtx[1]);
215 fH2D[
"res_y_vs_z"]->Fill(vtx[1] - mc_vertex[1], vtx[2]);
217 fH2D[
"res_z_vs_x"]->Fill(vtx[2] - mc_vertex[2], vtx[0]);
218 fH2D[
"res_z_vs_y"]->Fill(vtx[2] - mc_vertex[2], vtx[1]);
219 fH2D[
"res_z_vs_z"]->Fill(vtx[2] - mc_vertex[2], vtx[2]);