292{
293
294
295
296
297
298
299
300
301
302 filteredHits.clear();
303
305
306
307 std::vector< std::pair<FPGATrackSimHit,unsigned> > filteredHits_ID, hits_to_filter;
309 for (const auto &hit : hits) {
310
311 std::pair<FPGATrackSimHit,unsigned> hit_ID;
312 hit_ID.first = hit;
315
316
317 if(!hit.isStrip()) {
318 if( std::any_of(std::begin(filter_pixel_physLayers), std::end(filter_pixel_physLayers),
319 [&](
unsigned i) {
return i == hit.getPhysLayer(); }) )
320 hits_to_filter.push_back(hit_ID);
321 else
322 filteredHits_ID.push_back(hit_ID);
323 }
324
325 else {
326 if( std::any_of(std::begin(filter_strip_physLayers), std::end(filter_strip_physLayers),
327 [&](
unsigned i) {
return i == hit.getPhysLayer(); }) )
328 hits_to_filter.push_back(hit_ID);
329 else
330 filteredHits_ID.push_back(hit_ID);
331 }
332 }
333
334
335 std::vector< std::pair<FPGATrackSimHit,unsigned> > hits_to_filter_inner, hits_to_filter_outer;
336
337
338
339
340 for (const auto &hit : hits_to_filter) {
341 if (hit.first.getPhysLayer() % 2 == 0)
342 hits_to_filter_inner.push_back(hit);
343 else
344 hits_to_filter_outer.push_back(hit);
345 }
346
347
348 std::vector< std::pair<FPGATrackSimHit,unsigned> > passed_inner_hits, passed_outer_hits;
349 for (const auto &innerHit : hits_to_filter_inner) {
350 std::vector<std::pair<FPGATrackSimHit,unsigned>> nearby_outer_hits;
352
353
354 float cut_m, cut_p;
356
357 for (const auto &outerHit : nearby_outer_hits) {
358 bool hitPassed =
check_hit_stub(innerHit.first, outerHit.first, cut_m, cut_p);
359 if(hitPassed) {
360
361 passed_inner_hits.push_back(innerHit);
362 passed_outer_hits.push_back(outerHit);
363 }
364 }
365 }
366
367
368 std::vector< std::pair<FPGATrackSimHit,unsigned> > passed_outer_hits_unique;
369 for (const auto &hit : passed_outer_hits) {
370 auto it = std::find_if(passed_outer_hits_unique.begin(), passed_outer_hits_unique.end(),
371 [&hit](const std::pair<FPGATrackSimHit,unsigned>& h) {return h.second == hit.second;} );
372 if(it == passed_outer_hits_unique.end()) {
373 passed_outer_hits_unique.push_back(hit);
374 }
375 }
376 std::vector< std::pair<FPGATrackSimHit,unsigned> > passed_inner_hits_unique;
377 for (const auto &hit : passed_inner_hits) {
378 auto it = std::find_if(passed_inner_hits_unique.begin(), passed_inner_hits_unique.end(),
379 [&hit](const std::pair<FPGATrackSimHit,unsigned>& h) {return h.second == hit.second;} );
380 if(it == passed_inner_hits_unique.end()) {
381 passed_inner_hits_unique.push_back(hit);
382 }
383 }
384
385
386
387 for (auto &hit : passed_inner_hits_unique) {
388 filteredHits_ID.push_back(hit);
389 }
390 for (const auto &hit : passed_outer_hits_unique) {
391 filteredHits_ID.push_back(hit);
392 }
393 if(true) {
394
395 std::sort(filteredHits_ID.begin(), filteredHits_ID.end(),
396 [](const std::pair<FPGATrackSimHit,unsigned> & hit1, const std::pair<FPGATrackSimHit,unsigned> & hit2){
397 return hit1.second < hit2.second;
398 });
399 for (const auto &hit_ID : filteredHits_ID) {
400 filteredHits.push_back(hit_ID.first);
401 }
402 }
403
404 }
405 else {
406
408 }
409
410}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.