CMS 3D CMS Logo

Namespaces | Typedefs | Functions | Variables
mkFit.cc File Reference
#include "RecoTracker/MkFitCore/src/Matriplex/MatriplexCommon.h"
#include "RecoTracker/MkFitCMS/standalone/buildtestMPlex.h"
#include "RecoTracker/MkFitCore/interface/HitStructures.h"
#include "RecoTracker/MkFitCore/interface/MkBuilder.h"
#include "RecoTracker/MkFitCore/src/MkFitter.h"
#include "RecoTracker/MkFitCMS/interface/MkStdSeqs.h"
#include "RecoTracker/MkFitCMS/standalone/MkStandaloneSeqs.h"
#include "RecoTracker/MkFitCore/interface/Config.h"
#include "RecoTracker/MkFitCore/standalone/ConfigStandalone.h"
#include "RecoTracker/MkFitCore/standalone/Event.h"
#include "RecoTracker/MkFitCore/standalone/Validation.h"
#include "RecoTracker/MkFitCore/standalone/RntDumper/RntDumper.h"
#include "RecoTracker/MkFitCore/src/Debug.h"
#include "RecoTracker/MkFitCMS/standalone/Shell.h"
#include "oneapi/tbb/task_arena.h"
#include "oneapi/tbb/parallel_for.h"
#include <oneapi/tbb/global_control.h>
#include <cstdlib>
#include <limits>
#include <list>
#include <sstream>
#include <memory>
#include <fenv.h>

Go to the source code of this file.

Namespaces

 mkfit::internal
 

Typedefs

typedef lStr_t::iterator lStr_i
 
typedef std::list< std::string > lStr_t
 

Functions

template<typename T , typename U >
std::string getOpt (const T &c_opt, const U &g_opt_map)
 
bool has_suffix (const std::string &str, const std::string &suffix)
 
void initGeom ()
 
template<typename U >
void listOpts (const U &g_opt_map)
 
int main (int argc, const char *argv[])
 
void next_arg_or_die (lStr_t &args, lStr_i &i, bool allow_single_minus=false)
 
template<typename T , typename U >
void setOpt (const std::string &cmd_ln_str, T &c_opt, const U &g_opt_map, const std::string &ex_txt)
 
void test_standard ()
 

Variables

std::vector< DeadVecmkfit::internal::deadvectors
 

Typedef Documentation

◆ lStr_i

typedef lStr_t::iterator lStr_i

Definition at line 449 of file mkFit.cc.

◆ lStr_t

typedef std::list<std::string> lStr_t

Definition at line 448 of file mkFit.cc.

Function Documentation

◆ getOpt()

template<typename T , typename U >
std::string getOpt ( const T c_opt,
const U &  g_opt_map 
)

Definition at line 171 of file mkFit.cc.

References DMR_cfg::cerr, relativeConstraints::empty, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by main().

171  {
172  static const std::string empty("");
173 
174  for (const auto& g_opt_pair : g_opt_map) {
175  if (g_opt_pair.second.first == c_opt)
176  return g_opt_pair.first;
177  }
178  std::cerr << "No match for option " << c_opt << std::endl;
179  return empty;
180 }

◆ has_suffix()

bool has_suffix ( const std::string &  str,
const std::string &  suffix 
)

Definition at line 451 of file mkFit.cc.

References str, and ticlDumper_cff::suffix.

Referenced by next_arg_or_die().

451  {
452  return str.size() >= suffix.size() && str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
453 }
#define str(s)

◆ initGeom()

void initGeom ( )

Definition at line 49 of file mkFit.cc.

References gather_cfg::cout, mkfit::ConfigJson::dump(), relativeConstraints::empty, mkfit::execTrackerInfoCreatorPlugin(), personalPlayback::fn, mkfit::Config::geomPlugin, mkfit::Config::ItrInfo, mkfit::Config::json_dump_after, mkfit::Config::json_dump_before, mkfit::Config::json_load_filenames, mkfit::Config::json_patch_filenames, mkfit::Config::json_save_iters_fname_fmt, mkfit::Config::json_save_iters_include_iter_info_preamble, mkfit::Config::json_verbose, mkfit::ConfigJson::patch_Files(), mkfit::ConfigJson::patchLoad_File(), edmIntegrityCheck::report, mkfit::ConfigJson::save_Iterations(), mkfit::IterationsInfo::setupStandardFunctionsFromNames(), and mkfit::Config::TrkInfo.

Referenced by main(), and test_standard().

49  {
50  std::cout << "Constructing geometry '" << Config::geomPlugin << "'\n";
51 
52  // NB: we currently assume that each node is a layer, and that layers
53  // are added starting from the center
54  // NB: z is just a dummy variable, VUSolid is actually infinite in size. *** Therefore, set it to the eta of simulation ***
55 
56  /*
57  // Test CMSSW loading
58  IterationsInfo ii;
59  unsigned int algorithms[]={ 4,22,23,5,24,7,8,9,10,6 }; // 10 iterations
60  ii.resize(10);
61  for (int i = 0; i < 10; ++i) {
62  ii[i].m_track_algorithm = algorithms[i];
63  }
64  auto xx = configJson_Load_File(ii, "mkfit-phase1-initialStep.json");
65  printf("%d\n", xx->m_iteration_index);
66  */
67 
69 
71 
73  cj.dump(Config::ItrInfo);
74 
77 
78  for (auto& fn : Config::json_load_filenames) {
79  // This is for testing only ... we drop the loaded IterationConfig
80  // as further code will always use IterationsInfo[ iter_index ].
81  cj.patchLoad_File(Config::ItrInfo, fn, &report);
82  }
83 
84  printf(
85  "mkFit.cc/%s--JSON-Load read %d JSON entities from %d files, replaced %d parameters.\n"
86  " NOTE that these changes were NOT APPLIED to actual configuration that is going to be used.\n",
87  __func__,
88  report.n_json_entities,
89  report.n_files,
90  report.n_replacements);
91  }
92 
95 
97 
98  printf("mkFit.cc/%s--JOSN-Patch read %d JSON entities from %d files, replaced %d parameters.\n",
99  __func__,
100  report.n_json_entities,
101  report.n_files,
102  report.n_replacements);
103  }
104 
106  cj.dump(Config::ItrInfo);
107 
109  cj.save_Iterations(
111  }
112 
114 
115  // Test functions for ConfigJsonPatcher
116  // cj.test_Direct (Config::ItrInfo[0]);
117  // cj.test_Patcher(Config::ItrInfo[0]);
118 }
std::vector< std::string > json_patch_filenames
void execTrackerInfoCreatorPlugin(const std::string &base, TrackerInfo &ti, IterationsInfo &ii, bool verbose)
void setupStandardFunctionsFromNames()
TrackerInfo TrkInfo
IterationsInfo ItrInfo
bool json_save_iters_include_iter_info_preamble
std::vector< std::string > json_load_filenames
std::string json_save_iters_fname_fmt
std::string geomPlugin

