47#define PEAK_WINDOW 1024 
  158   Error(
"Background",
"function not yet implemented: h=%s, iter=%d, option=%sn" 
  159        , 
h->GetName(), number_of_iterations, option);
 
  168   printf(
"\nNumber of positions = %d\n",
fNPeaks);
 
  212   if (dimension != 2) {
 
  213      Error(
"Search", 
"Must be a 2-d histogram");
 
  232   Int_t i, j, binx,biny, npeaks;
 
  235   for (i = 0; i < sizex; i++) {
 
  238      for (j = 0; j < sizey; j++) {
 
  249   for (i = 0; i < npeaks; i++) {
 
  255   for (i = 0; i < sizex; i++) {
 
  264   if (!npeaks) 
return 0;
 
  275   ((
TH1*)hin)->Draw(option);
 
  369                       Int_t numberIterationsX,
 
  370                       Int_t numberIterationsY,
 
  374   Int_t i, 
x, 
y, sampling, r1, r2;
 
  376   if (ssizex <= 0 || ssizey <= 0)
 
  377      return "Wrong parameters";
 
  378   if (numberIterationsX < 1 || numberIterationsY < 1)
 
  379      return "Width of Clipping Window Must Be Positive";
 
  380   if (ssizex < 2 * numberIterationsX + 1
 
  381        || ssizey < 2 * numberIterationsY + 1)
 
  382      return (
"Too Large Clipping Window");
 
  384   for (i = 0; i < ssizex; i++)
 
  385      working_space[i] = 
new Double_t[ssizey];
 
  390         for (i = 1; i <= sampling; i++) {
 
  393            for (
y = r2; 
y < ssizey - r2; 
y++) {
 
  394               for (
x = r1; 
x < ssizex - r1; 
x++) {
 
  396                  p1 = spectrum[
x - r1][
y - r2];
 
  397                  p2 = spectrum[
x - r1][
y + r2];
 
  398                  p3 = spectrum[
x + r1][
y - r2];
 
  399                  p4 = spectrum[
x + r1][
y + r2];
 
  400                  s1 = spectrum[
x][
y - r2];
 
  401                  s2 = spectrum[
x - r1][
y];
 
  402                  s3 = spectrum[
x + r1][
y];
 
  403                  s4 = spectrum[
x][
y + r2];
 
  416                  s1 = 
s1 - (p1 + p3) / 2.0;
 
  417                  s2 = s2 - (p1 + p2) / 2.0;
 
  418                  s3 = s3 - (p3 + p4) / 2.0;
 
  419                  s4 = s4 - (p2 + p4) / 2.0;
 
  420                  b = (
s1 + s4) / 2.0 + (s2 + s3) / 2.0 + (p1 + p2 +
 
  425                  working_space[
x][
y] = 
a;
 
  428            for (
y = r2; 
y < ssizey - r2; 
y++) {
 
  429               for (
x = r1; 
x < ssizex - r1; 
x++) {
 
  430                  spectrum[
x][
y] = working_space[
x][
y];
 
  437         for (i = 1; i <= sampling; i++) {
 
  440            for (
y = r2; 
y < ssizey - r2; 
y++) {
 
  441               for (
x = r1; 
x < ssizex - r1; 
x++) {
 
  443                  b = -(spectrum[
x - r1][
y - r2] +
 
  444                         spectrum[
x - r1][
y + r2] + spectrum[
x + r1][
y -
 
  446                         + spectrum[
x + r1][
y + r2]) / 4 +
 
  447                      (spectrum[
x][
y - r2] + spectrum[
x - r1][
y] +
 
  448                       spectrum[
x + r1][
y] + spectrum[
x][
y + r2]) / 2;
 
  451                  working_space[
x][
y] = 
a;
 
  454            for (
y = i; 
y < ssizey - i; 
y++) {
 
  455               for (
x = i; 
x < ssizex - i; 
x++) {
 
  456                  spectrum[
x][
y] = working_space[
x][
y];
 
  465         for (i = sampling; i >= 1; i--) {
 
  468            for (
y = r2; 
y < ssizey - r2; 
y++) {
 
  469               for (
x = r1; 
x < ssizex - r1; 
x++) {
 
  471                  p1 = spectrum[
x - r1][
y - r2];
 
  472                  p2 = spectrum[
x - r1][
y + r2];
 
  473                  p3 = spectrum[
x + r1][
y - r2];
 
  474                  p4 = spectrum[
x + r1][
y + r2];
 
  475                  s1 = spectrum[
x][
y - r2];
 
  476                  s2 = spectrum[
x - r1][
y];
 
  477                  s3 = spectrum[
x + r1][
y];
 
  478                  s4 = spectrum[
x][
y + r2];
 
  491                  s1 = 
s1 - (p1 + p3) / 2.0;
 
  492                  s2 = s2 - (p1 + p2) / 2.0;
 
  493                  s3 = s3 - (p3 + p4) / 2.0;
 
  494                  s4 = s4 - (p2 + p4) / 2.0;
 
  495                  b = (
s1 + s4) / 2.0 + (s2 + s3) / 2.0 + (p1 + p2 +
 
  500                  working_space[
x][
y] = 
a;
 
  503            for (
y = r2; 
y < ssizey - r2; 
y++) {
 
  504               for (
x = r1; 
x < ssizex - r1; 
x++) {
 
  505                  spectrum[
x][
y] = working_space[
x][
y];
 
  512         for (i = sampling; i >= 1; i--) {
 
  515            for (
y = r2; 
y < ssizey - r2; 
y++) {
 
  516               for (
x = r1; 
x < ssizex - r1; 
x++) {
 
  518                  b = -(spectrum[
x - r1][
y - r2] +
 
  519                         spectrum[
x - r1][
y + r2] + spectrum[
x + r1][
y -
 
  521                         + spectrum[
x + r1][
y + r2]) / 4 +
 
  522                      (spectrum[
x][
y - r2] + spectrum[
x - r1][
y] +
 
  523                       spectrum[
x + r1][
y] + spectrum[
x][
y + r2]) / 2;
 
  526                  working_space[
x][
y] = 
a;
 
  529            for (
y = i; 
y < ssizey - i; 
y++) {
 
  530               for (
x = i; 
x < ssizex - i; 
x++) {
 
  531                  spectrum[
x][
y] = working_space[
x][
y];
 
  537   for (i = 0; i < ssizex; i++)
 
  538      delete[]working_space[i];
 
  539   delete[]working_space;
 
  585   Double_t nom, nip, nim, sp, sm, spx, spy, smx, smy, plocha = 0;
 
  587      return "Averaging Window must be positive";
 
  589   for(i = 0; i < ssizex; i++)
 
  590      working_space[i] = 
new Double_t[ssizey];
 
  595   for(i = 0, maxch = 0; i < ssizex; i++){
 
  596      for(j = 0; j < ssizey; j++){
 
  597         working_space[i][j] = 0;
 
  598         if(maxch < source[i][j])
 
  599            maxch = source[i][j];
 
  601         plocha += source[i][j];
 
  605      for (i = 0; i < ssizex; i++)
 
  606         delete[]working_space[i];
 
  607      delete [] working_space;
 
  614      nip = source[i][
ymin] / maxch;
 
  615      nim = source[i + 1][
ymin] / maxch;
 
  617      for(
l = 1; 
l <= averWindow; 
l++){
 
  622            a = source[i + 
l][
ymin] / maxch;
 
  636            a = source[i - 
l + 1][
ymin] / maxch;
 
  648      a = working_space[i + 1][
ymin] = 
a * working_space[i][
ymin];
 
  652      nip = source[
xmin][i] / maxch;
 
  653      nim = source[
xmin][i + 1] / maxch;
 
  655      for(
l = 1; 
l <= averWindow; 
l++){
 
  660            a = source[
xmin][i + 
l] / maxch;
 
  674            a = source[
xmin][i - 
l + 1] / maxch;
 
  686      a = working_space[
xmin][i + 1] = 
a * working_space[
xmin][i];
 
  691         nip = source[i][j + 1] / maxch;
 
  692         nim = source[i + 1][j + 1] / maxch;
 
  694         for(
l = 1; 
l <= averWindow; 
l++){
 
  696               a = source[
xmax][j] / maxch;
 
  699               a = source[i + 
l][j] / maxch;
 
  710               a = source[
xmin][j] / maxch;
 
  713               a = source[i - 
l + 1][j] / maxch;
 
  725         nip = source[i + 1][j] / maxch;
 
  726         nim = source[i + 1][j + 1] / maxch;
 
  727         for (
l = 1; 
l <= averWindow; 
l++) {
 
  729            else              a = source[i][j + 
l] / maxch;
 
  731            if (
a + nip <= 0) 
a = 1;
 
  736            if (j - 
l + 1 < 
ymin) 
a = source[i][
ymin] / maxch;
 
  737            else                  a = source[i][j - 
l + 1] / maxch;
 
  739            if (
a + nim <= 0) 
a = 1;
 
  745         a = (spx * working_space[i][j + 1] + spy * working_space[i + 1][j]) / (smx +smy);
 
  746         working_space[i + 1][j + 1] = 
a;
 
  752         working_space[i][j] = working_space[i][j] / nom;
 
  755   for(i = 0;i < ssizex; i++){
 
  756      for(j = 0; j < ssizey; j++){
 
  757         source[i][j] = plocha * working_space[i][j];
 
  760   for (i = 0; i < ssizex; i++)
 
  761      delete[]working_space[i];
 
  762   delete[]working_space;
 
  835                                       Int_t numberIterations,
 
  836                                       Int_t numberRepetitions,
 
  839   Int_t i, j, lhx, lhy, i1, i2, j1, j2, k1, k2, lindex, i1min, i1max,
 
  840       i2min, i2max, j1min, j1max, j2min, j2max, positx = 0, posity = 0, repet;
 
  841   Double_t lda, ldb, ldc, area, maximum = 0;
 
  842   if (ssizex <= 0 || ssizey <= 0)
 
  843      return "Wrong parameters";
 
  844   if (numberIterations <= 0)
 
  845      return "Number of iterations must be positive";
 
  846   if (numberRepetitions <= 0)
 
  847      return "Number of repetitions must be positive";
 
  849   for (i = 0; i < ssizex; i++)
 
  850      working_space[i] = 
new Double_t[5 * ssizey];
 
  853   for (i = 0; i < ssizex; i++) {
 
  854      for (j = 0; j < ssizey; j++) {
 
  862         working_space[i][j] = lda;
 
  866            positx = i, posity = j;
 
  870   if (lhx == -1 || lhy == -1) {
 
  871      for (i = 0; i < ssizex; i++)
 
  872         delete[]working_space[i];
 
  873      delete [] working_space;
 
  874      return (
"Zero response data");
 
  878   for (i2 = 0; i2 < ssizey; i2++) {
 
  879      for (i1 = 0; i1 < ssizex; i1++) {
 
  881         for (j2 = 0; j2 <= (lhy - 1); j2++) {
 
  882            for (j1 = 0; j1 <= (lhx - 1); j1++) {
 
  883               k2 = i2 + j2, k1 = i1 + j1;
 
  884               if (k2 >= 0 && k2 < ssizey && k1 >= 0 && k1 < ssizex) {
 
  885                  lda = working_space[j1][j2];
 
  886                  ldb = source[k1][k2];
 
  887                  ldc = ldc + lda * ldb;
 
  891         working_space[i1][i2 + ssizey] = ldc;
 
  896   i1min = -(lhx - 1), i1max = lhx - 1;
 
  897   i2min = -(lhy - 1), i2max = lhy - 1;
 
  898   for (i2 = i2min; i2 <= i2max; i2++) {
 
  899      for (i1 = i1min; i1 <= i1max; i1++) {
 
  904         j2max = lhy - 1 - i2;
 
  907         for (j2 = j2min; j2 <= j2max; j2++) {
 
  911            j1max = lhx - 1 - i1;
 
  914            for (j1 = j1min; j1 <= j1max; j1++) {
 
  915               lda = working_space[j1][j2];
 
  916               if (i1 + j1 < ssizex && i2 + j2 < ssizey)
 
  917                  ldb = working_space[i1 + j1][i2 + j2];
 
  920               ldc = ldc + lda * ldb;
 
  923         working_space[i1 - i1min][i2 - i2min + 2 * ssizey ] = ldc;
 
  928   for (i2 = 0; i2 < ssizey; i2++) {
 
  929      for (i1 = 0; i1 < ssizex; i1++) {
 
  930         working_space[i1][i2 + 3 * ssizey] = 1;
 
  931         working_space[i1][i2 + 4 * ssizey] = 0;
 
  936   for (repet = 0; repet < numberRepetitions; repet++) {
 
  938         for (i = 0; i < ssizex; i++) {
 
  939            for (j = 0; j < ssizey; j++) {
 
  940               working_space[i][j + 3 * ssizey] =
 
  945      for (lindex = 0; lindex < numberIterations; lindex++) {
 
  946         for (i2 = 0; i2 < ssizey; i2++) {
 
  947            for (i1 = 0; i1 < ssizex; i1++) {
 
  953               j2max = ssizey - i2 - 1;
 
  960               j1max = ssizex - i1 - 1;
 
  963               for (j2 = j2min; j2 <= j2max; j2++) {
 
  964                  for (j1 = j1min; j1 <= j1max; j1++) {
 
  965                     ldc =  working_space[j1 - i1min][j2 - i2min + 2 * ssizey];
 
  966                     lda = working_space[i1 + j1][i2 + j2 + 3 * ssizey];
 
  967                     ldb = ldb + lda * ldc;
 
  970               lda = working_space[i1][i2 + 3 * ssizey];
 
  971               ldc = working_space[i1][i2 + 1 * ssizey];
 
  972               if (ldc * lda != 0 && ldb != 0) {
 
  973                  lda = lda * ldc / ldb;
 
  978               working_space[i1][i2 + 4 * ssizey] = lda;
 
  981         for (i2 = 0; i2 < ssizey; i2++) {
 
  982            for (i1 = 0; i1 < ssizex; i1++)
 
  983               working_space[i1][i2 + 3 * ssizey] =
 
  984                   working_space[i1][i2 + 4 * ssizey];
 
  988   for (i = 0; i < ssizex; i++) {
 
  989      for (j = 0; j < ssizey; j++)
 
  990         source[(i + positx) % ssizex][(j + posity) % ssizey] =
 
  991             area * working_space[i][j + 3 * ssizey];
 
  993   for (i = 0; i < ssizex; i++)
 
  994      delete[]working_space[i];
 
  995   delete[]working_space;
 
 1095   Int_t k, lindex, priz;
 
 1096   Double_t lda, ldb, ldc, area, maximum;
 
 1097   Int_t xmin, 
xmax, 
l, peak_index = 0, ssizex_ext = ssizex + 4 * number_of_iterations, ssizey_ext = ssizey + 4 * number_of_iterations, shift = 2 * number_of_iterations;
 
 1100   Double_t nom, nip, nim, sp, sm, spx, spy, smx, smy;
 
 1103   Int_t lhx, lhy, i1, i2, j1, j2, k1, k2, i1min, i1max, i2min, i2max, j1min, j1max, j2min, j2max, positx, posity;
 
 1105      Error(
"SearchHighRes", 
"Invalid sigma, must be greater than or equal to 1");
 
 1109   if(threshold<=0||threshold>=100){
 
 1110      Error(
"SearchHighRes", 
"Invalid threshold, must be positive and less than 100");
 
 1116      Error(
"SearchHighRes", 
"Too large sigma");
 
 1120   if (markov == 
true) {
 
 1121      if (averWindow <= 0) {
 
 1122         Error(
"SearchHighRes", 
"Averaging window must be positive");
 
 1126   if(backgroundRemove == 
true){
 
 1127      if(ssizex_ext < 2 * number_of_iterations + 1 || ssizey_ext < 2 * number_of_iterations + 1){
 
 1128         Error(
"SearchHighRes", 
"Too large clipping window");
 
 1135   for (j = 0; j < ssizex + i; j++) {
 
 1137      for (k=0;k<16 * (ssizey + i);k++) wsk[k] = 0;
 
 1139   for(j = 0; j < ssizey_ext; j++){
 
 1140      for(i = 0; i < ssizex_ext; i++){
 
 1143                  working_space[i][j + ssizey_ext] = source[0][0];
 
 1145            else if(j >= ssizey + shift)
 
 1146                  working_space[i][j + ssizey_ext] = source[0][ssizey - 1];
 
 1149                  working_space[i][j + ssizey_ext] = source[0][j - shift];
 
 1152         else if(i >= ssizex + shift){
 
 1154               working_space[i][j + ssizey_ext] = source[ssizex - 1][0];
 
 1156            else if(j >= ssizey + shift)
 
 1157               working_space[i][j + ssizey_ext] = source[ssizex - 1][ssizey - 1];
 
 1160               working_space[i][j + ssizey_ext] = source[ssizex - 1][j - shift];
 
 1165               working_space[i][j + ssizey_ext] = source[i - shift][0];
 
 1167            else if(j >= ssizey + shift)
 
 1168               working_space[i][j + ssizey_ext] = source[i - shift][ssizey - 1];
 
 1171               working_space[i][j + ssizey_ext] = source[i - shift][j - shift];
 
 1175   if(backgroundRemove == 
true){
 
 1176      for(i = 1; i <= number_of_iterations; i++){
 
 1177         for(
y = i; 
y < ssizey_ext - i; 
y++){
 
 1178            for(
x = i; 
x < ssizex_ext - i; 
x++){
 
 1179               a = working_space[
x][
y + ssizey_ext];
 
 1180               p1 = working_space[
x - i][
y + ssizey_ext - i];
 
 1181               p2 = working_space[
x - i][
y + ssizey_ext + i];
 
 1182               p3 = working_space[
x + i][
y + ssizey_ext - i];
 
 1183               p4 = working_space[
x + i][
y + ssizey_ext + i];
 
 1184               s1 = working_space[
x][
y + ssizey_ext - i];
 
 1185               s2 = working_space[
x - i][
y + ssizey_ext];
 
 1186               s3 = working_space[
x + i][
y + ssizey_ext];
 
 1187               s4 = working_space[
x][
y + ssizey_ext + i];
 
 1188               b = (p1 + p2) / 2.0;
 
 1191               b = (p1 + p3) / 2.0;
 
 1194               b = (p2 + p4) / 2.0;
 
 1197               b = (p3 + p4) / 2.0;
 
 1200               s1 = 
s1 - (p1 + p3) / 2.0;
 
 1201               s2 = s2 - (p1 + p2) / 2.0;
 
 1202               s3 = s3 - (p3 + p4) / 2.0;
 
 1203               s4 = s4 - (p2 + p4) / 2.0;
 
 1204               b = (
s1 + s4) / 2.0 + (s2 + s3) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
 
 1207               working_space[
x][
y] = 
a;
 
 1210         for(
y = i;
y < ssizey_ext - i; 
y++){
 
 1211            for(
x = i; 
x < ssizex_ext - i; 
x++){
 
 1212               working_space[
x][
y + ssizey_ext] = working_space[
x][
y];
 
 1216      for(j = 0;j < ssizey_ext; j++){
 
 1217         for(i = 0; i < ssizex_ext; i++){
 
 1220                  working_space[i][j + ssizey_ext] = source[0][0] - working_space[i][j + ssizey_ext];
 
 1222               else if(j >= ssizey + shift)
 
 1223                  working_space[i][j + ssizey_ext] = source[0][ssizey - 1] - working_space[i][j + ssizey_ext];
 
 1226                  working_space[i][j + ssizey_ext] = source[0][j - shift] - working_space[i][j + ssizey_ext];
 
 1229            else if(i >= ssizex + shift){
 
 1231                  working_space[i][j + ssizey_ext] = source[ssizex - 1][0] - working_space[i][j + ssizey_ext];
 
 1233               else if(j >= ssizey + shift)
 
 1234                  working_space[i][j + ssizey_ext] = source[ssizex - 1][ssizey - 1] - working_space[i][j + ssizey_ext];
 
 1237                  working_space[i][j + ssizey_ext] = source[ssizex - 1][j - shift] - working_space[i][j + ssizey_ext];
 
 1242                  working_space[i][j + ssizey_ext] = source[i - shift][0] - working_space[i][j + ssizey_ext];
 
 1244               else if(j >= ssizey + shift)
 
 1245                  working_space[i][j + ssizey_ext] = source[i - shift][ssizey - 1] - working_space[i][j + ssizey_ext];
 
 1248                  working_space[i][j + ssizey_ext] = source[i - shift][j - shift] - working_space[i][j + ssizey_ext];
 
 1253   for(j = 0; j < ssizey_ext; j++){
 
 1254      for(i = 0; i < ssizex_ext; i++){
 
 1255         working_space[i][j + 15*ssizey_ext] = working_space[i][j + ssizey_ext];
 
 1259      for(i = 0;i < ssizex_ext; i++){
 
 1260         for(j = 0; j < ssizey_ext; j++)
 
 1261         working_space[i][j + 2 * ssizex_ext] = working_space[i][ssizey_ext + j];
 
 1264      xmax = ssizex_ext - 1;
 
 1266      ymax = ssizey_ext - 1;
 
 1267      for(i = 0, maxch = 0; i < ssizex_ext; i++){
 
 1268         for(j = 0; j < ssizey_ext; j++){
 
 1269            working_space[i][j] = 0;
 
 1270            if(maxch < working_space[i][j + 2 * ssizey_ext])
 
 1271               maxch = working_space[i][j + 2 * ssizey_ext];
 
 1272            plocha += working_space[i][j + 2 * ssizey_ext];
 
 1278         for (j = 0; j < ssizex + i; j++)
 
 1279            delete[]working_space[j];
 
 1280         delete [] working_space;
 
 1287         nip = working_space[i][
ymin + 2 * ssizey_ext] / maxch;
 
 1288         nim = working_space[i + 1][
ymin + 2 * ssizey_ext] / maxch;
 
 1290         for(
l = 1;
l <= averWindow; 
l++){
 
 1292               a = working_space[
xmax][
ymin + 2 * ssizey_ext] / maxch;
 
 1295               a = working_space[i + 
l][
ymin + 2 * ssizey_ext] / maxch;
 
 1306            if(i - 
l + 1 < 
xmin)
 
 1307               a = working_space[
xmin][
ymin + 2 * ssizey_ext] / maxch;
 
 1310               a = working_space[i - 
l + 1][
ymin + 2 * ssizey_ext] / maxch;
 
 1322         a = working_space[i + 1][
ymin] = 
a * working_space[i][
ymin];
 
 1326         nip = working_space[
xmin][i + 2 * ssizey_ext] / maxch;
 
 1327         nim = working_space[
xmin][i + 1 + 2 * ssizey_ext] / maxch;
 
 1329         for(
l = 1; 
l <= averWindow; 
l++){
 
 1331               a = working_space[
xmin][
ymax + 2 * ssizey_ext] / maxch;
 
 1334               a = working_space[
xmin][i + 
l + 2 * ssizey_ext] / maxch;
 
 1344            if(i - 
l + 1 < 
ymin)
 
 1345               a = working_space[
xmin][
ymin + 2 * ssizey_ext] / maxch;
 
 1348               a = working_space[
xmin][i - 
l + 1 + 2 * ssizey_ext] / maxch;
 
 1360         a = working_space[
xmin][i + 1] = 
a * working_space[
xmin][i];
 
 1365            nip = working_space[i][j + 1 + 2 * ssizey_ext] / maxch;
 
 1366            nim = working_space[i + 1][j + 1 + 2 * ssizey_ext] / maxch;
 
 1368            for(
l = 1; 
l <= averWindow; 
l++){
 
 1370                  a = working_space[
xmax][j + 2 * ssizey_ext] / maxch;
 
 1373                  a = working_space[i + 
l][j + 2 * ssizey_ext] / maxch;
 
 1383               if(i - 
l + 1 < 
xmin)
 
 1384                  a = working_space[
xmin][j + 2 * ssizey_ext] / maxch;
 
 1387                  a = working_space[i - 
l + 1][j + 2 * ssizey_ext] / maxch;
 
 1399            nip = working_space[i + 1][j + 2 * ssizey_ext] / maxch;
 
 1400            nim = working_space[i + 1][j + 1 + 2 * ssizey_ext] / maxch;
 
 1401            for(
l = 1; 
l <= averWindow; 
l++){
 
 1403                  a = working_space[i][
ymax + 2 * ssizey_ext] / maxch;
 
 1406                  a = working_space[i][j + 
l + 2 * ssizey_ext] / maxch;
 
 1416               if(j - 
l + 1 < 
ymin)
 
 1417                  a = working_space[i][
ymin + 2 * ssizey_ext] / maxch;
 
 1420                  a = working_space[i][j - 
l + 1 + 2 * ssizey_ext] / maxch;
 
 1430            a = (spx * working_space[i][j + 1] + spy * working_space[i + 1][j]) / (smx + smy);
 
 1431            working_space[i + 1][j + 1] = 
a;
 
 1437            working_space[i][j] = working_space[i][j] / nom;
 
 1440      for(i = 0; i < ssizex_ext; i++){
 
 1441         for(j = 0; j < ssizey_ext; j++){
 
 1442            working_space[i][j + ssizey_ext] = working_space[i][j] * plocha;
 
 1443            working_space[i][2 * ssizey_ext + j] = working_space[i][ssizey_ext + j];
 
 1450   positx = 0,posity = 0;
 
 1453   for(i = 0; i < ssizex_ext; i++){
 
 1454      for(j = 0; j < ssizey_ext; j++){
 
 1457         lda = (lda * lda + ldb * ldb) / (2 * 
sigma * 
sigma);
 
 1467         working_space[i][j] = lda;
 
 1471            positx = i,posity = j;
 
 1476   for(i = 0;i < ssizex_ext; i++){
 
 1477      for(j = 0;j < ssizey_ext; j++){
 
 1478         working_space[i][j + 14 * ssizey_ext] = 
TMath::Abs(working_space[i][j + ssizey_ext]);
 
 1490   i1min = -i,i1max = i;
 
 1491   i2min = -j,i2max = j;
 
 1492   for(i2 = i2min; i2 <= i2max; i2++){
 
 1493      for(i1 = i1min; i1 <= i1max; i1++){
 
 1499         j2max = lhy - 1 - i2;
 
 1503         for(j2 = j2min; j2 <= j2max; j2++){
 
 1508            j1max = lhx - 1 - i1;
 
 1512            for(j1 = j1min; j1 <= j1max; j1++){
 
 1513               lda = working_space[j1][j2];
 
 1514               ldb = working_space[i1 + j1][i2 + j2];
 
 1515               ldc = ldc + lda * ldb;
 
 1518         k = (i1 + ssizex_ext) / ssizex_ext;
 
 1519         working_space[(i1 + ssizex_ext) % ssizex_ext][i2 + ssizey_ext + 10 * ssizey_ext + k * 2 * ssizey_ext] = ldc;
 
 1531   i2min = -j,i2max = ssizey_ext + j - 1;
 
 1532   i1min = -i,i1max = ssizex_ext + i - 1;
 
 1533   for(i2 = i2min; i2 <= i2max; i2++){
 
 1534      for(i1=i1min;i1<=i1max;i1++){
 
 1536         for(j2 = 0; j2 <= (lhy - 1); j2++){
 
 1537            for(j1 = 0; j1 <= (lhx - 1); j1++){
 
 1538               k2 = i2 + j2,k1 = i1 + j1;
 
 1539               if(k2 >= 0 && k2 < ssizey_ext && k1 >= 0 && k1 < ssizex_ext){
 
 1540                  lda = working_space[j1][j2];
 
 1541                  ldb = working_space[k1][k2 + 14 * ssizey_ext];
 
 1542                  ldc = ldc + lda * ldb;
 
 1546         k = (i1 + ssizex_ext) / ssizex_ext;
 
 1547         working_space[(i1 + ssizex_ext) % ssizex_ext][i2 + ssizey_ext + ssizey_ext + k * 3 * ssizey_ext] = ldc;
 
 1551   for(i2 = 0; i2 < ssizey_ext; i2++){
 
 1552      for(i1 = 0; i1 < ssizex_ext; i1++){
 
 1553         k = (i1 + ssizex_ext) / ssizex_ext;
 
 1554         ldb = working_space[(i1 + ssizex_ext) % ssizex_ext][i2 + ssizey_ext + ssizey_ext + k * 3 * ssizey_ext];
 
 1555         working_space[i1][i2 + 14 * ssizey_ext] = ldb;
 
 1559   for(i2 = 0; i2 < ssizey_ext; i2++){
 
 1560      for(i1 = 0; i1 < ssizex_ext; i1++){
 
 1561         working_space[i1][i2 + ssizey_ext] = 1;
 
 1562         working_space[i1][i2 + 2 * ssizey_ext] = 0;
 
 1566   for(lindex = 0; lindex < deconIterations; lindex++){
 
 1567      for(i2 = 0; i2 < ssizey_ext; i2++){
 
 1568         for(i1 = 0; i1 < ssizex_ext; i1++){
 
 1569            lda = working_space[i1][i2 + ssizey_ext];
 
 1570            ldc = working_space[i1][i2 + 14 * ssizey_ext];
 
 1571            if(lda > 0.000001 && ldc > 0.000001){
 
 1578               j2max = ssizey_ext - i2 - 1;
 
 1587               j1max = ssizex_ext - i1 - 1;
 
 1591               for(j2 = j2min; j2 <= j2max; j2++){
 
 1592                  for(j1 = j1min; j1 <= j1max; j1++){
 
 1593                     k = (j1 + ssizex_ext) / ssizex_ext;
 
 1594                     ldc = working_space[(j1 + ssizex_ext) % ssizex_ext][j2 + ssizey_ext + 10 * ssizey_ext + k * 2 * ssizey_ext];
 
 1595                     lda = working_space[i1 + j1][i2 + j2 + ssizey_ext];
 
 1596                     ldb = ldb + lda * ldc;
 
 1599               lda = working_space[i1][i2 + ssizey_ext];
 
 1600               ldc = working_space[i1][i2 + 14 * ssizey_ext];
 
 1601               if(ldc * lda != 0 && ldb != 0){
 
 1602                  lda =lda * ldc / ldb;
 
 1607               working_space[i1][i2 + 2 * ssizey_ext] = lda;
 
 1611      for(i2 = 0; i2 < ssizey_ext; i2++){
 
 1612         for(i1 = 0; i1 < ssizex_ext; i1++)
 
 1613            working_space[i1][i2 + ssizey_ext] = working_space[i1][i2 + 2 * ssizey_ext];
 
 1618   for(i = 0; i < ssizex_ext; i++){
 
 1619      for(j = 0; j < ssizey_ext; j++){
 
 1620         working_space[(i + positx) % ssizex_ext][(j + posity) % ssizey_ext] = area * working_space[i][j + ssizey_ext];
 
 1621         if(maximum < working_space[(i + positx) % ssizex_ext][(j + posity) % ssizey_ext])
 
 1622            maximum = working_space[(i + positx) % ssizex_ext][(j + posity) % ssizey_ext];
 
 1627   for(i = 1; i < ssizex_ext - 1; i++){
 
 1628      for(j = 1; j < ssizey_ext - 1; j++){
 
 1629         if(working_space[i][j] > working_space[i - 1][j] && working_space[i][j] > working_space[i - 1][j - 1] && working_space[i][j] > working_space[i][j - 1] && working_space[i][j] > working_space[i + 1][j - 1] && working_space[i][j] > working_space[i + 1][j] && working_space[i][j] > working_space[i + 1][j + 1] && working_space[i][j] > working_space[i][j + 1] && working_space[i][j] > working_space[i - 1][j + 1]){
 
 1630            if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift){
 
 1631               if(working_space[i][j] > threshold * maximum / 100.0){
 
 1633                     for(k = i - 1,
a = 0,
b = 0; k <= i + 1; k++){
 
 1634                        a += (
Double_t)(k - shift) * working_space[k][j];
 
 1635                        b += working_space[k][j];
 
 1644                     for(k = j - 1,
a = 0,
b = 0; k <= j + 1; k++){
 
 1645                        a += (
Double_t)(k - shift) * working_space[i][k];
 
 1646                        b += working_space[i][k];
 
 1655                     if(peak_index == 0){
 
 1662                        for(k = 0, priz = 0; k < peak_index && priz == 0; k++){
 
 1674                           for(
l = peak_index; 
l >= k; 
l--){
 
 1693   for(i = 0; i < ssizex; i++){
 
 1694      for(j = 0; j < ssizey; j++){
 
 1695         dest[i][j] = working_space[i + shift][j + shift];
 
 1700   for (j = 0; j < ssizex + i; j++)
 
 1701      delete[]working_space[j];
 
 1702   delete[]working_space;
 
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
 
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
 
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
 
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
 
TH1 is the base class of all histogram classes in ROOT.
 
virtual Int_t GetDimension() const
 
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
 
TList * GetListOfFunctions() const
 
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
 
virtual void Add(TObject *obj)
 
virtual TObject * Remove(TObject *obj)
Remove object from the list.
 
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
 
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.
 
A PolyMarker is defined by an array on N points in a 2-D space.
 
Advanced 2-dimensional spectra processing.
 
Double_t fResolution
NOT USED resolution of the neighboring peaks
 
TH1 * fHistogram
resulting histogram
 
static Int_t fgIterations
Maximum number of decon iterations (default=3)
 
static void SetDeconIterations(Int_t n=3)
static function: Set max number of decon iterations in deconvolution operation see TSpectrum2::Search...
 
static TH1 * StaticBackground(const TH1 *hist, Int_t niter=20, Option_t *option="")
static function (called by TH1), interface to TSpectrum2::Background
 
const char * SmoothMarkov(Double_t **source, Int_t ssizex, Int_t ssizey, Int_t averWindow)
This function calculates smoothed spectrum from source spectrum based on Markov chain method.
 
void SetResolution(Double_t resolution=1)
NOT USED resolution: determines resolution of the neighboring peaks default value is 1 correspond to ...
 
virtual ~TSpectrum2()
Destructor.
 
static Int_t fgAverageWindow
Average window of searched peaks.
 
Int_t fMaxPeaks
Maximum number of peaks to be found.
 
Int_t SearchHighRes(Double_t **source, Double_t **dest, Int_t ssizex, Int_t ssizey, 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.
 
Int_t fNPeaks
number of peaks found
 
virtual TH1 * Background(const TH1 *hist, Int_t niter=20, Option_t *option="")
This function calculates the background spectrum in the input histogram h.
 
virtual void Print(Option_t *option="") const
Print the array of positions.
 
static void SetAverageWindow(Int_t w=3)
static function: Set average window of searched peaks see TSpectrum2::SearchHighRes
 
virtual Int_t Search(const TH1 *hist, Double_t sigma=2, Option_t *option="", Double_t threshold=0.05)
This function searches for peaks in source spectrum in hin The number of found peaks and their positi...
 
Double_t * fPositionY
[fNPeaks] Y position of peaks
 
static Int_t StaticSearch(const TH1 *hist, Double_t sigma=2, Option_t *option="goff", Double_t threshold=0.05)
static function (called by TH1), interface to TSpectrum2::Search
 
Double_t * fPosition
[fNPeaks] array of current peak positions
 
const char * Deconvolution(Double_t **source, Double_t **resp, Int_t ssizex, Int_t ssizey, Int_t numberIterations, Int_t numberRepetitions, Double_t boost)
This function calculates deconvolution from source spectrum according to response spectrum The result...
 
Double_t * fPositionX
[fNPeaks] X position of peaks
 
@ kBackSuccessiveFiltering
 
void ToLower()
Change string to lower-case.
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
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)