25 #include "oneapi/tbb/task_arena.h" 26 #include "oneapi/tbb/parallel_for.h" 27 #include <oneapi/tbb/global_control.h> 29 #if defined(USE_VTUNE_PAUSE) 30 #include "ittnotify.h" 39 using namespace mkfit;
86 "mkFit.cc/%s--JSON-Load read %d JSON entities from %d files, replaced %d parameters.\n" 87 " NOTE that these changes were NOT APPLIED to actual configuration that is going to be used.\n",
99 printf(
"mkFit.cc/%s--JOSN-Patch read %d JSON entities from %d files, replaced %d parameters.\n",
126 int g_start_event = 1;
128 bool g_run_fit_std =
false;
130 bool g_run_build_all =
true;
131 bool g_run_build_cmssw =
false;
132 bool g_run_build_bh =
false;
133 bool g_run_build_std =
false;
134 bool g_run_build_ce =
false;
135 bool g_run_build_mimi =
false;
143 void init_seed_opts() {
144 g_seed_opts[
"sim"] = {
simSeeds,
"Use simtracks for seeds"};
145 g_seed_opts[
"cmssw"] = {
cmsswSeeds,
"Use external CMSSW seeds"};
146 g_seed_opts[
"find"] = {
findSeeds,
"Use mplex seed finder for seeds"};
150 void init_clean_opts() {
151 g_clean_opts[
"none"] = {
noCleaning,
"No cleaning applied to external CMSSW seeds"};
152 g_clean_opts[
"n2"] = {
cleanSeedsN2,
"Apply N^2 cleaning by Mario to external CMSSW seeds"};
153 g_clean_opts[
"pure"] = {
155 "Only use external CMSSW seeds that have produced a CMSSW track \n must enable: --read-cmssw-tracks"};
156 g_clean_opts[
"badlabel"] = {
cleanSeedsBadLabel,
"Remove seeds with label()<0 in external CMSSW seeds"};
160 void init_match_opts() {
162 "Use track parameter-based matching for validating against CMSSW tracks"};
163 g_match_opts[
"hits"] = {
hitBased,
"Use hit-based matching for validating against CMSSW tracks"};
164 g_match_opts[
"label"] = {
labelBased,
"Only allowed with pure seeds: stricter hit-based matching"};
167 const char* b2a(
bool b) {
return b ?
"true" :
"false"; }
175 template <
typename T,
typename U>
179 for (
const auto& g_opt_pair : g_opt_map) {
180 if (g_opt_pair.second.first == c_opt)
181 return g_opt_pair.first;
183 std::cerr <<
"No match for option " << c_opt << std::endl;
187 template <
typename T,
typename U>
189 if (g_opt_map.count(cmd_ln_str))
190 c_opt = g_opt_map.at(cmd_ln_str).first;
192 std::cerr << cmd_ln_str <<
" is not a valid " << ex_txt <<
" option!! Exiting..." << std::endl;
197 template <
typename U>
199 for (
const auto& g_opt_pair : g_opt_map) {
200 std::cout <<
" " << g_opt_pair.first.c_str() <<
" : " << g_opt_pair.second.second.c_str() << std::endl;
207 printf(
"Running test_standard(), operation=\"%s\", best_out_of=%d\n",
212 printf(
"- reading seeds from file\n");
221 if (g_operation ==
"read") {
223 int evs_available = evs_in_file - g_start_event + 1;
227 printf(
"Requested number of events %d, only %d available.\n",
Config::nEvents, evs_available);
231 if (g_start_event > 1) {
236 constexpr
int NT = 5;
237 double t_sum[NT] = {0};
238 double t_skip[NT] = {0};
243 std::atomic<int>
nevt{g_start_event};
244 std::atomic<int> seedstot{0}, simtrackstot{0}, candstot{0};
245 std::atomic<int> maxHits_all{0}, maxLayer_all{0};
253 std::vector<std::shared_ptr<FILE>> fps;
259 std::ostringstream serial;
267 if (g_operation ==
"read") {
268 fps.emplace_back(fopen(g_input_file.c_str(),
"r"), [](FILE*
fp) {
283 arena.execute([&]() {
286 [&](
const tbb::blocked_range<int>& threads) {
287 int thisthread = threads.begin();
292 auto&
ev = *evs[thisthread].get();
293 auto& mkb = *mkbs[thisthread].get();
294 auto& eoh = *eohs[thisthread].get();
295 auto fp = fps[thisthread].get();
297 int evstart = thisthread * events_per_thread;
300 dprint(
"thisthread " << thisthread <<
" events " <<
Config::nEvents <<
" events/thread " << events_per_thread
301 <<
" range " << evstart <<
":" << evend);
303 for (
int evt = evstart; evt < evend; ++evt) {
309 printf(
"Processing event %d\n",
ev.evtID());
312 ev.read_in(data_file,
fp);
315 if (
ev.seedTracks_.empty())
326 double t_best[NT] = {0}, t_cur[NT] = {0};
327 std::vector<double> t_cur_iter;
328 simtrackstot +=
ev.simTracks_.size();
329 seedstot +=
ev.seedTracks_.size();
331 int ncands_thisthread = 0;
332 int maxHits_thisthread = 0;
333 int maxLayer_thisthread = 0;
338 if (g_run_build_all || g_run_build_mimi)
341 if (g_run_build_all || g_run_build_cmssw)
344 if (g_run_build_ce || g_run_build_mimi) {
345 ncands_thisthread = mkb.total_cands();
346 auto const& ln = mkb.max_hits_layer(eoh);
347 maxHits_thisthread = ln.first;
348 maxLayer_thisthread = ln.second;
350 for (
int i = 0;
i < NT; ++
i)
351 t_best[
i] = (
b == 0) ? t_cur[
i] :
std::min(t_cur[
i], t_best[
i]);
356 printf(
"----------------------------------------------------------------\n");
357 printf(
"Best-of-times:");
358 for (
int i = 0;
i < NT; ++
i)
359 printf(
" %.5f/%.5f", t_cur[
i], t_best[
i]);
362 printf(
"----------------------------------------------------------------\n");
366 candstot += ncands_thisthread;
367 if (maxHits_thisthread > maxHits_all) {
368 maxHits_all = maxHits_thisthread;
369 maxLayer_all = maxLayer_thisthread;
373 printf(
"Matriplex fit = %.5f --- Build BHMX = %.5f STDMX = %.5f CEMX = %.5f MIMI = %.5f\n",
383 std::lock_guard<std::mutex> locker(sum_up_lock);
385 for (
int i = 0;
i < NT; ++
i)
386 t_sum[
i] += t_best[
i];
388 for (
int i = 0;
i < NT; ++
i)
389 t_skip[
i] += t_best[
i];
390 if (g_run_build_all || g_run_build_mimi) {
392 t_sum_iter[
i] += t_cur_iter[
i];
395 t_skip_iter[
i] += t_cur_iter[
i];
400 tbb::simple_partitioner());
406 printf(
"================================================================\n");
408 printf(
"================================================================\n");
410 printf(
"Total Matriplex fit = %.5f --- Build BHMX = %.5f STDMX = %.5f CEMX = %.5f MIMI = %.5f\n",
416 printf(
"Total event > 1 fit = %.5f --- Build BHMX = %.5f STDMX = %.5f CEMX = %.5f MIMI = %.5f\n",
422 printf(
"Total event loop time %.5f simtracks %d seedtracks %d builtcands %d maxhits %d on lay %d\n",
428 maxLayer_all.load());
430 if (g_run_build_all || g_run_build_mimi) {
431 printf(
"================================================================\n");
433 std::cout <<
" Iteration " <<
i <<
" build time = " << t_sum_iter[
i] <<
" \n";
434 printf(
"================================================================\n");
436 std::cout <<
" Iteration " <<
i <<
" build time (event > 1) = " << t_skip_iter[
i] <<
" \n";
437 printf(
"================================================================\n");
439 if (g_operation ==
"read") {
443 for (
auto&
val : vals) {
444 val->fillConfigTree();
462 if (++
j ==
args.end() ||
has_suffix(*
j,
".C") || ((*j)[0] ==
'-' && !(*
j ==
"-" && allow_single_minus))) {
463 std::cerr <<
"Error: option " << *
i <<
" requires an argument.\n";
478 feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
482 #ifdef USE_VTUNE_PAUSE 487 "To make sure this is true for icc and gcc<6 when mixing bools/ints in bitfields.");
495 for (
int i = 1;
i <
argc; ++
i) {
496 mArgs.push_back(
argv[
i]);
498 bool run_shell =
false;
501 while (
i != mArgs.end()) {
504 if (*
i ==
"-h" || *
i ==
"-help" || *
i ==
"--help") {
507 "Usage: %s [options]\n" 508 "Options: defaults defined as (def: DEFAULT VALUE)\n" 509 "\n----------------------------------------------------------------------------------------------------------" 511 "Generic options\n\n" 512 " --geom <str> geometry plugin to use (def: %s)\n" 513 " --silent suppress printouts inside event loop (def: %s)\n" 514 " --best-out-of <int> run test num times, report best time (def: %d)\n" 515 " --input-file file name for reading (def: %s)\n" 516 " --output-file file name for writitng (def: %s)\n" 517 " --read-cmssw-tracks read external cmssw reco tracks if available (def: %s)\n" 518 " --read-simtrack-states read in simTrackStates for pulls in validation (def: %s)\n" 519 " --num-events <int> number of events to run over or simulate (def: %d)\n" 520 " if using --input-file, must be enabled AFTER on command line\n" 521 " --start-event <int> event number to start at when reading from a file (def: %d)\n" 522 " --loop-over-file after reaching the end of the file, start over from the beginning until " 523 " <num-events> events have been processed\n" 524 " --shell start interactive shell instead of running test_standard()\n" 526 "If no --input-file is specified, will trigger simulation\n" 527 " --num-tracks <int> number of tracks to generate for each event (def: %d)\n" 528 "\n----------------------------------------------------------------------------------------------------------" 530 "Threading related options\n\n" 531 " --num-thr-sim <int> number of threads for simulation (def: %d)\n" 532 " --num-thr <int> number of threads for track finding (def: %d)\n" 533 " --num-thr-ev <int> number of threads to run the event loop (def: %d)\n" 534 " --seeds-per-task <int> number of seeds to process in a tbb task (def: %d)\n" 535 " --hits-per-task <int> number of layer1 hits per task when using find seeds (def: %d)\n" 536 "\n----------------------------------------------------------------------------------------------------------" 538 "FittingTestMPlex options\n\n" 539 " --fit-std run standard fitting test (def: %s)\n" 540 " --fit-std-only run only standard fitting test (def: %s)\n" 541 " --cf-fitting enable conformal fit before fitting tracks to get initial estimate of track " 542 "parameters and errors (def: %s)\n" 543 " --fit-val enable ROOT based validation for fittingMPlex (def: %s)\n" 544 "\n----------------------------------------------------------------------------------------------------------" 546 "BuildingTestMPlex options\n\n" 547 " **Specify which building routine you would like to run\n" 548 " --build-cmssw run dummy validation of CMSSW tracks with MkBuilder stuff (def: %s)\n" 549 " --build-bh run best-hit building test (def: %s)\n" 550 " --build-std run standard combinatorial building test (def: %s)\n" 551 " --build-ce run clone engine combinatorial building test (def: %s)\n" 552 " --build-mimi run clone engine on multiple-iteration test (def: %s)\n" 553 " --num-iters-cmssw <int> number of mimi iterations to run (def: set to 3 when --build-mimi is in effect, " 556 " **Seeding options\n" 557 " --seed-input <str> which seed collecion used for building (def: %s)\n" 558 " --seed-cleaning <str> which seed cleaning to apply if using cmssw seeds (def: %s)\n" 559 " --cf-seeding enable conformal fit over seeds (def: %s)\n" 561 " **Duplicate removal options\n" 562 " --remove-dup run duplicate removal after building, using both hit and kinematic criteria (def: " 564 " --remove-dup-no-hit run duplicate removal after building, using kinematic criteria only (def: %s)\n" 566 " **Dead module (strip) option\n" 567 " --use-dead-modules run duplicate removal after building, using both hit and kinematic criteria " 570 " **Additional options for building\n" 571 " --use-phiq-arr use phi-Q arrays in select hit indices (def: %s)\n" 572 " --kludge-cms-hit-errors make sure err(xy) > 15 mum, err(z) > 30 mum (def: %s)\n" 573 " --backward-fit perform backward fit during building (def: %s)\n" 574 " --no-backward-search do not do backward search after backward fit\n" 575 " (def: do search if backward-fit is enabled and available in given iteration)\n" 576 " --include-pca do the backward fit to point of closest approach, does not imply " 577 "'--backward-fit' (def: %s)\n" 578 "\n----------------------------------------------------------------------------------------------------------" 580 "Validation options\n\n" 581 " **Text file based options\n" 582 " --quality-val enable printout validation for MkBuilder (def: %s)\n" 583 " must enable: --dump-for-plots\n" 584 " --dump-for-plots make shell printouts for plots (def: %s)\n" 585 " --mtv-like-val configure validation to emulate CMSSW MultiTrackValidator (MTV) (def: %s)\n" 586 " --mtv-require-seeds configure validation to emulate MTV but require sim tracks to be matched to " 589 " **ROOT based options\n" 590 " --sim-val-for-cmssw enable ROOT based validation for CMSSW tracks with simtracks as reference [eff, " 591 "FR, DR] (def: %s)\n" 592 " --sim-val enable ROOT based validation for seeding, building, and fitting with simtracks " 593 "as reference [eff, FR, DR] (def: %s)\n" 594 " --cmssw-val enable ROOT based validation for building and fitting with CMSSW tracks as " 595 "reference [eff, FR, DR] (def: %s)\n" 596 " must enable: --geom CMS-phase1 --read-cmssw-tracks\n" 597 " --cmssw-match-fw <str> which cmssw track matching routine to use if validating against CMSSW tracks, " 598 "forward built tracks only (def: %s)\n" 599 " must enable: --geom CMS-phase1 --cmssw-val --read-cmssw-tracks\n" 600 " --cmssw-match-bk <str> which cmssw track matching routine to use if validating against CMSSW tracks, " 601 "backward fit tracks only (def: %s)\n" 602 " must enable: --geom CMS-phase1 --cmssw-val --read-cmssw-tracks --backward-fit " 603 "--backward-fit-pca\n" 604 " --inc-shorts include short reco tracks into FR (def: %s)\n" 605 " --keep-hit-info keep vectors of hit idxs and branches in trees (def: %s)\n" 606 " --try-to-save-sim-info two options for this flag [related to validation with simtracks as reference " 607 "collection] (def: %s)\n" 608 " a) IF (--read-simtrack-states is enabled)\n" 609 " If a sim track is associated to a reco track, but it does not contain " 610 "the last found on the reco track\n" 611 " still save sim track kinematic info from generator position\n" 612 " b) ELSE (--read-simtrack-states is NOT enabled)\n" 613 " Save sim track kinematic info from generator position if matched to " 615 "\n----------------------------------------------------------------------------------------------------------" 617 "Combo spaghetti, that's with cole slaw:\n\n" 618 " **Building and fitting combo options\n" 619 " --backward-fit-pca perform backward fit to point of closest approach during building\n" 620 " == --backward-fit --include-pca\n" 621 " **Seed combo options\n" 622 " --cmssw-simseeds use CMS geom with simtracks for seeds\n" 623 " == --geom CMS-phase1 --seed-input %s\n" 624 " --cmssw-stdseeds use CMS geom with CMSSW seeds uncleaned\n" 625 " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s\n" 626 " --cmssw-n2seeds use CMS geom with CMSSW seeds cleaned with N^2 routine\n" 627 " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s\n" 628 " --cmssw-pureseeds use CMS geom with pure CMSSW seeds (seeds which produced CMSSW reco tracks), " 629 "enable read of CMSSW tracks\n" 630 " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s --read-cmssw-tracks\n" 631 " --cmssw-goodlabelseeds use CMS geom with CMSSW seeds with label() >= 0\n" 632 " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s\n" 634 " **CMSSW validation combo options\n" 635 " --cmssw-val-fhit-bhit use CMSSW validation with hit based matching (50 percent after seed) for forward " 637 " use CMSSW validation with hit based matching (50 percent after seed) for " 638 "backward fit tracks\n" 639 " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n" 640 " must enable: --backward-fit-pca\n" 641 " --cmssw-val-fhit-bprm use CMSSW validation with hit based matching (50 percent after seed) for forward " 643 " use CMSSW validation with track parameter based matching for backward fit " 645 " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n" 646 " must enable: --backward-fit-pca\n" 647 " --cmssw-val-fprm-bhit use CMSSW validation with track parameter based matching for forward built " 649 " use CMSSW validation with hit based matching (50 percent after seed) for " 650 "backward fit tracks\n" 651 " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n" 652 " must enable: --backward-fit-pca\n" 653 " --cmssw-val-fprm-bprm use CMSSW validation with track parameter based matching for forward built " 655 " use CMSSW validation with track parameter based matching for backward fit " 657 " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n" 658 " must enable: --backward-fit-pca\n" 659 " --cmssw-val-label use CMSSW validation with stricter hit based matching for both forward built and " 660 "backward fit tracks, enable read of CMSSW tracks\n" 661 " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n" 662 " must enable: --cmssw-pureseeds --backward-fit-pca\n" 663 "\n----------------------------------------------------------------------------------------------------------" 665 "JSON config patcher options:\n\n" 666 " --json-load <filename> load single IterationConfig from given JSON file (def: do not load)\n" 667 " can be specified multiple times for several files\n" 668 " --json-patch <filename> patch IterationsInfo from given JSON file (def: do not patch)\n" 669 " can be specified multiple times for several files\n" 670 " --json-save-iterations <fname-fmt> save per iteration json files\n" 671 " %%d in fname-fmt gets replaced with iteration index\n" 672 " %%s in fname-fmt gets replaced with iteration algorithm name\n" 673 " exactly one of %%d and %%s must be specified\n" 674 " --json-save-iterations-include-iter-info-preamble (def: %s)\n" 675 " --json-verbose print each patch assignment as it is being made (def: %s)\n" 676 " --json-dump-before print iteration config before patching (def: %s)\n" 677 " --json-dump-after print iteration config after patching (def: %s)\n" 678 "\n----------------------------------------------------------------------------------------------------------" 685 g_input_file.c_str(),
686 g_output_file.c_str(),
701 !(g_run_build_all || g_run_build_cmssw || g_run_build_bh || g_run_build_std || g_run_build_ce)),
705 b2a(g_run_build_all || g_run_build_cmssw),
706 b2a(g_run_build_all || g_run_build_bh),
707 b2a(g_run_build_all || g_run_build_std),
708 b2a(g_run_build_all || g_run_build_ce),
709 b2a(g_run_build_all || g_run_build_mimi),
765 printf(
"List of options for string based inputs \n");
773 printf(
"--seed-input \n");
777 printf(
"--seed-cleaning \n");
781 printf(
"--cmssw-matching \n");
788 else if (*
i ==
"--geom") {
791 }
else if (*
i ==
"--silent") {
793 }
else if (*
i ==
"--best-out-of") {
796 }
else if (*
i ==
"--input-file") {
799 g_operation =
"read";
801 }
else if (*
i ==
"--output-file") {
804 g_operation =
"write";
805 }
else if (*
i ==
"--read-cmssw-tracks") {
807 }
else if (*
i ==
"--read-simtrack-states") {
809 }
else if (*
i ==
"--num-events") {
812 }
else if (*
i ==
"--start-event") {
814 g_start_event = atoi(
i->c_str());
815 }
else if (*
i ==
"--loop-over-file") {
817 }
else if (*
i ==
"--shell") {
819 }
else if (*
i ==
"--num-tracks") {
822 }
else if (*
i ==
"--num-thr-sim") {
825 }
else if (*
i ==
"--num-thr") {
828 }
else if (*
i ==
"--num-thr-ev") {
831 }
else if (*
i ==
"--seeds-per-task") {
834 }
else if (*
i ==
"--hits-per-task") {
837 }
else if (*
i ==
"--fit-std") {
838 g_run_fit_std =
true;
839 }
else if (*
i ==
"--fit-std-only") {
840 g_run_fit_std =
true;
841 g_run_build_all =
false;
842 g_run_build_bh =
false;
843 g_run_build_std =
false;
844 g_run_build_ce =
false;
845 }
else if (*
i ==
"--cf-fitting") {
847 }
else if (*
i ==
"--fit-val") {
849 }
else if (*
i ==
"--build-cmssw") {
850 g_run_build_all =
false;
851 g_run_build_cmssw =
true;
852 g_run_build_bh =
false;
853 g_run_build_std =
false;
854 g_run_build_ce =
false;
855 }
else if (*
i ==
"--build-bh") {
856 g_run_build_all =
false;
857 g_run_build_cmssw =
false;
858 g_run_build_bh =
true;
859 g_run_build_std =
false;
860 g_run_build_ce =
false;
861 }
else if (*
i ==
"--build-std") {
862 g_run_build_all =
false;
863 g_run_build_cmssw =
false;
864 g_run_build_bh =
false;
865 g_run_build_std =
true;
866 g_run_build_ce =
false;
867 }
else if (*
i ==
"--build-ce") {
868 g_run_build_all =
false;
869 g_run_build_cmssw =
false;
870 g_run_build_bh =
false;
871 g_run_build_std =
false;
872 g_run_build_ce =
true;
873 }
else if (*
i ==
"--build-mimi") {
874 g_run_build_all =
false;
875 g_run_build_cmssw =
false;
876 g_run_build_bh =
false;
877 g_run_build_std =
false;
878 g_run_build_ce =
false;
879 g_run_build_mimi =
true;
882 }
else if (*
i ==
"--num-iters-cmssw") {
885 }
else if (*
i ==
"--seed-input") {
888 }
else if (*
i ==
"--seed-cleaning") {
891 }
else if (*
i ==
"--cf-seeding") {
893 }
else if (*
i ==
"--use-phiq-arr") {
894 #ifdef CONFIG_PhiQArrays 897 printf(
"--use-phiq-arr has no effect: recompile with CONFIG_PhiQArrays\n");
899 }
else if (*
i ==
"--remove-dup") {
900 Config::removeDuplicates =
true;
902 }
else if (*
i ==
"--remove-dup-no-hit") {
903 Config::removeDuplicates =
true;
905 }
else if (*
i ==
"--use-dead-modules") {
907 }
else if (*
i ==
"--kludge-cms-hit-errors") {
909 }
else if (*
i ==
"--backward-fit") {
911 }
else if (*
i ==
"--no-backward-search") {
913 }
else if (*
i ==
"--include-pca") {
915 }
else if (*
i ==
"--quality-val") {
917 }
else if (*
i ==
"--dump-for-plots") {
919 }
else if (*
i ==
"--mtv-like-val") {
923 }
else if (*
i ==
"--mtv-require-seeds") {
928 }
else if (*
i ==
"--sim-val-for-cmssw") {
930 }
else if (*
i ==
"--sim-val") {
932 }
else if (*
i ==
"--cmssw-val") {
934 }
else if (*
i ==
"--cmssw-match-fw") {
937 }
else if (*
i ==
"--cmssw-match-bk") {
940 }
else if (*
i ==
"--inc-shorts") {
942 }
else if (*
i ==
"--keep-hit-info") {
944 }
else if (*
i ==
"--try-to-save-sim-info") {
946 }
else if (*
i ==
"--backward-fit-pca") {
949 }
else if (*
i ==
"--cmssw-simseeds") {
952 }
else if (*
i ==
"--cmssw-stdseeds") {
956 }
else if (*
i ==
"--cmssw-n2seeds") {
960 }
else if (*
i ==
"--cmssw-pureseeds") {
965 }
else if (*
i ==
"--cmssw-goodlabelseeds") {
969 }
else if (*
i ==
"--cmssw-val-fhit-bhit") {
974 }
else if (*
i ==
"--cmssw-val-fhit-bprm") {
979 }
else if (*
i ==
"--cmssw-val-fprm-bhit") {
984 }
else if (*
i ==
"--cmssw-val-fprm-bprm") {
989 }
else if (*
i ==
"--cmssw-val-label") {
994 }
else if (*
i ==
"--json-load") {
997 }
else if (*
i ==
"--json-patch") {
1000 }
else if (*
i ==
"--json-save-iterations") {
1003 }
else if (*
i ==
"--json-save-iterations-include-iter-info-preamble") {
1005 }
else if (*
i ==
"--json-verbose") {
1007 }
else if (*
i ==
"--json-dump-before") {
1009 }
else if (*
i ==
"--json-dump-after") {
1012 fprintf(
stderr,
"Error: Unknown option/argument '%s'.\n",
i->c_str());
1024 std::cerr <<
"What have you done?!? Can't mix cmssw label matching without pure seeds! Exiting...\n";
1027 std::cerr <<
"What have you done?!? Short reco tracks are already accounted for in the MTV-Like Validation! Inclusive " 1028 "shorts is only an option for the standard simval, and will break the MTV-Like simval! Exiting...\n";
1034 printf(
"mkFit configuration complete.\n" 1035 " vusize=%d, num_thr_events=%d, num_thr_finder=%d\n" 1036 " sizeof(Track)=%zu, sizeof(Hit)=%zu, sizeof(SVector3)=%zu, sizeof(SMatrixSym33)=%zu, sizeof(MCHitInfo)=%zu\n",
int openRead(const std::string &fname, int expected_n_layers)
std::map< std::string, std::pair< seedOpts, std::string > > seedOptsMap
double runBuildingTestPlexStandard(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
ROOT::Math::SVector< float, 3 > SVector3
void setOpt(const std::string &cmd_ln_str, T &c_opt, const U &g_opt_map, const std::string &ex_txt)
bool has_suffix(const std::string &str, const std::string &suffix)
std::map< std::string, std::pair< matchOpts, std::string > > matchOptsMap
std::vector< std::string > json_patch_filenames
static Validation * make_validation(const std::string &, const TrackerInfo *)
void execTrackerInfoCreatorPlugin(const std::string &base, TrackerInfo &ti, IterationsInfo &ii, bool verbose)
void recalculateDependentConstants()
constexpr bool usePhiQArrays
void patch_Files(IterationsInfo &its_info, const std::vector< std::string > &fnames, ConfigJsonPatcher::PatchReport *report=nullptr)
matchOpts cmsswMatchingFW
std::string getOpt(const T &c_opt, const U &g_opt_map)
void loadHitsAndBeamSpot(Event &ev, EventOfHits &eoh)
void skipNEvents(int n_to_skip)
matchOpts cmsswMatchingBK
void setupStandardFunctionsFromNames()
void listOpts(const U &g_opt_map)
void loadDeads(EventOfHits &eoh, const std::vector< DeadVec > &deadvectors)
int main(int argc, const char *argv[])
std::unique_ptr< IterationConfig > patchLoad_File(const IterationsInfo &its_info, const std::string &fname, ConfigJsonPatcher::PatchReport *report=nullptr)
void runBuildingTestPlexDumbCMSSW(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
constexpr int numThreadsFinder
void save_Iterations(IterationsInfo &its_info, const std::string &fname_fmt, bool include_iter_info_preamble)
constexpr bool nan_etc_sigs_enable
static std::mutex printmutex
double runBuildingTestPlexCloneEngine(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
void next_arg_or_die(lStr_t &args, lStr_i &i, bool allow_single_minus=false)
void dump(IterationsInfo &its_info)
std::map< std::string, std::pair< cleanOpts, std::string > > cleanOptsMap
bool json_save_iters_include_iter_info_preamble
std::vector< std::string > json_load_filenames
std::vector< double > runBtpCe_MultiIter(Event &ev, const EventOfHits &eoh, MkBuilder &builder, int n)
static std::unique_ptr< MkBuilder > make_builder(bool silent=true)
constexpr int numSeedsPerTask
constexpr int numThreadsEvents
std::list< std::string > lStr_t
const bool useHitsForDuplicates
std::string json_save_iters_fname_fmt
ROOT::Math::SMatrix< float, 3, 3, ROOT::Math::MatRepSym< float, 3 > > SMatrixSym33
int finderReportBestOutOfN
std::vector< DeadVec > deadvectors
double runBuildingTestPlexBestHit(Event &ev, const EventOfHits &eoh, MkBuilder &builder)