◆ listOpts()

template<typename U >
void listOpts ( const U &  g_opt_map)

Definition at line 193 of file mkFit.cc.

References gather_cfg::cout.

Referenced by main().

193  {
194  for (const auto& g_opt_pair : g_opt_map) {
195  std::cout << " " << g_opt_pair.first.c_str() << " : " << g_opt_pair.second.second.c_str() << std::endl;
196  }
197 }

◆ main()

int main ( int  argc,
const char *  argv[] 
)

Definition at line 470 of file mkFit.cc.

References dir2webdir::argc, GCPpyPlots::argv, cms::cuda::assert(), mkfit::Config::backwardFit, mkfit::Config::backwardSearch, DMR_cfg::cerr, mkfit::Config::cf_fitting, mkfit::Config::cf_seeding, mkfit::cleanSeedsBadLabel, mkfit::cleanSeedsN2, mkfit::cleanSeedsPure, mkfit::Config::cmsSelMinLayers, mkfit::Config::cmssw_val, mkfit::Config::cmsswMatchingBK, mkfit::Config::cmsswMatchingFW, mkfit::cmsswSeeds, mkfit::internal::deadvectors, mkfit::Config::dumpForPlots, beamvalidation::exit(), RntDumper::FinalizeAll(), mkfit::Config::finderReportBestOutOfN, mkfit::Config::fit_val, mkfit::Config::geomPlugin, getOpt(), mkfit::hitBased, mps_fire::i, mkfit::Config::includePCA, mkfit::Config::inclusiveShorts, initGeom(), mkfit::Config::json_dump_after, mkfit::Config::json_dump_before, mkfit::Config::json_load_filenames, mkfit::Config::json_patch_filenames, mkfit::Config::json_save_iters_fname_fmt, mkfit::Config::json_save_iters_include_iter_info_preamble, mkfit::Config::json_verbose, mkfit::Config::keepHitInfo, mkfit::Config::kludgeCmsHitErrors, mkfit::labelBased, listOpts(), mkfit::Config::loopOverFile, MPT_SIZE, mkfit::Config::mtvLikeValidation, mkfit::Config::mtvRequireSeeds, mkfit::Const::nan_etc_sigs_enable, mkfit::Config::nEvents, next_arg_or_die(), mkfit::Config::nItersCMSSW, mkfit::Config::nMinFoundHits, mkfit::noCleaning, mkfit::Config::nTracks, mkfit::Config::numHitsPerTask, mkfit::Config::numSeedsPerTask, mkfit::Config::numThreadsEvents, mkfit::Config::numThreadsFinder, mkfit::Config::numThreadsSimulation, mkfit::Config::quality_val, mkfit::Config::readCmsswTracks, mkfit::Config::readSimTrackStates, mkfit::Config::recalculateDependentConstants(), alignCSCRings::s, mkfit::Config::seedCleaning, mkfit::Config::seedInput, setOpt(), mkfit::Config::silent, mkfit::Config::sim_val, mkfit::Config::sim_val_for_cmssw, mkfit::simSeeds, submitPVResolutionJobs::stderr, test_standard(), mkfit::trkParamBased, mkfit::Config::tryToSaveSimInfo, mkfit::Config::useDeadModules, mkfit::Config::useHitsForDuplicates, and mkfit::Config::usePhiQArrays.

