CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Types | Private Attributes
mkfit::Shell Class Reference

#include <Shell.h>

Public Types

enum  SeedSelect_e { SS_UseAll = 0, SS_Label, SS_IndexPreCleaning, SS_IndexPostCleaning }
 

Public Member Functions

MkBuilderbuilder ()
 
bool CheckMkFitLayerPlanVsReferenceHits (const Track &mkft, const Track &reft, const std::string &name)
 
void Compare ()
 
EventOfHitseoh ()
 
Eventevent ()
 
void FillByLabelMaps_CkfBase ()
 
void GoToEvent (int eid)
 
int LabelFromHits (Track &t, bool replace, float good_frac)
 
void NextEvent (int skip=1)
 
void PrintIterations ()
 
void ProcessEvent (SeedSelect_e seed_select=SS_UseAll, int selected_seed=-1, int count=1)
 
void Run ()
 
void SelectIterationAlgo (int algo)
 
void SelectIterationIndex (int itidx)
 
void SetBackwardFit (bool b)
 
void SetCleanSeeds (bool b)
 
void SetDebug (bool b)
 
void SetRemoveDuplicates (bool b)
 
void SetUseDeadModules (bool b)
 
 Shell (std::vector< DeadVec > &dv, const std::string &in_file, int start_ev)
 
void Status ()
 

Private Types

using map_i = map_t::iterator
 
using map_t = std::map< int, Track * >
 

Private Attributes

bool m_backward_fit = true
 
MkBuilderm_builder = nullptr
 
std::map< int, Track * > m_ckf_map
 
bool m_clean_seeds = true
 
DataFilem_data_file = nullptr
 
std::vector< DeadVec > & m_deadvectors
 
EventOfHitsm_eoh = nullptr
 
Eventm_event = nullptr
 
int m_evs_in_file = -1
 
int m_it_index = 0
 
std::map< int, Track * > m_mkf_map
 
bool m_remove_duplicates = true
 
std::map< int, Track * > m_seed_map
 
TrackVec m_seeds
 
std::map< int, Track * > m_sim_map
 
TrackVec m_tracks
 

Detailed Description

Definition at line 16 of file Shell.h.

Member Typedef Documentation

◆ map_i

using mkfit::Shell::map_i = map_t::iterator
private

Definition at line 72 of file Shell.h.

◆ map_t

using mkfit::Shell::map_t = std::map<int, Track *>
private

Definition at line 71 of file Shell.h.

Member Enumeration Documentation

◆ SeedSelect_e

Enumerator
SS_UseAll 
SS_Label 
SS_IndexPreCleaning 
SS_IndexPostCleaning 

Definition at line 18 of file Shell.h.

Constructor & Destructor Documentation

◆ Shell()

mkfit::Shell::Shell ( std::vector< DeadVec > &  dv,
const std::string &  in_file,
int  start_ev 
)

Definition at line 40 of file Shell.cc.

References mkfit::Config::backwardFit, GoToEvent(), runGCPTkAlMap::in_file, m_backward_fit, m_builder, m_data_file, m_eoh, m_event, m_evs_in_file, mkfit::DataFile::openRead(), mkfit::Config::silent, and mkfit::Config::TrkInfo.

41  : m_deadvectors(dv)
42  {
43  m_eoh = new EventOfHits(Config::TrkInfo);
44  m_builder = new MkBuilder(Config::silent);
45 
47 
48  m_data_file = new DataFile;
50 
51  m_event = new Event(0, Config::TrkInfo.n_layers());
52  GoToEvent(start_ev);
53  }
int openRead(const std::string &fname, int expected_n_layers)
Definition: Event.cc:919
DataFile * m_data_file
Definition: Shell.h:58
MkBuilder * m_builder
Definition: Shell.h:61
std::vector< DeadVec > & m_deadvectors
Definition: Shell.h:57
EventOfHits * m_eoh
Definition: Shell.h:60
void GoToEvent(int eid)
Definition: Shell.cc:87
bool m_backward_fit
Definition: Shell.h:65
TrackerInfo TrkInfo
Event * m_event
Definition: Shell.h:59
int m_evs_in_file
Definition: Shell.h:62

Member Function Documentation

◆ builder()

MkBuilder* mkfit::Shell::builder ( )
inline

Definition at line 41 of file Shell.h.

References m_builder.

Referenced by ProcessEvent().

41 { return m_builder; }
MkBuilder * m_builder
Definition: Shell.h:61

◆ CheckMkFitLayerPlanVsReferenceHits()

bool mkfit::Shell::CheckMkFitLayerPlanVsReferenceHits ( const Track mkft,
const Track reft,
const std::string &  name 
)

Definition at line 423 of file Shell.cc.

References mkfit::TrackBase::getEtaRegion(), mkfit::Track::getHitOnTrack(), mkfit::Config::ItrInfo, mkfit::TrackBase::label(), m_it_index, mkfit::IterationConfig::m_steering_params, Skims_PA_cff::name, mkfit::Track::nTotalHits(), runTheMatrix::ret, and x.

Referenced by Compare().

