47 #define PEAK_WINDOW 1024
114 Error(
"Background",
"function not yet implemented: h=%s, iter=%d, option=%sn"
115 , h->
GetName(), number_of_iterations, option);
162 if (dimension != 3) {
163 Error(
"Search",
"Must be a 3-d histogram");
170 Int_t i, j, k, binx,biny,binz, npeaks;
173 for (i = 0; i < sizex; i++) {
176 for (j = 0; j < sizey; j++) {
179 for (k = 0; k < sizez; k++)
184 npeaks =
SearchHighRes((
const Double_t***)source, dest, sizex, sizey, sizez, sigma, 100*threshold,
kTRUE, 3,
kFALSE, 3);
189 for (i = 0; i < npeaks; i++) {
197 for (i = 0; i < sizex; i++) {
198 for (j = 0; j < sizey; j++){
199 delete [] source[i][j];
200 delete [] dest[i][j];
208 if (strstr(option,
"goff"))
210 if (!npeaks)
return 0;
381 Int_t numberIterationsX,
382 Int_t numberIterationsY,
383 Int_t numberIterationsZ,
387 Int_t i, j,
x,
y,
z, sampling, q1, q2, q3;
388 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;
389 if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
390 return "Wrong parameters";
391 if (numberIterationsX < 1 || numberIterationsY < 1 || numberIterationsZ < 1)
392 return "Width of Clipping Window Must Be Positive";
393 if (ssizex < 2 * numberIterationsX + 1 || ssizey < 2 * numberIterationsY + 1 || ssizey < 2 * numberIterationsZ + 1)
394 return (
"Too Large Clipping Window");
396 for(i=0;i<ssizex;i++){
397 working_space[i] =
new Double_t*[ssizey];
398 for(j=0;j<ssizey;j++)
399 working_space[i][j]=
new Double_t[ssizez];
405 for (i = 1; i <= sampling; i++) {
407 for (z = q3; z < ssizez - q3; z++) {
408 for (y = q2; y < ssizey - q2; y++) {
409 for (x = q1; x < ssizex - q1; x++) {
410 a = spectrum[
x][
y][
z];
411 p1 = spectrum[x + q1][y + q2][z - q3];
412 p2 = spectrum[x - q1][y + q2][z - q3];
413 p3 = spectrum[x + q1][y - q2][z - q3];
414 p4 = spectrum[x - q1][y - q2][z - q3];
415 p5 = spectrum[x + q1][y + q2][z + q3];
416 p6 = spectrum[x - q1][y + q2][z + q3];
417 p7 = spectrum[x + q1][y - q2][z + q3];
418 p8 = spectrum[x - q1][y - q2][z + q3];
419 s1 = spectrum[x + q1][
y ][z - q3];
420 s2 = spectrum[
x ][y + q2][z - q3];
421 s3 = spectrum[x - q1][
y ][z - q3];
422 s4 = spectrum[
x ][y - q2][z - q3];
423 s5 = spectrum[x + q1][
y ][z + q3];
424 s6 = spectrum[
x ][y + q2][z + q3];
425 s7 = spectrum[x - q1][
y ][z + q3];
426 s8 = spectrum[
x ][y - q2][z + q3];
427 s9 = spectrum[x - q1][y + q2][
z ];
428 s10 = spectrum[x - q1][y - q2][
z ];
429 s11 = spectrum[x + q1][y + q2][
z ];
430 s12 = spectrum[x + q1][y - q2][
z ];
431 r1 = spectrum[
x ][
y ][z - q3];
432 r2 = spectrum[
x ][
y ][z + q3];
433 r3 = spectrum[x - q1][
y ][
z ];
434 r4 = spectrum[x + q1][
y ][
z ];
435 r5 = spectrum[
x ][y + q2][
z ];
436 r6 = spectrum[
x ][y - q2][
z ];
473 s1 = s1 - (p1 +
p3) / 2.0;
474 s2 = s2 - (p1 +
p2) / 2.0;
475 s3 = s3 - (p2 + p4) / 2.0;
476 s4 = s4 - (p3 + p4) / 2.0;
477 s5 = s5 - (p5 + p7) / 2.0;
478 s6 = s6 - (p5 + p6) / 2.0;
479 s7 = s7 - (p6 + p8) / 2.0;
480 s8 = s8 - (p7 + p8) / 2.0;
481 s9 = s9 - (p2 + p6) / 2.0;
482 s10 = s10 - (p4 + p8) / 2.0;
483 s11 = s11 - (p1 + p5) / 2.0;
484 s12 = s12 - (p3 + p7) / 2.0;
485 b = (s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
488 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
491 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
494 b = (s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
497 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
500 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
503 r1 = r1 - ((s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
504 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
505 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
506 r4 = r4 - ((s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
507 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
508 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
509 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;
512 working_space[
x][
y][
z] =
a;
516 for (z = q3; z < ssizez - q3; z++) {
517 for (y = q2; y < ssizey - q2; y++) {
518 for (x = q1; x < ssizex - q1; x++) {
519 spectrum[
x][
y][
z] = working_space[
x][
y][
z];
527 for (i = 1; i <= sampling; i++) {
529 for (z = q3; z < ssizez - q3; z++) {
530 for (y = q2; y < ssizey - q2; y++) {
531 for (x = q1; x < ssizex - q1; x++) {
532 a = spectrum[
x][
y][
z];
533 p1 = spectrum[x + q1][y + q2][z - q3];
534 p2 = spectrum[x - q1][y + q2][z - q3];
535 p3 = spectrum[x + q1][y - q2][z - q3];
536 p4 = spectrum[x - q1][y - q2][z - q3];
537 p5 = spectrum[x + q1][y + q2][z + q3];
538 p6 = spectrum[x - q1][y + q2][z + q3];
539 p7 = spectrum[x + q1][y - q2][z + q3];
540 p8 = spectrum[x - q1][y - q2][z + q3];
541 s1 = spectrum[x + q1][
y ][z - q3];
542 s2 = spectrum[
x ][y + q2][z - q3];
543 s3 = spectrum[x - q1][
y ][z - q3];
544 s4 = spectrum[
x ][y - q2][z - q3];
545 s5 = spectrum[x + q1][
y ][z + q3];
546 s6 = spectrum[
x ][y + q2][z + q3];
547 s7 = spectrum[x - q1][
y ][z + q3];
548 s8 = spectrum[
x ][y - q2][z + q3];
549 s9 = spectrum[x - q1][y + q2][
z ];
550 s10 = spectrum[x - q1][y - q2][
z ];
551 s11 = spectrum[x + q1][y + q2][
z ];
552 s12 = spectrum[x + q1][y - q2][
z ];
553 r1 = spectrum[
x ][
y ][z - q3];
554 r2 = spectrum[
x ][
y ][z + q3];
555 r3 = spectrum[x - q1][
y ][
z ];
556 r4 = spectrum[x + q1][
y ][
z ];
557 r5 = spectrum[
x ][y + q2][
z ];
558 r6 = spectrum[
x ][y - q2][
z ];
559 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;
560 c = -(s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4 + (r1 + r2 + r3 + r4 + r5 + r6) / 2;
561 d = -(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8) / 8 + (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 12;
562 if(b < a && b >= 0 && c >=0 && d >= 0)
564 working_space[
x][
y][
z] =
a;
568 for (z = q3; z < ssizez - q3; z++) {
569 for (y = q2; y < ssizey - q2; y++) {
570 for (x = q1; x < ssizex - q1; x++) {
571 spectrum[
x][
y][
z] = working_space[
x][
y][
z];
581 for (i = sampling; i >= 1; i--) {
583 for (z = q3; z < ssizez - q3; z++) {
584 for (y = q2; y < ssizey - q2; y++) {
585 for (x = q1; x < ssizex - q1; x++) {
586 a = spectrum[
x][
y][
z];
587 p1 = spectrum[x + q1][y + q2][z - q3];
588 p2 = spectrum[x - q1][y + q2][z - q3];
589 p3 = spectrum[x + q1][y - q2][z - q3];
590 p4 = spectrum[x - q1][y - q2][z - q3];
591 p5 = spectrum[x + q1][y + q2][z + q3];
592 p6 = spectrum[x - q1][y + q2][z + q3];
593 p7 = spectrum[x + q1][y - q2][z + q3];
594 p8 = spectrum[x - q1][y - q2][z + q3];
595 s1 = spectrum[x + q1][
y ][z - q3];
596 s2 = spectrum[
x ][y + q2][z - q3];
597 s3 = spectrum[x - q1][
y ][z - q3];
598 s4 = spectrum[
x ][y - q2][z - q3];
599 s5 = spectrum[x + q1][
y ][z + q3];
600 s6 = spectrum[
x ][y + q2][z + q3];
601 s7 = spectrum[x - q1][
y ][z + q3];
602 s8 = spectrum[
x ][y - q2][z + q3];
603 s9 = spectrum[x - q1][y + q2][
z ];
604 s10 = spectrum[x - q1][y - q2][
z ];
605 s11 = spectrum[x + q1][y + q2][
z ];
606 s12 = spectrum[x + q1][y - q2][
z ];
607 r1 = spectrum[
x ][
y ][z - q3];
608 r2 = spectrum[
x ][
y ][z + q3];
609 r3 = spectrum[x - q1][
y ][
z ];
610 r4 = spectrum[x + q1][
y ][
z ];
611 r5 = spectrum[
x ][y + q2][
z ];
612 r6 = spectrum[
x ][y - q2][
z ];
649 s1 = s1 - (p1 +
p3) / 2.0;
650 s2 = s2 - (p1 +
p2) / 2.0;
651 s3 = s3 - (p2 + p4) / 2.0;
652 s4 = s4 - (p3 + p4) / 2.0;
653 s5 = s5 - (p5 + p7) / 2.0;
654 s6 = s6 - (p5 + p6) / 2.0;
655 s7 = s7 - (p6 + p8) / 2.0;
656 s8 = s8 - (p7 + p8) / 2.0;
657 s9 = s9 - (p2 + p6) / 2.0;
658 s10 = s10 - (p4 + p8) / 2.0;
659 s11 = s11 - (p1 + p5) / 2.0;
660 s12 = s12 - (p3 + p7) / 2.0;
661 b = (s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
664 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
667 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
670 b = (s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
673 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
676 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
679 r1 = r1 - ((s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
680 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
681 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
682 r4 = r4 - ((s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
683 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
684 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
685 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;
688 working_space[
x][
y][
z] =
a;
692 for (z = q3; z < ssizez - q3; z++) {
693 for (y = q2; y < ssizey - q2; y++) {
694 for (x = q1; x < ssizex - q1; x++) {
695 spectrum[
x][
y][
z] = working_space[
x][
y][
z];
703 for (i = sampling; i >= 1; i--) {
705 for (z = q3; z < ssizez - q3; z++) {
706 for (y = q2; y < ssizey - q2; y++) {
707 for (x = q1; x < ssizex - q1; x++) {
708 a = spectrum[
x][
y][
z];
709 p1 = spectrum[x + q1][y + q2][z - q3];
710 p2 = spectrum[x - q1][y + q2][z - q3];
711 p3 = spectrum[x + q1][y - q2][z - q3];
712 p4 = spectrum[x - q1][y - q2][z - q3];
713 p5 = spectrum[x + q1][y + q2][z + q3];
714 p6 = spectrum[x - q1][y + q2][z + q3];
715 p7 = spectrum[x + q1][y - q2][z + q3];
716 p8 = spectrum[x - q1][y - q2][z + q3];
717 s1 = spectrum[x + q1][
y ][z - q3];
718 s2 = spectrum[
x ][y + q2][z - q3];
719 s3 = spectrum[x - q1][
y ][z - q3];
720 s4 = spectrum[
x ][y - q2][z - q3];
721 s5 = spectrum[x + q1][
y ][z + q3];
722 s6 = spectrum[
x ][y + q2][z + q3];
723 s7 = spectrum[x - q1][
y ][z + q3];
724 s8 = spectrum[
x ][y - q2][z + q3];
725 s9 = spectrum[x - q1][y + q2][
z ];
726 s10 = spectrum[x - q1][y - q2][
z ];
727 s11 = spectrum[x + q1][y + q2][
z ];
728 s12 = spectrum[x + q1][y - q2][
z ];
729 r1 = spectrum[
x ][
y ][z - q3];
730 r2 = spectrum[
x ][
y ][z + q3];
731 r3 = spectrum[x - q1][
y ][
z ];
732 r4 = spectrum[x + q1][
y ][
z ];
733 r5 = spectrum[
x ][y + q2][
z ];
734 r6 = spectrum[
x ][y - q2][
z ];
735 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;
736 c = -(s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 4+(r1 + r2 + r3 + r4 + r5 + r6) / 2;
737 d = -(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8)/8 + (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12) / 12;
738 if(b < a && b >= 0 && c >=0 && d >= 0)
740 working_space[
x][
y][
z] =
a;
744 for (z = q3; z < ssizez - q3; z++) {
745 for (y = q2; y < ssizey - q2; y++) {
746 for (x = q1; x < ssizex - q1; x++) {
747 spectrum[
x][
y][
z] = working_space[
x][
y][
z];
754 for(i = 0;i < ssizex; i++){
755 for(j = 0;j < ssizey; j++)
756 delete[] working_space[i][j];
757 delete[] working_space[i];
759 delete[] working_space;
858 Double_t nom,nip,nim,sp,sm,spx,smx,
spy,smy,spz,smz,plocha=0;
860 return "Averaging Window must be positive";
862 for(i = 0;i < ssizex; i++){
863 working_space[i] =
new Double_t*[ssizey];
864 for(j = 0;j < ssizey; j++)
865 working_space[i][j] =
new Double_t[ssizez];
873 for(i = 0,maxch = 0;i < ssizex; i++){
874 for(j = 0;j < ssizey; j++){
875 for(k = 0;k < ssizez; k++){
876 working_space[i][j][k] = 0;
877 if(maxch < source[i][j][k])
878 maxch = source[i][j][k];
879 plocha += source[i][j][k];
884 delete [] working_space;
889 working_space[
xmin][
ymin][zmin] = 1;
890 for(i = xmin;i <
xmax; i++){
891 nip = source[i][
ymin][zmin] / maxch;
892 nim = source[i + 1][
ymin][zmin] / maxch;
894 for(l = 1;l <= averWindow; l++){
896 a = source[
xmax][
ymin][zmin] / maxch;
899 a = source[i +
l][
ymin][zmin] / maxch;
912 a = source[
xmin][
ymin][zmin] / maxch;
915 a = source[i - l + 1][
ymin][zmin] / maxch;
929 a = working_space[i + 1][
ymin][zmin] = a * working_space[i][
ymin][zmin];
932 for(i = ymin;i <
ymax; i++){
933 nip = source[
xmin][i][zmin] / maxch;
934 nim = source[
xmin][i + 1][zmin] / maxch;
936 for(l = 1;l <= averWindow; l++){
938 a = source[
xmin][
ymax][zmin] / maxch;
941 a = source[
xmin][i +
l][zmin] / maxch;
954 a = source[
xmin][
ymin][zmin] / maxch;
957 a = source[
xmin][i - l + 1][zmin] / maxch;
971 a = working_space[
xmin][i + 1][zmin] = a * working_space[
xmin][i][zmin];
974 for(i = zmin;i < zmax; i++){
975 nip = source[
xmin][
ymin][i] / maxch;
976 nim = source[
xmin][
ymin][i + 1] / maxch;
978 for(l = 1;l <= averWindow; l++){
980 a = source[
xmin][
ymin][zmax] / maxch;
996 a = source[
xmin][
ymin][zmin] / maxch;
999 a = source[
xmin][
ymin][i - l + 1] / maxch;
1015 for(i = xmin;i <
xmax; i++){
1016 for(j = ymin;j <
ymax; j++){
1017 nip = source[i][j + 1][zmin] / maxch;
1018 nim = source[i + 1][j + 1][zmin] / maxch;
1020 for(l = 1;l <= averWindow; l++){
1022 a = source[
xmax][j][zmin] / maxch;
1025 a = source[i +
l][j][zmin] / maxch;
1037 if(i - l + 1 < xmin)
1038 a = source[
xmin][j][zmin] / maxch;
1041 a = source[i - l + 1][j][zmin] / maxch;
1055 nip = source[i + 1][j][zmin] / maxch;
1056 nim = source[i + 1][j + 1][zmin] / maxch;
1057 for(l = 1;l <= averWindow; l++){
1059 a = source[i][
ymax][zmin] / maxch;
1062 a = source[i][j +
l][zmin] / maxch;
1074 if(j - l + 1 < ymin)
1075 a = source[i][
ymin][zmin] / maxch;
1078 a = source[i][j - l + 1][zmin] / maxch;
1091 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
1092 working_space[i + 1][j + 1][zmin] =
a;
1096 for(i = xmin;i <
xmax; i++){
1097 for(j = zmin;j < zmax; j++){
1098 nip = source[i][
ymin][j + 1] / maxch;
1099 nim = source[i + 1][
ymin][j + 1] / maxch;
1101 for(l = 1;l <= averWindow; l++){
1106 a = source[i +
l][
ymin][j] / maxch;
1118 if(i - l + 1 < xmin)
1122 a = source[i - l + 1][
ymin][j] / maxch;
1136 nip = source[i + 1][
ymin][j] / maxch;
1137 nim = source[i + 1][
ymin][j + 1] / maxch;
1138 for(l = 1;l <= averWindow; l++){
1140 a = source[i][
ymin][zmax] / maxch;
1143 a = source[i][
ymin][j +
l] / maxch;
1155 if(j - l + 1 < zmin)
1156 a = source[i][
ymin][zmin] / maxch;
1159 a = source[i][
ymin][j - l + 1] / maxch;
1172 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
1173 working_space[i + 1][
ymin][j + 1] =
a;
1177 for(i = ymin;i <
ymax; i++){
1178 for(j = zmin;j < zmax; j++){
1179 nip = source[
xmin][i][j + 1] / maxch;
1180 nim = source[
xmin][i + 1][j + 1] / maxch;
1182 for(l = 1;l <= averWindow; l++){
1187 a = source[
xmin][i +
l][j] / maxch;
1199 if(i - l + 1 < ymin)
1203 a = source[
xmin][i - l + 1][j] / maxch;
1217 nip = source[
xmin][i + 1][j] / maxch;
1218 nim = source[
xmin][i + 1][j + 1] / maxch;
1219 for(l = 1;l <= averWindow; l++){
1221 a = source[
xmin][i][zmax] / maxch;
1224 a = source[
xmin][i][j +
l] / maxch;
1236 if(j - l + 1 < zmin)
1237 a = source[
xmin][i][zmin] / maxch;
1240 a = source[
xmin][i][j - l + 1] / maxch;
1253 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
1254 working_space[
xmin][i + 1][j + 1] =
a;
1258 for(i = xmin;i <
xmax; i++){
1259 for(j = ymin;j <
ymax; j++){
1260 for(k = zmin;k < zmax; k++){
1261 nip = source[i][j + 1][k + 1] / maxch;
1262 nim = source[i + 1][j + 1][k + 1] / maxch;
1264 for(l = 1;l <= averWindow; l++){
1266 a = source[
xmax][j][k] / maxch;
1269 a = source[i +
l][j][k] / maxch;
1281 if(i - l + 1 < xmin)
1282 a = source[
xmin][j][k] / maxch;
1285 a = source[i - l + 1][j][k] / maxch;
1299 nip = source[i + 1][j][k + 1] / maxch;
1300 nim = source[i + 1][j + 1][k + 1] / maxch;
1301 for(l = 1;l <= averWindow; l++){
1303 a = source[i][
ymax][k] / maxch;
1306 a = source[i][j +
l][k] / maxch;
1318 if(j - l + 1 < ymin)
1319 a = source[i][
ymin][k] / maxch;
1322 a = source[i][j - l + 1][k] / maxch;
1336 nip = source[i + 1][j + 1][k] / maxch;
1337 nim = source[i + 1][j + 1][k + 1] / maxch;
1338 for(l = 1;l <= averWindow; l++){
1340 a = source[i][j][zmax] / maxch;
1343 a = source[i][j][k +
l] / maxch;
1355 if(j - l + 1 < ymin)
1356 a = source[i][j][zmin] / maxch;
1359 a = source[i][j][k - l + 1] / maxch;
1372 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);
1373 working_space[i + 1][j + 1][k + 1] =
a;
1378 for(i = xmin;i <=
xmax; i++){
1379 for(j = ymin;j <=
ymax; j++){
1380 for(k = zmin;k <= zmax; k++){
1381 working_space[i][j][k] = working_space[i][j][k] / nom;
1385 for(i = 0;i < ssizex; i++){
1386 for(j = 0;j < ssizey; j++){
1387 for(k = 0;k < ssizez; k++){
1388 source[i][j][k] = plocha * working_space[i][j][k];
1392 for(i = 0;i < ssizex; i++){
1393 for(j = 0;j < ssizey; j++)
1394 delete[] working_space[i][j];
1395 delete[] working_space[i];
1397 delete[] working_space;
1589 Int_t numberIterations,
1590 Int_t numberRepetitions,
1593 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;
1594 Double_t lda, ldb, ldc, area, maximum = 0;
1595 if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
1596 return "Wrong parameters";
1597 if (numberIterations <= 0)
1598 return "Number of iterations must be positive";
1599 if (numberRepetitions <= 0)
1600 return "Number of repetitions must be positive";
1602 for(i=0;i<ssizex;i++){
1603 working_space[i]=
new Double_t* [ssizey];
1604 for(j=0;j<ssizey;j++)
1605 working_space[i][j]=
new Double_t [5*ssizez];
1608 lhx = -1, lhy = -1, lhz = -1;
1609 for (i = 0; i < ssizex; i++) {
1610 for (j = 0; j < ssizey; j++) {
1611 for (k = 0; k < ssizez; k++) {
1612 lda = resp[i][j][k];
1621 working_space[i][j][k] = lda;
1623 if (lda > maximum) {
1625 positx = i, posity = j, positz = k;
1630 if (lhx == -1 || lhy == -1 || lhz == -1) {
1631 delete [] working_space;
1632 return (
"Zero response data");
1636 for (i3 = 0; i3 < ssizez; i3++) {
1637 for (i2 = 0; i2 < ssizey; i2++) {
1638 for (i1 = 0; i1 < ssizex; i1++) {
1640 for (j3 = 0; j3 <= (lhz - 1); j3++) {
1641 for (j2 = 0; j2 <= (lhy - 1); j2++) {
1642 for (j1 = 0; j1 <= (lhx - 1); j1++) {
1643 k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
1644 if (k3 >= 0 && k3 < ssizez && k2 >= 0 && k2 < ssizey && k1 >= 0 && k1 < ssizex) {
1645 lda = working_space[j1][j2][j3];
1646 ldb = source[k1][k2][k3];
1647 ldc = ldc + lda * ldb;
1652 working_space[i1][i2][i3 + ssizez] = ldc;
1658 i1min = -(lhx - 1), i1max = lhx - 1;
1659 i2min = -(lhy - 1), i2max = lhy - 1;
1660 i3min = -(lhz - 1), i3max = lhz - 1;
1661 for (i3 = i3min; i3 <= i3max; i3++) {
1662 for (i2 = i2min; i2 <= i2max; i2++) {
1663 for (i1 = i1min; i1 <= i1max; i1++) {
1668 j3max = lhz - 1 - i3;
1669 if (j3max > lhz - 1)
1671 for (j3 = j3min; j3 <= j3max; j3++) {
1675 j2max = lhy - 1 - i2;
1676 if (j2max > lhy - 1)
1678 for (j2 = j2min; j2 <= j2max; j2++) {
1682 j1max = lhx - 1 - i1;
1683 if (j1max > lhx - 1)
1685 for (j1 = j1min; j1 <= j1max; j1++) {
1686 lda = working_space[j1][j2][j3];
1687 if (i1 + j1 < ssizex && i2 + j2 < ssizey)
1688 ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
1691 ldc = ldc + lda * ldb;
1695 working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * ssizez ] = ldc;
1701 for (i3 = 0; i3 < ssizez; i3++) {
1702 for (i2 = 0; i2 < ssizey; i2++) {
1703 for (i1 = 0; i1 < ssizex; i1++) {
1704 working_space[i1][i2][i3 + 3 * ssizez] = 1;
1705 working_space[i1][i2][i3 + 4 * ssizez] = 0;
1711 for (repet = 0; repet < numberRepetitions; repet++) {
1713 for (i = 0; i < ssizex; i++) {
1714 for (j = 0; j < ssizey; j++) {
1715 for (k = 0; k < ssizez; k++) {
1716 working_space[i][j][k + 3 * ssizez] =
TMath::Power(working_space[i][j][k + 3 * ssizez],boost);
1721 for (lindex = 0; lindex < numberIterations; lindex++) {
1722 for (i3 = 0; i3 < ssizez; i3++) {
1723 for (i2 = 0; i2 < ssizey; i2++) {
1724 for (i1 = 0; i1 < ssizex; i1++) {
1727 if (j3min > lhz - 1)
1730 j3max = ssizez - i3 - 1;
1731 if (j3max > lhz - 1)
1734 if (j2min > lhy - 1)
1737 j2max = ssizey - i2 - 1;
1738 if (j2max > lhy - 1)
1741 if (j1min > lhx - 1)
1744 j1max = ssizex - i1 - 1;
1745 if (j1max > lhx - 1)
1747 for (j3 = j3min; j3 <= j3max; j3++) {
1748 for (j2 = j2min; j2 <= j2max; j2++) {
1749 for (j1 = j1min; j1 <= j1max; j1++) {
1750 ldc = working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * ssizez];
1751 lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * ssizez];
1752 ldb = ldb + lda * ldc;
1756 lda = working_space[i1][i2][i3 + 3 * ssizez];
1757 ldc = working_space[i1][i2][i3 + 1 * ssizez];
1758 if (ldc * lda != 0 && ldb != 0) {
1759 lda = lda * ldc / ldb;
1764 working_space[i1][i2][i3 + 4 * ssizez] = lda;
1768 for (i3 = 0; i3 < ssizez; i3++) {
1769 for (i2 = 0; i2 < ssizey; i2++) {
1770 for (i1 = 0; i1 < ssizex; i1++)
1771 working_space[i1][i2][i3 + 3 * ssizez] = working_space[i1][i2][i3 + 4 * ssizez];
1776 for (i = 0; i < ssizex; i++) {
1777 for (j = 0; j < ssizey; j++){
1778 for (k = 0; k < ssizez; k++)
1779 source[(i + positx) % ssizex][(j + posity) % ssizey][(k + positz) % ssizez] = area * working_space[i][j][k + 3 * ssizez];
1782 delete [] working_space;
1932 Int_t number_of_iterations = (
Int_t)(4 * sigma + 0.5);
1935 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;
1937 Double_t a,b,maxch,plocha = 0,plocha_markov = 0;
1938 Double_t nom,nip,nim,sp,sm,spx,
spy,smx,smy,spz,smz;
1939 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;
1942 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;
1944 Error(
"SearchHighRes",
"Invalid sigma, must be greater than or equal to 1");
1948 if(threshold<=0||threshold>=100){
1949 Error(
"SearchHighRes",
"Invalid threshold, must be positive and less than 100");
1953 j = (
Int_t)(pocet_sigma*sigma+0.5);
1955 Error(
"SearchHighRes",
"Too large sigma");
1959 if (markov ==
true) {
1960 if (averWindow <= 0) {
1961 Error(
"SearchHighRes",
"Averaging window must be positive");
1966 if(backgroundRemove ==
true){
1967 if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
1968 Error(
"SearchHighRes",
"Too large clipping window");
1973 i = (
Int_t)(4 * sigma + 0.5);
1976 for(j = 0;j < ssizex + i; j++){
1977 working_space[j] =
new Double_t* [ssizey + i];
1978 for(k = 0;k < ssizey + i; k++)
1979 working_space[j][k] =
new Double_t [5 * (ssizez + i)];
1981 for(k = 0;k < sizez_ext; k++){
1982 for(j = 0;j < sizey_ext; j++){
1983 for(i = 0;i < sizex_ext; i++){
1987 working_space[i][j][k + sizez_ext] = source[0][0][0];
1989 else if(k >= ssizez + shift)
1990 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
1993 working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
1996 else if(j >= ssizey + shift){
1998 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
2000 else if(k >= ssizez + shift)
2001 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
2004 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
2009 working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
2011 else if(k >= ssizez + shift)
2012 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
2015 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
2019 else if(i >= ssizex + shift){
2022 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
2024 else if(k >= ssizez + shift)
2025 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
2028 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
2031 else if(j >= ssizey + shift){
2033 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
2035 else if(k >= ssizez + shift)
2036 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
2039 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
2044 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
2046 else if(k >= ssizez + shift)
2047 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
2050 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
2057 working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
2059 else if(k >= ssizez + shift)
2060 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
2063 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
2066 else if(j >= ssizey + shift){
2068 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
2070 else if(k >= ssizez + shift)
2071 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
2074 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
2079 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
2081 else if(k >= ssizez + shift)
2082 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
2085 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
2091 if(backgroundRemove ==
true){
2092 for(i = 1;i <= number_of_iterations; i++){
2093 for(z = i;z < sizez_ext - i; z++){
2094 for(y = i;y < sizey_ext - i; y++){
2095 for(x = i;x < sizex_ext - i; x++){
2096 a = working_space[
x][
y][z + sizez_ext];
2097 p1 = working_space[x + i][y + i][z - i + sizez_ext];
2098 p2 = working_space[x - i][y + i][z - i + sizez_ext];
2099 p3 = working_space[x + i][y - i][z - i + sizez_ext];
2100 p4 = working_space[x - i][y - i][z - i + sizez_ext];
2101 p5 = working_space[x + i][y + i][z + i + sizez_ext];
2102 p6 = working_space[x - i][y + i][z + i + sizez_ext];
2103 p7 = working_space[x + i][y - i][z + i + sizez_ext];
2104 p8 = working_space[x - i][y - i][z + i + sizez_ext];
2105 s1 = working_space[x + i][
y ][z - i + sizez_ext];
2106 s2 = working_space[
x ][y + i][z - i + sizez_ext];
2107 s3 = working_space[x - i][
y ][z - i + sizez_ext];
2108 s4 = working_space[
x ][y - i][z - i + sizez_ext];
2109 s5 = working_space[x + i][
y ][z + i + sizez_ext];
2110 s6 = working_space[
x ][y + i][z + i + sizez_ext];
2111 s7 = working_space[x - i][
y ][z + i + sizez_ext];
2112 s8 = working_space[
x ][y - i][z + i + sizez_ext];
2113 s9 = working_space[x - i][y + i][z + sizez_ext];
2114 s10 = working_space[x - i][y - i][z +sizez_ext];
2115 s11 = working_space[x + i][y + i][z +sizez_ext];
2116 s12 = working_space[x + i][y - i][z +sizez_ext];
2117 r1 = working_space[
x ][
y ][z - i + sizez_ext];
2118 r2 = working_space[
x ][
y ][z + i + sizez_ext];
2119 r3 = working_space[x - i][
y ][z + sizez_ext];
2120 r4 = working_space[x + i][
y ][z + sizez_ext];
2121 r5 = working_space[
x ][y + i][z + sizez_ext];
2122 r6 = working_space[
x ][y - i][z + sizez_ext];
2123 b = (p1 +
p3) / 2.0;
2127 b = (p1 +
p2) / 2.0;
2131 b = (p2 + p4) / 2.0;
2135 b = (p3 + p4) / 2.0;
2139 b = (p5 + p7) / 2.0;
2143 b = (p5 + p6) / 2.0;
2147 b = (p6 + p8) / 2.0;
2151 b = (p7 + p8) / 2.0;
2155 b = (p2 + p6) / 2.0;
2159 b = (p4 + p8) / 2.0;
2163 b = (p1 + p5) / 2.0;
2167 b = (p3 + p7) / 2.0;
2171 s1 = s1 - (p1 +
p3) / 2.0;
2172 s2 = s2 - (p1 +
p2) / 2.0;
2173 s3 = s3 - (p2 + p4) / 2.0;
2174 s4 = s4 - (p3 + p4) / 2.0;
2175 s5 = s5 - (p5 + p7) / 2.0;
2176 s6 = s6 - (p5 + p6) / 2.0;
2177 s7 = s7 - (p6 + p8) / 2.0;
2178 s8 = s8 - (p7 + p8) / 2.0;
2179 s9 = s9 - (p2 + p6) / 2.0;
2180 s10 = s10 - (p4 + p8) / 2.0;
2181 s11 = s11 - (p1 + p5) / 2.0;
2182 s12 = s12 - (p3 + p7) / 2.0;
2183 b = (s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
2187 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
2191 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
2195 b = (s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
2199 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
2203 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
2207 r1 = r1 - ((s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
2208 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
2209 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
2210 r4 = r4 - ((s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
2211 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
2212 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
2213 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;
2217 working_space[
x][
y][
z] =
a;
2221 for(z = i;z < sizez_ext - i; z++){
2222 for(y = i;y < sizey_ext - i; y++){
2223 for(x = i;x < sizex_ext - i; x++){
2224 working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][
z];
2229 for(k = 0;k < sizez_ext; k++){
2230 for(j = 0;j < sizey_ext; j++){
2231 for(i = 0;i < sizex_ext; i++){
2235 working_space[i][j][k + sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
2237 else if(k >= ssizez + shift)
2238 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2241 working_space[i][j][k + sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
2244 else if(j >= ssizey + shift){
2246 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2248 else if(k >= ssizez + shift)
2249 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2252 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2257 working_space[i][j][k + sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
2259 else if(k >= ssizez + shift)
2260 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2263 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2267 else if(i >= ssizex + shift){
2270 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
2272 else if(k >= ssizez + shift)
2273 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2276 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
2279 else if(j >= ssizey + shift){
2281 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2283 else if(k >= ssizez + shift)
2284 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2287 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2292 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
2294 else if(k >= ssizez + shift)
2295 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2298 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2305 working_space[i][j][k + sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
2307 else if(k >= ssizez + shift)
2308 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
2311 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
2314 else if(j >= ssizey + shift){
2316 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
2318 else if(k >= ssizez + shift)
2319 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
2322 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
2327 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
2329 else if(k >= ssizez + shift)
2330 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
2333 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
2342 for(i = 0;i < sizex_ext; i++){
2343 for(j = 0;j < sizey_ext; j++){
2344 for(k = 0;k < sizez_ext; k++){
2345 working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][sizez_ext + k];
2346 plocha_markov = plocha_markov + working_space[i][j][sizez_ext + k];
2351 xmax = sizex_ext - 1;
2353 ymax = sizey_ext - 1;
2355 zmax = sizez_ext - 1;
2356 for(i = 0,maxch = 0;i < sizex_ext; i++){
2357 for(j = 0;j < sizey_ext;j++){
2358 for(k = 0;k < sizez_ext;k++){
2359 working_space[i][j][k] = 0;
2360 if(maxch < working_space[i][j][k + 2 * sizez_ext])
2361 maxch = working_space[i][j][k + 2 * sizez_ext];
2363 plocha += working_space[i][j][k + 2 * sizez_ext];
2368 delete [] working_space;
2372 working_space[
xmin][
ymin][zmin] = 1;
2373 for(i = xmin;i <
xmax; i++){
2374 nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2375 nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
2377 for(l = 1;l <= averWindow; l++){
2379 a = working_space[xmax][ymin][zmin + 2 * sizez_ext] / maxch;
2382 a = working_space[i +
l][
ymin][zmin + 2 * sizez_ext] / maxch;
2394 if(i - l + 1 < xmin)
2395 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2398 a = working_space[i - l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
2412 a = working_space[i + 1][
ymin][zmin] = a * working_space[i][
ymin][zmin];
2415 for(i = ymin;i <
ymax; i++){
2416 nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
2417 nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
2419 for(l = 1;l <= averWindow; l++){
2421 a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
2424 a = working_space[
xmin][i +
l][zmin + 2 * sizez_ext] / maxch;
2436 if(i - l + 1 < ymin)
2437 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2440 a = working_space[
xmin][i - l + 1][zmin + 2 * sizez_ext] / maxch;
2454 a = working_space[
xmin][i + 1][zmin] = a * working_space[
xmin][i][zmin];
2457 for(i = zmin;i < zmax;i++){
2458 nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
2459 nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
2461 for(l = 1;l <= averWindow;l++){
2463 a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
2466 a = working_space[
xmin][
ymin][i + l + 2 * sizez_ext] / maxch;
2478 if(i - l + 1 < zmin)
2479 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
2482 a = working_space[
xmin][
ymin][i - l + 1 + 2 * sizez_ext] / maxch;
2499 for(i = xmin;i <
xmax; i++){
2500 for(j = ymin;j <
ymax; j++){
2501 nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
2502 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
2504 for(l = 1;l <= averWindow; l++){
2506 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
2509 a = working_space[i +
l][j][zmin + 2 * sizez_ext] / maxch;
2521 if(i - l + 1 < xmin)
2522 a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
2525 a = working_space[i - l + 1][j][zmin + 2 * sizez_ext] / maxch;
2539 nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
2540 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
2541 for(l = 1;l <= averWindow; l++){
2543 a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
2546 a = working_space[i][j +
l][zmin + 2 * sizez_ext] / maxch;
2558 if(j - l + 1 < ymin)
2559 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2562 a = working_space[i][j - l + 1][zmin + 2 * sizez_ext] / maxch;
2575 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
2576 working_space[i + 1][j + 1][zmin] =
a;
2580 for(i = xmin;i <
xmax;i++){
2581 for(j = zmin;j < zmax;j++){
2582 nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2583 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2585 for(l = 1;l <= averWindow; l++){
2587 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
2590 a = working_space[i +
l][
ymin][j + 2 * sizez_ext] / maxch;
2602 if(i - l + 1 < xmin)
2603 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
2606 a = working_space[i - l + 1][
ymin][j + 2 * sizez_ext] / maxch;
2620 nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
2621 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
2622 for(l = 1;l <= averWindow; l++){
2624 a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
2627 a = working_space[i][
ymin][j + l + 2 * sizez_ext] / maxch;
2639 if(j - l + 1 < zmin)
2640 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
2643 a = working_space[i][
ymin][j - l + 1 + 2 * sizez_ext] / maxch;
2656 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
2657 working_space[i + 1][
ymin][j + 1] =
a;
2661 for(i = ymin;i <
ymax;i++){
2662 for(j = zmin;j < zmax;j++){
2663 nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
2664 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
2666 for(l = 1;l <= averWindow; l++){
2668 a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
2671 a = working_space[
xmin][i +
l][j + 2 * sizez_ext] / maxch;
2683 if(i - l + 1 < ymin)
2684 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
2687 a = working_space[
xmin][i - l + 1][j + 2 * sizez_ext] / maxch;
2701 nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
2702 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
2703 for(l = 1;l <= averWindow; l++){
2705 a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
2708 a = working_space[
xmin][i][j + l + 2 * sizez_ext] / maxch;
2720 if(j - l + 1 < zmin)
2721 a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
2724 a = working_space[
xmin][i][j - l + 1 + 2 * sizez_ext] / maxch;
2737 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
2738 working_space[
xmin][i + 1][j + 1] =
a;
2742 for(i = xmin;i <
xmax; i++){
2743 for(j = ymin;j <
ymax; j++){
2744 for(k = zmin;k < zmax; k++){
2745 nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2746 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2748 for(l = 1;l <= averWindow; l++){
2750 a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
2753 a = working_space[i +
l][j][k + 2 * sizez_ext] / maxch;
2765 if(i - l + 1 < xmin)
2766 a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
2769 a = working_space[i - l + 1][j][k + 2 * sizez_ext] / maxch;
2783 nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
2784 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2785 for(l = 1;l <= averWindow; l++){
2787 a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
2790 a = working_space[i][j +
l][k + 2 * sizez_ext] / maxch;
2802 if(j - l + 1 < ymin)
2803 a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
2806 a = working_space[i][j - l + 1][k + 2 * sizez_ext] / maxch;
2820 nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
2821 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
2822 for(l = 1;l <= averWindow; l++ ){
2824 a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
2827 a = working_space[i][j][k + l + 2 * sizez_ext] / maxch;
2839 if(j - l + 1 < ymin)
2840 a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
2843 a = working_space[i][j][k - l + 1 + 2 * sizez_ext] / maxch;
2856 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);
2857 working_space[i + 1][j + 1][k + 1] =
a;
2863 for(i = xmin;i <=
xmax; i++){
2864 for(j = ymin;j <=
ymax; j++){
2865 for(k = zmin;k <= zmax; k++){
2866 working_space[i][j][k] = working_space[i][j][k] / nom;
2867 a+=working_space[i][j][k];
2871 for(i = 0;i < sizex_ext; i++){
2872 for(j = 0;j < sizey_ext; j++){
2873 for(k = 0;k < sizez_ext; k++){
2874 working_space[i][j][k + sizez_ext] = working_space[i][j][k] * plocha_markov /
a;
2881 lhx = -1,lhy = -1,lhz = -1;
2882 positx = 0,posity = 0,positz = 0;
2885 for(i = 0;i < sizex_ext; i++){
2886 for(j = 0;j < sizey_ext; j++){
2887 for(k = 0;k < sizez_ext; k++){
2891 lda = (lda * lda + ldb * ldb + ldc * ldc) / (2 * sigma * sigma);
2904 working_space[i][j][k] = lda;
2908 positx = i,posity = j,positz = k;
2914 for(i = 0;i < sizex_ext; i++){
2915 for(j = 0;j < sizey_ext; j++){
2916 for(k = 0;k < sizez_ext; k++){
2917 working_space[i][j][k + 2 * sizez_ext] =
TMath::Abs(working_space[i][j][k + sizez_ext]);
2922 for (i3 = 0; i3 < sizez_ext; i3++) {
2923 for (i2 = 0; i2 < sizey_ext; i2++) {
2924 for (i1 = 0; i1 < sizex_ext; i1++) {
2926 for (j3 = 0; j3 <= (lhz - 1); j3++) {
2927 for (j2 = 0; j2 <= (lhy - 1); j2++) {
2928 for (j1 = 0; j1 <= (lhx - 1); j1++) {
2929 k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
2930 if (k3 >= 0 && k3 < sizez_ext && k2 >= 0 && k2 < sizey_ext && k1 >= 0 && k1 < sizex_ext) {
2931 lda = working_space[j1][j2][j3];
2932 ldb = working_space[k1][k2][k3+2*sizez_ext];
2933 ldc = ldc + lda * ldb;
2938 working_space[i1][i2][i3 + sizez_ext] = ldc;
2943 i1min = -(lhx - 1), i1max = lhx - 1;
2944 i2min = -(lhy - 1), i2max = lhy - 1;
2945 i3min = -(lhz - 1), i3max = lhz - 1;
2946 for (i3 = i3min; i3 <= i3max; i3++) {
2947 for (i2 = i2min; i2 <= i2max; i2++) {
2948 for (i1 = i1min; i1 <= i1max; i1++) {
2954 j3max = lhz - 1 - i3;
2955 if (j3max > lhz - 1)
2958 for (j3 = j3min; j3 <= j3max; j3++) {
2963 j2max = lhy - 1 - i2;
2964 if (j2max > lhy - 1)
2967 for (j2 = j2min; j2 <= j2max; j2++) {
2972 j1max = lhx - 1 - i1;
2973 if (j1max > lhx - 1)
2976 for (j1 = j1min; j1 <= j1max; j1++) {
2977 lda = working_space[j1][j2][j3];
2978 if (i1 + j1 < sizex_ext && i2 + j2 < sizey_ext)
2979 ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
2984 ldc = ldc + lda * ldb;
2988 working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * sizez_ext ] = ldc;
2993 for (i3 = 0; i3 < sizez_ext; i3++) {
2994 for (i2 = 0; i2 < sizey_ext; i2++) {
2995 for (i1 = 0; i1 < sizex_ext; i1++) {
2996 working_space[i1][i2][i3 + 3 * sizez_ext] = 1;
2997 working_space[i1][i2][i3 + 4 * sizez_ext] = 0;
3003 for (lindex=0;lindex<deconIterations;lindex++){
3004 for (i3 = 0; i3 < sizez_ext; i3++) {
3005 for (i2 = 0; i2 < sizey_ext; i2++) {
3006 for (i1 = 0; i1 < sizex_ext; i1++) {
3007 if (
TMath::Abs(working_space[i1][i2][i3 + 3 * sizez_ext])>1e-6 &&
TMath::Abs(working_space[i1][i2][i3 + 1 * sizez_ext])>1e-6){
3010 if (j3min > lhz - 1)
3014 j3max = sizez_ext - i3 - 1;
3015 if (j3max > lhz - 1)
3019 if (j2min > lhy - 1)
3023 j2max = sizey_ext - i2 - 1;
3024 if (j2max > lhy - 1)
3028 if (j1min > lhx - 1)
3032 j1max = sizex_ext - i1 - 1;
3033 if (j1max > lhx - 1)
3036 for (j3 = j3min; j3 <= j3max; j3++) {
3037 for (j2 = j2min; j2 <= j2max; j2++) {
3038 for (j1 = j1min; j1 <= j1max; j1++) {
3039 ldc = working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * sizez_ext];
3040 lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * sizez_ext];
3041 ldb = ldb + lda * ldc;
3045 lda = working_space[i1][i2][i3 + 3 * sizez_ext];
3046 ldc = working_space[i1][i2][i3 + 1 * sizez_ext];
3047 if (ldc * lda != 0 && ldb != 0) {
3048 lda = lda * ldc / ldb;
3053 working_space[i1][i2][i3 + 4 * sizez_ext] = lda;
3058 for (i3 = 0; i3 < sizez_ext; i3++) {
3059 for (i2 = 0; i2 < sizey_ext; i2++) {
3060 for (i1 = 0; i1 < sizex_ext; i1++)
3061 working_space[i1][i2][i3 + 3 * sizez_ext] = working_space[i1][i2][i3 + 4 * sizez_ext];
3067 for(i = 0;i < sizex_ext; i++){
3068 for(j = 0;j < sizey_ext; j++){
3069 for(k = 0;k < sizez_ext; k++){
3070 working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext] = area * working_space[i][j][k + 3 * sizez_ext];
3071 if(maximum < working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext])
3072 maximum = working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext];
3077 for(i = 1;i < sizex_ext - 1; i++){
3078 for(j = 1;j < sizey_ext - 1; j++){
3079 for(l = 1;l < sizez_ext - 1; l++){
3080 a = working_space[i][j][
l];
3081 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]){
3082 if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && l >= shift && l < ssizez + shift){
3083 if(working_space[i][j][l] > threshold * maximum / 100.0){
3085 for(k = i - 1,a = 0,b = 0;k <= i + 1; k++){
3086 a += (
Double_t)(k - shift) * working_space[k][j][
l];
3087 b += working_space[k][j][
l];
3090 for(k = j - 1,a = 0,b = 0;k <= j + 1; k++){
3091 a += (
Double_t)(k - shift) * working_space[i][k][
l];
3092 b += working_space[i][k][
l];
3095 for(k = l - 1,a = 0,b = 0;k <= l + 1; k++){
3096 a += (
Double_t)(k - shift) * working_space[i][j][k];
3097 b += working_space[i][j][k];
3108 for(i = 0;i < ssizex; i++){
3109 for(j = 0;j < ssizey; j++){
3110 for(k = 0;k < ssizez; k++){
3111 dest[i][j][k] = working_space[i + shift][j + shift][k + shift];
3115 k = (
Int_t)(4 * sigma + 0.5);
3117 for(i = 0;i < ssizex + k; i++){
3118 for(j = 0;j < ssizey + k; j++)
3119 delete[] working_space[i][j];
3120 delete[] working_space[i];
3122 delete[] working_space;
3152 Int_t i,j,k,
l,li,lj,lk,lmin,lmax,
xmin,
xmax,
ymin,
ymax,zmin,zmax;
3153 Double_t maxch,plocha = 0,plocha_markov = 0;
3154 Double_t nom,nip,nim,sp,sm,spx,
spy,smx,smy,spz,smz;
3155 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;
3158 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;
3160 Int_t number_of_iterations=(
Int_t)(4 * sigma + 0.5);
3161 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;
3164 Error(
"SearchFast",
"Invalid sigma, must be greater than or equal to 1");
3168 if(threshold<=0||threshold>=100){
3169 Error(
"SearchFast",
"Invalid threshold, must be positive and less than 100");
3173 j = (
Int_t)(pocet_sigma*sigma+0.5);
3175 Error(
"SearchFast",
"Too large sigma");
3179 if (markov ==
true) {
3180 if (averWindow <= 0) {
3181 Error(
"SearchFast",
"Averaging window must be positive");
3186 if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
3187 Error(
"SearchFast",
"Too large clipping window");
3191 i = (
Int_t)(4 * sigma + 0.5);
3194 for(j = 0;j < ssizex + i; j++){
3195 working_space[j] =
new Double_t* [ssizey + i];
3196 for(k = 0;k < ssizey + i; k++)
3197 working_space[j][k] =
new Double_t [4 * (ssizez + i)];
3200 for(k = 0;k < sizez_ext; k++){
3201 for(j = 0;j < sizey_ext; j++){
3202 for(i = 0;i < sizex_ext; i++){
3206 working_space[i][j][k + sizez_ext] = source[0][0][0];
3208 else if(k >= ssizez + shift)
3209 working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
3212 working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
3215 else if(j >= ssizey + shift){
3217 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
3219 else if(k >= ssizez + shift)
3220 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
3223 working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
3228 working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
3230 else if(k >= ssizez + shift)
3231 working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
3234 working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
3238 else if(i >= ssizex + shift){
3241 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
3243 else if(k >= ssizez + shift)
3244 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
3247 working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
3250 else if(j >= ssizey + shift){
3252 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
3254 else if(k >= ssizez + shift)
3255 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
3258 working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
3263 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
3265 else if(k >= ssizez + shift)
3266 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
3269 working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
3276 working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
3278 else if(k >= ssizez + shift)
3279 working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
3282 working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
3285 else if(j >= ssizey + shift){
3287 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
3289 else if(k >= ssizez + shift)
3290 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
3293 working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
3298 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
3300 else if(k >= ssizez + shift)
3301 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
3304 working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
3310 for(i = 1;i <= number_of_iterations; i++){
3311 for(z = i;z < sizez_ext - i; z++){
3312 for(y = i;y < sizey_ext - i; y++){
3313 for(x = i;x < sizex_ext - i; x++){
3314 a = working_space[
x][
y][z + sizez_ext];
3315 p1 = working_space[x + i][y + i][z - i + sizez_ext];
3316 p2 = working_space[x - i][y + i][z - i + sizez_ext];
3317 p3 = working_space[x + i][y - i][z - i + sizez_ext];
3318 p4 = working_space[x - i][y - i][z - i + sizez_ext];
3319 p5 = working_space[x + i][y + i][z + i + sizez_ext];
3320 p6 = working_space[x - i][y + i][z + i + sizez_ext];
3321 p7 = working_space[x + i][y - i][z + i + sizez_ext];
3322 p8 = working_space[x - i][y - i][z + i + sizez_ext];
3323 s1 = working_space[x + i][
y ][z - i + sizez_ext];
3324 s2 = working_space[
x ][y + i][z - i + sizez_ext];
3325 s3 = working_space[x - i][
y ][z - i + sizez_ext];
3326 s4 = working_space[
x ][y - i][z - i + sizez_ext];
3327 s5 = working_space[x + i][
y ][z + i + sizez_ext];
3328 s6 = working_space[
x ][y + i][z + i + sizez_ext];
3329 s7 = working_space[x - i][
y ][z + i + sizez_ext];
3330 s8 = working_space[
x ][y - i][z + i + sizez_ext];
3331 s9 = working_space[x - i][y + i][z + sizez_ext];
3332 s10 = working_space[x - i][y - i][z +sizez_ext];
3333 s11 = working_space[x + i][y + i][z +sizez_ext];
3334 s12 = working_space[x + i][y - i][z +sizez_ext];
3335 r1 = working_space[
x ][
y ][z - i + sizez_ext];
3336 r2 = working_space[
x ][
y ][z + i + sizez_ext];
3337 r3 = working_space[x - i][
y ][z + sizez_ext];
3338 r4 = working_space[x + i][
y ][z + sizez_ext];
3339 r5 = working_space[
x ][y + i][z + sizez_ext];
3340 r6 = working_space[
x ][y - i][z + sizez_ext];
3341 b = (p1 +
p3) / 2.0;
3345 b = (p1 +
p2) / 2.0;
3349 b = (p2 + p4) / 2.0;
3353 b = (p3 + p4) / 2.0;
3357 b = (p5 + p7) / 2.0;
3361 b = (p5 + p6) / 2.0;
3365 b = (p6 + p8) / 2.0;
3369 b = (p7 + p8) / 2.0;
3373 b = (p2 + p6) / 2.0;
3377 b = (p4 + p8) / 2.0;
3381 b = (p1 + p5) / 2.0;
3385 b = (p3 + p7) / 2.0;
3389 s1 = s1 - (p1 +
p3) / 2.0;
3390 s2 = s2 - (p1 +
p2) / 2.0;
3391 s3 = s3 - (p2 + p4) / 2.0;
3392 s4 = s4 - (p3 + p4) / 2.0;
3393 s5 = s5 - (p5 + p7) / 2.0;
3394 s6 = s6 - (p5 + p6) / 2.0;
3395 s7 = s7 - (p6 + p8) / 2.0;
3396 s8 = s8 - (p7 + p8) / 2.0;
3397 s9 = s9 - (p2 + p6) / 2.0;
3398 s10 = s10 - (p4 + p8) / 2.0;
3399 s11 = s11 - (p1 + p5) / 2.0;
3400 s12 = s12 - (p3 + p7) / 2.0;
3401 b = (s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
3405 b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
3409 b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
3413 b = (s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
3417 b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
3421 b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
3425 r1 = r1 - ((s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
3426 r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
3427 r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
3428 r4 = r4 - ((s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
3429 r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
3430 r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
3431 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;
3435 working_space[
x][
y][
z] =
a;
3439 for(z = i;z < sizez_ext - i; z++){
3440 for(y = i;y < sizey_ext - i; y++){
3441 for(x = i;x < sizex_ext - i; x++){
3442 working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][
z];
3447 for(k = 0;k < sizez_ext; k++){
3448 for(j = 0;j < sizey_ext; j++){
3449 for(i = 0;i < sizex_ext; i++){
3453 working_space[i][j][k + 3 * sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
3455 else if(k >= ssizez + shift)
3456 working_space[i][j][k + 3 * sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3459 working_space[i][j][k + 3 * sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
3462 else if(j >= ssizey + shift){
3464 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3466 else if(k >= ssizez + shift)
3467 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3470 working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3475 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
3477 else if(k >= ssizez + shift)
3478 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3481 working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3485 else if(i >= ssizex + shift){
3488 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
3490 else if(k >= ssizez + shift)
3491 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3494 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
3497 else if(j >= ssizey + shift){
3499 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3501 else if(k >= ssizez + shift)
3502 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3505 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3510 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
3512 else if(k >= ssizez + shift)
3513 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3516 working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3523 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
3525 else if(k >= ssizez + shift)
3526 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
3529 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
3532 else if(j >= ssizey + shift){
3534 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
3536 else if(k >= ssizez + shift)
3537 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
3540 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
3545 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
3547 else if(k >= ssizez + shift)
3548 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
3551 working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
3558 for(i = 0;i < sizex_ext; i++){
3559 for(j = 0;j < sizey_ext; j++){
3560 for(k = 0;k < sizez_ext; k++){
3561 if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && k >= shift && k < ssizez + shift){
3562 working_space[i][j][k + 2 * sizez_ext] = source[i - shift][j - shift][k - shift];
3563 plocha_markov = plocha_markov + source[i - shift][j - shift][k - shift];
3566 working_space[i][j][k + 2 * sizez_ext] = 0;
3573 xmax = sizex_ext - 1;
3575 ymax = sizey_ext - 1;
3577 zmax = sizez_ext - 1;
3578 for(i = 0,maxch = 0;i < sizex_ext; i++){
3579 for(j = 0;j < sizey_ext;j++){
3580 for(k = 0;k < sizez_ext;k++){
3581 working_space[i][j][k] = 0;
3582 if(maxch < working_space[i][j][k + 2 * sizez_ext])
3583 maxch = working_space[i][j][k + 2 * sizez_ext];
3585 plocha += working_space[i][j][k + 2 * sizez_ext];
3590 delete [] working_space;
3595 working_space[
xmin][
ymin][zmin] = 1;
3596 for(i = xmin;i <
xmax; i++){
3597 nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3598 nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
3600 for(l = 1;l <= averWindow; l++){
3602 a = working_space[xmax][ymin][zmin + 2 * sizez_ext] / maxch;
3605 a = working_space[i +
l][
ymin][zmin + 2 * sizez_ext] / maxch;
3617 if(i - l + 1 < xmin)
3618 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3621 a = working_space[i - l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
3635 a = working_space[i + 1][
ymin][zmin] = a * working_space[i][
ymin][zmin];
3638 for(i = ymin;i <
ymax; i++){
3639 nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
3640 nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
3642 for(l = 1;l <= averWindow; l++){
3644 a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
3647 a = working_space[
xmin][i +
l][zmin + 2 * sizez_ext] / maxch;
3659 if(i - l + 1 < ymin)
3660 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3663 a = working_space[
xmin][i - l + 1][zmin + 2 * sizez_ext] / maxch;
3677 a = working_space[
xmin][i + 1][zmin] = a * working_space[
xmin][i][zmin];
3680 for(i = zmin;i < zmax;i++){
3681 nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
3682 nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
3684 for(l = 1;l <= averWindow;l++){
3686 a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
3689 a = working_space[
xmin][
ymin][i + l + 2 * sizez_ext] / maxch;
3701 if(i - l + 1 < zmin)
3702 a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
3705 a = working_space[
xmin][
ymin][i - l + 1 + 2 * sizez_ext] / maxch;
3722 for(i = xmin;i <
xmax; i++){
3723 for(j = ymin;j <
ymax; j++){
3724 nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
3725 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
3727 for(l = 1;l <= averWindow; l++){
3729 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
3732 a = working_space[i +
l][j][zmin + 2 * sizez_ext] / maxch;
3744 if(i - l + 1 < xmin)
3745 a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
3748 a = working_space[i - l + 1][j][zmin + 2 * sizez_ext] / maxch;
3762 nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
3763 nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
3764 for(l = 1;l <= averWindow; l++){
3766 a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
3769 a = working_space[i][j +
l][zmin + 2 * sizez_ext] / maxch;
3781 if(j - l + 1 < ymin)
3782 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3785 a = working_space[i][j - l + 1][zmin + 2 * sizez_ext] / maxch;
3798 a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
3799 working_space[i + 1][j + 1][zmin] =
a;
3803 for(i = xmin;i <
xmax;i++){
3804 for(j = zmin;j < zmax;j++){
3805 nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3806 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3808 for(l = 1;l <= averWindow; l++){
3810 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
3813 a = working_space[i +
l][
ymin][j + 2 * sizez_ext] / maxch;
3825 if(i - l + 1 < xmin)
3826 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
3829 a = working_space[i - l + 1][
ymin][j + 2 * sizez_ext] / maxch;
3843 nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
3844 nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
3845 for(l = 1;l <= averWindow; l++){
3847 a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
3850 a = working_space[i][
ymin][j + l + 2 * sizez_ext] / maxch;
3862 if(j - l + 1 < zmin)
3863 a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
3866 a = working_space[i][
ymin][j - l + 1 + 2 * sizez_ext] / maxch;
3879 a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
3880 working_space[i + 1][
ymin][j + 1] =
a;
3884 for(i = ymin;i <
ymax;i++){
3885 for(j = zmin;j < zmax;j++){
3886 nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
3887 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
3889 for(l = 1;l <= averWindow; l++){
3891 a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
3894 a = working_space[
xmin][i +
l][j + 2 * sizez_ext] / maxch;
3906 if(i - l + 1 < ymin)
3907 a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
3910 a = working_space[
xmin][i - l + 1][j + 2 * sizez_ext] / maxch;
3924 nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
3925 nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
3926 for(l = 1;l <= averWindow; l++){
3928 a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
3931 a = working_space[
xmin][i][j + l + 2 * sizez_ext] / maxch;
3943 if(j - l + 1 < zmin)
3944 a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
3947 a = working_space[
xmin][i][j - l + 1 + 2 * sizez_ext] / maxch;
3960 a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
3961 working_space[
xmin][i + 1][j + 1] =
a;
3965 for(i = xmin;i <
xmax; i++){
3966 for(j = ymin;j <
ymax; j++){
3967 for(k = zmin;k < zmax; k++){
3968 nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
3969 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
3971 for(l = 1;l <= averWindow; l++){
3973 a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
3976 a = working_space[i +
l][j][k + 2 * sizez_ext] / maxch;
3988 if(i - l + 1 < xmin)
3989 a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
3992 a = working_space[i - l + 1][j][k + 2 * sizez_ext] / maxch;
4006 nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
4007 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4008 for(l = 1;l <= averWindow; l++){
4010 a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
4013 a = working_space[i][j +
l][k + 2 * sizez_ext] / maxch;
4025 if(j - l + 1 < ymin)
4026 a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
4029 a = working_space[i][j - l + 1][k + 2 * sizez_ext] / maxch;
4043 nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
4044 nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
4045 for(l = 1;l <= averWindow; l++ ){
4047 a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
4050 a = working_space[i][j][k + l + 2 * sizez_ext] / maxch;
4062 if(j - l + 1 < ymin)
4063 a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
4066 a = working_space[i][j][k - l + 1 + 2 * sizez_ext] / maxch;
4079 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);
4080 working_space[i + 1][j + 1][k + 1] =
a;
4086 for(i = xmin;i <=
xmax; i++){
4087 for(j = ymin;j <=
ymax; j++){
4088 for(k = zmin;k <= zmax; k++){
4089 working_space[i][j][k] = working_space[i][j][k] / nom;
4090 a+=working_space[i][j][k];
4094 for(i = 0;i < sizex_ext; i++){
4095 for(j = 0;j < sizey_ext; j++){
4096 for(k = 0;k < sizez_ext; k++){
4097 working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][k] * plocha_markov /
a;
4104 for(k = 0;k < ssizez; k++){
4105 for(j = 0;j < ssizey; j++){
4106 for(i = 0;i < ssizex; i++){
4107 working_space[i][j][k] = 0;
4108 working_space[i][j][sizez_ext + k] = 0;
4109 if(working_space[i][j][k + 3 * sizez_ext] > maximum)
4110 maximum=working_space[i][j][k+3*sizez_ext];
4117 j = (
Int_t)(pocet_sigma * sigma + 0.5);
4118 for(i = -j;i <= j; i++){
4121 b = 2.0 * sigma *
sigma;
4126 s = s - sigma *
sigma;
4127 s = s / (sigma * sigma * sigma *
sigma);
4129 c[PEAK_WINDOW / 2 + i] = s;
4136 c[i] = c[i] / norma;
4138 a = pocet_sigma * sigma + 0.5;
4141 zmax = sizez_ext - i - 1;
4143 ymax = sizey_ext - i - 1;
4145 xmax = sizex_ext - i - 1;
4146 lmin = PEAK_WINDOW / 2 - i;
4147 lmax = PEAK_WINDOW / 2 + i;
4148 for(i = xmin;i <=
xmax; i++){
4149 for(j = ymin;j <=
ymax; j++){
4150 for(k = zmin;k <= zmax; k++){
4152 for(li = lmin;li <= lmax; li++){
4153 for(lj = lmin;lj <= lmax; lj++){
4154 for(lk = lmin;lk <= lmax; lk++){
4155 a = working_space[i + li - PEAK_WINDOW / 2][j + lj - PEAK_WINDOW / 2][k + lk - PEAK_WINDOW / 2 + 2 * sizez_ext];
4156 b = c[li] * c[lj] * c[lk];
4162 working_space[i][j][k] = s;
4163 working_space[i][j][k + sizez_ext] =
TMath::Sqrt(f);
4167 for(x = xmin;x <=
xmax; x++){
4168 for(y = ymin + 1;y <
ymax; y++){
4169 for(z = zmin + 1;z < zmax; z++){
4170 val = working_space[
x][
y][
z];
4171 val1 = working_space[x - 1][y - 1][z - 1];
4172 val2 = working_space[
x ][y - 1][z - 1];
4173 val3 = working_space[x + 1][y - 1][z - 1];
4174 val4 = working_space[x - 1][
y ][z - 1];
4175 val5 = working_space[
x ][
y ][z - 1];
4176 val6 = working_space[x + 1][
y ][z - 1];
4177 val7 = working_space[x - 1][y + 1][z - 1];
4178 val8 = working_space[
x ][y + 1][z - 1];
4179 val9 = working_space[x + 1][y + 1][z - 1];
4180 val10 = working_space[x - 1][y - 1][
z ];
4181 val11 = working_space[
x ][y - 1][
z ];
4182 val12 = working_space[x + 1][y - 1][
z ];
4183 val13 = working_space[x - 1][
y ][
z ];
4184 val14 = working_space[x + 1][
y ][
z ];
4185 val15 = working_space[x - 1][y + 1][
z ];
4186 val16 = working_space[
x ][y + 1][
z ];
4187 val17 = working_space[x + 1][y + 1][
z ];
4188 val18 = working_space[x - 1][y - 1][z + 1];
4189 val19 = working_space[
x ][y - 1][z + 1];
4190 val20 = working_space[x + 1][y - 1][z + 1];
4191 val21 = working_space[x - 1][
y ][z + 1];
4192 val22 = working_space[
x ][
y ][z + 1];
4193 val23 = working_space[x + 1][
y ][z + 1];
4194 val24 = working_space[x - 1][y + 1][z + 1];
4195 val25 = working_space[
x ][y + 1][z + 1];
4196 val26 = working_space[x + 1][y + 1][z + 1];
4197 f = -s_f_ratio_peaks * working_space[
x][
y][z + sizez_ext];
4198 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){
4200 for(li = lmin;li <= lmax; li++){
4201 a = working_space[x + li - PEAK_WINDOW / 2][
y][z + 2 * sizez_ext];
4203 f += a * c[li] * c[li];
4205 f = -s_f_ratio_peaks *
sqrt(f);
4208 for(li = lmin;li <= lmax; li++){
4209 a = working_space[
x][y + li - PEAK_WINDOW / 2][z + 2 * sizez_ext];
4211 f += a * c[li] * c[li];
4213 f = -s_f_ratio_peaks *
sqrt(f);
4216 for(li = lmin;li <= lmax; li++){
4217 a = working_space[
x][
y][z + li - PEAK_WINDOW / 2 + 2 * sizez_ext];
4219 f += a * c[li] * c[li];
4221 f = -s_f_ratio_peaks *
sqrt(f);
4224 for(li = lmin;li <= lmax; li++){
4225 for(lj = lmin;lj <= lmax; lj++){
4226 a = working_space[x + li - PEAK_WINDOW / 2][y + lj - PEAK_WINDOW / 2][z + 2 * sizez_ext];
4227 s += a * c[li] * c[lj];
4228 f += a * c[li] * c[li] * c[lj] * c[lj];
4231 f = s_f_ratio_peaks *
sqrt(f);
4234 for(li = lmin;li <= lmax; li++){
4235 for(lj = lmin;lj <= lmax; lj++){
4236 a = working_space[x + li - PEAK_WINDOW / 2][
y][z + lj - PEAK_WINDOW / 2 + 2 * sizez_ext];
4237 s += a * c[li] * c[lj];
4238 f += a * c[li] * c[li] * c[lj] * c[lj];
4241 f = s_f_ratio_peaks *
sqrt(f);
4244 for(li = lmin;li <= lmax; li++){
4245 for(lj=lmin;lj<=lmax;lj++){
4246 a = working_space[
x][y + li - PEAK_WINDOW / 2][z + lj - PEAK_WINDOW / 2 + 2 * sizez_ext];
4247 s += a * c[li] * c[lj];
4248 f += a * c[li] * c[li] * c[lj] * c[lj];
4251 f = s_f_ratio_peaks *
sqrt(f);
4253 if(x >= shift && x < ssizex + shift && y >= shift && y < ssizey + shift && z >= shift && z < ssizez + shift){
4254 if(working_space[x][y][z + 3 * sizez_ext] > threshold * maximum / 100.0){
4256 for(k = x - 1,a = 0,b = 0;k <= x + 1; k++){
4257 a += (
Double_t)(k - shift) * working_space[k][
y][
z];
4258 b += working_space[k][
y][
z];
4261 for(k = y - 1,a = 0,b = 0;k <= y + 1; k++){
4262 a += (
Double_t)(k - shift) * working_space[
x][k][
z];
4263 b += working_space[
x][k][
z];
4266 for(k = z - 1,a = 0,b = 0;k <= z + 1; k++){
4267 a += (
Double_t)(k - shift) * working_space[
x][
y][k];
4268 b += working_space[
x][
y][k];
4285 for(i = 0;i < ssizex; i++){
4286 for(j = 0;j < ssizey; j++){
4287 for(k = 0;k < ssizez; k++){
4288 val = -working_space[i + shift][j + shift][k + shift];
4291 dest[i][j][k] = val;
4295 k = (
Int_t)(4 * sigma + 0.5);
4297 for(i = 0;i < ssizex + k; i++){
4298 for(j = 0;j < ssizey + k; j++)
4299 delete[] working_space[i][j];
4300 delete[] working_space[i];
4302 delete[] working_space;
void SetResolution(Double_t resolution=1)
resolution: determines resolution of the neighbouring peaks default value is 1 correspond to 3 sigma ...
Double_t * fPosition
[fNPeaks] array of current peak positions
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
static double p3(double t, double a, double b, double c, double d)
Int_t fNPeaks
number of peaks 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 Int_t GetDimension() const
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...
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...
Short_t Min(Short_t a, Short_t b)
ClassImp(TSpectrum3) TSpectrum3
Constructor.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
The TNamed class is the base class for all named ROOT classes.
unsigned int r3[N_CITIES]
static double p2(double t, double a, double b, double c)
Double_t * fPositionZ
[fNPeaks] Z positions of peaks
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const char * Background(const TH1 *hist, Int_t niter, Option_t *option="goff")
This function calculates background spectrum from source in h.
Double_t * fPositionY
[fNPeaks] Y positions of peaks
Double_t fResolution
resolution of the neighboring peaks
unsigned int r1[N_CITIES]
LVector boost(const LVector &v, const BoostVector &b)
Boost a generic Lorentz Vector class using a generic 3D Vector class describing the boost The only re...
virtual const char * GetName() const
Returns name of object.
Advanced 3-dimensional spectra processing functions.
static double p1(double t, double a, double b)
Int_t fMaxPeaks
Maximum number of peaks to be found.
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.
virtual void Print(Option_t *option="") const
Print the array of positions.
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
TH1 * fHistogram
resulting histogram
Double_t * fPositionX
[fNPeaks] X positions of peaks
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
#define dest(otri, vertexptr)
Short_t Max(Short_t a, Short_t b)
Double_t Sqrt(Double_t x)
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...
unsigned int r2[N_CITIES]
virtual ~TSpectrum3()
Destructor.