470  {
471 #ifdef _GNU_SOURCE
473  feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW); //FE_ALL_EXCEPT);
474  }
475 #endif
476 
477 #ifdef USE_VTUNE_PAUSE
478  __itt_pause();
479 #endif
480 
481  assert(sizeof(Track::Status) == 4 &&
482  "To make sure this is true for icc and gcc<6 when mixing bools/ints in bitfields.");
483 
484  // init enum maps
485  init_seed_opts();
486  init_clean_opts();
487  init_match_opts();
488 
489  lStr_t mArgs;
490  for (int i = 1; i < argc; ++i) {
491  mArgs.push_back(argv[i]);
492  }
493  bool run_shell = false;
494 
495  lStr_i i = mArgs.begin();
496  while (i != mArgs.end()) {
497  lStr_i start = i;
498 
499  if (*i == "-h" || *i == "-help" || *i == "--help") {
500  printf(
501  "\n"
502  "Usage: %s [options]\n"
503  "Options: defaults defined as (def: DEFAULT VALUE)\n"
504  "\n----------------------------------------------------------------------------------------------------------"
505  "\n\n"
506  "Generic options\n\n"
507  " --geom <str> geometry plugin to use (def: %s)\n"
508  " --silent suppress printouts inside event loop (def: %s)\n"
509  " --best-out-of <int> run test num times, report best time (def: %d)\n"
510  " --input-file file name for reading (def: %s)\n"
511  " --output-file file name for writitng (def: %s)\n"
512  " --read-cmssw-tracks read external cmssw reco tracks if available (def: %s)\n"
513  " --read-simtrack-states read in simTrackStates for pulls in validation (def: %s)\n"
514  " --num-events <int> number of events to run over or simulate (def: %d)\n"
515  " if using --input-file, must be enabled AFTER on command line\n"
516  " --start-event <int> event number to start at when reading from a file (def: %d)\n"
517  " --loop-over-file after reaching the end of the file, start over from the beginning until "
518  " <num-events> events have been processed\n"
519  " --shell start interactive shell instead of running test_standard()\n"
520  "\n"
521  "If no --input-file is specified, will trigger simulation\n"
522  " --num-tracks <int> number of tracks to generate for each event (def: %d)\n"
523  "\n----------------------------------------------------------------------------------------------------------"
524  "\n\n"
525  "Threading related options\n\n"
526  " --num-thr-sim <int> number of threads for simulation (def: %d)\n"
527  " --num-thr <int> number of threads for track finding (def: %d)\n"
528  " --num-thr-ev <int> number of threads to run the event loop (def: %d)\n"
529  " --seeds-per-task <int> number of seeds to process in a tbb task (def: %d)\n"
530  " --hits-per-task <int> number of layer1 hits per task when using find seeds (def: %d)\n"
531  "\n----------------------------------------------------------------------------------------------------------"
532  "\n\n"
533  "FittingTestMPlex options\n\n"
534  " --fit-std run standard fitting test (def: %s)\n"
535  " --cf-fitting enable conformal fit before fitting tracks to get initial estimate of track "
536  "parameters and errors (def: %s)\n"
537  " --fit-val enable ROOT based validation for fittingMPlex (def: %s)\n"
538  "\n----------------------------------------------------------------------------------------------------------"
539  "\n\n"
540  "BuildingTestMPlex options\n\n"
541  " **Specify which building routine you would like to run\n"
542  " --build-cmssw run dummy validation of CMSSW tracks with MkBuilder stuff (def: %s)\n"
543  " --build-bh run best-hit building test (def: %s)\n"
544  " --build-std run standard combinatorial building test (def: %s)\n"
545  " --build-ce run clone engine combinatorial building test (def: %s)\n"
546  " --build-mimi run clone engine on multiple-iteration test (def: %s)\n"
547  " --num-iters-cmssw <int> number of mimi iterations to run (def: set to 3 when --build-mimi is in effect, "
548  "0 otherwise)\n"
549  "\n"
550  " **Seeding options\n"
551  " --seed-input <str> which seed collecion used for building (def: %s)\n"
552  " --seed-cleaning <str> which seed cleaning to apply if using cmssw seeds (def: %s)\n"
553  " --cf-seeding enable conformal fit over seeds (def: %s)\n"
554  "\n"
555  " **Duplicate removal options\n"
556  " --remove-dup run duplicate removal after building, using both hit and kinematic criteria (def: "
557  "%s)\n"
558  " --remove-dup-no-hit run duplicate removal after building, using kinematic criteria only (def: %s)\n"
559  "\n"
560  " **Dead module (strip) option\n"
561  " --use-dead-modules run duplicate removal after building, using both hit and kinematic criteria "
562  "(def: %s)\n"
563  "\n"
564  " **Additional options for building\n"
565  " --use-phiq-arr use phi-Q arrays in select hit indices (def: %s)\n"
566  " --kludge-cms-hit-errors make sure err(xy) > 15 mum, err(z) > 30 mum (def: %s)\n"
567  " --backward-fit perform backward fit during building (def: %s)\n"
568  " --no-backward-search do not do backward search after backward fit\n"
569  " (def: do search if backward-fit is enabled and available in given iteration)\n"
570  " --include-pca do the backward fit to point of closest approach, does not imply "
571  "'--backward-fit' (def: %s)\n"
572  "\n----------------------------------------------------------------------------------------------------------"
573  "\n\n"
574  "Validation options\n\n"
575  " **Text file based options\n"
576  " --quality-val enable printout validation for MkBuilder (def: %s)\n"
577  " must enable: --dump-for-plots\n"
578  " --dump-for-plots make shell printouts for plots (def: %s)\n"
579  " --mtv-like-val configure validation to emulate CMSSW MultiTrackValidator (MTV) (def: %s)\n"
580  " --mtv-require-seeds configure validation to emulate MTV but require sim tracks to be matched to "
581  "seeds (def: %s)\n"
582  "\n"
583  " **ROOT based options\n"
584  " --sim-val-for-cmssw enable ROOT based validation for CMSSW tracks with simtracks as reference [eff, "
585  "FR, DR] (def: %s)\n"
586  " --sim-val enable ROOT based validation for seeding, building, and fitting with simtracks "
587  "as reference [eff, FR, DR] (def: %s)\n"
588  " --cmssw-val enable ROOT based validation for building and fitting with CMSSW tracks as "
589  "reference [eff, FR, DR] (def: %s)\n"
590  " must enable: --geom CMS-phase1 --read-cmssw-tracks\n"
591  " --cmssw-match-fw <str> which cmssw track matching routine to use if validating against CMSSW tracks, "
592  "forward built tracks only (def: %s)\n"
593  " must enable: --geom CMS-phase1 --cmssw-val --read-cmssw-tracks\n"
594  " --cmssw-match-bk <str> which cmssw track matching routine to use if validating against CMSSW tracks, "
595  "backward fit tracks only (def: %s)\n"
596  " must enable: --geom CMS-phase1 --cmssw-val --read-cmssw-tracks --backward-fit "
597  "--backward-fit-pca\n"
598  " --inc-shorts include short reco tracks into FR (def: %s)\n"
599  " --keep-hit-info keep vectors of hit idxs and branches in trees (def: %s)\n"
600  " --try-to-save-sim-info two options for this flag [related to validation with simtracks as reference "
601  "collection] (def: %s)\n"
602  " a) IF (--read-simtrack-states is enabled)\n"
603  " If a sim track is associated to a reco track, but it does not contain "
604  "the last found on the reco track\n"
605  " still save sim track kinematic info from generator position\n"
606  " b) ELSE (--read-simtrack-states is NOT enabled)\n"
607  " Save sim track kinematic info from generator position if matched to "
608  "reco track\n"
609  "\n----------------------------------------------------------------------------------------------------------"
610  "\n\n"
611  "Combo spaghetti, that's with cole slaw:\n\n"
612  " **Building and fitting combo options\n"
613  " --backward-fit-pca perform backward fit to point of closest approach during building\n"
614  " == --backward-fit --include-pca\n"
615  " **Seed combo options\n"
616  " --cmssw-simseeds use CMS geom with simtracks for seeds\n"
617  " == --geom CMS-phase1 --seed-input %s\n"
618  " --cmssw-stdseeds use CMS geom with CMSSW seeds uncleaned\n"
619  " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s\n"
620  " --cmssw-n2seeds use CMS geom with CMSSW seeds cleaned with N^2 routine\n"
621  " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s\n"
622  " --cmssw-pureseeds use CMS geom with pure CMSSW seeds (seeds which produced CMSSW reco tracks), "
623  "enable read of CMSSW tracks\n"
624  " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s --read-cmssw-tracks\n"
625  " --cmssw-goodlabelseeds use CMS geom with CMSSW seeds with label() >= 0\n"
626  " == --geom CMS-phase1 --seed-input %s --seed-cleaning %s\n"
627  "\n"
628  " **CMSSW validation combo options\n"
629  " --cmssw-val-fhit-bhit use CMSSW validation with hit based matching (50 percent after seed) for forward "
630  "built tracks\n"
631  " use CMSSW validation with hit based matching (50 percent after seed) for "
632  "backward fit tracks\n"
633  " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n"
634  " must enable: --backward-fit-pca\n"
635  " --cmssw-val-fhit-bprm use CMSSW validation with hit based matching (50 percent after seed) for forward "
636  "built tracks\n"
637  " use CMSSW validation with track parameter based matching for backward fit "
638  "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-fprm-bhit use CMSSW validation with track parameter based matching for forward built "
642  "tracks\n"
643  " use CMSSW validation with hit based matching (50 percent after seed) for "
644  "backward fit tracks\n"
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-bprm use CMSSW validation with track parameter based matching for forward built "
648  "tracks\n"
649  " use CMSSW validation with track parameter based matching for backward fit "
650  "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-label use CMSSW validation with stricter hit based matching for both forward built and "
654  "backward fit tracks, enable read of CMSSW tracks\n"
655  " == --cmssw-val --read-cmssw-tracks --cmssw-match-fw %s --cmssw-match-bk %s\n"
656  " must enable: --cmssw-pureseeds --backward-fit-pca\n"
657  "\n----------------------------------------------------------------------------------------------------------"
658  "\n\n"
659  "JSON config patcher options:\n\n"
660  " --json-load <filename> load single IterationConfig from given JSON file (def: do not load)\n"
661  " can be specified multiple times for several files\n"
662  " --json-patch <filename> patch IterationsInfo from given JSON file (def: do not patch)\n"
663  " can be specified multiple times for several files\n"
664  " --json-save-iterations <fname-fmt> save per iteration json files\n"
665  " %%d in fname-fmt gets replaced with iteration index\n"
666  " %%s in fname-fmt gets replaced with iteration algorithm name\n"
667  " exactly one of %%d and %%s must be specified\n"
668  " --json-save-iterations-include-iter-info-preamble (def: %s)\n"
669  " --json-verbose print each patch assignment as it is being made (def: %s)\n"
670  " --json-dump-before print iteration config before patching (def: %s)\n"
671  " --json-dump-after print iteration config after patching (def: %s)\n"
672  "\n----------------------------------------------------------------------------------------------------------"
673  "\n\n",
674  argv[0],
675 
676  Config::geomPlugin.c_str(),
677  b2a(Config::silent),
679  g_input_file.c_str(),
680  g_output_file.c_str(),
684  g_start_event,
686 
692 
693  b2a(g_run_fit_std),
694  b2a(Config::cf_fitting),
695  b2a(Config::fit_val),
696 
697  b2a(g_run_build_cmssw),
698  b2a(g_run_build_bh),
699  b2a(g_run_build_default || g_run_build_std),
700  b2a(g_run_build_default || g_run_build_ce),
701  b2a(g_run_build_mimi),
702 
703  getOpt(Config::seedInput, g_seed_opts).c_str(),
704  getOpt(Config::seedCleaning, g_clean_opts).c_str(),
705  b2a(Config::cf_seeding),
706 
707  b2a(Config::removeDuplicates && Config::useHitsForDuplicates),
708  b2a(Config::removeDuplicates && !Config::useHitsForDuplicates),
709 
711 
714  b2a(Config::backwardFit),
715  b2a(Config::includePCA),
716 
717  b2a(Config::quality_val),
721 
723  b2a(Config::sim_val),
724  b2a(Config::cmssw_val),
725  getOpt(Config::cmsswMatchingFW, g_match_opts).c_str(),
726  getOpt(Config::cmsswMatchingBK, g_match_opts).c_str(),
728  b2a(Config::keepHitInfo),
730 
731  getOpt(simSeeds, g_seed_opts).c_str(),
732  getOpt(cmsswSeeds, g_seed_opts).c_str(),
733  getOpt(noCleaning, g_clean_opts).c_str(),
734  getOpt(cmsswSeeds, g_seed_opts).c_str(),
735  getOpt(cleanSeedsN2, g_clean_opts).c_str(),
736  getOpt(cmsswSeeds, g_seed_opts).c_str(),
737  getOpt(cleanSeedsPure, g_clean_opts).c_str(),
738  getOpt(cmsswSeeds, g_seed_opts).c_str(),
739  getOpt(cleanSeedsBadLabel, g_clean_opts).c_str(),
740 
741  getOpt(hitBased, g_match_opts).c_str(),
742  getOpt(hitBased, g_match_opts).c_str(),
743  getOpt(hitBased, g_match_opts).c_str(),
744  getOpt(trkParamBased, g_match_opts).c_str(),
745  getOpt(trkParamBased, g_match_opts).c_str(),
746  getOpt(hitBased, g_match_opts).c_str(),
747  getOpt(trkParamBased, g_match_opts).c_str(),
748  getOpt(trkParamBased, g_match_opts).c_str(),
749  getOpt(labelBased, g_match_opts).c_str(),
750  getOpt(labelBased, g_match_opts).c_str(),
751 
756 
757  printf("List of options for string based inputs \n");
758  printf(
759  "--geom \n"
760  " CMS-phase1 \n"
761  " CMS-phase2 \n"
762  " CylCowWLids \n"
763  "\n");
764 
765  printf("--seed-input \n");
766  listOpts(g_seed_opts);
767  printf("\n");
768 
769  printf("--seed-cleaning \n");
770  listOpts(g_clean_opts);
771  printf("\n");
772 
773  printf("--cmssw-matching \n");
774  listOpts(g_match_opts);
775  printf("\n");
776 
777  exit(0);
778  } // end of "help" block
779 
780  else if (*i == "--geom") {
781  next_arg_or_die(mArgs, i);
783  } else if (*i == "--silent") {
784  Config::silent = true;
785  } else if (*i == "--best-out-of") {
786  next_arg_or_die(mArgs, i);
787  Config::finderReportBestOutOfN = atoi(i->c_str());
788  } else if (*i == "--input-file") {
789  next_arg_or_die(mArgs, i);
790  g_input_file = *i;
791  g_operation = "read";
792  Config::nEvents = -1;
793  } else if (*i == "--output-file") {
794  next_arg_or_die(mArgs, i);
795  g_output_file = *i;
796  g_operation = "write";
797  } else if (*i == "--read-cmssw-tracks") {
799  } else if (*i == "--read-simtrack-states") {
801  } else if (*i == "--num-events") {
802  next_arg_or_die(mArgs, i);
803  Config::nEvents = atoi(i->c_str());
804  } else if (*i == "--start-event") {
805  next_arg_or_die(mArgs, i);
806  g_start_event = atoi(i->c_str());
807  } else if (*i == "--loop-over-file") {
808  Config::loopOverFile = true;
809  } else if (*i == "--shell") {
810  run_shell = true;
811  } else if (*i == "--num-tracks") {
812  next_arg_or_die(mArgs, i);
813  Config::nTracks = atoi(i->c_str());
814  } else if (*i == "--num-thr-sim") {
815  next_arg_or_die(mArgs, i);
816  Config::numThreadsSimulation = atoi(i->c_str());
817  } else if (*i == "--num-thr") {
818  next_arg_or_die(mArgs, i);
819  Config::numThreadsFinder = atoi(i->c_str());
820  } else if (*i == "--num-thr-ev") {
821  next_arg_or_die(mArgs, i);
822  Config::numThreadsEvents = atoi(i->c_str());
823  } else if (*i == "--seeds-per-task") {
824  next_arg_or_die(mArgs, i);
825  Config::numSeedsPerTask = atoi(i->c_str());
826  } else if (*i == "--hits-per-task") {
827  next_arg_or_die(mArgs, i);
828  Config::numHitsPerTask = atoi(i->c_str());
829  } else if (*i == "--fit-std") {
830  g_run_build_default = false;
831  g_run_fit_std = true;
832  } else if (*i == "--cf-fitting") {
833  Config::cf_fitting = true;
834  } else if (*i == "--fit-val") {
835  Config::fit_val = true;
836  } else if (*i == "--build-cmssw") {
837  g_run_build_default = false;
838  g_run_build_cmssw = true;
839  } else if (*i == "--build-bh") {
840  g_run_build_default = false;
841  g_run_build_bh = true;
842  } else if (*i == "--build-std") {
843  g_run_build_default = false;
844  g_run_build_std = true;
845  } else if (*i == "--build-ce") {
846  g_run_build_default = false;
847  g_run_build_ce = true;
848  } else if (*i == "--build-mimi") {
849  g_run_build_default = false;
850  g_run_build_mimi = true;
851  if (Config::nItersCMSSW == 0)
853  } else if (*i == "--num-iters-cmssw") {
854  next_arg_or_die(mArgs, i);
855  Config::nItersCMSSW = atoi(i->c_str());
856  } else if (*i == "--seed-input") {
857  next_arg_or_die(mArgs, i);
858  setOpt(*i, Config::seedInput, g_seed_opts, "seed input collection");
859  } else if (*i == "--seed-cleaning") {
860  next_arg_or_die(mArgs, i);
861  setOpt(*i, Config::seedCleaning, g_clean_opts, "seed cleaning");
862  } else if (*i == "--cf-seeding") {
863  Config::cf_seeding = true;
864  } else if (*i == "--use-phiq-arr") {
865 #ifdef CONFIG_PhiQArrays
866  Config::usePhiQArrays = true;
867 #else
868  printf("--use-phiq-arr has no effect: recompile with CONFIG_PhiQArrays\n");
869 #endif
870  } else if (*i == "--remove-dup") {
871  Config::removeDuplicates = true;
873  } else if (*i == "--remove-dup-no-hit") {
874  Config::removeDuplicates = true;
876  } else if (*i == "--use-dead-modules") {
877  Config::useDeadModules = true;
878  } else if (*i == "--kludge-cms-hit-errors") {
880  } else if (*i == "--backward-fit") {
881  Config::backwardFit = true;
882  } else if (*i == "--no-backward-search") {
883  Config::backwardSearch = false;
884  } else if (*i == "--include-pca") {
885  Config::includePCA = true;
886  } else if (*i == "--quality-val") {
887  Config::quality_val = true;
888  } else if (*i == "--dump-for-plots") {
889  Config::dumpForPlots = true;
890  } else if (*i == "--mtv-like-val") {
894  } else if (*i == "--mtv-require-seeds") {
899  } else if (*i == "--sim-val-for-cmssw") {
901  } else if (*i == "--sim-val") {
902  Config::sim_val = true;
903  } else if (*i == "--cmssw-val") {
904  Config::cmssw_val = true;
905  } else if (*i == "--cmssw-match-fw") {
906  next_arg_or_die(mArgs, i);
907  setOpt(*i, Config::cmsswMatchingFW, g_match_opts, "CMSSW validation track matching for forward built tracks");
908  } else if (*i == "--cmssw-match-bk") {
909  next_arg_or_die(mArgs, i);
910  setOpt(*i, Config::cmsswMatchingBK, g_match_opts, "CMSSW validation track matching for backward fit tracks");
911  } else if (*i == "--inc-shorts") {
913  } else if (*i == "--keep-hit-info") {
914  Config::keepHitInfo = true;
915  } else if (*i == "--try-to-save-sim-info") {
917  } else if (*i == "--backward-fit-pca") {
918  Config::backwardFit = true;
919  Config::includePCA = true;
920  } else if (*i == "--cmssw-simseeds") {
921  Config::geomPlugin = "CMS-phase1";
923  } else if (*i == "--cmssw-stdseeds") {
924  Config::geomPlugin = "CMS-phase1";
927  } else if (*i == "--cmssw-n2seeds") {
928  Config::geomPlugin = "CMS-phase1";
931  } else if (*i == "--cmssw-pureseeds") {
932  Config::geomPlugin = "CMS-phase1";
936  } else if (*i == "--cmssw-goodlabelseeds") {
937  Config::geomPlugin = "CMS-phase1";
940  } else if (*i == "--cmssw-val-fhit-bhit") {
941  Config::cmssw_val = true;
945  } else if (*i == "--cmssw-val-fhit-bprm") {
946  Config::cmssw_val = true;
950  } else if (*i == "--cmssw-val-fprm-bhit") {
951  Config::cmssw_val = true;
955  } else if (*i == "--cmssw-val-fprm-bprm") {
956  Config::cmssw_val = true;
960  } else if (*i == "--cmssw-val-label") {
961  Config::cmssw_val = true;
965  } else if (*i == "--json-load") {
966  next_arg_or_die(mArgs, i);
967  Config::json_load_filenames.push_back(*i);
968  } else if (*i == "--json-patch") {
969  next_arg_or_die(mArgs, i);
970  Config::json_patch_filenames.push_back(*i);
971  } else if (*i == "--json-save-iterations") {
972  next_arg_or_die(mArgs, i);
974  } else if (*i == "--json-save-iterations-include-iter-info-preamble") {
976  } else if (*i == "--json-verbose") {
977  Config::json_verbose = true;
978  } else if (*i == "--json-dump-before") {
980  } else if (*i == "--json-dump-after") {
982  } else {
983  fprintf(stderr, "Error: Unknown option/argument '%s'.\n", i->c_str());
984  exit(1);
985  }
986 
987  mArgs.erase(start, ++i);
988  }
989 
990  // clang-format off
991 
992  // Do some checking of options before going...
995  std::cerr << "What have you done?!? Can't mix cmssw label matching without pure seeds! Exiting...\n";
996  exit(1);
998  std::cerr << "What have you done?!? Short reco tracks are already accounted for in the MTV-Like Validation! Inclusive "
999  "shorts is only an option for the standard simval, and will break the MTV-Like simval! Exiting...\n";
1000  exit(1);
1001  }
1002 
1004 
1005  printf("mkFit configuration complete.\n"
1006  " vusize=%d, num_thr_events=%d, num_thr_finder=%d\n"
1007  " sizeof(Track)=%zu, sizeof(Hit)=%zu, sizeof(SVector3)=%zu, sizeof(SMatrixSym33)=%zu, sizeof(MCHitInfo)=%zu\n",
1009  sizeof(Track), sizeof(Hit), sizeof(SVector3), sizeof(SMatrixSym33), sizeof(MCHitInfo));
1010 
1011  if (run_shell) {
1012  tbb::global_control global_limit(tbb::global_control::max_allowed_parallelism, Config::numThreadsFinder);
1013 
1014  initGeom();
1015  Shell s(mkfit::internal::deadvectors, g_input_file, g_start_event);
1016  s.Run();
1017  } else {
1018  test_standard();
1019  }
1020 
1021 #ifndef NO_ROOT
1023 #endif
1024 
1025  // clang-format on
1026 
1027  return 0;
1028 }
Definition: start.py:1
void test_standard()
Definition: mkFit.cc:201
std::vector< DeadVec > deadvectors
Definition: mkFit.cc:46
ROOT::Math::SVector< float, 3 > SVector3
Definition: MatrixSTypes.h:14
void initGeom()
Definition: mkFit.cc:49
void setOpt(const std::string &cmd_ln_str, T &c_opt, const U &g_opt_map, const std::string &ex_txt)
Definition: mkFit.cc:183
cleanOpts seedCleaning
assert(be >=bs)
std::vector< std::string > json_patch_filenames
lStr_t::iterator lStr_i
Definition: mkFit.cc:449
void recalculateDependentConstants()
constexpr bool usePhiQArrays
Definition: Config.h:71
matchOpts cmsswMatchingFW
std::string getOpt(const T &c_opt, const U &g_opt_map)
Definition: mkFit.cc:171
matchOpts cmsswMatchingBK
void listOpts(const U &g_opt_map)
Definition: mkFit.cc:193
static void FinalizeAll()
Definition: RntDumper.cc:58
constexpr int numThreadsFinder
Definition: Config.h:87
constexpr bool nan_etc_sigs_enable
Definition: Config.h:16
void next_arg_or_die(lStr_t &args, lStr_i &i, bool allow_single_minus=false)
Definition: mkFit.cc:455
#define MPT_SIZE
Definition: Matrix.h:37
bool json_save_iters_include_iter_info_preamble
std::vector< std::string > json_load_filenames
constexpr int numSeedsPerTask
Definition: Config.h:89
constexpr int numThreadsEvents
Definition: Config.h:88
std::list< std::string > lStr_t
Definition: mkFit.cc:448
const bool useHitsForDuplicates
Definition: Config.h:109
std::string json_save_iters_fname_fmt
ROOT::Math::SMatrix< float, 3, 3, ROOT::Math::MatRepSym< float, 3 > > SMatrixSym33
Definition: MatrixSTypes.h:13
std::string geomPlugin
def exit(msg="")

