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;
2025 Double_t *working_vector = 0, **working_matrix = 0;
2030 working_vector =
new Double_t[2 * size];
2032 for (i = 0; i <
fSizeX; i++)
2042 working_vector =
new Double_t[4 * size];
2044 for (i = 0; i <
fSizeX; i++)
2051 working_vector =
new Double_t[8 * size];
2053 for (i = 0; i <
fSizeX; i++)
2060 for (i = 0; i <
fSizeX; i++) {
2061 for (j = 0; j <
fSizeY; j++) {
2062 working_matrix[i][j] = fSource[i][j];
2067 for (i = 0; i <
fSizeX; i++) {
2068 for (j = 0; j <
fSizeY; j++) {
2069 fDest[i][j] = working_matrix[i][j];
2074 for (i = 0; i <
fSizeX; i++) {
2075 for (j = 0; j <
fSizeY; j++) {
2076 working_matrix[i][j] = fSource[i][j];
2081 for (i = 0; i <
fSizeX; i++) {
2082 for (j = 0; j <
fSizeY; j++) {
2083 fDest[i][j] = working_matrix[i][j];
2088 for (i = 0; i <
fSizeX; i++) {
2089 for (j = 0; j <
fSizeY; j++) {
2090 working_matrix[i][j] = fSource[i][j];
2095 for (i = 0; i <
fSizeX; i++) {
2096 for (j = 0; j <
fSizeY; j++) {
2097 fDest[i][j] = working_matrix[i][j];
2102 for (i = 0; i <
fSizeX; i++) {
2103 for (j = 0; j <
fSizeY; j++) {
2104 working_matrix[i][j] = fSource[i][j];
2109 for (i = 0; i <
fSizeX; i++) {
2110 for (j = 0; j <
fSizeY; j++) {
2111 fDest[i][j] = working_matrix[i][j];
2116 for (i = 0; i <
fSizeX; i++) {
2117 for (j = 0; j <
fSizeY; j++) {
2118 working_matrix[i][j] = fSource[i][j];
2123 for (i = 0; i <
fSizeX; i++) {
2124 for (j = 0; j <
fSizeY; j++) {
2125 fDest[i][j] = working_matrix[i][j];
2128 for (i = 0; i <
fSizeX; i++) {
2129 for (j = 0; j <
fSizeY; j++) {
2135 for (i = 0; i <
fSizeX; i++) {
2136 for (j = 0; j <
fSizeY; j++) {
2137 working_matrix[i][j] = fSource[i][j];
2142 for (i = 0; i <
fSizeX; i++) {
2143 for (j = 0; j <
fSizeY; j++) {
2144 fDest[i][j] = working_matrix[i][j];
2155 for (i = 0; i <
fSizeX; i++) {
2156 for (j = 0; j <
fSizeY; j++) {
2157 working_matrix[i][j] = fSource[i][j];
2162 for (i = 0; i <
fSizeX; i++) {
2163 for (j = 0; j <
fSizeY; j++) {
2164 fDest[i][j] = working_matrix[i][j];
2169 for (i = 0; i <
fSizeX; i++) {
2170 for (j = 0; j <
fSizeY; j++) {
2182 for (i = 0; i <
fSizeX; i++) {
2183 for (j = 0; j <
fSizeY; j++) {
2184 working_matrix[i][j] = fSource[i][j];
2189 for (i = 0; i <
fSizeX; i++) {
2190 for (j = 0; j <
fSizeY; j++) {
2191 fDest[i][j] = working_matrix[i][j];
2196 for (i = 0; i <
fSizeX; i++) {
2197 for (j = 0; j <
fSizeY; j++) {
2198 working_matrix[i][j] = fSource[i][j];
2203 for (i = 0; i <
fSizeX; i++) {
2204 for (j = 0; j <
fSizeY; j++) {
2205 fDest[i][j] = working_matrix[i][j];
2210 for (i = 0; i <
fSizeX; i++) {
2211 for (j = 0; j <
fSizeY; j++) {
2212 working_matrix[i][j] = fSource[i][j];
2217 for (i = 0; i <
fSizeX; i++) {
2218 for (j = 0; j <
fSizeY; j++) {
2219 fDest[i][j] = working_matrix[i][j];
2224 for (i = 0; i <
fSizeX; i++) {
2225 for (j = 0; j <
fSizeY; j++) {
2226 working_matrix[i][j] = fSource[i][j];
2231 for (i = 0; i <
fSizeX; i++) {
2232 for (j = 0; j <
fSizeY; j++) {
2233 fDest[i][j] = working_matrix[i][j];
2238 for (i = 0; i <
fSizeX; i++) {
2239 for (j = 0; j <
fSizeY; j++) {
2240 working_matrix[i][j] = fSource[i][j];
2243 for (i = 0; i <
fSizeX; i++) {
2244 for (j = 0; j <
fSizeY; j++) {
2245 working_matrix[i][j +
fSizeY] = fSource[i][j +
fSizeY];
2250 for (i = 0; i <
fSizeX; i++) {
2251 for (j = 0; j <
fSizeY; j++) {
2252 fDest[i][j] = working_matrix[i][j];
2257 for (i = 0; i <
fSizeX; i++) {
2258 for (j = 0; j <
fSizeY; j++) {
2259 working_matrix[i][j] = fSource[i][j];
2264 for (i = 0; i <
fSizeX; i++) {
2265 for (j = 0; j <
fSizeY; j++) {
2266 fDest[i][j] = working_matrix[i][j];
2277 for (i = 0; i <
fSizeX; i++) {
2278 for (j = 0; j <
fSizeY; j++) {
2279 working_matrix[i][j] = fSource[i][j];
2284 for (i = 0; i <
fSizeX; i++) {
2285 for (j = 0; j <
fSizeY; j++) {
2286 working_matrix[i][j +
fSizeY] = fSource[i][j +
fSizeY];
2292 for (i = 0; i <
fSizeX; i++) {
2293 for (j = 0; j <
fSizeY; j++) {
2294 fDest[i][j] = working_matrix[i][j];
2300 for (i = 0; i <
fSizeX; i++) {
2301 if (working_matrix)
delete[]working_matrix[i];
2303 delete[]working_matrix;
2304 delete[]working_vector;
2490 Double_t *working_vector = 0, **working_matrix = 0;
2495 working_vector =
new Double_t[2 * size];
2497 for (i = 0; i <
fSizeX; i++)
2507 working_vector =
new Double_t[4 * size];
2509 for (i = 0; i <
fSizeX; i++)
2516 working_vector =
new Double_t[8 * size];
2518 for (i = 0; i <
fSizeX; i++)
2524 for (i = 0; i <
fSizeX; i++) {
2525 for (j = 0; j <
fSizeY; j++) {
2526 working_matrix[i][j] = fSource[i][j];
2527 old_area = old_area + fSource[i][j];
2534 for (i = 0; i <
fSizeX; i++) {
2535 for (j = 0; j <
fSizeY; j++) {
2536 working_matrix[i][j] = fSource[i][j];
2537 old_area = old_area + fSource[i][j];
2544 for (i = 0; i <
fSizeX; i++) {
2545 for (j = 0; j <
fSizeY; j++) {
2546 working_matrix[i][j] = fSource[i][j];
2547 old_area = old_area + fSource[i][j];
2554 for (i = 0; i <
fSizeX; i++) {
2555 for (j = 0; j <
fSizeY; j++) {
2556 working_matrix[i][j] = fSource[i][j];
2557 old_area = old_area + fSource[i][j];
2564 for (i = 0; i <
fSizeX; i++) {
2565 for (j = 0; j <
fSizeY; j++) {
2566 working_matrix[i][j] = fSource[i][j];
2567 old_area = old_area + fSource[i][j];
2574 for (i = 0; i <
fSizeX; i++) {
2575 for (j = 0; j <
fSizeY; j++) {
2576 working_matrix[i][j] = fSource[i][j];
2577 old_area = old_area + fSource[i][j];
2590 for (i = 0; i <
fSizeX; i++) {
2591 for (j = 0; j <
fSizeY; j++) {
2592 working_matrix[i][j] = fSource[i][j];
2593 old_area = old_area + fSource[i][j];
2600 for (i = 0; i <
fSizeX; i++) {
2601 for (j = 0; j <
fSizeY; j++) {
2603 if (working_matrix) working_matrix[i][j] =
fFilterCoeff;
2608 for (i = 0; i <
fSizeX; i++) {
2609 for (j = 0; j <
fSizeY; j++) {
2619 for (i = 0; i <
fSizeX; i++) {
2620 for (j = 0; j <
fSizeY; j++) {
2621 new_area = new_area + working_matrix[i][j];
2624 if (new_area != 0) {
2625 a = old_area / new_area;
2626 for (i = 0; i <
fSizeX; i++) {
2627 for (j = 0; j <
fSizeY; j++) {
2628 fDest[i][j] = working_matrix[i][j] *
a;
2636 for (i = 0; i <
fSizeX; i++) {
2637 for (j = 0; j <
fSizeY; j++) {
2638 new_area = new_area + working_matrix[i][j];
2641 if (new_area != 0) {
2642 a = old_area / new_area;
2643 for (i = 0; i <
fSizeX; i++) {
2644 for (j = 0; j <
fSizeY; j++) {
2645 fDest[i][j] = working_matrix[i][j] *
a;
2653 for (i = 0; i <
fSizeX; i++) {
2654 for (j = 0; j <
fSizeY; j++) {
2655 new_area = new_area + working_matrix[i][j];
2658 if (new_area != 0) {
2659 a = old_area / new_area;
2660 for (i = 0; i <
fSizeX; i++) {
2661 for (j = 0; j <
fSizeY; j++) {
2662 fDest[i][j] = working_matrix[i][j] *
a;
2670 for (i = 0; i <
fSizeX; i++) {
2671 for (j = 0; j <
fSizeY; j++) {
2672 new_area = new_area + working_matrix[i][j];
2675 if (new_area != 0) {
2676 a = old_area / new_area;
2677 for (i = 0; i <
fSizeX; i++) {
2678 for (j = 0; j <
fSizeY; j++) {
2679 fDest[i][j] = working_matrix[i][j] *
a;
2687 for (i = 0; i <
fSizeX; i++) {
2688 for (j = 0; j <
fSizeY; j++) {
2689 new_area = new_area + working_matrix[i][j];
2692 if (new_area != 0) {
2693 a = old_area / new_area;
2694 for (i = 0; i <
fSizeX; i++) {
2695 for (j = 0; j <
fSizeY; j++) {
2696 fDest[i][j] = working_matrix[i][j] *
a;
2704 for (i = 0; i <
fSizeX; i++) {
2705 for (j = 0; j <
fSizeY; j++) {
2706 new_area = new_area + working_matrix[i][j];
2709 if (new_area != 0) {
2710 a = old_area / new_area;
2711 for (i = 0; i <
fSizeX; i++) {
2712 for (j = 0; j <
fSizeY; j++) {
2713 fDest[i][j] = working_matrix[i][j] *
a;
2727 for (i = 0; i <
fSizeX; i++) {
2728 for (j = 0; j <
fSizeY; j++) {
2729 new_area = new_area + working_matrix[i][j];
2732 if (new_area != 0) {
2733 a = old_area / new_area;
2734 for (i = 0; i <
fSizeX; i++) {
2735 for (j = 0; j <
fSizeY; j++) {
2736 fDest[i][j] = working_matrix[i][j] *
a;
2742 for (i = 0; i <
fSizeX; i++) {
2743 if (working_matrix)
delete[]working_matrix[i];
2745 delete[]working_matrix;
2746 delete[]working_vector;
2917 Double_t *working_vector = 0, **working_matrix = 0;
2922 working_vector =
new Double_t[2 * size];
2924 for (i = 0; i <
fSizeX; i++)
2934 working_vector =
new Double_t[4 * size];
2936 for (i = 0; i <
fSizeX; i++)
2943 working_vector =
new Double_t[8 * size];
2945 for (i = 0; i <
fSizeX; i++)
2951 for (i = 0; i <
fSizeX; i++) {
2952 for (j = 0; j <
fSizeY; j++) {
2953 working_matrix[i][j] = fSource[i][j];
2954 old_area = old_area + fSource[i][j];
2961 for (i = 0; i <
fSizeX; i++) {
2962 for (j = 0; j <
fSizeY; j++) {
2963 working_matrix[i][j] = fSource[i][j];
2964 old_area = old_area + fSource[i][j];
2971 for (i = 0; i <
fSizeX; i++) {
2972 for (j = 0; j <
fSizeY; j++) {
2973 working_matrix[i][j] = fSource[i][j];
2974 old_area = old_area + fSource[i][j];
2981 for (i = 0; i <
fSizeX; i++) {
2982 for (j = 0; j <
fSizeY; j++) {
2983 working_matrix[i][j] = fSource[i][j];
2984 old_area = old_area + fSource[i][j];
2991 for (i = 0; i <
fSizeX; i++) {
2992 for (j = 0; j <
fSizeY; j++) {
2993 working_matrix[i][j] = fSource[i][j];
2994 old_area = old_area + fSource[i][j];
3001 for (i = 0; i <
fSizeX; i++) {
3002 for (j = 0; j <
fSizeY; j++) {
3003 working_matrix[i][j] = fSource[i][j];
3004 old_area = old_area + fSource[i][j];
3017 for (i = 0; i <
fSizeX; i++) {
3018 for (j = 0; j <
fSizeY; j++) {
3019 working_matrix[i][j] = fSource[i][j];
3020 old_area = old_area + fSource[i][j];
3027 for (i = 0; i <
fSizeX; i++) {
3028 for (j = 0; j <
fSizeY; j++) {
3035 for (i = 0; i <
fSizeX; i++) {
3036 for (j = 0; j <
fSizeY; j++) {
3046 for (i = 0; i <
fSizeX; i++) {
3047 for (j = 0; j <
fSizeY; j++) {
3048 new_area = new_area + working_matrix[i][j];
3051 if (new_area != 0) {
3052 a = old_area / new_area;
3053 for (i = 0; i <
fSizeX; i++) {
3054 for (j = 0; j <
fSizeY; j++) {
3055 fDest[i][j] = working_matrix[i][j] *
a;
3063 for (i = 0; i <
fSizeX; i++) {
3064 for (j = 0; j <
fSizeY; j++) {
3065 new_area = new_area + working_matrix[i][j];
3068 if (new_area != 0) {
3069 a = old_area / new_area;
3070 for (i = 0; i <
fSizeX; i++) {
3071 for (j = 0; j <
fSizeY; j++) {
3072 fDest[i][j] = working_matrix[i][j] *
a;
3080 for (i = 0; i <
fSizeX; i++) {
3081 for (j = 0; j <
fSizeY; j++) {
3082 new_area = new_area + working_matrix[i][j];
3085 if (new_area != 0) {
3086 a = old_area / new_area;
3087 for (i = 0; i <
fSizeX; i++) {
3088 for (j = 0; j <
fSizeY; j++) {
3089 fDest[i][j] = working_matrix[i][j] *
a;
3097 for (i = 0; i <
fSizeX; i++) {
3098 for (j = 0; j <
fSizeY; j++) {
3099 new_area = new_area + working_matrix[i][j];
3102 if (new_area != 0) {
3103 a = old_area / new_area;
3104 for (i = 0; i <
fSizeX; i++) {
3105 for (j = 0; j <
fSizeY; j++) {
3106 fDest[i][j] = working_matrix[i][j] *
a;
3114 for (i = 0; i <
fSizeX; i++) {
3115 for (j = 0; j <
fSizeY; j++) {
3116 new_area = new_area + working_matrix[i][j];
3119 if (new_area != 0) {
3120 a = old_area / new_area;
3121 for (i = 0; i <
fSizeX; i++) {
3122 for (j = 0; j <
fSizeY; j++) {
3123 fDest[i][j] = working_matrix[i][j] *
a;
3131 for (i = 0; i <
fSizeX; i++) {
3132 for (j = 0; j <
fSizeY; j++) {
3133 new_area = new_area + working_matrix[i][j];
3136 if (new_area != 0) {
3137 a = old_area / new_area;
3138 for (i = 0; i <
fSizeX; i++) {
3139 for (j = 0; j <
fSizeY; j++) {
3140 fDest[i][j] = working_matrix[i][j] *
a;
3154 for (i = 0; i <
fSizeX; i++) {
3155 for (j = 0; j <
fSizeY; j++) {
3156 new_area = new_area + working_matrix[i][j];
3159 if (new_area != 0) {
3160 a = old_area / new_area;
3161 for (i = 0; i <
fSizeX; i++) {
3162 for (j = 0; j <
fSizeY; j++) {
3163 fDest[i][j] = working_matrix[i][j] *
a;
3169 for (i = 0; i <
fSizeX; i++) {
3170 if (working_matrix)
delete[]working_matrix[i];
3172 delete[]working_matrix;
3173 delete[]working_vector;
3205 Error (
"TSpectrumTransform",
"Invalid type of transform");
3209 if (degree > j1 || degree > j2 || degree < 1){
3210 Error (
"TSpectrumTransform",
"Invalid degree of mixed transform");
3228 if(xmin<0 || xmax < xmin || xmax >=
fSizeX){
3229 Error(
"TSpectrumTransform",
"Wrong range");
3232 if(ymin<0 || ymax < ymin || ymax >=
fSizeY){
3233 Error(
"TSpectrumTransform",
"Wrong range");
3253 Error(
"TSpectrumTransform",
"Wrong direction");
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
std::map< std::string, std::string >::const_iterator iter
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)