51#define PEAK_WINDOW 1024
118 Error(
"Background",
"function not yet implemented: h=%s, iter=%d, option=%sn"
119 ,
h->GetName(), number_of_iterations, option);
128 printf(
"\nNumber of positions = %d\n",
fNPeaks);
166 if (dimension != 3) {
167 Error(
"Search",
"Must be a 3-d histogram");
174 Int_t i, j, k, binx,biny,binz, npeaks;
177 for (i = 0; i < sizex; i++) {
180 for (j = 0; j < sizey; j++) {
183 for (k = 0; k < sizez; k++)
188 npeaks =
SearchHighRes((
const Double_t***)source,
dest, sizex, sizey, sizez,
sigma, 100*threshold,
kTRUE, 3,
kFALSE, 3);
193 for (i = 0; i < npeaks; i++) {
201 for (i = 0; i < sizex; i++) {
202 for (j = 0; j < sizey; j++){
203 delete [] source[i][j];
204 delete []
dest[i][j];
212 if (strstr(option,
"goff"))
214 if (!npeaks)
return 0;
386 Int_t numberIterationsX,
387 Int_t numberIterationsY,
388 Int_t numberIterationsZ,
392 Int_t i, j,
x,
y, z, sampling, q1, q2, q3;
393 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;
394 if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
395 return "Wrong parameters";
396 if (numberIterationsX < 1 || numberIterationsY < 1 || numberIterationsZ < 1)
397 return "Width of Clipping Window Must Be Positive";
398 if (ssizex < 2 * numberIterationsX + 1 || ssizey < 2 * numberIterationsY + 1 || ssizey < 2 * numberIterationsZ + 1)
399 return (
"Too Large Clipping Window");
401 for(i=0;i<ssizex;i++){
402 working_space[i] =
new Double_t*[ssizey];
403 for(j=0;j<ssizey;j++)
404 working_space[i][j]=
new Double_t[ssizez];
410 for (i = 1; i <= sampling; i++) {
412 for (z = q3; z < ssizez - q3; z++) {
413 for (
y = q2;
y < ssizey - q2;
y++) {
414 for (
x = q1;
x < ssizex - q1;
x++) {
415 a = spectrum[
x][
y][z];
416 p1 = spectrum[
x + q1][
y + q2][z - q3];
417 p2 = spectrum[
x - q1][
y + q2][z - q3];
418 p3 = spectrum[
x + q1][
y - q2][z - q3];
419 p4 = spectrum[
x - q1][
y - q2][z - q3];
420 p5 = spectrum[
x + q1][
y + q2][z + q3];
421 p6 = spectrum[
x - q1][
y + q2][z + q3];
422 p7 = spectrum[
x + q1][
y - q2][z + q3];
423 p8 = spectrum[
x - q1][
y - q2][z + q3];
424 s1 = spectrum[
x + q1][
y ][z - q3];
425 s2 = spectrum[
x ][
y + q2][z - q3];
426 s3 = spectrum[
x - q1][
y ][z - q3];
427 s4 = spectrum[
x ][
y - q2][z - q3];
428 s5 = spectrum[
x + q1][
y ][z + q3];
429 s6 = spectrum[
x ][
y + q2][z + q3];
430 s7 = spectrum[
x - q1][
y ][z + q3];
431 s8 = spectrum[
x ][
y - q2][z + q3];
432 s9 = spectrum[
x - q1][
y + q2][z ];
433 s10 = spectrum[
x - q1][
y - q2][z ];
434 s11 = spectrum[
x + q1][
y + q2][z ];
435 s12 = spectrum[
x + q1][
y - q2][z ];
436 r1 = spectrum[
x ][
y ][z - q3];
437 r2 = spectrum[
x ][
y ][z + q3];
438 r3 = spectrum[
x - q1][
y ][z ];
439 r4 = spectrum[
x + q1][
y ][z ];
440 r5 = spectrum[
x ][
y + q2][z ];
441 r6 = spectrum[
x ][
y - q2][z ];
478 s1 =
s1 - (p1 + p3) / 2.0;
479 s2 = s2 - (p1 + p2) / 2.0;
480 s3 = s3 - (p2 + p4) / 2.0;
481 s4 = s4 - (p3 + p4) / 2.0;
482 s5 = s5 - (p5 + p7) / 2.0;
483 s6 = s6 - (p5 + p6) / 2.0;
484 s7 = s7 - (p6 + p8) / 2.0;
485 s8 = s8 - (p7 + p8) / 2.0;
486 s9 = s9 - (p2 + p6) / 2.0;
487 s10 = s10 - (p4 + p8) / 2.0;
488 s11 = s11 - (p1 + p5) / 2.0;
489 s12 = s12 - (p3 + p7) / 2.0;
490 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
493 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
496 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
499 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
502 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
505 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
508 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
509 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
510 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
511 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
512 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
513 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
514 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;
517 working_space[
x][
y][z] =
a;
521 for (z = q3; z < ssizez - q3; z++) {
522 for (
y = q2;
y < ssizey - q2;
y++) {
523 for (
x = q1;
x < ssizex - q1;
x++) {
524 spectrum[
x][
y][z] = working_space[
x][
y][z];
532 for (i = 1; i <= sampling; i++) {
534 for (z = q3; z < ssizez - q3; z++) {
535 for (
y = q2;
y < ssizey - q2;
y++) {
536 for (
x = q1;
x < ssizex - q1;
x++) {
537 a = spectrum[
x][
y][z];
538 p1 = spectrum[
x + q1][
y + q2][z - q3];
539 p2 = spectrum[
x - q1][
y + q2][z - q3];
540 p3 = spectrum[
x + q1][
y - q2][z - q3];
541 p4 = spectrum[
x - q1][
y - q2][z - q3];
542 p5 = spectrum[
x + q1][
y + q2][z + q3];
543 p6 = spectrum[
x - q1][
y + q2][z + q3];
544 p7 = spectrum[
x + q1][
y - q2][z + q3];
545 p8 = spectrum[
x - q1][
y - q2][z + q3];
546 s1 = spectrum[
x + q1][
y ][z - q3];
547 s2 = spectrum[
x ][
y + q2][z - q3];
548 s3 = spectrum[
x - q1][
y ][z - q3];
549 s4 = spectrum[
x ][
y - q2][z - q3];
550 s5 = spectrum[
x + q1][
y ][z + q3];
551 s6 = spectrum[
x ][
y + q2][z + q3];
552 s7 = spectrum[
x - q1][
y ][z + q3];
553 s8 = spectrum[
x ][
y - q2][z + q3];
554 s9 = spectrum[
x - q1][
y + q2][z ];
555 s10 = spectrum[
x - q1][
y - q2][z ];
556 s11 = spectrum[
x + q1][
y + q2][z ];
557 s12 = spectrum[
x + q1][
y - q2][z ];
558 r1 = spectrum[
x ][
y ][z - q3];
559 r2 = spectrum[
x ][
y ][z + q3];
560 r3 = spectrum[
x - q1][
y ][z ];
561 r4 = spectrum[
x + q1][
y ][z ];
562 r5 = spectrum[
x ][
y + q2][z ];
563 r6 = spectrum[
x ][
y - q2][z ];
564 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;
565 c = -(
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4 + (r1 + r2 + r3 + r4 + r5 + r6) / 2;
566 d = -(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8 + (
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 12;
567 if(b < a && b >= 0 &&
c >=0 &&
d >= 0)
569 working_space[
x][
y][z] =
a;
573 for (z = q3; z < ssizez - q3; z++) {
574 for (
y = q2;
y < ssizey - q2;
y++) {
575 for (
x = q1;
x < ssizex - q1;
x++) {
576 spectrum[
x][
y][z] = working_space[
x][
y][z];
586 for (i = sampling; i >= 1; i--) {
588 for (z = q3; z < ssizez - q3; z++) {
589 for (
y = q2;
y < ssizey - q2;
y++) {
590 for (
x = q1;
x < ssizex - q1;
x++) {
591 a = spectrum[
x][
y][z];
592 p1 = spectrum[
x + q1][
y + q2][z - q3];
593 p2 = spectrum[
x - q1][
y + q2][z - q3];
594 p3 = spectrum[
x + q1][
y - q2][z - q3];
595 p4 = spectrum[
x - q1][
y - q2][z - q3];
596 p5 = spectrum[
x + q1][
y + q2][z + q3];
597 p6 = spectrum[
x - q1][
y + q2][z + q3];
598 p7 = spectrum[
x + q1][
y - q2][z + q3];
599 p8 = spectrum[
x - q1][
y - q2][z + q3];
600 s1 = spectrum[
x + q1][
y ][z - q3];
601 s2 = spectrum[
x ][
y + q2][z - q3];
602 s3 = spectrum[
x - q1][
y ][z - q3];
603 s4 = spectrum[
x ][
y - q2][z - q3];
604 s5 = spectrum[
x + q1][
y ][z + q3];
605 s6 = spectrum[
x ][
y + q2][z + q3];
606 s7 = spectrum[
x - q1][
y ][z + q3];
607 s8 = spectrum[
x ][
y - q2][z + q3];
608 s9 = spectrum[
x - q1][
y + q2][z ];
609 s10 = spectrum[
x - q1][
y - q2][z ];
610 s11 = spectrum[
x + q1][
y + q2][z ];
611 s12 = spectrum[
x + q1][
y - q2][z ];
612 r1 = spectrum[
x ][
y ][z - q3];
613 r2 = spectrum[
x ][
y ][z + q3];
614 r3 = spectrum[
x - q1][
y ][z ];
615 r4 = spectrum[
x + q1][
y ][z ];
616 r5 = spectrum[
x ][
y + q2][z ];
617 r6 = spectrum[
x ][
y - q2][z ];
654 s1 =
s1 - (p1 + p3) / 2.0;
655 s2 = s2 - (p1 + p2) / 2.0;
656 s3 = s3 - (p2 + p4) / 2.0;
657 s4 = s4 - (p3 + p4) / 2.0;
658 s5 = s5 - (p5 + p7) / 2.0;
659 s6 = s6 - (p5 + p6) / 2.0;
660 s7 = s7 - (p6 + p8) / 2.0;
661 s8 = s8 - (p7 + p8) / 2.0;
662 s9 = s9 - (p2 + p6) / 2.0;
663 s10 = s10 - (p4 + p8) / 2.0;
664 s11 = s11 - (p1 + p5) / 2.0;
665 s12 = s12 - (p3 + p7) / 2.0;
666 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
669 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
672 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
675 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
678 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
681 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
684 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
685 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
686 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
687 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
688 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
689 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
690 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;
693 working_space[
x][
y][z] =
a;
697 for (z = q3; z < ssizez - q3; z++) {
698 for (
y = q2;
y < ssizey - q2;
y++) {
699 for (
x = q1;
x < ssizex - q1;
x++) {
700 spectrum[
x][
y][z] = working_space[
x][
y][z];
708 for (i = sampling; i >= 1; i--) {
710 for (z = q3; z < ssizez - q3; z++) {
711 for (
y = q2;
y < ssizey - q2;
y++) {
712 for (
x = q1;
x < ssizex - q1;
x++) {
713 a = spectrum[
x][
y][z];
714 p1 = spectrum[
x + q1][
y + q2][z - q3];
715 p2 = spectrum[
x - q1][
y + q2][z - q3];
716 p3 = spectrum[
x + q1][
y - q2][z - q3];
717 p4 = spectrum[
x - q1][
y - q2][z - q3];
718 p5 = spectrum[
x + q1][
y + q2][z + q3];
719 p6 = spectrum[
x - q1][
y + q2][z + q3];
720 p7 = spectrum[
x + q1][
y - q2][z + q3];
721 p8 = spectrum[
x - q1][
y - q2][z + q3];
722 s1 = spectrum[
x + q1][
y ][z - q3];
723 s2 = spectrum[
x ][
y + q2][z - q3];
724 s3 = spectrum[
x - q1][
y ][z - q3];
725 s4 = spectrum[
x ][
y - q2][z - q3];
726 s5 = spectrum[
x + q1][
y ][z + q3];
727 s6 = spectrum[
x ][
y + q2][z + q3];
728 s7 = spectrum[
x - q1][
y ][z + q3];
729 s8 = spectrum[
x ][
y - q2][z + q3];
730 s9 = spectrum[
x - q1][
y + q2][z ];
731 s10 = spectrum[
x - q1][
y - q2][z ];
732 s11 = spectrum[
x + q1][
y + q2][z ];
733 s12 = spectrum[
x + q1][
y - q2][z ];
734 r1 = spectrum[
x ][
y ][z - q3];
735 r2 = spectrum[
x ][
y ][z + q3];
736 r3 = spectrum[
x - q1][
y ][z ];
737 r4 = spectrum[
x + q1][
y ][z ];
738 r5 = spectrum[
x ][
y + q2][z ];
739 r6 = spectrum[
x ][
y - q2][z ];
740 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;
741 c = -(
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4+(r1 + r2 + r3 + r4 + r5 + r6) / 2;
742 d = -(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8)/8 + (
s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 12;
743 if(b < a && b >= 0 &&
c >=0 &&
d >= 0)
745 working_space[
x][
y][z] =
a;
749 for (z = q3; z < ssizez - q3; z++) {
750 for (
y = q2;
y < ssizey - q2;
y++) {
751 for (
x = q1;
x < ssizex - q1;
x++) {
752 spectrum[
x][
y][z] = working_space[
x][
y][z];
759 for(i = 0;i < ssizex; i++){
760 for(j = 0;j < ssizey; j++)
761 delete[] working_space[i][j];
762 delete[] working_space[i];
764 delete[] working_space;
863 Double_t nom,nip,nim,sp,sm,spx,smx,spy,smy,spz,smz,plocha=0;
865 return "Averaging Window must be positive";
867 for(i = 0;i < ssizex; i++){
868 working_space[i] =
new Double_t*[ssizey];
869 for(j = 0;j < ssizey; j++)
870 working_space[i][j] =
new Double_t[ssizez];
878 for(i = 0,maxch = 0;i < ssizex; i++){
879 for(j = 0;j < ssizey; j++){
880 for(k = 0;k < ssizez; k++){
881 working_space[i][j][k] = 0;
882 if(maxch < source[i][j][k])
883 maxch = source[i][j][k];
884 plocha += source[i][j][k];
889 for(i = 0;i < ssizex; i++){
890 for(j = 0;j < ssizey; j++)
891 delete[] working_space[i][j];
892 delete[] working_space[i];
894 delete [] working_space;
899 working_space[
xmin][
ymin][zmin] = 1;
901 nip = source[i][
ymin][zmin] / maxch;
902 nim = source[i + 1][
ymin][zmin] / maxch;
904 for(
l = 1;
l <= averWindow;
l++){
909 a = source[i +
l][
ymin][zmin] / maxch;
925 a = source[i -
l + 1][
ymin][zmin] / maxch;
939 a = working_space[i + 1][
ymin][zmin] =
a * working_space[i][
ymin][zmin];
943 nip = source[
xmin][i][zmin] / maxch;
944 nim = source[
xmin][i + 1][zmin] / maxch;
946 for(
l = 1;
l <= averWindow;
l++){
951 a = source[
xmin][i +
l][zmin] / maxch;
967 a = source[
xmin][i -
l + 1][zmin] / maxch;
981 a = working_space[
xmin][i + 1][zmin] =
a * working_space[
xmin][i][zmin];
984 for(i = zmin;i < zmax; i++){
985 nip = source[
xmin][
ymin][i] / maxch;
986 nim = source[
xmin][
ymin][i + 1] / maxch;
988 for(
l = 1;
l <= averWindow;
l++){
1005 if(i -
l + 1 < zmin)
1027 nip = source[i][j + 1][zmin] / maxch;
1028 nim = source[i + 1][j + 1][zmin] / maxch;
1030 for(
l = 1;
l <= averWindow;
l++){
1032 a = source[
xmax][j][zmin] / maxch;
1035 a = source[i +
l][j][zmin] / maxch;
1047 if(i -
l + 1 <
xmin)
1048 a = source[
xmin][j][zmin] / maxch;
1051 a = source[i -
l + 1][j][zmin] / maxch;
1065 nip = source[i + 1][j][zmin] / maxch;
1066 nim = source[i + 1][j + 1][zmin] / maxch;
1067 for(
l = 1;
l <= averWindow;
l++){
1069 a = source[i][
ymax][zmin] / maxch;
1072 a = source[i][j +
l][zmin] / maxch;
1084 if(j -
l + 1 <
ymin)
1085 a = source[i][
ymin][zmin] / maxch;
1088 a = source[i][j -
l + 1][zmin] / maxch;
1101 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
1102 working_space[i + 1][j + 1][zmin] =
a;
1107 for(j = zmin;j < zmax; j++){
1108 nip = source[i][
ymin][j + 1] / maxch;
1109 nim = source[i + 1][
ymin][j + 1] / maxch;
1111 for(
l = 1;
l <= averWindow;
l++){
1116 a = source[i +
l][
ymin][j] / maxch;
1128 if(i -
l + 1 <
xmin)
1132 a = source[i -
l + 1][
ymin][j] / maxch;
1146 nip = source[i + 1][
ymin][j] / maxch;
1147 nim = source[i + 1][
ymin][j + 1] / maxch;
1148 for(
l = 1;
l <= averWindow;
l++){
1150 a = source[i][
ymin][zmax] / maxch;
1153 a = source[i][
ymin][j +
l] / maxch;
1165 if(j -
l + 1 < zmin)
1166 a = source[i][
ymin][zmin] / maxch;
1169 a = source[i][
ymin][j -
l + 1] / maxch;
1182 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
1183 working_space[i + 1][
ymin][j + 1] =
a;
1188 for(j = zmin;j < zmax; j++){
1189 nip = source[
xmin][i][j + 1] / maxch;
1190 nim = source[
xmin][i + 1][j + 1] / maxch;
1192 for(
l = 1;
l <= averWindow;
l++){
1197 a = source[
xmin][i +
l][j] / maxch;
1209 if(i -
l + 1 <
ymin)
1213 a = source[
xmin][i -
l + 1][j] / maxch;
1227 nip = source[
xmin][i + 1][j] / maxch;
1228 nim = source[
xmin][i + 1][j + 1] / maxch;
1229 for(
l = 1;
l <= averWindow;
l++){
1231 a = source[
xmin][i][zmax] / maxch;
1234 a = source[
xmin][i][j +
l] / maxch;
1246 if(j -
l + 1 < zmin)
1247 a = source[
xmin][i][zmin] / maxch;
1250 a = source[
xmin][i][j -
l + 1] / maxch;
1263 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
1264 working_space[
xmin][i + 1][j + 1] =
a;
1270 for(k = zmin;k < zmax; k++){
1271 nip = source[i][j + 1][k + 1] / maxch;
1272 nim = source[i + 1][j + 1][k + 1] / maxch;
1274 for(
l = 1;
l <= averWindow;
l++){
1276 a = source[
xmax][j][k] / maxch;
1279 a = source[i +
l][j][k] / maxch;
1291 if(i -
l + 1 <
xmin)
1292 a = source[
xmin][j][k] / maxch;
1295 a = source[i -
l + 1][j][k] / maxch;
1309 nip = source[i + 1][j][k + 1] / maxch;
1310 nim = source[i + 1][j + 1][k + 1] / maxch;
1311 for(
l = 1;
l <= averWindow;
l++){
1313 a = source[i][
ymax][k] / maxch;
1316 a = source[i][j +
l][k] / maxch;
1328 if(j -
l + 1 <
ymin)
1329 a = source[i][
ymin][k] / maxch;
1332 a = source[i][j -
l + 1][k] / maxch;
1346 nip = source[i + 1][j + 1][k] / maxch;
1347 nim = source[i + 1][j + 1][k + 1] / maxch;
1348 for(
l = 1;
l <= averWindow;
l++){
1350 a = source[i][j][zmax] / maxch;
1353 a = source[i][j][k +
l] / maxch;
1365 if(j -
l + 1 <
ymin)
1366 a = source[i][j][zmin] / maxch;
1369 a = source[i][j][k -
l + 1] / maxch;
1382 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);
1383 working_space[i + 1][j + 1][k + 1] =
a;
1390 for(k = zmin;k <= zmax; k++){
1391 working_space[i][j][k] = working_space[i][j][k] / nom;
1395 for(i = 0;i < ssizex; i++){
1396 for(j = 0;j < ssizey; j++){
1397 for(k = 0;k < ssizez; k++){
1398 source[i][j][k] = plocha * working_space[i][j][k];
1402 for(i = 0;i < ssizex; i++){
1403 for(j = 0;j < ssizey; j++)
1404 delete[] working_space[i][j];
1405 delete[] working_space[i];
1407 delete[] working_space;
1599 Int_t numberIterations,
1600 Int_t numberRepetitions,
1603 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;
1604 Double_t lda, ldb, ldc, area, maximum = 0;
1605 if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
1606 return "Wrong parameters";
1607 if (numberIterations <= 0)
1608 return "Number of iterations must be positive";
1609 if (numberRepetitions <= 0)
1610 return "Number of repetitions must be positive";
1612 for(i=0;i<ssizex;i++){
1613 working_space[i]=
new Double_t* [ssizey];
1614 for(j=0;j<ssizey;j++)
1615 working_space[i][j]=
new Double_t [5*ssizez];
1618 lhx = -1, lhy = -1, lhz = -1;
1619 for (i = 0; i < ssizex; i++) {
1620 for (j = 0; j < ssizey; j++) {
1621 for (k = 0; k < ssizez; k++) {
1622 lda = resp[i][j][k];
1631 working_space[i][j][k] = lda;
1633 if (lda > maximum) {
1635 positx = i, posity = j, positz = k;
1640 if (lhx == -1 || lhy == -1 || lhz == -1) {
1641 for(i = 0;i < ssizex; i++){
1642 for(j = 0;j < ssizey; j++)
1643 delete[] working_space[i][j];
1644 delete[] working_space[i];
1646 delete [] working_space;
1647 return (
"Zero response data");
1651 for (i3 = 0; i3 < ssizez; i3++) {
1652 for (i2 = 0; i2 < ssizey; i2++) {
1653 for (i1 = 0; i1 < ssizex; i1++) {
1655 for (j3 = 0; j3 <= (lhz - 1); j3++) {
1656 for (j2 = 0; j2 <= (lhy - 1); j2++) {
1657 for (j1 = 0; j1 <= (lhx - 1); j1++) {
1658 k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
1659 if (k3 >= 0 && k3 < ssizez && k2 >= 0 && k2 < ssizey && k1 >= 0 && k1 < ssizex) {
1660 lda = working_space[j1][j2][j3];
1661 ldb = source[k1][k2][k3];
1662 ldc = ldc + lda * ldb;
1667 working_space[i1][i2][i3 + ssizez] = ldc;
1673 i1min = -(lhx - 1), i1max = lhx - 1;
1674 i2min = -(lhy - 1), i2max = lhy - 1;
1675 i3min = -(lhz - 1), i3max = lhz - 1;
1676 for (i3 = i3min; i3 <= i3max; i3++) {
1677 for (i2 = i2min; i2 <= i2max; i2++) {
1678 for (i1 = i1min; i1 <= i1max; i1++) {
1683 j3max = lhz - 1 - i3;
1684 if (j3max > lhz - 1)
1686 for (j3 = j3min; j3 <= j3max; j3++) {
1690 j2max = lhy - 1 - i2;
1691 if (j2max > lhy - 1)
1693 for (j2 = j2min; j2 <= j2max; j2++) {
1697 j1max = lhx - 1 - i1;
1698 if (j1max > lhx - 1)
1700 for (j1 = j1min; j1 <= j1max; j1++) {
1701 lda = working_space[j1][j2][j3];
1702 if (i1 + j1 < ssizex && i2 + j2 < ssizey)
1703 ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
1706 ldc = ldc + lda * ldb;
1710 working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * ssizez ] = ldc;
1716 for (i3 = 0; i3 < ssizez; i3++) {
1717 for (i2 = 0; i2 < ssizey; i2++) {
1718 for (i1 = 0; i1 < ssizex; i1++) {
1719 working_space[i1][i2][i3 + 3 * ssizez] = 1;
1720 working_space[i1][i2][i3 + 4 * ssizez] = 0;
1726 for (repet = 0; repet < numberRepetitions; repet++) {
1728 for (i = 0; i < ssizex; i++) {
1729 for (j = 0; j < ssizey; j++) {
1730 for (k = 0; k < ssizez; k++) {
1731 working_space[i][j][k + 3 * ssizez] =
TMath::Power(working_space[i][j][k + 3 * ssizez],boost);
1736 for (lindex = 0; lindex < numberIterations; lindex++) {
1737 for (i3 = 0; i3 < ssizez; i3++) {
1738 for (i2 = 0; i2 < ssizey; i2++) {
1739 for (i1 = 0; i1 < ssizex; i1++) {
1742 if (j3min > lhz - 1)
1745 j3max = ssizez - i3 - 1;
1746 if (j3max > lhz - 1)
1749 if (j2min > lhy - 1)
1752 j2max = ssizey - i2 - 1;
1753 if (j2max > lhy - 1)
1756 if (j1min > lhx - 1)
1759 j1max = ssizex - i1 - 1;
1760 if (j1max > lhx - 1)
1762 for (j3 = j3min; j3 <= j3max; j3++) {
1763 for (j2 = j2min; j2 <= j2max; j2++) {
1764 for (j1 = j1min; j1 <= j1max; j1++) {
1765 ldc = working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * ssizez];
1766 lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * ssizez];
1767 ldb = ldb + lda * ldc;
1771 lda = working_space[i1][i2][i3 + 3 * ssizez];
1772 ldc = working_space[i1][i2][i3 + 1 * ssizez];
1773 if (ldc * lda != 0 && ldb != 0) {
1774 lda = lda * ldc / ldb;
1779 working_space[i1][i2][i3 + 4 * ssizez] = lda;
1783 for (i3 = 0; i3 < ssizez; i3++) {
1784 for (i2 = 0; i2 < ssizey; i2++) {
1785 for (i1 = 0; i1 < ssizex; i1++)
1786 working_space[i1][i2][i3 + 3 * ssizez] = working_space[i1][i2][i3 + 4 * ssizez];
1791 for (i = 0; i < ssizex; i++) {
1792 for (j = 0; j < ssizey; j++){
1793 for (k = 0; k < ssizez; k++)
1794 source[(i + positx) % ssizex][(j + posity) % ssizey][(k + positz) % ssizez] = area * working_space[i][j][k + 3 * ssizez];
1797 for(i = 0;i < ssizex; i++){
1798 for(j = 0;j < ssizey; j++)
1799 delete[] working_space[i][j];
1800 delete[] working_space[i];
1802 delete [] working_space;
1955 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;
1957 Double_t a,
b,maxch,plocha = 0,plocha_markov = 0;
1958 Double_t nom,nip,nim,sp,sm,spx,spy,smx,smy,spz,smz;
1959 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;
1962 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;
1964 Error(
"SearchHighRes",
"Invalid sigma, must be greater than or equal to 1");
1968 if(threshold<=0||threshold>=100){
1969 Error(
"SearchHighRes",
"Invalid threshold, must be positive and less than 100");
1975 Error(
"SearchHighRes",
"Too large sigma");
1979 if (markov ==
true) {
1980 if (averWindow <= 0) {
1981 Error(
"SearchHighRes",
"Averaging window must be positive");
1986 if(backgroundRemove ==
true){
1987 if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
1988 Error(
"SearchHighRes",
"Too large clipping window");
1996 for(j = 0;j < ssizex + i; j++){
1997 working_space[j] =
new Double_t* [ssizey + i];
1998 for(k = 0;k < ssizey + i; k++)
1999 working_space[j][k] =
new Double_t [5 * (ssizez + i)];
2001 for(k = 0;k < sizez_ext; k++){
2002 for(j = 0;j < sizey_ext; j++){
2003 for(i = 0;i < sizex_ext; i++){
2007 working_space[i][j][k + sizez_ext] = source[0][0][0];
2009 else if(k >= ssizez + shift)
2010 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
2013 working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
2016 else if(j >= ssizey + shift){
2018 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
2020 else if(k >= ssizez + shift)
2021 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
2024 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
2029 working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
2031 else if(k >= ssizez + shift)
2032 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
2035 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
2039 else if(i >= ssizex + shift){
2042 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
2044 else if(k >= ssizez + shift)
2045 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
2048 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
2051 else if(j >= ssizey + shift){
2053 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
2055 else if(k >= ssizez + shift)
2056 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
2059 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
2064 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
2066 else if(k >= ssizez + shift)
2067 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
2070 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
2077 working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
2079 else if(k >= ssizez + shift)
2080 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
2083 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
2086 else if(j >= ssizey + shift){
2088 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
2090 else if(k >= ssizez + shift)
2091 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
2094 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
2099 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
2101 else if(k >= ssizez + shift)
2102 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
2105 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
2111 if(backgroundRemove ==
true){
2112 for(i = 1;i <= number_of_iterations; i++){
2113 for(z = i;z < sizez_ext - i; z++){
2114 for(
y = i;
y < sizey_ext - i;
y++){
2115 for(
x = i;
x < sizex_ext - i;
x++){
2116 a = working_space[
x][
y][z + sizez_ext];
2117 p1 = working_space[
x + i][
y + i][z - i + sizez_ext];
2118 p2 = working_space[
x - i][
y + i][z - i + sizez_ext];
2119 p3 = working_space[
x + i][
y - i][z - i + sizez_ext];
2120 p4 = working_space[
x - i][
y - i][z - i + sizez_ext];
2121 p5 = working_space[
x + i][
y + i][z + i + sizez_ext];
2122 p6 = working_space[
x - i][
y + i][z + i + sizez_ext];
2123 p7 = working_space[
x + i][
y - i][z + i + sizez_ext];
2124 p8 = working_space[
x - i][
y - i][z + i + sizez_ext];
2125 s1 = working_space[
x + i][
y ][z - i + sizez_ext];
2126 s2 = working_space[
x ][
y + i][z - i + sizez_ext];
2127 s3 = working_space[
x - i][
y ][z - i + sizez_ext];
2128 s4 = working_space[
x ][
y - i][z - i + sizez_ext];
2129 s5 = working_space[
x + i][
y ][z + i + sizez_ext];
2130 s6 = working_space[
x ][
y + i][z + i + sizez_ext];
2131 s7 = working_space[
x - i][
y ][z + i + sizez_ext];
2132 s8 = working_space[
x ][
y - i][z + i + sizez_ext];
2133 s9 = working_space[
x - i][
y + i][z + sizez_ext];
2134 s10 = working_space[
x - i][
y - i][z +sizez_ext];
2135 s11 = working_space[
x + i][
y + i][z +sizez_ext];
2136 s12 = working_space[
x + i][
y - i][z +sizez_ext];
2137 r1 = working_space[
x ][
y ][z - i + sizez_ext];
2138 r2 = working_space[
x ][
y ][z + i + sizez_ext];
2139 r3 = working_space[
x - i][
y ][z + sizez_ext];
2140 r4 = working_space[
x + i][
y ][z + sizez_ext];
2141 r5 = working_space[
x ][
y + i][z + sizez_ext];
2142 r6 = working_space[
x ][
y - i][z + sizez_ext];
2143 b = (p1 + p3) / 2.0;
2147 b = (p1 + p2) / 2.0;
2151 b = (p2 + p4) / 2.0;
2155 b = (p3 + p4) / 2.0;
2159 b = (p5 + p7) / 2.0;
2163 b = (p5 + p6) / 2.0;
2167 b = (p6 + p8) / 2.0;
2171 b = (p7 + p8) / 2.0;
2175 b = (p2 + p6) / 2.0;
2179 b = (p4 + p8) / 2.0;
2183 b = (p1 + p5) / 2.0;
2187 b = (p3 + p7) / 2.0;
2191 s1 =
s1 - (p1 + p3) / 2.0;
2192 s2 = s2 - (p1 + p2) / 2.0;
2193 s3 = s3 - (p2 + p4) / 2.0;
2194 s4 = s4 - (p3 + p4) / 2.0;
2195 s5 = s5 - (p5 + p7) / 2.0;
2196 s6 = s6 - (p5 + p6) / 2.0;
2197 s7 = s7 - (p6 + p8) / 2.0;
2198 s8 = s8 - (p7 + p8) / 2.0;
2199 s9 = s9 - (p2 + p6) / 2.0;
2200 s10 = s10 - (p4 + p8) / 2.0;
2201 s11 = s11 - (p1 + p5) / 2.0;
2202 s12 = s12 - (p3 + p7) / 2.0;
2203 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
2207 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
2211 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
2215 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
2219 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
2223 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
2227 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
2228 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
2229 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
2230 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
2231 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
2232 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
2233 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;
2237 working_space[
x][
y][z] =
a;
2241 for(z = i;z < sizez_ext - i; z++){
2242 for(
y = i;
y < sizey_ext - i;
y++){
2243 for(
x = i;
x < sizex_ext - i;
x++){
2244 working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][z];
2249 for(k = 0;k < sizez_ext; k++){
2250 for(j = 0;j < sizey_ext; j++){
2251 for(i = 0;i < sizex_ext; i++){
2255 working_space[i][j][k + sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
2257 else if(k >= ssizez + shift)
2258 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2261 working_space[i][j][k + sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
2264 else if(j >= ssizey + shift){
2266 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2268 else if(k >= ssizez + shift)
2269 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2272 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2277 working_space[i][j][k + sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
2279 else if(k >= ssizez + shift)
2280 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2283 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2287 else if(i >= ssizex + shift){
2290 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
2292 else if(k >= ssizez + shift)
2293 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2296 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
2299 else if(j >= ssizey + shift){
2301 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2303 else if(k >= ssizez + shift)
2304 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2307 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2312 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
2314 else if(k >= ssizez + shift)
2315 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2318 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2325 working_space[i][j][k + sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
2327 else if(k >= ssizez + shift)
2328 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2331 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
2334 else if(j >= ssizey + shift){
2336 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2338 else if(k >= ssizez + shift)
2339 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2342 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2347 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
2349 else if(k >= ssizez + shift)
2350 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2353 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2362 for(i = 0;i < sizex_ext; i++){
2363 for(j = 0;j < sizey_ext; j++){
2364 for(k = 0;k < sizez_ext; k++){
2365 working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][sizez_ext + k];
2366 plocha_markov = plocha_markov + working_space[i][j][sizez_ext + k];
2371 xmax = sizex_ext - 1;
2373 ymax = sizey_ext - 1;
2375 zmax = sizez_ext - 1;
2376 for(i = 0,maxch = 0;i < sizex_ext; i++){
2377 for(j = 0;j < sizey_ext;j++){
2378 for(k = 0;k < sizez_ext;k++){
2379 working_space[i][j][k] = 0;
2380 if(maxch < working_space[i][j][k + 2 * sizez_ext])
2381 maxch = working_space[i][j][k + 2 * sizez_ext];
2383 plocha += working_space[i][j][k + 2 * sizez_ext];
2390 for(i = 0;i < ssizex + k; i++){
2391 for(j = 0;j < ssizey + k; j++)
2392 delete[] working_space[i][j];
2393 delete[] working_space[i];
2395 delete [] working_space;
2399 working_space[
xmin][
ymin][zmin] = 1;
2401 nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2402 nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
2404 for(
l = 1;
l <= averWindow;
l++){
2406 a = working_space[
xmax][
ymin][zmin + 2 * sizez_ext] / maxch;
2409 a = working_space[i +
l][
ymin][zmin + 2 * sizez_ext] / maxch;
2421 if(i -
l + 1 <
xmin)
2422 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2425 a = working_space[i -
l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
2439 a = working_space[i + 1][
ymin][zmin] =
a * working_space[i][
ymin][zmin];
2443 nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
2444 nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
2446 for(
l = 1;
l <= averWindow;
l++){
2448 a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
2451 a = working_space[
xmin][i +
l][zmin + 2 * sizez_ext] / maxch;
2463 if(i -
l + 1 <
ymin)
2464 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2467 a = working_space[
xmin][i -
l + 1][zmin + 2 * sizez_ext] / maxch;
2481 a = working_space[
xmin][i + 1][zmin] =
a * working_space[
xmin][i][zmin];
2484 for(i = zmin;i < zmax;i++){
2485 nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
2486 nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
2488 for(
l = 1;
l <= averWindow;
l++){
2490 a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
2493 a = working_space[
xmin][
ymin][i +
l + 2 * sizez_ext] / maxch;
2505 if(i -
l + 1 < zmin)
2506 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2509 a = working_space[
xmin][
ymin][i -
l + 1 + 2 * sizez_ext] / maxch;
2528 nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
2529 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
2531 for(
l = 1;
l <= averWindow;
l++){
2533 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
2536 a = working_space[i +
l][j][zmin + 2 * sizez_ext] / maxch;
2548 if(i -
l + 1 <
xmin)
2549 a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
2552 a = working_space[i -
l + 1][j][zmin + 2 * sizez_ext] / maxch;
2566 nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
2567 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
2568 for(
l = 1;
l <= averWindow;
l++){
2570 a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
2573 a = working_space[i][j +
l][zmin + 2 * sizez_ext] / maxch;
2585 if(j -
l + 1 <
ymin)
2586 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2589 a = working_space[i][j -
l + 1][zmin + 2 * sizez_ext] / maxch;
2602 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
2603 working_space[i + 1][j + 1][zmin] =
a;
2608 for(j = zmin;j < zmax;j++){
2609 nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2610 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2612 for(
l = 1;
l <= averWindow;
l++){
2614 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
2617 a = working_space[i +
l][
ymin][j + 2 * sizez_ext] / maxch;
2629 if(i -
l + 1 <
xmin)
2630 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
2633 a = working_space[i -
l + 1][
ymin][j + 2 * sizez_ext] / maxch;
2647 nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
2648 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2649 for(
l = 1;
l <= averWindow;
l++){
2651 a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
2654 a = working_space[i][
ymin][j +
l + 2 * sizez_ext] / maxch;
2666 if(j -
l + 1 < zmin)
2667 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2670 a = working_space[i][
ymin][j -
l + 1 + 2 * sizez_ext] / maxch;
2683 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
2684 working_space[i + 1][
ymin][j + 1] =
a;
2689 for(j = zmin;j < zmax;j++){
2690 nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
2691 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
2693 for(
l = 1;
l <= averWindow;
l++){
2695 a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
2698 a = working_space[
xmin][i +
l][j + 2 * sizez_ext] / maxch;
2710 if(i -
l + 1 <
ymin)
2711 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
2714 a = working_space[
xmin][i -
l + 1][j + 2 * sizez_ext] / maxch;
2728 nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
2729 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
2730 for(
l = 1;
l <= averWindow;
l++){
2732 a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
2735 a = working_space[
xmin][i][j +
l + 2 * sizez_ext] / maxch;
2747 if(j -
l + 1 < zmin)
2748 a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
2751 a = working_space[
xmin][i][j -
l + 1 + 2 * sizez_ext] / maxch;
2764 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
2765 working_space[
xmin][i + 1][j + 1] =
a;
2771 for(k = zmin;k < zmax; k++){
2772 nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2773 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2775 for(
l = 1;
l <= averWindow;
l++){
2777 a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
2780 a = working_space[i +
l][j][k + 2 * sizez_ext] / maxch;
2792 if(i -
l + 1 <
xmin)
2793 a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
2796 a = working_space[i -
l + 1][j][k + 2 * sizez_ext] / maxch;
2810 nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
2811 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2812 for(
l = 1;
l <= averWindow;
l++){
2814 a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
2817 a = working_space[i][j +
l][k + 2 * sizez_ext] / maxch;
2829 if(j -
l + 1 <
ymin)
2830 a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
2833 a = working_space[i][j -
l + 1][k + 2 * sizez_ext] / maxch;
2847 nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
2848 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2849 for(
l = 1;
l <= averWindow;
l++ ){
2851 a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
2854 a = working_space[i][j][k +
l + 2 * sizez_ext] / maxch;
2866 if(j -
l + 1 <
ymin)
2867 a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
2870 a = working_space[i][j][k -
l + 1 + 2 * sizez_ext] / maxch;
2883 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);
2884 working_space[i + 1][j + 1][k + 1] =
a;
2892 for(k = zmin;k <= zmax; k++){
2893 working_space[i][j][k] = working_space[i][j][k] / nom;
2894 a+=working_space[i][j][k];
2898 for(i = 0;i < sizex_ext; i++){
2899 for(j = 0;j < sizey_ext; j++){
2900 for(k = 0;k < sizez_ext; k++){
2901 working_space[i][j][k + sizez_ext] = working_space[i][j][k] * plocha_markov /
a;
2908 lhx = -1,lhy = -1,lhz = -1;
2909 positx = 0,posity = 0,positz = 0;
2912 for(i = 0;i < sizex_ext; i++){
2913 for(j = 0;j < sizey_ext; j++){
2914 for(k = 0;k < sizez_ext; k++){
2918 lda = (lda * lda + ldb * ldb + ldc * ldc) / (2 *
sigma *
sigma);
2931 working_space[i][j][k] = lda;
2935 positx = i,posity = j,positz = k;
2941 for(i = 0;i < sizex_ext; i++){
2942 for(j = 0;j < sizey_ext; j++){
2943 for(k = 0;k < sizez_ext; k++){
2944 working_space[i][j][k + 2 * sizez_ext] =
TMath::Abs(working_space[i][j][k + sizez_ext]);
2949 for (i3 = 0; i3 < sizez_ext; i3++) {
2950 for (i2 = 0; i2 < sizey_ext; i2++) {
2951 for (i1 = 0; i1 < sizex_ext; i1++) {
2953 for (j3 = 0; j3 <= (lhz - 1); j3++) {
2954 for (j2 = 0; j2 <= (lhy - 1); j2++) {
2955 for (j1 = 0; j1 <= (lhx - 1); j1++) {
2956 k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
2957 if (k3 >= 0 && k3 < sizez_ext && k2 >= 0 && k2 < sizey_ext && k1 >= 0 && k1 < sizex_ext) {
2958 lda = working_space[j1][j2][j3];
2959 ldb = working_space[k1][k2][k3+2*sizez_ext];
2960 ldc = ldc + lda * ldb;
2965 working_space[i1][i2][i3 + sizez_ext] = ldc;
2970 i1min = -(lhx - 1), i1max = lhx - 1;
2971 i2min = -(lhy - 1), i2max = lhy - 1;
2972 i3min = -(lhz - 1), i3max = lhz - 1;
2973 for (i3 = i3min; i3 <= i3max; i3++) {
2974 for (i2 = i2min; i2 <= i2max; i2++) {
2975 for (i1 = i1min; i1 <= i1max; i1++) {
2981 j3max = lhz - 1 - i3;
2982 if (j3max > lhz - 1)
2985 for (j3 = j3min; j3 <= j3max; j3++) {
2990 j2max = lhy - 1 - i2;
2991 if (j2max > lhy - 1)
2994 for (j2 = j2min; j2 <= j2max; j2++) {
2999 j1max = lhx - 1 - i1;
3000 if (j1max > lhx - 1)
3003 for (j1 = j1min; j1 <= j1max; j1++) {
3004 lda = working_space[j1][j2][j3];
3005 if (i1 + j1 < sizex_ext && i2 + j2 < sizey_ext)
3006 ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
3011 ldc = ldc + lda * ldb;
3015 working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * sizez_ext ] = ldc;
3020 for (i3 = 0; i3 < sizez_ext; i3++) {
3021 for (i2 = 0; i2 < sizey_ext; i2++) {
3022 for (i1 = 0; i1 < sizex_ext; i1++) {
3023 working_space[i1][i2][i3 + 3 * sizez_ext] = 1;
3024 working_space[i1][i2][i3 + 4 * sizez_ext] = 0;
3030 for (lindex=0;lindex<deconIterations;lindex++){
3031 for (i3 = 0; i3 < sizez_ext; i3++) {
3032 for (i2 = 0; i2 < sizey_ext; i2++) {
3033 for (i1 = 0; i1 < sizex_ext; i1++) {
3034 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){
3037 if (j3min > lhz - 1)
3041 j3max = sizez_ext - i3 - 1;
3042 if (j3max > lhz - 1)
3046 if (j2min > lhy - 1)
3050 j2max = sizey_ext - i2 - 1;
3051 if (j2max > lhy - 1)
3055 if (j1min > lhx - 1)
3059 j1max = sizex_ext - i1 - 1;
3060 if (j1max > lhx - 1)
3063 for (j3 = j3min; j3 <= j3max; j3++) {
3064 for (j2 = j2min; j2 <= j2max; j2++) {
3065 for (j1 = j1min; j1 <= j1max; j1++) {
3066 ldc = working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * sizez_ext];
3067 lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * sizez_ext];
3068 ldb = ldb + lda * ldc;
3072 lda = working_space[i1][i2][i3 + 3 * sizez_ext];
3073 ldc = working_space[i1][i2][i3 + 1 * sizez_ext];
3074 if (ldc * lda != 0 && ldb != 0) {
3075 lda = lda * ldc / ldb;
3080 working_space[i1][i2][i3 + 4 * sizez_ext] = lda;
3085 for (i3 = 0; i3 < sizez_ext; i3++) {
3086 for (i2 = 0; i2 < sizey_ext; i2++) {
3087 for (i1 = 0; i1 < sizex_ext; i1++)
3088 working_space[i1][i2][i3 + 3 * sizez_ext] = working_space[i1][i2][i3 + 4 * sizez_ext];
3094 for(i = 0;i < sizex_ext; i++){
3095 for(j = 0;j < sizey_ext; j++){
3096 for(k = 0;k < sizez_ext; k++){
3097 working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext] = area * working_space[i][j][k + 3 * sizez_ext];
3098 if(maximum < working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext])
3099 maximum = working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext];
3104 for(i = 1;i < sizex_ext - 1; i++){
3105 for(j = 1;j < sizey_ext - 1; j++){
3106 for(
l = 1;
l < sizez_ext - 1;
l++){
3107 a = working_space[i][j][
l];
3108 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]){
3109 if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && l >= shift &&
l < ssizez + shift){
3110 if(working_space[i][j][
l] > threshold * maximum / 100.0){
3112 for(k = i - 1,
a = 0,
b = 0;k <= i + 1; k++){
3113 a += (
Double_t)(k - shift) * working_space[k][j][
l];
3114 b += working_space[k][j][
l];
3117 for(k = j - 1,
a = 0,
b = 0;k <= j + 1; k++){
3118 a += (
Double_t)(k - shift) * working_space[i][k][
l];
3119 b += working_space[i][k][
l];
3122 for(k =
l - 1,
a = 0,
b = 0;k <=
l + 1; k++){
3123 a += (
Double_t)(k - shift) * working_space[i][j][k];
3124 b += working_space[i][j][k];
3135 for(i = 0;i < ssizex; i++){
3136 for(j = 0;j < ssizey; j++){
3137 for(k = 0;k < ssizez; k++){
3138 dest[i][j][k] = working_space[i + shift][j + shift][k + shift];
3144 for(i = 0;i < ssizex + k; i++){
3145 for(j = 0;j < ssizey + k; j++)
3146 delete[] working_space[i][j];
3147 delete[] working_space[i];
3149 delete[] working_space;
3179 Int_t i,j,k,
l,li,lj,lk,lmin,lmax,
xmin,
xmax,
ymin,
ymax,zmin,zmax;
3180 Double_t maxch,plocha = 0,plocha_markov = 0;
3181 Double_t nom,nip,nim,sp,sm,spx,spy,smx,smy,spz,smz;
3182 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;
3185 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;
3188 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;
3191 Error(
"SearchFast",
"Invalid sigma, must be greater than or equal to 1");
3195 if(threshold<=0||threshold>=100){
3196 Error(
"SearchFast",
"Invalid threshold, must be positive and less than 100");
3202 Error(
"SearchFast",
"Too large sigma");
3206 if (markov ==
true) {
3207 if (averWindow <= 0) {
3208 Error(
"SearchFast",
"Averaging window must be positive");
3213 if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
3214 Error(
"SearchFast",
"Too large clipping window");
3221 for(j = 0;j < ssizex + i; j++){
3222 working_space[j] =
new Double_t* [ssizey + i];
3223 for(k = 0;k < ssizey + i; k++)
3224 working_space[j][k] =
new Double_t [4 * (ssizez + i)];
3227 for(k = 0;k < sizez_ext; k++){
3228 for(j = 0;j < sizey_ext; j++){
3229 for(i = 0;i < sizex_ext; i++){
3233 working_space[i][j][k + sizez_ext] = source[0][0][0];
3235 else if(k >= ssizez + shift)
3236 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
3239 working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
3242 else if(j >= ssizey + shift){
3244 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
3246 else if(k >= ssizez + shift)
3247 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
3250 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
3255 working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
3257 else if(k >= ssizez + shift)
3258 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
3261 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
3265 else if(i >= ssizex + shift){
3268 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
3270 else if(k >= ssizez + shift)
3271 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
3274 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
3277 else if(j >= ssizey + shift){
3279 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
3281 else if(k >= ssizez + shift)
3282 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
3285 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
3290 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
3292 else if(k >= ssizez + shift)
3293 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
3296 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
3303 working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
3305 else if(k >= ssizez + shift)
3306 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
3309 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
3312 else if(j >= ssizey + shift){
3314 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
3316 else if(k >= ssizez + shift)
3317 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
3320 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
3325 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
3327 else if(k >= ssizez + shift)
3328 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
3331 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
3337 for(i = 1;i <= number_of_iterations; i++){
3338 for(z = i;z < sizez_ext - i; z++){
3339 for(
y = i;
y < sizey_ext - i;
y++){
3340 for(
x = i;
x < sizex_ext - i;
x++){
3341 a = working_space[
x][
y][z + sizez_ext];
3342 p1 = working_space[
x + i][
y + i][z - i + sizez_ext];
3343 p2 = working_space[
x - i][
y + i][z - i + sizez_ext];
3344 p3 = working_space[
x + i][
y - i][z - i + sizez_ext];
3345 p4 = working_space[
x - i][
y - i][z - i + sizez_ext];
3346 p5 = working_space[
x + i][
y + i][z + i + sizez_ext];
3347 p6 = working_space[
x - i][
y + i][z + i + sizez_ext];
3348 p7 = working_space[
x + i][
y - i][z + i + sizez_ext];
3349 p8 = working_space[
x - i][
y - i][z + i + sizez_ext];
3350 s1 = working_space[
x + i][
y ][z - i + sizez_ext];
3351 s2 = working_space[
x ][
y + i][z - i + sizez_ext];
3352 s3 = working_space[
x - i][
y ][z - i + sizez_ext];
3353 s4 = working_space[
x ][
y - i][z - i + sizez_ext];
3354 s5 = working_space[
x + i][
y ][z + i + sizez_ext];
3355 s6 = working_space[
x ][
y + i][z + i + sizez_ext];
3356 s7 = working_space[
x - i][
y ][z + i + sizez_ext];
3357 s8 = working_space[
x ][
y - i][z + i + sizez_ext];
3358 s9 = working_space[
x - i][
y + i][z + sizez_ext];
3359 s10 = working_space[
x - i][
y - i][z +sizez_ext];
3360 s11 = working_space[
x + i][
y + i][z +sizez_ext];
3361 s12 = working_space[
x + i][
y - i][z +sizez_ext];
3362 r1 = working_space[
x ][
y ][z - i + sizez_ext];
3363 r2 = working_space[
x ][
y ][z + i + sizez_ext];
3364 r3 = working_space[
x - i][
y ][z + sizez_ext];
3365 r4 = working_space[
x + i][
y ][z + sizez_ext];
3366 r5 = working_space[
x ][
y + i][z + sizez_ext];
3367 r6 = working_space[
x ][
y - i][z + sizez_ext];
3368 b = (p1 + p3) / 2.0;
3372 b = (p1 + p2) / 2.0;
3376 b = (p2 + p4) / 2.0;
3380 b = (p3 + p4) / 2.0;
3384 b = (p5 + p7) / 2.0;
3388 b = (p5 + p6) / 2.0;
3392 b = (p6 + p8) / 2.0;
3396 b = (p7 + p8) / 2.0;
3400 b = (p2 + p6) / 2.0;
3404 b = (p4 + p8) / 2.0;
3408 b = (p1 + p5) / 2.0;
3412 b = (p3 + p7) / 2.0;
3416 s1 =
s1 - (p1 + p3) / 2.0;
3417 s2 = s2 - (p1 + p2) / 2.0;
3418 s3 = s3 - (p2 + p4) / 2.0;
3419 s4 = s4 - (p3 + p4) / 2.0;
3420 s5 = s5 - (p5 + p7) / 2.0;
3421 s6 = s6 - (p5 + p6) / 2.0;
3422 s7 = s7 - (p6 + p8) / 2.0;
3423 s8 = s8 - (p7 + p8) / 2.0;
3424 s9 = s9 - (p2 + p6) / 2.0;
3425 s10 = s10 - (p4 + p8) / 2.0;
3426 s11 = s11 - (p1 + p5) / 2.0;
3427 s12 = s12 - (p3 + p7) / 2.0;
3428 b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
3432 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
3436 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
3440 b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
3444 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
3448 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
3452 r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
3453 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
3454 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
3455 r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
3456 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
3457 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
3458 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;
3462 working_space[
x][
y][z] =
a;
3466 for(z = i;z < sizez_ext - i; z++){
3467 for(
y = i;
y < sizey_ext - i;
y++){
3468 for(
x = i;
x < sizex_ext - i;
x++){
3469 working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][z];
3474 for(k = 0;k < sizez_ext; k++){
3475 for(j = 0;j < sizey_ext; j++){
3476 for(i = 0;i < sizex_ext; i++){
3480 working_space[i][j][k + 3 * sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
3482 else if(k >= ssizez + shift)
3483 working_space[i][j][k + 3 * sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3486 working_space[i][j][k + 3 * sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
3489 else if(j >= ssizey + shift){
3491 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3493 else if(k >= ssizez + shift)
3494 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3497 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3502 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
3504 else if(k >= ssizez + shift)
3505 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3508 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3512 else if(i >= ssizex + shift){
3515 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
3517 else if(k >= ssizez + shift)
3518 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3521 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
3524 else if(j >= ssizey + shift){
3526 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3528 else if(k >= ssizez + shift)
3529 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3532 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3537 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
3539 else if(k >= ssizez + shift)
3540 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3543 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3550 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
3552 else if(k >= ssizez + shift)
3553 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3556 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
3559 else if(j >= ssizey + shift){
3561 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3563 else if(k >= ssizez + shift)
3564 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3567 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3572 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
3574 else if(k >= ssizez + shift)
3575 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3578 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3585 for(i = 0;i < sizex_ext; i++){
3586 for(j = 0;j < sizey_ext; j++){
3587 for(k = 0;k < sizez_ext; k++){
3588 if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && k >= shift && k < ssizez + shift){
3589 working_space[i][j][k + 2 * sizez_ext] = source[i - shift][j - shift][k - shift];
3590 plocha_markov = plocha_markov + source[i - shift][j - shift][k - shift];
3593 working_space[i][j][k + 2 * sizez_ext] = 0;
3600 xmax = sizex_ext - 1;
3602 ymax = sizey_ext - 1;
3604 zmax = sizez_ext - 1;
3605 for(i = 0,maxch = 0;i < sizex_ext; i++){
3606 for(j = 0;j < sizey_ext;j++){
3607 for(k = 0;k < sizez_ext;k++){
3608 working_space[i][j][k] = 0;
3609 if(maxch < working_space[i][j][k + 2 * sizez_ext])
3610 maxch = working_space[i][j][k + 2 * sizez_ext];
3612 plocha += working_space[i][j][k + 2 * sizez_ext];
3619 for(i = 0;i < ssizex + k; i++){
3620 for(j = 0;j < ssizey + k; j++)
3621 delete[] working_space[i][j];
3622 delete[] working_space[i];
3624 delete [] working_space;
3629 working_space[
xmin][
ymin][zmin] = 1;
3631 nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3632 nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
3634 for(
l = 1;
l <= averWindow;
l++){
3636 a = working_space[
xmax][
ymin][zmin + 2 * sizez_ext] / maxch;
3639 a = working_space[i +
l][
ymin][zmin + 2 * sizez_ext] / maxch;
3651 if(i -
l + 1 <
xmin)
3652 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3655 a = working_space[i -
l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
3669 a = working_space[i + 1][
ymin][zmin] =
a * working_space[i][
ymin][zmin];
3673 nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
3674 nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
3676 for(
l = 1;
l <= averWindow;
l++){
3678 a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
3681 a = working_space[
xmin][i +
l][zmin + 2 * sizez_ext] / maxch;
3693 if(i -
l + 1 <
ymin)
3694 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3697 a = working_space[
xmin][i -
l + 1][zmin + 2 * sizez_ext] / maxch;
3711 a = working_space[
xmin][i + 1][zmin] =
a * working_space[
xmin][i][zmin];
3714 for(i = zmin;i < zmax;i++){
3715 nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
3716 nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
3718 for(
l = 1;
l <= averWindow;
l++){
3720 a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
3723 a = working_space[
xmin][
ymin][i +
l + 2 * sizez_ext] / maxch;
3735 if(i -
l + 1 < zmin)
3736 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3739 a = working_space[
xmin][
ymin][i -
l + 1 + 2 * sizez_ext] / maxch;
3758 nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
3759 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
3761 for(
l = 1;
l <= averWindow;
l++){
3763 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
3766 a = working_space[i +
l][j][zmin + 2 * sizez_ext] / maxch;
3778 if(i -
l + 1 <
xmin)
3779 a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
3782 a = working_space[i -
l + 1][j][zmin + 2 * sizez_ext] / maxch;
3796 nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
3797 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
3798 for(
l = 1;
l <= averWindow;
l++){
3800 a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
3803 a = working_space[i][j +
l][zmin + 2 * sizez_ext] / maxch;
3815 if(j -
l + 1 <
ymin)
3816 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3819 a = working_space[i][j -
l + 1][zmin + 2 * sizez_ext] / maxch;
3832 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
3833 working_space[i + 1][j + 1][zmin] =
a;
3838 for(j = zmin;j < zmax;j++){
3839 nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3840 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3842 for(
l = 1;
l <= averWindow;
l++){
3844 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
3847 a = working_space[i +
l][
ymin][j + 2 * sizez_ext] / maxch;
3859 if(i -
l + 1 <
xmin)
3860 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
3863 a = working_space[i -
l + 1][
ymin][j + 2 * sizez_ext] / maxch;
3877 nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
3878 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3879 for(
l = 1;
l <= averWindow;
l++){
3881 a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
3884 a = working_space[i][
ymin][j +
l + 2 * sizez_ext] / maxch;
3896 if(j -
l + 1 < zmin)
3897 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3900 a = working_space[i][
ymin][j -
l + 1 + 2 * sizez_ext] / maxch;
3913 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
3914 working_space[i + 1][
ymin][j + 1] =
a;
3919 for(j = zmin;j < zmax;j++){
3920 nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
3921 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
3923 for(
l = 1;
l <= averWindow;
l++){
3925 a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
3928 a = working_space[
xmin][i +
l][j + 2 * sizez_ext] / maxch;
3940 if(i -
l + 1 <
ymin)
3941 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
3944 a = working_space[
xmin][i -
l + 1][j + 2 * sizez_ext] / maxch;
3958 nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
3959 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
3960 for(
l = 1;
l <= averWindow;
l++){
3962 a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
3965 a = working_space[
xmin][i][j +
l + 2 * sizez_ext] / maxch;
3977 if(j -
l + 1 < zmin)
3978 a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
3981 a = working_space[
xmin][i][j -
l + 1 + 2 * sizez_ext] / maxch;
3994 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
3995 working_space[
xmin][i + 1][j + 1] =
a;
4001 for(k = zmin;k < zmax; k++){
4002 nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4003 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4005 for(
l = 1;
l <= averWindow;
l++){
4007 a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
4010 a = working_space[i +
l][j][k + 2 * sizez_ext] / maxch;
4022 if(i -
l + 1 <
xmin)
4023 a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
4026 a = working_space[i -
l + 1][j][k + 2 * sizez_ext] / maxch;
4040 nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
4041 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4042 for(
l = 1;
l <= averWindow;
l++){
4044 a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
4047 a = working_space[i][j +
l][k + 2 * sizez_ext] / maxch;
4059 if(j -
l + 1 <
ymin)
4060 a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
4063 a = working_space[i][j -
l + 1][k + 2 * sizez_ext] / maxch;
4077 nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
4078 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4079 for(
l = 1;
l <= averWindow;
l++ ){
4081 a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
4084 a = working_space[i][j][k +
l + 2 * sizez_ext] / maxch;
4096 if(j -
l + 1 <
ymin)
4097 a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
4100 a = working_space[i][j][k -
l + 1 + 2 * sizez_ext] / maxch;
4113 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);
4114 working_space[i + 1][j + 1][k + 1] =
a;
4122 for(k = zmin;k <= zmax; k++){
4123 working_space[i][j][k] = working_space[i][j][k] / nom;
4124 a+=working_space[i][j][k];
4128 for(i = 0;i < sizex_ext; i++){
4129 for(j = 0;j < sizey_ext; j++){
4130 for(k = 0;k < sizez_ext; k++){
4131 working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][k] * plocha_markov /
a;
4138 for(k = 0;k < ssizez; k++){
4139 for(j = 0;j < ssizey; j++){
4140 for(i = 0;i < ssizex; i++){
4141 working_space[i][j][k] = 0;
4142 working_space[i][j][sizez_ext + k] = 0;
4143 if(working_space[i][j][k + 3 * sizez_ext] > maximum)
4144 maximum=working_space[i][j][k+3*sizez_ext];
4152 for(i = -j;i <= j; i++){
4170 c[i] =
c[i] / norma;
4172 a = pocet_sigma *
sigma + 0.5;
4175 zmax = sizez_ext - i - 1;
4177 ymax = sizey_ext - i - 1;
4179 xmax = sizex_ext - i - 1;
4184 for(k = zmin;k <= zmax; k++){
4186 for(li = lmin;li <= lmax; li++){
4187 for(lj = lmin;lj <= lmax; lj++){
4188 for(lk = lmin;lk <= lmax; lk++){
4190 b =
c[li] *
c[lj] *
c[lk];
4196 working_space[i][j][k] = s;
4203 for(z = zmin + 1;z < zmax; z++){
4204 val = working_space[
x][
y][z];
4205 val1 = working_space[
x - 1][
y - 1][z - 1];
4206 val2 = working_space[
x ][
y - 1][z - 1];
4207 val3 = working_space[
x + 1][
y - 1][z - 1];
4208 val4 = working_space[
x - 1][
y ][z - 1];
4209 val5 = working_space[
x ][
y ][z - 1];
4210 val6 = working_space[
x + 1][
y ][z - 1];
4211 val7 = working_space[
x - 1][
y + 1][z - 1];
4212 val8 = working_space[
x ][
y + 1][z - 1];
4213 val9 = working_space[
x + 1][
y + 1][z - 1];
4214 val10 = working_space[
x - 1][
y - 1][z ];
4215 val11 = working_space[
x ][
y - 1][z ];
4216 val12 = working_space[
x + 1][
y - 1][z ];
4217 val13 = working_space[
x - 1][
y ][z ];
4218 val14 = working_space[
x + 1][
y ][z ];
4219 val15 = working_space[
x - 1][
y + 1][z ];
4220 val16 = working_space[
x ][
y + 1][z ];
4221 val17 = working_space[
x + 1][
y + 1][z ];
4222 val18 = working_space[
x - 1][
y - 1][z + 1];
4223 val19 = working_space[
x ][
y - 1][z + 1];
4224 val20 = working_space[
x + 1][
y - 1][z + 1];
4225 val21 = working_space[
x - 1][
y ][z + 1];
4226 val22 = working_space[
x ][
y ][z + 1];
4227 val23 = working_space[
x + 1][
y ][z + 1];
4228 val24 = working_space[
x - 1][
y + 1][z + 1];
4229 val25 = working_space[
x ][
y + 1][z + 1];
4230 val26 = working_space[
x + 1][
y + 1][z + 1];
4231 f = -s_f_ratio_peaks * working_space[
x][
y][z + sizez_ext];
4232 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){
4234 for(li = lmin;li <= lmax; li++){
4235 a = working_space[
x + li -
PEAK_WINDOW / 2][
y][z + 2 * sizez_ext];
4237 f +=
a *
c[li] *
c[li];
4239 f = -s_f_ratio_peaks *
sqrt(
f);
4242 for(li = lmin;li <= lmax; li++){
4243 a = working_space[
x][
y + li -
PEAK_WINDOW / 2][z + 2 * sizez_ext];
4245 f +=
a *
c[li] *
c[li];
4247 f = -s_f_ratio_peaks *
sqrt(
f);
4250 for(li = lmin;li <= lmax; li++){
4251 a = working_space[
x][
y][z + li -
PEAK_WINDOW / 2 + 2 * sizez_ext];
4253 f +=
a *
c[li] *
c[li];
4255 f = -s_f_ratio_peaks *
sqrt(
f);
4258 for(li = lmin;li <= lmax; li++){
4259 for(lj = lmin;lj <= lmax; lj++){
4261 s +=
a *
c[li] *
c[lj];
4262 f +=
a *
c[li] *
c[li] *
c[lj] *
c[lj];
4265 f = s_f_ratio_peaks *
sqrt(
f);
4268 for(li = lmin;li <= lmax; li++){
4269 for(lj = lmin;lj <= lmax; lj++){
4271 s +=
a *
c[li] *
c[lj];
4272 f +=
a *
c[li] *
c[li] *
c[lj] *
c[lj];
4275 f = s_f_ratio_peaks *
sqrt(
f);
4278 for(li = lmin;li <= lmax; li++){
4279 for(lj=lmin;lj<=lmax;lj++){
4281 s +=
a *
c[li] *
c[lj];
4282 f +=
a *
c[li] *
c[li] *
c[lj] *
c[lj];
4285 f = s_f_ratio_peaks *
sqrt(
f);
4287 if(
x >= shift && x < ssizex + shift && y >= shift && y < ssizey + shift && z >= shift && z < ssizez + shift){
4288 if(working_space[
x][
y][z + 3 * sizez_ext] > threshold * maximum / 100.0){
4290 for(k =
x - 1,
a = 0,
b = 0;k <=
x + 1; k++){
4291 a += (
Double_t)(k - shift) * working_space[k][
y][z];
4292 b += working_space[k][
y][z];
4295 for(k =
y - 1,
a = 0,
b = 0;k <=
y + 1; k++){
4296 a += (
Double_t)(k - shift) * working_space[
x][k][z];
4297 b += working_space[
x][k][z];
4300 for(k = z - 1,
a = 0,
b = 0;k <= z + 1; k++){
4301 a += (
Double_t)(k - shift) * working_space[
x][
y][k];
4302 b += working_space[
x][
y][k];
4319 for(i = 0;i < ssizex; i++){
4320 for(j = 0;j < ssizey; j++){
4321 for(k = 0;k < ssizez; k++){
4322 val = -working_space[i + shift][j + shift][k + shift];
4325 dest[i][j][k] = val;
4331 for(i = 0;i < ssizex + k; i++){
4332 for(j = 0;j < ssizey + k; j++)
4333 delete[] working_space[i][j];
4334 delete[] working_space[i];
4336 delete[] working_space;
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
TH1 is the base class of all histogram classes in ROOT.
virtual Int_t GetDimension() const
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
The TNamed class is the base class for all named ROOT classes.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Advanced 3-dimensional spectra processing functions.
virtual ~TSpectrum3()
Destructor.
Double_t fResolution
NOT USED resolution of the neighboring peaks
Int_t fMaxPeaks
Maximum number of peaks to be found.
Int_t SearchFast(const Double_t ***source, Double_t ***dest, Int_t ssizex, Int_t ssizey, Int_t ssizez, Double_t sigma, Double_t threshold, Bool_t markov, Int_t averWindow)
THREE-DIMENSIONAL CLASSICAL PEAK SEARCH FUNCTION This function searches for peaks in source spectrum ...
virtual const char * Background(const TH1 *hist, Int_t niter, Option_t *option="goff")
This function calculates background spectrum from source in h.
TH1 * fHistogram
resulting histogram
const char * Deconvolution(Double_t ***source, const Double_t ***resp, Int_t ssizex, Int_t ssizey, Int_t ssizez, Int_t numberIterations, Int_t numberRepetitions, Double_t boost)
This function calculates deconvolution from source spectrum according to response spectrum The result...
Double_t * fPositionY
[fNPeaks] Y positions of peaks
Double_t * fPosition
[fNPeaks] array of current peak positions
virtual Int_t Search(const TH1 *hist, Double_t sigma=2, Option_t *option="goff", Double_t threshold=0.05)
This function searches for peaks in source spectrum in hin The number of found peaks and their positi...
Int_t SearchHighRes(const Double_t ***source, Double_t ***dest, Int_t ssizex, Int_t ssizey, Int_t ssizez, Double_t sigma, Double_t threshold, Bool_t backgroundRemove, Int_t deconIterations, Bool_t markov, Int_t averWindow)
This function searches for peaks in source spectrum It is based on deconvolution method.
const char * SmoothMarkov(Double_t ***source, Int_t ssizex, Int_t ssizey, Int_t ssizez, Int_t averWindow)
This function calculates smoothed spectrum from source spectrum based on Markov chain method.
Double_t * fPositionZ
[fNPeaks] Z positions of peaks
@ kBackSuccessiveFiltering
Double_t * fPositionX
[fNPeaks] X positions of peaks
Int_t fNPeaks
number of peaks found
virtual void Print(Option_t *option="") const
Print the array of positions.
void SetResolution(Double_t resolution=1)
NOT USED resolution: determines resolution of the neighbouring peaks default value is 1 correspond to...
Short_t Max(Short_t a, Short_t b)
Double_t Sqrt(Double_t x)
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Short_t Min(Short_t a, Short_t b)
#define dest(otri, vertexptr)