423  {
424  // Check if all hit-layers of a reference track reft are in the mkfit layer plan.
425  // Returns true if all layers are in the plan.
426  // String name is printed in front of label, expected to be SIMK or CKF.
427  const IterationConfig &itconf = Config::ItrInfo[m_it_index];
428  auto lp = itconf.m_steering_params[ mkft.getEtaRegion() ].m_layer_plan;
429  bool ret = true;
430  for (int hi = 0; hi < reft.nTotalHits(); ++hi) {
431  auto hot = reft.getHitOnTrack(hi);
432  if (std::find_if(lp.begin(), lp.end(), [=](auto &x){ return x.m_layer == hot.layer; }) == lp.end())
433  {
434  printf("CheckMkfLayerPlanVsCkfHits: layer %d not in layer plan for region %d, %s label=%d\n",
435  hot.layer, mkft.getEtaRegion(), name.c_str(), reft.label());
436  ret = false;
437  }
438  }
439  return ret;
440  }
ret
prodAgent to be discontinued
Definition: EPCuts.h:4
IterationsInfo ItrInfo
int m_it_index
Definition: Shell.h:63
float x

◆ Compare()

void mkfit::Shell::Compare ( )

Definition at line 446 of file Shell.cc.

References mkfit::TrackBase::algoint_to_cstr(), CheckMkFitLayerPlanVsReferenceHits(), makeMEIFBenchmarkPlots::ev, FillByLabelMaps_CkfBase(), mkfit::IterationConfig::get_seed_partitioner(), mkfit::HitOnTrack::index, mkfit::Config::ItrInfo, MainPageGenerator::l, mkfit::HitOnTrack::layer, m_ckf_map, m_eoh, m_event, m_it_index, m_mkf_map, m_seed_map, m_seeds, m_sim_map, mkfit::IterationConfig::m_track_algorithm, mkfit::print(), singleTopDQM_cfi::select, mkfit::Config::TrkInfo, and funct::void.

446  {
447  Event &ev = *m_event;
448  const IterationConfig &itconf = Config::ItrInfo[m_it_index];
449 
451 
452  printf("------------------------------------------------------\n");
453 
454  const bool print_all_def = false;
455  int mkf_cnt=0, less_hits=0, more_hits=0;
456 
457  // TOBTEC: look for rec-seeds with hits in tob1 and 2 only.
458  int tot_cnt = 0, no_mkf_cnt = 0;
459 
460  for (auto& [l, simt_ptr]: m_sim_map)
461  {
462  auto &simt = * simt_ptr;
463  auto &ckft = * m_ckf_map[l];
464  auto mi = m_mkf_map.find(l);
465 
466  bool print_all = print_all_def;
467 
468  // TOBTEC: look for rec-seeds with hits in tob1 and 2 only.
469  bool select = true;
470  {
471  auto &ckf_seed = ev.seedTracks_[ckft.label()];
472  for (int hi = 0; hi < ckf_seed.nTotalHits(); ++hi) {
473  const HitOnTrack hot = ckf_seed.getHitOnTrack(hi);
474  if (hot.index >= 0 && (hot.layer < 10 || hot.layer > 13)) {
475  select = false;
476  break;
477  }
478  }
479  }
480  if ( ! select) continue;
481 
482  ++tot_cnt;
483  //print_all = true;
484 
485  if (mi != m_mkf_map.end())
486  {
487  auto &mkft = * mi->second;
488  mkf_cnt++;
489  if (mkft.nFoundHits() < ckft.nFoundHits()) ++less_hits;
490  if (mkft.nFoundHits() > ckft.nFoundHits()) ++more_hits;
491 
492  CheckMkFitLayerPlanVsReferenceHits(mkft, ckft, "CKF");
493  // CheckMkFitLayerPlanVsReferenceHits(mkft, simt, "SIM");
494 
495  (void) print_all;
496  if (/* itconf.m_track_algorithm == 10 ||*/ print_all) {
497  // ckf label is wrong when validation is on (even quality val) for mixedTriplet, pixelless and tobtec
498  // as seed tracks get removed for non-mkfit iterations and indices from rec-tracks are no longer valid.
499  auto &ckf_seed = ev.seedTracks_[ckft.label()];
500  auto &mkf_seed = m_seeds[mkft.label()];
501  print("ckf ", 0, ckft, ev);
502  print("mkfit", 0, mkft, ev);
503  print("sim ", 0, simt, ev);
504  print("ckf seed", 0, ckf_seed, ev);
505  print("mkf seed", 0, mkf_seed, ev);
506  printf("------------------------------------------------------\n");
507 
508  TrackVec ssss;
509  ssss.push_back(mkf_seed);
510 
511  IterationSeedPartition pppp(1);
512  IterationConfig::get_seed_partitioner("phase1:1:debug")(Config::TrkInfo, ssss, *m_eoh, pppp);
513 
514  printf("------------------------------------------------------\n");
515  printf("\n");
516  }
517  }
518  else
519  {
520  printf("\n!!!!! No mkfit track with this label.\n\n");
521  ++no_mkf_cnt;
522 
523  auto &ckf_seed = ev.seedTracks_[ckft.label()];
524  print("ckf ", 0, ckft, ev);
525  print("sim ", 0, simt, ev);
526  print("ckf seed", 0, ckf_seed, ev);
527  auto smi = m_seed_map.find(l);
528  if (smi != m_seed_map.end())
529  print("seed with matching label", 0, *smi->second, ev);
530  printf("------------------------------------------------------\n");
531  }
532  }
533 
534  printf("mkFit found %d, matching_label=%d, less_hits=%d, more_hits=%d [algo=%d (%s)]\n",
535  (int) ev.fitTracks_.size(), mkf_cnt, less_hits, more_hits,
536  itconf.m_track_algorithm, TrackBase::algoint_to_cstr(itconf.m_track_algorithm));
537 
538  if (tot_cnt > 0) {
539  printf("\ntobtec tob1/2 tot=%d no_mkf=%d (%f%%)\n",
540  tot_cnt, no_mkf_cnt, 100.0 * no_mkf_cnt / tot_cnt);
541  } else {
542  printf("\nNo CKF tracks with seed hits in TOB1/2 found (need iteration idx 8, TobTec?)\n");
543  }
544 
545  printf("-------------------------------------------------------------------------------------------\n");
546  printf("-------------------------------------------------------------------------------------------\n");
547  printf("\n");
548  }
std::map< int, Track * > m_sim_map
Definition: Shell.h:74
TrackVec m_seeds
Definition: Shell.h:68
std::map< int, Track * > m_mkf_map
Definition: Shell.h:74
bool CheckMkFitLayerPlanVsReferenceHits(const Track &mkft, const Track &reft, const std::string &name)
Definition: Shell.cc:423
TEMPL(T2) struct Divides void
Definition: Factorize.h:24
void FillByLabelMaps_CkfBase()
Definition: Shell.cc:358
EventOfHits * m_eoh
Definition: Shell.h:60
Definition: EPCuts.h:4
static partition_seeds_func get_seed_partitioner(const std::string &name)
TrackerInfo TrkInfo
IterationsInfo ItrInfo
static const char * algoint_to_cstr(int algo)
Definition: Track.cc:331
std::vector< Track > TrackVec
void print(std::string_view label, const MeasurementState &s)
Definition: Hit.cc:8
Event * m_event
Definition: Shell.h:59
int m_it_index
Definition: Shell.h:63
std::map< int, Track * > m_ckf_map
Definition: Shell.h:74
std::map< int, Track * > m_seed_map
Definition: Shell.h:74