◆ next_arg_or_die()

void next_arg_or_die ( lStr_t args,
lStr_i i,
bool  allow_single_minus = false 
)

Definition at line 455 of file mkFit.cc.

References writedatasetfile::args, DMR_cfg::cerr, beamvalidation::exit(), has_suffix(), mps_fire::i, and dqmiolumiharvest::j.

Referenced by main().

455  {
456  lStr_i j = i;
457  if (++j == args.end() || has_suffix(*j, ".C") || ((*j)[0] == '-' && !(*j == "-" && allow_single_minus))) {
458  std::cerr << "Error: option " << *i << " requires an argument.\n";
459  exit(1);
460  }
461  i = j;
462 }
bool has_suffix(const std::string &str, const std::string &suffix)
Definition: mkFit.cc:451
lStr_t::iterator lStr_i
Definition: mkFit.cc:449
def exit(msg="")

◆ setOpt()

template<typename T , typename U >
void setOpt ( const std::string &  cmd_ln_str,
T c_opt,
const U &  g_opt_map,
const std::string &  ex_txt 
)

Definition at line 183 of file mkFit.cc.

References DMR_cfg::cerr, and beamvalidation::exit().

Referenced by main().

183  {
184  if (g_opt_map.count(cmd_ln_str))
185  c_opt = g_opt_map.at(cmd_ln_str).first;
186  else {
187  std::cerr << cmd_ln_str << " is not a valid " << ex_txt << " option!! Exiting..." << std::endl;
188  exit(1);
189  }
190 }
def exit(msg="")

