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;
994 int i, j=0, k = 1,
m,
l;
1028 for (i = 0; i <
fSize; i++) {
1029 working_space[i] = source[i];
1032 for (i = 0; i <
fSize; i++) {
1033 destVector[i] = working_space[i];
1037 for (i = 0; i <
fSize; i++) {
1038 working_space[i] = source[i];
1040 Walsh(working_space, fSize);
1042 for (i = 0; i <
fSize; i++) {
1043 destVector[i] = working_space[i];
1048 for (i = 1; i <= (fSize / 2); i++) {
1049 val = source[i - 1];
1050 working_space[i - 1] = val;
1051 working_space[fSize - i] = val;
1054 for (i = 0; i < fSize / 2; i++) {
1057 b = working_space[i];
1059 working_space[i] =
a;
1060 working_space[i +
fSize] = 0;
1061 } working_space[0] = working_space[0] /
TMath::Sqrt(2.0);
1062 for (i = 0; i < fSize / 2; i++) {
1063 destVector[i] = working_space[i];
1068 for (i = 1; i <= (fSize / 2); i++) {
1069 val = source[i - 1];
1070 working_space[i - 1] = val;
1071 working_space[fSize - i] = -val;
1074 for (i = 0; i < fSize / 2; i++) {
1077 b = working_space[i];
1080 working_space[i - 1] =
a;
1081 working_space[i +
fSize] = 0;
1083 working_space[fSize / 2 - 1] =
1085 for (i = 0; i < fSize / 2; i++) {
1086 destVector[i] = working_space[i];
1090 for (i = 0; i <
fSize; i++) {
1091 working_space[i] = source[i];
1094 for (i = 0; i < 2 *
fSize; i++) {
1095 destVector[i] = working_space[i];
1099 for (i = 0; i <
fSize; i++) {
1100 working_space[i] = source[i];
1103 for (i = 0; i <
fSize; i++) {
1104 destVector[i] = working_space[i];
1114 for (i = 0; i <
fSize; i++) {
1121 working_space[k + i % j] = val;
1122 working_space[k + 2 * j - 1 - i % j] = val;
1130 working_space[k + i % j] = val;
1131 working_space[k + 2 * j - 1 - i % j] = -val;
1135 working_space[i] = val;
1140 for (i = 0; i < j; i++)
1149 for (i = 0; i <
l; i++)
1152 for (i = 0; i <
fSize; i++) {
1157 b = working_space[k + i % j];
1163 working_space[i] =
a;
1164 working_space[i + 2 *
fSize] = 0;
1172 for (i = 0; i <
l; i++)
1175 for (i = 0; i <
fSize; i++) {
1180 b = working_space[j + k + i % j];
1186 working_space[j + k / 2 - i % j - 1] =
a;
1187 working_space[i + 2 *
fSize] = 0;
1196 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1197 working_space[fSize + i] = working_space[l + i / j];
1198 working_space[fSize + i + 2 *
fSize] =
1199 working_space[l + i / j + 2 *
fSize];
1201 for (i = 0; i <
fSize; i++) {
1202 working_space[i] = working_space[fSize + i];
1203 working_space[i + 2 *
fSize] =
1204 working_space[fSize + i + 2 *
fSize];
1206 for (i = 0; i <
fSize; i++) {
1207 destVector[i] = working_space[i];
1211 for (i = 0; i <
fSize; i++) {
1212 destVector[fSize + i] = working_space[i + 2 *
fSize];
1222 for (i = 0; i <
fSize; i++) {
1223 working_space[i] = source[i];
1226 for (i = 0; i <
fSize; i++) {
1227 destVector[i] = working_space[i];
1231 for (i = 0; i <
fSize; i++) {
1232 working_space[i] = source[i];
1235 Walsh(working_space, fSize);
1236 for (i = 0; i <
fSize; i++) {
1237 destVector[i] = working_space[i];
1241 for (i = 0; i <
fSize; i++) {
1242 working_space[i] = source[i];
1245 working_space[0] = working_space[0] *
TMath::Sqrt(2.0);
1246 for (i = 0; i < fSize / 2; i++) {
1251 working_space[i] = (
Double_t) working_space[i] * a;
1252 }
for (i = 2; i <= (fSize / 2); i++) {
1253 working_space[fSize - i + 1] = working_space[i - 1];
1254 working_space[fSize - i + 1 +
fSize] =
1255 -working_space[i - 1 +
fSize];
1257 working_space[fSize / 2] = 0;
1258 working_space[fSize / 2 +
fSize] = 0;
1260 for (i = 0; i < fSize / 2; i++) {
1261 destVector[i] = working_space[i];
1265 for (i = 0; i <
fSize; i++) {
1266 working_space[i] = source[i];
1269 working_space[fSize / 2] =
1271 for (i = fSize / 2 - 1; i > 0; i--) {
1273 working_space[i +
fSize] =
1277 }
for (i = 2; i <= (fSize / 2); i++) {
1278 working_space[fSize - i + 1] = working_space[i - 1];
1279 working_space[fSize - i + 1 +
fSize] =
1280 -working_space[i - 1 +
fSize];
1282 working_space[0] = 0;
1283 working_space[
fSize] = 0;
1284 working_space[fSize / 2 +
fSize] = 0;
1286 for (i = 0; i < fSize / 2; i++) {
1287 destVector[i] = working_space[i];
1291 for (i = 0; i < 2 *
fSize; i++) {
1292 working_space[i] = source[i];
1295 for (i = 0; i <
fSize; i++) {
1296 destVector[i] = working_space[i];
1300 for (i = 0; i <
fSize; i++) {
1301 working_space[i] = source[i];
1304 for (i = 0; i <
fSize; i++) {
1305 destVector[i] = working_space[i];
1315 for (i = 0; i <
fSize; i++) {
1316 working_space[i] = source[i];
1320 for (i = 0; i <
fSize; i++) {
1321 working_space[i + 2 *
fSize] = source[fSize + i];
1330 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1331 working_space[fSize + l + i / j] = working_space[i];
1332 working_space[fSize + l + i / j + 2 *
fSize] =
1333 working_space[i + 2 *
fSize];
1335 for (i = 0; i <
fSize; i++) {
1336 working_space[i] = working_space[fSize + i];
1337 working_space[i + 2 *
fSize] =
1338 working_space[fSize + i + 2 *
fSize];
1344 for (i = 0; i < j; i++)
1353 for (i = 0; i <
fSize; i++) {
1358 working_space[2 * fSize + k + i % j] =
1360 working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
1366 working_space[4 * fSize + 2 * fSize + k + i % j] =
1368 working_space[2 * fSize + k + i % j] =
1370 } }
for (i = 0; i <
fSize; i++) {
1374 working_space[2 * fSize + k + j] = 0;
1375 working_space[4 * fSize + 2 * fSize + k + j] = 0;
1379 working_space[2 * fSize + k + 2 * j - i % j] =
1380 working_space[2 * fSize + k + i % j];
1381 working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
1382 -working_space[4 * fSize + 2 * fSize + k + i % j];
1385 for (i = 0; i < 2 *
fSize; i++) {
1386 working_space[i] = working_space[2 * fSize + i];
1387 working_space[4 * fSize + i] =
1388 working_space[4 * fSize + 2 * fSize + i];
1393 for (i = 0; i <
l; i++)
1402 for (i = 0; i <
fSize; i++) {
1407 working_space[2 * fSize + k + j + i % j] =
1408 working_space[j + k / 2 - i % j -
1410 working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
1416 working_space[4 * fSize + 2 * fSize + k + j + i % j] =
1417 -(
Double_t) working_space[j + k / 2 - i % j - 1] * b;
1418 working_space[2 * fSize + k + j + i % j] =
1419 (
Double_t) working_space[j + k / 2 - i % j - 1] * a;
1420 } }
for (i = 0; i <
fSize; i++) {
1424 working_space[2 * fSize + k] = 0;
1425 working_space[4 * fSize + 2 * fSize + k] = 0;
1429 working_space[2 * fSize + k + i % j] =
1430 working_space[2 * fSize + k + 2 * j - i % j];
1431 working_space[4 * fSize + 2 * fSize + k + i % j] =
1432 -working_space[4 * fSize + 2 * fSize + k + 2 * j -
1436 for (i = 0; i < 2 *
fSize; i++) {
1437 working_space[i] = working_space[2 * fSize + i];
1438 working_space[4 * fSize + i] =
1439 working_space[4 * fSize + 2 * fSize + i];
1442 for (i = 0; i <
l; i++)
1445 for (i = 0; i <
fSize; i++) {
1449 val = working_space[k + i % j];
1453 val = working_space[i];
1454 destVector[i] = val;
1459 delete[]working_space;
1623 int i, j=0, k = 1,
m,
l;
1626 Double_t a, b,
pi = 3.14159265358979323846, old_area, new_area;
1656 for (i = 0; i <
fSize; i++) {
1657 working_space[i] = source[i];
1662 for (i = 0; i <
fSize; i++) {
1663 working_space[i] = source[i];
1665 Walsh(working_space, fSize);
1670 for (i = 1; i <= (fSize / 2); i++) {
1671 val = source[i - 1];
1672 working_space[i - 1] = val;
1673 working_space[fSize - i] = val;
1676 for (i = 0; i < fSize / 2; i++) {
1679 b = working_space[i];
1681 working_space[i] =
a;
1682 working_space[i +
fSize] = 0;
1683 } working_space[0] = working_space[0] /
TMath::Sqrt(2.0);
1688 for (i = 1; i <= (fSize / 2); i++) {
1689 val = source[i - 1];
1690 working_space[i - 1] = val;
1691 working_space[fSize - i] = -val;
1694 for (i = 0; i < fSize / 2; i++) {
1697 b = working_space[i];
1700 working_space[i - 1] =
a;
1701 working_space[i +
fSize] = 0;
1703 working_space[fSize / 2 - 1] =
1708 for (i = 0; i <
fSize; i++) {
1709 working_space[i] = source[i];
1714 for (i = 0; i <
fSize; i++) {
1715 working_space[i] = source[i];
1726 for (i = 0; i <
fSize; i++) {
1732 working_space[k + i % j] = val;
1733 working_space[k + 2 * j - 1 - i % j] = val;
1741 working_space[k + i % j] = val;
1742 working_space[k + 2 * j - 1 - i % j] = -val;
1746 working_space[i] = val;
1751 for (i = 0; i < j; i++)
1759 for (i = 0; i <
l; i++)
1762 for (i = 0; i <
fSize; i++) {
1767 b = working_space[k + i % j];
1773 working_space[i] =
a;
1774 working_space[i + 2 *
fSize] = 0;
1781 for (i = 0; i <
l; i++)
1784 for (i = 0; i <
fSize; i++) {
1789 b = working_space[j + k + i % j];
1795 working_space[j + k / 2 - i % j - 1] =
a;
1796 working_space[i + 2 *
fSize] = 0;
1805 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1806 working_space[fSize + i] = working_space[l + i / j];
1807 working_space[fSize + i + 2 *
fSize] =
1808 working_space[l + i / j + 2 *
fSize];
1810 for (i = 0; i <
fSize; i++) {
1811 working_space[i] = working_space[fSize + i];
1812 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
1816 if (!working_space)
return;
1817 for (i = 0, old_area = 0; i <
fSize; i++) {
1818 old_area += working_space[i];
1820 for (i = 0, new_area = 0; i <
fSize; i++) {
1823 new_area += working_space[i];
1825 if (new_area != 0) {
1826 a = old_area / new_area;
1827 for (i = 0; i <
fSize; i++) {
1828 working_space[i] *=
a;
1832 for (i = 0, old_area = 0; i <
fSize; i++) {
1833 old_area += working_space[i +
fSize];
1835 for (i = 0, new_area = 0; i <
fSize; i++) {
1838 new_area += working_space[i +
fSize];
1840 if (new_area != 0) {
1841 a = old_area / new_area;
1842 for (i = 0; i <
fSize; i++) {
1843 working_space[i +
fSize] *=
a;
1850 for (i = 0, old_area = 0; i <
fSize; i++) {
1851 old_area += working_space[i + 2 *
fSize];
1853 for (i = 0, new_area = 0; i <
fSize; i++) {
1856 new_area += working_space[i + 2 *
fSize];
1858 if (new_area != 0) {
1859 a = old_area / new_area;
1860 for (i = 0; i <
fSize; i++) {
1861 working_space[i + 2 *
fSize] *=
a;
1868 for (i = 0; i <
fSize; i++) {
1869 destVector[i] = working_space[i];
1874 Walsh(working_space, fSize);
1875 for (i = 0; i <
fSize; i++) {
1876 destVector[i] = working_space[i];
1881 working_space[0] = working_space[0] *
TMath::Sqrt(2.0);
1882 for (i = 0; i < fSize / 2; i++) {
1887 working_space[i] = (
Double_t) working_space[i] * a;
1888 }
for (i = 2; i <= (fSize / 2); i++) {
1889 working_space[fSize - i + 1] = working_space[i - 1];
1890 working_space[fSize - i + 1 +
fSize] =
1891 -working_space[i - 1 +
fSize];
1893 working_space[fSize / 2] = 0;
1894 working_space[fSize / 2 +
fSize] = 0;
1896 for (i = 0; i < fSize / 2; i++) {
1897 destVector[i] = working_space[i];
1902 working_space[fSize / 2] =
1904 for (i = fSize / 2 - 1; i > 0; i--) {
1906 working_space[i +
fSize] =
1909 }
for (i = 2; i <= (fSize / 2); i++) {
1910 working_space[fSize - i + 1] = working_space[i - 1];
1911 working_space[fSize - i + 1 +
fSize] =
1912 -working_space[i - 1 +
fSize];
1914 working_space[0] = 0;
1915 working_space[
fSize] = 0;
1916 working_space[fSize / 2 +
fSize] = 0;
1918 for (i = 0; i < fSize / 2; i++) {
1919 destVector[i] = working_space[i];
1924 for (i = 0; i <
fSize; i++) {
1925 destVector[i] = working_space[i];
1930 for (i = 0; i <
fSize; i++) {
1931 destVector[i] = working_space[i];
1947 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
1948 working_space[fSize + l + i / j] = working_space[i];
1949 working_space[fSize + l + i / j + 2 *
fSize] =
1950 working_space[i + 2 *
fSize];
1952 for (i = 0; i <
fSize; i++) {
1953 working_space[i] = working_space[fSize + i];
1954 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
1960 for (i = 0; i < j; i++)
1968 for (i = 0; i <
fSize; i++) {
1973 working_space[2 * fSize + k + i % j] =
1975 working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
1981 working_space[4 * fSize + 2 * fSize + k + i % j] =
1983 working_space[2 * fSize + k + i % j] =
1985 } }
for (i = 0; i <
fSize; i++) {
1989 working_space[2 * fSize + k + j] = 0;
1990 working_space[4 * fSize + 2 * fSize + k + j] = 0;
1994 working_space[2 * fSize + k + 2 * j - i % j] =
1995 working_space[2 * fSize + k + i % j];
1996 working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
1997 -working_space[4 * fSize + 2 * fSize + k + i % j];
2000 for (i = 0; i < 2 *
fSize; i++) {
2001 working_space[i] = working_space[2 * fSize + i];
2002 working_space[4 * fSize + i] =
2003 working_space[4 * fSize + 2 * fSize + i];
2008 for (i = 0; i <
l; i++)
2016 for (i = 0; i <
fSize; i++) {
2021 working_space[2 * fSize + k + j + i % j] =
2022 working_space[j + k / 2 - i % j - 1] *
TMath::Sqrt(2.0);
2023 working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
2029 working_space[4 * fSize + 2 * fSize + k + j + i % j] =
2030 -(
Double_t) working_space[j + k / 2 - i % j - 1] * b;
2031 working_space[2 * fSize + k + j + i % j] =
2032 (
Double_t) working_space[j + k / 2 - i % j - 1] * a;
2033 } }
for (i = 0; i <
fSize; i++) {
2037 working_space[2 * fSize + k] = 0;
2038 working_space[4 * fSize + 2 * fSize + k] = 0;
2042 working_space[2 * fSize + k + i % j] =
2043 working_space[2 * fSize + k + 2 * j - i % j];
2044 working_space[4 * fSize + 2 * fSize + k + i % j] =
2045 -working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j];
2048 for (i = 0; i < 2 *
fSize; i++) {
2049 working_space[i] = working_space[2 * fSize + i];
2050 working_space[4 * fSize + i] =
2051 working_space[4 * fSize + 2 * fSize + i];
2054 for (i = 0; i <
l; i++)
2057 for (i = 0; i <
fSize; i++) {
2061 val = working_space[k + i % j];
2065 val = working_space[i];
2066 destVector[i] = val;
2070 delete[]working_space;
2231 int i, j=0, k = 1,
m,
l;
2234 Double_t a, b,
pi = 3.14159265358979323846, old_area, new_area;
2264 for (i = 0; i <
fSize; i++) {
2265 working_space[i] = source[i];
2270 for (i = 0; i <
fSize; i++) {
2271 working_space[i] = source[i];
2273 Walsh(working_space, fSize);
2278 for (i = 1; i <= (fSize / 2); i++) {
2279 val = source[i - 1];
2280 working_space[i - 1] = val;
2281 working_space[fSize - i] = val;
2284 for (i = 0; i < fSize / 2; i++) {
2287 b = working_space[i];
2289 working_space[i] =
a;
2290 working_space[i +
fSize] = 0;
2291 } working_space[0] = working_space[0] /
TMath::Sqrt(2.0);
2296 for (i = 1; i <= (fSize / 2); i++) {
2297 val = source[i - 1];
2298 working_space[i - 1] = val;
2299 working_space[fSize - i] = -val;
2302 for (i = 0; i < fSize / 2; i++) {
2305 b = working_space[i];
2308 working_space[i - 1] =
a;
2309 working_space[i +
fSize] = 0;
2311 working_space[fSize / 2 - 1] =
2316 for (i = 0; i <
fSize; i++) {
2317 working_space[i] = source[i];
2322 for (i = 0; i <
fSize; i++) {
2323 working_space[i] = source[i];
2334 for (i = 0; i <
fSize; i++) {
2340 working_space[k + i % j] = val;
2341 working_space[k + 2 * j - 1 - i % j] = val;
2349 working_space[k + i % j] = val;
2350 working_space[k + 2 * j - 1 - i % j] = -val;
2354 working_space[i] = val;
2359 for (i = 0; i < j; i++)
2367 for (i = 0; i <
l; i++)
2370 for (i = 0; i <
fSize; i++) {
2375 b = working_space[k + i % j];
2381 working_space[i] =
a;
2382 working_space[i + 2 *
fSize] = 0;
2389 for (i = 0; i <
l; i++)
2392 for (i = 0; i <
fSize; i++) {
2397 b = working_space[j + k + i % j];
2403 working_space[j + k / 2 - i % j - 1] =
a;
2404 working_space[i + 2 *
fSize] = 0;
2413 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
2414 working_space[fSize + i] = working_space[l + i / j];
2415 working_space[fSize + i + 2 *
fSize] =
2416 working_space[l + i / j + 2 *
fSize];
2418 for (i = 0; i <
fSize; i++) {
2419 working_space[i] = working_space[fSize + i];
2420 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
2424 if (!working_space)
return;
2425 for (i = 0, old_area = 0; i <
fSize; i++) {
2426 old_area += working_space[i];
2428 for (i = 0, new_area = 0; i <
fSize; i++) {
2431 new_area += working_space[i];
2433 if (new_area != 0) {
2434 a = old_area / new_area;
2435 for (i = 0; i <
fSize; i++) {
2436 working_space[i] *=
a;
2440 for (i = 0, old_area = 0; i <
fSize; i++) {
2441 old_area += working_space[i +
fSize];
2443 for (i = 0, new_area = 0; i <
fSize; i++) {
2446 new_area += working_space[i +
fSize];
2448 if (new_area != 0) {
2449 a = old_area / new_area;
2450 for (i = 0; i <
fSize; i++) {
2451 working_space[i +
fSize] *=
a;
2458 for (i = 0, old_area = 0; i <
fSize; i++) {
2459 old_area += working_space[i + 2 *
fSize];
2461 for (i = 0, new_area = 0; i <
fSize; i++) {
2464 new_area += working_space[i + 2 *
fSize];
2466 if (new_area != 0) {
2467 a = old_area / new_area;
2468 for (i = 0; i <
fSize; i++) {
2469 working_space[i + 2 *
fSize] *=
a;
2476 for (i = 0; i <
fSize; i++) {
2477 destVector[i] = working_space[i];
2482 Walsh(working_space, fSize);
2483 for (i = 0; i <
fSize; i++) {
2484 destVector[i] = working_space[i];
2489 working_space[0] = working_space[0] *
TMath::Sqrt(2.0);
2490 for (i = 0; i < fSize / 2; i++) {
2495 working_space[i] = (
Double_t) working_space[i] * a;
2496 }
for (i = 2; i <= (fSize / 2); i++) {
2497 working_space[fSize - i + 1] = working_space[i - 1];
2498 working_space[fSize - i + 1 +
fSize] =
2499 -working_space[i - 1 +
fSize];
2501 working_space[fSize / 2] = 0;
2502 working_space[fSize / 2 +
fSize] = 0;
2504 for (i = 0; i < fSize / 2; i++) {
2505 destVector[i] = working_space[i];
2510 working_space[fSize / 2] =
2512 for (i = fSize / 2 - 1; i > 0; i--) {
2514 working_space[i +
fSize] =
2517 }
for (i = 2; i <= (fSize / 2); i++) {
2518 working_space[fSize - i + 1] = working_space[i - 1];
2519 working_space[fSize - i + 1 +
fSize] =
2520 -working_space[i - 1 +
fSize];
2522 working_space[0] = 0;
2523 working_space[
fSize] = 0;
2524 working_space[fSize / 2 +
fSize] = 0;
2526 for (i = 0; i < fSize / 2; i++) {
2527 destVector[i] = working_space[i];
2532 for (i = 0; i <
fSize; i++) {
2533 destVector[i] = working_space[i];
2538 for (i = 0; i <
fSize; i++) {
2539 destVector[i] = working_space[i];
2555 for (i = 0, l = 0; i <
fSize; i++, l = (l + k) % fSize) {
2556 working_space[fSize + l + i / j] = working_space[i];
2557 working_space[fSize + l + i / j + 2 *
fSize] =
2558 working_space[i + 2 *
fSize];
2560 for (i = 0; i <
fSize; i++) {
2561 working_space[i] = working_space[fSize + i];
2562 working_space[i + 2 *
fSize] = working_space[fSize + i + 2 *
fSize];
2568 for (i = 0; i < j; i++)
2576 for (i = 0; i <
fSize; i++) {
2581 working_space[2 * fSize + k + i % j] =
2583 working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
2589 working_space[4 * fSize + 2 * fSize + k + i % j] =
2591 working_space[2 * fSize + k + i % j] =
2593 } }
for (i = 0; i <
fSize; i++) {
2597 working_space[2 * fSize + k + j] = 0;
2598 working_space[4 * fSize + 2 * fSize + k + j] = 0;
2602 working_space[2 * fSize + k + 2 * j - i % j] =
2603 working_space[2 * fSize + k + i % j];
2604 working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
2605 -working_space[4 * fSize + 2 * fSize + k + i % j];
2608 for (i = 0; i < 2 *
fSize; i++) {
2609 working_space[i] = working_space[2 * fSize + i];
2610 working_space[4 * fSize + i] =
2611 working_space[4 * fSize + 2 * fSize + i];
2616 for (i = 0; i <
l; i++)
2624 for (i = 0; i <
fSize; i++) {
2629 working_space[2 * fSize + k + j + i % j] =
2630 working_space[j + k / 2 - i % j - 1] *
TMath::Sqrt(2.0);
2631 working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
2637 working_space[4 * fSize + 2 * fSize + k + j + i % j] =
2638 -(
Double_t) working_space[j + k / 2 - i % j - 1] * b;
2639 working_space[2 * fSize + k + j + i % j] =
2640 (
Double_t) working_space[j + k / 2 - i % j - 1] * a;
2641 } }
for (i = 0; i <
fSize; i++) {
2645 working_space[2 * fSize + k] = 0;
2646 working_space[4 * fSize + 2 * fSize + k] = 0;
2650 working_space[2 * fSize + k + i % j] =
2651 working_space[2 * fSize + k + 2 * j - i % j];
2652 working_space[4 * fSize + 2 * fSize + k + i % j] =
2653 -working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j];
2656 for (i = 0; i < 2 *
fSize; i++) {
2657 working_space[i] = working_space[2 * fSize + i];
2658 working_space[4 * fSize + i] =
2659 working_space[4 * fSize + 2 * fSize + i];
2662 for (i = 0; i <
l; i++)
2665 for (i = 0; i <
fSize; i++) {
2669 val = working_space[k + i % j];
2673 val = working_space[i];
2674 destVector[i] = val;
2678 delete[]working_space;
2696 for (; n <
fSize;) {
2701 Error (
"TSpectrumTransform",
"Invalid type of transform");
2705 if (degree > j || degree < 1){
2706 Error (
"TSpectrumTransform",
"Invalid degree of mixed transform");
2725 if(xmin<0 || xmax < xmin || xmax >=
fSize){
2726 Error(
"TSpectrumTransform",
"Wrong range");
2744 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.
std::map< std::string, std::string >::const_iterator iter
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Double_t Sqrt(Double_t x)