◆ eoh()

EventOfHits* mkfit::Shell::eoh ( )
inline

Definition at line 40 of file Shell.h.

References m_eoh.

Referenced by ProcessEvent().

40 { return m_eoh; }
EventOfHits * m_eoh
Definition: Shell.h:60

◆ event()

Event* mkfit::Shell::event ( )
inline

Definition at line 39 of file Shell.h.

References m_event.

39 { return m_event; }
Event * m_event
Definition: Shell.h:59

◆ FillByLabelMaps_CkfBase()

void mkfit::Shell::FillByLabelMaps_CkfBase ( )

Definition at line 358 of file Shell.cc.

References mkfit::TrackBase::algoint_to_cstr(), makeMEIFBenchmarkPlots::ev, createfilelist::int, mkfit::Config::ItrInfo, label, LabelFromHits(), m_ckf_map, m_event, m_it_index, m_mkf_map, m_seed_map, m_seeds, m_sim_map, m_tracks, and submitPVValidationJobs::t.

Referenced by Compare().

358  {
359  Event &ev = *m_event;
360  const int track_algo = Config::ItrInfo[m_it_index].m_track_algorithm;
361 
362  m_ckf_map.clear();
363  m_sim_map.clear();
364  m_seed_map.clear();
365  m_mkf_map.clear();
366 
367  // Pick ckf tracks with right algo and a good label.
368  int rec_algo_match = 0;
369  for (auto &t : ev.cmsswTracks_) {
370  if (t.algoint() != track_algo)
371  continue;
372  ++rec_algo_match;
373  int label = LabelFromHits(t, false, 0.5);
374  if (label >= 0) {
375  m_ckf_map.insert(std::make_pair(label, &t));
376  }
377  }
378 
379  // Pick sim tracks with labels found by ckf.
380  for (auto &t : ev.simTracks_) {
381  if (t.label() >= 0 && m_ckf_map.find(t.label()) != m_ckf_map.end()) {
382  m_sim_map.insert(std::make_pair(t.label(), &t));
383  }
384  }
385 
386  // Pick seeds with right algo and a label found by ckf.
387  for (auto &t : ev.seedTracks_) {
388  if (t.algoint() == track_algo && t.label() >= 0 && m_ckf_map.find(t.label()) != m_ckf_map.end()) {
389  m_seed_map.insert(std::make_pair(t.label(), &t));
390  }
391  }
392  // Some seeds seem to be labeled -1, try fixing when not otherwise found.
393  for (auto &t : ev.seedTracks_) {
394  if (t.algoint() == track_algo && t.label() == -1) {
395  int lab = LabelFromHits(t, true, 0.5);
396  if (lab >= 0 && m_seed_map.find(lab) == m_seed_map.end()) {
397  if (m_ckf_map.find(lab) != m_ckf_map.end()) {
398  m_seed_map.insert(std::make_pair(t.label(), &t));
399  printf("Saved seed with label -1 -> %d\n", lab);
400  }
401  }
402  }
403  }
404 
405  // Pick mkfit tracks, label by
406  for (auto &t : m_tracks) {
407  int label = LabelFromHits(t, false, 0.5);
408  if (label >= 0) {
409  m_mkf_map.insert(std::make_pair(label, &t));
410  }
411  }
412 
413  printf("Shell::FillByLabelMaps reporting tracks with label >= 0, algo=%d (%s): "
414  "ckf: %d of %d (same algo=%d)), sim: %d of %d, seed: %d of %d, mkfit: %d w/label of %d\n",
415  track_algo, TrackBase::algoint_to_cstr(track_algo),
416  (int) m_ckf_map.size(), (int) ev.cmsswTracks_.size(), rec_algo_match,
417  (int) m_sim_map.size(), (int) ev.simTracks_.size(),
418  (int) m_seed_map.size(), (int) m_seeds.size(),
419  (int) m_mkf_map.size(), (int) m_tracks.size()
420  );
421  }
std::map< int, Track * > m_sim_map
Definition: Shell.h:74
TrackVec m_seeds
Definition: Shell.h:68
std::map< int, Track * > m_mkf_map
Definition: Shell.h:74
char const * label
IterationsInfo ItrInfo
static const char * algoint_to_cstr(int algo)
Definition: Track.cc:331
TrackVec m_tracks
Definition: Shell.h:69
Event * m_event
Definition: Shell.h:59
int m_it_index
Definition: Shell.h:63
int LabelFromHits(Track &t, bool replace, float good_frac)
Definition: Shell.cc:331
std::map< int, Track * > m_ckf_map
Definition: Shell.h:74
std::map< int, Track * > m_seed_map
Definition: Shell.h:74

