174 constexpr bool oldMode =
false;
175 constexpr int NTest = 10000;
178 TGenPhaseSpace genPHS;
179 constexpr double ele = 0.00051;
180 constexpr double gamma = 2 * ele + 1e-6;
181 constexpr double pion = 0.13957;
182 constexpr double k0 = 0.49761;
183 constexpr double kch = 0.49368;
184 constexpr double dch = 1.86965;
185 std::vector<double> gammadec = {ele, ele};
186 std::vector<double> k0dec = {pion, pion};
187 std::vector<double> dchdec = {pion, kch, pion};
188 std::vector<o2::track::TrackParCov> vctracks;
195 LOG(info) <<
"\n\nProcessing 2-prong Helix - Helix case";
196 std::vector<int> forceQ{1, 1};
197 std::memset(fitstat.data(), 0,
sizeof(fitstat));
202 ft.setPropagateToPCA(
true);
206 ft.setMinParamChange(1e-3);
207 ft.setMinRelChi2Change(0.9);
209 std::string treeName2A =
"pr2a", treeName2AW =
"pr2aw", treeName2W =
"pr2w";
210 TStopwatch swA, swAW, swW;
211 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
212 double meanDA = 0, meanDAW = 0, meanDW = 0;
216 for (
int iev = 0; iev < NTest; iev++) {
217 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
219 ft.setUseAbsDCA(
true);
221 int ncA = ft.process(vctracks[0], vctracks[1]);
225 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
229 ++fitstat[ft.getFitStatus()][0];
231 ft.setUseAbsDCA(
true);
232 ft.setWeightedFinalPCA(
true);
234 int ncAW = ft.process(vctracks[0], vctracks[1]);
238 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
242 ++fitstat[ft.getFitStatus()][1];
244 ft.setUseAbsDCA(
false);
245 ft.setWeightedFinalPCA(
false);
247 int ncW = ft.process(vctracks[0], vctracks[1]);
251 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
255 ++fitstat[ft.getFitStatus()][2];
258 meanDA /= nfoundA ? nfoundA : 1;
259 meanDAW /= nfoundAW ? nfoundAW : 1;
260 meanDW /= nfoundW ? nfoundW : 1;
261 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices Helix : Helix";
262 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
263 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
264 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
265 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
266 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
267 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
280 LOG(info) <<
"\n\nProcessing 2-prong Helix - Helix case gamma conversion";
281 std::vector<int> forceQ{1, 1};
282 std::memset(fitstat.data(), 0,
sizeof(fitstat));
287 ft.setPropagateToPCA(
true);
291 ft.setMinParamChange(1e-3);
292 ft.setMinRelChi2Change(0.9);
294 ft.setCollinear(
true);
296 std::string treeName2A =
"gpr2a", treeName2AW =
"gpr2aw", treeName2W =
"gpr2w";
297 TStopwatch swA, swAW, swW;
298 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
299 double meanDA = 0, meanDAW = 0, meanDW = 0;
303 for (
int iev = 0; iev < NTest; iev++) {
304 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, gamma, gammadec, forceQ);
306 ft.setUseAbsDCA(
true);
308 int ncA = ft.process(vctracks[0], vctracks[1]);
312 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, gammadec);
316 ++fitstat[ft.getFitStatus()][0];
318 ft.setUseAbsDCA(
true);
319 ft.setWeightedFinalPCA(
true);
321 int ncAW = ft.process(vctracks[0], vctracks[1]);
325 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, gammadec);
329 ++fitstat[ft.getFitStatus()][1];
331 ft.setUseAbsDCA(
false);
332 ft.setWeightedFinalPCA(
false);
334 int ncW = ft.process(vctracks[0], vctracks[1]);
338 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, gammadec);
342 ++fitstat[ft.getFitStatus()][2];
345 meanDA /= nfoundA ? nfoundA : 1;
346 meanDAW /= nfoundAW ? nfoundAW : 1;
347 meanDW /= nfoundW ? nfoundW : 1;
348 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices Helix : Helix from gamma conversion";
349 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
350 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
351 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
352 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
353 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
354 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
367 std::vector<int> forceQ{1, 1};
368 LOG(info) <<
"\n\nProcessing 2-prong Helix - Line case";
369 std::memset(fitstat.data(), 0,
sizeof(fitstat));
374 ft.setPropagateToPCA(
true);
377 ft.setMinParamChange(1e-3);
378 ft.setMinRelChi2Change(0.9);
380 std::string treeName2A =
"pr2aHL", treeName2AW =
"pr2awHL", treeName2W =
"pr2wHL";
381 TStopwatch swA, swAW, swW;
382 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
383 double meanDA = 0, meanDAW = 0, meanDW = 0;
387 for (
int iev = 0; iev < NTest; iev++) {
389 forceQ[1 - iev % 2] = 0;
390 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
392 ft.setUseAbsDCA(
true);
394 int ncA = ft.process(vctracks[0], vctracks[1]);
398 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
402 ++fitstat[ft.getFitStatus()][0];
404 ft.setUseAbsDCA(
true);
405 ft.setWeightedFinalPCA(
true);
407 int ncAW = ft.process(vctracks[0], vctracks[1]);
411 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
415 ++fitstat[ft.getFitStatus()][1];
417 ft.setUseAbsDCA(
false);
418 ft.setWeightedFinalPCA(
false);
420 int ncW = ft.process(vctracks[0], vctracks[1]);
424 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
428 ++fitstat[ft.getFitStatus()][2];
431 meanDA /= nfoundA ? nfoundA : 1;
432 meanDAW /= nfoundAW ? nfoundAW : 1;
433 meanDW /= nfoundW ? nfoundW : 1;
434 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices: Helix : Line";
435 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
436 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
437 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
438 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
439 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
440 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
453 std::vector<int> forceQ{0, 0};
454 LOG(info) <<
"\n\nProcessing 2-prong Line - Line case";
455 std::memset(fitstat.data(), 0,
sizeof(fitstat));
460 ft.setPropagateToPCA(
true);
463 ft.setMinParamChange(1e-3);
464 ft.setMinRelChi2Change(0.9);
466 std::string treeName2A =
"pr2aLL", treeName2AW =
"pr2awLL", treeName2W =
"pr2wLL";
467 TStopwatch swA, swAW, swW;
468 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
469 double meanDA = 0, meanDAW = 0, meanDW = 0;
473 for (
int iev = 0; iev < NTest; iev++) {
474 forceQ[0] = forceQ[1] = 0;
475 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, k0, k0dec, forceQ);
477 ft.setUseAbsDCA(
true);
479 int ncA = ft.process(vctracks[0], vctracks[1]);
483 auto minD =
checkResults(outStream, treeName2A, ft, vtxGen, genParent, k0dec);
487 ++fitstat[ft.getFitStatus()][0];
489 ft.setUseAbsDCA(
true);
490 ft.setWeightedFinalPCA(
true);
492 int ncAW = ft.process(vctracks[0], vctracks[1]);
496 auto minD =
checkResults(outStream, treeName2AW, ft, vtxGen, genParent, k0dec);
500 ++fitstat[ft.getFitStatus()][1];
502 ft.setUseAbsDCA(
false);
503 ft.setWeightedFinalPCA(
false);
505 int ncW = ft.process(vctracks[0], vctracks[1]);
509 auto minD =
checkResults(outStream, treeName2W, ft, vtxGen, genParent, k0dec);
513 ++fitstat[ft.getFitStatus()][2];
516 meanDA /= nfoundA ? nfoundA : 1;
517 meanDAW /= nfoundAW ? nfoundAW : 1;
518 meanDW /= nfoundW ? nfoundW : 1;
519 LOG(info) <<
"Processed " << NTest <<
" 2-prong vertices: Line : Line";
520 LOG(info) <<
"2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
521 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
522 LOG(info) <<
"2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
523 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
524 LOG(info) <<
"2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
525 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";
538 LOG(info) <<
"\n\nProcessing 3-prong vertices";
539 std::vector<int> forceQ{1, 1, 1};
540 std::memset(fitstat.data(), 0,
sizeof(fitstat));
545 ft.setPropagateToPCA(
true);
548 ft.setMinParamChange(1e-3);
549 ft.setMinRelChi2Change(0.9);
551 std::string treeName3A =
"pr3a", treeName3AW =
"pr3aw", treeName3W =
"pr3w";
552 TStopwatch swA, swAW, swW;
553 int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
554 double meanDA = 0, meanDAW = 0, meanDW = 0;
558 for (
int iev = 0; iev < NTest; iev++) {
559 auto genParent =
generate(vtxGen, vctracks, bz, genPHS, dch, dchdec, forceQ);
561 ft.setUseAbsDCA(
true);
563 int ncA = ft.process(vctracks[0], vctracks[1], vctracks[2]);
567 auto minD =
checkResults(outStream, treeName3A, ft, vtxGen, genParent, dchdec);
571 ++fitstat[ft.getFitStatus()][0];
573 ft.setUseAbsDCA(
true);
574 ft.setWeightedFinalPCA(
true);
576 int ncAW = ft.process(vctracks[0], vctracks[1], vctracks[2]);
580 auto minD =
checkResults(outStream, treeName3AW, ft, vtxGen, genParent, dchdec);
584 ++fitstat[ft.getFitStatus()][1];
586 ft.setUseAbsDCA(
false);
587 ft.setWeightedFinalPCA(
false);
589 int ncW = ft.process(vctracks[0], vctracks[1], vctracks[2]);
593 auto minD =
checkResults(outStream, treeName3W, ft, vtxGen, genParent, dchdec);
597 ++fitstat[ft.getFitStatus()][2];
600 meanDA /= nfoundA ? nfoundA : 1;
601 meanDAW /= nfoundAW ? nfoundAW : 1;
602 meanDW /= nfoundW ? nfoundW : 1;
603 LOG(info) <<
"Processed " << NTest <<
" 3-prong vertices";
604 LOG(info) <<
"3-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
605 <<
" mean.dist to truth: " << meanDA <<
" CPU time: " << swA.CpuTime() * 1000 <<
" ms";
606 LOG(info) <<
"3-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
607 <<
" mean.dist to truth: " << meanDAW <<
" CPU time: " << swAW.CpuTime() * 1000 <<
" ms";
608 LOG(info) <<
"3-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
609 <<
" mean.dist to truth: " << meanDW <<
" CPU time: " << swW.CpuTime() * 1000 <<
" ms";