| 74 | } |
| 75 | |
| 76 | std::vector<af_seq> calcPadInfo(dim4& inLPad, dim4& psfLPad, dim4& inUPad, |
| 77 | dim4& psfUPad, dim4& odims, dim_t nElems, |
| 78 | const dim4& idims, const dim4& fdims) { |
| 79 | vector<af_seq> index(4); |
| 80 | |
| 81 | for (int d = 0; d < 4; ++d) { |
| 82 | if (d < BASE_DIM) { |
| 83 | dim_t pad = idims[d] + fdims[d]; |
| 84 | |
| 85 | while (greatestPrimeFactor(pad) > GREATEST_PRIME_FACTOR) { pad++; } |
| 86 | |
| 87 | dim_t diffLen = pad - idims[d]; |
| 88 | inLPad[d] = diffLen / 2; |
| 89 | inUPad[d] = diffLen / 2 + diffLen % 2; |
| 90 | psfLPad[d] = 0; |
| 91 | psfUPad[d] = pad - fdims[d]; |
| 92 | odims[d] = pad; |
| 93 | index[d].begin = inLPad[d]; |
| 94 | index[d].end = index[d].begin + idims[d] - 1; |
| 95 | index[d].step = 1; |
| 96 | |
| 97 | nElems *= odims[d]; |
| 98 | } else { |
| 99 | inLPad[d] = 0; |
| 100 | psfLPad[d] = 0; |
| 101 | inUPad[d] = 0; |
| 102 | psfUPad[d] = 0; |
| 103 | odims[d] = std::max(idims[d], fdims[d]); |
| 104 | index[d] = af_span; |
| 105 | } |
| 106 | } |
| 107 | return index; |
| 108 | } |
| 109 | |
| 110 | template<typename T, typename CT> |
| 111 | void richardsonLucy(Array<T>& currentEstimate, const Array<T>& in, |
no test coverage detected