CMS 3D CMS Logo

runFunctions.cc
Go to the documentation of this file.
4 
5 #include <memory>
6 
7 namespace mkfit {
8 
9  //==============================================================================
10  // run_OneIteration
11  //
12  // One-stop function for running track building from CMSSW.
13  //==============================================================================
14 
17  const std::vector<const std::vector<bool> *> &m_mask_vector;
18 
19  IterationMaskIfcCmssw(const TrackerInfo &ti, const std::vector<const std::vector<bool> *> &maskvec)
20  : m_trk_info(ti), m_mask_vector(maskvec) {}
21 
22  const std::vector<bool> *get_mask_for_layer(int layer) const override {
23  return m_trk_info.layer(layer).is_pixel() ? m_mask_vector[0] : m_mask_vector[1];
24  }
25  };
26 
27  void run_OneIteration(const TrackerInfo &trackerInfo,
28  const IterationConfig &itconf,
29  const EventOfHits &eoh,
30  const std::vector<const std::vector<bool> *> &hit_masks,
31  MkBuilder &builder,
32  TrackVec &seeds,
33  TrackVec &out_tracks,
34  bool do_seed_clean,
35  bool do_backward_fit,
36  bool do_remove_duplicates) {
37  IterationMaskIfcCmssw it_mask_ifc(trackerInfo, hit_masks);
38 
39  MkJob job({trackerInfo, itconf, eoh, eoh.refBeamSpot(), &it_mask_ifc});
40 
41  builder.begin_event(&job, nullptr, __func__);
42 
43  // Seed cleaning not done on all iterations.
44  do_seed_clean = do_seed_clean && itconf.m_seed_cleaner;
45 
46  if (do_seed_clean)
47  itconf.m_seed_cleaner(seeds, itconf, eoh.refBeamSpot());
48 
49  // Check nans in seeds -- this should not be needed when Slava fixes
50  // the track parameter coordinate transformation.
51  builder.seed_post_cleaning(seeds);
52 
53  if (itconf.m_requires_seed_hit_sorting) {
54  for (auto &s : seeds)
55  s.sortHitsByLayer(); // sort seed hits for the matched hits (I hope it works here)
56  }
57 
58  builder.find_tracks_load_seeds(seeds, do_seed_clean);
59 
60  builder.findTracksCloneEngine();
61 
62  // Pre backward-fit filtering.
63  filter_candidates_func pre_filter;
64  if (do_backward_fit && itconf.m_pre_bkfit_filter)
65  pre_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
66  return itconf.m_pre_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
67  };
68  else if (itconf.m_pre_bkfit_filter)
69  pre_filter = itconf.m_pre_bkfit_filter;
70  else if (do_backward_fit)
71  pre_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
72  // pre_filter can be null if we are not doing backward fit as nan_n_silly will be run below.
73  if (pre_filter)
74  builder.filter_comb_cands(pre_filter, true);
75 
76  job.switch_to_backward();
77 
78  if (do_backward_fit) {
79  if (itconf.m_backward_search) {
81  }
82 
83  builder.backwardFit();
84 
85  if (itconf.m_backward_search) {
86  builder.beginBkwSearch();
88  }
89  }
90 
91  // Post backward-fit filtering.
92  filter_candidates_func post_filter;
93  if (do_backward_fit && itconf.m_post_bkfit_filter)
94  post_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
95  return itconf.m_post_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
96  };
97  else
98  post_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
99  // post_filter is always at least doing nan_n_silly filter.
100  builder.filter_comb_cands(post_filter, true);
101 
102  if (do_backward_fit && itconf.m_backward_search)
103  builder.endBkwSearch();
104 
105  builder.export_best_comb_cands(out_tracks, true);
106 
107  if (do_remove_duplicates && itconf.m_duplicate_cleaner) {
108  itconf.m_duplicate_cleaner(out_tracks, itconf);
109  }
110 
111  builder.end_event();
112  builder.release_memory();
113  }
114 
115 } // end namespace mkfit
const BeamSpot & refBeamSpot() const
void compactifyHitStorageForBestCand(bool remove_seed_hits, int backward_fit_min_hits)
Definition: MkBuilder.h:63
void findTracksCloneEngine(SteeringParams::IterationType_e iteration_dir=SteeringParams::IT_FwdSearch)
Definition: MkBuilder.cc:948
void begin_event(MkJob *job, Event *ev, const char *build_type)
Definition: MkBuilder.cc:206
bool is_pixel() const
Definition: TrackerInfo.h:106
clean_seeds_func m_seed_cleaner
void run_OneIteration(const TrackerInfo &trackerInfo, const IterationConfig &itconf, const EventOfHits &eoh, const std::vector< const std::vector< bool > *> &hit_masks, MkBuilder &builder, TrackVec &seeds, TrackVec &out_tracks, bool do_seed_clean, bool do_backward_fit, bool do_remove_duplicates)
Definition: runFunctions.cc:27
std::function< filter_candidates_cf > filter_candidates_func
Definition: FunctionTypes.h:28
void find_tracks_load_seeds(const TrackVec &in_seeds, const bool seeds_sorted)
Definition: MkBuilder.cc:621
void release_memory()
Definition: MkBuilder.cc:234
void seed_post_cleaning(TrackVec &tv)
Definition: MkBuilder.cc:419
int filter_comb_cands(filter_candidates_func filter, bool attempt_all_cands)
Definition: MkBuilder.cc:313
const LayerInfo & layer(int l) const
Definition: TrackerInfo.h:241
filter_candidates_func m_post_bkfit_filter
const std::vector< bool > * get_mask_for_layer(int layer) const override
Definition: runFunctions.cc:22
std::vector< Track > TrackVec
const std::vector< const std::vector< bool > * > & m_mask_vector
Definition: runFunctions.cc:17
clean_duplicates_func m_duplicate_cleaner
void beginBkwSearch()
Definition: MkBuilder.h:67
void export_best_comb_cands(TrackVec &out_vec, bool remove_missing_hits=false)
Definition: MkBuilder.cc:396
void endBkwSearch()
Definition: MkBuilder.h:68
const TrackerInfo & m_trk_info
Definition: runFunctions.cc:16
IterationMaskIfcCmssw(const TrackerInfo &ti, const std::vector< const std::vector< bool > *> &maskvec)
Definition: runFunctions.cc:19
filter_candidates_func m_pre_bkfit_filter