◆ GoToEvent()

void mkfit::Shell::GoToEvent ( int  eid)

Definition at line 87 of file Shell.cc.

References runTauDisplay::eid, mkfit::Event::evtID(), mkfit::StdSeq::loadDeads(), mkfit::StdSeq::loadHitsAndBeamSpot(), m_data_file, m_deadvectors, m_eoh, m_event, m_evs_in_file, mkfit::Event::read_in(), mkfit::Event::reset(), mkfit::DataFile::rewind(), mkfit::DataFile::skipNEvents(), submitPVResolutionJobs::stderr, and mkfit::Config::useDeadModules.

Referenced by NextEvent(), and Shell().

87  {
88  if (eid < 1) {
89  fprintf(stderr, "Requested event %d is less than 1 -- 1 is the first event, %d is total number of events in file\n",
91  throw std::runtime_error("event out of range");
92  }
93  if (eid > m_evs_in_file) {
94  fprintf(stderr, "Requested event %d is grater than total number of events in file %d\n",
96  throw std::runtime_error("event out of range");
97  }
98 
99  int pos = m_event->evtID();
100  if (eid > pos) {
101  m_data_file->skipNEvents(eid - pos - 1);
102  } else {
103  m_data_file->rewind();
105  }
106  m_event->reset(eid);
111  }
112 
113  printf("At event %d\n", eid);
114  }
void rewind()
Definition: Event.cc:1007
void reset(int evtID)
Definition: Event.cc:33
DataFile * m_data_file
Definition: Shell.h:58
int evtID() const
Definition: Event.h:23
std::vector< DeadVec > & m_deadvectors
Definition: Shell.h:57
void loadHitsAndBeamSpot(Event &ev, EventOfHits &eoh)
void skipNEvents(int n_to_skip)
Definition: Event.cc:1034
EventOfHits * m_eoh
Definition: Shell.h:60
void loadDeads(EventOfHits &eoh, const std::vector< DeadVec > &deadvectors)
Definition: MkStdSeqs.cc:21
Event * m_event
Definition: Shell.h:59
int m_evs_in_file
Definition: Shell.h:62
void read_in(DataFile &data_file, FILE *in_fp=0)
Definition: Event.cc:207

◆ LabelFromHits()

int mkfit::Shell::LabelFromHits ( Track t,
bool  replace,
float  good_frac 
)

Definition at line 331 of file Shell.cc.

References h, mkfit::Event::layerHits_, m_event, python.rootplot.root2matplotlib::replace(), mkfit::Event::simHitsInfo_, summarizeEdmComparisonLogfiles::success, submitPVValidationJobs::t, and x.

Referenced by FillByLabelMaps_CkfBase().

331  {
332  std::map<int, int> lab_cnt;
333  for (int hi = 0; hi < t.nTotalHits(); ++hi) {
334  auto hot = t.getHitOnTrack(hi);
335  if (hot.index < 0)
336  continue;
337  const Hit &h = m_event->layerHits_[hot.layer][hot.index];
338  int hl = m_event->simHitsInfo_[h.mcHitID()].mcTrackID_;
339  if (hl >= 0)
340  ++lab_cnt[hl];
341  }
342  int max_c = -1, max_l = -1;
343  for (auto& x : lab_cnt) {
344  if (x.second > max_c) {
345  max_l = x.first;
346  max_c = x.second;
347  }
348  }
349  bool success = max_c >= good_frac * t.nFoundHits();
350  int relabel = success ? max_l : -1;
351  // printf("found_hits=%d, best_lab %d (%d hits), existing label=%d (replace flag=%s)\n",
352  // t.nFoundHits(), max_l, max_c, t.label(), b2a(replace));
353  if (replace)
354  t.setLabel(relabel);
355  return relabel;
356  }
def replace(string, replacements)
Definition: EPCuts.h:4
MCHitInfoVec simHitsInfo_
Definition: Event.h:72
std::vector< HitVec > layerHits_
Definition: Event.h:70
Event * m_event
Definition: Shell.h:59
float x
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

◆ NextEvent()

void mkfit::Shell::NextEvent ( int  skip = 1)

Definition at line 116 of file Shell.cc.

References mkfit::Event::evtID(), GoToEvent(), m_event, and optionsL1T::skip.

116  {
117  GoToEvent(m_event->evtID() + skip);
118  }
int evtID() const
Definition: Event.h:23
void GoToEvent(int eid)
Definition: Shell.cc:87
Event * m_event
Definition: Shell.h:59

◆ PrintIterations()

void mkfit::Shell::PrintIterations ( )

Definition at line 302 of file Shell.cc.

References mkfit::TrackBase::algoint_to_cstr(), hltPFPuppi_cfi::algos, mps_fire::i, and m_it_index.

302  {
303  printf("Shell::PrintIterations selected index = %d, %d iterations hardcoded as\n",
304  m_it_index, n_algos);
305  for (int i = 0; i < n_algos; ++i)
306  printf("%d %2d %s\n", i, algos[i], TrackBase::algoint_to_cstr(algos[i]));
307  }
static const char * algoint_to_cstr(int algo)
Definition: Track.cc:331
int m_it_index
Definition: Shell.h:63

◆ ProcessEvent()

void mkfit::Shell::ProcessEvent ( SeedSelect_e  seed_select = SS_UseAll,
int  selected_seed = -1,
int  count = 1 
)

Definition at line 120 of file Shell.cc.

References mkfit::MkBuilder::backwardFit(), mkfit::MkBuilder::begin_event(), mkfit::MkBuilder::beginBkwSearch(), builder(), mkfit::MkBuilder::compactifyHitStorageForBestCand(), submitPVResolutionJobs::count, mkfit::MkBuilder::end_event(), mkfit::MkBuilder::endBkwSearch(), eoh(), mkfit::MkBuilder::export_best_comb_cands(), mkfit::Event::fill_hitmask_bool_vectors(), mkfit::MkBuilder::filter_comb_cands(), mkfit::MkBuilder::find_tracks_load_seeds(), mkfit::MkBuilder::findTracksCloneEngine(), mps_fire::i, createfilelist::int, mkfit::SteeringParams::IT_BkwSearch, mkfit::Config::ItrInfo, mkfit::IterationConfig::m_backward_drop_seed_hits, m_backward_fit, mkfit::IterationConfig::m_backward_fit_min_hits, mkfit::IterationConfig::m_backward_search, m_builder, m_clean_seeds, mkfit::IterationConfig::m_duplicate_cleaner, m_eoh, m_event, m_it_index, mkfit::IterationMaskIfc::m_mask_vector, mkfit::IterationConfig::m_post_bkfit_filter, mkfit::IterationConfig::m_pre_bkfit_filter, m_remove_duplicates, mkfit::IterationConfig::m_requires_seed_hit_sorting, mkfit::IterationConfig::m_seed_cleaner, m_seeds, mkfit::IterationConfig::m_track_algorithm, m_tracks, mkfit::MkBuilder::ref_eocc(), mkfit::EventOfHits::refBeamSpot(), mkfit::Event::resetCurrentSeedTracks(), alignCSCRings::s, mkfit::MkBuilder::seed_post_cleaning(), HLT_FULL_cff::seeds, mkfit::Event::seedTracks_, mkfit::Event::setCurrentSeedTracks(), mkfit::EventOfCombCandidates::size(), SS_IndexPostCleaning, SS_IndexPreCleaning, SS_Label, SS_UseAll, and mkfit::Config::TrkInfo.

120  {
121  // count is only used for SS_IndexPreCleaning and SS_IndexPostCleaning.
122  // There are no checks for upper bounds, ie, if requested seeds beyond the first one exist.
123 
124  const IterationConfig &itconf = Config::ItrInfo[m_it_index];
125  IterationMaskIfc mask_ifc;
126  m_event->fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
127 
128  m_seeds.clear();
129  m_tracks.clear();
130 
131  {
132  int n_algo = 0; // seeds are grouped by algo
133  for (auto &s : m_event->seedTracks_) {
134  if (s.algoint() == itconf.m_track_algorithm) {
135  if (seed_select == SS_UseAll || seed_select == SS_IndexPostCleaning) {
136  m_seeds.push_back(s);
137  } else if (seed_select == SS_Label && s.label() == selected_seed) {
138  m_seeds.push_back(s);
139  break;
140  } else if (seed_select == SS_IndexPreCleaning && n_algo >= selected_seed) {
141  m_seeds.push_back(s);
142  if (--count <= 0)
143  break;
144  }
145  ++n_algo;
146  } else if (n_algo > 0)
147  break;
148  }
149  }
150 
151  printf("Shell::ProcessEvent running over %d seeds\n", (int) m_seeds.size());
152 
153  // Equivalent to run_OneIteration(...) without MkBuilder::release_memory().
154  // If seed_select == SS_IndexPostCleaning the given seed is picked after cleaning.
155  {
156  const TrackerInfo &trackerInfo = Config::TrkInfo;
157  const EventOfHits &eoh = *m_eoh;
158  const IterationMaskIfcBase &it_mask_ifc = mask_ifc;
159  MkBuilder &builder = *m_builder;
161  TrackVec &out_tracks = m_tracks;
162  bool do_seed_clean = m_clean_seeds;
163  bool do_backward_fit = m_backward_fit;
164  bool do_remove_duplicates = m_remove_duplicates;
165 
166  MkJob job({trackerInfo, itconf, eoh, eoh.refBeamSpot(), &it_mask_ifc});
167 
168  builder.begin_event(&job, m_event, __func__);
169 
170  // Seed cleaning not done on all iterations.
171  do_seed_clean = m_clean_seeds && itconf.m_seed_cleaner;
172 
173  if (do_seed_clean)
174  itconf.m_seed_cleaner(seeds, itconf, eoh.refBeamSpot());
175 
176  // Check nans in seeds -- this should not be needed when Slava fixes
177  // the track parameter coordinate transformation.
179 
180  if (seed_select == SS_IndexPostCleaning) {
181  if (selected_seed >= 0 && selected_seed < (int)seeds.size()) {
182  for (int i = 0; i < count; ++i)
183  seeds[i] = seeds[selected_seed + i];
184  seeds.resize(count);
185  } else {
186  seeds.clear();
187  }
188  }
189 
190  if (seeds.empty()) {
191  if (seed_select != SS_UseAll)
192  printf("Shell::ProcessEvent requested seed not found among seeds of the selected iteration.\n");
193  else
194  printf("Shell::ProcessEvent no seeds found.\n");
195  return;
196  }
197 
198  if (itconf.m_requires_seed_hit_sorting) {
199  for (auto &s : seeds)
200  s.sortHitsByLayer(); // sort seed hits for the matched hits (I hope it works here)
201  }
202 
204 
205  builder.find_tracks_load_seeds(seeds, do_seed_clean);
206 
208 
209  printf("Shell::ProcessEvent post fwd search: %d comb-cands\n", builder.ref_eocc().size());
210 
211  // Pre backward-fit filtering.
212  filter_candidates_func pre_filter;
213  if (do_backward_fit && itconf.m_pre_bkfit_filter)
214  pre_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
215  return itconf.m_pre_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
216  };
217  else if (itconf.m_pre_bkfit_filter)
218  pre_filter = itconf.m_pre_bkfit_filter;
219  else if (do_backward_fit)
220  pre_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
221  // pre_filter can be null if we are not doing backward fit as nan_n_silly will be run below.
222  if (pre_filter)
223  builder.filter_comb_cands(pre_filter, true);
224 
225  printf("Shell::ProcessEvent post pre-bkf-filter (%s) and nan-filter (%s) filter: %d comb-cands\n",
226  b2a(bool(itconf.m_pre_bkfit_filter)), b2a(do_backward_fit), builder.ref_eocc().size());
227 
228  job.switch_to_backward();
229 
230  if (do_backward_fit) {
231  if (itconf.m_backward_search) {
232  builder.compactifyHitStorageForBestCand(itconf.m_backward_drop_seed_hits, itconf.m_backward_fit_min_hits);
233  }
234 
236 
237  if (itconf.m_backward_search) {
240  }
241 
242  printf("Shell::ProcessEvent post backward fit / search: %d comb-cands\n", builder.ref_eocc().size());
243  }
244 
245  // Post backward-fit filtering.
246  filter_candidates_func post_filter;
247  if (do_backward_fit && itconf.m_post_bkfit_filter)
248  post_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
249  return itconf.m_post_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
250  };
251  else
252  post_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
253  // post_filter is always at least doing nan_n_silly filter.
254  builder.filter_comb_cands(post_filter, true);
255 
256  printf("Shell::ProcessEvent post post-bkf-filter (%s) and nan-filter (true): %d comb-cands\n",
257  b2a(do_backward_fit && itconf.m_post_bkfit_filter), builder.ref_eocc().size());
258 
259  if (do_backward_fit && itconf.m_backward_search)
261 
262  builder.export_best_comb_cands(out_tracks, true);
263 
264  if (do_remove_duplicates && itconf.m_duplicate_cleaner) {
265  itconf.m_duplicate_cleaner(out_tracks, itconf);
266  }
267 
268  printf("Shell::ProcessEvent post remove-duplicates: %d comb-cands\n", (int) out_tracks.size());
269 
271 
272  builder.end_event();
273  }
274 
275  printf("Shell::ProcessEvent found %d tracks, number of seeds at end %d\n",
276  (int) m_tracks.size(), (int) m_seeds.size());
277  }
const EventOfCombCandidates & ref_eocc() const
Definition: MkBuilder.h:73
TrackVec m_seeds
Definition: Shell.h:68
const BeamSpot & refBeamSpot() const
bool m_remove_duplicates
Definition: Shell.h:66
void compactifyHitStorageForBestCand(bool remove_seed_hits, int backward_fit_min_hits)
Definition: MkBuilder.h:62
TrackVec seedTracks_
Definition: Event.h:74
void findTracksCloneEngine(SteeringParams::IterationType_e iteration_dir=SteeringParams::IT_FwdSearch)
Definition: MkBuilder.cc:932
bool m_clean_seeds
Definition: Shell.h:64
void begin_event(MkJob *job, Event *ev, const char *build_type)
Definition: MkBuilder.cc:194
void resetCurrentSeedTracks()
Definition: Event.cc:910
EventOfHits * eoh()
Definition: Shell.h:40
MkBuilder * m_builder
Definition: Shell.h:61
std::function< filter_candidates_cf > filter_candidates_func
Definition: FunctionTypes.h:28
EventOfHits * m_eoh
Definition: Shell.h:60
void find_tracks_load_seeds(const TrackVec &in_seeds, const bool seeds_sorted)
Definition: MkBuilder.cc:609
void setCurrentSeedTracks(const TrackVec &seeds)
Definition: Event.cc:865
bool m_backward_fit
Definition: Shell.h:65
TrackerInfo TrkInfo
void seed_post_cleaning(TrackVec &tv)
Definition: MkBuilder.cc:407
void fill_hitmask_bool_vectors(int track_algo, std::vector< std::vector< bool >> &layer_masks)
Definition: Event.cc:819
IterationsInfo ItrInfo
MkBuilder * builder()
Definition: Shell.h:41
int filter_comb_cands(filter_candidates_func filter, bool attempt_all_cands)
Definition: MkBuilder.cc:301
TrackVec m_tracks
Definition: Shell.h:69
std::vector< Track > TrackVec
void beginBkwSearch()
Definition: MkBuilder.h:66
void export_best_comb_cands(TrackVec &out_vec, bool remove_missing_hits=false)
Definition: MkBuilder.cc:384
Event * m_event
Definition: Shell.h:59
int m_it_index
Definition: Shell.h:63
void endBkwSearch()
Definition: MkBuilder.h:67

