CMS 3D CMS Logo

buildtestMPlex.cc
Go to the documentation of this file.
7 
8 #include "oneapi/tbb/parallel_for.h"
9 
10 #include <memory>
11 
12 namespace mkfit {
13 
14  inline bool sortByHitsChi2(const std::pair<Track, TrackState> &cand1, const std::pair<Track, TrackState> &cand2) {
15  if (cand1.first.nFoundHits() == cand2.first.nFoundHits())
16  return cand1.first.chi2() < cand2.first.chi2();
17 
18  return cand1.first.nFoundHits() > cand2.first.nFoundHits();
19  }
20 
21  inline bool sortByPhi(const Hit &hit1, const Hit &hit2) {
22  return std::atan2(hit1.y(), hit1.x()) < std::atan2(hit2.y(), hit2.x());
23  }
24 
25  inline bool sortByEta(const Hit &hit1, const Hit &hit2) { return hit1.eta() < hit2.eta(); }
26 
27  inline bool sortTracksByEta(const Track &track1, const Track &track2) { return track1.momEta() < track2.momEta(); }
28 
29  inline bool sortTracksByPhi(const Track &track1, const Track &track2) { return track1.momPhi() < track2.momPhi(); }
30 
32  const std::vector<std::vector<Track>> &m_track_candidates;
33 
34  sortTracksByPhiStruct(std::vector<std::vector<Track>> *track_candidates) : m_track_candidates(*track_candidates) {}
35 
36  bool operator()(const std::pair<int, int> &track1, const std::pair<int, int> &track2) {
37  return m_track_candidates[track1.first][track1.second].posPhi() <
38  m_track_candidates[track2.first][track2.second].posPhi();
39  }
40  };
41 
42  // within a layer with a "reasonable" geometry, ordering by Z is the same as eta
43  inline bool sortByZ(const Hit &hit1, const Hit &hit2) { return hit1.z() < hit2.z(); }
44 
45  //==============================================================================
46  // NaN and Silly track parameter check
47  //==============================================================================
48 
49  namespace {
50 
51  int check_nan_n_silly(TrackVec &tracks, const char *prefix) {
52  int count = 0;
53  for (auto &t : tracks) {
54  if (t.hasSillyValues(Const::nan_n_silly_print_bad_cands_bkfit, false, prefix)) {
55  ++count;
56  }
57  }
58  return count;
59  }
60 
61  void check_nan_n_silly_candidates(Event &ev) {
62  // MIMI -- nan_n_silly_per_layer_count is in MkBuilder, could be in MkJob.
63  // if (Const::nan_n_silly_check_cands_every_layer)
64  // {
65  // int sc = (int) ev.nan_n_silly_per_layer_count_;
66  // if (sc > 0)
67  // printf("Nan'n'Silly: Number of silly candidates over all layers = %d\n", sc);
68  // }
70  int sc = check_nan_n_silly(ev.candidateTracks_, "Pre-bkfit silly check");
71  if (sc > 0)
72  printf("Nan'n'Silly: Number of silly pre-bkfit candidates = %d\n", sc);
73  }
74  }
75 
76  void check_nan_n_silly_bkfit(Event &ev) {
78  int sc = check_nan_n_silly(ev.fitTracks_, "Post-bkfit silly check");
79  if (sc > 0)
80  printf("Nan'n'Silly: Number of silly post-bkfit candidates = %d\n", sc);
81  }
82  }
83 
84  } // namespace
85 
86  //==============================================================================
87  // runBuildTestPlexDumbCMSSW
88  //==============================================================================
89 
91  const IterationConfig &itconf = Config::ItrInfo[0];
92 
93  MkJob job({Config::TrkInfo, itconf, eoh});
94 
95  builder.begin_event(&job, &ev, __func__);
96 
99  }
100 
101  builder.end_event();
102  }
103 
104  //==============================================================================
105  // runBuildTestPlexBestHit
106  //==============================================================================
107 
108  double runBuildingTestPlexBestHit(Event &ev, const EventOfHits &eoh, MkBuilder &builder) {
109  const IterationConfig &itconf = Config::ItrInfo[0];
110 
111  const bool validation_on = (Config::sim_val || Config::quality_val);
112 
113  if (validation_on) {
114  TrackVec seeds1;
115 
116  unsigned int algorithms[] = {4}; //only initialStep
117 
118  for (auto const &s : ev.seedTracks_) {
119  //keep seeds form the first iteration for processing
120  if (std::find(algorithms, algorithms + 1, s.algoint()) != algorithms + 1)
121  seeds1.push_back(s);
122  }
123  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
124  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
125  }
126 
127  IterationMaskIfc mask_ifc;
128 
129  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
130  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
131 
132  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
133 
134  MkJob job({Config::TrkInfo, itconf, eoh, &mask_ifc});
135 
136  builder.begin_event(&job, &ev, __func__);
137 
138  bool seeds_sorted = false;
139  // CCCC builder.PrepareSeeds();
140 
141  // EventOfCandidates event_of_cands;
142  builder.find_tracks_load_seeds_BH(ev.seedTracks_, seeds_sorted);
143 
144 #ifdef USE_VTUNE_PAUSE
145  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
146  __itt_resume();
147 #endif
148 
149  double time = dtime();
150 
151  builder.findTracksBestHit();
152 
153  time = dtime() - time;
154 
155 #ifdef USE_VTUNE_PAUSE
156  __itt_pause();
157  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
158 #endif
159 
160  // Hack, get the tracks out.
161  ev.candidateTracks_ = builder.ref_tracks();
162 
163  // For best hit, the candidateTracks_ vector is the direct input to the backward fit so only need to do find_duplicates once
165  //Mark tracks as duplicates; if within CMSSW, remove duplicate tracks before backward fit
166  if (Config::removeDuplicates) {
167  StdSeq::find_duplicates(ev.candidateTracks_);
168  }
169  }
170 
171  // now do backwards fit... do we want to time this section?
172  if (Config::backwardFit) {
173  builder.backwardFitBH();
174  ev.fitTracks_ = builder.ref_tracks();
175  }
176 
177  if (Config::quality_val) {
178  StdSeq::Quality qval;
179  qval.quality_val(&ev);
180  } else if (Config::sim_val || Config::cmssw_val) {
182  }
183 
184  builder.end_event();
185 
186  // ev.print_tracks(ev.candidateTracks_, true);
187 
188  return time;
189  }
190 
191  //==============================================================================
192  // runBuildTestPlex Combinatorial: Standard TBB
193  //==============================================================================
194 
195  double runBuildingTestPlexStandard(Event &ev, const EventOfHits &eoh, MkBuilder &builder) {
196  const IterationConfig &itconf = Config::ItrInfo[0];
197 
198  const bool validation_on = (Config::sim_val || Config::quality_val);
199 
200  if (validation_on) {
201  TrackVec seeds1;
202 
203  unsigned int algorithms[] = {4}; //only initialStep
204 
205  for (auto const &s : ev.seedTracks_) {
206  //keep seeds form the first iteration for processing
207  if (std::find(algorithms, algorithms + 1, s.algoint()) != algorithms + 1)
208  seeds1.push_back(s);
209  }
210  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
211  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
212  }
213 
214  IterationMaskIfc mask_ifc;
215 
216  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
217  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
218 
219  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
220 
221  MkJob job({Config::TrkInfo, itconf, eoh, &mask_ifc});
222 
223  builder.begin_event(&job, &ev, __func__);
224 
225  bool seeds_sorted = false;
226  // CCCC builder.PrepareSeeds();
227 
228  builder.find_tracks_load_seeds(ev.seedTracks_, seeds_sorted);
229 
230 #ifdef USE_VTUNE_PAUSE
231  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
232  __itt_resume();
233 #endif
234 
235  double time = dtime();
236 
237  builder.findTracksStandard();
238 
239  time = dtime() - time;
240 
241 #ifdef USE_VTUNE_PAUSE
242  __itt_pause();
243  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
244 #endif
245 
246  check_nan_n_silly_candidates(ev);
247 
248  // first store candidate tracks
249  builder.export_best_comb_cands(ev.candidateTracks_);
250 
251  // now do backwards fit... do we want to time this section?
252  if (Config::backwardFit) {
253  // Using the TrackVec version until we home in on THE backward fit etc.
254  // builder.backwardFit();
255  builder.select_best_comb_cands();
256  builder.backwardFitBH();
257  ev.fitTracks_ = builder.ref_tracks();
258 
259  check_nan_n_silly_bkfit(ev);
260  }
261 
263 
264  if (Config::quality_val) {
265  StdSeq::Quality qval;
266  qval.quality_val(&ev);
267  } else if (Config::sim_val || Config::cmssw_val) {
269  }
270 
271  builder.end_event();
272 
273  // ev.print_tracks(ev.candidateTracks_, true);
274 
275  return time;
276  }
277 
278  //==============================================================================
279  // runBuildTestPlex Combinatorial: CloneEngine TBB
280  //==============================================================================
281 
283  const IterationConfig &itconf = Config::ItrInfo[0];
284 
285  const bool validation_on = (Config::sim_val || Config::quality_val);
286 
287  if (validation_on) {
288  TrackVec seeds1;
289 
290  unsigned int algorithms[] = {4}; //only initialStep
291 
292  for (auto const &s : ev.seedTracks_) {
293  //keep seeds form the first iteration for processing
294  if (std::find(algorithms, algorithms + 1, s.algoint()) != algorithms + 1)
295  seeds1.push_back(s);
296  }
297  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
298  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
299  }
300 
301  IterationMaskIfc mask_ifc;
302 
303  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
304  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
305 
306  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
307 
308  MkJob job({Config::TrkInfo, itconf, eoh, &mask_ifc});
309 
310  builder.begin_event(&job, &ev, __func__);
311 
312  bool seeds_sorted = false;
313  // CCCC builder.PrepareSeeds();
314 
315  builder.find_tracks_load_seeds(ev.seedTracks_, seeds_sorted);
316 
317 #ifdef USE_VTUNE_PAUSE
318  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
319  __itt_resume();
320 #endif
321 
322  double time = dtime();
323 
324  builder.findTracksCloneEngine();
325 
326  time = dtime() - time;
327 
328 #ifdef USE_VTUNE_PAUSE
329  __itt_pause();
330  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
331 #endif
332 
333  check_nan_n_silly_candidates(ev);
334 
335  // first store candidate tracks - needed for BH backward fit and root_validation
336  builder.export_best_comb_cands(ev.candidateTracks_);
337 
338  // now do backwards fit... do we want to time this section?
339  if (Config::backwardFit) {
340  // a) TrackVec version:
341  builder.select_best_comb_cands();
342  builder.backwardFitBH();
343  ev.fitTracks_ = builder.ref_tracks();
344 
345  // b) Version that runs on CombCand / TrackCand
346  // builder.backwardFit();
347  // builder.quality_store_tracks(ev.fitTracks_);
348 
349  check_nan_n_silly_bkfit(ev);
350  }
351 
353 
354  // validation section
355  if (Config::quality_val) {
356  StdSeq::Quality qval;
357  qval.quality_val(&ev);
358  } else if (Config::sim_val || Config::cmssw_val) {
360  }
361 
362  builder.end_event();
363 
364  // ev.print_tracks(ev.candidateTracks_, true);
365 
366  return time;
367  }
368 
369  //==============================================================================
370  // runBtpCe_MultiIter
371  //
372  // Prototype for running multiple iterations, sequentially, using the same builder.
373  // For cmmsw seeds
374  //
375  // There is, in general, a mess in how tracks are processed, marked, or copied out
376  // in various validation scenarios and export flags.
377  //
378  // In particular, MkBuilder::PrepareSeeds does a lot of things to whole / complete
379  // event,seedTracks_ -- probably this would need to be split into common / and
380  // per-iteration part.
381  // - MkBuilder::prep_*** functions also mostly do not belong there (prep_sim is called from
382  // PrepareSeeds() for cmssw seeds).
383  //
384  // At this point we need to think about what should happen to Event before all the iterations and
385  // after all the iterations ... from the Validation perspective.
386  // And if we care about doing too muich work for seeds that will never get processed.
387  //==============================================================================
388 
389  std::vector<double> runBtpCe_MultiIter(Event &ev, const EventOfHits &eoh, MkBuilder &builder, int n) {
390  std::vector<double> timevec;
391  if (n <= 0)
392  return timevec;
393  timevec.resize(n + 1, 0.0);
394 
395  const bool validation_on = (Config::sim_val || Config::quality_val);
396 
397  TrackVec seeds_used;
398  TrackVec seeds1;
399 
400  unsigned int algorithms[] = {4, 22, 23, 5, 24, 7, 8, 9, 10, 6}; //9 iterations
401 
402  if (validation_on) {
403  for (auto const &s : ev.seedTracks_) {
404  //keep seeds form the first n iterations for processing
405  if (std::find(algorithms, algorithms + n, s.algoint()) != algorithms + n)
406  seeds1.push_back(s);
407  }
408  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
409  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
410  }
411 
412  IterationMaskIfc mask_ifc;
413  TrackVec seeds;
414  TrackVec tmp_tvec;
415 
416  for (int it = 0; it <= n - 1; ++it) {
417  const IterationConfig &itconf = Config::ItrInfo[it];
418 
419  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
420  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
421 
422  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
423 
424  MkJob job({Config::TrkInfo, itconf, eoh, &mask_ifc});
425 
426  builder.begin_event(&job, &ev, __func__);
427 
428  { // We could partition seeds once, store beg, end for each iteration in a map or vector.
429  seeds.clear();
430  int nc = 0;
431  for (auto &s : ev.seedTracks_) {
432  if (s.algoint() == itconf.m_track_algorithm) {
433  if (itconf.m_requires_seed_hit_sorting) {
434  s.sortHitsByLayer();
435  }
436  seeds.push_back(s);
437  ++nc;
438  } else if (nc > 0)
439  break;
440  }
441  }
442 
443  bool do_seed_clean = itconf.m_requires_dupclean_tight;
444 
445  if (do_seed_clean)
447 
448  builder.seed_post_cleaning(seeds);
449 
450  // Add protection in case no seeds are found for iteration
451  if (seeds.size() <= 0)
452  continue;
453 
454  builder.find_tracks_load_seeds(seeds, do_seed_clean);
455 
456  double time = dtime();
457 
458  builder.findTracksCloneEngine();
459 
460  timevec[it] = dtime() - time;
461  timevec[n] += timevec[it];
462 
463  // Print min and max size of hots vectors of CombCands.
464  // builder.find_min_max_hots_size();
465 
466  if (validation_on)
467  seeds_used.insert(seeds_used.end(), seeds.begin(), seeds.end()); //cleaned seeds need to be stored somehow
468 
471  if (Algo(itconf.m_track_algorithm) == Algo::pixelPairStep) {
472  builder.filter_comb_cands([&](const TrackCand &t) { return StdSeq::qfilter_n_hits_pixseed(t, 3); });
473  } else if (Algo(itconf.m_track_algorithm) == Algo::pixelLessStep) {
474  builder.filter_comb_cands(
475  [&](const TrackCand &t) { return StdSeq::qfilter_pixelLessFwd(t, eoh.refBeamSpot(), Config::TrkInfo); });
476  } else {
477  builder.filter_comb_cands(
478  [&](const TrackCand &t) { return StdSeq::qfilter_n_hits(t, itconf.m_params.minHitsQF); });
479  }
480  }
481 
482  builder.select_best_comb_cands();
483 
484  {
485  builder.export_tracks(tmp_tvec);
486  StdSeq::find_and_remove_duplicates(tmp_tvec, itconf);
487  ev.candidateTracks_.reserve(ev.candidateTracks_.size() + tmp_tvec.size());
488  for (auto &&t : tmp_tvec)
489  ev.candidateTracks_.emplace_back(std::move(t));
490  tmp_tvec.clear();
491  }
492 
493  // now do backwards fit... do we want to time this section?
494  if (Config::backwardFit) {
495  // a) TrackVec version:
496  // builder.backwardFitBH();
497 
498  // b) Version that runs on CombCand / TrackCand
499  const bool do_backward_search = Config::backwardSearch && itconf.m_backward_search;
500 
501  // We copy seed-hits into Candidates ... now we have to remove them so backward fit stops
502  // before reaching seeding region. Ideally, we wouldn't add them in the first place but
503  // if we want to export full tracks above we need to hold on to them (alternatively, we could
504  // have a pointer to seed track in CombCandidate and copy them from there).
505  if (do_backward_search) {
507  }
508 
509  builder.backwardFit();
510 
511  if (do_backward_search) {
512  builder.beginBkwSearch();
514  builder.endBkwSearch();
515  }
516 
520  builder.filter_comb_cands(
521  [&](const TrackCand &t) { return StdSeq::qfilter_n_layers(t, eoh.refBeamSpot(), Config::TrkInfo); });
522  } else if (Algo(itconf.m_track_algorithm) == Algo::pixelLessStep) {
523  builder.filter_comb_cands([&](const TrackCand &t) {
525  });
526  }
527  }
528 
529  builder.filter_comb_cands([&](const TrackCand &t) { return StdSeq::qfilter_nan_n_silly(t); });
530 
531  builder.select_best_comb_cands(true); // true -> clear m_tracks as they were already filled once above
532 
534  builder.export_tracks(ev.fitTracks_);
535  }
536 
537  builder.end_event();
538  }
539 
540  // MIMI - Fake back event pointer for final processing (that should be done elsewhere)
541  MkJob job({Config::TrkInfo, Config::ItrInfo[0], eoh});
542  builder.begin_event(&job, &ev, __func__);
543 
544  if (validation_on) {
546  //swap for the cleaned seeds
547  ev.seedTracks_.swap(seeds_used);
548  }
549 
550  check_nan_n_silly_candidates(ev);
551 
553  check_nan_n_silly_bkfit(ev);
554 
555  // validation section
556  if (Config::quality_val) {
557  StdSeq::Quality qval;
558  qval.quality_val(&ev);
559  } else if (Config::sim_val || Config::cmssw_val) {
561  }
562 
563  // ev.print_tracks(ev.candidateTracks_, true);
564 
565  // MIMI Unfake.
566  builder.end_event();
567 
568  // In CMSSW runOneIter we now release memory for comb-cands:
569  builder.release_memory();
570 
571  return timevec;
572  }
573 
574 } // end namespace mkfit
void find_and_remove_duplicates(TrackVec &tracks, const IterationConfig &itconf)
Definition: MkStdSeqs.cc:598
float x() const
Definition: Hit.h:162
bool qfilter_n_hits_pixseed(const TRACK &t, int nMinHits)
Definition: MkStdSeqs.h:50
bool qfilter_pixelLessFwd(const TRACK &t, const BeamSpot &bspot, const TrackerInfo &tk_info)
quality filter tuned for pixelLess iteration during forward search
Definition: MkStdSeqs.h:78
IterationParams m_params
void export_tracks(TrackVec &out_vec)
Definition: MkBuilder.cc:386
void findTracksBestHit(SteeringParams::IterationType_e iteration_dir=SteeringParams::IT_FwdSearch)
Definition: MkBuilder.cc:463
const BeamSpot & refBeamSpot() const
void find_duplicates(TrackVec &tracks)
Definition: MkStdSeqs.cc:342
bool qfilter_n_hits(const TRACK &t, int nMinHits)
Definition: MkStdSeqs.h:42
constexpr bool nan_n_silly_check_cands_post_bkfit
Definition: Config.h:63
bool qfilter_n_layers(const TRACK &t, const BeamSpot &bspot, const TrackerInfo &trk_inf)
Definition: MkStdSeqs.h:56
constexpr bool nan_n_silly_print_bad_cands_bkfit
Definition: Config.h:64
int filter_comb_cands(std::function< filter_track_cand_foo > filter)
Definition: MkBuilder.cc:303
double runBuildingTestPlexStandard(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
constexpr bool nan_n_silly_check_cands_pre_bkfit
Definition: Config.h:62
void compactifyHitStorageForBestCand(bool remove_seed_hits, int backward_fit_min_hits)
Definition: MkBuilder.h:91
bool sortTracksByPhi(const Track &track1, const Track &track2)
void root_val(Event *event)
void findTracksCloneEngine(SteeringParams::IterationType_e iteration_dir=SteeringParams::IT_FwdSearch)
Definition: MkBuilder.cc:926
void begin_event(MkJob *job, Event *ev, const char *build_type)
Definition: MkBuilder.cc:196
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
bool sortByHitsChi2(const std::pair< Track, TrackState > &cand1, const std::pair< Track, TrackState > &cand2)
void backwardFitBH()
Definition: MkBuilder.cc:1159
void prep_simtracks(Event *event)
float momEta() const
Definition: Track.h:173
void find_tracks_load_seeds_BH(const TrackVec &in_seeds, const bool seeds_sorted)
Definition: MkBuilder.cc:448
void findTracksStandard(SteeringParams::IterationType_e iteration_dir=SteeringParams::IT_FwdSearch)
Definition: MkBuilder.cc:747
const std::vector< std::vector< Track > > & m_track_candidates
void find_tracks_load_seeds(const TrackVec &in_seeds, const bool seeds_sorted)
Definition: MkBuilder.cc:612
sortTracksByPhiStruct(std::vector< std::vector< Track >> *track_candidates)
void release_memory()
Definition: MkBuilder.cc:224
float eta() const
Definition: Hit.h:169
TrackVec & ref_tracks_nc()
Definition: MkBuilder.h:100
bool qfilter_pixelLessBkwd(const TRACK &t, const BeamSpot &bspot, const TrackerInfo &tk_info)
quality filter tuned for pixelLess iteration during backward search
Definition: MkStdSeqs.h:104
TrackerInfo TrkInfo
void seed_post_cleaning(TrackVec &tv)
Definition: MkBuilder.cc:397
void select_best_comb_cands(bool clear_m_tracks=false, bool remove_missing_hits=false)
Definition: MkBuilder.cc:365
void runBuildingTestPlexDumbCMSSW(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
IterationsInfo ItrInfo
const TrackVec & ref_tracks() const
Definition: MkBuilder.h:99
float y() const
Definition: Hit.h:163
bool sortByZ(const Hit &hit1, const Hit &hit2)
std::vector< Track > TrackVec
double runBuildingTestPlexCloneEngine(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
auto const & tracks
cannot be loose
void beginBkwSearch()
Definition: MkBuilder.h:95
double dtime()
bool qfilter_nan_n_silly(const TRACK &t)
Definition: MkStdSeqs.h:128
std::vector< double > runBtpCe_MultiIter(Event &ev, const EventOfHits &eoh, MkBuilder &builder, int n)
void export_best_comb_cands(TrackVec &out_vec, bool remove_missing_hits=false)
Definition: MkBuilder.cc:371
bool operator()(const std::pair< int, int > &track1, const std::pair< int, int > &track2)
float z() const
Definition: Hit.h:164
void handle_duplicates(Event *event)
void endBkwSearch()
Definition: MkBuilder.h:96
TrackAlgorithm
track algorithm; copy from TrackBase.h to keep in standalone builds
Definition: Track.h:275
void root_val_dumb_cmssw(Event *event)
void quality_val(Event *event)
bool sortTracksByEta(const Track &track1, const Track &track2)
std::vector< std::vector< bool > > m_mask_vector
bool sortByPhi(const Hit &hit1, const Hit &hit2)
float momPhi() const
Definition: Track.h:172
Definition: fakeMenu.h:6
def move(src, dest)
Definition: eostools.py:511
double runBuildingTestPlexBestHit(Event &ev, const EventOfHits &eoh, MkBuilder &builder)
bool sortByEta(const Hit &hit1, const Hit &hit2)
int clean_cms_seedtracks_iter(TrackVec *seed_ptr, const IterationConfig &itrcfg, const BeamSpot &bspot)
Definition: MkStdSeqs.cc:84