68 fSizeX = 0, fSizeY = 0;
69 fTransformType = kTransformCos;
71 fDirection = kTransformForward;
87 if (sizeX <= 0 || sizeY <= 0){
88 Error (
"TSpectrumTransform",
"Invalid length, must be > than 0");
98 Error (
"TSpectrumTransform",
"Invalid length, must be power of 2");
108 Error (
"TSpectrumTransform",
"Invalid length, must be power of 2");
147 Int_t i, ii, li, l2, l3, j, jj, jj1, lj, iter,
m, jmin, jmax;
150 for (i = 0; i < num; i++)
151 working_space[i + num] = 0;
159 for (m = 1; m <= iter; m++) {
162 for (i = 0; i < (2 * l2); i++) {
163 working_space[num + i] = working_space[i];
165 for (j = 0; j < l2; j++) {
168 val = working_space[jj + num] + working_space[jj + 1 + num];
169 working_space[j] = val;
170 val = working_space[jj + num] - working_space[jj + 1 + num];
171 working_space[l3] = val;
175 val = working_space[0];
177 working_space[0] = val;
178 val = working_space[1];
180 working_space[1] = val;
181 for (ii = 2; ii <= iter; ii++) {
186 for (j = jmin; j <= jmax; j++) {
187 val = working_space[j];
191 working_space[j] = val;
195 for (m = 1; m <= iter; m++) {
200 for (i = 0; i < (2 * li); i++) {
201 working_space[i + num] = working_space[i];
203 for (j = 0; j < li; j++) {
205 jj = 2 * (j + 1) - 1;
207 val = working_space[j + num] - working_space[lj + num];
208 working_space[jj] = val;
209 val = working_space[j + num] + working_space[lj + num];
210 working_space[jj1] = val;
230 Int_t i,
m, nump = 1, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter;
233 for (i = 0; i < num; i++)
234 working_space[i + num] = 0;
241 for (m = 1; m <= iter; m++) {
249 for (mp = 0; mp < nump; mp++) {
251 for (mp2 = 0; mp2 < mnum2; mp2++) {
252 mnum21 = mnum2 + mp2 + ib;
254 val1 = working_space[iba];
255 val2 = working_space[mnum21];
256 working_space[iba + num] = val1 + val2;
257 working_space[mnum21 + num] = val1 - val2;
260 for (i = 0; i < num; i++) {
261 working_space[i] = working_space[i + num];
267 for (i = 0; i < num; i++) {
268 val1 = working_space[i];
270 working_space[i] = val1;
289 Int_t i, ib, il, ibd,
ip, ifac, i1;
290 for (i = 0; i < num; i++) {
291 working_space[i + num] = working_space[i];
293 for (i = 1; i <= num; i++) {
307 for (i1 = 1; i1 <= il; i1++) {
309 ip = ip + ifac * ipower[i1 - 1];
311 working_space[ip - 1] = working_space[i - 1 + num];
332 Int_t nxp2, nxp, i, j, k,
m, iter, mxp, j1, j2, n1, n2, it;
333 Double_t a, b,
c, d,
sign, wpwr, arg, wr, wi, tr, ti,
pi =
334 3.14159265358979323846;
337 for (i = 0; i < num; i++)
338 working_space[i + num] = 0;
350 for (it = 1; it <= iter; it++) {
355 for (m = 1; m <= nxp2; m++) {
360 for (mxp = nxp; mxp <= num; mxp += nxp) {
363 val1 = working_space[j1 - 1];
364 val2 = working_space[j2 - 1];
365 val3 = working_space[j1 - 1 + num];
366 val4 = working_space[j2 - 1 + num];
375 working_space[j1 - 1] = val1;
378 working_space[j1 - 1 + num] = val1;
379 a = tr * wr - ti * wi;
381 working_space[j2 - 1] = val1;
382 a = ti * wr + tr * wi;
384 working_space[j2 - 1 + num] = val1;
391 for (i = 1; i <= n1; i++) {
394 val1 = working_space[j - 1];
395 val2 = working_space[j - 1 + num];
396 val3 = working_space[i - 1];
397 working_space[j - 1] = val3;
398 working_space[j - 1 + num] = working_space[i - 1 + num];
399 working_space[i - 1] = val1;
400 working_space[i - 1 + num] = val2;
402 lab60:
if (k >= j)
goto lab65;
410 for (i = 0; i < num; i++) {
412 val1 = working_space[i];
416 working_space[i] = val1;
417 b = working_space[i + num];
419 working_space[i + num] = b;
423 b = working_space[i];
424 c = working_space[i + num];
426 working_space[i] = b;
427 working_space[i + num] = 0;
431 for (i = 1; i < num; i++)
432 working_space[num - i + num] = working_space[i];
433 working_space[0 + num] = working_space[0];
434 for (i = 0; i < num; i++) {
435 working_space[i] = working_space[i + num];
436 working_space[i + num] = 0;
459 Int_t i, ib, il, ibd,
ip, ifac, i1;
460 for (i = 0; i < num; i++) {
461 working_space[i + shift + start] = working_space[i + start];
462 working_space[i + shift + start + 2 * shift] =
463 working_space[i + start + 2 * shift];
465 for (i = 1; i <= num; i++) {
479 for (i1 = 1; i1 <= il; i1++) {
481 ip = ip + ifac * ipower[i1 - 1];
483 working_space[ip - 1 + start] =
484 working_space[i - 1 + shift + start];
485 working_space[ip - 1 + start + 2 * shift] =
486 working_space[i - 1 + shift + start + 2 * shift];
508 Int_t i, j, k,
m, nump, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter,
509 mp2step, mppom, ring;
510 Double_t a, b,
c, d, wpwr, arg, wr, wi, tr, ti,
pi =
511 3.14159265358979323846;
512 Double_t val1, val2, val3, val4, a0oldr = 0, b0oldr = 0, a0r, b0r;
514 for (i = 0; i < num; i++)
515 working_space[i + 2 * num] = 0;
528 for (i = 0; i < iter - degree; i++)
530 for (m = 1; m <= iter; m++) {
542 for (mp = 0; mp < nump; mp++) {
545 mppom = mppom % ring;
549 for (i = 0; i < (iter - 1); i++) {
550 if ((mppom & j) != 0)
565 for (mp2 = 0; mp2 < mnum2; mp2++) {
566 mnum21 = mnum2 + mp2 + ib;
568 if (mp2 % mp2step == 0) {
579 val1 = working_space[iba];
580 val2 = working_space[mnum21];
581 val3 = working_space[iba + 2 * num];
582 val4 = working_space[mnum21 + 2 * num];
587 tr = a * a0r + b * b0r;
589 working_space[num + iba] = val1;
590 ti = c * a0r + d * b0r;
592 working_space[num + iba + 2 * num] = val1;
594 a * b0r * wr - c * b0r * wi - b * a0r * wr + d * a0r * wi;
596 working_space[num + mnum21] = val1;
598 c * b0r * wr + a * b0r * wi - d * a0r * wr - b * a0r * wi;
600 working_space[num + mnum21 + 2 * num] = val1;
603 for (i = 0; i < num; i++) {
604 val1 = working_space[num + i];
605 working_space[i] = val1;
606 val1 = working_space[num + i + 2 * num];
607 working_space[i + 2 * num] = val1;
630 1, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter, mp2step, mppom,
632 Double_t a, b,
c, d, wpwr, arg, wr, wi, tr, ti,
pi =
633 3.14159265358979323846;
634 Double_t val1, val2, val3, val4, a0oldr = 0, b0oldr = 0, a0r, b0r;
646 for (i = 0; i < iter - degree; i++)
650 for (m = 1; m <= iter; m++) {
658 if (m > iter - degree + 1)
660 for (mp = nump - 1; mp >= 0; mp--) {
663 mppom = mppom % ring;
667 for (i = 0; i < (iter - 1); i++) {
668 if ((mppom & j) != 0)
683 for (mp2 = 0; mp2 < mnum2; mp2++) {
684 mnum21 = mnum2 + mp2 + ib;
686 if (mp2 % mp2step == 0) {
697 val1 = working_space[iba];
698 val2 = working_space[mnum21];
699 val3 = working_space[iba + 2 * num];
700 val4 = working_space[mnum21 + 2 * num];
705 tr = a * a0r + b * wr * b0r + d * wi * b0r;
707 working_space[num + iba] = val1;
708 ti = c * a0r + d * wr * b0r - b * wi * b0r;
710 working_space[num + iba + 2 * num] = val1;
711 tr = a * b0r - b * wr * a0r - d * wi * a0r;
713 working_space[num + mnum21] = val1;
714 ti = c * b0r - d * wr * a0r + b * wi * a0r;
716 working_space[num + mnum21 + 2 * num] = val1;
719 if (m <= iter - degree
725 for (i = 0; i < num; i++) {
726 val1 = working_space[num + i];
727 working_space[i] = val1;
728 val1 = working_space[num + i + 2 * num];
729 working_space[i + 2 * num] = val1;
755 for (j = 0; j < numy; j++) {
756 for (i = 0; i < numx; i++) {
757 working_vector[i] = working_matrix[i][j];
764 Walsh(working_vector, numx);
768 for (i = 0; i < numx; i++) {
769 working_matrix[i][j] = working_vector[i];
772 for (i = 0; i < numx; i++) {
773 for (j = 0; j < numy; j++) {
774 working_vector[j] = working_matrix[i][j];
781 Walsh(working_vector, numy);
785 for (j = 0; j < numy; j++) {
786 working_matrix[i][j] = working_vector[j];
792 for (i = 0; i < numx; i++) {
793 for (j = 0; j < numy; j++) {
794 working_vector[j] = working_matrix[i][j];
802 Walsh(working_vector, numy);
805 for (j = 0; j < numy; j++) {
806 working_matrix[i][j] = working_vector[j];
809 for (j = 0; j < numy; j++) {
810 for (i = 0; i < numx; i++) {
811 working_vector[i] = working_matrix[i][j];
819 Walsh(working_vector, numx);
822 for (i = 0; i < numx; i++) {
823 working_matrix[i][j] = working_vector[i];
847 Int_t i, j, iterx, itery,
n, size;
877 for (j = 0; j < numy; j++) {
878 for (i = 0; i < numx; i++) {
879 working_vector[i] = working_matrix[i][j];
883 for (i = 1; i <= numx; i++) {
884 working_vector[2 * numx - i] = working_vector[i - 1];
887 for (i = 0; i < numx; i++) {
889 working_vector[i] /
TMath::Cos(pi * i / (2 * numx));
891 working_vector[0] = working_vector[0] /
TMath::Sqrt(2.);
894 for (i = 1; i <= numx; i++) {
895 working_vector[2 * numx - i] = -working_vector[i - 1];
898 for (i = 1; i < numx; i++) {
899 working_vector[i - 1] =
900 working_vector[i] /
TMath::Sin(pi * i / (2 * numx));
902 working_vector[numx - 1] =
912 for (i = 0; i < numx; i++) {
913 working_matrix[i][j] = working_vector[i];
915 working_matrix[i][j + numy] = working_vector[i + numx];
918 working_matrix[i][j + numy] = working_vector[i + 2 * numx];
921 for (i = 0; i < numx; i++) {
922 for (j = 0; j < numy; j++) {
923 working_vector[j] = working_matrix[i][j];
925 working_vector[j + numy] = working_matrix[i][j + numy];
928 working_vector[j + 2 * numy] = working_matrix[i][j + numy];
932 for (j = 1; j <= numy; j++) {
933 working_vector[2 * numy - j] = working_vector[j - 1];
936 for (j = 0; j < numy; j++) {
938 working_vector[j] /
TMath::Cos(pi * j / (2 * numy));
939 working_vector[j + 2 * numy] = 0;
941 working_vector[0] = working_vector[0] /
TMath::Sqrt(2.);
944 for (j = 1; j <= numy; j++) {
945 working_vector[2 * numy - j] = -working_vector[j - 1];
948 for (j = 1; j < numy; j++) {
949 working_vector[j - 1] =
950 working_vector[j] /
TMath::Sin(pi * j / (2 * numy));
951 working_vector[j + numy] = 0;
953 working_vector[numy - 1] =
955 working_vector[numy] = 0;
964 for (j = 0; j < numy; j++) {
965 working_matrix[i][j] = working_vector[j];
967 working_matrix[i][j + numy] = working_vector[j + numy];
970 working_matrix[i][j + numy] = working_vector[j + 2 * numy];
976 for (i = 0; i < numx; i++) {
977 for (j = 0; j < numy; j++) {
978 working_vector[j] = working_matrix[i][j];
980 working_vector[j + numy] = working_matrix[i][j + numy];
983 working_vector[j + 2 * numy] = working_matrix[i][j + numy];
987 working_vector[0] = working_vector[0] *
TMath::Sqrt(2.);
988 for (j = 0; j < numy; j++) {
989 working_vector[j + 2 * numy] =
990 working_vector[j] *
TMath::Sin(pi * j / (2 * numy));
992 working_vector[j] *
TMath::Cos(pi * j / (2 * numy));
994 for (j = 1; j < numy; j++) {
995 working_vector[2 * numy - j] = working_vector[j];
996 working_vector[2 * numy - j + 2 * numy] =
997 -working_vector[j + 2 * numy];
999 working_vector[numy] = 0;
1000 working_vector[numy + 2 * numy] = 0;
1004 working_vector[numy] =
1006 for (j = numy - 1; j > 0; j--) {
1007 working_vector[j + 2 * numy] =
1011 working_vector[j - 1] *
TMath::Sin(pi * j / (2 * numy));
1013 for (j = 1; j < numy; j++) {
1014 working_vector[2 * numy - j] = working_vector[j];
1015 working_vector[2 * numy - j + 2 * numy] =
1016 -working_vector[j + 2 * numy];
1018 working_vector[0] = 0;
1019 working_vector[0 + 2 * numy] = 0;
1020 working_vector[numy + 2 * numy] = 0;
1030 for (j = 0; j < numy; j++) {
1031 working_matrix[i][j] = working_vector[j];
1033 working_matrix[i][j + numy] = working_vector[j + numy];
1036 working_matrix[i][j + numy] = working_vector[j + 2 * numy];
1039 for (j = 0; j < numy; j++) {
1040 for (i = 0; i < numx; i++) {
1041 working_vector[i] = working_matrix[i][j];
1043 working_vector[i + numx] = working_matrix[i][j + numy];
1046 working_vector[i + 2 * numx] = working_matrix[i][j + numy];
1050 working_vector[0] = working_vector[0] *
TMath::Sqrt(2.);
1051 for (i = 0; i < numx; i++) {
1052 working_vector[i + 2 * numx] =
1053 working_vector[i] *
TMath::Sin(pi * i / (2 * numx));
1055 working_vector[i] *
TMath::Cos(pi * i / (2 * numx));
1057 for (i = 1; i < numx; i++) {
1058 working_vector[2 * numx - i] = working_vector[i];
1059 working_vector[2 * numx - i + 2 * numx] =
1060 -working_vector[i + 2 * numx];
1062 working_vector[numx] = 0;
1063 working_vector[numx + 2 * numx] = 0;
1067 working_vector[numx] =
1069 for (i = numx - 1; i > 0; i--) {
1070 working_vector[i + 2 * numx] =
1074 working_vector[i - 1] *
TMath::Sin(pi * i / (2 * numx));
1076 for (i = 1; i < numx; i++) {
1077 working_vector[2 * numx - i] = working_vector[i];
1078 working_vector[2 * numx - i + 2 * numx] =
1079 -working_vector[i + 2 * numx];
1081 working_vector[0] = 0;
1082 working_vector[0 + 2 * numx] = 0;
1083 working_vector[numx + 2 * numx] = 0;
1093 for (i = 0; i < numx; i++) {
1094 working_matrix[i][j] = working_vector[i];
1120 Int_t i, j, jstup, kstup,
l,
m;
1124 for (j = 0; j < numy; j++) {
1126 jstup = numx / kstup;
1127 for (i = 0; i < numx; i++) {
1128 val = working_matrix[i][j];
1133 kstup = 2 * kstup * jstup;
1134 working_vector[kstup + i % jstup] = val;
1135 working_vector[kstup + 2 * jstup - 1 - i % jstup] = val;
1142 kstup = 2 * kstup * jstup;
1143 working_vector[kstup + i % jstup] = val;
1144 working_vector[kstup + 2 * jstup - 1 - i % jstup] = -val;
1148 working_vector[i] = val;
1154 GeneralExe(working_vector, 0, numx, degree, type);
1155 for (i = 0; i < jstup; i++)
1162 for (i = 0; i <
l; i++)
1164 GeneralExe(working_vector, 0, 2 * numx, degree, type);
1165 for (i = 0; i < numx; i++) {
1167 kstup = 2 * kstup * jstup;
1170 b = working_vector[kstup + i % jstup];
1176 working_vector[i] =
a;
1177 working_vector[i + 4 * numx] = 0;
1184 for (i = 0; i <
l; i++)
1186 GeneralExe(working_vector, 0, 2 * numx, degree, type);
1187 for (i = 0; i < numx; i++) {
1189 kstup = 2 * kstup * jstup;
1192 b = working_vector[jstup + kstup + i % jstup];
1198 working_vector[jstup + kstup / 2 - i % jstup - 1] =
a;
1199 working_vector[i + 4 * numx] = 0;
1208 jstup = numx / kstup;
1209 for (i = 0, l = 0; i < numx; i++, l = (l + kstup) % numx) {
1210 working_vector[numx + i] = working_vector[l + i / jstup];
1214 working_vector[numx + i + 2 * numx] =
1215 working_vector[l + i / jstup + 2 * numx];
1218 working_vector[numx + i + 4 * numx] =
1219 working_vector[l + i / jstup + 4 * numx];
1221 for (i = 0; i < numx; i++) {
1222 working_vector[i] = working_vector[numx + i];
1226 working_vector[i + 2 * numx] =
1227 working_vector[numx + i + 2 * numx];
1230 working_vector[i + 4 * numx] =
1231 working_vector[numx + i + 4 * numx];
1233 for (i = 0; i < numx; i++) {
1234 working_matrix[i][j] = working_vector[i];
1238 working_matrix[i][j + numy] = working_vector[i + 2 * numx];
1241 working_matrix[i][j + numy] = working_vector[i + 4 * numx];
1244 for (i = 0; i < numx; i++) {
1246 jstup = numy / kstup;
1247 for (j = 0; j < numy; j++) {
1248 valx = working_matrix[i][j];
1249 valz = working_matrix[i][j + numy];
1254 kstup = 2 * kstup * jstup;
1255 working_vector[kstup + j % jstup] = valx;
1256 working_vector[kstup + 2 * jstup - 1 - j % jstup] = valx;
1257 working_vector[kstup + j % jstup + 4 * numy] = valz;
1258 working_vector[kstup + 2 * jstup - 1 - j % jstup +
1266 kstup = 2 * kstup * jstup;
1267 working_vector[kstup + j % jstup] = valx;
1268 working_vector[kstup + 2 * jstup - 1 - j % jstup] = -valx;
1269 working_vector[kstup + j % jstup + 4 * numy] = valz;
1270 working_vector[kstup + 2 * jstup - 1 - j % jstup +
1275 working_vector[j] = valx;
1276 working_vector[j + 2 * numy] = valz;
1283 GeneralExe(working_vector, 1, numy, degree, type);
1284 for (j = 0; j < jstup; j++)
1291 for (j = 0; j <
l; j++)
1293 GeneralExe(working_vector, 1, 2 * numy, degree, type);
1294 for (j = 0; j < numy; j++) {
1296 kstup = 2 * kstup * jstup;
1299 b = working_vector[kstup + j % jstup];
1305 working_vector[j] =
a;
1306 working_vector[j + 4 * numy] = 0;
1313 for (j = 0; j <
l; j++)
1315 GeneralExe(working_vector, 1, 2 * numy, degree, type);
1316 for (j = 0; j < numy; j++) {
1318 kstup = 2 * kstup * jstup;
1321 b = working_vector[jstup + kstup + j % jstup];
1327 working_vector[jstup + kstup / 2 - j % jstup - 1] =
a;
1328 working_vector[j + 4 * numy] = 0;
1337 jstup = numy / kstup;
1338 for (j = 0, l = 0; j < numy; j++, l = (l + kstup) % numy) {
1339 working_vector[numy + j] = working_vector[l + j / jstup];
1343 working_vector[numy + j + 2 * numy] =
1344 working_vector[l + j / jstup + 2 * numy];
1347 working_vector[numy + j + 4 * numy] =
1348 working_vector[l + j / jstup + 4 * numy];
1350 for (j = 0; j < numy; j++) {
1351 working_vector[j] = working_vector[numy + j];
1355 working_vector[j + 2 * numy] =
1356 working_vector[numy + j + 2 * numy];
1359 working_vector[j + 4 * numy] =
1360 working_vector[numy + j + 4 * numy];
1362 for (j = 0; j < numy; j++) {
1363 working_matrix[i][j] = working_vector[j];
1367 working_matrix[i][j + numy] = working_vector[j + 2 * numy];
1370 working_matrix[i][j + numy] = working_vector[j + 4 * numy];
1376 for (i = 0; i < numx; i++) {
1378 jstup = numy / kstup;
1379 for (j = 0; j < numy; j++) {
1380 working_vector[j] = working_matrix[i][j];
1384 working_vector[j + 2 * numy] = working_matrix[i][j + numy];
1387 working_vector[j + 4 * numy] = working_matrix[i][j + numy];
1394 jstup = numy / kstup;
1395 for (j = 0, l = 0; j < numy; j++, l = (l + kstup) % numy) {
1396 working_vector[numy + l + j / jstup] = working_vector[j];
1400 working_vector[numy + l + j / jstup + 2 * numy] =
1401 working_vector[j + 2 * numy];
1404 working_vector[numy + l + j / jstup + 4 * numy] =
1405 working_vector[j + 4 * numy];
1407 for (j = 0; j < numy; j++) {
1408 working_vector[j] = working_vector[numy + j];
1412 working_vector[j + 2 * numy] =
1413 working_vector[numy + j + 2 * numy];
1416 working_vector[j + 4 * numy] =
1417 working_vector[numy + j + 4 * numy];
1423 for (j = 0; j < jstup; j++)
1425 GeneralInv(working_vector, numy, degree, type);
1432 for (j = 0; j < numy; j++) {
1434 kstup = 2 * kstup * jstup;
1436 if (j % jstup == 0) {
1437 working_vector[2 * numy + kstup + j % jstup] =
1439 working_vector[2 * numy + kstup + j % jstup +
1446 working_vector[2 * numy + kstup + j % jstup +
1449 working_vector[2 * numy + kstup + j % jstup] =
1451 } }
for (j = 0; j < numy; j++) {
1453 kstup = 2 * kstup * jstup;
1454 if (j % jstup == 0) {
1455 working_vector[2 * numy + kstup + jstup] = 0;
1456 working_vector[2 * numy + kstup + jstup + 4 * numy] = 0;
1460 working_vector[2 * numy + kstup + 2 * jstup -
1462 working_vector[2 * numy + kstup + j % jstup];
1463 working_vector[2 * numy + kstup + 2 * jstup -
1464 j % jstup + 4 * numy] =
1465 -working_vector[2 * numy + kstup + j % jstup +
1469 for (j = 0; j < 2 * numy; j++) {
1470 working_vector[j] = working_vector[2 * numy + j];
1471 working_vector[j + 4 * numy] =
1472 working_vector[2 * numy + j + 4 * numy];
1474 GeneralInv(working_vector, 2 * numy, degree, type);
1477 for (j = 0; j <
l; j++)
1485 for (j = 0; j < numy; j++) {
1487 kstup = 2 * kstup * jstup;
1489 if (j % jstup == 0) {
1490 working_vector[2 * numy + kstup + jstup + j % jstup] =
1491 working_vector[jstup + kstup / 2 - j % jstup -
1493 working_vector[2 * numy + kstup + jstup + j % jstup +
1500 working_vector[2 * numy + kstup + jstup + j % jstup +
1502 -(
Double_t) working_vector[jstup + kstup / 2 -
1504 working_vector[2 * numy + kstup + jstup + j % jstup] =
1505 (
Double_t) working_vector[jstup + kstup / 2 -
1507 } }
for (j = 0; j < numy; j++) {
1509 kstup = 2 * kstup * jstup;
1510 if (j % jstup == 0) {
1511 working_vector[2 * numy + kstup] = 0;
1512 working_vector[2 * numy + kstup + 4 * numy] = 0;
1516 working_vector[2 * numy + kstup + j % jstup] =
1517 working_vector[2 * numy + kstup + 2 * jstup -
1519 working_vector[2 * numy + kstup + j % jstup +
1521 -working_vector[2 * numy + kstup + 2 * jstup -
1522 j % jstup + 4 * numy];
1525 for (j = 0; j < 2 * numy; j++) {
1526 working_vector[j] = working_vector[2 * numy + j];
1527 working_vector[j + 4 * numy] =
1528 working_vector[2 * numy + j + 4 * numy];
1530 GeneralInv(working_vector, 2 * numy, degree, type);
1531 for (j = 0; j <
l; j++)
1535 for (j = 0; j < numy; j++) {
1538 kstup = 2 * kstup * jstup;
1539 valx = working_vector[kstup + j % jstup];
1540 valz = working_vector[kstup + j % jstup + 4 * numy];
1544 valx = working_vector[j];
1545 valz = working_vector[j + 2 * numy];
1547 working_matrix[i][j] = valx;
1548 working_matrix[i][j + numy] = valz;
1551 for (j = 0; j < numy; j++) {
1553 jstup = numy / kstup;
1554 for (i = 0; i < numx; i++) {
1555 working_vector[i] = working_matrix[i][j];
1559 working_vector[i + 2 * numx] = working_matrix[i][j + numy];
1562 working_vector[i + 4 * numx] = working_matrix[i][j + numy];
1569 jstup = numx / kstup;
1570 for (i = 0, l = 0; i < numx; i++, l = (l + kstup) % numx) {
1571 working_vector[numx + l + i / jstup] = working_vector[i];
1575 working_vector[numx + l + i / jstup + 2 * numx] =
1576 working_vector[i + 2 * numx];
1579 working_vector[numx + l + i / jstup + 4 * numx] =
1580 working_vector[i + 4 * numx];
1582 for (i = 0; i < numx; i++) {
1583 working_vector[i] = working_vector[numx + i];
1587 working_vector[i + 2 * numx] =
1588 working_vector[numx + i + 2 * numx];
1591 working_vector[i + 4 * numx] =
1592 working_vector[numx + i + 4 * numx];
1598 for (i = 0; i < jstup; i++)
1600 GeneralInv(working_vector, numx, degree, type);
1607 for (i = 0; i < numx; i++) {
1609 kstup = 2 * kstup * jstup;
1611 if (i % jstup == 0) {
1612 working_vector[2 * numx + kstup + i % jstup] =
1614 working_vector[2 * numx + kstup + i % jstup +
1621 working_vector[2 * numx + kstup + i % jstup +
1624 working_vector[2 * numx + kstup + i % jstup] =
1626 } }
for (i = 0; i < numx; i++) {
1628 kstup = 2 * kstup * jstup;
1629 if (i % jstup == 0) {
1630 working_vector[2 * numx + kstup + jstup] = 0;
1631 working_vector[2 * numx + kstup + jstup + 4 * numx] = 0;
1635 working_vector[2 * numx + kstup + 2 * jstup -
1637 working_vector[2 * numx + kstup + i % jstup];
1638 working_vector[2 * numx + kstup + 2 * jstup -
1639 i % jstup + 4 * numx] =
1640 -working_vector[2 * numx + kstup + i % jstup +
1644 for (i = 0; i < 2 * numx; i++) {
1645 working_vector[i] = working_vector[2 * numx + i];
1646 working_vector[i + 4 * numx] =
1647 working_vector[2 * numx + i + 4 * numx];
1649 GeneralInv(working_vector, 2 * numx, degree, type);
1652 for (i = 0; i <
l; i++)
1660 for (i = 0; i < numx; i++) {
1662 kstup = 2 * kstup * jstup;
1664 if (i % jstup == 0) {
1665 working_vector[2 * numx + kstup + jstup + i % jstup] =
1666 working_vector[jstup + kstup / 2 - i % jstup -
1668 working_vector[2 * numx + kstup + jstup + i % jstup +
1675 working_vector[2 * numx + kstup + jstup + i % jstup +
1677 -(
Double_t) working_vector[jstup + kstup / 2 -
1679 working_vector[2 * numx + kstup + jstup + i % jstup] =
1680 (
Double_t) working_vector[jstup + kstup / 2 -
1682 } }
for (i = 0; i < numx; i++) {
1684 kstup = 2 * kstup * jstup;
1685 if (i % jstup == 0) {
1686 working_vector[2 * numx + kstup] = 0;
1687 working_vector[2 * numx + kstup + 4 * numx] = 0;
1691 working_vector[2 * numx + kstup + i % jstup] =
1692 working_vector[2 * numx + kstup + 2 * jstup -
1694 working_vector[2 * numx + kstup + i % jstup +
1696 -working_vector[2 * numx + kstup + 2 * jstup -
1697 i % jstup + 4 * numx];
1700 for (i = 0; i < 2 * numx; i++) {
1701 working_vector[i] = working_vector[2 * numx + i];
1702 working_vector[i + 4 * numx] =
1703 working_vector[2 * numx + i + 4 * numx];
1705 GeneralInv(working_vector, 2 * numx, degree, type);
1706 for (i = 0; i <
l; i++)
1710 for (i = 0; i < numx; i++) {
1713 kstup = 2 * kstup * jstup;
1714 val = working_vector[kstup + i % jstup];
1718 val = working_vector[i];
1719 working_matrix[i][j] = val;
2023 Double_t *working_vector = 0, **working_matrix = 0;
2028 working_vector =
new Double_t[2 * size];
2030 for (i = 0; i <
fSizeX; i++)
2040 working_vector =
new Double_t[4 * size];
2042 for (i = 0; i <
fSizeX; i++)
2049 working_vector =
new Double_t[8 * size];
2051 for (i = 0; i <
fSizeX; i++)
2058 for (i = 0; i <
fSizeX; i++) {
2059 for (j = 0; j <
fSizeY; j++) {
2060 working_matrix[i][j] = fSource[i][j];
2065 for (i = 0; i <
fSizeX; i++) {
2066 for (j = 0; j <
fSizeY; j++) {
2067 fDest[i][j] = working_matrix[i][j];
2072 for (i = 0; i <
fSizeX; i++) {
2073 for (j = 0; j <
fSizeY; j++) {
2074 working_matrix[i][j] = fSource[i][j];
2079 for (i = 0; i <
fSizeX; i++) {
2080 for (j = 0; j <
fSizeY; j++) {
2081 fDest[i][j] = working_matrix[i][j];
2086 for (i = 0; i <
fSizeX; i++) {
2087 for (j = 0; j <
fSizeY; j++) {
2088 working_matrix[i][j] = fSource[i][j];
2093 for (i = 0; i <
fSizeX; i++) {
2094 for (j = 0; j <
fSizeY; j++) {
2095 fDest[i][j] = working_matrix[i][j];
2100 for (i = 0; i <
fSizeX; i++) {
2101 for (j = 0; j <
fSizeY; j++) {
2102 working_matrix[i][j] = fSource[i][j];
2107 for (i = 0; i <
fSizeX; i++) {
2108 for (j = 0; j <
fSizeY; j++) {
2109 fDest[i][j] = working_matrix[i][j];
2114 for (i = 0; i <
fSizeX; i++) {
2115 for (j = 0; j <
fSizeY; j++) {
2116 working_matrix[i][j] = fSource[i][j];
2121 for (i = 0; i <
fSizeX; i++) {
2122 for (j = 0; j <
fSizeY; j++) {
2123 fDest[i][j] = working_matrix[i][j];
2126 for (i = 0; i <
fSizeX; i++) {
2127 for (j = 0; j <
fSizeY; j++) {
2133 for (i = 0; i <
fSizeX; i++) {
2134 for (j = 0; j <
fSizeY; j++) {
2135 working_matrix[i][j] = fSource[i][j];
2140 for (i = 0; i <
fSizeX; i++) {
2141 for (j = 0; j <
fSizeY; j++) {
2142 fDest[i][j] = working_matrix[i][j];
2153 for (i = 0; i <
fSizeX; i++) {
2154 for (j = 0; j <
fSizeY; j++) {
2155 working_matrix[i][j] = fSource[i][j];
2160 for (i = 0; i <
fSizeX; i++) {
2161 for (j = 0; j <
fSizeY; j++) {
2162 fDest[i][j] = working_matrix[i][j];
2167 for (i = 0; i <
fSizeX; i++) {
2168 for (j = 0; j <
fSizeY; j++) {
2180 for (i = 0; i <
fSizeX; i++) {
2181 for (j = 0; j <
fSizeY; j++) {
2182 working_matrix[i][j] = fSource[i][j];
2187 for (i = 0; i <
fSizeX; i++) {
2188 for (j = 0; j <
fSizeY; j++) {
2189 fDest[i][j] = working_matrix[i][j];
2194 for (i = 0; i <
fSizeX; i++) {
2195 for (j = 0; j <
fSizeY; j++) {
2196 working_matrix[i][j] = fSource[i][j];
2201 for (i = 0; i <
fSizeX; i++) {
2202 for (j = 0; j <
fSizeY; j++) {
2203 fDest[i][j] = working_matrix[i][j];
2208 for (i = 0; i <
fSizeX; i++) {
2209 for (j = 0; j <
fSizeY; j++) {
2210 working_matrix[i][j] = fSource[i][j];
2215 for (i = 0; i <
fSizeX; i++) {
2216 for (j = 0; j <
fSizeY; j++) {
2217 fDest[i][j] = working_matrix[i][j];
2222 for (i = 0; i <
fSizeX; i++) {
2223 for (j = 0; j <
fSizeY; j++) {
2224 working_matrix[i][j] = fSource[i][j];
2229 for (i = 0; i <
fSizeX; i++) {
2230 for (j = 0; j <
fSizeY; j++) {
2231 fDest[i][j] = working_matrix[i][j];
2236 for (i = 0; i <
fSizeX; i++) {
2237 for (j = 0; j <
fSizeY; j++) {
2238 working_matrix[i][j] = fSource[i][j];
2241 for (i = 0; i <
fSizeX; i++) {
2242 for (j = 0; j <
fSizeY; j++) {
2243 working_matrix[i][j +
fSizeY] = fSource[i][j +
fSizeY];
2248 for (i = 0; i <
fSizeX; i++) {
2249 for (j = 0; j <
fSizeY; j++) {
2250 fDest[i][j] = working_matrix[i][j];
2255 for (i = 0; i <
fSizeX; i++) {
2256 for (j = 0; j <
fSizeY; j++) {
2257 working_matrix[i][j] = fSource[i][j];
2262 for (i = 0; i <
fSizeX; i++) {
2263 for (j = 0; j <
fSizeY; j++) {
2264 fDest[i][j] = working_matrix[i][j];
2275 for (i = 0; i <
fSizeX; i++) {
2276 for (j = 0; j <
fSizeY; j++) {
2277 working_matrix[i][j] = fSource[i][j];
2282 for (i = 0; i <
fSizeX; i++) {
2283 for (j = 0; j <
fSizeY; j++) {
2284 working_matrix[i][j +
fSizeY] = fSource[i][j +
fSizeY];
2290 for (i = 0; i <
fSizeX; i++) {
2291 for (j = 0; j <
fSizeY; j++) {
2292 fDest[i][j] = working_matrix[i][j];
2298 for (i = 0; i <
fSizeX; i++) {
2299 if (working_matrix)
delete[]working_matrix[i];
2301 delete[]working_matrix;
2302 delete[]working_vector;
2486 Double_t *working_vector = 0, **working_matrix = 0;
2491 working_vector =
new Double_t[2 * size];
2493 for (i = 0; i <
fSizeX; i++)
2503 working_vector =
new Double_t[4 * size];
2505 for (i = 0; i <
fSizeX; i++)
2512 working_vector =
new Double_t[8 * size];
2514 for (i = 0; i <
fSizeX; i++)
2520 for (i = 0; i <
fSizeX; i++) {
2521 for (j = 0; j <
fSizeY; j++) {
2522 working_matrix[i][j] = fSource[i][j];
2523 old_area = old_area + fSource[i][j];
2530 for (i = 0; i <
fSizeX; i++) {
2531 for (j = 0; j <
fSizeY; j++) {
2532 working_matrix[i][j] = fSource[i][j];
2533 old_area = old_area + fSource[i][j];
2540 for (i = 0; i <
fSizeX; i++) {
2541 for (j = 0; j <
fSizeY; j++) {
2542 working_matrix[i][j] = fSource[i][j];
2543 old_area = old_area + fSource[i][j];
2550 for (i = 0; i <
fSizeX; i++) {
2551 for (j = 0; j <
fSizeY; j++) {
2552 working_matrix[i][j] = fSource[i][j];
2553 old_area = old_area + fSource[i][j];
2560 for (i = 0; i <
fSizeX; i++) {
2561 for (j = 0; j <
fSizeY; j++) {
2562 working_matrix[i][j] = fSource[i][j];
2563 old_area = old_area + fSource[i][j];
2570 for (i = 0; i <
fSizeX; i++) {
2571 for (j = 0; j <
fSizeY; j++) {
2572 working_matrix[i][j] = fSource[i][j];
2573 old_area = old_area + fSource[i][j];
2586 for (i = 0; i <
fSizeX; i++) {
2587 for (j = 0; j <
fSizeY; j++) {
2588 working_matrix[i][j] = fSource[i][j];
2589 old_area = old_area + fSource[i][j];
2596 for (i = 0; i <
fSizeX; i++) {
2597 for (j = 0; j <
fSizeY; j++) {
2599 if (working_matrix) working_matrix[i][j] =
fFilterCoeff;
2604 for (i = 0; i <
fSizeX; i++) {
2605 for (j = 0; j <
fSizeY; j++) {
2615 for (i = 0; i <
fSizeX; i++) {
2616 for (j = 0; j <
fSizeY; j++) {
2617 new_area = new_area + working_matrix[i][j];
2620 if (new_area != 0) {
2621 a = old_area / new_area;
2622 for (i = 0; i <
fSizeX; i++) {
2623 for (j = 0; j <
fSizeY; j++) {
2624 fDest[i][j] = working_matrix[i][j] *
a;
2632 for (i = 0; i <
fSizeX; i++) {
2633 for (j = 0; j <
fSizeY; j++) {
2634 new_area = new_area + working_matrix[i][j];
2637 if (new_area != 0) {
2638 a = old_area / new_area;
2639 for (i = 0; i <
fSizeX; i++) {
2640 for (j = 0; j <
fSizeY; j++) {
2641 fDest[i][j] = working_matrix[i][j] *
a;
2649 for (i = 0; i <
fSizeX; i++) {
2650 for (j = 0; j <
fSizeY; j++) {
2651 new_area = new_area + working_matrix[i][j];
2654 if (new_area != 0) {
2655 a = old_area / new_area;
2656 for (i = 0; i <
fSizeX; i++) {
2657 for (j = 0; j <
fSizeY; j++) {
2658 fDest[i][j] = working_matrix[i][j] *
a;
2666 for (i = 0; i <
fSizeX; i++) {
2667 for (j = 0; j <
fSizeY; j++) {
2668 new_area = new_area + working_matrix[i][j];
2671 if (new_area != 0) {
2672 a = old_area / new_area;
2673 for (i = 0; i <
fSizeX; i++) {
2674 for (j = 0; j <
fSizeY; j++) {
2675 fDest[i][j] = working_matrix[i][j] *
a;
2683 for (i = 0; i <
fSizeX; i++) {
2684 for (j = 0; j <
fSizeY; j++) {
2685 new_area = new_area + working_matrix[i][j];
2688 if (new_area != 0) {
2689 a = old_area / new_area;
2690 for (i = 0; i <
fSizeX; i++) {
2691 for (j = 0; j <
fSizeY; j++) {
2692 fDest[i][j] = working_matrix[i][j] *
a;
2700 for (i = 0; i <
fSizeX; i++) {
2701 for (j = 0; j <
fSizeY; j++) {
2702 new_area = new_area + working_matrix[i][j];
2705 if (new_area != 0) {
2706 a = old_area / new_area;
2707 for (i = 0; i <
fSizeX; i++) {
2708 for (j = 0; j <
fSizeY; j++) {
2709 fDest[i][j] = working_matrix[i][j] *
a;
2723 for (i = 0; i <
fSizeX; i++) {
2724 for (j = 0; j <
fSizeY; j++) {
2725 new_area = new_area + working_matrix[i][j];
2728 if (new_area != 0) {
2729 a = old_area / new_area;
2730 for (i = 0; i <
fSizeX; i++) {
2731 for (j = 0; j <
fSizeY; j++) {
2732 fDest[i][j] = working_matrix[i][j] *
a;
2738 for (i = 0; i <
fSizeX; i++) {
2739 if (working_matrix)
delete[]working_matrix[i];
2741 delete[]working_matrix;
2742 delete[]working_vector;
2911 Double_t *working_vector = 0, **working_matrix = 0;
2916 working_vector =
new Double_t[2 * size];
2918 for (i = 0; i <
fSizeX; i++)
2928 working_vector =
new Double_t[4 * size];
2930 for (i = 0; i <
fSizeX; i++)
2937 working_vector =
new Double_t[8 * size];
2939 for (i = 0; i <
fSizeX; i++)
2945 for (i = 0; i <
fSizeX; i++) {
2946 for (j = 0; j <
fSizeY; j++) {
2947 working_matrix[i][j] = fSource[i][j];
2948 old_area = old_area + fSource[i][j];
2955 for (i = 0; i <
fSizeX; i++) {
2956 for (j = 0; j <
fSizeY; j++) {
2957 working_matrix[i][j] = fSource[i][j];
2958 old_area = old_area + fSource[i][j];
2965 for (i = 0; i <
fSizeX; i++) {
2966 for (j = 0; j <
fSizeY; j++) {
2967 working_matrix[i][j] = fSource[i][j];
2968 old_area = old_area + fSource[i][j];
2975 for (i = 0; i <
fSizeX; i++) {
2976 for (j = 0; j <
fSizeY; j++) {
2977 working_matrix[i][j] = fSource[i][j];
2978 old_area = old_area + fSource[i][j];
2985 for (i = 0; i <
fSizeX; i++) {
2986 for (j = 0; j <
fSizeY; j++) {
2987 working_matrix[i][j] = fSource[i][j];
2988 old_area = old_area + fSource[i][j];
2995 for (i = 0; i <
fSizeX; i++) {
2996 for (j = 0; j <
fSizeY; j++) {
2997 working_matrix[i][j] = fSource[i][j];
2998 old_area = old_area + fSource[i][j];
3011 for (i = 0; i <
fSizeX; i++) {
3012 for (j = 0; j <
fSizeY; j++) {
3013 working_matrix[i][j] = fSource[i][j];
3014 old_area = old_area + fSource[i][j];
3021 for (i = 0; i <
fSizeX; i++) {
3022 for (j = 0; j <
fSizeY; j++) {
3029 for (i = 0; i <
fSizeX; i++) {
3030 for (j = 0; j <
fSizeY; j++) {
3040 for (i = 0; i <
fSizeX; i++) {
3041 for (j = 0; j <
fSizeY; j++) {
3042 new_area = new_area + working_matrix[i][j];
3045 if (new_area != 0) {
3046 a = old_area / new_area;
3047 for (i = 0; i <
fSizeX; i++) {
3048 for (j = 0; j <
fSizeY; j++) {
3049 fDest[i][j] = working_matrix[i][j] *
a;
3057 for (i = 0; i <
fSizeX; i++) {
3058 for (j = 0; j <
fSizeY; j++) {
3059 new_area = new_area + working_matrix[i][j];
3062 if (new_area != 0) {
3063 a = old_area / new_area;
3064 for (i = 0; i <
fSizeX; i++) {
3065 for (j = 0; j <
fSizeY; j++) {
3066 fDest[i][j] = working_matrix[i][j] *
a;
3074 for (i = 0; i <
fSizeX; i++) {
3075 for (j = 0; j <
fSizeY; j++) {
3076 new_area = new_area + working_matrix[i][j];
3079 if (new_area != 0) {
3080 a = old_area / new_area;
3081 for (i = 0; i <
fSizeX; i++) {
3082 for (j = 0; j <
fSizeY; j++) {
3083 fDest[i][j] = working_matrix[i][j] *
a;
3091 for (i = 0; i <
fSizeX; i++) {
3092 for (j = 0; j <
fSizeY; j++) {
3093 new_area = new_area + working_matrix[i][j];
3096 if (new_area != 0) {
3097 a = old_area / new_area;
3098 for (i = 0; i <
fSizeX; i++) {
3099 for (j = 0; j <
fSizeY; j++) {
3100 fDest[i][j] = working_matrix[i][j] *
a;
3108 for (i = 0; i <
fSizeX; i++) {
3109 for (j = 0; j <
fSizeY; j++) {
3110 new_area = new_area + working_matrix[i][j];
3113 if (new_area != 0) {
3114 a = old_area / new_area;
3115 for (i = 0; i <
fSizeX; i++) {
3116 for (j = 0; j <
fSizeY; j++) {
3117 fDest[i][j] = working_matrix[i][j] *
a;
3125 for (i = 0; i <
fSizeX; i++) {
3126 for (j = 0; j <
fSizeY; j++) {
3127 new_area = new_area + working_matrix[i][j];
3130 if (new_area != 0) {
3131 a = old_area / new_area;
3132 for (i = 0; i <
fSizeX; i++) {
3133 for (j = 0; j <
fSizeY; j++) {
3134 fDest[i][j] = working_matrix[i][j] *
a;
3148 for (i = 0; i <
fSizeX; i++) {
3149 for (j = 0; j <
fSizeY; j++) {
3150 new_area = new_area + working_matrix[i][j];
3153 if (new_area != 0) {
3154 a = old_area / new_area;
3155 for (i = 0; i <
fSizeX; i++) {
3156 for (j = 0; j <
fSizeY; j++) {
3157 fDest[i][j] = working_matrix[i][j] *
a;
3163 for (i = 0; i <
fSizeX; i++) {
3164 if (working_matrix)
delete[]working_matrix[i];
3166 delete[]working_matrix;
3167 delete[]working_vector;
3199 Error (
"TSpectrumTransform",
"Invalid type of transform");
3203 if (degree > j1 || degree > j2 || degree < 1){
3204 Error (
"TSpectrumTransform",
"Invalid degree of mixed transform");
3222 if(xmin<0 || xmax < xmin || xmax >=
fSizeX){
3223 Error(
"TSpectrumTransform",
"Wrong range");
3226 if(ymin<0 || ymax < ymin || ymax >=
fSizeY){
3227 Error(
"TSpectrumTransform",
"Wrong range");
3247 Error(
"TSpectrumTransform",
"Wrong direction");
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Mother of all ROOT objects.
Short_t Max(Short_t a, Short_t b)
Double_t Sqrt(Double_t x)