◆ test_standard()

void test_standard ( )

Definition at line 201 of file mkFit.cc.

References cms::cuda::assert(), b, mkfit::DataFile::close(), mkfit::cmsswSeeds, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), gather_cfg::cout, mkfit::internal::deadvectors, dprint, mkfit::dtime(), makeMEIFBenchmarkPlots::ev, mkfit::Config::finderReportBestOutOfN, personalPlayback::fp, mps_fire::i, initGeom(), mkfit::StdSeq::loadDeads(), mkfit::StdSeq::loadHitsAndBeamSpot(), mkfit::Config::loopOverFile, mkfit::MkBuilder::make_builder(), mkfit::Validation::make_validation(), SiStripPI::min, mutex, mkfit::Config::nEvents, nevt, mkfit::Config::nItersCMSSW, mkfit::Config::numThreadsEvents, mkfit::Config::numThreadsFinder, mkfit::DataFile::openRead(), mkfit::MkBuilder::populate(), mkfit::Event::printmutex, mkfit::runBtpCe_MultiIter(), mkfit::runBuildingTestPlexBestHit(), mkfit::runBuildingTestPlexCloneEngine(), mkfit::runBuildingTestPlexDumbCMSSW(), mkfit::runBuildingTestPlexStandard(), mkfit::Config::seedInput, mkfit::Config::silent, mkfit::DataFile::skipNEvents(), AlCaHLTBitMon_QueryRunRegistry::string, hcalRecHitTable_cff::time, mkfit::Config::TrkInfo, mkfit::Config::useDeadModules, and heppy_batch::val.