◆ Run()

void mkfit::Shell::Run ( )

Definition at line 55 of file Shell.cc.

References dir2webdir::argc, GCPpyPlots::argv, visDQMUpload::buf, and beamvalidation::exit().

55  {
56 #ifndef NO_ROOT
57  std::vector<const char *> argv = { "mkFit", "-l" };
58  int argc = argv.size();
59  TRint rint("mkFit-shell", &argc, const_cast<char**>(argv.data()));
60 
61  char buf[256];
62  sprintf(buf, "mkfit::Shell &s = * (mkfit::Shell*) %p;", this);
63  gROOT->ProcessLine(buf);
64  printf("Shell &s variable is set\n");
65 
66  rint.Run(true);
67  printf("Shell::Run finished\n");
68 #else
69  printf("Shell::Run() no root, we rot -- erroring out. Recompile with WITH_ROOT=1\n");
70  exit(1);
71 #endif
72  }
def exit(msg="")

◆ SelectIterationAlgo()

void mkfit::Shell::SelectIterationAlgo ( int  algo)

Definition at line 291 of file Shell.cc.

References hltPFPuppi_cfi::algos, mps_fire::i, m_it_index, and submitPVResolutionJobs::stderr.

291  {
292  for (int i = 0; i < n_algos; ++i) {
293  if (algos[i] == algo) {
294  m_it_index = i;
295  return;
296  }
297  }
298  fprintf(stderr, "Requested algo %d not found", algo);
299  throw std::runtime_error("algo not found");
300  }
int m_it_index
Definition: Shell.h:63

