333{
334 std::vector<Int_t> Over_p(72000);
335 std::vector<Int_t> Over_n(72000);
336 std::vector<Int_t> Over_copy(72000);
337 Int_t NumU=5;
338 Int_t NumV=5;
339 Float_t b_ref_p = -127.0;
340 Float_t b_ref_n = -127.0;
341 Float_t OvU;
342 Float_t OvV;
343 Float_t b_pos;
344 Float_t b_neg;
349 Float_t b_pos_silent;
350 Float_t b_neg_silent;
351 Float_t b_pos_active;
352 Float_t b_neg_active;
353
354
355 memset(&FSel_n, 0, sizeof(Int_t));
356 memset(&FSel_p, 0, sizeof(Int_t));
357 memset(&FGaps_n, false, sizeof(Bool_t));
358 memset(&FGaps_p, false, sizeof(Bool_t));
359 memset(&Gap_Fib_n, 0, sizeof(Int_t));
360 memset(&Gap_Fib_p, 0, sizeof(Int_t));
361 std::fill_n(&Gap_Fib_n[0][0], sizeof(Gap_Fib_n)/sizeof(Int_t), 9999);
362 std::fill_n(&Gap_Fib_p[0][0], sizeof(Gap_Fib_p)/sizeof(Int_t), 9999);
363
364 b_n.clear();
365 b_p.clear();
366 Ov_n.clear();
367 Ov_p.clear();
368 Num_n.clear();
369 Num_p.clear();
370
371 b_ref_n=-127.0;
372 b_ref_p=-127.0;
373
374
375
376
378
379
380 Find_Proj(Over_p, b_ref_n, b_pos, OvU, NumU);
381
382
384 {
385
386
387
389 Find_Proj(Over_n, b_ref_p, b_neg, OvV, NumV);
390
392 {
393
394
395
397 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
398
399
401 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
402
403
404
405
407 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
408
409
411 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
412
413
414 b_p.push_back(b_pos);
415 Ov_p.push_back(OvU);
416 Num_p.push_back(NumU);
417
418 b_n.push_back(b_neg);
419 Ov_n.push_back(OvV);
420 Num_n.push_back(NumV);
421
422 GapsID.push_back(0);
423
424
425
428
429
430
431
432 Over_copy = Over_p;
433 Gaps[0][0] =
Silent_Gap(Over_copy, b_neg, b_pos, FSel_p, FGaps_p, Gap_Fib_p, OvU, (Int_t)0);
434 Find_Proj(Over_copy, b_neg, b_pos_silent, OvU, NumU);
435
436 Over_copy = Over_n;
437 Gaps[1][0] =
Silent_Gap(Over_copy, b_pos, b_neg, FSel_n, FGaps_n, Gap_Fib_n, OvV, 1);
438 Find_Proj(Over_copy, b_pos, b_neg_silent, OvV, NumV);
439
440 if (Gaps[0][0]>0 || Gaps[1][0]>0)
441 {
442 b_p.push_back(b_pos_silent);
443 Ov_p.push_back(OvU);
444 Num_p.push_back(NumU);
445
446 b_n.push_back(b_neg_silent);
447 Ov_n.push_back(OvV);
448 Num_n.push_back(NumV);
449
450 GapsID.push_back(1);
451 }
452
453
454 Over_copy = Over_p;
455 Gaps[0][1] =
Active_Gap(0,Over_copy, b_neg, b_pos, FSel_p, OvU, 0);
456 Find_Proj(Over_copy, b_neg, b_pos_active, OvU, NumU);
457
458 Over_copy = Over_n;
459 Gaps[1][1] =
Active_Gap(1,Over_copy, b_pos, b_neg, FSel_n, OvV, 1);
460 Find_Proj(Over_copy, b_pos, b_neg_active, OvV, NumV);
461
462 if (Gaps[0][1]>0 || Gaps[1][1]>0)
463 {
464 b_p.push_back(b_pos_active);
465 Ov_p.push_back(OvU);
466 Num_p.push_back(NumU);
467
468 b_n.push_back(b_neg_active);
469 Ov_n.push_back(OvV);
470 Num_n.push_back(NumV);
471
472 GapsID.push_back(2);
473 }
474
475
476 if ((Gaps[0][0]>0 || Gaps[1][0]>0) && (Gaps[0][1]>0 || Gaps[1][1]>0))
477 {
478 Over_copy = std::move(Over_p);
479 Silent_Gap(Over_copy, b_neg, b_pos, FSel_p, FG_p, G_F_p, OvU, 0);
480 Active_Gap(0,Over_copy, b_neg, b_pos, FSel_p, OvU, 0);
481 Find_Proj(Over_copy, b_neg, b_pos_active, OvU, NumU);
482
483 Over_copy = std::move(Over_n);
484 Silent_Gap(Over_copy, b_pos, b_neg, FSel_n, FG_n, G_F_n, OvV, 1);
485 Active_Gap(1,Over_copy, b_pos, b_neg, FSel_n, OvV, 1);
486 Find_Proj(Over_copy, b_pos, b_neg_active, OvV, NumV);
487
488 b_p.push_back(b_pos_active);
489 Ov_p.push_back(OvU);
490 Num_p.push_back(NumU);
491
492 b_n.push_back(b_neg_active);
493 Ov_n.push_back(OvV);
494 Num_n.push_back(NumV);
495
496 GapsID.push_back(3);
497 }
498 }
499 }
500}
void Find_Proj(const std::span< const Int_t > &iOver, Float_t fbRef, Float_t &fb, Float_t &fOv, Int_t &fNum) const
void Finding_Fib(Int_t iFiberSide, Float_t fbRef, Float_t fbRec, Int_t(&iFSel)[ALFAPLATESCNT], Int_t iSideFlag)
Int_t Active_Gap(Int_t iFiberSide, std::span< Int_t > Over, Float_t b_ref, Float_t b_rec, const Int_t FSel[ALFAPLATESCNT], Float_t OverLap, Int_t iSideFlag)
Int_t Silent_Gap(std::span< Int_t > Over, Float_t b_ref, Float_t b_rec, const Int_t FSel[ALFAPLATESCNT], Bool_t(&FGap)[ALFAPLATESCNT], Int_t(&Gap_Fib)[ALFAPLATESCNT][2], Float_t OverLap, Int_t iSideFlag)
void Proj_Store(Int_t iFiberSide, std::span< Int_t > iOver, Float_t fbRef, Int_t iSideFlag)