From 860a2e338a79d7a01d551bc5a70def43f60bdb77 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Tue, 30 Sep 2003 08:24:40 +0000 Subject: [PATCH] r7928: support 64-bit long ints --- libctsim/backprojectors.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/libctsim/backprojectors.cpp b/libctsim/backprojectors.cpp index 26455fa..b7d320d 100644 --- a/libctsim/backprojectors.cpp +++ b/libctsim/backprojectors.cpp @@ -572,17 +572,21 @@ void BackprojectIntDiff::BackprojectView (const double* const filteredProj, const double view_angle) { double theta = view_angle; // add half PI to view angle to get perpendicular theta angle +#if SIZEOF_LONG == 4 static const int scaleShift = 16; - static const kint32 scale = (1 << scaleShift); - static const kint32 scaleBitmask = scale - 1; - static const kint32 halfScale = scale / 2; +#elif SIZEOF_LONG == 8 + static const int scaleShift = 32; +#endif + static const long scale = (1 << scaleShift); + static const long scaleBitmask = scale - 1; + static const long halfScale = scale / 2; static const double dInvScale = 1. / scale; - const kint32 det_dx = nearest (xInc * cos (theta) / detInc * scale); - const kint32 det_dy = nearest (yInc * sin (theta) / detInc * scale); + const long det_dx = nearest (xInc * cos (theta) / detInc * scale); + const long det_dy = nearest (yInc * sin (theta) / detInc * scale); // calculate L for first point in image (0, 0) - kint32 detPosColStart = nearest ((start_r * cos (theta - start_phi) / detInc + iDetCenter) * scale); + long detPosColStart = nearest ((start_r * cos (theta - start_phi) / detInc + iDetCenter) * scale); double* deltaFilteredProj = NULL; CubicPolyInterpolator* pCubicInterp = NULL; @@ -603,26 +607,26 @@ BackprojectIntDiff::BackprojectView (const double* const filteredProj, const dou if (interpType == Backprojector::INTERP_NEAREST) { for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) { - const int iDetPos = (curDetPos + halfScale) >> 16; + const int iDetPos = (curDetPos + halfScale) >> scaleShift; if (iDetPos >= 0 && iDetPos <= iLastDet) *pImCol++ += filteredProj[iDetPos]; } // end for iy } else if (interpType == Backprojector::INTERP_FREQ_PREINTERPOLATION) { for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) { - const int iDetPos = ((curDetPos + halfScale) >> 16) * m_interpFactor; + const int iDetPos = ((curDetPos + halfScale) >> scaleShift) * m_interpFactor; if (iDetPos >= 0 && iDetPos <= iLastDet) *pImCol++ += filteredProj[iDetPos]; } // end for iy } else if (interpType == Backprojector::INTERP_LINEAR) { for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) { - const kint32 iDetPos = curDetPos >> scaleShift; - const kint32 detRemainder = curDetPos & scaleBitmask; + const long iDetPos = curDetPos >> scaleShift; + const long detRemainder = curDetPos & scaleBitmask; if (iDetPos >= 0 && iDetPos <= iLastDet) *pImCol++ += filteredProj[iDetPos] + (detRemainder * deltaFilteredProj[iDetPos]); } // end for iy } else if (interpType == Backprojector::INTERP_CUBIC) { for (int iy = 0; iy < ny; iy++, curDetPos += det_dy) { - *pImCol++ += pCubicInterp->interpolate (static_cast(curDetPos) / 65536); + *pImCol++ += pCubicInterp->interpolate (static_cast(curDetPos) / scale); } } // end Cubic } // end for ix -- 2.34.1