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      delete [] working_space;
 
  894   working_space[
xmin][
ymin][zmin] = 1;
 
  896      nip = source[i][
ymin][zmin] / maxch;
 
  897      nim = source[i + 1][
ymin][zmin] / maxch;
 
  899      for(
l = 1;
l <= averWindow; 
l++){
 
  904            a = source[i + 
l][
ymin][zmin] / maxch;
 
  920            a = source[i - 
l + 1][
ymin][zmin] / maxch;
 
  934      a = working_space[i + 1][
ymin][zmin] = 
a * working_space[i][
ymin][zmin];
 
  938      nip = source[
xmin][i][zmin] / maxch;
 
  939      nim = source[
xmin][i + 1][zmin] / maxch;
 
  941      for(
l = 1;
l <= averWindow; 
l++){
 
  946            a = source[
xmin][i + 
l][zmin] / maxch;
 
  962            a = source[
xmin][i - 
l + 1][zmin] / maxch;
 
  976      a = working_space[
xmin][i + 1][zmin] = 
a * working_space[
xmin][i][zmin];
 
  979   for(i = zmin;i < zmax; i++){
 
  980      nip = source[
xmin][
ymin][i] / maxch;
 
  981      nim = source[
xmin][
ymin][i + 1] / maxch;
 
  983      for(
l = 1;
l <= averWindow; 
l++){
 
 1000         if(i - 
l + 1 < zmin)
 
 1022         nip = source[i][j + 1][zmin] / maxch;
 
 1023         nim = source[i + 1][j + 1][zmin] / maxch;
 
 1025         for(
l = 1;
l <= averWindow; 
l++){
 
 1027               a = source[
xmax][j][zmin] / maxch;
 
 1030               a = source[i + 
l][j][zmin] / maxch;
 
 1042            if(i - 
l + 1 < 
xmin)
 
 1043               a = source[
xmin][j][zmin] / maxch;
 
 1046               a = source[i - 
l + 1][j][zmin] / maxch;
 
 1060         nip = source[i + 1][j][zmin] / maxch;
 
 1061         nim = source[i + 1][j + 1][zmin] / maxch;
 
 1062         for(
l = 1;
l <= averWindow; 
l++){
 
 1064               a = source[i][
ymax][zmin] / maxch;
 
 1067               a = source[i][j + 
l][zmin] / maxch;
 
 1079            if(j - 
l + 1 < 
ymin)
 
 1080               a = source[i][
ymin][zmin] / maxch;
 
 1083               a = source[i][j - 
l + 1][zmin] / maxch;
 
 1096         a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
 
 1097         working_space[i + 1][j + 1][zmin] = 
a;
 
 1102      for(j = zmin;j < zmax; j++){
 
 1103         nip = source[i][
ymin][j + 1] / maxch;
 
 1104         nim = source[i + 1][
ymin][j + 1] / maxch;
 
 1106         for(
l = 1;
l <= averWindow; 
l++){
 
 1111               a = source[i + 
l][
ymin][j] / maxch;
 
 1123            if(i - 
l + 1 < 
xmin)
 
 1127               a = source[i - 
l + 1][
ymin][j] / maxch;
 
 1141         nip = source[i + 1][
ymin][j] / maxch;
 
 1142         nim = source[i + 1][
ymin][j + 1] / maxch;
 
 1143         for(
l = 1;
l <= averWindow; 
l++){
 
 1145               a = source[i][
ymin][zmax] / maxch;
 
 1148               a = source[i][
ymin][j + 
l] / maxch;
 
 1160            if(j - 
l + 1 < zmin)
 
 1161               a = source[i][
ymin][zmin] / maxch;
 
 1164               a = source[i][
ymin][j - 
l + 1] / maxch;
 
 1177         a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
 
 1178         working_space[i + 1][
ymin][j + 1] = 
a;
 
 1183      for(j = zmin;j < zmax; j++){
 
 1184         nip = source[
xmin][i][j + 1] / maxch;
 
 1185         nim = source[
xmin][i + 1][j + 1] / maxch;
 
 1187         for(
l = 1;
l <= averWindow; 
l++){
 
 1192               a = source[
xmin][i + 
l][j] / maxch;
 
 1204            if(i - 
l + 1 < 
ymin)
 
 1208               a = source[
xmin][i - 
l + 1][j] / maxch;
 
 1222         nip = source[
xmin][i + 1][j] / maxch;
 
 1223         nim = source[
xmin][i + 1][j + 1] / maxch;
 
 1224         for(
l = 1;
l <= averWindow; 
l++){
 
 1226               a = source[
xmin][i][zmax] / maxch;
 
 1229               a = source[
xmin][i][j + 
l] / maxch;
 
 1241            if(j - 
l + 1 < zmin)
 
 1242               a = source[
xmin][i][zmin] / maxch;
 
 1245               a = source[
xmin][i][j - 
l + 1] / maxch;
 
 1258         a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
 
 1259         working_space[
xmin][i + 1][j + 1] = 
a;
 
 1265         for(k = zmin;k < zmax; k++){
 
 1266            nip = source[i][j + 1][k + 1] / maxch;
 
 1267            nim = source[i + 1][j + 1][k + 1] / maxch;
 
 1269            for(
l = 1;
l <= averWindow; 
l++){
 
 1271                  a = source[
xmax][j][k] / maxch;
 
 1274                  a = source[i + 
l][j][k] / maxch;
 
 1286               if(i - 
l + 1 < 
xmin)
 
 1287                  a = source[
xmin][j][k] / maxch;
 
 1290                  a = source[i - 
l + 1][j][k] / maxch;
 
 1304            nip = source[i + 1][j][k + 1] / maxch;
 
 1305            nim = source[i + 1][j + 1][k + 1] / maxch;
 
 1306            for(
l = 1;
l <= averWindow; 
l++){
 
 1308                  a = source[i][
ymax][k] / maxch;
 
 1311                  a = source[i][j + 
l][k] / maxch;
 
 1323               if(j - 
l + 1 < 
ymin)
 
 1324                  a = source[i][
ymin][k] / maxch;
 
 1327                  a = source[i][j - 
l + 1][k] / maxch;
 
 1341            nip = source[i + 1][j + 1][k] / maxch;
 
 1342            nim = source[i + 1][j + 1][k + 1] / maxch;
 
 1343            for(
l = 1;
l <= averWindow; 
l++){
 
 1345                  a = source[i][j][zmax] / maxch;
 
 1348                  a = source[i][j][k + 
l] / maxch;
 
 1360               if(j - 
l + 1 < 
ymin)
 
 1361                  a = source[i][j][zmin] / maxch;
 
 1364                  a = source[i][j][k - 
l + 1] / maxch;
 
 1377            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);
 
 1378            working_space[i + 1][j + 1][k + 1] = 
a;
 
 1385         for(k = zmin;k <= zmax; k++){
 
 1386            working_space[i][j][k] = working_space[i][j][k] / nom;
 
 1390   for(i = 0;i < ssizex; i++){
 
 1391      for(j = 0;j < ssizey; j++){
 
 1392         for(k = 0;k < ssizez; k++){
 
 1393            source[i][j][k] = plocha * working_space[i][j][k];
 
 1397   for(i = 0;i < ssizex; i++){
 
 1398      for(j = 0;j < ssizey; j++)
 
 1399         delete[] working_space[i][j];
 
 1400      delete[] working_space[i];
 
 1402   delete[] working_space;
 
 1594                                       Int_t numberIterations,
 
 1595                                       Int_t numberRepetitions,
 
 1598   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;
 
 1599   Double_t lda, ldb, ldc, area, maximum = 0;
 
 1600   if (ssizex <= 0 || ssizey <= 0 || ssizez <= 0)
 
 1601      return "Wrong parameters";
 
 1602   if (numberIterations <= 0)
 
 1603      return "Number of iterations must be positive";
 
 1604   if (numberRepetitions <= 0)
 
 1605      return "Number of repetitions must be positive";
 
 1607   for(i=0;i<ssizex;i++){
 
 1608      working_space[i]=
new Double_t* [ssizey];
 
 1609      for(j=0;j<ssizey;j++)
 
 1610         working_space[i][j]=
new Double_t [5*ssizez];
 
 1613   lhx = -1, lhy = -1, lhz = -1;
 
 1614   for (i = 0; i < ssizex; i++) {
 
 1615      for (j = 0; j < ssizey; j++) {
 
 1616         for (k = 0; k < ssizez; k++) {
 
 1617            lda = resp[i][j][k];
 
 1626            working_space[i][j][k] = lda;
 
 1628            if (lda > maximum) {
 
 1630               positx = i, posity = j, positz = k;
 
 1635   if (lhx == -1 || lhy == -1 || lhz == -1) {
 
 1636      delete [] working_space;
 
 1637      return (
"Zero response data");
 
 1641   for (i3 = 0; i3 < ssizez; i3++) {
 
 1642      for (i2 = 0; i2 < ssizey; i2++) {
 
 1643         for (i1 = 0; i1 < ssizex; i1++) {
 
 1645            for (j3 = 0; j3 <= (lhz - 1); j3++) {
 
 1646               for (j2 = 0; j2 <= (lhy - 1); j2++) {
 
 1647                  for (j1 = 0; j1 <= (lhx - 1); j1++) {
 
 1648                     k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
 
 1649                     if (k3 >= 0 && k3 < ssizez && k2 >= 0 && k2 < ssizey && k1 >= 0 && k1 < ssizex) {
 
 1650                        lda = working_space[j1][j2][j3];
 
 1651                        ldb = source[k1][k2][k3];
 
 1652                        ldc = ldc + lda * ldb;
 
 1657            working_space[i1][i2][i3 + ssizez] = ldc;
 
 1663   i1min = -(lhx - 1), i1max = lhx - 1;
 
 1664   i2min = -(lhy - 1), i2max = lhy - 1;
 
 1665   i3min = -(lhz - 1), i3max = lhz - 1;
 
 1666   for (i3 = i3min; i3 <= i3max; i3++) {
 
 1667      for (i2 = i2min; i2 <= i2max; i2++) {
 
 1668         for (i1 = i1min; i1 <= i1max; i1++) {
 
 1673            j3max = lhz - 1 - i3;
 
 1674            if (j3max > lhz - 1)
 
 1676            for (j3 = j3min; j3 <= j3max; j3++) {
 
 1680               j2max = lhy - 1 - i2;
 
 1681               if (j2max > lhy - 1)
 
 1683               for (j2 = j2min; j2 <= j2max; j2++) {
 
 1687                  j1max = lhx - 1 - i1;
 
 1688                  if (j1max > lhx - 1)
 
 1690                  for (j1 = j1min; j1 <= j1max; j1++) {
 
 1691                     lda = working_space[j1][j2][j3];
 
 1692                     if (i1 + j1 < ssizex && i2 + j2 < ssizey)
 
 1693                        ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
 
 1696                     ldc = ldc + lda * ldb;
 
 1700            working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * ssizez ] = ldc;
 
 1706   for (i3 = 0; i3 < ssizez; i3++) {
 
 1707      for (i2 = 0; i2 < ssizey; i2++) {
 
 1708         for (i1 = 0; i1 < ssizex; i1++) {
 
 1709            working_space[i1][i2][i3 + 3 * ssizez] = 1;
 
 1710            working_space[i1][i2][i3 + 4 * ssizez] = 0;
 
 1716   for (repet = 0; repet < numberRepetitions; repet++) {
 
 1718         for (i = 0; i < ssizex; i++) {
 
 1719            for (j = 0; j < ssizey; j++) {
 
 1720               for (k = 0; k < ssizez; k++) {
 
 1721                  working_space[i][j][k + 3 * ssizez] = 
TMath::Power(working_space[i][j][k + 3 * ssizez],
boost);
 
 1726      for (lindex = 0; lindex < numberIterations; lindex++) {
 
 1727         for (i3 = 0; i3 < ssizez; i3++) {
 
 1728            for (i2 = 0; i2 < ssizey; i2++) {
 
 1729               for (i1 = 0; i1 < ssizex; i1++) {
 
 1732                  if (j3min > lhz - 1)
 
 1735                  j3max = ssizez - i3 - 1;
 
 1736                  if (j3max > lhz - 1)
 
 1739                  if (j2min > lhy - 1)
 
 1742                  j2max = ssizey - i2 - 1;
 
 1743                  if (j2max > lhy - 1)
 
 1746                  if (j1min > lhx - 1)
 
 1749                  j1max = ssizex - i1 - 1;
 
 1750                  if (j1max > lhx - 1)
 
 1752                  for (j3 = j3min; j3 <= j3max; j3++) {
 
 1753                     for (j2 = j2min; j2 <= j2max; j2++) {
 
 1754                        for (j1 = j1min; j1 <= j1max; j1++) {
 
 1755                           ldc =  working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * ssizez];
 
 1756                           lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * ssizez];
 
 1757                           ldb = ldb + lda * ldc;
 
 1761                  lda = working_space[i1][i2][i3 + 3 * ssizez];
 
 1762                  ldc = working_space[i1][i2][i3 + 1 * ssizez];
 
 1763                  if (ldc * lda != 0 && ldb != 0) {
 
 1764                     lda = lda * ldc / ldb;
 
 1769                  working_space[i1][i2][i3 + 4 * ssizez] = lda;
 
 1773         for (i3 = 0; i3 < ssizez; i3++) {
 
 1774            for (i2 = 0; i2 < ssizey; i2++) {
 
 1775               for (i1 = 0; i1 < ssizex; i1++)
 
 1776                  working_space[i1][i2][i3 + 3 * ssizez] = working_space[i1][i2][i3 + 4 * ssizez];
 
 1781   for (i = 0; i < ssizex; i++) {
 
 1782      for (j = 0; j < ssizey; j++){
 
 1783         for (k = 0; k < ssizez; k++)
 
 1784            source[(i + positx) % ssizex][(j + posity) % ssizey][(k + positz) % ssizez] = area * working_space[i][j][k + 3 * ssizez];
 
 1787   delete [] working_space;
 
 1940   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;
 
 1942   Double_t a,
b,maxch,plocha = 0,plocha_markov = 0;
 
 1943   Double_t nom,nip,nim,sp,sm,spx,spy,smx,smy,spz,smz;
 
 1944   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;
 
 1947   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;
 
 1949      Error(
"SearchHighRes", 
"Invalid sigma, must be greater than or equal to 1");
 
 1953   if(threshold<=0||threshold>=100){
 
 1954      Error(
"SearchHighRes", 
"Invalid threshold, must be positive and less than 100");
 
 1960      Error(
"SearchHighRes", 
"Too large sigma");
 
 1964   if (markov == 
true) {
 
 1965      if (averWindow <= 0) {
 
 1966         Error(
"SearchHighRes", 
"Averaging window must be positive");
 
 1971   if(backgroundRemove == 
true){
 
 1972      if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
 
 1973         Error(
"SearchHighRes", 
"Too large clipping window");
 
 1981   for(j = 0;j < ssizex + i; j++){
 
 1982      working_space[j] = 
new Double_t* [ssizey + i];
 
 1983      for(k = 0;k < ssizey + i; k++)
 
 1984         working_space[j][k] = 
new Double_t [5 * (ssizez + i)];
 
 1986   for(k = 0;k < sizez_ext; k++){
 
 1987      for(j = 0;j < sizey_ext; j++){
 
 1988        for(i = 0;i < sizex_ext; i++){
 
 1992                     working_space[i][j][k + sizez_ext] = source[0][0][0];
 
 1994                  else if(k >= ssizez + shift)
 
 1995                     working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
 
 1998                     working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
 
 2001               else if(j >= ssizey + shift){
 
 2003                     working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
 
 2005                  else if(k >= ssizez + shift)
 
 2006                     working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
 
 2009                     working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
 
 2014                     working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
 
 2016                  else if(k >= ssizez + shift)
 
 2017                     working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
 
 2020                     working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
 
 2024            else if(i >= ssizex + shift){
 
 2027                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
 
 2029                  else if(k >= ssizez + shift)
 
 2030                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
 
 2033                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
 
 2036               else if(j >= ssizey + shift){
 
 2038                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
 
 2040                  else if(k >= ssizez + shift)
 
 2041                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
 
 2044                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
 
 2049                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
 
 2051                  else if(k >= ssizez + shift)
 
 2052                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
 
 2055                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
 
 2062                     working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
 
 2064                  else if(k >= ssizez + shift)
 
 2065                     working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
 
 2068                     working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
 
 2071               else if(j >= ssizey + shift){
 
 2073                     working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
 
 2075                  else if(k >= ssizez + shift)
 
 2076                     working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
 
 2079                     working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
 
 2084                     working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
 
 2086                  else if(k >= ssizez + shift)
 
 2087                     working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
 
 2090                     working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
 
 2096   if(backgroundRemove == 
true){
 
 2097      for(i = 1;i <= number_of_iterations; i++){
 
 2098        for(z = i;z < sizez_ext - i; z++){
 
 2099           for(
y = i;
y < sizey_ext - i; 
y++){
 
 2100             for(
x = i;
x < sizex_ext - i; 
x++){
 
 2101               a = working_space[
x][
y][z + sizez_ext];
 
 2102                  p1 = working_space[
x + i][
y + i][z - i + sizez_ext];
 
 2103                  p2 = working_space[
x - i][
y + i][z - i + sizez_ext];
 
 2104                  p3 = working_space[
x + i][
y - i][z - i + sizez_ext];
 
 2105                  p4 = working_space[
x - i][
y - i][z - i + sizez_ext];
 
 2106                  p5 = working_space[
x + i][
y + i][z + i + sizez_ext];
 
 2107                  p6 = working_space[
x - i][
y + i][z + i + sizez_ext];
 
 2108                  p7 = working_space[
x + i][
y - i][z + i + sizez_ext];
 
 2109                  p8 = working_space[
x - i][
y - i][z + i + sizez_ext];
 
 2110                  s1 = working_space[
x + i][
y    ][z - i + sizez_ext];
 
 2111                  s2 = working_space[
x    ][
y + i][z - i + sizez_ext];
 
 2112                  s3 = working_space[
x - i][
y    ][z - i + sizez_ext];
 
 2113                  s4 = working_space[
x    ][
y - i][z - i + sizez_ext];
 
 2114                  s5 = working_space[
x + i][
y    ][z + i + sizez_ext];
 
 2115                  s6 = working_space[
x    ][
y + i][z + i + sizez_ext];
 
 2116                  s7 = working_space[
x - i][
y    ][z + i + sizez_ext];
 
 2117                  s8 = working_space[
x    ][
y - i][z + i + sizez_ext];
 
 2118                  s9 = working_space[
x - i][
y + i][z     + sizez_ext];
 
 2119                  s10 = working_space[
x - i][
y - i][z     +sizez_ext];
 
 2120                  s11 = working_space[
x + i][
y + i][z     +sizez_ext];
 
 2121                  s12 = working_space[
x + i][
y - i][z     +sizez_ext];
 
 2122                  r1 = working_space[
x    ][
y    ][z - i + sizez_ext];
 
 2123                  r2 = working_space[
x    ][
y    ][z + i + sizez_ext];
 
 2124                  r3 = working_space[
x - i][
y    ][z     + sizez_ext];
 
 2125                  r4 = working_space[
x + i][
y    ][z     + sizez_ext];
 
 2126                  r5 = working_space[
x    ][
y + i][z     + sizez_ext];
 
 2127                  r6 = working_space[
x    ][
y - i][z     + sizez_ext];
 
 2128                  b = (p1 + p3) / 2.0;
 
 2132                  b = (p1 + p2) / 2.0;
 
 2136                  b = (p2 + p4) / 2.0;
 
 2140                  b = (p3 + p4) / 2.0;
 
 2144                  b = (p5 + p7) / 2.0;
 
 2148                  b = (p5 + p6) / 2.0;
 
 2152                  b = (p6 + p8) / 2.0;
 
 2156                  b = (p7 + p8) / 2.0;
 
 2160                  b = (p2 + p6) / 2.0;
 
 2164                  b = (p4 + p8) / 2.0;
 
 2168                  b = (p1 + p5) / 2.0;
 
 2172                  b = (p3 + p7) / 2.0;
 
 2176                  s1 = 
s1 - (p1 + p3) / 2.0;
 
 2177                  s2 = s2 - (p1 + p2) / 2.0;
 
 2178                  s3 = s3 - (p2 + p4) / 2.0;
 
 2179                  s4 = s4 - (p3 + p4) / 2.0;
 
 2180                  s5 = s5 - (p5 + p7) / 2.0;
 
 2181                  s6 = s6 - (p5 + p6) / 2.0;
 
 2182                  s7 = s7 - (p6 + p8) / 2.0;
 
 2183                  s8 = s8 - (p7 + p8) / 2.0;
 
 2184                  s9 = s9 - (p2 + p6) / 2.0;
 
 2185                  s10 = s10 - (p4 + p8) / 2.0;
 
 2186                  s11 = s11 - (p1 + p5) / 2.0;
 
 2187                  s12 = s12 - (p3 + p7) / 2.0;
 
 2188                  b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
 
 2192                  b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
 
 2196                  b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
 
 2200                  b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
 
 2204                  b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
 
 2208                  b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
 
 2212                  r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
 
 2213                  r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
 
 2214                  r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
 
 2215                  r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
 
 2216                  r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
 
 2217                  r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
 
 2218                  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;
 
 2222                  working_space[
x][
y][z] = 
a;
 
 2226         for(z = i;z < sizez_ext - i; z++){
 
 2227            for(
y = i;
y < sizey_ext - i; 
y++){
 
 2228               for(
x = i;
x < sizex_ext - i; 
x++){
 
 2229                  working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][z];
 
 2234      for(k = 0;k < sizez_ext; k++){
 
 2235         for(j = 0;j < sizey_ext; j++){
 
 2236            for(i = 0;i < sizex_ext; i++){
 
 2240                        working_space[i][j][k + sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
 
 2242                     else if(k >= ssizez + shift)
 
 2243                        working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2246                        working_space[i][j][k + sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
 
 2249                  else if(j >= ssizey + shift){
 
 2251                        working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
 
 2253                     else if(k >= ssizez + shift)
 
 2254                        working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2257                        working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
 
 2262                        working_space[i][j][k + sizez_ext] = source[0][j - shift][0] - working_space[i][j][k + sizez_ext];
 
 2264                     else if(k >= ssizez + shift)
 
 2265                        working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2268                        working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
 
 2272               else if(i >= ssizex + shift){
 
 2275                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
 
 2277                     else if(k >= ssizez + shift)
 
 2278                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2281                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
 
 2284                  else if(j >= ssizey + shift){
 
 2286                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
 
 2288                     else if(k >= ssizez + shift)
 
 2289                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2292                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
 
 2297                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0] - working_space[i][j][k + sizez_ext];
 
 2299                     else if(k >= ssizez + shift)
 
 2300                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2303                        working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
 
 2310                        working_space[i][j][k + sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
 
 2312                     else if(k >= ssizez + shift)
 
 2313                        working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2316                        working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
 
 2319                  else if(j >= ssizey + shift){
 
 2321                        working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
 
 2323                     else if(k >= ssizez + shift)
 
 2324                        working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2327                        working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
 
 2332                        working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0] - working_space[i][j][k + sizez_ext];
 
 2334                     else if(k >= ssizez + shift)
 
 2335                        working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 2338                        working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
 
 2347      for(i = 0;i < sizex_ext; i++){
 
 2348         for(j = 0;j < sizey_ext; j++){
 
 2349            for(k = 0;k < sizez_ext; k++){
 
 2350               working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][sizez_ext + k];
 
 2351               plocha_markov = plocha_markov + working_space[i][j][sizez_ext + k];
 
 2356      xmax = sizex_ext - 1;
 
 2358      ymax = sizey_ext - 1;
 
 2360      zmax = sizez_ext - 1;
 
 2361      for(i = 0,maxch = 0;i < sizex_ext; i++){
 
 2362         for(j = 0;j < sizey_ext;j++){
 
 2363            for(k = 0;k < sizez_ext;k++){
 
 2364               working_space[i][j][k] = 0;
 
 2365               if(maxch < working_space[i][j][k + 2 * sizez_ext])
 
 2366                  maxch = working_space[i][j][k + 2 * sizez_ext];
 
 2368               plocha += working_space[i][j][k + 2 * sizez_ext];
 
 2373         delete [] working_space;
 
 2377      working_space[
xmin][
ymin][zmin] = 1;
 
 2379         nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2380         nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2382         for(
l = 1;
l <= averWindow; 
l++){
 
 2384               a = working_space[
xmax][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2387               a = working_space[i + 
l][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2399            if(i - 
l + 1 < 
xmin)
 
 2400               a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2403               a = working_space[i - 
l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2417         a = working_space[i + 1][
ymin][zmin] = 
a * working_space[i][
ymin][zmin];
 
 2421         nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
 
 2422         nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
 
 2424         for(
l = 1;
l <= averWindow; 
l++){
 
 2426               a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
 
 2429               a = working_space[
xmin][i + 
l][zmin + 2 * sizez_ext] / maxch;
 
 2441            if(i - 
l + 1 < 
ymin)
 
 2442               a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2445               a = working_space[
xmin][i - 
l + 1][zmin + 2 * sizez_ext] / maxch;
 
 2459         a = working_space[
xmin][i + 1][zmin] = 
a * working_space[
xmin][i][zmin];
 
 2462      for(i = zmin;i < zmax;i++){
 
 2463         nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
 
 2464         nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
 
 2466         for(
l = 1;
l <= averWindow;
l++){
 
 2468               a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
 
 2471               a = working_space[
xmin][
ymin][i + 
l + 2 * sizez_ext] / maxch;
 
 2483            if(i - 
l + 1 < zmin)
 
 2484               a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2487               a = working_space[
xmin][
ymin][i - 
l + 1 + 2 * sizez_ext] / maxch;
 
 2506            nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
 
 2507            nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
 
 2509            for(
l = 1;
l <= averWindow; 
l++){
 
 2511                  a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
 
 2514                  a = working_space[i + 
l][j][zmin + 2 * sizez_ext] / maxch;
 
 2526               if(i - 
l + 1 < 
xmin)
 
 2527                  a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
 
 2530                  a = working_space[i - 
l + 1][j][zmin + 2 * sizez_ext] / maxch;
 
 2544            nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
 
 2545            nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
 
 2546            for(
l = 1;
l <= averWindow; 
l++){
 
 2548                  a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
 
 2551                  a = working_space[i][j + 
l][zmin + 2 * sizez_ext] / maxch;
 
 2563               if(j - 
l + 1 < 
ymin)
 
 2564                  a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2567                  a = working_space[i][j - 
l + 1][zmin + 2 * sizez_ext] / maxch;
 
 2580            a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
 
 2581            working_space[i + 1][j + 1][zmin] = 
a;
 
 2586         for(j = zmin;j < zmax;j++){
 
 2587            nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
 
 2588            nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
 
 2590            for(
l = 1;
l <= averWindow; 
l++){
 
 2592                 a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
 
 2595                  a = working_space[i + 
l][
ymin][j + 2 * sizez_ext] / maxch;
 
 2607               if(i - 
l + 1 < 
xmin)
 
 2608                  a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
 
 2611                  a = working_space[i - 
l + 1][
ymin][j + 2 * sizez_ext] / maxch;
 
 2625            nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
 
 2626            nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
 
 2627            for(
l = 1;
l <= averWindow; 
l++){
 
 2629                  a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
 
 2632                  a = working_space[i][
ymin][j + 
l + 2 * sizez_ext] / maxch;
 
 2644               if(j - 
l + 1 < zmin)
 
 2645                  a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 2648                  a = working_space[i][
ymin][j - 
l + 1 + 2 * sizez_ext] / maxch;
 
 2661            a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
 
 2662            working_space[i + 1][
ymin][j + 1] = 
a;
 
 2667         for(j = zmin;j < zmax;j++){
 
 2668            nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
 
 2669            nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
 
 2671            for(
l = 1;
l <= averWindow; 
l++){
 
 2673                  a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
 
 2676                  a = working_space[
xmin][i + 
l][j + 2 * sizez_ext] / maxch;
 
 2688               if(i - 
l + 1 < 
ymin)
 
 2689                  a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
 
 2692                  a = working_space[
xmin][i - 
l + 1][j + 2 * sizez_ext] / maxch;
 
 2706            nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
 
 2707            nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
 
 2708            for(
l = 1;
l <= averWindow; 
l++){
 
 2710                  a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
 
 2713                  a = working_space[
xmin][i][j + 
l + 2 * sizez_ext] / maxch;
 
 2725               if(j - 
l + 1 < zmin)
 
 2726                  a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
 
 2729                  a = working_space[
xmin][i][j - 
l + 1 + 2 * sizez_ext] / maxch;
 
 2742            a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
 
 2743            working_space[
xmin][i + 1][j + 1] = 
a;
 
 2749            for(k = zmin;k < zmax; k++){
 
 2750               nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 2751               nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 2753               for(
l = 1;
l <= averWindow; 
l++){
 
 2755                     a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
 
 2758                     a = working_space[i + 
l][j][k + 2 * sizez_ext] / maxch;
 
 2770                  if(i - 
l + 1 < 
xmin)
 
 2771                     a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
 
 2774                     a = working_space[i - 
l + 1][j][k + 2 * sizez_ext] / maxch;
 
 2788               nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
 
 2789               nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 2790               for(
l = 1;
l <= averWindow; 
l++){
 
 2792                     a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
 
 2795                     a = working_space[i][j + 
l][k + 2 * sizez_ext] / maxch;
 
 2807                  if(j - 
l + 1 < 
ymin)
 
 2808                     a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
 
 2811                     a = working_space[i][j - 
l + 1][k + 2 * sizez_ext] / maxch;
 
 2825               nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
 
 2826               nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 2827               for(
l = 1;
l <= averWindow; 
l++ ){
 
 2829                     a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
 
 2832                     a = working_space[i][j][k + 
l + 2 * sizez_ext] / maxch;
 
 2844                  if(j - 
l + 1 < 
ymin)
 
 2845                     a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
 
 2848                     a = working_space[i][j][k - 
l + 1 + 2 * sizez_ext] / maxch;
 
 2861               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);
 
 2862               working_space[i + 1][j + 1][k + 1] = 
a;
 
 2870            for(k = zmin;k <= zmax; k++){
 
 2871               working_space[i][j][k] = working_space[i][j][k] / nom;
 
 2872               a+=working_space[i][j][k];
 
 2876      for(i = 0;i < sizex_ext; i++){
 
 2877         for(j = 0;j < sizey_ext; j++){
 
 2878            for(k = 0;k < sizez_ext; k++){
 
 2879               working_space[i][j][k + sizez_ext] = working_space[i][j][k] * plocha_markov / 
a;
 
 2886   lhx = -1,lhy = -1,lhz = -1;
 
 2887   positx = 0,posity = 0,positz = 0;
 
 2890   for(i = 0;i < sizex_ext; i++){
 
 2891      for(j = 0;j < sizey_ext; j++){
 
 2892         for(k = 0;k < sizez_ext; k++){
 
 2896            lda = (lda * lda + ldb * ldb + ldc * ldc) / (2 * 
sigma * 
sigma);
 
 2909            working_space[i][j][k] = lda;
 
 2913               positx = i,posity = j,positz = k;
 
 2919   for(i = 0;i < sizex_ext; i++){
 
 2920      for(j = 0;j < sizey_ext; j++){
 
 2921         for(k = 0;k < sizez_ext; k++){
 
 2922            working_space[i][j][k + 2 * sizez_ext] = 
TMath::Abs(working_space[i][j][k + sizez_ext]);
 
 2927   for (i3 = 0; i3 < sizez_ext; i3++) {
 
 2928      for (i2 = 0; i2 < sizey_ext; i2++) {
 
 2929         for (i1 = 0; i1 < sizex_ext; i1++) {
 
 2931            for (j3 = 0; j3 <= (lhz - 1); j3++) {
 
 2932               for (j2 = 0; j2 <= (lhy - 1); j2++) {
 
 2933                  for (j1 = 0; j1 <= (lhx - 1); j1++) {
 
 2934                     k3 = i3 + j3, k2 = i2 + j2, k1 = i1 + j1;
 
 2935                     if (k3 >= 0 && k3 < sizez_ext && k2 >= 0 && k2 < sizey_ext && k1 >= 0 && k1 < sizex_ext) {
 
 2936                        lda = working_space[j1][j2][j3];
 
 2937                        ldb = working_space[k1][k2][k3+2*sizez_ext];
 
 2938                        ldc = ldc + lda * ldb;
 
 2943            working_space[i1][i2][i3 + sizez_ext] = ldc;
 
 2948   i1min = -(lhx - 1), i1max = lhx - 1;
 
 2949   i2min = -(lhy - 1), i2max = lhy - 1;
 
 2950   i3min = -(lhz - 1), i3max = lhz - 1;
 
 2951   for (i3 = i3min; i3 <= i3max; i3++) {
 
 2952      for (i2 = i2min; i2 <= i2max; i2++) {
 
 2953         for (i1 = i1min; i1 <= i1max; i1++) {
 
 2959            j3max = lhz - 1 - i3;
 
 2960            if (j3max > lhz - 1)
 
 2963            for (j3 = j3min; j3 <= j3max; j3++) {
 
 2968               j2max = lhy - 1 - i2;
 
 2969               if (j2max > lhy - 1)
 
 2972               for (j2 = j2min; j2 <= j2max; j2++) {
 
 2977                  j1max = lhx - 1 - i1;
 
 2978                  if (j1max > lhx - 1)
 
 2981                  for (j1 = j1min; j1 <= j1max; j1++) {
 
 2982                     lda = working_space[j1][j2][j3];
 
 2983                     if (i1 + j1 < sizex_ext && i2 + j2 < sizey_ext)
 
 2984                        ldb = working_space[i1 + j1][i2 + j2][i3 + j3];
 
 2989                     ldc = ldc + lda * ldb;
 
 2993            working_space[i1 - i1min][i2 - i2min][i3 - i3min + 2 * sizez_ext ] = ldc;
 
 2998   for (i3 = 0; i3 < sizez_ext; i3++) {
 
 2999      for (i2 = 0; i2 < sizey_ext; i2++) {
 
 3000         for (i1 = 0; i1 < sizex_ext; i1++) {
 
 3001            working_space[i1][i2][i3 + 3 * sizez_ext] = 1;
 
 3002            working_space[i1][i2][i3 + 4 * sizez_ext] = 0;
 
 3008   for (lindex=0;lindex<deconIterations;lindex++){
 
 3009      for (i3 = 0; i3 < sizez_ext; i3++) {
 
 3010         for (i2 = 0; i2 < sizey_ext; i2++) {
 
 3011            for (i1 = 0; i1 < sizex_ext; i1++) {
 
 3012               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){
 
 3015                  if (j3min > lhz - 1)
 
 3019                  j3max = sizez_ext - i3 - 1;
 
 3020                  if (j3max > lhz - 1)
 
 3024                  if (j2min > lhy - 1)
 
 3028                  j2max = sizey_ext - i2 - 1;
 
 3029                  if (j2max > lhy - 1)
 
 3033                  if (j1min > lhx - 1)
 
 3037                  j1max = sizex_ext - i1 - 1;
 
 3038                  if (j1max > lhx - 1)
 
 3041                  for (j3 = j3min; j3 <= j3max; j3++) {
 
 3042                     for (j2 = j2min; j2 <= j2max; j2++) {
 
 3043                        for (j1 = j1min; j1 <= j1max; j1++) {
 
 3044                           ldc =  working_space[j1 - i1min][j2 - i2min][j3 - i3min + 2 * sizez_ext];
 
 3045                           lda = working_space[i1 + j1][i2 + j2][i3 + j3 + 3 * sizez_ext];
 
 3046                           ldb = ldb + lda * ldc;
 
 3050                  lda = working_space[i1][i2][i3 + 3 * sizez_ext];
 
 3051                  ldc = working_space[i1][i2][i3 + 1 * sizez_ext];
 
 3052                  if (ldc * lda != 0 && ldb != 0) {
 
 3053                     lda = lda * ldc / ldb;
 
 3058                  working_space[i1][i2][i3 + 4 * sizez_ext] = lda;
 
 3063      for (i3 = 0; i3 < sizez_ext; i3++) {
 
 3064         for (i2 = 0; i2 < sizey_ext; i2++) {
 
 3065            for (i1 = 0; i1 < sizex_ext; i1++)
 
 3066               working_space[i1][i2][i3 + 3 * sizez_ext] = working_space[i1][i2][i3 + 4 * sizez_ext];
 
 3072  for(i = 0;i < sizex_ext; i++){
 
 3073      for(j = 0;j < sizey_ext; j++){
 
 3074         for(k = 0;k < sizez_ext; k++){
 
 3075            working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext] = area * working_space[i][j][k + 3 * sizez_ext];
 
 3076            if(maximum < working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext])
 
 3077               maximum = working_space[(i + positx) % sizex_ext][(j + posity) % sizey_ext][(k + positz) % sizez_ext];
 
 3082   for(i = 1;i < sizex_ext - 1; i++){
 
 3083      for(j = 1;j < sizey_ext - 1; j++){
 
 3084         for(
l = 1;
l < sizez_ext - 1; 
l++){
 
 3085            a = working_space[i][j][
l];
 
 3086            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]){
 
 3087               if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && l >= shift && 
l < ssizez + shift){
 
 3088                  if(working_space[i][j][
l] > threshold * maximum / 100.0){
 
 3090                        for(k = i - 1,
a = 0,
b = 0;k <= i + 1; k++){
 
 3091                           a += (
Double_t)(k - shift) * working_space[k][j][
l];
 
 3092                           b += working_space[k][j][
l];
 
 3095                        for(k = j - 1,
a = 0,
b = 0;k <= j + 1; k++){
 
 3096                           a += (
Double_t)(k - shift) * working_space[i][k][
l];
 
 3097                           b += working_space[i][k][
l];
 
 3100                        for(k = 
l - 1,
a = 0,
b = 0;k <= 
l + 1; k++){
 
 3101                           a += (
Double_t)(k - shift) * working_space[i][j][k];
 
 3102                           b += working_space[i][j][k];
 
 3113   for(i = 0;i < ssizex; i++){
 
 3114      for(j = 0;j < ssizey; j++){
 
 3115         for(k = 0;k < ssizez; k++){
 
 3116            dest[i][j][k] = working_space[i + shift][j + shift][k + shift];
 
 3122   for(i = 0;i < ssizex + k; i++){
 
 3123      for(j = 0;j < ssizey + k; j++)
 
 3124         delete[] working_space[i][j];
 
 3125      delete[] working_space[i];
 
 3127   delete[] working_space;
 
 3157   Int_t i,j,k,
l,li,lj,lk,lmin,lmax,
xmin,
xmax,
ymin,
ymax,zmin,zmax;
 
 3158   Double_t maxch,plocha = 0,plocha_markov = 0;
 
 3159   Double_t nom,nip,nim,sp,sm,spx,spy,smx,smy,spz,smz;
 
 3160   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;
 
 3163   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;
 
 3166   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;
 
 3169      Error(
"SearchFast", 
"Invalid sigma, must be greater than or equal to 1");
 
 3173   if(threshold<=0||threshold>=100){
 
 3174      Error(
"SearchFast", 
"Invalid threshold, must be positive and less than 100");
 
 3180      Error(
"SearchFast", 
"Too large sigma");
 
 3184   if (markov == 
true) {
 
 3185      if (averWindow <= 0) {
 
 3186         Error(
"SearchFast", 
"Averaging window must be positive");
 
 3191   if(sizex_ext < 2 * number_of_iterations + 1 || sizey_ext < 2 * number_of_iterations + 1 || sizez_ext < 2 * number_of_iterations + 1){
 
 3192      Error(
"SearchFast", 
"Too large clipping window");
 
 3199   for(j = 0;j < ssizex + i; j++){
 
 3200      working_space[j] = 
new Double_t* [ssizey + i];
 
 3201      for(k = 0;k < ssizey + i; k++)
 
 3202         working_space[j][k] = 
new Double_t [4 * (ssizez + i)];
 
 3205   for(k = 0;k < sizez_ext; k++){
 
 3206      for(j = 0;j < sizey_ext; j++){
 
 3207        for(i = 0;i < sizex_ext; i++){
 
 3211                     working_space[i][j][k + sizez_ext] = source[0][0][0];
 
 3213                  else if(k >= ssizez + shift)
 
 3214                     working_space[i][j][k + sizez_ext] = source[0][0][ssizez - 1];
 
 3217                     working_space[i][j][k + sizez_ext] = source[0][0][k - shift];
 
 3220               else if(j >= ssizey + shift){
 
 3222                     working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][0];
 
 3224                  else if(k >= ssizez + shift)
 
 3225                     working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][ssizez - 1];
 
 3228                     working_space[i][j][k + sizez_ext] = source[0][ssizey - 1][k - shift];
 
 3233                     working_space[i][j][k + sizez_ext] = source[0][j - shift][0];
 
 3235                  else if(k >= ssizez + shift)
 
 3236                     working_space[i][j][k + sizez_ext] = source[0][j - shift][ssizez - 1];
 
 3239                     working_space[i][j][k + sizez_ext] = source[0][j - shift][k - shift];
 
 3243            else if(i >= ssizex + shift){
 
 3246                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][0];
 
 3248                  else if(k >= ssizez + shift)
 
 3249                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][ssizez - 1];
 
 3252                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][0][k - shift];
 
 3255               else if(j >= ssizey + shift){
 
 3257                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][0];
 
 3259                  else if(k >= ssizez + shift)
 
 3260                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1];
 
 3263                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift];
 
 3268                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][0];
 
 3270                  else if(k >= ssizez + shift)
 
 3271                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][ssizez - 1];
 
 3274                     working_space[i][j][k + sizez_ext] = source[ssizex - 1][j - shift][k - shift];
 
 3281                     working_space[i][j][k + sizez_ext] = source[i - shift][0][0];
 
 3283                  else if(k >= ssizez + shift)
 
 3284                     working_space[i][j][k + sizez_ext] = source[i - shift][0][ssizez - 1];
 
 3287                     working_space[i][j][k + sizez_ext] = source[i - shift][0][k - shift];
 
 3290               else if(j >= ssizey + shift){
 
 3292                     working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][0];
 
 3294                  else if(k >= ssizez + shift)
 
 3295                     working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1];
 
 3298                     working_space[i][j][k + sizez_ext] = source[i - shift][ssizey - 1][k - shift];
 
 3303                     working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][0];
 
 3305                  else if(k >= ssizez + shift)
 
 3306                     working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][ssizez - 1];
 
 3309                     working_space[i][j][k + sizez_ext] = source[i - shift][j - shift][k - shift];
 
 3315   for(i = 1;i <= number_of_iterations; i++){
 
 3316      for(z = i;z < sizez_ext - i; z++){
 
 3317         for(
y = i;
y < sizey_ext - i; 
y++){
 
 3318            for(
x = i;
x < sizex_ext - i; 
x++){
 
 3319               a = working_space[
x][
y][z + sizez_ext];
 
 3320               p1 = working_space[
x + i][
y + i][z - i + sizez_ext];
 
 3321               p2 = working_space[
x - i][
y + i][z - i + sizez_ext];
 
 3322               p3 = working_space[
x + i][
y - i][z - i + sizez_ext];
 
 3323               p4 = working_space[
x - i][
y - i][z - i + sizez_ext];
 
 3324               p5 = working_space[
x + i][
y + i][z + i + sizez_ext];
 
 3325               p6 = working_space[
x - i][
y + i][z + i + sizez_ext];
 
 3326               p7 = working_space[
x + i][
y - i][z + i + sizez_ext];
 
 3327               p8 = working_space[
x - i][
y - i][z + i + sizez_ext];
 
 3328               s1 = working_space[
x + i][
y    ][z - i + sizez_ext];
 
 3329               s2 = working_space[
x    ][
y + i][z - i + sizez_ext];
 
 3330               s3 = working_space[
x - i][
y    ][z - i + sizez_ext];
 
 3331               s4 = working_space[
x    ][
y - i][z - i + sizez_ext];
 
 3332               s5 = working_space[
x + i][
y    ][z + i + sizez_ext];
 
 3333               s6 = working_space[
x    ][
y + i][z + i + sizez_ext];
 
 3334               s7 = working_space[
x - i][
y    ][z + i + sizez_ext];
 
 3335               s8 = working_space[
x    ][
y - i][z + i + sizez_ext];
 
 3336               s9 = working_space[
x - i][
y + i][z     + sizez_ext];
 
 3337               s10 = working_space[
x - i][
y - i][z     +sizez_ext];
 
 3338               s11 = working_space[
x + i][
y + i][z     +sizez_ext];
 
 3339               s12 = working_space[
x + i][
y - i][z     +sizez_ext];
 
 3340               r1 = working_space[
x    ][
y    ][z - i + sizez_ext];
 
 3341               r2 = working_space[
x    ][
y    ][z + i + sizez_ext];
 
 3342               r3 = working_space[
x - i][
y    ][z     + sizez_ext];
 
 3343               r4 = working_space[
x + i][
y    ][z     + sizez_ext];
 
 3344               r5 = working_space[
x    ][
y + i][z     + sizez_ext];
 
 3345               r6 = working_space[
x    ][
y - i][z     + sizez_ext];
 
 3346               b = (p1 + p3) / 2.0;
 
 3350               b = (p1 + p2) / 2.0;
 
 3354               b = (p2 + p4) / 2.0;
 
 3358               b = (p3 + p4) / 2.0;
 
 3362               b = (p5 + p7) / 2.0;
 
 3366               b = (p5 + p6) / 2.0;
 
 3370               b = (p6 + p8) / 2.0;
 
 3374               b = (p7 + p8) / 2.0;
 
 3378               b = (p2 + p6) / 2.0;
 
 3382               b = (p4 + p8) / 2.0;
 
 3386               b = (p1 + p5) / 2.0;
 
 3390               b = (p3 + p7) / 2.0;
 
 3394               s1 = 
s1 - (p1 + p3) / 2.0;
 
 3395               s2 = s2 - (p1 + p2) / 2.0;
 
 3396               s3 = s3 - (p2 + p4) / 2.0;
 
 3397               s4 = s4 - (p3 + p4) / 2.0;
 
 3398               s5 = s5 - (p5 + p7) / 2.0;
 
 3399               s6 = s6 - (p5 + p6) / 2.0;
 
 3400               s7 = s7 - (p6 + p8) / 2.0;
 
 3401               s8 = s8 - (p7 + p8) / 2.0;
 
 3402               s9 = s9 - (p2 + p6) / 2.0;
 
 3403               s10 = s10 - (p4 + p8) / 2.0;
 
 3404               s11 = s11 - (p1 + p5) / 2.0;
 
 3405               s12 = s12 - (p3 + p7) / 2.0;
 
 3406               b = (
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
 
 3410               b = (s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0;
 
 3414               b = (s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0;
 
 3418               b = (
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0;
 
 3422               b = (s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0;
 
 3426               b = (s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0;
 
 3430               r1 = r1 - ((
s1 + s3) / 2.0 + (s2 + s4) / 2.0 + (p1 + p2 + p3 + p4) / 4.0);
 
 3431               r2 = r2 - ((s5 + s7) / 2.0 + (s6 + s8) / 2.0 + (p5 + p6 + p7 + p8) / 4.0);
 
 3432               r3 = r3 - ((s3 + s7) / 2.0 + (s9 + s10) / 2.0 + (p2 + p4 + p6 + p8) / 4.0);
 
 3433               r4 = r4 - ((
s1 + s5) / 2.0 + (s11 + s12) / 2.0 + (p1 + p3 + p5 + p7) / 4.0);
 
 3434               r5 = r5 - ((s9 + s11) / 2.0 + (s2 + s6) / 2.0 + (p1 + p2 + p5 + p6) / 4.0);
 
 3435               r6 = r6 - ((s4 + s8) / 2.0 + (s10 + s12) / 2.0 + (p3 + p4 + p7 + p8) / 4.0);
 
 3436               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;
 
 3440               working_space[
x][
y][z] = 
a;
 
 3444      for(z = i;z < sizez_ext - i; z++){
 
 3445         for(
y = i;
y < sizey_ext - i; 
y++){
 
 3446            for(
x = i;
x < sizex_ext - i; 
x++){
 
 3447               working_space[
x][
y][z + sizez_ext] = working_space[
x][
y][z];
 
 3452   for(k = 0;k < sizez_ext; k++){
 
 3453      for(j = 0;j < sizey_ext; j++){
 
 3454         for(i = 0;i < sizex_ext; i++){
 
 3458                     working_space[i][j][k + 3 * sizez_ext] = source[0][0][0] - working_space[i][j][k + sizez_ext];
 
 3460                  else if(k >= ssizez + shift)
 
 3461                     working_space[i][j][k + 3 * sizez_ext] = source[0][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3464                     working_space[i][j][k + 3 * sizez_ext] = source[0][0][k - shift] - working_space[i][j][k + sizez_ext];
 
 3467               else if(j >= ssizey + shift){
 
 3469                     working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
 
 3471                  else if(k >= ssizez + shift)
 
 3472                     working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3475                     working_space[i][j][k + 3 * sizez_ext] = source[0][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
 
 3480                     working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][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][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3486                     working_space[i][j][k + 3 * sizez_ext] = source[0][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
 
 3490            else if(i >= ssizex + shift){
 
 3493                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][0] - working_space[i][j][k + sizez_ext];
 
 3495                  else if(k >= ssizez + shift)
 
 3496                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3499                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][0][k - shift] - working_space[i][j][k + sizez_ext];
 
 3502               else if(j >= ssizey + shift){
 
 3504                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
 
 3506                  else if(k >= ssizez + shift)
 
 3507                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3510                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
 
 3515                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][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][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3521                     working_space[i][j][k + 3 * sizez_ext] = source[ssizex - 1][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
 
 3528                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][0] - working_space[i][j][k + sizez_ext];
 
 3530                  else if(k >= ssizez + shift)
 
 3531                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3534                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][0][k - shift] - working_space[i][j][k + sizez_ext];
 
 3537               else if(j >= ssizey + shift){
 
 3539                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][0] - working_space[i][j][k + sizez_ext];
 
 3541                  else if(k >= ssizez + shift)
 
 3542                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3545                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][ssizey - 1][k - shift] - working_space[i][j][k + sizez_ext];
 
 3550                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][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][j - shift][ssizez - 1] - working_space[i][j][k + sizez_ext];
 
 3556                     working_space[i][j][k + 3 * sizez_ext] = source[i - shift][j - shift][k - shift] - working_space[i][j][k + sizez_ext];
 
 3563   for(i = 0;i < sizex_ext; i++){
 
 3564      for(j = 0;j < sizey_ext; j++){
 
 3565         for(k = 0;k < sizez_ext; k++){
 
 3566            if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift && k >= shift && k < ssizez + shift){
 
 3567               working_space[i][j][k + 2 * sizez_ext] = source[i - shift][j - shift][k - shift];
 
 3568               plocha_markov = plocha_markov + source[i - shift][j - shift][k - shift];
 
 3571               working_space[i][j][k + 2 * sizez_ext] = 0;
 
 3578      xmax = sizex_ext - 1;
 
 3580      ymax = sizey_ext - 1;
 
 3582      zmax = sizez_ext - 1;
 
 3583      for(i = 0,maxch = 0;i < sizex_ext; i++){
 
 3584         for(j = 0;j < sizey_ext;j++){
 
 3585            for(k = 0;k < sizez_ext;k++){
 
 3586               working_space[i][j][k] = 0;
 
 3587               if(maxch < working_space[i][j][k + 2 * sizez_ext])
 
 3588                  maxch = working_space[i][j][k + 2 * sizez_ext];
 
 3590               plocha += working_space[i][j][k + 2 * sizez_ext];
 
 3595         delete [] working_space;
 
 3600      working_space[
xmin][
ymin][zmin] = 1;
 
 3602         nip = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3603         nim = working_space[i + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3605         for(
l = 1;
l <= averWindow; 
l++){
 
 3607               a = working_space[
xmax][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3610               a = working_space[i + 
l][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3622            if(i - 
l + 1 < 
xmin)
 
 3623               a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3626               a = working_space[i - 
l + 1][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3640         a = working_space[i + 1][
ymin][zmin] = 
a * working_space[i][
ymin][zmin];
 
 3644         nip = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
 
 3645         nim = working_space[
xmin][i + 1][zmin + 2 * sizez_ext] / maxch;
 
 3647         for(
l = 1;
l <= averWindow; 
l++){
 
 3649               a = working_space[
xmin][
ymax][zmin + 2 * sizez_ext] / maxch;
 
 3652               a = working_space[
xmin][i + 
l][zmin + 2 * sizez_ext] / maxch;
 
 3664            if(i - 
l + 1 < 
ymin)
 
 3665               a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3668               a = working_space[
xmin][i - 
l + 1][zmin + 2 * sizez_ext] / maxch;
 
 3682         a = working_space[
xmin][i + 1][zmin] = 
a * working_space[
xmin][i][zmin];
 
 3685      for(i = zmin;i < zmax;i++){
 
 3686         nip = working_space[
xmin][
ymin][i + 2 * sizez_ext] / maxch;
 
 3687         nim = working_space[
xmin][
ymin][i + 1 + 2 * sizez_ext] / maxch;
 
 3689         for(
l = 1;
l <= averWindow;
l++){
 
 3691               a = working_space[
xmin][
ymin][zmax + 2 * sizez_ext] / maxch;
 
 3694               a = working_space[
xmin][
ymin][i + 
l + 2 * sizez_ext] / maxch;
 
 3706            if(i - 
l + 1 < zmin)
 
 3707               a = working_space[
xmin][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3710               a = working_space[
xmin][
ymin][i - 
l + 1 + 2 * sizez_ext] / maxch;
 
 3729            nip = working_space[i][j + 1][zmin + 2 * sizez_ext] / maxch;
 
 3730            nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
 
 3732            for(
l = 1;
l <= averWindow; 
l++){
 
 3734                 a = working_space[
xmax][j][zmin + 2 * sizez_ext] / maxch;
 
 3737                  a = working_space[i + 
l][j][zmin + 2 * sizez_ext] / maxch;
 
 3749               if(i - 
l + 1 < 
xmin)
 
 3750                  a = working_space[
xmin][j][zmin + 2 * sizez_ext] / maxch;
 
 3753                  a = working_space[i - 
l + 1][j][zmin + 2 * sizez_ext] / maxch;
 
 3767            nip = working_space[i + 1][j][zmin + 2 * sizez_ext] / maxch;
 
 3768            nim = working_space[i + 1][j + 1][zmin + 2 * sizez_ext] / maxch;
 
 3769            for(
l = 1;
l <= averWindow; 
l++){
 
 3771                  a = working_space[i][
ymax][zmin + 2 * sizez_ext] / maxch;
 
 3774                  a = working_space[i][j + 
l][zmin + 2 * sizez_ext] / maxch;
 
 3786               if(j - 
l + 1 < 
ymin)
 
 3787                  a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3790                  a = working_space[i][j - 
l + 1][zmin + 2 * sizez_ext] / maxch;
 
 3803            a = (spx * working_space[i][j + 1][zmin] + spy * working_space[i + 1][j][zmin]) / (smx + smy);
 
 3804            working_space[i + 1][j + 1][zmin] = 
a;
 
 3809         for(j = zmin;j < zmax;j++){
 
 3810            nip = working_space[i][
ymin][j + 1 + 2 * sizez_ext] / maxch;
 
 3811            nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
 
 3813            for(
l = 1;
l <= averWindow; 
l++){
 
 3815                  a = working_space[
xmax][
ymin][j + 2 * sizez_ext] / maxch;
 
 3818                  a = working_space[i + 
l][
ymin][j + 2 * sizez_ext] / maxch;
 
 3830               if(i - 
l + 1 < 
xmin)
 
 3831                  a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
 
 3834                  a = working_space[i - 
l + 1][
ymin][j + 2 * sizez_ext] / maxch;
 
 3848            nip = working_space[i + 1][
ymin][j + 2 * sizez_ext] / maxch;
 
 3849            nim = working_space[i + 1][
ymin][j + 1 + 2 * sizez_ext] / maxch;
 
 3850            for(
l = 1;
l <= averWindow; 
l++){
 
 3852                  a = working_space[i][
ymin][zmax + 2 * sizez_ext] / maxch;
 
 3855                  a = working_space[i][
ymin][j + 
l + 2 * sizez_ext] / maxch;
 
 3867               if(j - 
l + 1 < zmin)
 
 3868                  a = working_space[i][
ymin][zmin + 2 * sizez_ext] / maxch;
 
 3871                  a = working_space[i][
ymin][j - 
l + 1 + 2 * sizez_ext] / maxch;
 
 3884            a = (spx * working_space[i][
ymin][j + 1] + spz * working_space[i + 1][
ymin][j]) / (smx + smz);
 
 3885            working_space[i + 1][
ymin][j + 1] = 
a;
 
 3890         for(j = zmin;j < zmax;j++){
 
 3891            nip = working_space[
xmin][i][j + 1 + 2 * sizez_ext] / maxch;
 
 3892            nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
 
 3894            for(
l = 1;
l <= averWindow; 
l++){
 
 3896                  a = working_space[
xmin][
ymax][j + 2 * sizez_ext] / maxch;
 
 3899                  a = working_space[
xmin][i + 
l][j + 2 * sizez_ext] / maxch;
 
 3911               if(i - 
l + 1 < 
ymin)
 
 3912                  a = working_space[
xmin][
ymin][j + 2 * sizez_ext] / maxch;
 
 3915                  a = working_space[
xmin][i - 
l + 1][j + 2 * sizez_ext] / maxch;
 
 3929            nip = working_space[
xmin][i + 1][j + 2 * sizez_ext] / maxch;
 
 3930            nim = working_space[
xmin][i + 1][j + 1 + 2 * sizez_ext] / maxch;
 
 3931            for(
l = 1;
l <= averWindow; 
l++){
 
 3933                  a = working_space[
xmin][i][zmax + 2 * sizez_ext] / maxch;
 
 3936                  a = working_space[
xmin][i][j + 
l + 2 * sizez_ext] / maxch;
 
 3948               if(j - 
l + 1 < zmin)
 
 3949                  a = working_space[
xmin][i][zmin + 2 * sizez_ext] / maxch;
 
 3952                  a = working_space[
xmin][i][j - 
l + 1 + 2 * sizez_ext] / maxch;
 
 3965            a = (spy * working_space[
xmin][i][j + 1] + spz * working_space[
xmin][i + 1][j]) / (smy + smz);
 
 3966            working_space[
xmin][i + 1][j + 1] = 
a;
 
 3972            for(k = zmin;k < zmax; k++){
 
 3973               nip = working_space[i][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 3974               nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 3976               for(
l = 1;
l <= averWindow; 
l++){
 
 3978                     a = working_space[
xmax][j][k + 2 * sizez_ext] / maxch;
 
 3981                     a = working_space[i + 
l][j][k + 2 * sizez_ext] / maxch;
 
 3993                  if(i - 
l + 1 < 
xmin)
 
 3994                     a = working_space[
xmin][j][k + 2 * sizez_ext] / maxch;
 
 3997                     a = working_space[i - 
l + 1][j][k + 2 * sizez_ext] / maxch;
 
 4011               nip = working_space[i + 1][j][k + 1 + 2 * sizez_ext] / maxch;
 
 4012               nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 4013               for(
l = 1;
l <= averWindow; 
l++){
 
 4015                     a = working_space[i][
ymax][k + 2 * sizez_ext] / maxch;
 
 4018                     a = working_space[i][j + 
l][k + 2 * sizez_ext] / maxch;
 
 4030                  if(j - 
l + 1 < 
ymin)
 
 4031                     a = working_space[i][
ymin][k + 2 * sizez_ext] / maxch;
 
 4034                     a = working_space[i][j - 
l + 1][k + 2 * sizez_ext] / maxch;
 
 4048               nip = working_space[i + 1][j + 1][k + 2 * sizez_ext] / maxch;
 
 4049               nim = working_space[i + 1][j + 1][k + 1 + 2 * sizez_ext] / maxch;
 
 4050               for(
l = 1;
l <= averWindow; 
l++ ){
 
 4052                     a = working_space[i][j][zmax + 2 * sizez_ext] / maxch;
 
 4055                     a = working_space[i][j][k + 
l + 2 * sizez_ext] / maxch;
 
 4067                  if(j - 
l + 1 < 
ymin)
 
 4068                     a = working_space[i][j][zmin + 2 * sizez_ext] / maxch;
 
 4071                     a = working_space[i][j][k - 
l + 1 + 2 * sizez_ext] / maxch;
 
 4084               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);
 
 4085               working_space[i + 1][j + 1][k + 1] = 
a;
 
 4093            for(k = zmin;k <= zmax; k++){
 
 4094               working_space[i][j][k] = working_space[i][j][k] / nom;
 
 4095               a+=working_space[i][j][k];
 
 4099      for(i = 0;i < sizex_ext; i++){
 
 4100         for(j = 0;j < sizey_ext; j++){
 
 4101            for(k = 0;k < sizez_ext; k++){
 
 4102               working_space[i][j][k + 2 * sizez_ext] = working_space[i][j][k] * plocha_markov / 
a;
 
 4109   for(k = 0;k < ssizez; k++){
 
 4110      for(j = 0;j < ssizey; j++){
 
 4111         for(i = 0;i < ssizex; i++){
 
 4112            working_space[i][j][k] = 0;
 
 4113            working_space[i][j][sizez_ext + k] = 0;
 
 4114            if(working_space[i][j][k + 3 * sizez_ext] > maximum)
 
 4115               maximum=working_space[i][j][k+3*sizez_ext];
 
 4123   for(i = -j;i <= j; i++){
 
 4141      c[i] = 
c[i] / norma;
 
 4143   a = pocet_sigma * 
sigma + 0.5;
 
 4146   zmax = sizez_ext - i - 1;
 
 4148   ymax = sizey_ext - i - 1;
 
 4150   xmax = sizex_ext - i - 1;
 
 4155         for(k = zmin;k <= zmax; k++){
 
 4157            for(li = lmin;li <= lmax; li++){
 
 4158               for(lj = lmin;lj <= lmax; lj++){
 
 4159                  for(lk = lmin;lk <= lmax; lk++){
 
 4161                     b = 
c[li] * 
c[lj] * 
c[lk];
 
 4167            working_space[i][j][k] = 
s;
 
 4174         for(z = zmin + 1;z < zmax; z++){
 
 4175            val = working_space[
x][
y][z];
 
 4176            val1 =  working_space[
x - 1][
y - 1][z - 1];
 
 4177            val2 =  working_space[
x    ][
y - 1][z - 1];
 
 4178            val3 =  working_space[
x + 1][
y - 1][z - 1];
 
 4179            val4 =  working_space[
x - 1][
y    ][z - 1];
 
 4180            val5 =  working_space[
x    ][
y    ][z - 1];
 
 4181            val6 =  working_space[
x + 1][
y    ][z - 1];
 
 4182            val7 =  working_space[
x - 1][
y + 1][z - 1];
 
 4183            val8 =  working_space[
x    ][
y + 1][z - 1];
 
 4184            val9 =  working_space[
x + 1][
y + 1][z - 1];
 
 4185            val10 = working_space[
x - 1][
y - 1][z    ];
 
 4186            val11 = working_space[
x    ][
y - 1][z    ];
 
 4187            val12 = working_space[
x + 1][
y - 1][z    ];
 
 4188            val13 = working_space[
x - 1][
y    ][z    ];
 
 4189            val14 = working_space[
x + 1][
y    ][z    ];
 
 4190            val15 = working_space[
x - 1][
y + 1][z    ];
 
 4191            val16 = working_space[
x    ][
y + 1][z    ];
 
 4192            val17 = working_space[
x + 1][
y + 1][z    ];
 
 4193            val18 = working_space[
x - 1][
y - 1][z + 1];
 
 4194            val19 = working_space[
x    ][
y - 1][z + 1];
 
 4195            val20 = working_space[
x + 1][
y - 1][z + 1];
 
 4196            val21 = working_space[
x - 1][
y    ][z + 1];
 
 4197            val22 = working_space[
x    ][
y    ][z + 1];
 
 4198            val23 = working_space[
x + 1][
y    ][z + 1];
 
 4199            val24 = working_space[
x - 1][
y + 1][z + 1];
 
 4200            val25 = working_space[
x    ][
y + 1][z + 1];
 
 4201            val26 = working_space[
x + 1][
y + 1][z + 1];
 
 4202            f = -s_f_ratio_peaks * working_space[
x][
y][z + sizez_ext];
 
 4203            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){
 
 4205            for(li = lmin;li <= lmax; li++){
 
 4206               a = working_space[
x + li - 
PEAK_WINDOW / 2][
y][z + 2 * sizez_ext];
 
 4208               f += 
a * 
c[li] * 
c[li];
 
 4210            f = -s_f_ratio_peaks * 
sqrt(
f);
 
 4213               for(li = lmin;li <= lmax; li++){
 
 4214                  a = working_space[
x][
y + li - 
PEAK_WINDOW / 2][z + 2 * sizez_ext];
 
 4216                  f += 
a * 
c[li] * 
c[li];
 
 4218               f = -s_f_ratio_peaks * 
sqrt(
f);
 
 4221                  for(li = lmin;li <= lmax; li++){
 
 4222                     a = working_space[
x][
y][z + li - 
PEAK_WINDOW / 2 + 2 * sizez_ext];
 
 4224                     f += 
a * 
c[li] * 
c[li];
 
 4226                  f = -s_f_ratio_peaks * 
sqrt(
f);
 
 4229                     for(li = lmin;li <= lmax; li++){
 
 4230                        for(lj = lmin;lj <= lmax; lj++){
 
 4232                           s += 
a * 
c[li] * 
c[lj];
 
 4233                           f += 
a * 
c[li] * 
c[li] * 
c[lj] * 
c[lj];
 
 4236                     f = s_f_ratio_peaks * 
sqrt(
f);
 
 4239                        for(li = lmin;li <= lmax; li++){
 
 4240                           for(lj = lmin;lj <= lmax; lj++){
 
 4242                              s += 
a * 
c[li] * 
c[lj];
 
 4243                              f += 
a * 
c[li] * 
c[li] * 
c[lj] * 
c[lj];
 
 4246                        f = s_f_ratio_peaks * 
sqrt(
f);
 
 4249                           for(li = lmin;li <= lmax; li++){
 
 4250                              for(lj=lmin;lj<=lmax;lj++){
 
 4252                                 s += 
a * 
c[li] * 
c[lj];
 
 4253                                 f += 
a * 
c[li] * 
c[li] * 
c[lj] * 
c[lj];
 
 4256                           f = s_f_ratio_peaks * 
sqrt(
f);
 
 4258                                 if(
x >= shift && x < ssizex + shift && y >= shift && y < ssizey + shift && z >= shift && z < ssizez + shift){
 
 4259                                    if(working_space[
x][
y][z + 3 * sizez_ext] > threshold * maximum / 100.0){
 
 4261                                          for(k = 
x - 1,
a = 0,
b = 0;k <= 
x + 1; k++){
 
 4262                                             a += (
Double_t)(k - shift) * working_space[k][
y][z];
 
 4263                                             b += working_space[k][
y][z];
 
 4266                                          for(k = 
y - 1,
a = 0,
b = 0;k <= 
y + 1; k++){
 
 4267                                             a += (
Double_t)(k - shift) * working_space[
x][k][z];
 
 4268                                             b += working_space[
x][k][z];
 
 4271                                          for(k = z - 1,
a = 0,
b = 0;k <= z + 1; k++){
 
 4272                                             a += (
Double_t)(k - shift) * working_space[
x][
y][k];
 
 4273                                             b += working_space[
x][
y][k];
 
 4290   for(i = 0;i < ssizex; i++){
 
 4291      for(j = 0;j < ssizey; j++){
 
 4292         for(k = 0;k < ssizez; k++){
 
 4293            val = -working_space[i + shift][j + shift][k + shift];
 
 4296            dest[i][j][k] = val;
 
 4302   for(i = 0;i < ssizex + k; i++){
 
 4303      for(j = 0;j < ssizey + k; j++)
 
 4304         delete[] working_space[i][j];
 
 4305      delete[] working_space[i];
 
 4307   delete[] working_space;
 
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
 
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.
 
@ kBackSuccessiveFiltering
 
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
 
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...
 
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...
 
static constexpr double s
 
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)