148 constexpr int NTest = 10000;
151 TGenPhaseSpace genPHS;
152 constexpr double ele = 0.00051;
153 constexpr double gamma = 2 * ele + 1e-6;
154 constexpr double pion = 0.13957;
155 constexpr double k0 = 0.49761;
156 constexpr double kch = 0.49368;
157 constexpr double dch = 1.86965;
158 std::vector<double> gammadec = {ele, ele};
159 std::vector<double> k0dec = {pion, pion};
160 std::vector<double> dchdec = {pion, kch, pion};
161 std::vector<o2::track::TrackParCov> vctracks;
167 LOG(info) <<
"\n\nProcessing 2-prong Helix - Helix case";
168 std::vector<int> forceQ{1, 1};
172 ft.setPropagateToPCA(
true);
176 ft.setMinParamChange(1e-3);
177 ft.setMinRelChi2Change(0.9);
179 std::string treeName2A =
"pr2a", treeName2AW =
"pr2aw", treeName2W =
"pr2w";
180 TStopwatch swA, swAW, swW;
181 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
182 double meanDA = 0, meanDAW = 0, meanDW = 0;
186 for (
int iev = 0; iev < NTest; iev++) {
187 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
189 ft.setUseAbsDCA(
true);
191 int ncA = ft.process(vctracks[0], vctracks[1]);
195 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
200 ft.setUseAbsDCA(
true);
201 ft.setWeightedFinalPCA(
true);
203 int ncAW = ft.process(vctracks[0], vctracks[1]);
207 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
212 ft.setUseAbsDCA(
false);
213 ft.setWeightedFinalPCA(
false);
215 int ncW = ft.process(vctracks[0], vctracks[1]);
219 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
225 meanDA /= nfoundA ? nfoundA : 1;
226 meanDAW /= nfoundAW ? nfoundAW : 1;
227 meanDW /= nfoundW ? nfoundW : 1;
228 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices Helix : Helix";
229 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
230 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
231 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
232 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
233 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
234 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
246 LOG(info) <<
"\n\nProcessing 2-prong Helix - Helix case gamma conversion";
247 std::vector<int> forceQ{1, 1};
251 ft.setPropagateToPCA(
true);
255 ft.setMinParamChange(1e-3);
256 ft.setMinRelChi2Change(0.9);
258 std::string treeName2A =
"gpr2a", treeName2AW =
"gpr2aw", treeName2W =
"gpr2w";
259 TStopwatch swA, swAW, swW;
260 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
261 double meanDA = 0, meanDAW = 0, meanDW = 0;
265 for (
int iev = 0; iev < NTest; iev++) {
266 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, gamma, gammadec, forceQ);
268 ft.setUseAbsDCA(
true);
270 int ncA = ft.process(vctracks[0], vctracks[1]);
274 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, gammadec);
279 ft.setUseAbsDCA(
true);
280 ft.setWeightedFinalPCA(
true);
282 int ncAW = ft.process(vctracks[0], vctracks[1]);
286 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, gammadec);
291 ft.setUseAbsDCA(
false);
292 ft.setWeightedFinalPCA(
false);
294 int ncW = ft.process(vctracks[0], vctracks[1]);
298 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, gammadec);
304 meanDA /= nfoundA ? nfoundA : 1;
305 meanDAW /= nfoundAW ? nfoundAW : 1;
306 meanDW /= nfoundW ? nfoundW : 1;
307 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices Helix : Helix from gamma conversion";
308 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
309 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
310 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
311 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
312 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
313 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
325 std::vector<int> forceQ{1, 1};
326 LOG(info) <<
"\n\nProcessing 2-prong Helix - Line case";
329 ft.setPropagateToPCA(
true);
332 ft.setMinParamChange(1e-3);
333 ft.setMinRelChi2Change(0.9);
335 std::string treeName2A =
"pr2aHL", treeName2AW =
"pr2awHL", treeName2W =
"pr2wHL";
336 TStopwatch swA, swAW, swW;
337 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
338 double meanDA = 0, meanDAW = 0, meanDW = 0;
342 for (
int iev = 0; iev < NTest; iev++) {
344 forceQ[1 - iev % 2] = 0;
345 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
347 ft.setUseAbsDCA(
true);
349 int ncA = ft.process(vctracks[0], vctracks[1]);
353 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
358 ft.setUseAbsDCA(
true);
359 ft.setWeightedFinalPCA(
true);
361 int ncAW = ft.process(vctracks[0], vctracks[1]);
365 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
370 ft.setUseAbsDCA(
false);
371 ft.setWeightedFinalPCA(
false);
373 int ncW = ft.process(vctracks[0], vctracks[1]);
377 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
383 meanDA /= nfoundA ? nfoundA : 1;
384 meanDAW /= nfoundAW ? nfoundAW : 1;
385 meanDW /= nfoundW ? nfoundW : 1;
386 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices: Helix : Line";
387 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
388 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
389 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
390 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
391 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
392 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
404 std::vector<int> forceQ{0, 0};
405 LOG(info) <<
"\n\nProcessing 2-prong Line - Line case";
408 ft.setPropagateToPCA(
true);
411 ft.setMinParamChange(1e-3);
412 ft.setMinRelChi2Change(0.9);
414 std::string treeName2A =
"pr2aLL", treeName2AW =
"pr2awLL", treeName2W =
"pr2wLL";
415 TStopwatch swA, swAW, swW;
416 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
417 double meanDA = 0, meanDAW = 0, meanDW = 0;
421 for (
int iev = 0; iev < NTest; iev++) {
422 forceQ[0] = forceQ[1] = 0;
423 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
425 ft.setUseAbsDCA(
true);
427 int ncA = ft.process(vctracks[0], vctracks[1]);
431 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
436 ft.setUseAbsDCA(
true);
437 ft.setWeightedFinalPCA(
true);
439 int ncAW = ft.process(vctracks[0], vctracks[1]);
443 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
448 ft.setUseAbsDCA(
false);
449 ft.setWeightedFinalPCA(
false);
451 int ncW = ft.process(vctracks[0], vctracks[1]);
455 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
461 meanDA /= nfoundA ? nfoundA : 1;
462 meanDAW /= nfoundAW ? nfoundAW : 1;
463 meanDW /= nfoundW ? nfoundW : 1;
464 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices: Line : Line";
465 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
466 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
467 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
468 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
469 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
470 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
482 LOG(info) <<
"\n\nProcessing 3-prong vertices";
483 std::vector<int> forceQ{1, 1, 1};
486 ft.setPropagateToPCA(
true);
489 ft.setMinParamChange(1e-3);
490 ft.setMinRelChi2Change(0.9);
492 std::string treeName3A =
"pr3a", treeName3AW =
"pr3aw", treeName3W =
"pr3w";
493 TStopwatch swA, swAW, swW;
494 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
495 double meanDA = 0, meanDAW = 0, meanDW = 0;
499 for (
int iev = 0; iev < NTest; iev++) {
500 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, dch, dchdec, forceQ);
502 ft.setUseAbsDCA(
true);
504 int ncA = ft.process(vctracks[0], vctracks[1], vctracks[2]);
508 auto minD =
checkResults(outStream, treeName3A, ft, vtxGen, genParent, dchdec);
513 ft.setUseAbsDCA(
true);
514 ft.setWeightedFinalPCA(
true);
516 int ncAW = ft.process(vctracks[0], vctracks[1], vctracks[2]);
520 auto minD =
checkResults(outStream, treeName3AW, ft, vtxGen, genParent, dchdec);
525 ft.setUseAbsDCA(
false);
526 ft.setWeightedFinalPCA(
false);
528 int ncW = ft.process(vctracks[0], vctracks[1], vctracks[2]);
532 auto minD =
checkResults(outStream, treeName3W, ft, vtxGen, genParent, dchdec);
538 meanDA /= nfoundA ? nfoundA : 1;
539 meanDAW /= nfoundAW ? nfoundAW : 1;
540 meanDW /= nfoundW ? nfoundW : 1;
541 LOG(info) <<
"Processed " << NTest <<
" 3-prong vertices";
542 LOG(info) <<
"3-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
543 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
544 LOG(info) <<
"3-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
545 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
546 LOG(info) <<
"3-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
547 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";