371{
373
376 std::vector<Int_t> Over_p(72000);
377 std::vector<Int_t> Over_n(72000);
378 Int_t cnt_step_U=0;
379 Int_t cnt_step_V=0;
380 Int_t NumU=0;
381 Int_t NumV=0;
382 Float_t b_ref_p;
383 Float_t b_ref_n;
384 Float_t OvU;
385 Float_t OvV;
386 Float_t b_pos;
387 Float_t b_neg;
388
389 std::list<int>::iterator intIter;
390
391
392
394 {
397 }
398 b_n.clear();
399 b_p.clear();
400 Ov_n.clear();
401 Ov_p.clear();
402 Num_n.clear();
403 Num_p.clear();
404
405 int iNumUFiberHits = 0;
406 int iNumVFiberHits = 0;
407
410
412 {
413 Fiber_MB_n[iLayer].clear();
414 const unsigned int thisLayer=2*iLayer+1;
415 const std::list<int> & thisFiberContainer = mapLayers[thisLayer].ListFibers;
416 for (const auto & thisFiber:thisFiberContainer)
417 {
418
419 Fiber_MB_n[iLayer].push_back(thisFiber);
420 }
421 }
422 do
423 {
424 b_ref_n=-127.0;
425 b_ref_p=-127.0;
426
427
428
429
431
432
433 Find_Proj(Over_p, b_ref_n, b_pos, OvU, NumU);
434
435 Finding_Fib(mapLayers, 0, b_ref_n, b_pos, FSel_pos_tmp, 0);
437 {
438 Fiber_MB_tmp[
i].clear();
439 Fiber_MB_tmp[
i].push_back(FSel_pos_tmp[i]);
440 }
441
442
444 {
445 FIBERS& fibers = mapLayers[2*iLayer+1];
447 for (
unsigned int i=0;
i<Fiber_MB_n[iLayer].size();
i++)
448 {
449 fibers.
ListFibers.push_back(Fiber_MB_n[iLayer][i]);
450 }
451 }
452
453
455 {
456 cnt_step_V=0;
457 do
458 {
459
460 iNumUFiberHits=0;
461 iNumVFiberHits=0;
463 {
464 Int_t sz0 = mapLayers[2*iLayer].ListFibers.size();
466 Int_t sz1 = mapLayers[2*iLayer].ListFibers.size();
468 }
469
471 {
472
473
474
476 Find_Proj(Over_n, b_ref_p, b_neg, OvV, NumV);
477
479 {
480
481
482
484 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
485
486
488 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
489
490
491
492
494 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
495
496
498 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
499
500
501 b_p.push_back(b_pos);
502 Ov_p.push_back(OvU);
503 Num_p.push_back(NumU);
504
505 b_n.push_back(b_neg);
506 Ov_n.push_back(OvV);
507 Num_n.push_back(NumV);
508
509 iTrackMatch[0].push_back(cnt_step_U);
510 iTrackMatch[1].push_back(cnt_step_V);
511
512
513
514 Finding_Fib(mapLayers, 1,b_pos, b_neg, FSel_neg, 1);
515
517 {
518 FSel_n[iLayer].push_back(FSel_neg[iLayer]);
519
520 FSel_p[iLayer].push_back(FSel_pos_tmp[iLayer]);
521 }
522
523
525 {
526 const unsigned int thisLayer=2*iLayer+1;
527 const std::list<int> & thisFiberContainer = mapLayers[thisLayer].ListFibers;
528 for (const auto & thisFiber:thisFiberContainer)
529 {
530 if (thisFiber == (int)FSel_neg[iLayer])
531 {
532 auto it = std::find(
begin(thisFiberContainer),
end(thisFiberContainer), thisFiber);
533 mapLayers[2*iLayer+1].ListFibers.erase(it);
534 break;
535 }
536 }
537
538
539 }
540 cnt_step_V++;
541 }
542 }
543 else NumV = 0;
544 }
546
547
548
549
550 if (cnt_step_V>0)
551 {
553 {
554 FIBERS& fiber = mapLayers[2*iLayer];
555 std::list<int>::iterator itBeg = fiber.
ListFibers.begin();
556 std::list<int>::iterator itEnd = fiber.
ListFibers.end();
557 for (; itBeg != itEnd; ++itBeg)
558 {
559 if (*itBeg == (int)FSel_pos_tmp[iLayer])
560 {
562 break;
563 }
564 }
565
566
567
568 }
569 }
570 else
571 {
572 if (NumV>0)
573 {
575 {
576 FIBERS& fiber = mapLayers[2*iLayer];
577 std::list<int>::iterator itBeg = fiber.
ListFibers.begin();
578 std::list<int>::iterator itEnd = fiber.
ListFibers.end();
579 for (; itBeg != itEnd; ++itBeg)
580 {
581 if (*itBeg == (int)FSel_pos_tmp[iLayer])
582 {
584 break;
585 }
586 }
587
588
589 }
590 }
591 else break;
592 }
593 cnt_step_U++;
594 }
595 }
597}
void Proj_Store(LayerMap_t &mapLayers, Int_t iFiberSide, std::span< Int_t > iOver, Float_t fbRef, Int_t iSideFlag)
void Finding_Fib(LayerMap_t &mapLayers, Int_t iFiberSide, Float_t fbRef, Float_t fbRec, Int_t(&iFSel)[ALFAPLATESCNT], Int_t iSideFlag)
void Find_Proj(const std::span< const Int_t > &iOver, Float_t fbRef, Float_t &fb, Float_t &fOv, Int_t &fNum)
std::list< int > ListFibers