174 constexpr int NTest = 10000;
177 TGenPhaseSpace genPHS;
178 constexpr double ele = 0.00051;
179 constexpr double gamma = 2 * ele + 1e-6;
180 constexpr double pion = 0.13957;
181 constexpr double k0 = 0.49761;
182 constexpr double kch = 0.49368;
183 constexpr double dch = 1.86965;
184 std::vector<double> gammadec = {ele, ele};
185 std::vector<double> k0dec = {pion, pion};
186 std::vector<double> dchdec = {pion, kch, pion};
187 std::vector<o2::track::TrackParCov> vctracks;
194 LOG(info) <<
"\n\nProcessing 2-prong Helix - Helix case";
195 std::vector<int> forceQ{1, 1};
196 std::memset(fitstat.data(), 0,
sizeof(fitstat));
200 ft.setPropagateToPCA(
true);
204 ft.setMinParamChange(1e-3);
205 ft.setMinRelChi2Change(0.9);
207 std::string treeName2A =
"pr2a", treeName2AW =
"pr2aw", treeName2W =
"pr2w";
208 TStopwatch swA, swAW, swW;
209 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
210 double meanDA = 0, meanDAW = 0, meanDW = 0;
214 for (
int iev = 0; iev < NTest; iev++) {
215 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
217 ft.setUseAbsDCA(
true);
219 int ncA = ft.process(vctracks[0], vctracks[1]);
223 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
227 ++fitstat[ft.getFitStatus()][0];
229 ft.setUseAbsDCA(
true);
230 ft.setWeightedFinalPCA(
true);
232 int ncAW = ft.process(vctracks[0], vctracks[1]);
236 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
240 ++fitstat[ft.getFitStatus()][1];
242 ft.setUseAbsDCA(
false);
243 ft.setWeightedFinalPCA(
false);
245 int ncW = ft.process(vctracks[0], vctracks[1]);
249 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
253 ++fitstat[ft.getFitStatus()][2];
256 meanDA /= nfoundA ? nfoundA : 1;
257 meanDAW /= nfoundAW ? nfoundAW : 1;
258 meanDW /= nfoundW ? nfoundW : 1;
259 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices Helix : Helix";
260 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
261 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
262 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
263 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
264 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
265 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
278 LOG(info) <<
"\n\nProcessing 2-prong Helix - Helix case gamma conversion";
279 std::vector<int> forceQ{1, 1};
280 std::memset(fitstat.data(), 0,
sizeof(fitstat));
284 ft.setPropagateToPCA(
true);
288 ft.setMinParamChange(1e-3);
289 ft.setMinRelChi2Change(0.9);
291 ft.setCollinear(
true);
293 std::string treeName2A =
"gpr2a", treeName2AW =
"gpr2aw", treeName2W =
"gpr2w";
294 TStopwatch swA, swAW, swW;
295 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
296 double meanDA = 0, meanDAW = 0, meanDW = 0;
300 for (
int iev = 0; iev < NTest; iev++) {
301 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, gamma, gammadec, forceQ);
303 ft.setUseAbsDCA(
true);
305 int ncA = ft.process(vctracks[0], vctracks[1]);
309 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, gammadec);
313 ++fitstat[ft.getFitStatus()][0];
315 ft.setUseAbsDCA(
true);
316 ft.setWeightedFinalPCA(
true);
318 int ncAW = ft.process(vctracks[0], vctracks[1]);
322 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, gammadec);
326 ++fitstat[ft.getFitStatus()][1];
328 ft.setUseAbsDCA(
false);
329 ft.setWeightedFinalPCA(
false);
331 int ncW = ft.process(vctracks[0], vctracks[1]);
335 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, gammadec);
339 ++fitstat[ft.getFitStatus()][2];
342 meanDA /= nfoundA ? nfoundA : 1;
343 meanDAW /= nfoundAW ? nfoundAW : 1;
344 meanDW /= nfoundW ? nfoundW : 1;
345 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices Helix : Helix from gamma conversion";
346 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
347 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
348 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
349 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
350 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
351 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
364 std::vector<int> forceQ{1, 1};
365 LOG(info) <<
"\n\nProcessing 2-prong Helix - Line case";
366 std::memset(fitstat.data(), 0,
sizeof(fitstat));
370 ft.setPropagateToPCA(
true);
373 ft.setMinParamChange(1e-3);
374 ft.setMinRelChi2Change(0.9);
376 std::string treeName2A =
"pr2aHL", treeName2AW =
"pr2awHL", treeName2W =
"pr2wHL";
377 TStopwatch swA, swAW, swW;
378 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
379 double meanDA = 0, meanDAW = 0, meanDW = 0;
383 for (
int iev = 0; iev < NTest; iev++) {
385 forceQ[1 - iev % 2] = 0;
386 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
388 ft.setUseAbsDCA(
true);
390 int ncA = ft.process(vctracks[0], vctracks[1]);
394 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
398 ++fitstat[ft.getFitStatus()][0];
400 ft.setUseAbsDCA(
true);
401 ft.setWeightedFinalPCA(
true);
403 int ncAW = ft.process(vctracks[0], vctracks[1]);
407 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
411 ++fitstat[ft.getFitStatus()][1];
413 ft.setUseAbsDCA(
false);
414 ft.setWeightedFinalPCA(
false);
416 int ncW = ft.process(vctracks[0], vctracks[1]);
420 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
424 ++fitstat[ft.getFitStatus()][2];
427 meanDA /= nfoundA ? nfoundA : 1;
428 meanDAW /= nfoundAW ? nfoundAW : 1;
429 meanDW /= nfoundW ? nfoundW : 1;
430 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices: Helix : Line";
431 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
432 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
433 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
434 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
435 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
436 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
449 std::vector<int> forceQ{0, 0};
450 LOG(info) <<
"\n\nProcessing 2-prong Line - Line case";
451 std::memset(fitstat.data(), 0,
sizeof(fitstat));
455 ft.setPropagateToPCA(
true);
458 ft.setMinParamChange(1e-3);
459 ft.setMinRelChi2Change(0.9);
461 std::string treeName2A =
"pr2aLL", treeName2AW =
"pr2awLL", treeName2W =
"pr2wLL";
462 TStopwatch swA, swAW, swW;
463 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
464 double meanDA = 0, meanDAW = 0, meanDW = 0;
468 for (
int iev = 0; iev < NTest; iev++) {
469 forceQ[0] = forceQ[1] = 0;
470 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
472 ft.setUseAbsDCA(
true);
474 int ncA = ft.process(vctracks[0], vctracks[1]);
478 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
482 ++fitstat[ft.getFitStatus()][0];
484 ft.setUseAbsDCA(
true);
485 ft.setWeightedFinalPCA(
true);
487 int ncAW = ft.process(vctracks[0], vctracks[1]);
491 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
495 ++fitstat[ft.getFitStatus()][1];
497 ft.setUseAbsDCA(
false);
498 ft.setWeightedFinalPCA(
false);
500 int ncW = ft.process(vctracks[0], vctracks[1]);
504 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
508 ++fitstat[ft.getFitStatus()][2];
511 meanDA /= nfoundA ? nfoundA : 1;
512 meanDAW /= nfoundAW ? nfoundAW : 1;
513 meanDW /= nfoundW ? nfoundW : 1;
514 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices: Line : Line";
515 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
516 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
517 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
518 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
519 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
520 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
533 LOG(info) <<
"\n\nProcessing 3-prong vertices";
534 std::vector<int> forceQ{1, 1, 1};
535 std::memset(fitstat.data(), 0,
sizeof(fitstat));
539 ft.setPropagateToPCA(
true);
542 ft.setMinParamChange(1e-3);
543 ft.setMinRelChi2Change(0.9);
545 std::string treeName3A =
"pr3a", treeName3AW =
"pr3aw", treeName3W =
"pr3w";
546 TStopwatch swA, swAW, swW;
547 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
548 double meanDA = 0, meanDAW = 0, meanDW = 0;
552 for (
int iev = 0; iev < NTest; iev++) {
553 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, dch, dchdec, forceQ);
555 ft.setUseAbsDCA(
true);
557 int ncA = ft.process(vctracks[0], vctracks[1], vctracks[2]);
561 auto minD =
checkResults(outStream, treeName3A, ft, vtxGen, genParent, dchdec);
565 ++fitstat[ft.getFitStatus()][0];
567 ft.setUseAbsDCA(
true);
568 ft.setWeightedFinalPCA(
true);
570 int ncAW = ft.process(vctracks[0], vctracks[1], vctracks[2]);
574 auto minD =
checkResults(outStream, treeName3AW, ft, vtxGen, genParent, dchdec);
578 ++fitstat[ft.getFitStatus()][1];
580 ft.setUseAbsDCA(
false);
581 ft.setWeightedFinalPCA(
false);
583 int ncW = ft.process(vctracks[0], vctracks[1], vctracks[2]);
587 auto minD =
checkResults(outStream, treeName3W, ft, vtxGen, genParent, dchdec);
591 ++fitstat[ft.getFitStatus()][2];
594 meanDA /= nfoundA ? nfoundA : 1;
595 meanDAW /= nfoundAW ? nfoundAW : 1;
596 meanDW /= nfoundW ? nfoundW : 1;
597 LOG(info) <<
"Processed " << NTest <<
" 3-prong vertices";
598 LOG(info) <<
"3-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
599 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
600 LOG(info) <<
"3-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
601 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
602 LOG(info) <<
"3-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
603 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";