◆ SelectIterationIndex()

void mkfit::Shell::SelectIterationIndex ( int  itidx)

Definition at line 283 of file Shell.cc.

References m_it_index, and submitPVResolutionJobs::stderr.

283  {
284  if (itidx < 0 || itidx >= n_algos) {
285  fprintf(stderr, "Requested iteration index out of range [%d, %d)", 0, n_algos);
286  throw std::runtime_error("iteration index out of range");
287  }
288  m_it_index = itidx;
289  }
int m_it_index
Definition: Shell.h:63

◆ SetBackwardFit()

void mkfit::Shell::SetBackwardFit ( bool  b)

Definition at line 315 of file Shell.cc.

References b, and m_backward_fit.

315 { m_backward_fit = b; }
bool m_backward_fit
Definition: Shell.h:65
double b
Definition: hdecay.h:120

◆ SetCleanSeeds()

void mkfit::Shell::SetCleanSeeds ( bool  b)

Definition at line 314 of file Shell.cc.

References b, and m_clean_seeds.

314 { m_clean_seeds = b; }
bool m_clean_seeds
Definition: Shell.h:64
double b
Definition: hdecay.h:120

◆ SetDebug()

void mkfit::Shell::SetDebug ( bool  b)

Definition at line 313 of file Shell.cc.