Referenced by main().

201  {
202  printf("Running test_standard(), operation=\"%s\", best_out_of=%d\n",
203  g_operation.c_str(),
205 
207  printf("- reading seeds from file\n");
208 
209  initGeom();
210 
211  if (Config::nEvents <= 0) {
212  return;
213  }
214 
215  DataFile data_file;
216  if (g_operation == "read") {
217  int evs_in_file = data_file.openRead(g_input_file, Config::TrkInfo.n_layers());
218  int evs_available = evs_in_file - g_start_event + 1;
219  if (Config::nEvents == -1) {
220  Config::nEvents = evs_available;
221  } else if (Config::nEvents > evs_available and not Config::loopOverFile) {
222  printf("Requested number of events %d, only %d available.\n", Config::nEvents, evs_available);
223  Config::nEvents = evs_available;
224  }
225 
226  if (g_start_event > 1) {
227  data_file.skipNEvents(g_start_event - 1);
228  }
229  }
230 
231  constexpr int NT = 5;
232  double t_sum[NT] = {0};
233  double t_skip[NT] = {0};
234  std::vector<double> t_sum_iter(Config::nItersCMSSW, 0.0);
235  std::vector<double> t_skip_iter(Config::nItersCMSSW, 0.0);
236  double time = dtime();
237 
238  std::atomic<int> nevt{g_start_event};
239  std::atomic<int> seedstot{0}, simtrackstot{0}, candstot{0};
240  std::atomic<int> maxHits_all{0}, maxLayer_all{0};
241 
242  MkBuilder::populate();
243 
244  std::vector<std::unique_ptr<Event>> evs(Config::numThreadsEvents);
245  std::vector<std::unique_ptr<Validation>> vals(Config::numThreadsEvents);
246  std::vector<std::unique_ptr<MkBuilder>> mkbs(Config::numThreadsEvents);
247  std::vector<std::shared_ptr<EventOfHits>> eohs(Config::numThreadsEvents);
248  std::vector<std::shared_ptr<FILE>> fps;
249  fps.reserve(Config::numThreadsEvents);
250 
251  const std::string valfile("valtree");
252 
253  for (int i = 0; i < Config::numThreadsEvents; ++i) {
254  std::ostringstream serial;
255  if (Config::numThreadsEvents > 1) {
256  serial << "_" << i;
257  }
258  vals[i].reset(Validation::make_validation(valfile + serial.str() + ".root", &Config::TrkInfo));
259  mkbs[i] = MkBuilder::make_builder(Config::silent);
260  eohs[i].reset(new EventOfHits(Config::TrkInfo));
261  evs[i].reset(new Event(*vals[i], 0, Config::TrkInfo.n_layers()));
262  if (g_operation == "read") {
263  fps.emplace_back(fopen(g_input_file.c_str(), "r"), [](FILE* fp) {
264  if (fp)
265  fclose(fp);
266  });
267  }
268  }
269 
270  tbb::task_arena arena(Config::numThreadsFinder);
271 
272  dprint("parallel_for step size " << (Config::nEvents + Config::numThreadsEvents - 1) / Config::numThreadsEvents);
273 
274  time = dtime();
275 
276  int events_per_thread = (Config::nEvents + Config::numThreadsEvents - 1) / Config::numThreadsEvents;
277 
278  arena.execute([&]() {
279  tbb::parallel_for(
280  tbb::blocked_range<int>(0, Config::numThreadsEvents, 1),
281  [&](const tbb::blocked_range<int>& threads) {
282  int thisthread = threads.begin();
283 
284  assert(threads.begin() == threads.end() - 1 && thisthread < Config::numThreadsEvents);
285 
286  // std::vector<Track> plex_tracks;
287  auto& ev = *evs[thisthread].get();
288  auto& mkb = *mkbs[thisthread].get();
289  auto& eoh = *eohs[thisthread].get();
290  auto fp = fps[thisthread].get();
291 
292  int evstart = thisthread * events_per_thread;
293  int evend = std::min(Config::nEvents, evstart + events_per_thread);
294 
295  dprint("thisthread " << thisthread << " events " << Config::nEvents << " events/thread " << events_per_thread
296  << " range " << evstart << ":" << evend);
297 
298  for (int evt = evstart; evt < evend; ++evt) {
299  ev.reset(nevt++);
300 
301  if (!Config::silent) {
302  std::lock_guard<std::mutex> printlock(Event::printmutex);
303  printf("\n");
304  printf("Processing event %d\n", ev.evtID());
305  }
306 
307  ev.read_in(data_file, fp);
308 
309  // skip events with zero seed tracks!
310  if (ev.seedTracks_.empty())
311  continue;
312 
313  // plex_tracks.resize(ev.simTracks_.size());
314 
316 
319  }
320 
321  double t_best[NT] = {0}, t_cur[NT] = {0};
322  std::vector<double> t_cur_iter;
323  simtrackstot += ev.simTracks_.size();
324  seedstot += ev.seedTracks_.size();
325 
326  int ncands_thisthread = 0;
327  int maxHits_thisthread = 0;
328  int maxLayer_thisthread = 0;
329  for (int b = 0; b < Config::finderReportBestOutOfN; ++b) {
330  t_cur[0] = 0; // t_cur[0] = (g_run_fit_std) ? runFittingTestPlex(ev, plex_tracks) : 0;
331  t_cur[1] = (g_run_build_bh) ? runBuildingTestPlexBestHit(ev, eoh, mkb) : 0;
332  t_cur[2] = (g_run_build_default || g_run_build_std) ? runBuildingTestPlexStandard(ev, eoh, mkb) : 0;
333  t_cur[3] = (g_run_build_default || g_run_build_ce) ? runBuildingTestPlexCloneEngine(ev, eoh, mkb) : 0;
334  if (g_run_build_mimi)
335  t_cur_iter = runBtpCe_MultiIter(ev, eoh, mkb, Config::nItersCMSSW);
336  t_cur[4] = (g_run_build_mimi) ? t_cur_iter[Config::nItersCMSSW] : 0;
337  if (g_run_build_cmssw)
338  runBuildingTestPlexDumbCMSSW(ev, eoh, mkb);
339  if (g_run_build_ce || g_run_build_mimi) {
340  ncands_thisthread = mkb.total_cands();
341  auto const& ln = mkb.max_hits_layer(eoh);
342  maxHits_thisthread = ln.first;
343  maxLayer_thisthread = ln.second;
344  }
345  for (int i = 0; i < NT; ++i)
346  t_best[i] = (b == 0) ? t_cur[i] : std::min(t_cur[i], t_best[i]);
347 
348  if (!Config::silent) {
349  std::lock_guard<std::mutex> printlock(Event::printmutex);
351  printf("----------------------------------------------------------------\n");
352  printf("Best-of-times:");
353  for (int i = 0; i < NT; ++i)
354  printf(" %.5f/%.5f", t_cur[i], t_best[i]);
355  printf("\n");
356  }
357  printf("----------------------------------------------------------------\n");
358  }
359  }
360 
361  candstot += ncands_thisthread;
362  if (maxHits_thisthread > maxHits_all) {
363  maxHits_all = maxHits_thisthread;
364  maxLayer_all = maxLayer_thisthread;
365  }
366  if (!Config::silent) {
367  std::lock_guard<std::mutex> printlock(Event::printmutex);
368  printf("Matriplex fit = %.5f --- Build BHMX = %.5f STDMX = %.5f CEMX = %.5f MIMI = %.5f\n",
369  t_best[0],
370  t_best[1],
371  t_best[2],
372  t_best[3],
373  t_best[4]);
374  }
375 
376  {
377  static std::mutex sum_up_lock;
378  std::lock_guard<std::mutex> locker(sum_up_lock);
379 
380  for (int i = 0; i < NT; ++i)
381  t_sum[i] += t_best[i];
382  if (evt > 0)
383  for (int i = 0; i < NT; ++i)
384  t_skip[i] += t_best[i];
385  if (g_run_build_mimi) {
386  for (int i = 0; i < Config::nItersCMSSW; ++i)
387  t_sum_iter[i] += t_cur_iter[i];
388  if (evt > 0)
389  for (int i = 0; i < Config::nItersCMSSW; ++i)
390  t_skip_iter[i] += t_cur_iter[i];
391  }
392  }
393  }
394  },
395  tbb::simple_partitioner());
396  });
397 
398  time = dtime() - time;
399 
400  printf("\n");
401  printf("================================================================\n");
402  printf("=== TOTAL for %d events\n", Config::nEvents);
403  printf("================================================================\n");
404 
405  printf("Total Matriplex fit = %.5f --- Build BHMX = %.5f STDMX = %.5f CEMX = %.5f MIMI = %.5f\n",
406  t_sum[0],
407  t_sum[1],
408  t_sum[2],
409  t_sum[3],
410  t_sum[4]);
411  printf("Total event > 1 fit = %.5f --- Build BHMX = %.5f STDMX = %.5f CEMX = %.5f MIMI = %.5f\n",
412  t_skip[0],
413  t_skip[1],
414  t_skip[2],
415  t_skip[3],
416  t_skip[4]);
417  printf("Total event loop time %.5f simtracks %d seedtracks %d builtcands %d maxhits %d on lay %d\n",
418  time,
419  simtrackstot.load(),
420  seedstot.load(),
421  candstot.load(),
422  maxHits_all.load(),
423  maxLayer_all.load());
424  //fflush(stdout);
425  if (g_run_build_mimi) {
426  printf("================================================================\n");
427  for (int i = 0; i < Config::nItersCMSSW; ++i)
428  std::cout << " Iteration " << i << " build time = " << t_sum_iter[i] << " \n";
429  printf("================================================================\n");
430  for (int i = 0; i < Config::nItersCMSSW; ++i)
431  std::cout << " Iteration " << i << " build time (event > 1) = " << t_skip_iter[i] << " \n";
432  printf("================================================================\n");
433  }
434  if (g_operation == "read") {
435  data_file.close();
436  }
437 
438  for (auto& val : vals) {
439  val->fillConfigTree();
440  val->saveTTrees();
441  }
442 }
int openRead(const std::string &fname, int expected_n_layers)
Definition: Event.cc:926
std::vector< DeadVec > deadvectors
Definition: mkFit.cc:46
static std::mutex mutex
Definition: Proxy.cc:8
double runBuildingTestPlexStandard(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
void initGeom()
Definition: mkFit.cc:49
void close()
Definition: Event.cc:1053
assert(be >=bs)
void loadHitsAndBeamSpot(Event &ev, EventOfHits &eoh)
void skipNEvents(int n_to_skip)
Definition: Event.cc:1041
TrackerInfo TrkInfo
void loadDeads(EventOfHits &eoh, const std::vector< DeadVec > &deadvectors)
Definition: MkStdSeqs.cc:21
void runBuildingTestPlexDumbCMSSW(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
constexpr int numThreadsFinder
Definition: Config.h:87
double runBuildingTestPlexCloneEngine(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
double b
Definition: hdecay.h:120
double dtime()
std::vector< double > runBtpCe_MultiIter(Event &ev, const EventOfHits &eoh, MkBuilder &builder, int n)
#define dprint(x)
Definition: Debug.h:95
constexpr int numThreadsEvents
Definition: Config.h:88
double runBuildingTestPlexBestHit(Event &ev, const EventOfHits &eoh, MkBuilder &builder)