71 fTransformType=kTransformCos;
73 fDirection=kTransformForward;
88 Error (
"TSpectrumTransform",
"Invalid length, must be > than 0");
98 Error (
"TSpectrumTransform",
"Invalid length, must be power of 2");
133 int i, ii, li, l2, l3, j, jj, jj1, lj, iter,
m, jmin, jmax;
136 for (i = 0; i < num; i++)
137 working_space[i + num] = 0;
145 for (m = 1; m <= iter; m++) {
148 for (i = 0; i < (2 * l2); i++) {
149 working_space[num + i] = working_space[i];
151 for (j = 0; j < l2; j++) {
154 val = working_space[jj + num] + working_space[jj + 1 + num];
155 working_space[j] = val;
156 val = working_space[jj + num] - working_space[jj + 1 + num];
157 working_space[l3] = val;
161 val = working_space[0];
163 working_space[0] = val;
164 val = working_space[1];
166 working_space[1] = val;
167 for (ii = 2; ii <= iter; ii++) {
172 for (j = jmin; j <= jmax; j++) {
173 val = working_space[j];
177 working_space[j] = val;
181 for (m = 1; m <= iter; m++) {
186 for (i = 0; i < (2 * li); i++) {
187 working_space[i + num] = working_space[i];
189 for (j = 0; j < li; j++) {
191 jj = 2 * (j + 1) - 1;
193 val = working_space[j + num] - working_space[lj + num];
194 working_space[jj] = val;
195 val = working_space[j + num] + working_space[lj + num];
196 working_space[jj1] = val;
216 int i,
m, nump = 1, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter;
219 for (i = 0; i < num; i++)
220 working_space[i + num] = 0;
227 for (m = 1; m <= iter; m++) {
235 for (mp = 0; mp < nump; mp++) {
237 for (mp2 = 0; mp2 < mnum2; mp2++) {
238 mnum21 = mnum2 + mp2 + ib;
240 val1 = working_space[iba];
241 val2 = working_space[mnum21];
242 working_space[iba + num] = val1 + val2;
243 working_space[mnum21 + num] = val1 - val2;
246 for (i = 0; i < num; i++) {
247 working_space[i] = working_space[i + num];
253 for (i = 0; i < num; i++) {
254 val1 = working_space[i];
256 working_space[i] = val1;
275 int i, ib, il, ibd,
ip, ifac, i1;
276 for (i = 0; i < num; i++) {
277 working_space[i + num] = working_space[i];
279 for (i = 1; i <= num; i++) {
293 for (i1 = 1; i1 <= il; i1++) {
295 ip = ip + ifac * ipower[i1 - 1];
297 working_space[ip - 1] = working_space[i - 1 + num];
316 int direction,
int zt_clear)
318 int nxp2, nxp, i, j, k,
m, iter, mxp, j1, j2, n1, n2, it;
319 Double_t a, b,
c, d,
sign, wpwr, arg, wr, wi, tr, ti,
pi =
320 3.14159265358979323846;
323 for (i = 0; i < num; i++)
324 working_space[i + num] = 0;
336 for (it = 1; it <= iter; it++) {
341 for (m = 1; m <= nxp2; m++) {
346 for (mxp = nxp; mxp <= num; mxp += nxp) {
349 val1 = working_space[j1 - 1];
350 val2 = working_space[j2 - 1];
351 val3 = working_space[j1 - 1 + num];
352 val4 = working_space[j2 - 1 + num];
361 working_space[j1 - 1] = val1;
364 working_space[j1 - 1 + num] = val1;
365 a = tr * wr - ti * wi;
367 working_space[j2 - 1] = val1;
368 a = ti * wr + tr * wi;
370 working_space[j2 - 1 + num] = val1;
377 for (i = 1; i <= n1; i++) {
380 val1 = working_space[j - 1];
381 val2 = working_space[j - 1 + num];
382 val3 = working_space[i - 1];
383 working_space[j - 1] = val3;
384 working_space[j - 1 + num] = working_space[i - 1 + num];
385 working_space[i - 1] = val1;
386 working_space[i - 1 + num] = val2;
388 lab60:
if (k >= j)
goto lab65;
396 for (i = 0; i < num; i++) {
398 val1 = working_space[i];
402 working_space[i] = val1;
403 b = working_space[i + num];
405 working_space[i + num] = b;
409 b = working_space[i];
410 c = working_space[i + num];
412 working_space[i] = b;
413 working_space[i + num] = 0;
417 for (i = 1; i < num; i++)
418 working_space[num - i + num] = working_space[i];
419 working_space[0 + num] = working_space[0];
420 for (i = 0; i < num; i++) {
421 working_space[i] = working_space[i + num];
422 working_space[i + num] = 0;
445 int i, ib, il, ibd,
ip, ifac, i1;
446 for (i = 0; i < num; i++) {
447 working_space[i + shift + start] = working_space[i + start];
448 working_space[i + shift + start + 2 * shift] =
449 working_space[i + start + 2 * shift];
451 for (i = 1; i <= num; i++) {
465 for (i1 = 1; i1 <= il; i1++) {
467 ip = ip + ifac * ipower[i1 - 1];
469 working_space[ip - 1 + start] =
470 working_space[i - 1 + shift + start];
471 working_space[ip - 1 + start + 2 * shift] =
472 working_space[i - 1 + shift + start + 2 * shift];
492 int degree,
int type)
494 int i, j, k,
m, nump, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter,
495 mp2step, mppom, ring;
496 Double_t a, b,
c, d, wpwr, arg, wr, wi, tr, ti,
pi =
497 3.14159265358979323846;
498 Double_t val1, val2, val3, val4, a0oldr = 0, b0oldr = 0, a0r, b0r;
500 for (i = 0; i < num; i++)
501 working_space[i + 2 * num] = 0;
514 for (i = 0; i < iter - degree; i++)
516 for (m = 1; m <= iter; m++) {
528 for (mp = 0; mp < nump; mp++) {
531 mppom = mppom % ring;
535 for (i = 0; i < (iter - 1); i++) {
536 if ((mppom & j) != 0)
551 for (mp2 = 0; mp2 < mnum2; mp2++) {
552 mnum21 = mnum2 + mp2 + ib;
554 if (mp2 % mp2step == 0) {
565 val1 = working_space[iba];
566 val2 = working_space[mnum21];
567 val3 = working_space[iba + 2 * num];
568 val4 = working_space[mnum21 + 2 * num];
573 tr = a * a0r + b * b0r;
575 working_space[num + iba] = val1;
576 ti = c * a0r + d * b0r;
578 working_space[num + iba + 2 * num] = val1;
580 a * b0r * wr - c * b0r * wi - b * a0r * wr + d * a0r * wi;
582 working_space[num + mnum21] = val1;
584 c * b0r * wr + a * b0r * wi - d * a0r * wr - b * a0r * wi;
586 working_space[num + mnum21 + 2 * num] = val1;
589 for (i = 0; i < num; i++) {
590 val1 = working_space[num + i];
591 working_space[i] = val1;
592 val1 = working_space[num + i + 2 * num];
593 working_space[i + 2 * num] = val1;
615 int i, j, k,
m, nump =
616 1, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter, mp2step, mppom,
618 Double_t a, b,
c, d, wpwr, arg, wr, wi, tr, ti,
pi =
619 3.14159265358979323846;
620 Double_t val1, val2, val3, val4, a0oldr = 0, b0oldr = 0, a0r, b0r;
632 for (i = 0; i < iter - degree; i++)
636 for (m = 1; m <= iter; m++) {
644 if (m > iter - degree + 1)
646 for (mp = nump - 1; mp >= 0; mp--) {
649 mppom = mppom % ring;
653 for (i = 0; i < (iter - 1); i++) {
654 if ((mppom & j) != 0)
669 for (mp2 = 0; mp2 < mnum2; mp2++) {
670 mnum21 = mnum2 + mp2 + ib;
672 if (mp2 % mp2step == 0) {
683 val1 = working_space[iba];
684 val2 = working_space[mnum21];
685 val3 = working_space[iba + 2 * num];
686 val4 = working_space[mnum21 + 2 * num];
691 tr = a * a0r + b * wr * b0r + d * wi * b0r;
693 working_space[num + iba] = val1;
694 ti = c * a0r + d * wr * b0r - b * wi * b0r;
696 working_space[num + iba + 2 * num] = val1;
697 tr = a * b0r - b * wr * a0r - d * wi * a0r;
699 working_space[num + mnum21] = val1;
700 ti = c * b0r - d * wr * a0r + b * wi * a0r;
702 working_space[num + mnum21 + 2 * num] = val1;
705 if (m <= iter - degree
711 for (i = 0; i < num; i++) {
712 val1 = working_space[num + i];
713 working_space[i] = val1;
714 val1 = working_space[num + i + 2 * num];
715 working_space[i + 2 * num] = val1;
992 int i, j=0, k = 1,
m,
l;
1026 for (i = 0; i <
fSize; i++) {
1027 working_space[i] = source[i];
1030 for (i = 0; i <
fSize; i++) {
1031 destVector[i] = working_space[i];
1035 for (i = 0; i <
fSize; i++) {
1036 working_space[i] = source[i];
1038 Walsh(working_space, fSize);
1040 for (i = 0; i <
fSize; i++) {
1041 destVector[i] = working_space[i];
1046 for (i = 1; i <= (fSize / 2); i++) {
1047 val = source[i - 1];
1048 working_space[i - 1] = val;
1049 working_space[fSize - i] = val;
1052 for (i = 0; i < fSize / 2; i++) {
1055 b = working_space[i];
1057 working_space[i] =
a;
1058 working_space[i +
fSize] = 0;
1059 } working_space[0] = working_space[0] /
TMath::Sqrt(2.0);
1060 for (i = 0; i < fSize / 2; i++) {
1061 destVector[i] = working_space[i];
1066 for (i = 1; i <= (fSize / 2); i++) {
1067 val = source[i - 1];
1068 working_space[i - 1] = val;
1069 working_space[fSize - i] = -val;
1072 for (i = 0; i < fSize / 2; i++) {
1075 b = working_space[i];
1078 working_space[i - 1] =
a;
1079 working_space[i +
fSize] = 0;
1081 working_space[fSize / 2 - 1] =
1083 for (i = 0; i < fSize / 2; i++) {
1084 destVector[i] = working_space[i];
1088 for (i = 0; i <
fSize; i++) {
1089 working_space[i] = source[i];
1092 for (i = 0; i < 2 *
fSize; i++) {
1093 destVector[i] = working_space[i];
1097 for (i = 0; i <
fSize; i++) {
1098 working_space[i] = source[i];
1101 for (i = 0; i <
fSize; i++) {
1102 destVector[i] = working_space[i];
1112 for (i = 0; i <
fSize; i++) {
1119 working_space[k + i % j] = val;
1120 working_space[k + 2 * j - 1 - i % j] = val;
1128 working_space[k + i % j] = val;
1129 working_space[k + 2 * j - 1 - i % j] = -val;
1133 working_space[i] = val;
1138 for (i = 0; i < j; i++)
1147 for (i = 0; i <
l; i++)
1150 for (i = 0; i <
fSize; i++) {
1155 b = working_space[k + i % j];
1161 working_space[i] =
a;
1162 working_space[i + 2 *
fSize] = 0;
1170 for (i = 0; i <
l; i++)
1173 for (i = 0; i <
fSize; i++) {
1178 b = working_space[j + k + i % j];
1184 working_space[j + k / 2 - i % j - 1] =
a;
1185 working_space[i + 2 *
fSize] = 0;
1194 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1195 working_space[fSize + i] = working_space[l + i / j];
1196 working_space[fSize + i + 2 *
fSize] =
1197 working_space[l + i / j + 2 *
fSize];
1199 for (i = 0; i <
fSize; i++) {
1200 working_space[i] = working_space[fSize + i];
1201 working_space[i + 2 *
fSize] =
1202 working_space[fSize + i + 2 *
fSize];
1204 for (i = 0; i <
fSize; i++) {
1205 destVector[i] = working_space[i];
1209 for (i = 0; i <
fSize; i++) {
1210 destVector[fSize + i] = working_space[i + 2 *
fSize];
1220 for (i = 0; i <
fSize; i++) {
1221 working_space[i] = source[i];
1224 for (i = 0; i <
fSize; i++) {
1225 destVector[i] = working_space[i];
1229 for (i = 0; i <
fSize; i++) {
1230 working_space[i] = source[i];
1233 Walsh(working_space, fSize);
1234 for (i = 0; i <
fSize; i++) {
1235 destVector[i] = working_space[i];
1239 for (i = 0; i <
fSize; i++) {
1240 working_space[i] = source[i];
1243 working_space[0] = working_space[0] *
TMath::Sqrt(2.0);
1244 for (i = 0; i < fSize / 2; i++) {
1249 working_space[i] = (
Double_t) working_space[i] * a;
1250 }
for (i = 2; i <= (fSize / 2); i++) {
1251 working_space[fSize - i + 1] = working_space[i - 1];
1252 working_space[fSize - i + 1 +
fSize] =
1253 -working_space[i - 1 +
fSize];
1255 working_space[fSize / 2] = 0;
1256 working_space[fSize / 2 +
fSize] = 0;
1258 for (i = 0; i < fSize / 2; i++) {
1259 destVector[i] = working_space[i];
1263 for (i = 0; i <
fSize; i++) {
1264 working_space[i] = source[i];
1267 working_space[fSize / 2] =
1269 for (i = fSize / 2 - 1; i > 0; i--) {
1271 working_space[i +
fSize] =
1275 }
for (i = 2; i <= (fSize / 2); i++) {
1276 working_space[fSize - i + 1] = working_space[i - 1];
1277 working_space[fSize - i + 1 +
fSize] =
1278 -working_space[i - 1 +
fSize];
1280 working_space[0] = 0;
1281 working_space[
fSize] = 0;
1282 working_space[fSize / 2 +
fSize] = 0;
1284 for (i = 0; i < fSize / 2; i++) {
1285 destVector[i] = working_space[i];
1289 for (i = 0; i < 2 *
fSize; i++) {
1290 working_space[i] = source[i];
1293 for (i = 0; i <
fSize; i++) {
1294 destVector[i] = working_space[i];
1298 for (i = 0; i <
fSize; i++) {
1299 working_space[i] = source[i];
1302 for (i = 0; i <
fSize; i++) {
1303 destVector[i] = working_space[i];
1313 for (i = 0; i <
fSize; i++) {
1314 working_space[i] = source[i];
1318 for (i = 0; i <
fSize; i++) {
1319 working_space[i + 2 *
fSize] = source[fSize + i];
1328 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1329 working_space[fSize + l + i / j] = working_space[i];
1330 working_space[fSize + l + i / j + 2 *
fSize] =
1331 working_space[i + 2 *
fSize];
1333 for (i = 0; i <
fSize; i++) {
1334 working_space[i] = working_space[fSize + i];
1335 working_space[i + 2 *
fSize] =
1336 working_space[fSize + i + 2 *
fSize];
1342 for (i = 0; i < j; i++)
1351 for (i = 0; i <
fSize; i++) {
1356 working_space[2 * fSize + k + i % j] =
1358 working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
1364 working_space[4 * fSize + 2 * fSize + k + i % j] =
1366 working_space[2 * fSize + k + i % j] =
1368 } }
for (i = 0; i <
fSize; i++) {
1372 working_space[2 * fSize + k + j] = 0;
1373 working_space[4 * fSize + 2 * fSize + k + j] = 0;
1377 working_space[2 * fSize + k + 2 * j - i % j] =
1378 working_space[2 * fSize + k + i % j];
1379 working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
1380 -working_space[4 * fSize + 2 * fSize + k + i % j];
1383 for (i = 0; i < 2 *
fSize; i++) {
1384 working_space[i] = working_space[2 * fSize + i];
1385 working_space[4 * fSize + i] =
1386 working_space[4 * fSize + 2 * fSize + i];
1391 for (i = 0; i <
l; i++)
1400 for (i = 0; i <
fSize; i++) {
1405 working_space[2 * fSize + k + j + i % j] =
1406 working_space[j + k / 2 - i % j -
1408 working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
1414 working_space[4 * fSize + 2 * fSize + k + j + i % j] =
1415 -(
Double_t) working_space[j + k / 2 - i % j - 1] * b;
1416 working_space[2 * fSize + k + j + i % j] =
1417 (
Double_t) working_space[j + k / 2 - i % j - 1] * a;
1418 } }
for (i = 0; i <
fSize; i++) {
1422 working_space[2 * fSize + k] = 0;
1423 working_space[4 * fSize + 2 * fSize + k] = 0;
1427 working_space[2 * fSize + k + i % j] =
1428 working_space[2 * fSize + k + 2 * j - i % j];
1429 working_space[4 * fSize + 2 * fSize + k + i % j] =
1430 -working_space[4 * fSize + 2 * fSize + k + 2 * j -
1434 for (i = 0; i < 2 *
fSize; i++) {
1435 working_space[i] = working_space[2 * fSize + i];
1436 working_space[4 * fSize + i] =
1437 working_space[4 * fSize + 2 * fSize + i];
1440 for (i = 0; i <
l; i++)
1443 for (i = 0; i <
fSize; i++) {
1447 val = working_space[k + i % j];
1451 val = working_space[i];
1452 destVector[i] = val;
1457 delete[]working_space;
1619 int i, j=0, k = 1,
m,
l;
1622 Double_t a, b,
pi = 3.14159265358979323846, old_area, new_area;
1652 for (i = 0; i <
fSize; i++) {
1653 working_space[i] = source[i];
1658 for (i = 0; i <
fSize; i++) {
1659 working_space[i] = source[i];
1661 Walsh(working_space, fSize);
1666 for (i = 1; i <= (fSize / 2); i++) {
1667 val = source[i - 1];
1668 working_space[i - 1] = val;
1669 working_space[fSize - i] = val;
1672 for (i = 0; i < fSize / 2; i++) {
1675 b = working_space[i];
1677 working_space[i] =
a;
1678 working_space[i +
fSize] = 0;
1679 } working_space[0] = working_space[0] /
TMath::Sqrt(2.0);
1684 for (i = 1; i <= (fSize / 2); i++) {
1685 val = source[i - 1];
1686 working_space[i - 1] = val;
1687 working_space[fSize - i] = -val;
1690 for (i = 0; i < fSize / 2; i++) {
1693 b = working_space[i];
1696 working_space[i - 1] =
a;
1697 working_space[i +
fSize] = 0;
1699 working_space[fSize / 2 - 1] =
1704 for (i = 0; i <
fSize; i++) {
1705 working_space[i] = source[i];
1710 for (i = 0; i <
fSize; i++) {
1711 working_space[i] = source[i];
1722 for (i = 0; i <
fSize; i++) {
1728 working_space[k + i % j] = val;
1729 working_space[k + 2 * j - 1 - i % j] = val;
1737 working_space[k + i % j] = val;
1738 working_space[k + 2 * j - 1 - i % j] = -val;
1742 working_space[i] = val;
1747 for (i = 0; i < j; i++)
1755 for (i = 0; i <
l; i++)
1758 for (i = 0; i <
fSize; i++) {
1763 b = working_space[k + i % j];
1769 working_space[i] =
a;
1770 working_space[i + 2 *
fSize] = 0;
1777 for (i = 0; i <
l; i++)
1780 for (i = 0; i <
fSize; i++) {
1785 b = working_space[j + k + i % j];
1791 working_space[j + k / 2 - i % j - 1] =
a;
1792 working_space[i + 2 *
fSize] = 0;
1801 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1802 working_space[fSize + i] = working_space[l + i / j];
1803 working_space[fSize + i + 2 *
fSize] =
1804 working_space[l + i / j + 2 *
fSize];
1806 for (i = 0; i <
fSize; i++) {
1807 working_space[i] = working_space[fSize + i];
1808 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
1812 if (!working_space)
return;
1813 for (i = 0, old_area = 0; i <
fSize; i++) {
1814 old_area += working_space[i];
1816 for (i = 0, new_area = 0; i <
fSize; i++) {
1819 new_area += working_space[i];
1821 if (new_area != 0) {
1822 a = old_area / new_area;
1823 for (i = 0; i <
fSize; i++) {
1824 working_space[i] *=
a;
1828 for (i = 0, old_area = 0; i <
fSize; i++) {
1829 old_area += working_space[i +
fSize];
1831 for (i = 0, new_area = 0; i <
fSize; i++) {
1834 new_area += working_space[i +
fSize];
1836 if (new_area != 0) {
1837 a = old_area / new_area;
1838 for (i = 0; i <
fSize; i++) {
1839 working_space[i +
fSize] *=
a;
1846 for (i = 0, old_area = 0; i <
fSize; i++) {
1847 old_area += working_space[i + 2 *
fSize];
1849 for (i = 0, new_area = 0; i <
fSize; i++) {
1852 new_area += working_space[i + 2 *
fSize];
1854 if (new_area != 0) {
1855 a = old_area / new_area;
1856 for (i = 0; i <
fSize; i++) {
1857 working_space[i + 2 *
fSize] *=
a;
1864 for (i = 0; i <
fSize; i++) {
1865 destVector[i] = working_space[i];
1870 Walsh(working_space, fSize);
1871 for (i = 0; i <
fSize; i++) {
1872 destVector[i] = working_space[i];
1877 working_space[0] = working_space[0] *
TMath::Sqrt(2.0);
1878 for (i = 0; i < fSize / 2; i++) {
1883 working_space[i] = (
Double_t) working_space[i] * a;
1884 }
for (i = 2; i <= (fSize / 2); i++) {
1885 working_space[fSize - i + 1] = working_space[i - 1];
1886 working_space[fSize - i + 1 +
fSize] =
1887 -working_space[i - 1 +
fSize];
1889 working_space[fSize / 2] = 0;
1890 working_space[fSize / 2 +
fSize] = 0;
1892 for (i = 0; i < fSize / 2; i++) {
1893 destVector[i] = working_space[i];
1898 working_space[fSize / 2] =
1900 for (i = fSize / 2 - 1; i > 0; i--) {
1902 working_space[i +
fSize] =
1905 }
for (i = 2; i <= (fSize / 2); i++) {
1906 working_space[fSize - i + 1] = working_space[i - 1];
1907 working_space[fSize - i + 1 +
fSize] =
1908 -working_space[i - 1 +
fSize];
1910 working_space[0] = 0;
1911 working_space[
fSize] = 0;
1912 working_space[fSize / 2 +
fSize] = 0;
1914 for (i = 0; i < fSize / 2; i++) {
1915 destVector[i] = working_space[i];
1920 for (i = 0; i <
fSize; i++) {
1921 destVector[i] = working_space[i];
1926 for (i = 0; i <
fSize; i++) {
1927 destVector[i] = working_space[i];
1943 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1944 working_space[fSize + l + i / j] = working_space[i];
1945 working_space[fSize + l + i / j + 2 *
fSize] =
1946 working_space[i + 2 *
fSize];
1948 for (i = 0; i <
fSize; i++) {
1949 working_space[i] = working_space[fSize + i];
1950 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
1956 for (i = 0; i < j; i++)
1964 for (i = 0; i <
fSize; i++) {
1969 working_space[2 * fSize + k + i % j] =
1971 working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
1977 working_space[4 * fSize + 2 * fSize + k + i % j] =
1979 working_space[2 * fSize + k + i % j] =
1981 } }
for (i = 0; i <
fSize; i++) {
1985 working_space[2 * fSize + k + j] = 0;
1986 working_space[4 * fSize + 2 * fSize + k + j] = 0;
1990 working_space[2 * fSize + k + 2 * j - i % j] =
1991 working_space[2 * fSize + k + i % j];
1992 working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
1993 -working_space[4 * fSize + 2 * fSize + k + i % j];
1996 for (i = 0; i < 2 *
fSize; i++) {
1997 working_space[i] = working_space[2 * fSize + i];
1998 working_space[4 * fSize + i] =
1999 working_space[4 * fSize + 2 * fSize + i];
2004 for (i = 0; i <
l; i++)
2012 for (i = 0; i <
fSize; i++) {
2017 working_space[2 * fSize + k + j + i % j] =
2018 working_space[j + k / 2 - i % j - 1] *
TMath::Sqrt(2.0);
2019 working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
2025 working_space[4 * fSize + 2 * fSize + k + j + i % j] =
2026 -(
Double_t) working_space[j + k / 2 - i % j - 1] * b;
2027 working_space[2 * fSize + k + j + i % j] =
2028 (
Double_t) working_space[j + k / 2 - i % j - 1] * a;
2029 } }
for (i = 0; i <
fSize; i++) {
2033 working_space[2 * fSize + k] = 0;
2034 working_space[4 * fSize + 2 * fSize + k] = 0;
2038 working_space[2 * fSize + k + i % j] =
2039 working_space[2 * fSize + k + 2 * j - i % j];
2040 working_space[4 * fSize + 2 * fSize + k + i % j] =
2041 -working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j];
2044 for (i = 0; i < 2 *
fSize; i++) {
2045 working_space[i] = working_space[2 * fSize + i];
2046 working_space[4 * fSize + i] =
2047 working_space[4 * fSize + 2 * fSize + i];
2050 for (i = 0; i <
l; i++)
2053 for (i = 0; i <
fSize; i++) {
2057 val = working_space[k + i % j];
2061 val = working_space[i];
2062 destVector[i] = val;
2066 delete[]working_space;
2225 int i, j=0, k = 1,
m,
l;
2228 Double_t a, b,
pi = 3.14159265358979323846, old_area, new_area;
2258 for (i = 0; i <
fSize; i++) {
2259 working_space[i] = source[i];
2264 for (i = 0; i <
fSize; i++) {
2265 working_space[i] = source[i];
2267 Walsh(working_space, fSize);
2272 for (i = 1; i <= (fSize / 2); i++) {
2273 val = source[i - 1];
2274 working_space[i - 1] = val;
2275 working_space[fSize - i] = val;
2278 for (i = 0; i < fSize / 2; i++) {
2281 b = working_space[i];
2283 working_space[i] =
a;
2284 working_space[i +
fSize] = 0;
2285 } working_space[0] = working_space[0] /
TMath::Sqrt(2.0);
2290 for (i = 1; i <= (fSize / 2); i++) {
2291 val = source[i - 1];
2292 working_space[i - 1] = val;
2293 working_space[fSize - i] = -val;
2296 for (i = 0; i < fSize / 2; i++) {
2299 b = working_space[i];
2302 working_space[i - 1] =
a;
2303 working_space[i +
fSize] = 0;
2305 working_space[fSize / 2 - 1] =
2310 for (i = 0; i <
fSize; i++) {
2311 working_space[i] = source[i];
2316 for (i = 0; i <
fSize; i++) {
2317 working_space[i] = source[i];
2328 for (i = 0; i <
fSize; i++) {
2334 working_space[k + i % j] = val;
2335 working_space[k + 2 * j - 1 - i % j] = val;
2343 working_space[k + i % j] = val;
2344 working_space[k + 2 * j - 1 - i % j] = -val;
2348 working_space[i] = val;
2353 for (i = 0; i < j; i++)
2361 for (i = 0; i <
l; i++)
2364 for (i = 0; i <
fSize; i++) {
2369 b = working_space[k + i % j];
2375 working_space[i] =
a;
2376 working_space[i + 2 *
fSize] = 0;
2383 for (i = 0; i <
l; i++)
2386 for (i = 0; i <
fSize; i++) {
2391 b = working_space[j + k + i % j];
2397 working_space[j + k / 2 - i % j - 1] =
a;
2398 working_space[i + 2 *
fSize] = 0;
2407 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
2408 working_space[fSize + i] = working_space[l + i / j];
2409 working_space[fSize + i + 2 *
fSize] =
2410 working_space[l + i / j + 2 *
fSize];
2412 for (i = 0; i <
fSize; i++) {
2413 working_space[i] = working_space[fSize + i];
2414 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
2418 if (!working_space)
return;
2419 for (i = 0, old_area = 0; i <
fSize; i++) {
2420 old_area += working_space[i];
2422 for (i = 0, new_area = 0; i <
fSize; i++) {
2425 new_area += working_space[i];
2427 if (new_area != 0) {
2428 a = old_area / new_area;
2429 for (i = 0; i <
fSize; i++) {
2430 working_space[i] *=
a;
2434 for (i = 0, old_area = 0; i <
fSize; i++) {
2435 old_area += working_space[i +
fSize];
2437 for (i = 0, new_area = 0; i <
fSize; i++) {
2440 new_area += working_space[i +
fSize];
2442 if (new_area != 0) {
2443 a = old_area / new_area;
2444 for (i = 0; i <
fSize; i++) {
2445 working_space[i +
fSize] *=
a;
2452 for (i = 0, old_area = 0; i <
fSize; i++) {
2453 old_area += working_space[i + 2 *
fSize];
2455 for (i = 0, new_area = 0; i <
fSize; i++) {
2458 new_area += working_space[i + 2 *
fSize];
2460 if (new_area != 0) {
2461 a = old_area / new_area;
2462 for (i = 0; i <
fSize; i++) {
2463 working_space[i + 2 *
fSize] *=
a;
2470 for (i = 0; i <
fSize; i++) {
2471 destVector[i] = working_space[i];
2476 Walsh(working_space, fSize);
2477 for (i = 0; i <
fSize; i++) {
2478 destVector[i] = working_space[i];
2483 working_space[0] = working_space[0] *
TMath::Sqrt(2.0);
2484 for (i = 0; i < fSize / 2; i++) {
2489 working_space[i] = (
Double_t) working_space[i] * a;
2490 }
for (i = 2; i <= (fSize / 2); i++) {
2491 working_space[fSize - i + 1] = working_space[i - 1];
2492 working_space[fSize - i + 1 +
fSize] =
2493 -working_space[i - 1 +
fSize];
2495 working_space[fSize / 2] = 0;
2496 working_space[fSize / 2 +
fSize] = 0;
2498 for (i = 0; i < fSize / 2; i++) {
2499 destVector[i] = working_space[i];
2504 working_space[fSize / 2] =
2506 for (i = fSize / 2 - 1; i > 0; i--) {
2508 working_space[i +
fSize] =
2511 }
for (i = 2; i <= (fSize / 2); i++) {
2512 working_space[fSize - i + 1] = working_space[i - 1];
2513 working_space[fSize - i + 1 +
fSize] =
2514 -working_space[i - 1 +
fSize];
2516 working_space[0] = 0;
2517 working_space[
fSize] = 0;
2518 working_space[fSize / 2 +
fSize] = 0;
2520 for (i = 0; i < fSize / 2; i++) {
2521 destVector[i] = working_space[i];
2526 for (i = 0; i <
fSize; i++) {
2527 destVector[i] = working_space[i];
2532 for (i = 0; i <
fSize; i++) {
2533 destVector[i] = working_space[i];
2549 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
2550 working_space[fSize + l + i / j] = working_space[i];
2551 working_space[fSize + l + i / j + 2 *
fSize] =
2552 working_space[i + 2 *
fSize];
2554 for (i = 0; i <
fSize; i++) {
2555 working_space[i] = working_space[fSize + i];
2556 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
2562 for (i = 0; i < j; i++)
2570 for (i = 0; i <
fSize; i++) {
2575 working_space[2 * fSize + k + i % j] =
2577 working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
2583 working_space[4 * fSize + 2 * fSize + k + i % j] =
2585 working_space[2 * fSize + k + i % j] =
2587 } }
for (i = 0; i <
fSize; i++) {
2591 working_space[2 * fSize + k + j] = 0;
2592 working_space[4 * fSize + 2 * fSize + k + j] = 0;
2596 working_space[2 * fSize + k + 2 * j - i % j] =
2597 working_space[2 * fSize + k + i % j];
2598 working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
2599 -working_space[4 * fSize + 2 * fSize + k + i % j];
2602 for (i = 0; i < 2 *
fSize; i++) {
2603 working_space[i] = working_space[2 * fSize + i];
2604 working_space[4 * fSize + i] =
2605 working_space[4 * fSize + 2 * fSize + i];
2610 for (i = 0; i <
l; i++)
2618 for (i = 0; i <
fSize; i++) {
2623 working_space[2 * fSize + k + j + i % j] =
2624 working_space[j + k / 2 - i % j - 1] *
TMath::Sqrt(2.0);
2625 working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
2631 working_space[4 * fSize + 2 * fSize + k + j + i % j] =
2632 -(
Double_t) working_space[j + k / 2 - i % j - 1] * b;
2633 working_space[2 * fSize + k + j + i % j] =
2634 (
Double_t) working_space[j + k / 2 - i % j - 1] * a;
2635 } }
for (i = 0; i <
fSize; i++) {
2639 working_space[2 * fSize + k] = 0;
2640 working_space[4 * fSize + 2 * fSize + k] = 0;
2644 working_space[2 * fSize + k + i % j] =
2645 working_space[2 * fSize + k + 2 * j - i % j];
2646 working_space[4 * fSize + 2 * fSize + k + i % j] =
2647 -working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j];
2650 for (i = 0; i < 2 *
fSize; i++) {
2651 working_space[i] = working_space[2 * fSize + i];
2652 working_space[4 * fSize + i] =
2653 working_space[4 * fSize + 2 * fSize + i];
2656 for (i = 0; i <
l; i++)
2659 for (i = 0; i <
fSize; i++) {
2663 val = working_space[k + i % j];
2667 val = working_space[i];
2668 destVector[i] = val;
2672 delete[]working_space;
2690 for (; n <
fSize;) {
2695 Error (
"TSpectrumTransform",
"Invalid type of transform");
2699 if (degree > j || degree < 1){
2700 Error (
"TSpectrumTransform",
"Invalid degree of mixed transform");
2719 if(xmin<0 || xmax < xmin || xmax >=
fSize){
2720 Error(
"TSpectrumTransform",
"Wrong range");
2738 Error(
"TSpectrumTransform",
"Wrong direction");
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
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.
Double_t Sqrt(Double_t x)