References b, and mkfit::g_debug.

313 { g_debug = b; }
bool g_debug
Definition: Debug.cc:2
double b
Definition: hdecay.h:120

◆ SetRemoveDuplicates()

void mkfit::Shell::SetRemoveDuplicates ( bool  b)

Definition at line 316 of file Shell.cc.

References b, and m_remove_duplicates.

316 { m_remove_duplicates = b; }
bool m_remove_duplicates
Definition: Shell.h:66
double b
Definition: hdecay.h:120

◆ SetUseDeadModules()

void mkfit::Shell::SetUseDeadModules ( bool  b)

Definition at line 317 of file Shell.cc.

References b, and mkfit::Config::useDeadModules.

double b
Definition: hdecay.h:120

◆ Status()

void mkfit::Shell::Status ( )

Definition at line 74 of file Shell.cc.

References mkfit::TrackBase::algoint_to_cstr(), hltPFPuppi_cfi::algos, mkfit::Event::evtID(), mkfit::g_debug, m_backward_fit, m_clean_seeds, m_event, m_it_index, m_remove_duplicates, and mkfit::Config::useDeadModules.

74  {
75  printf("On event %d, selected iteration index %d, algo %d - %s\n"
76  " debug = %s, use_dead_modules = %s\n"
77  " clean_seeds = %s, backward_fit = %s, remove_duplicates = %s\n",
81  }
bool m_remove_duplicates
Definition: Shell.h:66
int evtID() const
Definition: Event.h:23
bool m_clean_seeds
Definition: Shell.h:64
bool g_debug
Definition: Debug.cc:2
bool m_backward_fit
Definition: Shell.h:65
static const char * algoint_to_cstr(int algo)
Definition: Track.cc:331
Event * m_event
Definition: Shell.h:59
int m_it_index
Definition: Shell.h:63

Member Data Documentation

◆ m_backward_fit

bool mkfit::Shell::m_backward_fit = true
private

Definition at line 65 of file Shell.h.

Referenced by ProcessEvent(), SetBackwardFit(), Shell(), and Status().

◆ m_builder

MkBuilder* mkfit::Shell::m_builder = nullptr
private

Definition at line 61 of file Shell.h.

Referenced by builder(), ProcessEvent(), and Shell().

◆ m_ckf_map

std::map<int, Track *> mkfit::Shell::m_ckf_map
private

Definition at line 74 of file Shell.h.

Referenced by Compare(), and FillByLabelMaps_CkfBase().

◆ m_clean_seeds

bool mkfit::Shell::m_clean_seeds = true
private

Definition at line 64 of file Shell.h.

Referenced by ProcessEvent(), SetCleanSeeds(), and Status().

◆ m_data_file

DataFile* mkfit::Shell::m_data_file = nullptr
private

Definition at line 58 of file Shell.h.

Referenced by GoToEvent(), and Shell().

◆ m_deadvectors

std::vector<DeadVec>& mkfit::Shell::m_deadvectors
private

Definition at line 57 of file Shell.h.

Referenced by GoToEvent().

◆ m_eoh

EventOfHits* mkfit::Shell::m_eoh = nullptr
private

Definition at line 60 of file Shell.h.

Referenced by Compare(), eoh(), GoToEvent(), ProcessEvent(), and Shell().

◆ m_event

Event* mkfit::Shell::m_event = nullptr
private

◆ m_evs_in_file

int mkfit::Shell::m_evs_in_file = -1
private

Definition at line 62 of file Shell.h.

Referenced by GoToEvent(), and Shell().

◆ m_it_index

int mkfit::Shell::m_it_index = 0
private

◆ m_mkf_map

std::map<int, Track *> mkfit::Shell::m_mkf_map
private

Definition at line 74 of file Shell.h.

Referenced by Compare(), and FillByLabelMaps_CkfBase().

◆ m_remove_duplicates

bool mkfit::Shell::m_remove_duplicates = true
private

Definition at line 66 of file Shell.h.

Referenced by ProcessEvent(), SetRemoveDuplicates(), and Status().

◆ m_seed_map

std::map<int, Track *> mkfit::Shell::m_seed_map
private

Definition at line 74 of file Shell.h.

Referenced by Compare(), and FillByLabelMaps_CkfBase().

◆ m_seeds

TrackVec mkfit::Shell::m_seeds
private

Definition at line 68 of file Shell.h.

Referenced by Compare(), FillByLabelMaps_CkfBase(), and ProcessEvent().

◆ m_sim_map

std::map<int, Track *> mkfit::Shell::m_sim_map
private

Definition at line 74 of file Shell.h.

Referenced by Compare(), and FillByLabelMaps_CkfBase().

◆ m_tracks

TrackVec mkfit::Shell::m_tracks
private

Definition at line 69 of file Shell.h.

Referenced by FillByLabelMaps_CkfBase(), and ProcessEvent().