463 Int_t numberIterationsX,
464 Int_t numberIterationsY,
465 Int_t numberIterationsZ,
469 Int_t i, j,
x,
y, z, sampling, q1, q2, q3;
470 Double_t a,
b,
c,
d, p1, p2, p3, p4, p5, p6, p7, p8,
s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, r1, r2, r3, r4, r5, r6;
471 if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
472 return "Wrong parameters";
473 if (numberIterationsX < 1 || numberIterationsY < 1 || numberIterationsZ < 1)
474 return "Width of Clipping Window Must Be Positive";
475 if (ssizex < 2 * numberIterationsX + 1 || ssizey < 2 * numberIterationsY + 1 || ssizey < 2 * numberIterationsZ + 1)
476 return (
"Too Large Clipping Window");
478 for(i=0;i<ssizex;i++){
479 working_space[i] =
new Double_t*[ssizey];
480 for(j=0;j<ssizey;j++)
481 working_space[i][j]=
new Double_t[ssizez];
487 for (i = 1; i <= sampling; i++) {
489 for (z = q3; z < ssizez - q3; z++) {
490 for (
y = q2;
y < ssizey - q2;
y++) {
491 for (
x = q1;
x < ssizex - q1;
x++) {
492 a = spectrum[
x][
y][z];
493 p1 = spectrum[
x + q1][
y + q2][z - q3];
494 p2 = spectrum[
x - q1][
y + q2][z - q3];
495 p3 = spectrum[
x + q1][
y - q2][z - q3];
496 p4 = spectrum[
x - q1][
y - q2][z - q3];
497 p5 = spectrum[
x + q1][
y + q2][z + q3];
498 p6 = spectrum[
x - q1][
y + q2][z + q3];
499 p7 = spectrum[
x + q1][
y - q2][z + q3];
500 p8 = spectrum[
x - q1][
y - q2][z + q3];
501 s1 = spectrum[
x + q1][
y ][z - q3];
502 s2 = spectrum[
x ][
y + q2][z - q3];
503 s3 = spectrum[
x - q1][
y ][z - q3];
504 s4 = spectrum[
x ][
y - q2][z - q3];
505 s5 = spectrum[
x + q1][
y ][z + q3];
506 s6 = spectrum[
x ][
y + q2][z + q3];
507 s7 = spectrum[
x - q1][
y ][z + q3];
508 s8 = spectrum[
x ][
y - q2][z + q3];
509 s9 = spectrum[
x - q1][
y + q2][z ];
510 s10 = spectrum[
x - q1][
y - q2][z ];
511 s11 = spectrum[
x + q1][
y + q2][z ];
512 s12 = spectrum[
x + q1][
y - q2][z ];
513 r1 = spectrum[
x ][
y ][z - q3];
514 r2 = spectrum[
x ][
y ][z + q3];
515 r3 = spectrum[
x - q1][
y ][z ];
516 r4 = spectrum[
x + q1][
y ][z ];
517 r5 = spectrum[
x ][
y + q2][z ];
518 r6 = spectrum[
x ][
y - q2][z ];
555 s1 =
s1 - (p1 + p3) / 2.0;
556 s2 = s2 - (p1 + p2) / 2.0;
557 s3 = s3 - (p2 + p4) / 2.0;
558 s4 = s4 - (p3 + p4) / 2.0;
559 s5 = s5 - (p5 + p7) / 2.0;
560 s6 = s6 - (p5 + p6) / 2.0;
561 s7 = s7 - (p6 + p8) / 2.0;
562 s8 = s8 - (p7 + p8) / 2.0;
563 s9 = s9 - (p2 + p6) / 2.0;
564 s10 = s10 - (p4 + p8) / 2.0;
565 s11 = s11 - (p1 + p5) / 2.0;
566 s12 = s12 - (p3 + p7) / 2.0;
567 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
570 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
573 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
576 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
579 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
582 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
585 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
586 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
587 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
588 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
589 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
590 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
591 b = (r1 + r2) / 2.0 + (r3 + r4) / 2.0 + (r5 + r6) / 2.0 + (
s1 + s3 + s5 + s7) / 4.0 + (s2 + s4 + s6 + s8) / 4.0 + (s9 + s10 + s11 + s12) / 4.0 + (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8.0;
594 working_space[
x][
y][z] =
a;
598 for (z = q3; z < ssizez - q3; z++) {
599 for (
y = q2;
y < ssizey - q2;
y++) {
600 for (
x = q1;
x < ssizex - q1;
x++) {
601 spectrum[
x][
y][z] = working_space[
x][
y][z];
609 for (i = 1; i <= sampling; i++) {
611 for (z = q3; z < ssizez - q3; z++) {
612 for (
y = q2;
y < ssizey - q2;
y++) {
613 for (
x = q1;
x < ssizex - q1;
x++) {
614 a = spectrum[
x][
y][z];
615 p1 = spectrum[
x + q1][
y + q2][z - q3];
616 p2 = spectrum[
x - q1][
y + q2][z - q3];
617 p3 = spectrum[
x + q1][
y - q2][z - q3];
618 p4 = spectrum[
x - q1][
y - q2][z - q3];
619 p5 = spectrum[
x + q1][
y + q2][z + q3];
620 p6 = spectrum[
x - q1][
y + q2][z + q3];
621 p7 = spectrum[
x + q1][
y - q2][z + q3];
622 p8 = spectrum[
x - q1][
y - q2][z + q3];
623 s1 = spectrum[
x + q1][
y ][z - q3];
624 s2 = spectrum[
x ][
y + q2][z - q3];
625 s3 = spectrum[
x - q1][
y ][z - q3];
626 s4 = spectrum[
x ][
y - q2][z - q3];
627 s5 = spectrum[
x + q1][
y ][z + q3];
628 s6 = spectrum[
x ][
y + q2][z + q3];
629 s7 = spectrum[
x - q1][
y ][z + q3];
630 s8 = spectrum[
x ][
y - q2][z + q3];
631 s9 = spectrum[
x - q1][
y + q2][z ];
632 s10 = spectrum[
x - q1][
y - q2][z ];
633 s11 = spectrum[
x + q1][
y + q2][z ];
634 s12 = spectrum[
x + q1][
y - q2][z ];
635 r1 = spectrum[
x ][
y ][z - q3];
636 r2 = spectrum[
x ][
y ][z + q3];
637 r3 = spectrum[
x - q1][
y ][z ];
638 r4 = spectrum[
x + q1][
y ][z ];
639 r5 = spectrum[
x ][
y + q2][z ];
640 r6 = spectrum[
x ][
y - q2][z ];
641 b=(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8 - (
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4 + (r1 + r2 + r3 + r4 + r5 + r6) / 2;
642 c = -(
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4 + (r1 + r2 + r3 + r4 + r5 + r6) / 2;
643 d = -(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8 + (
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 12;
646 working_space[
x][
y][z] =
a;
650 for (z = q3; z < ssizez - q3; z++) {
651 for (
y = q2;
y < ssizey - q2;
y++) {
652 for (
x = q1;
x < ssizex - q1;
x++) {
653 spectrum[
x][
y][z] = working_space[
x][
y][z];
663 for (i = sampling; i >= 1; i--) {
665 for (z = q3; z < ssizez - q3; z++) {
666 for (
y = q2;
y < ssizey - q2;
y++) {
667 for (
x = q1;
x < ssizex - q1;
x++) {
668 a = spectrum[
x][
y][z];
669 p1 = spectrum[
x + q1][
y + q2][z - q3];
670 p2 = spectrum[
x - q1][
y + q2][z - q3];
671 p3 = spectrum[
x + q1][
y - q2][z - q3];
672 p4 = spectrum[
x - q1][
y - q2][z - q3];
673 p5 = spectrum[
x + q1][
y + q2][z + q3];
674 p6 = spectrum[
x - q1][
y + q2][z + q3];
675 p7 = spectrum[
x + q1][
y - q2][z + q3];
676 p8 = spectrum[
x - q1][
y - q2][z + q3];
677 s1 = spectrum[
x + q1][
y ][z - q3];
678 s2 = spectrum[
x ][
y + q2][z - q3];
679 s3 = spectrum[
x - q1][
y ][z - q3];
680 s4 = spectrum[
x ][
y - q2][z - q3];
681 s5 = spectrum[
x + q1][
y ][z + q3];
682 s6 = spectrum[
x ][
y + q2][z + q3];
683 s7 = spectrum[
x - q1][
y ][z + q3];
684 s8 = spectrum[
x ][
y - q2][z + q3];
685 s9 = spectrum[
x - q1][
y + q2][z ];
686 s10 = spectrum[
x - q1][
y - q2][z ];
687 s11 = spectrum[
x + q1][
y + q2][z ];
688 s12 = spectrum[
x + q1][
y - q2][z ];
689 r1 = spectrum[
x ][
y ][z - q3];
690 r2 = spectrum[
x ][
y ][z + q3];
691 r3 = spectrum[
x - q1][
y ][z ];
692 r4 = spectrum[
x + q1][
y ][z ];
693 r5 = spectrum[
x ][
y + q2][z ];
694 r6 = spectrum[
x ][
y - q2][z ];
731 s1 =
s1 - (p1 + p3) / 2.0;
732 s2 = s2 - (p1 + p2) / 2.0;
733 s3 = s3 - (p2 + p4) / 2.0;
734 s4 = s4 - (p3 + p4) / 2.0;
735 s5 = s5 - (p5 + p7) / 2.0;
736 s6 = s6 - (p5 + p6) / 2.0;
737 s7 = s7 - (p6 + p8) / 2.0;
738 s8 = s8 - (p7 + p8) / 2.0;
739 s9 = s9 - (p2 + p6) / 2.0;
740 s10 = s10 - (p4 + p8) / 2.0;
741 s11 = s11 - (p1 + p5) / 2.0;
742 s12 = s12 - (p3 + p7) / 2.0;
743 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
746 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
749 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
752 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
755 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
758 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
761 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
762 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
763 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
764 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
765 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
766 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
767 b = (r1 + r2) / 2.0 + (r3 + r4) / 2.0 + (r5 + r6) / 2.0 + (
s1 + s3 + s5 + s7) / 4.0 + (s2 + s4 + s6 + s8) / 4.0 + (s9 + s10 + s11 + s12) / 4.0 + (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8.0;
770 working_space[
x][
y][z] =
a;
774 for (z = q3; z < ssizez - q3; z++) {
775 for (
y = q2;
y < ssizey - q2;
y++) {
776 for (
x = q1;
x < ssizex - q1;
x++) {
777 spectrum[
x][
y][z] = working_space[
x][
y][z];
785 for (i = sampling; i >= 1; i--) {
787 for (z = q3; z < ssizez - q3; z++) {
788 for (
y = q2;
y < ssizey - q2;
y++) {
789 for (
x = q1;
x < ssizex - q1;
x++) {
790 a = spectrum[
x][
y][z];
791 p1 = spectrum[
x + q1][
y + q2][z - q3];
792 p2 = spectrum[
x - q1][
y + q2][z - q3];
793 p3 = spectrum[
x + q1][
y - q2][z - q3];
794 p4 = spectrum[
x - q1][
y - q2][z - q3];
795 p5 = spectrum[
x + q1][
y + q2][z + q3];
796 p6 = spectrum[
x - q1][
y + q2][z + q3];
797 p7 = spectrum[
x + q1][
y - q2][z + q3];
798 p8 = spectrum[
x - q1][
y - q2][z + q3];
799 s1 = spectrum[
x + q1][
y ][z - q3];
800 s2 = spectrum[
x ][
y + q2][z - q3];
801 s3 = spectrum[
x - q1][
y ][z - q3];
802 s4 = spectrum[
x ][
y - q2][z - q3];
803 s5 = spectrum[
x + q1][
y ][z + q3];
804 s6 = spectrum[
x ][
y + q2][z + q3];
805 s7 = spectrum[
x - q1][
y ][z + q3];
806 s8 = spectrum[
x ][
y - q2][z + q3];
807 s9 = spectrum[
x - q1][
y + q2][z ];
808 s10 = spectrum[
x - q1][
y - q2][z ];
809 s11 = spectrum[
x + q1][
y + q2][z ];
810 s12 = spectrum[
x + q1][
y - q2][z ];
811 r1 = spectrum[
x ][
y ][z - q3];
812 r2 = spectrum[
x ][
y ][z + q3];
813 r3 = spectrum[
x - q1][
y ][z ];
814 r4 = spectrum[
x + q1][
y ][z ];
815 r5 = spectrum[
x ][
y + q2][z ];
816 r6 = spectrum[
x ][
y - q2][z ];
817 b = (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8 - (
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4 + (r1 + r2 + r3 + r4 + r5 + r6) / 2;
818 c = -(
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4+(r1 + r2 + r3 + r4 + r5 + r6) / 2;
819 d = -(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8)/8 + (
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 12;
822 working_space[
x][
y][z] =
a;
826 for (z = q3; z < ssizez - q3; z++) {
827 for (
y = q2;
y < ssizey - q2;
y++) {
828 for (
x = q1;
x < ssizex - q1;
x++) {
829 spectrum[
x][
y][z] = working_space[
x][
y][z];
836 for(i = 0;i < ssizex; i++){
837 for(j = 0;j < ssizey; j++)
838 delete[] working_space[i][j];
839 delete[] working_space[i];
841 delete[] working_space;
1676 Int_t numberIterations,
1677 Int_t numberRepetitions,
1680 Int_t i, j, k, lhx, lhy, lhz, i1, i2, i3, j1, j2, j3, k1, k2, k3, lindex, i1min, i1max, i2min, i2max, i3min, i3max, j1min, j1max, j2min, j2max, j3min, j3max, positx = 0, posity = 0, positz = 0, repet;
1681 Double_t lda, ldb, ldc, area, maximum = 0;
1682 if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
1683 return "Wrong parameters";
1684 if (numberIterations <= 0)
1685 return "Number of iterations must be positive";
1686 if (numberRepetitions <= 0)
1687 return "Number of repetitions must be positive";
1689 for(i=0;i<ssizex;i++){
1690 working_space[i]=
new Double_t* [ssizey];
1691 for(j=0;j<ssizey;j++)
1692 working_space[i][j]=
new Double_t [5*ssizez];
1695 lhx = -1, lhy = -1, lhz = -1;
1696 for (i = 0; i < ssizex; i++) {
1697 for (j = 0; j < ssizey; j++) {
1698 for (k = 0; k < ssizez; k++) {
1699 lda = resp[i][j][k];
1708 working_space[i][j][k] = lda;
1710 if (lda > maximum) {
1712 positx = i, posity = j, positz = k;
1717 if (lhx == -1 || lhy == -1 || lhz == -1) {
1718 for(i = 0;i < ssizex; i++){
1719 for(j = 0;j < ssizey; j++)
1720 delete[] working_space[i][j];
1721 delete[] working_space[i];
1723 delete [] working_space;
1724 return (
"Zero response data");
1728 for (i3 = 0; i3 < ssizez; i3++) {
1729 for (i2 = 0; i2 < ssizey; i2++) {
1730 for (i1 = 0; i1 < ssizex; i1++) {
1732 for (j3 = 0; j3 <= (lhz - 1); j3++) {
1733 for (j2 = 0; j2 <= (lhy - 1); j2++) {
1734 for (j1 = 0; j1 <= (lhx - 1); j1++) {
1735 k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
1736 if (k3 >= 0 && k3 < ssizez && k2 >= 0 && k2 < ssizey && k1 >= 0 && k1 < ssizex) {
1737 lda = working_space[j1][j2][j3];
1738 ldb = source[k1][k2][k3];
1739 ldc = ldc + lda * ldb;
1744 working_space[i1][i2][i3 + ssizez] = ldc;
1750 i1min = -(lhx - 1), i1max = lhx - 1;
1751 i2min = -(lhy - 1), i2max = lhy - 1;
1752 i3min = -(lhz - 1), i3max = lhz - 1;
1753 for (i3 = i3min; i3 <= i3max; i3++) {
1754 for (i2 = i2min; i2 <= i2max; i2++) {
1755 for (i1 = i1min; i1 <= i1max; i1++) {
1760 j3max = lhz - 1 - i3;
1761 if (j3max > lhz - 1)
1763 for (j3 = j3min; j3 <= j3max; j3++) {
1767 j2max = lhy - 1 - i2;
1768 if (j2max > lhy - 1)
1770 for (j2 = j2min; j2 <= j2max; j2++) {
1774 j1max = lhx - 1 - i1;
1775 if (j1max > lhx - 1)
1777 for (j1 = j1min; j1 <= j1max; j1++) {
1778 lda = working_space[j1][j2][j3];
1779 if (i1 + j1 < ssizex && i2 + j2 < ssizey)
1780 ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
1783 ldc = ldc + lda * ldb;
1787 working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * ssizez ] = ldc;
1793 for (i3 = 0; i3 < ssizez; i3++) {
1794 for (i2 = 0; i2 < ssizey; i2++) {
1795 for (i1 = 0; i1 < ssizex; i1++) {
1796 working_space[i1][i2][i3 + 3 * ssizez] = 1;
1797 working_space[i1][i2][i3 + 4 * ssizez] = 0;
1803 for (repet = 0; repet < numberRepetitions; repet++) {
1805 for (i = 0; i < ssizex; i++) {
1806 for (j = 0; j < ssizey; j++) {
1807 for (k = 0; k < ssizez; k++) {
1808 working_space[i][j][k + 3 * ssizez] =
TMath::Power(working_space[i][j][k + 3 * ssizez],boost);
1813 for (lindex = 0; lindex < numberIterations; lindex++) {
1814 for (i3 = 0; i3 < ssizez; i3++) {
1815 for (i2 = 0; i2 < ssizey; i2++) {
1816 for (i1 = 0; i1 < ssizex; i1++) {
1819 if (j3min > lhz - 1)
1822 j3max = ssizez - i3 - 1;
1823 if (j3max > lhz - 1)
1826 if (j2min > lhy - 1)
1829 j2max = ssizey - i2 - 1;
1830 if (j2max > lhy - 1)
1833 if (j1min > lhx - 1)
1836 j1max = ssizex - i1 - 1;
1837 if (j1max > lhx - 1)
1839 for (j3 = j3min; j3 <= j3max; j3++) {
1840 for (j2 = j2min; j2 <= j2max; j2++) {
1841 for (j1 = j1min; j1 <= j1max; j1++) {
1842 ldc = working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * ssizez];
1843 lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * ssizez];
1844 ldb = ldb + lda * ldc;
1848 lda = working_space[i1][i2][i3 + 3 * ssizez];
1849 ldc = working_space[i1][i2][i3 + 1 * ssizez];
1850 if (ldc * lda != 0 && ldb != 0) {
1851 lda = lda * ldc / ldb;
1856 working_space[i1][i2][i3 + 4 * ssizez] = lda;
1860 for (i3 = 0; i3 < ssizez; i3++) {
1861 for (i2 = 0; i2 < ssizey; i2++) {
1862 for (i1 = 0; i1 < ssizex; i1++)
1863 working_space[i1][i2][i3 + 3 * ssizez] = working_space[i1][i2][i3 + 4 * ssizez];
1868 for (i = 0; i < ssizex; i++) {
1869 for (j = 0; j < ssizey; j++){
1870 for (k = 0; k < ssizez; k++)
1871 source[(i + positx) % ssizex][(j + posity) % ssizey][(k + positz) % ssizez] = area * working_space[i][j][k + 3 * ssizez];
1874 for(i = 0;i < ssizex; i++){
1875 for(j = 0;j < ssizey; j++)
1876 delete[] working_space[i][j];
1877 delete[] working_space[i];
1879 delete [] working_space;
2032 Int_t xmin,
xmax,
l,peak_index = 0,sizex_ext=ssizex + 4 * number_of_iterations,sizey_ext = ssizey + 4 * number_of_iterations,sizez_ext = ssizez + 4 * number_of_iterations,shift = 2 * number_of_iterations;
2035 Double_t nom,nip,nim,sp,sm,spx,spy,smx,smy,spz,smz;
2036 Double_t p1,p2,p3,p4,p5,p6,p7,p8,
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,r1,r2,r3,r4,r5,r6;
2039 Int_t lhx,lhy,lhz,i1,i2,i3,j1,j2,j3,k1,k2,k3,i1min,i1max,i2min,i2max,i3min,i3max,j1min,j1max,j2min,j2max,j3min,j3max,positx,posity,positz;
2041 Error(
"SearchHighRes",
"Invalid sigma, must be greater than or equal to 1");
2045 if(threshold<=0||threshold>=100){
2046 Error(
"SearchHighRes",
"Invalid threshold, must be positive and less than 100");
2052 Error(
"SearchHighRes",
"Too large sigma");
2056 if (markov ==
true) {
2057 if (averWindow <= 0) {
2058 Error(
"SearchHighRes",
"Averaging window must be positive");
2063 if(backgroundRemove ==
true){
2064 if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
2065 Error(
"SearchHighRes",
"Too large clipping window");
2073 for(j = 0;j < ssizex + i; j++){
2074 working_space[j] =
new Double_t* [ssizey + i];
2075 for(k = 0;k < ssizey + i; k++)
2076 working_space[j][k] =
new Double_t [5 * (ssizez + i)];
2078 for(k = 0;k < sizez_ext; k++){
2079 for(j = 0;j < sizey_ext; j++){
2080 for(i = 0;i < sizex_ext; i++){
2084 working_space[i][j][k + sizez_ext] = source[0][0][0];
2086 else if(k >= ssizez + shift)
2087 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
2090 working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
2093 else if(j >= ssizey + shift){
2095 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
2097 else if(k >= ssizez + shift)
2098 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
2101 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
2106 working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
2108 else if(k >= ssizez + shift)
2109 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
2112 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
2116 else if(i >= ssizex + shift){
2119 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
2121 else if(k >= ssizez + shift)
2122 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
2125 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
2128 else if(j >= ssizey + shift){
2130 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
2132 else if(k >= ssizez + shift)
2133 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
2136 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
2141 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
2143 else if(k >= ssizez + shift)
2144 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
2147 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
2154 working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
2156 else if(k >= ssizez + shift)
2157 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
2160 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
2163 else if(j >= ssizey + shift){
2165 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
2167 else if(k >= ssizez + shift)
2168 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
2171 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
2176 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
2178 else if(k >= ssizez + shift)
2179 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
2182 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
2188 if(backgroundRemove ==
true){
2189 for(i = 1;i <= number_of_iterations; i++){
2190 for(z = i;z < sizez_ext - i; z++){
2191 for(
y = i;
y < sizey_ext - i;
y++){
2192 for(
x = i;
x < sizex_ext - i;
x++){
2193 a = working_space[
x][
y][z + sizez_ext];
2194 p1 = working_space[
x + i][
y + i][z - i + sizez_ext];
2195 p2 = working_space[
x - i][
y + i][z - i + sizez_ext];
2196 p3 = working_space[
x + i][
y - i][z - i + sizez_ext];
2197 p4 = working_space[
x - i][
y - i][z - i + sizez_ext];
2198 p5 = working_space[
x + i][
y + i][z + i + sizez_ext];
2199 p6 = working_space[
x - i][
y + i][z + i + sizez_ext];
2200 p7 = working_space[
x + i][
y - i][z + i + sizez_ext];
2201 p8 = working_space[
x - i][
y - i][z + i + sizez_ext];
2202 s1 = working_space[
x + i][
y ][z - i + sizez_ext];
2203 s2 = working_space[
x ][
y + i][z - i + sizez_ext];
2204 s3 = working_space[
x - i][
y ][z - i + sizez_ext];
2205 s4 = working_space[
x ][
y - i][z - i + sizez_ext];
2206 s5 = working_space[
x + i][
y ][z + i + sizez_ext];
2207 s6 = working_space[
x ][
y + i][z + i + sizez_ext];
2208 s7 = working_space[
x - i][
y ][z + i + sizez_ext];
2209 s8 = working_space[
x ][
y - i][z + i + sizez_ext];
2210 s9 = working_space[
x - i][
y + i][z + sizez_ext];
2211 s10 = working_space[
x - i][
y - i][z +sizez_ext];
2212 s11 = working_space[
x + i][
y + i][z +sizez_ext];
2213 s12 = working_space[
x + i][
y - i][z +sizez_ext];
2214 r1 = working_space[
x ][
y ][z - i + sizez_ext];
2215 r2 = working_space[
x ][
y ][z + i + sizez_ext];
2216 r3 = working_space[
x - i][
y ][z + sizez_ext];
2217 r4 = working_space[
x + i][
y ][z + sizez_ext];
2218 r5 = working_space[
x ][
y + i][z + sizez_ext];
2219 r6 = working_space[
x ][
y - i][z + sizez_ext];
2220 b = (p1 + p3) / 2.0;
2224 b = (p1 + p2) / 2.0;
2228 b = (p2 + p4) / 2.0;
2232 b = (p3 + p4) / 2.0;
2236 b = (p5 + p7) / 2.0;
2240 b = (p5 + p6) / 2.0;
2244 b = (p6 + p8) / 2.0;
2248 b = (p7 + p8) / 2.0;
2252 b = (p2 + p6) / 2.0;
2256 b = (p4 + p8) / 2.0;
2260 b = (p1 + p5) / 2.0;
2264 b = (p3 + p7) / 2.0;
2268 s1 =
s1 - (p1 + p3) / 2.0;
2269 s2 = s2 - (p1 + p2) / 2.0;
2270 s3 = s3 - (p2 + p4) / 2.0;
2271 s4 = s4 - (p3 + p4) / 2.0;
2272 s5 = s5 - (p5 + p7) / 2.0;
2273 s6 = s6 - (p5 + p6) / 2.0;
2274 s7 = s7 - (p6 + p8) / 2.0;
2275 s8 = s8 - (p7 + p8) / 2.0;
2276 s9 = s9 - (p2 + p6) / 2.0;
2277 s10 = s10 - (p4 + p8) / 2.0;
2278 s11 = s11 - (p1 + p5) / 2.0;
2279 s12 = s12 - (p3 + p7) / 2.0;
2280 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
2284 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
2288 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
2292 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
2296 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
2300 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
2304 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
2305 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
2306 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
2307 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
2308 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
2309 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
2310 b = (r1 + r2) / 2.0 + (r3 + r4) / 2.0 + (r5 + r6) / 2.0 + (
s1 + s3 + s5 + s7) / 4.0 + (s2 + s4 + s6 + s8) / 4.0 + (s9 + s10 + s11 + s12) / 4.0 + (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8.0;
2314 working_space[
x][
y][z] =
a;
2318 for(z = i;z < sizez_ext - i; z++){
2319 for(
y = i;
y < sizey_ext - i;
y++){
2320 for(
x = i;
x < sizex_ext - i;
x++){
2321 working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][z];
2326 for(k = 0;k < sizez_ext; k++){
2327 for(j = 0;j < sizey_ext; j++){
2328 for(i = 0;i < sizex_ext; i++){
2332 working_space[i][j][k + sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
2334 else if(k >= ssizez + shift)
2335 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2338 working_space[i][j][k + sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
2341 else if(j >= ssizey + shift){
2343 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2345 else if(k >= ssizez + shift)
2346 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2349 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2354 working_space[i][j][k + sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
2356 else if(k >= ssizez + shift)
2357 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2360 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2364 else if(i >= ssizex + shift){
2367 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
2369 else if(k >= ssizez + shift)
2370 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2373 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
2376 else if(j >= ssizey + shift){
2378 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2380 else if(k >= ssizez + shift)
2381 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2384 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2389 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
2391 else if(k >= ssizez + shift)
2392 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2395 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2402 working_space[i][j][k + sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
2404 else if(k >= ssizez + shift)
2405 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2408 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
2411 else if(j >= ssizey + shift){
2413 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2415 else if(k >= ssizez + shift)
2416 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2419 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2424 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
2426 else if(k >= ssizez + shift)
2427 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2430 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2439 for(i = 0;i < sizex_ext; i++){
2440 for(j = 0;j < sizey_ext; j++){
2441 for(k = 0;k < sizez_ext; k++){
2442 working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][sizez_ext + k];
2443 plocha_markov = plocha_markov + working_space[i][j][sizez_ext + k];
2448 xmax = sizex_ext - 1;
2450 ymax = sizey_ext - 1;
2452 zmax = sizez_ext - 1;
2453 for(i = 0,maxch = 0;i < sizex_ext; i++){
2454 for(j = 0;j < sizey_ext;j++){
2455 for(k = 0;k < sizez_ext;k++){
2456 working_space[i][j][k] = 0;
2457 if(maxch < working_space[i][j][k + 2 * sizez_ext])
2458 maxch = working_space[i][j][k + 2 * sizez_ext];
2465 for(i = 0;i < ssizex + k; i++){
2466 for(j = 0;j < ssizey + k; j++)
2467 delete[] working_space[i][j];
2468 delete[] working_space[i];
2470 delete [] working_space;
2474 working_space[
xmin][
ymin][zmin] = 1;
2476 nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2477 nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
2479 for(
l = 1;
l <= averWindow;
l++){
2481 a = working_space[
xmax][
ymin][zmin + 2 * sizez_ext] / maxch;
2484 a = working_space[i +
l][
ymin][zmin + 2 * sizez_ext] / maxch;
2496 if(i -
l + 1 <
xmin)
2497 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2500 a = working_space[i -
l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
2514 a = working_space[i + 1][
ymin][zmin] =
a * working_space[i][
ymin][zmin];
2518 nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
2519 nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
2521 for(
l = 1;
l <= averWindow;
l++){
2523 a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
2526 a = working_space[
xmin][i +
l][zmin + 2 * sizez_ext] / maxch;
2538 if(i -
l + 1 <
ymin)
2539 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2542 a = working_space[
xmin][i -
l + 1][zmin + 2 * sizez_ext] / maxch;
2556 a = working_space[
xmin][i + 1][zmin] =
a * working_space[
xmin][i][zmin];
2559 for(i = zmin;i < zmax;i++){
2560 nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
2561 nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
2563 for(
l = 1;
l <= averWindow;
l++){
2565 a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
2568 a = working_space[
xmin][
ymin][i +
l + 2 * sizez_ext] / maxch;
2580 if(i -
l + 1 < zmin)
2581 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2584 a = working_space[
xmin][
ymin][i -
l + 1 + 2 * sizez_ext] / maxch;
2603 nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
2604 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
2606 for(
l = 1;
l <= averWindow;
l++){
2608 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
2611 a = working_space[i +
l][j][zmin + 2 * sizez_ext] / maxch;
2623 if(i -
l + 1 <
xmin)
2624 a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
2627 a = working_space[i -
l + 1][j][zmin + 2 * sizez_ext] / maxch;
2641 nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
2642 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
2643 for(
l = 1;
l <= averWindow;
l++){
2645 a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
2648 a = working_space[i][j +
l][zmin + 2 * sizez_ext] / maxch;
2660 if(j -
l + 1 <
ymin)
2661 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2664 a = working_space[i][j -
l + 1][zmin + 2 * sizez_ext] / maxch;
2677 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
2678 working_space[i + 1][j + 1][zmin] =
a;
2683 for(j = zmin;j < zmax;j++){
2684 nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2685 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2687 for(
l = 1;
l <= averWindow;
l++){
2689 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
2692 a = working_space[i +
l][
ymin][j + 2 * sizez_ext] / maxch;
2704 if(i -
l + 1 <
xmin)
2705 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
2708 a = working_space[i -
l + 1][
ymin][j + 2 * sizez_ext] / maxch;
2722 nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
2723 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2724 for(
l = 1;
l <= averWindow;
l++){
2726 a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
2729 a = working_space[i][
ymin][j +
l + 2 * sizez_ext] / maxch;
2741 if(j -
l + 1 < zmin)
2742 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2745 a = working_space[i][
ymin][j -
l + 1 + 2 * sizez_ext] / maxch;
2758 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
2759 working_space[i + 1][
ymin][j + 1] =
a;
2764 for(j = zmin;j < zmax;j++){
2765 nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
2766 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
2768 for(
l = 1;
l <= averWindow;
l++){
2770 a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
2773 a = working_space[
xmin][i +
l][j + 2 * sizez_ext] / maxch;
2785 if(i -
l + 1 <
ymin)
2786 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
2789 a = working_space[
xmin][i -
l + 1][j + 2 * sizez_ext] / maxch;
2803 nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
2804 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
2805 for(
l = 1;
l <= averWindow;
l++){
2807 a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
2810 a = working_space[
xmin][i][j +
l + 2 * sizez_ext] / maxch;
2822 if(j -
l + 1 < zmin)
2823 a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
2826 a = working_space[
xmin][i][j -
l + 1 + 2 * sizez_ext] / maxch;
2839 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
2840 working_space[
xmin][i + 1][j + 1] =
a;
2846 for(k = zmin;k < zmax; k++){
2847 nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2848 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2850 for(
l = 1;
l <= averWindow;
l++){
2852 a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
2855 a = working_space[i +
l][j][k + 2 * sizez_ext] / maxch;
2867 if(i -
l + 1 <
xmin)
2868 a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
2871 a = working_space[i -
l + 1][j][k + 2 * sizez_ext] / maxch;
2885 nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
2886 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2887 for(
l = 1;
l <= averWindow;
l++){
2889 a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
2892 a = working_space[i][j +
l][k + 2 * sizez_ext] / maxch;
2904 if(j -
l + 1 <
ymin)
2905 a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
2908 a = working_space[i][j -
l + 1][k + 2 * sizez_ext] / maxch;
2922 nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
2923 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2924 for(
l = 1;
l <= averWindow;
l++ ){
2926 a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
2929 a = working_space[i][j][k +
l + 2 * sizez_ext] / maxch;
2941 if(j -
l + 1 <
ymin)
2942 a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
2945 a = working_space[i][j][k -
l + 1 + 2 * sizez_ext] / maxch;
2958 a = (spx * working_space[i][j + 1][k + 1] + spy * working_space[i + 1][j][k + 1] + spz * working_space[i + 1][j + 1][k]) / (smx + smy + smz);
2959 working_space[i + 1][j + 1][k + 1] =
a;
2967 for(k = zmin;k <= zmax; k++){
2968 working_space[i][j][k] = working_space[i][j][k] / nom;
2969 a+=working_space[i][j][k];
2973 for(i = 0;i < sizex_ext; i++){
2974 for(j = 0;j < sizey_ext; j++){
2975 for(k = 0;k < sizez_ext; k++){
2976 working_space[i][j][k + sizez_ext] = working_space[i][j][k] * plocha_markov /
a;
2983 lhx = -1,lhy = -1,lhz = -1;
2984 positx = 0,posity = 0,positz = 0;
2987 for(i = 0;i < sizex_ext; i++){
2988 for(j = 0;j < sizey_ext; j++){
2989 for(k = 0;k < sizez_ext; k++){
2993 lda = (lda * lda + ldb * ldb + ldc * ldc) / (2 *
sigma *
sigma);
2994 l = (
Int_t)(1000 * exp(-lda));
3006 working_space[i][j][k] = lda;
3010 positx = i,posity = j,positz = k;
3016 for(i = 0;i < sizex_ext; i++){
3017 for(j = 0;j < sizey_ext; j++){
3018 for(k = 0;k < sizez_ext; k++){
3019 working_space[i][j][k + 2 * sizez_ext] =
TMath::Abs(working_space[i][j][k + sizez_ext]);
3024 for (i3 = 0; i3 < sizez_ext; i3++) {
3025 for (i2 = 0; i2 < sizey_ext; i2++) {
3026 for (i1 = 0; i1 < sizex_ext; i1++) {
3028 for (j3 = 0; j3 <= (lhz - 1); j3++) {
3029 for (j2 = 0; j2 <= (lhy - 1); j2++) {
3030 for (j1 = 0; j1 <= (lhx - 1); j1++) {
3031 k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
3032 if (k3 >= 0 && k3 < sizez_ext && k2 >= 0 && k2 < sizey_ext && k1 >= 0 && k1 < sizex_ext) {
3033 lda = working_space[j1][j2][j3];
3034 ldb = working_space[k1][k2][k3+2*sizez_ext];
3035 ldc = ldc + lda * ldb;
3040 working_space[i1][i2][i3 + sizez_ext] = ldc;
3045 i1min = -(lhx - 1), i1max = lhx - 1;
3046 i2min = -(lhy - 1), i2max = lhy - 1;
3047 i3min = -(lhz - 1), i3max = lhz - 1;
3048 for (i3 = i3min; i3 <= i3max; i3++) {
3049 for (i2 = i2min; i2 <= i2max; i2++) {
3050 for (i1 = i1min; i1 <= i1max; i1++) {
3056 j3max = lhz - 1 - i3;
3057 if (j3max > lhz - 1)
3060 for (j3 = j3min; j3 <= j3max; j3++) {
3065 j2max = lhy - 1 - i2;
3066 if (j2max > lhy - 1)
3069 for (j2 = j2min; j2 <= j2max; j2++) {
3074 j1max = lhx - 1 - i1;
3075 if (j1max > lhx - 1)
3078 for (j1 = j1min; j1 <= j1max; j1++) {
3079 lda = working_space[j1][j2][j3];
3080 if (i1 + j1 < sizex_ext && i2 + j2 < sizey_ext)
3081 ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
3086 ldc = ldc + lda * ldb;
3090 working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * sizez_ext ] = ldc;
3095 for (i3 = 0; i3 < sizez_ext; i3++) {
3096 for (i2 = 0; i2 < sizey_ext; i2++) {
3097 for (i1 = 0; i1 < sizex_ext; i1++) {
3098 working_space[i1][i2][i3 + 3 * sizez_ext] = 1;
3099 working_space[i1][i2][i3 + 4 * sizez_ext] = 0;
3105 for (lindex=0;lindex<deconIterations;lindex++){
3106 for (i3 = 0; i3 < sizez_ext; i3++) {
3107 for (i2 = 0; i2 < sizey_ext; i2++) {
3108 for (i1 = 0; i1 < sizex_ext; i1++) {
3109 if (
TMath::Abs(working_space[i1][i2][i3 + 3 * sizez_ext])>1
e-6 &&
TMath::Abs(working_space[i1][i2][i3 + 1 * sizez_ext])>1
e-6){
3112 if (j3min > lhz - 1)
3116 j3max = sizez_ext - i3 - 1;
3117 if (j3max > lhz - 1)
3121 if (j2min > lhy - 1)
3125 j2max = sizey_ext - i2 - 1;
3126 if (j2max > lhy - 1)
3130 if (j1min > lhx - 1)
3134 j1max = sizex_ext - i1 - 1;
3135 if (j1max > lhx - 1)
3138 for (j3 = j3min; j3 <= j3max; j3++) {
3139 for (j2 = j2min; j2 <= j2max; j2++) {
3140 for (j1 = j1min; j1 <= j1max; j1++) {
3141 ldc = working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * sizez_ext];
3142 lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * sizez_ext];
3143 ldb = ldb + lda * ldc;
3147 lda = working_space[i1][i2][i3 + 3 * sizez_ext];
3148 ldc = working_space[i1][i2][i3 + 1 * sizez_ext];
3149 if (ldc * lda != 0 && ldb != 0) {
3150 lda = lda * ldc / ldb;
3155 working_space[i1][i2][i3 + 4 * sizez_ext] = lda;
3160 for (i3 = 0; i3 < sizez_ext; i3++) {
3161 for (i2 = 0; i2 < sizey_ext; i2++) {
3162 for (i1 = 0; i1 < sizex_ext; i1++)
3163 working_space[i1][i2][i3 + 3 * sizez_ext] = working_space[i1][i2][i3 + 4 * sizez_ext];
3169 for(i = 0;i < sizex_ext; i++){
3170 for(j = 0;j < sizey_ext; j++){
3171 for(k = 0;k < sizez_ext; k++){
3172 working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext] = area * working_space[i][j][k + 3 * sizez_ext];
3173 if(maximum < working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext])
3174 maximum = working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext];
3179 for(i = 1;i < sizex_ext - 1; i++){
3180 for(j = 1;j < sizey_ext - 1; j++){
3181 for(
l = 1;
l < sizez_ext - 1;
l++){
3182 a = working_space[i][j][
l];
3183 if(
a > working_space[i][j][
l - 1] &&
a > working_space[i - 1][j][
l - 1] &&
a > working_space[i - 1][j - 1][
l - 1] &&
a > working_space[i][j - 1][
l - 1] &&
a > working_space[i + 1][j - 1][
l - 1] &&
a > working_space[i + 1][j][
l - 1] &&
a > working_space[i + 1][j + 1][
l - 1] &&
a > working_space[i][j + 1][
l - 1] &&
a > working_space[i - 1][j + 1][
l - 1] &&
a > working_space[i - 1][j][
l] &&
a > working_space[i - 1][j - 1][
l] &&
a > working_space[i][j - 1][
l] &&
a > working_space[i + 1][j - 1][
l] &&
a > working_space[i + 1][j][
l] &&
a > working_space[i + 1][j + 1][
l] &&
a > working_space[i][j + 1][
l] &&
a > working_space[i - 1][j + 1][
l] &&
a > working_space[i][j][
l + 1] &&
a > working_space[i - 1][j][
l + 1] &&
a > working_space[i - 1][j - 1][
l + 1] &&
a > working_space[i][j - 1][
l + 1] &&
a > working_space[i + 1][j - 1][
l + 1] &&
a > working_space[i + 1][j][
l + 1] &&
a > working_space[i + 1][j + 1][
l + 1] &&
a > working_space[i][j + 1][
l + 1] &&
a > working_space[i - 1][j + 1][
l + 1]){
3184 if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && l >= shift &&
l < ssizez + shift){
3185 if(working_space[i][j][
l] > threshold * maximum / 100.0){
3187 for(k = i - 1,
a = 0,
b = 0;k <= i + 1; k++){
3188 a += (
Double_t)(k - shift) * working_space[k][j][
l];
3189 b += working_space[k][j][
l];
3192 for(k = j - 1,
a = 0,
b = 0;k <= j + 1; k++){
3193 a += (
Double_t)(k - shift) * working_space[i][k][
l];
3194 b += working_space[i][k][
l];
3197 for(k =
l - 1,
a = 0,
b = 0;k <=
l + 1; k++){
3198 a += (
Double_t)(k - shift) * working_space[i][j][k];
3199 b += working_space[i][j][k];
3210 for(i = 0;i < ssizex; i++){
3211 for(j = 0;j < ssizey; j++){
3212 for(k = 0;k < ssizez; k++){
3213 dest[i][j][k] = working_space[i + shift][j + shift][k + shift];
3219 for(i = 0;i < ssizex + k; i++){
3220 for(j = 0;j < ssizey + k; j++)
3221 delete[] working_space[i][j];
3222 delete[] working_space[i];
3224 delete[] working_space;
3254 Int_t i,j,k,
l,li,lj,lk,lmin,lmax,
xmin,
xmax,
ymin,
ymax,zmin,zmax;
3256 Double_t nom,nip,nim,sp,sm,spx,spy,smx,smy,spz,smz;
3257 Double_t norma,val,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12,val13,val14,val15,val16,val17,val18,val19,val20,val21,val22,val23,val24,val25,val26;
3260 Double_t p1,p2,p3,p4,p5,p6,p7,p8,
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,r1,r2,r3,r4,r5,r6;
3263 Int_t sizex_ext=ssizex + 4 * number_of_iterations,sizey_ext = ssizey + 4 * number_of_iterations,sizez_ext = ssizez + 4 * number_of_iterations,shift = 2 * number_of_iterations;
3266 Error(
"SearchFast",
"Invalid sigma, must be greater than or equal to 1");
3270 if(threshold<=0||threshold>=100){
3271 Error(
"SearchFast",
"Invalid threshold, must be positive and less than 100");
3277 Error(
"SearchFast",
"Too large sigma");
3281 if (markov ==
true) {
3282 if (averWindow <= 0) {
3283 Error(
"SearchFast",
"Averaging window must be positive");
3288 if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
3289 Error(
"SearchFast",
"Too large clipping window");
3296 for(j = 0;j < ssizex + i; j++){
3297 working_space[j] =
new Double_t* [ssizey + i];
3298 for(k = 0;k < ssizey + i; k++)
3299 working_space[j][k] =
new Double_t [4 * (ssizez + i)];
3302 for(k = 0;k < sizez_ext; k++){
3303 for(j = 0;j < sizey_ext; j++){
3304 for(i = 0;i < sizex_ext; i++){
3308 working_space[i][j][k + sizez_ext] = source[0][0][0];
3310 else if(k >= ssizez + shift)
3311 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
3314 working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
3317 else if(j >= ssizey + shift){
3319 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
3321 else if(k >= ssizez + shift)
3322 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
3325 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
3330 working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
3332 else if(k >= ssizez + shift)
3333 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
3336 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
3340 else if(i >= ssizex + shift){
3343 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
3345 else if(k >= ssizez + shift)
3346 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
3349 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
3352 else if(j >= ssizey + shift){
3354 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
3356 else if(k >= ssizez + shift)
3357 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
3360 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
3365 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
3367 else if(k >= ssizez + shift)
3368 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
3371 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
3378 working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
3380 else if(k >= ssizez + shift)
3381 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
3384 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
3387 else if(j >= ssizey + shift){
3389 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
3391 else if(k >= ssizez + shift)
3392 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
3395 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
3400 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
3402 else if(k >= ssizez + shift)
3403 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
3406 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
3412 for(i = 1;i <= number_of_iterations; i++){
3413 for(z = i;z < sizez_ext - i; z++){
3414 for(
y = i;
y < sizey_ext - i;
y++){
3415 for(
x = i;
x < sizex_ext - i;
x++){
3416 a = working_space[
x][
y][z + sizez_ext];
3417 p1 = working_space[
x + i][
y + i][z - i + sizez_ext];
3418 p2 = working_space[
x - i][
y + i][z - i + sizez_ext];
3419 p3 = working_space[
x + i][
y - i][z - i + sizez_ext];
3420 p4 = working_space[
x - i][
y - i][z - i + sizez_ext];
3421 p5 = working_space[
x + i][
y + i][z + i + sizez_ext];
3422 p6 = working_space[
x - i][
y + i][z + i + sizez_ext];
3423 p7 = working_space[
x + i][
y - i][z + i + sizez_ext];
3424 p8 = working_space[
x - i][
y - i][z + i + sizez_ext];
3425 s1 = working_space[
x + i][
y ][z - i + sizez_ext];
3426 s2 = working_space[
x ][
y + i][z - i + sizez_ext];
3427 s3 = working_space[
x - i][
y ][z - i + sizez_ext];
3428 s4 = working_space[
x ][
y - i][z - i + sizez_ext];
3429 s5 = working_space[
x + i][
y ][z + i + sizez_ext];
3430 s6 = working_space[
x ][
y + i][z + i + sizez_ext];
3431 s7 = working_space[
x - i][
y ][z + i + sizez_ext];
3432 s8 = working_space[
x ][
y - i][z + i + sizez_ext];
3433 s9 = working_space[
x - i][
y + i][z + sizez_ext];
3434 s10 = working_space[
x - i][
y - i][z +sizez_ext];
3435 s11 = working_space[
x + i][
y + i][z +sizez_ext];
3436 s12 = working_space[
x + i][
y - i][z +sizez_ext];
3437 r1 = working_space[
x ][
y ][z - i + sizez_ext];
3438 r2 = working_space[
x ][
y ][z + i + sizez_ext];
3439 r3 = working_space[
x - i][
y ][z + sizez_ext];
3440 r4 = working_space[
x + i][
y ][z + sizez_ext];
3441 r5 = working_space[
x ][
y + i][z + sizez_ext];
3442 r6 = working_space[
x ][
y - i][z + sizez_ext];
3443 b = (p1 + p3) / 2.0;
3447 b = (p1 + p2) / 2.0;
3451 b = (p2 + p4) / 2.0;
3455 b = (p3 + p4) / 2.0;
3459 b = (p5 + p7) / 2.0;
3463 b = (p5 + p6) / 2.0;
3467 b = (p6 + p8) / 2.0;
3471 b = (p7 + p8) / 2.0;
3475 b = (p2 + p6) / 2.0;
3479 b = (p4 + p8) / 2.0;
3483 b = (p1 + p5) / 2.0;
3487 b = (p3 + p7) / 2.0;
3491 s1 =
s1 - (p1 + p3) / 2.0;
3492 s2 = s2 - (p1 + p2) / 2.0;
3493 s3 = s3 - (p2 + p4) / 2.0;
3494 s4 = s4 - (p3 + p4) / 2.0;
3495 s5 = s5 - (p5 + p7) / 2.0;
3496 s6 = s6 - (p5 + p6) / 2.0;
3497 s7 = s7 - (p6 + p8) / 2.0;
3498 s8 = s8 - (p7 + p8) / 2.0;
3499 s9 = s9 - (p2 + p6) / 2.0;
3500 s10 = s10 - (p4 + p8) / 2.0;
3501 s11 = s11 - (p1 + p5) / 2.0;
3502 s12 = s12 - (p3 + p7) / 2.0;
3503 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
3507 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
3511 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
3515 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
3519 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
3523 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
3527 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
3528 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
3529 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
3530 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
3531 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
3532 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
3533 b = (r1 + r2) / 2.0 + (r3 + r4) / 2.0 + (r5 + r6) / 2.0 + (
s1 + s3 + s5 + s7) / 4.0 + (s2 + s4 + s6 + s8) / 4.0 + (s9 + s10 + s11 + s12) / 4.0 + (p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8.0;
3537 working_space[
x][
y][z] =
a;
3541 for(z = i;z < sizez_ext - i; z++){
3542 for(
y = i;
y < sizey_ext - i;
y++){
3543 for(
x = i;
x < sizex_ext - i;
x++){
3544 working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][z];
3549 for(k = 0;k < sizez_ext; k++){
3550 for(j = 0;j < sizey_ext; j++){
3551 for(i = 0;i < sizex_ext; i++){
3555 working_space[i][j][k + 3 * sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
3557 else if(k >= ssizez + shift)
3558 working_space[i][j][k + 3 * sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3561 working_space[i][j][k + 3 * sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
3564 else if(j >= ssizey + shift){
3566 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3568 else if(k >= ssizez + shift)
3569 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3572 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3577 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
3579 else if(k >= ssizez + shift)
3580 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3583 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3587 else if(i >= ssizex + shift){
3590 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
3592 else if(k >= ssizez + shift)
3593 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3596 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
3599 else if(j >= ssizey + shift){
3601 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3603 else if(k >= ssizez + shift)
3604 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3607 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3612 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
3614 else if(k >= ssizez + shift)
3615 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3618 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3625 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
3627 else if(k >= ssizez + shift)
3628 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3631 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
3634 else if(j >= ssizey + shift){
3636 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3638 else if(k >= ssizez + shift)
3639 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3642 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3647 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
3649 else if(k >= ssizez + shift)
3650 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3653 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3660 for(i = 0;i < sizex_ext; i++){
3661 for(j = 0;j < sizey_ext; j++){
3662 for(k = 0;k < sizez_ext; k++){
3663 if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && k >= shift && k < ssizez + shift){
3664 working_space[i][j][k + 2 * sizez_ext] = source[i - shift][j - shift][k - shift];
3665 plocha_markov = plocha_markov + source[i - shift][j - shift][k - shift];
3668 working_space[i][j][k + 2 * sizez_ext] = 0;
3675 xmax = sizex_ext - 1;
3677 ymax = sizey_ext - 1;
3679 zmax = sizez_ext - 1;
3680 for(i = 0,maxch = 0;i < sizex_ext; i++){
3681 for(j = 0;j < sizey_ext;j++){
3682 for(k = 0;k < sizez_ext;k++){
3683 working_space[i][j][k] = 0;
3684 if(maxch < working_space[i][j][k + 2 * sizez_ext])
3685 maxch = working_space[i][j][k + 2 * sizez_ext];
3692 for(i = 0;i < ssizex + k; i++){
3693 for(j = 0;j < ssizey + k; j++)
3694 delete[] working_space[i][j];
3695 delete[] working_space[i];
3697 delete [] working_space;
3702 working_space[
xmin][
ymin][zmin] = 1;
3704 nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3705 nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
3707 for(
l = 1;
l <= averWindow;
l++){
3709 a = working_space[
xmax][
ymin][zmin + 2 * sizez_ext] / maxch;
3712 a = working_space[i +
l][
ymin][zmin + 2 * sizez_ext] / maxch;
3724 if(i -
l + 1 <
xmin)
3725 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3728 a = working_space[i -
l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
3742 a = working_space[i + 1][
ymin][zmin] =
a * working_space[i][
ymin][zmin];
3746 nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
3747 nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
3749 for(
l = 1;
l <= averWindow;
l++){
3751 a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
3754 a = working_space[
xmin][i +
l][zmin + 2 * sizez_ext] / maxch;
3766 if(i -
l + 1 <
ymin)
3767 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3770 a = working_space[
xmin][i -
l + 1][zmin + 2 * sizez_ext] / maxch;
3784 a = working_space[
xmin][i + 1][zmin] =
a * working_space[
xmin][i][zmin];
3787 for(i = zmin;i < zmax;i++){
3788 nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
3789 nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
3791 for(
l = 1;
l <= averWindow;
l++){
3793 a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
3796 a = working_space[
xmin][
ymin][i +
l + 2 * sizez_ext] / maxch;
3808 if(i -
l + 1 < zmin)
3809 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3812 a = working_space[
xmin][
ymin][i -
l + 1 + 2 * sizez_ext] / maxch;
3831 nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
3832 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
3834 for(
l = 1;
l <= averWindow;
l++){
3836 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
3839 a = working_space[i +
l][j][zmin + 2 * sizez_ext] / maxch;
3851 if(i -
l + 1 <
xmin)
3852 a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
3855 a = working_space[i -
l + 1][j][zmin + 2 * sizez_ext] / maxch;
3869 nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
3870 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
3871 for(
l = 1;
l <= averWindow;
l++){
3873 a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
3876 a = working_space[i][j +
l][zmin + 2 * sizez_ext] / maxch;
3888 if(j -
l + 1 <
ymin)
3889 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3892 a = working_space[i][j -
l + 1][zmin + 2 * sizez_ext] / maxch;
3905 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
3906 working_space[i + 1][j + 1][zmin] =
a;
3911 for(j = zmin;j < zmax;j++){
3912 nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3913 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3915 for(
l = 1;
l <= averWindow;
l++){
3917 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
3920 a = working_space[i +
l][
ymin][j + 2 * sizez_ext] / maxch;
3932 if(i -
l + 1 <
xmin)
3933 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
3936 a = working_space[i -
l + 1][
ymin][j + 2 * sizez_ext] / maxch;
3950 nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
3951 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3952 for(
l = 1;
l <= averWindow;
l++){
3954 a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
3957 a = working_space[i][
ymin][j +
l + 2 * sizez_ext] / maxch;
3969 if(j -
l + 1 < zmin)
3970 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3973 a = working_space[i][
ymin][j -
l + 1 + 2 * sizez_ext] / maxch;
3986 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
3987 working_space[i + 1][
ymin][j + 1] =
a;
3992 for(j = zmin;j < zmax;j++){
3993 nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
3994 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
3996 for(
l = 1;
l <= averWindow;
l++){
3998 a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
4001 a = working_space[
xmin][i +
l][j + 2 * sizez_ext] / maxch;
4013 if(i -
l + 1 <
ymin)
4014 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
4017 a = working_space[
xmin][i -
l + 1][j + 2 * sizez_ext] / maxch;
4031 nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
4032 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
4033 for(
l = 1;
l <= averWindow;
l++){
4035 a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
4038 a = working_space[
xmin][i][j +
l + 2 * sizez_ext] / maxch;
4050 if(j -
l + 1 < zmin)
4051 a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
4054 a = working_space[
xmin][i][j -
l + 1 + 2 * sizez_ext] / maxch;
4067 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
4068 working_space[
xmin][i + 1][j + 1] =
a;
4074 for(k = zmin;k < zmax; k++){
4075 nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4076 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4078 for(
l = 1;
l <= averWindow;
l++){
4080 a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
4083 a = working_space[i +
l][j][k + 2 * sizez_ext] / maxch;
4095 if(i -
l + 1 <
xmin)
4096 a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
4099 a = working_space[i -
l + 1][j][k + 2 * sizez_ext] / maxch;
4113 nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
4114 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4115 for(
l = 1;
l <= averWindow;
l++){
4117 a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
4120 a = working_space[i][j +
l][k + 2 * sizez_ext] / maxch;
4132 if(j -
l + 1 <
ymin)
4133 a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
4136 a = working_space[i][j -
l + 1][k + 2 * sizez_ext] / maxch;
4150 nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
4151 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4152 for(
l = 1;
l <= averWindow;
l++ ){
4154 a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
4157 a = working_space[i][j][k +
l + 2 * sizez_ext] / maxch;
4169 if(j -
l + 1 <
ymin)
4170 a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
4173 a = working_space[i][j][k -
l + 1 + 2 * sizez_ext] / maxch;
4186 a = (spx * working_space[i][j + 1][k + 1] + spy * working_space[i + 1][j][k + 1] + spz * working_space[i + 1][j + 1][k]) / (smx + smy + smz);
4187 working_space[i + 1][j + 1][k + 1] =
a;
4195 for(k = zmin;k <= zmax; k++){
4196 working_space[i][j][k] = working_space[i][j][k] / nom;
4197 a+=working_space[i][j][k];
4201 for(i = 0;i < sizex_ext; i++){
4202 for(j = 0;j < sizey_ext; j++){
4203 for(k = 0;k < sizez_ext; k++){
4204 working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][k] * plocha_markov /
a;
4211 for(k = 0;k < ssizez; k++){
4212 for(j = 0;j < ssizey; j++){
4213 for(i = 0;i < ssizex; i++){
4214 working_space[i][j][k] = 0;
4215 working_space[i][j][sizez_ext + k] = 0;
4216 if(working_space[i][j][k + 3 * sizez_ext] > maximum)
4217 maximum=working_space[i][j][k+3*sizez_ext];
4225 for(i = -j;i <= j; i++){
4243 c[i] =
c[i] / norma;
4245 a = pocet_sigma *
sigma + 0.5;
4248 zmax = sizez_ext - i - 1;
4250 ymax = sizey_ext - i - 1;
4252 xmax = sizex_ext - i - 1;
4257 for(k = zmin;k <= zmax; k++){
4259 for(li = lmin;li <= lmax; li++){
4260 for(lj = lmin;lj <= lmax; lj++){
4261 for(lk = lmin;lk <= lmax; lk++){
4263 b =
c[li] *
c[lj] *
c[lk];
4269 working_space[i][j][k] = s;
4276 for(z = zmin + 1;z < zmax; z++){
4277 val = working_space[
x][
y][z];
4278 val1 = working_space[
x - 1][
y - 1][z - 1];
4279 val2 = working_space[
x ][
y - 1][z - 1];
4280 val3 = working_space[
x + 1][
y - 1][z - 1];
4281 val4 = working_space[
x - 1][
y ][z - 1];
4282 val5 = working_space[
x ][
y ][z - 1];
4283 val6 = working_space[
x + 1][
y ][z - 1];
4284 val7 = working_space[
x - 1][
y + 1][z - 1];
4285 val8 = working_space[
x ][
y + 1][z - 1];
4286 val9 = working_space[
x + 1][
y + 1][z - 1];
4287 val10 = working_space[
x - 1][
y - 1][z ];
4288 val11 = working_space[
x ][
y - 1][z ];
4289 val12 = working_space[
x + 1][
y - 1][z ];
4290 val13 = working_space[
x - 1][
y ][z ];
4291 val14 = working_space[
x + 1][
y ][z ];
4292 val15 = working_space[
x - 1][
y + 1][z ];
4293 val16 = working_space[
x ][
y + 1][z ];
4294 val17 = working_space[
x + 1][
y + 1][z ];
4295 val18 = working_space[
x - 1][
y - 1][z + 1];
4296 val19 = working_space[
x ][
y - 1][z + 1];
4297 val20 = working_space[
x + 1][
y - 1][z + 1];
4298 val21 = working_space[
x - 1][
y ][z + 1];
4299 val22 = working_space[
x ][
y ][z + 1];
4300 val23 = working_space[
x + 1][
y ][z + 1];
4301 val24 = working_space[
x - 1][
y + 1][z + 1];
4302 val25 = working_space[
x ][
y + 1][z + 1];
4303 val26 = working_space[
x + 1][
y + 1][z + 1];
4304 f = -s_f_ratio_peaks * working_space[
x][
y][z + sizez_ext];
4305 if(val <
f && val < val1 && val < val2 && val < val3 && val < val4 && val < val5 && val < val6 && val < val7 && val < val8 && val < val9 && val < val10 && val < val11 && val < val12 && val < val13 && val < val14 && val < val15 && val < val16 && val < val17 && val < val18 && val < val19 && val < val20 && val < val21 && val < val22 && val < val23 && val < val24 && val < val25 && val < val26){
4307 for(li = lmin;li <= lmax; li++){
4308 a = working_space[
x + li -
PEAK_WINDOW / 2][
y][z + 2 * sizez_ext];
4310 f +=
a *
c[li] *
c[li];
4312 f = -s_f_ratio_peaks * sqrt(
f);
4315 for(li = lmin;li <= lmax; li++){
4316 a = working_space[
x][
y + li -
PEAK_WINDOW / 2][z + 2 * sizez_ext];
4318 f +=
a *
c[li] *
c[li];
4320 f = -s_f_ratio_peaks * sqrt(
f);
4323 for(li = lmin;li <= lmax; li++){
4324 a = working_space[
x][
y][z + li -
PEAK_WINDOW / 2 + 2 * sizez_ext];
4326 f +=
a *
c[li] *
c[li];
4328 f = -s_f_ratio_peaks * sqrt(
f);
4331 for(li = lmin;li <= lmax; li++){
4332 for(lj = lmin;lj <= lmax; lj++){
4334 s +=
a *
c[li] *
c[lj];
4335 f +=
a *
c[li] *
c[li] *
c[lj] *
c[lj];
4338 f = s_f_ratio_peaks * sqrt(
f);
4341 for(li = lmin;li <= lmax; li++){
4342 for(lj = lmin;lj <= lmax; lj++){
4344 s +=
a *
c[li] *
c[lj];
4345 f +=
a *
c[li] *
c[li] *
c[lj] *
c[lj];
4348 f = s_f_ratio_peaks * sqrt(
f);
4351 for(li = lmin;li <= lmax; li++){
4352 for(lj=lmin;lj<=lmax;lj++){
4354 s +=
a *
c[li] *
c[lj];
4355 f +=
a *
c[li] *
c[li] *
c[lj] *
c[lj];
4358 f = s_f_ratio_peaks * sqrt(
f);
4361 if(working_space[
x][
y][z + 3 * sizez_ext] > threshold * maximum / 100.0){
4363 for(k =
x - 1,
a = 0,
b = 0;k <=
x + 1; k++){
4364 a += (
Double_t)(k - shift) * working_space[k][
y][z];
4365 b += working_space[k][
y][z];
4368 for(k =
y - 1,
a = 0,
b = 0;k <=
y + 1; k++){
4369 a += (
Double_t)(k - shift) * working_space[
x][k][z];
4370 b += working_space[
x][k][z];
4373 for(k = z - 1,
a = 0,
b = 0;k <= z + 1; k++){
4374 a += (
Double_t)(k - shift) * working_space[
x][
y][k];
4375 b += working_space[
x][
y][k];
4392 for(i = 0;i < ssizex; i++){
4393 for(j = 0;j < ssizey; j++){
4394 for(k = 0;k < ssizez; k++){
4395 val = -working_space[i + shift][j + shift][k + shift];
4398 dest[i][j][k] = val;
4404 for(i = 0;i < ssizex + k; i++){
4405 for(j = 0;j < ssizey + k; j++)
4406 delete[] working_space[i][j];
4407 delete[] working_space[i];
4409 delete[] working_space;